The last months I have been working in a new side project just for fun: Jupiter, a programming language based on Smalltalk. It features a simple bytecode interpreter virtual machine with a mark&sweep garbage collector. Nothing fancy there, but I added some features to the language that I think are worth exploring:
- A set of simple core types: Numbers ( Just one type of numbers ), Strings, Arrays ( number indexed collections ) and Maps ( String indexed collections ).
- Immutable data structures.
- There are no classes. Objects are created copying other objects ( prototypes ). Thanks to immutability no special semantics is needed to achieve this.
- Code reuse through composition instead of inheritance. Deep hierarchies often are a source of incidental complexity.
- Unix friendly: Its source code is stored in files, which is not the ‘Smalltalk way’, but this allow easy interaction with other Unix tools, like git, grep, IDE’s/text editors etc..
In my opinion Smalltalk and its cousin Self are very interesting programming languages. Seems that nowadays are relegated to niche languages, due to reasons beyond the scope of this article (although Pharo has a quite active community), nevertheless, I think we can still learn a lot from this ‘old’ technologies.
Contributions are very much welcome. Just open a pull request or an issue in Github :)
Edit 2018-05-18: Check out the brand new Juno IDE, a Smalltalk-like IDE for the Jupiter Programing Language