From: Thomas Lord <lord@emf.net>
To: rms@gnu.org
Cc: Ted Zlatanov <tzz@lifelogs.com>, emacs-devel@gnu.org
Subject: Re: Guile in Emacs (was: integer overflow)
Date: Sun, 11 Apr 2010 16:33:57 -0700 [thread overview]
Message-ID: <1271028837.6164.55.camel@dell-desktop.example.com> (raw)
In-Reply-To: <E1NopyP-0000mf-Hc@fencepost.gnu.org>
I'd like to correct some accounts of history.
On Mon, 2010-03-08 at 22:19 -0500, Richard Stallman wrote:
> RS> If it only supports something like Emacs Lisp then it is not much of
> RS> an advance. Guile supports Scheme and Javascript as well as Emacs Lisp.
>
> It also supports multithreading, which IMHO is a big deal as well,
> perhaps more important than bignums.
>
> I think the support for multiple languages is the biggest advance.
> I hope support for other popular extension languages will be
> implemented
> eventually -- that was the original goal of Guile.
Your recollection there seems to me to be mistaken. It
was a long time ago but I distinctly remember things
differently. As I recall:
The original GNU Manifesto described a unix-like foundation
with a heavy emphasis on a Lisp-centric user-space.
In the early 1990s, when I worked at the FSF, several
of the hackers there (including me) understood the GNU
vision to imply that many interactive programs - not just
Emacs - would be extensible in a dialect of Lisp. We
mostly shared the opinion that Scheme was an appropriate
dialect.
Before I got to the FSF people had already started on a
GNU Extension Language Library - an embeddable Scheme
interpreter. As the (bad) "joke" goes: they code-named the
project "revoc" but upon reflection that's just a "cover".
(Get it? Spooky, ain't it?)
Revoc was (at least back then) going nowhere fast. Later,
while working on a spreadsheet program, I attempted to start
a new attempt at a scheme-based extension language library.
You were (rightly, I suppose) upset that there were higher
priorities. You also pointed out that I was probably wasting
time by starting from scratch and that I ought to have started
from some existing Scheme implementation. I don't recall
if you specifically suggested SCM but I think you might have.
So there were two attempts at a Scheme-based GNU extension
library down - and one to go.
A year or two later I went to work for Cygnus and we, there,
initially agreed to invest in making a scheme-based extension
language library for GNU programs. This was originally named
"GEL" (for GNU Extension Language) until the company lawyers
warned that "GEL" was a trademark for another program. It
was renamed Guile (a cognitive relative of "scheme" and a
pun for "Guy L."). You were informed of this work and were
encouraging. I forget at which stage of this process you
declared Guile to be a "GNU project" but I'm sure the extant
public record has it somewhere.
Around that time, Sun was beginning to announce and promote
Java. They also hired John Ousterhout and began declaring
"Tcl is to be the scripting language for the Internet!" Back
then, Sun was a particularly influential company. On a
technical level, Tcl was a horribly regressive language -
a giant step backwards in many subtle but important ways.
Its license was a free software license but it was uncomforable
at the time to have Sun pushing it so heavily because of
the technical problems and because of doubts about Sun's
motives and control over the software.
A faction arose within Cygnus that argued that Cygnus should
divest from the Guile project and adopt Tcl instead. I made
you aware of that and of Sun's swagger, regarding Tcl.
Around the same time, two of Prof. Ousterhout's graduate
students, John Blow and Adam Sah, were proposing that
the TCL language be *altered* in some small but significant
ways that would facilitate its translation into reasonable
efficient Scheme code. Their altered version of Tcl was
largely but not completely upward compatible with standard
Tcl. By applying a Scheme->C compiler to the generated
Scheme code, they were able to benchmark far better than
standard Tcl in many cases.
And around that same time I was independently proposing
similar things. Mssrs. Blow, Sah, and I compared notes
and so forth.
Around that time, also, Python was beginning to gain
recognition in the US (it already had a foothold in Europe).
Blow, Sah, and I had dinner with Von Rossum and tried to
persuade him to add LAMBDA and proper tail calls and perhaps
continuations to the language so that it could be usefully
translated to Scheme. He did not agree. Back at Cygnus,
the oppositional factions had fun lampooning lisp syntax
and pointing to examples like Python of what was better.
Some of my notes to you mysteriously transmogrified into
a USENET post which the archives show as having you in the
"From:" line and with my signature at the bottom of the
message. This sparked what people, to this day,
still call "The TCL war".
So:
The "original goal" of Guile was most definitely *not*
to support multiple languages. Rather, that was a goal
that was established as a tactic in response to early
competition with Guile.
Moreover, it was *never*, in the early days, a goal
that Guile support other popular extension languages.
That was something that you added and that I (regrettably)
agreed to in response to the perceived threat of Tcl
and to a lesser extent Python.
And: it was *never* in those years a goal to support
any of those other languages exactly. It was *always*
a goal to have a Tcl-like syntax, a Python-like syntax,
and a C-like syntax for Guile Scheme. But tight
compatibility with those languages was *not* the goal.
The notion wasn't so much to "support Tcl" (or any other
language) as to have a hyper-flexible syntax and to
support, via libraries, environments with all of the
convenience features of a shell-like language like Tcl.
Early on after we adopted that tactic you and I and
a few others had some lengthy discussions about adding
Emacs Lisp to the list of languages that Guile could
run. We ran into some severe issues such as the
difference between 'NIL in Emacs lisp and '() and Scheme.
Perhaps not to you but to several other of us it became
fairly clear, back then, that a strictly compatible
Emacs lisp would never sit comfortably alongside a
proper Scheme environment. Just as we would need to make
a "Tcl-like" language that would break some Tcl code,
we would need to break some Emacs lisp code, if indeed
we ultimately wanted to bother trying to support any.
(That is part of why, at Cygnus, I built a from-scratch
multi-buffer, self-documenting, extensible text editor
in Scheme with multi-font and proportionally-spaced
font capabilities that, at the time, GNU Emacs wasn't
close to achieving. The notion was to see how far I could
get just leapfrogging over GNU Emacs instead of trying
to retrofit it.)
Now, years have passed. In recent years, I gather,
the implementation of Guile has been fairly radically
altered so that it is now more of a bytecode VM with
primitive LISP-ish types. In some sense, it has begun
to drift away from being primarily a Scheme to being
more in the category of JVM or the Mono VM. It is easier
to target multiple languages to such a VM but no less
easy to make them interoperate cleanly in a way one would
want to live with for the long run.
So Guile's goals have shifted. It was once (originally)
to be a tight, clean, fun Scheme environment with some
alternative syntaxes and specialized environments -- and
only later did it become the kind of heterogenous language
environment we see it moving towards today.
So, again:
> I hope support for other popular extension languages will be
> implemented eventually -- that was the original goal of Guile.
Nah. The heck it was. That's just not true.
Now, there is a separate question: is that goal to support
other popular extension languages a better idea or a worse
idea (or not importantly different) than the original goal
of a nice, tight, fun Scheme-based system?
I have my opinion ("far worse!") but it's not my intent
to argue for that opinion here. Just to set history straight.
That multi-lingual stuff was *not* the original goal of Guile.
On the contrary, the multi-lingual goals only came up at all
because of a perceived crisis sparked by Sun's announcement
that Tcl was to become the ubiquitous scripting language of
the Internet.
-t
next prev parent reply other threads:[~2010-04-11 23:33 UTC|newest]
Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4B8147A9.7030504@gmail.com>
[not found] ` <87ljemdzxo.fsf@stupidchicken.com>
2010-02-23 5:31 ` Next pretest, and branching plans Jason Rumney
2010-02-23 18:29 ` Eli Zaretskii
2010-02-23 21:12 ` Jason Rumney
2010-02-24 6:04 ` Richard Stallman
2010-02-24 13:34 ` Sean Sieger
2010-02-24 15:05 ` Davis Herring
2010-02-24 15:18 ` Sean Sieger
2010-02-24 14:05 ` Chong Yidong
2010-02-25 14:26 ` Richard Stallman
2010-02-26 18:03 ` manuals [was Re: Next pretest, and branching plans] Glenn Morris
2010-02-27 2:32 ` Richard Stallman
2010-02-27 16:52 ` Next pretest, and branching plans Johan Bockgård
2010-03-03 3:52 ` Glenn Morris
2010-03-05 0:31 ` Johan Bockgård
2010-03-05 19:50 ` integer overflow [was Re: Next pretest, and branching plans] Glenn Morris
2010-03-05 22:35 ` integer overflow Stefan Monnier
2010-03-06 2:55 ` Glenn Morris
2010-03-06 3:11 ` Chong Yidong
2010-03-06 7:03 ` Helmut Eller
2010-03-06 15:45 ` Stefan Monnier
2010-03-06 16:23 ` Davis Herring
2010-03-06 16:33 ` Drew Adams
2010-03-07 7:52 ` Richard Stallman
2010-03-07 16:06 ` David Kastrup
2010-03-07 17:18 ` Stephen J. Turnbull
2010-03-07 17:42 ` David Kastrup
2010-03-08 4:49 ` Jay Belanger
2010-03-08 8:04 ` Richard Stallman
2010-03-08 14:41 ` Guile in Emacs (was: integer overflow) Ted Zlatanov
2010-03-08 17:32 ` Guile in Emacs Ted Zlatanov
2010-03-08 18:42 ` Guile in Emacs (was: integer overflow) Chad Brown
2010-03-09 7:07 ` Ken Raeburn
2010-03-09 16:22 ` Guile in Emacs Ted Zlatanov
2010-03-10 8:07 ` Ken Raeburn
2010-03-10 13:58 ` David Kastrup
2010-03-09 3:19 ` Guile in Emacs (was: integer overflow) Richard Stallman
2010-04-11 23:33 ` Thomas Lord [this message]
2010-04-12 12:30 ` Richard Stallman
2010-04-12 20:05 ` Thomas Lord
2010-04-13 12:44 ` Guile in Emacs Bruce Stephens
2010-04-13 15:51 ` Thomas Lord
2010-04-13 16:07 ` Stefan Monnier
2010-04-13 18:56 ` Thomas Lord
2010-04-13 19:22 ` Christian Lynbech
2010-04-14 10:14 ` Bruce Stephens
2010-04-14 14:10 ` joakim
2010-04-13 19:13 ` Christian Lynbech
2010-04-14 1:47 ` Thomas Lord
2010-04-14 3:33 ` Christian Lynbech
2010-04-14 23:33 ` Richard Stallman
2010-04-14 5:02 ` Richard Stallman
2010-04-14 6:45 ` christian.lynbech
2010-04-14 19:07 ` Thomas Lord
2010-04-14 19:34 ` Bruce Stephens
2010-04-14 20:09 ` Jose A. Ortega Ruiz
2010-04-15 7:34 ` christian.lynbech
2010-04-14 23:33 ` Richard Stallman
2010-04-15 3:52 ` Drew Adams
2010-04-15 6:01 ` David Kastrup
2010-04-15 6:54 ` Drew Adams
2010-04-15 11:59 ` Jeff Clough
2010-04-15 12:49 ` christian.lynbech
2010-04-15 13:54 ` Jeff Clough
2010-04-15 14:03 ` Lennart Borgman
2010-04-15 16:13 ` Drew Adams
2010-04-16 13:48 ` Jeff Clough
2010-04-16 14:03 ` christian.lynbech
2010-04-16 14:25 ` Jeff Clough
2010-04-16 14:25 ` Drew Adams
2010-04-16 14:39 ` David Kastrup
2010-04-16 14:40 ` Jeff Clough
2010-04-16 8:27 ` christian.lynbech
2010-04-17 4:41 ` Richard Stallman
2010-04-19 7:52 ` christian.lynbech
2010-04-16 22:29 ` Emacs Info manuals (was: Guile in Emacs) Juri Linkov
2010-04-15 16:11 ` Guile in Emacs Drew Adams
2010-04-15 7:21 ` christian.lynbech
2010-04-15 7:36 ` David Kastrup
2010-04-15 8:34 ` christian.lynbech
2010-04-15 9:06 ` David Kastrup
2010-04-15 9:45 ` Helmut Eller
2010-04-15 10:39 ` christian.lynbech
2010-04-15 18:47 ` Richard Stallman
2010-04-15 22:42 ` Harald Hanche-Olsen
2010-04-15 22:50 ` Harald Hanche-Olsen
2010-04-17 4:40 ` Richard Stallman
2010-04-15 23:02 ` Helmut Eller
2010-04-17 4:40 ` Richard Stallman
2010-04-17 6:46 ` Helmut Eller
2010-04-17 19:55 ` Richard Stallman
2010-04-14 13:30 ` John Wiegley
2010-04-14 14:18 ` Helmut Eller
2010-04-14 15:40 ` Tom Tromey
2010-04-14 7:51 ` David Kastrup
2010-04-14 8:42 ` christian.lynbech
2010-04-14 9:55 ` immanuel litzroth
2010-04-14 10:28 ` christian.lynbech
2010-04-14 11:25 ` Stephen J. Turnbull
2010-04-14 12:26 ` christian.lynbech
2010-04-14 16:49 ` Ken Raeburn
2010-04-14 18:29 ` Tom Tromey
2010-04-14 20:02 ` Ken Raeburn
2010-04-14 11:23 ` Jeff Clough
2010-04-14 13:11 ` Stephen J. Turnbull
2010-04-14 13:11 ` Stephen Eilert
2010-04-14 13:49 ` Helmut Eller
2010-04-14 15:47 ` Tom Tromey
2010-04-14 16:41 ` Drew Adams
2010-04-14 20:10 ` David De La Harpe Golden
2010-04-15 10:38 ` Leo
2010-03-06 19:04 ` integer overflow Helmut Eller
2010-03-06 21:26 ` Stefan Monnier
2010-03-07 7:51 ` Richard Stallman
2010-03-07 19:05 ` Johan Bockgård
2010-03-06 20:35 ` Chong Yidong
2010-03-13 3:10 ` Next pretest, and branching plans Christoph
2010-03-13 7:42 ` Eli Zaretskii
2010-03-13 14:54 ` Christoph
2010-03-13 18:30 ` Stefan Monnier
2010-03-13 19:06 ` Eli Zaretskii
2010-03-14 2:38 ` Jason Rumney
2010-03-14 2:50 ` Christoph
2010-03-14 3:07 ` Jason Rumney
2010-03-14 17:55 ` Eli Zaretskii
2010-03-17 0:29 ` Christoph
2010-03-17 4:14 ` Eli Zaretskii
2010-03-17 12:44 ` Jason Rumney
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1271028837.6164.55.camel@dell-desktop.example.com \
--to=lord@emf.net \
--cc=emacs-devel@gnu.org \
--cc=rms@gnu.org \
--cc=tzz@lifelogs.com \
/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.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.