Letlang — Road to v0.1

David Delassus
8 min readNov 24, 2022

Recently, I introduced you to Letlang, my programming language targetting Rust. I was happy to present a proof of concept which was able to compile a few programs and its website: https://letlang.dev

Since then, a lot happened…

💥Reducing the scope

Letlang was an ambitious project, too ambitious maybe. Many planned features were either too complex or downright impossible. This is why I decided to get rid of them. A less ambitious project is surely more likely to be released.

Among the deleted features:

🔥 No more sets, no more infinite sets

The usefulness of infinite sets is debatable. Regardless of that aspect, the design of the type system and the presence of sets were introducing the Russel paradox:

Let S be the set of all sets not containing itself. Does S contains S?

If it does not, it should. If it does, it should not.

🔥 No more solvable{} block

The solvable{} block was introducing a proof assistant right in the language, it was to be used for class definitions.

How big the runtime would be? What about the performance? Is it really useful when other really good proof assistants like coq exists?

Those questions ended up convincing me that, no I should not include this in the language.

🔥 No more ==> and <==> operators

This one is a direct consequence of the previous point. Without a proof assistant, those operators do not make sense anymore (<==> becomes just an equality operator, duplicating =).

Without quantified variables (thereis x or forall y), those logical connectors proves nothing.

♻️ Coroutines are replaced by Erlang-like processes

Initially, Letlang’s coroutines were inspired by Go’s goroutines. The problem was the coherence of this feature with the side-effects/exceptions feature.