Skip to content
vic

felix-lang/felix

The Felix Programming Language

felix-lang/felix.json
{
"createdAt": "2010-03-02T07:11:15Z",
"defaultBranch": "master",
"description": "The Felix Programming Language",
"fullName": "felix-lang/felix",
"homepage": "",
"language": "C",
"name": "felix",
"pushedAt": "2024-09-23T10:54:31Z",
"stargazersCount": 814,
"topics": [
"c-plus-plus",
"code-generator",
"compiled",
"compiler",
"coroutine-framework",
"coroutines",
"functional-programming",
"ocaml",
"parametric-polymorphism",
"performant",
"platform-independent",
"polymorphism",
"programming",
"programming-language",
"scripting-language",
"static-analysis",
"type-classes"
],
"updatedAt": "2025-11-20T02:53:45Z",
"url": "https://github.com/felix-lang/felix"
}

An advanced, statically typed, high performance scripting language with native C++ embedding.

This file:

hello.flx
println$ "Hello World";

can be run directly:

Terminal window
flx hello.flx

It just works. No makefiles. No compiler switches. Automatic caching and dependency checking for Felix and C++. Uses a flx_pkgconfig database consisting of a directory of *.fpc files to specify and find libraries and header files based on in language abstract keys.

The aim is to run faster than C.

Underneath Felix generates highly optimised machine binaries which outperform most interpreters, bytecode compilers, virtual machines, and sometimes compiled languages including C and C++.

Felix is an aggressive inliner which performs whole program analysis and high level optimisations such as parallel assignment, self-tail call elimination.

Felix generates optimised C++ which is then compiled and optimised again by your system C++ compiler.

CompilerAckTakfp
Felix/clang3.716.23
Clang/C++3.956.29
Felix/gcc2.346.60
Gcc/C++2.256.25
Ocaml2.938.41

Felix is a C++ code generator specifically designed so that all your favourite C and C++ libraries can be embedded with little or no glue logic:

// required header
header vector_h = '#include <vector>';
// C++11 for smart pointers
header memory_h = '#include <memory>'
requires package "cplusplus_11"
;
// types
type vector[T] = "::std::shared_ptr<::std::vector<?1>>"
requires vector_h, memory_h
;
type viterator[T] = "::std::vector<?1>::iterator"
requires vector_h
;
// constructor
ctor[T] vector[T] : unit = "::std::make_shared<::std::vector<?1>>()";
// operations
proc push_back[T] : vector[T] * T = "$1->push_back($2);";
proc push_back[T] (v: vector[T]) (elt:T) => push_back(v,elt);
fun stl_begin[T] : vector[T] -> viterator[T] = "$1->begin()";
fun deref[T] : viterator[T] -> T = "*$1";
// example use
var v = vector[int]!();
v.push_back 42;
println$ *v.stl_begin;
  • Python 3
  • Ocaml 4.06.1 (only for source build)
  • C++ compiler: g++, clang++, or msvc
  • SDL2 for graphics
  • GNU GMP, GNU GSL
git clone https://github.com/felix-lang/felix.git
cd felix
. buildscript/linuxsetup.sh
make
sudo make install # optional!
git clone https://github.com/felix-lang/felix.git
cd felix
. buildscript/macosxsetup.sh
make
sudo make install # optional!

On platforms supporting Nix, you can set up a build and runtime environment by running:

git clone https://github.com/felix-lang/felix.git
cd felix
nix-shell shell.nix
. buildscript/linuxsetup.sh
make

This will do an in place “install” of the Felix binaries. Note that this should work on OS X with Nix, but needs to be tested.

Follow the instructions on the Wiki.

Use provided [PKGBUILD]!(./src/misc/PKGBUILD) to make an installable package. It is also available in the AUR repository

cd src/misc
makepkg
sudo pacman -U felix-VERSION.pkg.tar.xz

http://github.com/felix-lang/felix/releases

Appveyor, Windows build: Build Status Travis, Linux build: Build Status

TitleURL
Documentation Masterhttp://felix-documentation-master.readthedocs.io/en/latest/
Felix Tutorialhttp://felix-tutorial.readthedocs.io/en/latest/
Installation and Tools Guidehttp://felix-tools.readthedocs.io/en/latest/
Felix Language Reference Manualhttp://felix.readthedocs.io/en/latest/
Felix Library Packageshttp://felix-library-packages.readthedocs.io/en/latest/
Articles on Modern Computinghttp://modern-computing.readthedocs.io/en/latest/
Felix Home Pagehttp://felix-lang.github.io/felix
Felix Wikihttps://github.com/felix-lang/felix/wiki
Git Repositoryhttps://github.com/felix-lang/felix
Binary Downloadhttp://github.com/felix-lang/felix/releases

mailto:felixpl@googlegroups.com

Felix is Free For Any Use (FFAU)/Public Domain.