Microsoft Dynamics AX

A Brief History about Microsoft Dynamics AX and also a honoring of the team that build this great product.

In 1983, brothers Erik and Preben Damgaard developed a primitive ERP product called DANMAX in their parent’s garage. This product subsequently developed into Concorde that became one of the two main ERP packages on the Danish market. This product featured a programming language called XAL; This name was conceived because the competition at the time, Navision, had a language called AL (for Application Language): Not to be outdone, Erik Damgaard named his language eXtended Application Language, or XAL. By any standards it was a very crude language, with Pascal-like syntax (Pascal was the popular language at the time, and served as the main inspiration for XAL), but its redeeming quality was that domain experts with limited computer science or programming background could write code in it. The programming model was based on triggers (what we would call events today). Developers typically inserted small snippets of code to be triggered when data was inserted, updated or deleted.

As Concorde XAL was taken from the DOS and OS/2 console windows to Windows and Presentation manager, more and more changes were made to the application language. At this time (around 1996), Java had become the language du jour, and it (and other languages, like C++ and Object Pascal) had popularized the concepts of object oriented programming. Object oriented concepts were introduced, along with other improvements and at one point it was determined that there was no way to provide an upgrade path to the Concorde XAL users, and a new product saw the light of day. This was the first version of Axapta released in 1998: It introduced a development platform that we have been using ever since, including the pervasive use of metadata, the Application Object Tree and all the other concepts of MorphX, and the X++ language.

The original X++ compiler is a one pass compiler written in C++: Everything, from resolving macros, to semantic analysis and code generation and cross reference generation is done in one pass. Obviously this complicates the compiler enormously, but it was done this way because of the state of the hardware of the time: At that time, the 80286 chip was ubiquitous, and workstations of that time could access less than 1MB of memory.

The original compiler generates PCode that is subsequently interpreted by a custom built interpreter, much like is the case for Java and its virtual machine. A set of supporting tools were built (debugger, code coverage, performance analysis etc.) around this infrastructure.

Later the Damgaard Company merged with arch-rival Navision, and ultimately got acquired by Microsoft in 2002. Sometime later, after fruitless endeavors into Green and Fenway, in 2006 the Axapta platform was better integrated with the Microsoft stack, including support for interoperability between X++ and managed code.

In Ax 2009 an alternative to the X++ PCode interpreter was provided, to allow code running in certain scenarios to be run as managed code. The generation of managed code was based on keyhole generation from the PCode generated by the legacy compiler.

Since then more and more of the development scenarios have been moved from MorphX to the Visual Studio (henceforth: VS) environment: In particular the legacy reporting framework has been completely deprecated, and replaced with a SSRS designer in VS.

Peter Villadsen Principal
Program Manager – X++ team

Thanks Peter for the first contribution !