Skip to content

Latest commit

 

History

History
118 lines (85 loc) · 3.85 KB

README.md

File metadata and controls

118 lines (85 loc) · 3.85 KB

Elijah Language:
An experimental successor to C++/Java

** Note that Elijah is not ready for use.

Quicksort code in Elijah. Follow the link to read more.

Fast and works with C++

  • Performance matching C++ using anythin but LLVM, with low-level access to bits and addresses
  • Interoperate with your existing C++ code, from inheritance to templates (IMPORTANT)
  • Fast and scalable builds that work with your existing C++ build systems (hello meson)

Modern and evolving

  • Solid language foundations that are easy to learn, especially if you have used C++

  • Easy, tool-based upgrades between Elijah versions

  • Safer fundamentals, and an incremental path towards a memory-safe subset

  • Simple deployment into existing codebases

Welcoming open-source community

  • Code only approach (for now I guess)

Why build Elijah?

  • Maintain legacy
  • (Incremental improvement)
  • Better organization
  • Developer experience
  • Integration

Just use this

Personally I think if you didn't choose Erlang, you're already on the wrong path, but that's not always possible, I guess

  • Rust, Go
  • Kotlin, Scala, Clojure

Developers that can use one of these existing languages should.

** Unfortunately, the designs of these languages present significant barriers to adoption and migration from C++. These barriers range from changes in the idiomatic design of software to performance overhead.

Elijah is designed around interoperability with C++ as well as large-scale adoption and migration for existing C++ codebases and developers.

A "successor language" for C++ requires:

  • Performance matching C++, an essential property for our developers.
  • Seamless, bidirectional interoperability with C++, such that a library anywhere in an existing C++ stack can adopt Elijah without porting the rest. (IMPORTANT)
  • A gentle learning curve with reasonable familiarity for C++ developers.
  • Comparable expressivity and support for existing software's design and architecture.
  • Scalable migration, with some level of source-to-source translation for idiomatic C++ code.

Language Goals

We are designing Elijah to support:

  • Performance-critical software
  • Software evolution
  • Code that is easy to read, understand, and write
  • Practical safety and testing mechanisms
  • Fast and scalable development
  • Modern OS platforms, hardware architectures, and environments
  • Interoperability with and migration from existing C++ code

Project status

Elijah Language is currently an experimental project. There is no working compiler or toolchain.

Maybe I will write an interpreter "later".

We want to better understand whether we can build a language that meets our language criteria.