unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Amirouche <amirouche@hypermove.net>
To: guile-user@gnu.org
Subject: Re: Summer of Code Recap
Date: Mon, 28 Aug 2017 23:39:00 +0200	[thread overview]
Message-ID: <f7580a32-5566-10b3-3231-c25ab2014f1f@hypermove.net> (raw)
In-Reply-To: <CACpaFSQYy-md+VyuFc1+0T99XkdP1WB0_=LVF0tJkk4Y-OO=2A@mail.gmail.com>

Héllo,


Le 28/08/2017 à 20:56, Ian Price a écrit :
> 1 Introduction
> ==============
>
>    As many of you are aware, I have been working on compiling Guile
>    Scheme to JavaScript this summer, as part of the Google Summer of
>    Code. This post serves to bookend my work for the year.
[...]
> 2 Project Aims
> ==============
>
>    For a full introduction to the project, you can of course refer back
>    to my [project proposal], but very briefly my hopes for this summer
>    were:
>
>    1. To rewrite the previous version of my compiler from the [previous
>       CPS representation] to use the new representation ["CPS Soup"]
>       representation.
>    2. To completely port ice-9/boot-9.scm (our basic "prelude") to
>       JavaScript, and in particular, to support the [Guile Module
>       system].
>    3. To handle Proper Tail Calls by use of the [Cheney on the MTA]
>       strategy.
>    4. To include a new `guild' script for bundling compiled JS files with
>       their dependencies.
>
>
> [project proposal] https://shift-reset.com/static/docs/gsoc-2017.pdf
>
> 3 What was Achieved
> ===================
[...]
> 3.1 Compile Guile CPS Soup to JavaScript
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[...]
> 3.3 A linking script for JavaScript
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[...]
> 4 What was not Achieved
> =======================
>
> 4.1 Cheney on the MTA
> ~~~~~~~~~~~~~~~~~~~~~
[...]
> 6 What is next?
> ===============
>
>    Having recapped what was and what was not achieved, the next question
>    is: where does the project go from here? I have been asked about my
>    plans for all sorts of features, e.g. support for [Web Assembly], but
>    I think the following things are the most important to think about.
>
>
> [Web Assembly] http://webassembly.org/
>
> 6.1 Inclusion into Guile
> ~~~~~~~~~~~~~~~~~~~~~~~~
>
>    The entire point of the project is to have something that can be
>    included in Guile proper. I have not spoken with Guile's maintainers
>    about incorporation into the main distribution, but I expect there
>    would be not be too many problems with moving the "official branch" to
>    the main repository.

Very important, but not before we know it can be useful.
> 6.2 All Guile built-ins in runtime.js
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>    Although I have included enough to get though boot-9.scm, this does
>    not include all of the built-ins we would want in our programs. Two
>    things I use very often which do not appear in runtime.js are ports
>    and bytevectors.
I don't mind not using ports and bytevectors. I am not using them in 
BiwaScheme.
>    We would like most, if not all, Guile built-ins to be available for
>    those who need them, so these will need to be implemented. However,
>    this is a lot of extra code for some people who don't need it, which
>    brings us to a different issue...

> 6.3 Linking Guile Modules & Features
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>    In [a blog post], Andy Wingo lays out many tasks that he would like to
>    see in a future Guile. One of the most important of these, for us, are
>    under the headings "linking multiple modules together" and "linking a
>    single executable". To grossly simplify, we want to be able to link
>    various files into one single executable, which contains all and only
>    the code we need for our application.

I told you before, I think that this was not an important matter
because it can be handled by Javascript tooling for the time being.
Even if, I agree that in a ideal world, it must not require javascript
third parties except maybe for optimizations.

>    This would allow us to minimise the amount of code that
>    needs to be sent over the network, which is very important to web
>    developers.

You seem concerned by javascript web developers but not about
me in particular. As the maintainer of the only Scheme frontend
web framework, as a Guile user and the creator *one* of the most
successful Python -> Javascript compiler you could have consulted
me on what is best for GNU Guile in the regard of Guile -> Javascript.

That said, I am not surprised of your behavior nor the behavior of
your mentor, since it's not the first time you ignore me by mistake
or on purpose.

I think you should have asked me what would be best to prototype
the compiler.

Sorry, I will do nonetheless.
>    This is a large task, and one I don't know enough about at the moment
>    to attempt, but it is work that would benefit not just our JavaScript
>    compiler, but people who want to deploy regular Guile applications.
At least for javascript tooling is doing that for a decade. So, in my 
opinion
this is not the most important matter. See "tree shaking".

> [a blog post]
> https://wingolog.org/archives/2016/02/04/guile-compiler-tasks
>
>
> 6.4 JavaScript Version
> ~~~~~~~~~~~~~~~~~~~~~~
>
>    I am not an expert in JavaScript, in fact, before this summer I
>    probably hadn't written it for two years, which means the code
>    certainly does not match up with the current best practices and
>    specifications. Further, all of my testing for this compiler was done
>    on [Node.js] v.6.10.3 only (this was the version available in the
>    Fedora 25 repositories).
>
>    The code should be vetted to determine precisely which modern JS
>    features are used (I believe proper tail calls, and ES6 Maps are the
>    main ones), and it should be tested on all major browsers. If
>    necessary, we should incorporate switches in the compiler to allow JS
>    users to compile for particular implementations, taking advantage of
>    particular modern JS features, or providing our own implementations of
>    those that are not supported (e.g. Cheney on the MTA).

This is overkill. babel [https://babeljs.io] or traceur [*] can do that 
for us.

[*] https://github.com/google/traceur-compile

> 6.5 JS Integration
> ~~~~~~~~~~~~~~~~~~
[...]
> 6.5.1 JS calling Scheme
> -----------------------
>
>    As it stands, you can perform some limited interaction from JavaScript
>    in a similar manner to how you would interact with Guile from C. For
>    instance, by using `scm_current_module', `scm_public_lookup', and the
>    `scheme.Symbol' constructor, one could look up a scheme function, e.g.
>    `iota', and then invoke it by `scheme.call'.
>
>    That said, C idioms are not JS idioms, and so we should work to
>    provide a much nicer API through the `scheme' object.

Not very useful, except if you achieve Javascript speed in Guile 
compiled code.

> 6.5.2 Scheme calling JS
> -----------------------
>
>    In the case of Scheme calling JavaScript, I think we should follow the
>    example of `(system foreign)', which provides an API for linking to
>    dynamic C libraries, and creating Scheme versions of C functions, and
>    automatically marshalling/unmarshalling C types to Scheme types. One
>    additional complication we would have with JS would be the presence of
>    exceptions, but I think these could also be marshalled into Scheme
>    ones without much trouble.

