Skip to content

nikodemus/foolang

Repository files navigation

Foolang

CI License: MIT

This is a toy language implemented by a single person—use for quiet enjoyment only.

See https://foolang.org for syntax, design notes, etc. This README is a smaller version of the main page there.

See CONTRIBUTING.md for information on how to contribute. You'll be the first. :)

About

Foolang is a Smalltalk-inspired language that, like all new languages, has somewhat optimistic aspirations:

  • Elegance and power of Smalltalk and Self: Smalltalk/Objective-C -like syntax, deep object orientation, late binding, interactive development.

  • Performance of C++: AOT compilation to native code, support for early binding so that the compiler can do its thing, low-level datatypes and operations when you need them for performance.

  • Fault tolerance of Erlang: Actor-model, isolated heaps, and supervisors. No undefined behaviour. No deadlocks, or memory errors or races.

  • Multiplatform Citizen of the Web: WASM is a supported target in addition to Windows, MacOS, Linux, and BSDs.

"Are we there yet?"

🤣

Syntax is still going to change, WASM isn't supported, BSDs might work but aren't tested, early binding support isn't quite there, compiler is a work-in-progress trivial transpiler, actors and continuations haven't even been started, there is no interactive development environment to speak of, etc.

Hello World

class Main {}
    direct method run: command in: system
        system output println: "Hello world"!
end

Repository Organization

In rough order of interest:

foo/       Foolang code, including prelude, self hosting, tests, and examples
src/       Rust code for the bootstrap interpreter
docs/      Markdown files for the https://foolang.org website
elisp/     Emacs mode for Foolang
c/         Scaffolding for transpiled-to-C code
tests/     Rust code for integration tests
ext/       External C code included in the runtime, like dtoa.c.