In a couple of weeks the first version of my new minimal embeddable scripting language is ready.

A few weeks ago I started working on the official successor to YAMP. While YAMP was just an experimental project it was highly successful. It formed the core for Sumerics, which is now open-sourced and was good enough to win the Intel AppInnovation Contest 2012. It also has been used in many projects such as the great SineRider of Chris Walker. Nevertheless, YAMP was always a little bit too bulky and not so easy to understand and use correctly.

Now the successor of YAMP was planned for a while. The original plan was to replace YAMP with Mustang. I wrote this more than two years ago and even though the plan remained the same for a while it is now clear that this is not longer true. While Mustang is not dead yet it is clear that Mustang will be much more than a successor to YAMP. I don't want to go into details now and I am not sure if I will ever have the energy to finish this project, but I do hope that at some point in time I am able to share more details / publish the language / project.

This brings me directly to MAGES. MAGES is the new official successor to YAMP and this time its already out and happening in the open. Only the most basic project setup steps have been performed internally - since 3 weeks the repository is live on GitHub and everything is (currently slowly) happening publicly.

What are the major objectives for MAGES? It should be quite compatible to YAMP, i.e., for users most things should just work. However, under the hood a lot of things have gotten better. MAGES understands code much better and offers a much simpler, yet more powerful API. Also it only uses .NET datatypes. There are no wrappers. Even matrices are just simple double[,] instances. Objects are IDictionary<String, Object> instances. However, for simplicity only a subset of types is supported - with generic wrappers being available.

The idea behind MAGES is to offer any .NET (3.5 and higher) application the possibility to embed a lightweight language that is easy to control and use. The performance is desired to be much better than YAMP (at least 20% faster, much better object-reuse / less GC pressure) and should offer the right compromise between flexibility and performance.