Introduction

fble-0.5 (2025-07-13,fble-0.4-212-ga8f8ad0f)

In this tutorial you'll be introduced to the fble programming language, where it comes from, what it's for, and why you should bother learning it.

Origins

To understand the origins of fble, you need to know a little about me, the author of this tutorial and the creator of the fble programming language.

I love programming. I program for a living and as a hobby. One of the first questions I ask when starting a new project is what programming language to use for it.

The first programming language I learned was C++, which I learned taking classes in college. I wrote a Javascript interpreter in C++ for the fun of it and started playing around with the TCL scripting language and Java. At some point I started programming in pure C and using Python for scripting. I was introduced to functional programming in graduate school via Bluespec and then Haskell.

The trouble is, none of these languages have everything I'm looking for. I want the simplicity of C, the performance of C and C++, support for generics from C++, Java, and Haskell, automatic memory management from Java and Haskell, the strong type system of Haskell, and the hardware generation capabilities of Bluespec. I don't want the lack of generics in C, the complexity of C++, the verbosity of Java, the performance challenges and obscurity of Haskell, or the awkwardness of writing software in Bluespec.

I decided to see if I could design my own programming language to match my desires, and thus the Fable project was born. I progressed through a series of language prototypes and rewrites: fbla, fblb, fblc, fbld, and at last, where we are today, fble.

Note: "fble" is pronounced as four separate letters f-b-l-e, with stress on the f: /'ef.biː.el.iː/.

The fble Language

Here is how I think of the fble language.

Start with the simplicity of C. Redesign the foundations from the ground up based on a strong type system and functional programming. Use automatic memory management and make sure there is a clear way to reason about performance. Include support for generics and modularity. Remove as many hard edges, corner cases and redundancies in the language as possible.

The result is a simple, general purpose, statically typed, strict, pure functional programming language with automatic memory management, support for polymorphism and modularity, user-defined primitive data types, and a hint of C-like syntax.

Why Learn fble

Here are some reasons why you should learn fble:

The fble language is still early days. The following are not yet reasons for you to learn fble:

Next Steps

Head over to the Language Features tutorial to get a quick overview of how the fble programming language compares to other programming languages.