marshalling and unmarshalling types is a pain performance wise. I was 
hoping
that calling Javascript functions would be native with zero overhead. It 
seems
like it's not the case. I hope that at least string won't require 
complex code.

> 7 Lessons Learned
> =================
[...]
> 8 Wrapping Up
> =============
>
>    If you are still with me, good on you. As the new semester is starting
>    I will be devoting much less time to this, and that will likely be
>    true till December, but I will make an effort to keep up with
>    guile-user and be on the IRC Channel to help the daring souls who want
>    to give this a go. My priorities will be documenting the ILs, filling
>    in missing builtins, and improving jslink. I especially want to see
>    basic IO and MiniKanren up and running, and for it to be convenient to
>    use Guile's builtin libraries.
>
>
> Happy Hacking, Ian Price

I hope that in the future, you will be more inclusive.

Great achievement!



  parent reply	other threads:[~2017-08-28 21:39 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-28 18:56 Summer of Code Recap Ian Price
2017-08-28 19:25 ` Christopher Allan Webber
2017-08-28 19:58   ` Nala Ginrut
2017-08-28 21:39 ` Amirouche [this message]
2017-08-29  3:27   ` Christopher Allan Webber
2017-09-01 22:09 ` Amirouche Boubekki
2017-09-02  6:58   ` Arne Babenhauserheide
2017-09-06 18:25   ` Amirouche Boubekki
2017-09-07  6:32     ` Amirouche Boubekki
2017-09-08 12:18       ` Amirouche Boubekki
2021-05-11 14:45 ` Christopher Lemmer Webber
2021-05-11 15:08   ` Christopher Lemmer Webber
2021-05-11 15:19     ` Christopher Lemmer Webber
2021-10-11  1:50       ` Christine Lemmer-Webber
2021-10-11  5:28         ` Dr. Arne Babenhauserheide
2021-05-11 15:50   ` Dr. Arne Babenhauserheide

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f7580a32-5566-10b3-3231-c25ab2014f1f@hypermove.net \
    --to=amirouche@hypermove.net \
    --cc=guile-user@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).