[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Compilation to js [Update]

From: Ian Price
Subject: Compilation to js [Update]
Date: Tue, 20 Jun 2017 19:43:24 +0100

Hello guilers,

I figure it's time for an update on what I've been working on for the
past two weeks.

I have mainly been working on updating the compiler to go from the old
cps representation to the new cps-soup representation.

This had a few false starts, but on the third attempt, I think the
approach using the dominator functions in (language cps utils) is the
right way, and is giving the results I want. I intend to write a blog
post shortly explaining how dominators / cps-soup work and how to
compile from it for other people who may be interested in these low
level guile details.

Right now, you can find my code on gitlab[0] in the compile-to-js-2017
branch in the language/js-il and language/javascript directories[1].
What can you do with it? Well, I do not recommend trying to use this
seriously, since you will run into a large number of issues, relating
to residualising macros, missing prelude functions and possibly stack
overflows. That said, you can take some scheme files and compile them
with the usual functions, e.g.

(compile-file "/tmp/foo.scm" #:to 'javascript #:output-file "/tmp/foo.js")

You can see the output of mergesort (beautified) at In order to run it,
you will need to add the contents of runtime.js which can be found in
language/js-il. Other things you might try are non-local escapes with
call/cc and keyword/optional/case-lambda arguments.

What's next? Number 2 on my list from last time was
>  Complete porting boot-9 to js (in particular, the guile module system)
so this is what I intend to do. This will allow us to run much more
complicated programs, and you won't need to keep reimplementing
functions like map.

Another issue is with macros, which are not being residualised now
that their representation was changed, so I'll do that too.

Till next update,

[1] Compilation to js-il is in language/cps/compile-js.scm

reply via email to

[Prev in Thread] Current Thread [Next in Thread]