BEAM 2 Project - 'safe BEAM' built in Rust

Lee’s “BEAM 2.0” project

* Lee provided an ad-hoc update on his “safe BEAM” built in Rust
* Along with a project that emerged from it, called Silica
* Further information, discussion and possible collaboration in EEF Slack’s Security WG channel

Any public pointers or information that can be shared, without the need to be part of the EEF Slack? This could be of interest to a wider audience if shared, with more people involved then?

1 Like

I’ve been waiting for someone to post about this. I was incredibly excited to hear about the project, and unfortunately quite let down to hear that NIFs would not be supported. IMHO, without the ability to “just use a new compiler with close the zero changes” it’s effectively DOA.

The idea of having to re-implement any/all NIFs and/or external C based components such as Open SSL is a huge blocker.

Don’t get me wrong, I’m still hugely excited about this effort, but IMHO, it needs to be seamless. There are many components in production use that cannot easily be replaced with re-writing in Sicla at without significant cost.

If I could just a command to compile a project with zero changes I’d be 100% in to test, without it …

Will still follow what’s happening and excited to see what it brings to the table

1 Like

Sorry, this is going to be long.

I’m not ready to go public with the repo yet. Some things are still in design others are in progress. I can’t see a way to add the specification files to a post here, and they are large being specification files. These files are well on their way to being ‘fixed’ for an initial release. I will add them to the general slack channel and they can be distributed by people there. The files are open to useful and thoughtful suggestions and modifications.

I will say this directly here, there are several design decisions driving the development of Silica;

  1. The production of Silica is not an academic exercise. It is intended for business use.
  2. Silica is a language that is close to the chip instead of using the PDP-11 computer model that most if nearly all current languages use.
  3. The initial target for Silica is the creation of operating systems and virtual machines though Silica is a general purpose language.
  4. Silica is designed from the bottom up to be a safe language. Safety is the overriding principle. Speed is the second overriding principle. Silica safety includes memory safety as well as other things that are in progress regarding encryption.
  5. Silica is a functional programming language.
  6. Silica has traits and any effects (side effects) must be specifically declared or the functions producing them can not be used (another safety feature). Using such functions without the effect declaration produces a compiler error.
  7. You will find that BEAM languages map quite well to silica.
  8. Silica is not intended to replace BEAM languages. The first target for the first release of Silica is to write a replacement for the current BEAM. This was the impetus for creating Silica in the first place.
  9. The silica compiler emits assembly. Any assembler and linker can be used after that to complete compilation. I’m currently using both Rust and Clang assemblers and linkers during development of the phase2 compiler.
  10. Silcia is very strongly typed.

Being familiar with BEAM languages means you are well on your way to being familiar with Silica but don’t expect to find syntactic sugar in Silica.

So where does development sit as of today?

The bootstrap compiler, written in Rust, is ‘done.’ It has support for all the items listed below, lightweight processes, cases, traits, effects, safe, direct access to memory including buffers, etc.

The phase2 compiler, written in Silica is in progress. This is what exists in the phase2 compiler right now.

main functions with returns to the OS (several types).
atoms with comparison and print_atom/1
int8 with arithmetic and print functions.
int16 with arithmetic and print functions.
int32 with arithmetic and print functions.
int64 with arithmetic and print functions.
uint8 with arithmetic and print functions.
uint16 with arithmetic and print functions.
uint32 with arithmetic and print functions.
uint64 with arithmetic and print functions.
float16 with arithmetic and print functions.
float32 with arithmetic and print functions.
float64 with arithmetic and print functions.
string with concatenate, substring (multiple), and print functions.
tuple composition and decomposition.

My external target for a usable first release is the beginning of September, 2026 (this year). My internal, personal target is the end of June. If things keep going as well as they have and life doesn’t interfere, It may be ready by the end of April 2026. In two months. Don’t hold me to my internal goal dates.

2 Likes

@LeeB Is silicia also going to be an actor based concurrency focused language a la Erlang or Pony? Or is it just meant for implementing something like Erlang