Skip to content
Ross Angle edited this page Apr 7, 2014 · 2 revisions

The Era project is an ambitious combination of several experimental programming language features, broken apart over a few projects that are mostly separate for now.

(The numbers represent design progress and implementation progress on a scale from 0 to 5.)

  • (4 4) Penknife, a lispy language of controlled aliasing and controlled imperative effects.
  • (3 2) The Era knowledge module system, which will ensure non-conflict and enable extensibility with no closed world assumption.
  • (2 0) The Era extension module system, which will allow the closed world assumption.
  • (4 1) The Era package format, which will encode Era's extension modules and knowledge modules as shareable files.
  • (1 1) A formal model for multi-stage programming where the flow of values between stages as as seamlessly supported as data flow and control flow.

Era's approach to modularity will enable a vastly more useful notion of code sharing. Knowledge modules can safely be installed in any system without breaking it. Both knowledge and extension modules use set-like composition, so the instructions for installing and uninstalling modules will be quite easy. Programmers will finally be able to split functionality across multiple components without overly complicating the installation process.

Penknife has variable semantics that make it easy to enforce linearity constraints and build first-class dataflow pipelines. It also uses first-class capabilities to control access to side effects, which makes it easy to enforce that the pipeline-related code uses only pipeline-related effects.

Penknife's lispy textual syntax is itself a major departure from other languages. Penknife's string syntax can nest without accumulating escape sequences, and Penknife has a notation for nested parentheses that vastly reduces the amount of indentation in lispy programs, especially when CPS or monadic style is involved. With these features, Penknife lets you nest programs within programs like never before.

Clone this wiki locally