Sunday, February 21, 2010

Reia: new branch merged

If you've been following Reia, you're probably aware I started on a new branch intended to correct problems with the language's initial design and implementation. That branch has now been merged into "master" and is now the definitive implementation of Reia going forward.

Here's a short summary of the changes:
  • Significantly faster at loading code
  • All Reia core types are identical to their Erlang counterparts
  • Methods of all core types are now self-hosted in Reia (some such as List couldn't be before)
  • All code is compiled: no more metacircular evaluation
  • Records are used extensively in the compiler implementation, making the code easier to understand and change
  • Standard bitwise operators from the C family of languages are now implemented
  • Standard +=, *= etc assignment operators are now implemented
  • "Magic Rebinding": members of lists, tuples, and dicts can now be assigned directly. "Bang" operator allows modification of the methods of receivers.
  • Concurrent object model is gone (to be reintroduced in Reia 2.0)
  • Old standard library is gone (to be rewritten with immutable objects)
As part of this merge, I've gone through the Reia Wiki, bring it up-to-date with all of the changes which have gone into the new branch. I believe I've caught them all, but if you see anything documented in the Wiki which doesn't seem to work, please let me know.

These represent that majority of hurdles which needed to be overcome before a Reia 0.1 release. However, one major feature is still missing: immutable objects. Reia will implement all types, including its core types, and user defined types, as immutable objects. You can think of these like objects in any other language, except once constructed they cannot be changed. Objects with changing state will be provided by the concurrent object model of Reia 2.0.

This means Reia will be an "everything is an object" language after all. I will provide the details of immutable objects in a follow up blog post.