powerlang / egg

Egg Smalltalk
https://eggsmalltalk.org
MIT License
16 stars 3 forks source link
smalltalk smalltalk-interpreter smalltalk-virtual-machine

Egg Smalltalk 🥚

Egg is a MIT-licensed implementation of a Smalltalk-80 derived environment. Egg is not strictly a ST80 though. Some egg characteristics and intentions are:

Contents of this repo

This repository includes the Smalltalk sources of Egg (in modules directory) as well as the different runtime implementations (runtimes directory). Some runtimes allow to generate Egg images from files, i.e. to bootstrap images (currently only possible from runtime/pharo).

Using

If you just want to use egg, download the corresponding build artifact from releases. Currently, our only working platforms are Pharo and JS, native ones will come soonâ„¢. You'll find supported platforms in /runtime subdirectories. Look for individual README.md on each of them to find specific help about using that platform.

Each subdir of runtime implements a VM that can run Egg code in a different platform. All platforms use the same Egg code, which is stored in modules directory. For now we have the following runtimes:

Building

To build egg from scratch you will need make and some tools that vary depending on your target platform (i.e. CMake and a C++ compiler for the cpp VM, Pharo for the egg VM that runs on top of Pharo, node.js if you want to host your egg in JavaScript as a server). In a nutshell, clone this repo and follow the steps provided in the respective platform READMEs in runtime subdirs.

git clone git@github.com:powerlang/egg.git
make <platform>

where platform can be js, cpp or lmr (only js works right now, we are actively working in supporting the other two).

Project status

There are (at least) two mostly orthogonal sides in this project: runtimes and Egg Smalltalk modules. In the Egg Smalltalk axis, we already have: kernel, compiler, modules and image-segment builder, among others. In runtime axis, we started using Pharo as a dev platform as it is the easiest to get working (it already includes a GC and JIT), then also implemented a VM for egg in JS, one in C++ and also an LMR (a Live Metacircular VM Runtime, a.k.a. a Smalltalk-in-Smalltalk VM).

We haven't done a 1.0 release yet, so expect a bumpy road if trying egg in the short term, the code is in alpha state.