Some Informations on Motion-Types

posted on 2004-12-15

At my company, Motion-Twin, we no longer use ActionScript 1 or 2 to develop Flash content. We use instead Motion-Types which is our in-house made programming language. What makes MTypes more powerful than, let’s say, AS2?
First MTypes is based on the same technology as MTASC (actually MTASC comes from MTypes), that means fast compilation and direct SWF generation (no need for Flash IDE).

MTypes has also several key-features that are coming from recent programming language research such as :
- polymorphism : you can write functions that operates on several types at the same time
- type inference : most of the time you don’t write any type in MTypes, the types of your variables are deducted by compilation. Let’s say that you write “var x = f()”. If you know the return type of “f”, then you can bind it to “x” directly. And if you don’t know it, then find it ! This way you end up writing dynamicly-typed looking program while in fact all your code is correctly and strongly typed.
- structural subtyping : in classical OO (most of the languages such as C++, Java, AS2 or C#) a type B is a subtype of a type A only if B “extends” or “implements” A. MTypes let you free to define your classes independantly with the following rule : B is a subtype of A if all fields of A are in B (with same types). This way any class having “var x : int, y : int” will automagicaly be a “Point”, no need to implements or extends Point : this makes the relation between you classes more flexible and implementation (inheritance) independant from structure (types).
- anonymous functions : lambdas are powerful, function that returns functions, partial applications. If you don’t know functionnal programming, you should have a look at it !
- first order functional types : using classical ML notation, functional types can be expressed this way : “String -> int -> bool” is a function taking one String and one int as parameters and returning one bool.
- anonymous objects types : you can write the following , var p : { x : float, y : float, name : String }; For pure data structures, you don’t need to define a type, and still everything will be correctly typed !

And even more, but most important have been said.