Mike Gerwitz
cf73eb4a31
This is an initial test suite that is by no means comprehensive, but is a pretty good starting point. At this point, it's important that we be confident in certain aspects of the system to preempt difficulty in debugging problems when using 3rd-party code (we'll be using psyntax at some point, for example). We also need to be able to have confidence in refactoring. We do gain limited confidence when Rebirth is able to successfully compile itself, but finer details are missed, as has been demonstrated by recent commits (which fix bugs found by this test suite). This is also the first test of writing another program in Rebirth that isn't Rebirth itself. It's exciting, and helps make obvious certain pain points, like the need to include core packages. Further, we can't include important definitions in `rebith.scm' itself. Consequently, I think it may be in my best interest to just add support to Birth for `include' so that the first pass of Rebirth can benefit from it. I didn't want to do so because I wanted Birth to be a faithful re-implementation of Prebirth, but it's not worth it. This would be a minor addition and would save so much trouble. I saw a couple mentions of JS Lisps today on HN (one a tiny Lisp that compiles to JS, one an interpreter)---neither of them come close to what Ulambda will be (and in many ways with Rebirth already is), so I'm excited to keep development going. There is a niche to be filled. And I intend to keep this project secret until it can actually be called "Scheme" (and maybe beyond that too, since I have Gibble to work on as well). Anyway, enjoy the first non-Rebirth Rebirth program! Hello, world! * bootstrap/Bootstrap.js (bootstrap): Include `#_testViable' call after Rebirth compilation. (_birth): Throw any error received during Birth compilation. (_makeCompiler): Accumulate output for each `console.log' in compiler, rather than overwriting with each call (that latter behavior was never intended in the first place). (_compileRebirth): Throw error on compilation failure. (_testViable): New method. (_strmap)[rebirthTestCompiling, rebirthTestCompiled, rebirthTestFailed] [rebirthTestDone]: New functions. * bootstrap/rebirth.scm: Add comment clarifying that Rebirth should _not_ be used as a general-purpose little Lisp. * bootstrap/rebirth/.dir-locals.el: New file. * bootstrap/rebirth/es.scm: Add comment comparing environment implementation to a spaghetti stack (a term which I was unfamiliar with until recently while researching some Lisp history). (es:json-stringify): New procedure. (es:try): New macro. * bootstrap/rebirth/relibprebirth.scm (es:null): New procedure for use by test suite. (fold): Fix argument naming order. (zero?): Correctly use `=' instead of `eq?'. * bootstrap/rebirth/test.scm: New viability test suite. |
||
---|---|---|
bootstrap | ||
.gitignore | ||
COPYING | ||
Makefile.am | ||
README.md | ||
autogen.sh | ||
configure.ac |
README.md
Ulambda Scheme
Ulambda Scheme (also abbreviated "Y Scheme") is a self-hosting Scheme. The primary compiler target is JavaScript.
There's a lot more to be said, but that story will evolve over time.
\\ // \\\
\\ // \\\
\\// Ulambda \\\
\\\ Scheme ///
\\\ ///
\\\ ///