Fantom (formerly called Fan) is unique among the languages discussed here in that it generates bytecode at runtime for either the JVM or Microsoft's .Net platform. The language is object-oriented with many of the same features described previously for Groovy and JRuby, except that integration with the Java libraries is not as seamless: A special interface is required to interact with existing Java bytecode. Fantom makes up for this shortcoming in part by having extensive libraries of its own.

The language follows the vision of its designers, Andy and Brian Frank, who originally wrote it to develop a large package of real time software for one of their clients. Their vision, much like that of Groovy's and JRuby's designers, is to make coding easier. They've eliminated a fair amount of ceremony, but pushed ahead into new areas to make some interesting choices.

For example, all integers and floating-point values are 64 bits wide. This means that for all intents, the results of arithmetic operations cannot overflow the size limits of the resulting field. (This problem can lead to hard-to-find bugs that can have disastrous results on calculations.) Fantom also includes built-in support for concurrency (parallel programming) via actors, a trait shared by only Scala in this roundup.

The libraries have been thought through to follow a different model than the standard APIs from Java and .Net, which are anything but orderly. As a result, it's easy to anticipate which API is needed for a specific function and where it can be found. Becoming productive with Fantom is made even easier by the excellent documentation at the Fantom website.


Like many of the niche languages, Fantom suffers from limited support via external tools. Its only IDE support, for example, is a single plug-in to the NetBeans product. This is likely to change as the community for Fantom grows and its unique design and cross-platform characteristics become more widely known.