The Felix Programming Language

Felix Version
Felix Live
Download Instructions
Tutorial
Felix is a new programming language in the ML family.
Easy to Deploy: Felix is designed as a scripting language so it is as easy to use as Ruby, Python or PHP, and provides the same kind of platform independence and rapid prototyping.

Easy to read and write: Felix code is syntactically clean and provides many shortcuts for common requirements. The strongest feature here is what is left out: there are no classes and so you can't get bogged down in object oriented method spaghetti.

High performance is delivered by advanced data structures, whole program analysis with heavy inlining, and other high level optimisations. Felix then generates C++ which is then optimised at the low level by your favourite ISO C++ compiler to generate machine binaries instead of bytecode. The result is sometimes faster than hand written C and can you can always embed C directly in your Felix code if required.

Reuse C and C++ libraries: Felix provides a simple way to bind almost seamlessly to C and C++ code, so you can continue to use all your favourite libraries: compatibility is assured because Felix uses the C/C++ object model.

Program correctness is supported by a wide range of features including garbage collection for automatic storage management, strict high power static typing including overloading, parametric polymorphism, Haskell style type classes, and type constraints.

Contract programming: Felix provides the best contract programming system of any production language. It has the usual assertions, pre-conditions, and post-conditions for functions, but also provides reductions, axioms, lemmas and theorems. Abstract typing is supported by modules, and contol over visibility.

Type system: The type system is formally an enhanced version of the typed lambda calculus plus pattern matching. A wide range of functional programming constructions including first class nested functions with closures are provided. Felix also provides a range of type constructors including tuples, records, and stucts, cases and variants.

FibresFelix provides fibres, also known as cooperative multi-tasking. Fibres are threads which exchange control by transmission of data on channels.

Network programming is enhanced by a built-in asynchronous network I/O system coupled with both pre-emptive threads and uses channels for synchronisation.

User defined syntax: Felix is designed to support domain specific sublanguage development. The standard grammar is dynamically loaded and inline grammar extensions are relatively easy to program. Felix uses an EBNF variant for the grammar with parser actions coded in Scheme. The underlying parser is Dypgen, an extensible GLR parser.

Google mailing list: felix-language@googlegroups.com

Sourceforge mailing list: felix-language@lists.sourceforge.net

website: felix-lang.org

Home Page Translation: Romanian