[HN Gopher] Ribbit Scheme bootstraps with Posix shell while supp...
___________________________________________________________________
Ribbit Scheme bootstraps with Posix shell while supporting TCO,
call/cc and GC
Author : feeley
Score : 32 points
Date : 2022-04-20 13:39 UTC (2 days ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| chongli wrote:
| I hate to be pedantic here but I see the term TCO thrown around
| all the time. The Scheme standard requires that unbounded tail
| call functions can run in constant space.
|
| This is a semantic difference, not an optimization. Turning off
| optimizations should never cause your program to crash.
| feeley wrote:
| I wrote TCO in the title because with "proper tail calls" the
| title exceeded the allowed limit on hacker news! Moreover most
| people will know the term TCO and less the more precise term
| proper tail calls. You are of course correct that tail calls
| are a required aspect of the Scheme specification even though
| many implementations that call themselves "Scheme" don't
| implement this fully.
| paines wrote:
| I am not sure if I understand correctly. So this is a scheme
| running on a scheme. You need e.g. Chicken to compile/minify it
| and then run it via Gambit.... Why? Why would I do, except of
| learning puroposes of course, do such thing. I clearly am missing
| something.
| feeley wrote:
| You need a Scheme interpreter (Gambit, Chicken or Guile have
| been tested) to run the Ribbit AOT compiler. The Ribbit AOT
| compiler will compile a Scheme program to one of the supported
| target languages: C, JavaScript, Python, Scheme or POSIX shell
| script. Ribbit has been designed for a small footprint, so the
| generated target code is quite compact (as small as 2-4 KB for
| small programs). This is much more compact than any other
| existing Scheme system. Moreover the system is very portable to
| other target languages because Ribbit is implemented with a
| tiny virtual machine. There are ports underway to Java, Scala,
| Lua, Rust, go, Ruby, Haskell, and Idriss. This means a larger
| program in any of these languages can embed the Ribbit VM for
| scripting or other purposes.
|
| Ribbit is also bootstrapped (it can compile itself). This means
| that you only need another Scheme system for the initial step
| of the bootstrap to compile the Ribbit compiler to one of the
| supported target languages. After this step the Ribbit compiler
| only needs an implementation of the target language to run. For
| example, you can use the Gambit interpreter to compile the
| Ribbit compiler to a POSIX shell script (about 64K bytes).
| After this is done then you only need a POSIX shell to compile
| any Scheme program to C, JavaScript, Python, or POSIX shell
| script.
|
| In its current state the POSIX shell target is mostly a proof
| of concept to demonstrate that the Ribbit VM is extremely
| portable. One area of practical use is for bootstrapping
| compilers for other languages using minimal tools (see the Mes
| project https://bootstrappable.org/projects/mes.html for
| bootstrapping gcc to have a reproducible build process for
| gcc). With Ribbit's POSIX shell target it would be possible to
| build gcc on any system that has a POSIX shell (without needing
| other build tools like a C compiler, linker, etc).
| paines wrote:
| Thank you very much for the detailed explanation!
___________________________________________________________________
(page generated 2022-04-22 23:01 UTC)