From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Noah Lavine Newsgroups: gmane.lisp.guile.devel Subject: Update and Questions Date: Mon, 5 Dec 2011 23:25:13 -0500 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 X-Trace: dough.gmane.org 1323145525 29205 80.91.229.12 (6 Dec 2011 04:25:25 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 6 Dec 2011 04:25:25 +0000 (UTC) To: guile-devel Original-X-From: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Tue Dec 06 05:25:21 2011 Return-path: Envelope-to: guile-devel@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1RXmam-000795-SP for guile-devel@m.gmane.org; Tue, 06 Dec 2011 05:25:20 +0100 Original-Received: from localhost ([::1]:33540 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RXmam-0006CA-De for guile-devel@m.gmane.org; Mon, 05 Dec 2011 23:25:20 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:59279) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RXmai-0006C0-A1 for guile-devel@gnu.org; Mon, 05 Dec 2011 23:25:17 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RXmag-0003PZ-Ff for guile-devel@gnu.org; Mon, 05 Dec 2011 23:25:15 -0500 Original-Received: from mail-iy0-f169.google.com ([209.85.210.169]:37933) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RXmag-0003OI-CK for guile-devel@gnu.org; Mon, 05 Dec 2011 23:25:14 -0500 Original-Received: by iapp10 with SMTP id p10so7865838iap.0 for ; Mon, 05 Dec 2011 20:25:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:sender:date:x-google-sender-auth:message-id:subject :from:to:content-type; bh=0eMALEZQYPheHLnJW5+ttvOUObrsPhWJyMY2LfDKuaA=; b=qOnaYPUj2YNI4EjVatSD9bCc6iNxvuEwPL3GwTtoKL/SBa1Q/wa/cVzpRZBDxva8Af hLHau0qc8YZp0UuUozf9SKQyu9xRjIqShptMWPQ+1LJ2UypsqBnqtOVHD41pH/EOfxOg d30faMKQGKvzCn1oXE2e1BsFd1mlFBzftAU7c= Original-Received: by 10.50.173.74 with SMTP id bi10mr14343652igc.4.1323145513926; Mon, 05 Dec 2011 20:25:13 -0800 (PST) Original-Received: by 10.42.217.6 with HTTP; Mon, 5 Dec 2011 20:25:13 -0800 (PST) X-Google-Sender-Auth: vcYAHqi5JasW7TSd16trTJB52d0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-Received-From: 209.85.210.169 X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Original-Sender: guile-devel-bounces+guile-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.devel:12974 Archived-At: Hello Guile developers, Despite the long gap since my last email, I have in fact been working on the compiler project. This email has two purposes: first, to make sure that I have a basically reasonable design before I work more, and second, to ask a logistical question. First of all, I very much appreciated your suggestions of things to read. I did look at the Reasoned Schemer. I also spent quite a while studying Stalin (the compiler), because I believe that is the current fastest Scheme compiler. (And therefore, it's the one I'd like to beat with our compiler.) The design I am currently working with is the same as Stalin's design. It is a propagation network. Basically you have a graph of Tree-IL nodes, where each Tree-IL node is connected to its parent, its children, and optionally other nodes (a variable is connected to the place it was declared. A primitive function is connected to the error continuation it could jump to). The compiler propagates information along the edges of this graph, attempting to find the minimum set of possible values for each variable and each jump target. It also performs partial evaluation as a special case of this. What I have described also seems to be how Hindley-Milner type inference works (although I think we can do a bit better than standard Hindley-Milner systems). Does this seem like a good design for the static analyzer portion? One big oversight that I know of is that this doesn't do any sort of specialization. I think that is an extremely important feature, but when I looked at doing specialization I thought that it would use all of the logic this would, but require a bit more work to keep the complexity down, so I thought I should do this first. I haven't thought much about the rest of the compiler yet, but I imagine you can basically walk this graph and try to choose representations for each piece of it using the information you gathered in the analysis phase. The key ingredient for that will be a library of representations for each Tree-IL node. The second part of this post is a logistical question. I would like to do this work in public, so other people can see it (and hopefully contribute). Where is the best place to do this? Should I make a branch on Savannah? That makes the most sense to me, but it seems a bit unnatural, since this project is very separate from the rest of Guile. And finally, a fun thing. The current best Scheme compiler (that I know of) is called Stalin. Therefore, I suggest that our compiler be called "Stallman", after our fearless leader (whose name also starts with "s"). :-) Thanks a lot, Noah