and is released under the GNU General Public License version 2 or later. Compiler The Haxe language can compile into bytecode that can be executed directly by the virtual machines it targets. It can compile to source code in C++, JavaScript, PHP, C#, Java, Python and Lua. Haxe also has an interpreter called eval. This same interpreter is also used compile-time to run macros, which allow modification of the AST. This strategy of compiling to multiple source code languages is inspired by the write once, run anywhere paradigm. It also allows the programmer to choose the best platform for the job. Typical Haxe programs run identically on all platforms, but developers can specify platform-specific code and use conditional compilation to prevent it from compiling on other platforms. The Haxe compiler is an optimizing compiler, and uses field and function inlining, tail recursion elimination, constant folding, loop unrolling and dead code elimination (DCE) to optimize the run-time performance of compiled programs. The Haxe compiler offers opt-in null-safety, it checks compile-time for nullable values. Targets In Haxe, supported platforms are known as "targets", which consist of the following modules: The compiler-backends that are responsible for generating the respective code. The run-time specific APIs that go beyond the core language support (platform-targets). The following table documents platform and language support in Haxe. The Haxe language allows developers to gain access to many platform features, but Haxe is not a full featured engine, they might need frameworks that enable create content for certain platforms. Advantages of Haxe Ability to target multiple platforms and devices using the same language Ability to use strictly-typed code Ability to use macros (syntax transformation) which can be done with Haxe language Added language features such as extension methods and functional programming The run-time performance of Haxe programs is at comparable speed to handwritten sources. Language Haxe is a general-purpose language supporting object-oriented programming, generic programming, and various functional programming constructs. Features such as iterations, exceptions, and code reflection are also built-in functions of the language and libraries. Unusual among programming languages, Haxe contains a type system which is both strong and dynamic. The compiler will check types implicitly using type inferencing and give compile-time errors, but it also enables the programmer to bypass type-checking and rely on the target platform's dynamic type-handling. All of the native target APIs can be used. Type system Haxe has a sophisticated and flexible