How about, when trying to decide "what is lisp" or to apply "lispp" to some _thing_, we just go very low level and somewhat retro and mostly informal?
As a straw-man: a lisp is any language implementation which includes a run time system with some recognizably lispish types (cons pairs, numbers, symbols) having their familiar properties (latent typing, gc-based memory management), and implemented in a recognizably traditional way (or a brilliant new way, worthy of being added to the design space). In the language implemented, programs are expressed in s-exp syntax and there are some useful senses (for which we don't need to draw a precise line defining "useful") in which programs are manipulatable as basic data structures (e.g., expressions as lists). All the usual Common Lisp implementations are clearly lisps and it's hard to imagine someone contorting themselves enough to implement a Common Lisp that isn't a lisp (contrast with a recent "Scheme in Javascript" that appeared on c.l.s. -- if somebody said "That may be Scheme but it isn't a lisp" -- I'm not sure why anybody would bother disagreeing).
We can say that there is a near-but-not-quite consensus among lisp hackers that some things are better than other things in an implementation. For example, an implementation that let's you evaluate a list as an expression is expected -- and implementations that don't provide that or provide it poorly are, at the very least, pretty extreme outliers.
"Common Lisp" and "Scheme" aren't lisps at all. They are the names of standards which a lisp may or may not implement. Another near-but-not-quite consensus is that Common Lisp has the far larger commercial significance at the moment, and the greater amount of practical experience behind it -- and that it's naive to respond to Common Lisp by saying things like "But Scheme is so much _cleaner_ -- why don't you agree that Common Lisp sucks?". We can acknowledge that it has been the experience of people deeply involved with Common Lisp that, unreasonable as it may sound, they have had to put up with a lot of such responses over the years.
With this rather retro mostly-operational view of "what is lisp" we can make perfect sense of statements like "Dylan is sorta-kinda-lisp but diverges in these ways ...." or "Emacs lisp started out as a really minimalist lisp and remains a kind of strange dialect -- but it works _fairly_ well for it's specific applications and it's intersting to examine why that is" or "delta(Python,lisp) keeps shrinking but it's not clear that Python really converges on lisp".
And I can say "Hey, I'm interested in making a lisp that is a lisp-1 and _generally_ very Scheme-like; I'm not entirely sure I want (eq? #f '()) to be false; I'm not entirely sure I really want call/cc." And having said that, in c.l.l. no less, I might have a discussion about why I'm leaning in those directions without having the majority replies being a rightous forensices from Common Lisp bigwigs.
There's a heck of a lot of verbal cleverness on this list. It seems to be a point of pride and, indeed, personally I think it's kind of neat. But it's also pretty tedious after a while. Too often it supresses, rather than enhances, actual interesting discussion.
l...@emf.emf.net (Tom Lord) writes: > As a straw-man: a lisp is any language implementation which includes a > run time system with some recognizably lispish types (cons pairs,
[...]
As straw men go, that one looks reasonably well built (or did before I truncated it; please read the original before replying to this post if you want to respond on this point).
I'd add something, though: IMO, a lisp is not _just_ a language implementation; it's also an environment - or at least, shapes and is shaped by the environment. For example, supppose a language implementation that was otherwise Lispish, but didn't allow function redefinition, or that allowed it but without affecting old callers. It sounds like a small divergence, but it radically affects the environment, because it reduces the utility of interacting with the system by about 97%.
Now, I imagine that some time in the distant past people have written lisp implementations that run in batch mode or need input on punched cards, or for some other similar unfriendly high-latency environment, and I daresay they did this because they had to and we shouldn't retrospectively deny them the "lisp" tag, but I'm also quite definite that if anyone were to ask me about the Lispiness of some new or proposed language, they would get points deducted for doing things that break it for interactive use.
Daniel Barlow wrote: > I'd add something, though: IMO, a lisp is not _just_ a language > implementation; it's also an environment - or at least, shapes and is > shaped by the environment.
I actually led with this point in my second go-round presenting Lisp to a local Linux clan. I talked about how working in Lisp is like Fantastic Voyage; we're poking around inside the beast, if you will. And using the full power of the language to do so.
--
kenny tilton clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "Career highlights? I had two. I got an intentional walk from Sandy Koufax and I got out of a rundown against the Mets." -- Bob Uecker
Tom Lord wrote: > .. it's naive to respond to > Common Lisp by saying things like "But Scheme is so much _cleaner_ -- > why don't you agree that Common Lisp sucks?". We can acknowledge > that it has been the experience of people deeply involved with Common > Lisp that, unreasonable as it may sound, they have had to put up with > a lot of such responses over the years.
Can anyone confirm this? Is that why some Lispniks have a cow when Scheme or even recursion gets mentioned?
Is Scheme seen as an insurgent language? Steele and Sussman traitors? This is starting to make some sense.
If so, perhaps these Lispniks should take consolation from Scheme being a failed experiment and just lighten up. Steele and Sussman were wrong. They created something small, yes, and with appeal to some who go for the short spec, but that is as far as it went. The CL crowd voted with its feet and stood on the mother ship. Game over.
--
kenny tilton clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "Career highlights? I had two. I got an intentional walk from Sandy Koufax and I got out of a rundown against the Mets." -- Bob Uecker
> If so, perhaps these Lispniks should take consolation from Scheme being > a failed experiment and just lighten up. Steele and Sussman were wrong. > They created something small, yes, and with appeal to some who go for > the short spec
And people wonder why the language wars don't stop. We have a brain for a reason. It filters thoughts that pop up at the knee before they get to the mouth (or fingers :)
Anyway, it would be improper to say that Steele and Sussman were wrong. Maybe they didn't achieve what they set out to do, but as a small, elegant academic language, scheme fits the bill quite well. Further, in the domain of language theory, these small elegant languages, unburdened by the baggage of utility, are critical in driving the field continually forward.
Rayiner Hashem wrote: >>If so, perhaps these Lispniks should take consolation from Scheme being >>a failed experiment and just lighten up. Steele and Sussman were wrong. >>They created something small, yes, and with appeal to some who go for >>the short spec
> And people wonder why the language wars don't stop. We have a brain > for a reason. It filters thoughts that pop up at the knee before they > get to the mouth (or fingers :)
I am sorry. Did you think I was trying to make peace? You have not been paying attention. It is the other folks in this thread who are trying to start up an ecumenical council to unite Scheme and Lisp.
Perhaps I was too subtle; I mean precisely to go on the offensive. Apparently a few lispniks are on their heels over this kind of bullshit from the comp.lang.scheme FAQ:
"Advocates of Scheme often find it amusing that the entire Scheme standard is shorter than the index to Guy Steele's "Common Lisp: the Language, 2nd Edition".
Apparently these geniuses think it matters one whit whether the spec in its entirety can be carved on the head of a pin. Well, jeez, what was wrong with the 6502 assembler instruction set?!!
In the next breath they concede:
"Scheme is often used in computer science curricula and programming language research... Common Lisp is often used for real world programming..."
Surprise, surprise! You want to know why your toy language does not scale? <sigh>
> Anyway, it would be improper to say that Steele and Sussman were > wrong. Maybe they didn't achieve what they set out to do...
That's a nice way to say "wrong". They did achieve splitting the community, so no one camp has critical mass. All those students learning scheme would be learning Common Lisp if their hubris had not impelled them to try to out-do Lisp. And there is no way they meant to split the baby in half, so clearly they wanted it for themselves. Lawdy, Steele tried again with his Constraints language and with Java. He shoulda stood on first. Or created Perl. Scheme is a failed insurrection. CL is prepared to declare an amnesty.
Schemers! Lay down your arms and return to your multiple namespaces. This amnesty expires when we prevail anyway without your numbers.
:)
--
kenny tilton clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "Career highlights? I had two. I got an intentional walk from Sandy Koufax and I got out of a rundown against the Mets." -- Bob Uecker
In article <3F52A6B2.9000...@nyc.rr.com>, Kenny Tilton wrote: > Daniel Barlow wrote: >> I'd add something, though: IMO, a lisp is not _just_ a language >> implementation; it's also an environment - or at least, shapes and >> is shaped by the environment.
> I actually led with this point in my second go-round presenting Lisp > to a local Linux clan. I talked about how working in Lisp is like > Fantastic Voyage; we're poking around inside the beast, if you will. > And using the full power of the language to do so.
(begin-tangent)
I've seen this statement ("using the full power of [Lisp]") a lot. In my (limited) experience, it seems to show up most often in advocacy-type discussions about the incredible usefulness of macros. "We can write code to write code, and use the full power of Lisp to do so." It makes me curious -- how often has the person using the phrase fully demonstrated Lisp's power to his audience, before showing them macros?
As an example, if you created a new C pre-processor that did macros in a Lispier way (i.e. manipulated C code with C), and told me "and you can use the full power of C to do it", well, knowing a little C, this would not in-and-of-itself impress me. In the same way, if I knew a lot of C but not any Lisp, and you told me about macros and talked about "the full power of Lisp", but hadn't demonstrated said power in other examples, I think I'd tend to discount such statements as relatively meaningless.
> I've seen this statement ("using the full power of [Lisp]") a lot. In > my (limited) experience, it seems to show up most often in > advocacy-type discussions about the incredible usefulness of macros. > "We can write code to write code, and use the full power of Lisp to do > so." It makes me curious -- how often has the person using the phrase > fully demonstrated Lisp's power to his audience, before showing them > macros?
> As an example, if you created a new C pre-processor that did macros in > a Lispier way (i.e. manipulated C code with C), and told me "and you > can use the full power of C to do it", well, knowing a little C, this > would not in-and-of-itself impress me. In the same way, if I knew a > lot of C but not any Lisp, and you told me about macros and talked > about "the full power of Lisp", but hadn't demonstrated said power in > other examples, I think I'd tend to discount such statements as > relatively meaningless.
Well, I agree with that, but I think the main reason is that Lisp is much better at manipulating lists (a natural way to represent Lisp code) than C is at manipulating, say, strings. So writing macros using such a C preprocessor would likely be quite painful.
One could imagine a preprocessor that uses a more elegant syntax for macros only, and generates plain C from them, but that would be designing a completely different language, compiling to C...
"Matthieu Villeneuve" <matth...@nospam.matthieu-villeneuve.net> writes: > "Larry Clapp" <la...@theclapp.org> wrote in message > news:slrnbl6l0s.ca7.larry@theclapp.ddts.net... > > I've seen this statement ("using the full power of [Lisp]") a lot. In > > my (limited) experience, it seems to show up most often in > > advocacy-type discussions about the incredible usefulness of macros. > > "We can write code to write code, and use the full power of Lisp to do > > so." It makes me curious -- how often has the person using the phrase > > fully demonstrated Lisp's power to his audience, before showing them > > macros?
> > As an example, if you created a new C pre-processor that did macros in > > a Lispier way (i.e. manipulated C code with C), and told me "and you > > can use the full power of C to do it", well, knowing a little C, this > > would not in-and-of-itself impress me. In the same way, if I knew a > > lot of C but not any Lisp, and you told me about macros and talked > > about "the full power of Lisp", but hadn't demonstrated said power in > > other examples, I think I'd tend to discount such statements as > > relatively meaningless.
> Well, I agree with that, but I think the main reason is that Lisp is > much better at manipulating lists (a natural way to represent Lisp code) > than C is at manipulating, say, strings. So writing macros using such a > C preprocessor would likely be quite painful.
> One could imagine a preprocessor that uses a more elegant syntax for > macros only, and generates plain C from them, but that would be designing > a completely different language, compiling to C...
I think it should be possible to write such a preprocessor, but the syntax is not the main problem. To make these new preprocessor macros comparable to lisp macros, it must at least be possible to call functions from the libc at compile time! And that is very different from even the most sophisticated kind of text substition.
Larry Clapp wrote: > In article <3F52A6B2.9000...@nyc.rr.com>, Kenny Tilton wrote:
>>Daniel Barlow wrote:
>>>I'd add something, though: IMO, a lisp is not _just_ a language >>>implementation; it's also an environment - or at least, shapes and >>>is shaped by the environment.
>>I actually led with this point in my second go-round presenting Lisp >>to a local Linux clan. I talked about how working in Lisp is like >>Fantastic Voyage; we're poking around inside the beast, if you will. >>And using the full power of the language to do so.
> (begin-tangent)
> I've seen this statement ("using the full power of [Lisp]") a lot. In > my (limited) experience, it seems to show up most often in > advocacy-type discussions about the incredible usefulness of macros. > "We can write code to write code, and use the full power of Lisp to do > so." It makes me curious -- how often has the person using the phrase > fully demonstrated Lisp's power to his audience, before showing them > macros?
Doesn't matter. The essential point in this context is that lisp macros are not just token replacement. Similarly, because I have done proof-of-concept Cells ports in Java, Python, and C++, when I talk about rules being expressed with "the full power of..." I finish with "..the host HLL".
> As an example, if you created a new C pre-processor that did macros in > a Lispier way (i.e. manipulated C code with C), and told me "and you > can use the full power of C to do it", well, knowing a little C, this > would not in-and-of-itself impress me.
Yeah, but a C-only programmer would fall to the ground trembling in awe. And don't forget Norvig saying Python did not need macros because they had eval and regexp. as if.
During my talk in which I reinvented half of Cells, someone watching closely said, "I could do those macros in C". I looked, and sure enough the few I had done simply used token substitution. So then I tossed off "defmodel Lite" a macro which expanded almost directly into defclass, then wrote wrapper methods and special cell macros for each slot.
Now for my point: I didn't use anything fancier than mapcar and destructuring-bind, but the bloke still said, Aha! OK, d-b is pretty cool, but to him the key thing was simply stepping above substitution and using the host language to write code.
--
kenny tilton clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "Career highlights? I had two. I got an intentional walk from Sandy Koufax and I got out of a rundown against the Mets." -- Bob Uecker
Kenny Tilton wrote: > All those students learning Scheme would be learning > Common Lisp if their hubris had not impelled them to > try to out-do [Common] Lisp.
Doubtful. Students would probably be taught using ML or Haskell - in fact, those languages are already commonly used for the purpose, for many of the same kinds of reasons.
Understandably, academic language research and teaching has moved in the direction of languages whose formal descriptions are suitably tractable - which, as you may have noticed I enjoy pointing out, is what McCarthy was originally trying to create with Lisp.
Imagining that somehow, if Scheme simply went away or hadn't existed in the first place, that academia would focus instead on Common Lisp, is wishful thinking at best. CL and Scheme address different domains, even if there's an area of overlap (of arguable size). Their similarities could be a strength, though, if you allow it.
>>All those students learning Scheme would be learning >>Common Lisp if their hubris had not impelled them to >>try to out-do [Common] Lisp.
> Doubtful. Students would probably be taught using ML or Haskell - in fact, > those languages are already commonly used for the purpose, for many of the > same kinds of reasons.
Lawdy, all I hear are about are schools where students riot if you try to teach them anything but java.
> Understandably, academic language research and teaching has moved in the > direction of languages whose formal descriptions are suitably tractable - > which, as you may have noticed I enjoy pointing out, is what McCarthy was > originally trying to create with Lisp.
Yes, and then the language got used. And when it got used people naturally started adding in real-world stuff. And then they all got together and standardized on all the real world stuff. Without losing the groovy formal stuff.
Scheme never got used enough for steps two and three to happen, and what would be the point? CL is scheme plus steps two and three. So Schemers dig in their heels forever marginalized, consoling themselves with their tiny little specs.*
> Imagining that somehow, if Scheme simply went away or hadn't existed in the > first place, that academia would focus instead on Common Lisp, is wishful > thinking at best.
We'll get them when Java collapses under its own weight. The problem may be that Java and XML may start an Ice Age in IT development that will take a decade for Lisp to thaw. What will not help is a language that makes you write your own object system.
> P.S. Nice troll!
This is war. No fraternizing.
:)
--
kenny tilton clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- * "Isn't that cute an extra belly button You need to put your pants back on honey " -- Salt N Pepa
Villeneuve wrote: > "Larry Clapp" <la...@theclapp.org> wrote in message > news:slrnbl6l0s.ca7.larry@theclapp.ddts.net... >> I've seen this statement ("using the full power of [Lisp]") a lot. >> In my (limited) experience, it seems to show up most often in >> advocacy-type discussions about the incredible usefulness of >> macros. "We can write code to write code, and use the full power >> of Lisp to do so." It makes me curious -- how often has the person >> using the phrase fully demonstrated Lisp's power to his audience, >> before showing them macros?
>> As an example, if you created a new C pre-processor that did macros >> in a Lispier way (i.e. manipulated C code with C), and told me "and >> you can use the full power of C to do it", well, knowing a little >> C, this would not in-and-of-itself impress me. In the same way, if >> I knew a lot of C but not any Lisp, and you told me about macros >> and talked about "the full power of Lisp", but hadn't demonstrated >> said power in other examples, I think I'd tend to discount such >> statements as relatively meaningless.
> Well, I agree with that, but I think the main reason is that Lisp is > much better at manipulating lists (a natural way to represent Lisp > code) than C is at manipulating, say, strings. So writing macros > using such a C preprocessor would likely be quite painful.
Yes, exactly. Thus my point (and my only point): if you say to a C programmer that you can write code to write code "with the full power of Lisp", without having demonstrated some of that power, your statement probably won't have the desired impact.
I guess I really want to say: If you want to do Lisp advocacy, and in particular talk about the power of macros, *show* some of the power of Lisp instead of talking about it. That's all.
Kenny Tilton wrote: > > Doubtful. Students would probably be taught using ML or Haskell - in fact, > > those languages are already commonly used for the purpose, for many of the > > same kinds of reasons.
> Lawdy, all I hear are about are schools where students riot if you try > to teach them anything but java.
There's a wide range of schools. A school that teaches only Java would be a technical college or trade/vocational school, regardless of what it calls itself. There's a place for those, and there's a place for schools which teach programming language concepts grounded in a formal understanding of languages. I was referring to the latter. The former will always teach the current popular languages, and some of the ones in between may have to argue with their students about what they teach.
> Yes, and then the language got used. And when it got used people > naturally started adding in real-world stuff. And then they all got > together and standardized on all the real world stuff. Without losing > the groovy formal stuff.
One groovy formal thing CL seems to be missing is a formal description of the language semantics. A seemingly entirely irrelevant thing in the Real World, but something that's useful and important in academia.
Another item missing from CL are continuations, which regardless of their direct Real World utility, have a great deal of importance for language implementations, as evidenced by influential books like Appel's "Compiling with Continuations". The applicability of these sorts of compilation strategies extend way beyond academia.
Although you don't need first-class continuation capture in a language to implement these sorts of strategies, it certainly helps in teaching and learning about such things, not to mention simplifying development of non-standard language control constructs.
Scheme is a Lisp dialect|variant which has these features, and others. Consider this a way of keeping Lisp competitive in the academic world, and preventing Lisp from being completely shut out of academia, or relegated to the occasional AI department.
> Scheme never got used enough for steps two and three to happen, > and what would be the point? CL is scheme plus steps two and three.
If that last sentence were really true, there'd be no issue.
> > Imagining that somehow, if Scheme simply went away or hadn't existed in the > > first place, that academia would focus instead on Common Lisp, is wishful > > thinking at best.
> We'll get them when Java collapses under its own weight.
Are you sure *you'll* get them, as opposed to say the future mutant stepchild of OCaml?
> The problem may be that Java and XML may start an Ice Age in > IT development that will take a decade for Lisp to thaw. What will > not help is a language that makes you write your own object system.
This seems to be a common misunderstanding of the purpose of the Scheme standard. It has a different goal from the CL standard - it constrains the family of languages that qualify as Scheme, it doesn't define a single standard language. Actually, the CL standard does the same thing, but it just leaves a lot fewer things unspecified.
All fully-fledged Scheme implementations have an object system. Some of them even integrate with Java's object system pretty neatly, so what you consider a disadvantage may actually be a strong point.
> > P.S. Nice troll!
> This is war. No fraternizing.
> :)
Oh, war is it? Don't mind me, I'm just sitting here in the lotus position with a beatific smile on my face. If you look carefully, you may even notice that I'm hovering a few fractions of an inch above the ground. When you embrace the full diversity of expression that is Lisp, anything becomes possible...
Kenny Tilton <ktil...@nyc.rr.com> writes: > Tom Lord wrote: > > .. it's naive to respond to > > Common Lisp by saying things like "But Scheme is so much _cleaner_ -- > > why don't you agree that Common Lisp sucks?". We can acknowledge > > that it has been the experience of people deeply involved with Common > > Lisp that, unreasonable as it may sound, they have had to put up with > > a lot of such responses over the years.
> Can anyone confirm this? Is that why some Lispniks have a cow when > Scheme or even recursion gets mentioned?
In my Lisp advocacy, I run constantly into the wall of Scheme. I've taken recently to telling people that CL is all the power that you'd hoped C++ would have, with most of the elegance of Scheme, but almost none of the puzzles. That, and I tell them that Scheme was a pedantic tool, and CL is an engineering tool. Before I came up with good answers, though, it drove me nuts trying to convince people that car/cdr/cons/lambda/cond doesn't mean Scheme.
> If so, perhaps these Lispniks should take consolation from Scheme > being a failed experiment and just lighten up. Steele and Sussman were > wrong.
Oh my goodness, no, it was a resounding success. We reaped the benefits (well defined lexical scope). It's the various latter-day Schemes that are the failures.
-- /|_ .-----------------------. ,' .\ / | No to Imperialist war | ,--' _,' | Wage class war! | / / `-----------------------' ( -. | | ) | (`-. '--.) `. )----'
Thomas F. Burdick wrote: > Kenny Tilton <ktil...@nyc.rr.com> writes: >>If so, perhaps these Lispniks should take consolation from Scheme >>being a failed experiment and just lighten up. Steele and Sussman were >>wrong.
> Oh my goodness, no, it was a resounding success.
No, to succeed they had to supplant Lisp, not just irritate Lispniks.
>... We reaped the > benefits (well defined lexical scope).
They had to invent a language to come up with lexical scope? You know, Steele made the same mistake with constraints; he made a whole new language. Variable assignment was done by a constraint. I am not making this up. Turned out to be a little slow. :)
We need a bumper sticker: "Make (new) datatypes, not languages." Cells don't make you adopt anything other than Cells. Steele always makes you take up a new language.
>.. It's the various latter-day > Schemes that are the failures.
Oh. What happened? Is the spec a page and a half now?
:)
--
kenny tilton clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "Career highlights? I had two. I got an intentional walk from Sandy Koufax and I got out of a rundown against the Mets." -- Bob Uecker
> Lawdy, all I hear are about are schools where students riot if you try > to teach them anything but java.
There are some schools like that, yes, but the ones on the cutting edge of language design are not like that. I remember that in my *high-school* you could take C++, Prolog, and Lisp before you graduated. In our University's CS program, they teach you Scheme, Java, C, Smalltalk, and Python by the time you get halfway through your second year.
> Yes, and then the language got used. And when it got used people > naturally started adding in real-world stuff. And then they all got > together and standardized on all the real world stuff. Without losing > the groovy formal stuff.
Less is more. People teaching language theory (where Scheme is largely taught) aren't interested in direct practical usage. They're interested in something that's good as a teaching and a research platform. Something that you can easily remember the entire spec to fits that bill much better than something with a 1000 page spec. Plus, CL doesn't have a lot of the "groovy formal stuff" that has come out in the last few years. Its type system isn't (as far as I can see) based on any rigorous mathematical theory (like the type systems in ML, Haskell, etc) and it has lots of features (exceptions) that are useful, but don't map to any central flow-control paradigms.
> We'll get them when Java collapses under its own weight. The problem may > be that Java and XML may start an Ice Age in IT development that will > take a decade for Lisp to thaw. What will not help is a language that > makes you write your own object system.
If you want to research object systems, you'd write your own anyway. If you don't, you'd use something off the shelf. Many of the major Schemes come with pre-canned object systems. Also, I'm curious --- how integral do you really think Scheme *is* to academics? Its usually a first year teaching language, designed to teach the basic theories of computation. When you go further along the line, they teach you all sorts of other languages to introduce you to different computing paradigms. Finally, once you get heavily into language theory, you're usually working with something like ML, Haskell, or one of the professor's pet languages.
Kenny Tilton wrote: > They had to invent a language to come up with lexical scope? You know, > Steele made the same mistake with constraints; he made a whole new > language. Variable assignment was done by a constraint. I am not making > this up. Turned out to be a little slow. :)
Some kinds of changes do require either a new language, or at least fundamental changes to an existing language. Lexical variables and continuations are two such features. When making such changes, it's often useful, and even important, to start from scratch, so as not to be misled by inherited design assumptions that may not make sense in the context of the new feature. Inventing useful new features is not easily done from a perspective in which the current status quo is accepted as an axiom.
What Sussman & Steele did was to improve on some choices that were made early in Lisp's history, when the lambda notation was first borrowed from Alonzo Church. McCarthy says at: http://www-formal.stanford.edu/jmc/history/lisp/node2.html that "it seemed natural to use the [lambda]-notation of Church (1941). I didn't understand the rest of his book, so I wasn't tempted to try to implement his more general mechanism for defining functions."
It turned out that that Church's "more general mechanism for defining functions" was a lot more important than might have been imagined. Lisp's original lambda was a little broken, and Sussman & Steele showed how to fix it. Such a fundamental fix creates a new language, whether it's made to an existing variety of Lisp or implemented in a brand-new variety. See below.
> We need a bumper sticker: "Make (new) datatypes, not languages." Cells > don't make you adopt anything other than Cells. Steele always makes you > take up a new language.
This view comes from a somewhat narrow perspective of what a language is. CL+Cells is a new language - you can't write code with Cells and run it on a CL without Cells being present. The line between language and library may not seem very blurry in this case, but that's not always the case.
Once a useful new feature has been identified, the question then becomes whether that feature belongs in existing languages. CL and some other Lisps answered "yes" for lexical variables, but "no" for continuations, for example. Such choices are a central reason why different languages exist - if you could just throw all imaginable features in a bucket, and call it a language, we'd all be using that language - which would truly be a ball of mud. But the reality is that once you throw certain features in the bucket, some other features will no longer fit well, if at all. That's why we have lots of different languages.
Many of those different languages aren't, by any stretch of the imagination, Lisp. But Lisp has demonstrated the potential to cover a larger part of the possible design space than many languages. But it can't do that by picking a single set of features. If it does that, then any language without that exact set of features won't be Lisp, and Lisp loses by that - loses flexibility, loses potential, and loses mindshare, not to mention encouraging the proliferation of non-Lisps.
For Lisp to reach its true potential, it has to have more than one variant, some of which will have features incompatible with other variants - whether it's the number of namespaces, the presence of absence of some features, the way in which they treat program source, or something else. The fact of these incompatibilities says nothing other than that different tradeoffs were made in a larger design space - known, to some, as Lisp.
Rayiner Hashem wrote: >>Lawdy, all I hear are about are schools where students riot if you try >>to teach them anything but java.
> There are some schools like that, yes, but the ones on the cutting > edge of language design are not like that.
To both you and Anton, sorry, but give me some credit. I would not bring this up if we were discussing Bubba's Drive-Thru Institute of Technology. Look it up on Google if you don't have the last three years of c.l.l. memorized like I do. It was a top school, I forget which. Search on both "riot" and "Java".
> ...In our University's CS program, they teach you Scheme, > Java, C, Smalltalk, and Python by the time you get halfway through > your second year.
Sounds like a trade school to me. Or are you going to give us some different-laguages-for-different-purposes moral relativistic crap?
> Less is more. People teaching language theory (where Scheme is largely > taught) aren't interested in direct practical usage.
<sigh> What exactly do you think languages are for? I can just see these same people working on abstract farm machinery. You can learn so much more about tilling if you don't get all bogged down in dirt!
yes, that's the thing. let's have a language whose spec fits on the head of a pin. no, you wouldn't want to do anything with it, that would totally ruin the pretty little spec. hang on, do we really need that "if" statement? where are those scissors...
> ... Something that you can easily remember the entire spec to
Now there's a language design principle. Another good one is that you can sing it to the tune of Camptown Races.
> fits that bill much better than something with a 1000 page spec.
Oh yes, I much prefer reinventing all the code documented by those 1000 pages. God forbid my soccer client should ever take a shot on goal, I'm busy coding up my own trig functions so i could do the math to calculate the angle of my shot if I ever got done reinventing those 1000 pages, which I won't, so why the hell am I reinventing these trig functions?!
aflac!!!!!!
> ...Its type system isn't (as far as I can see) > based on any rigorous mathematical theory
Well tsk frickin tsk.
> ML, Haskell, etc) and it has lots of features (exceptions) that are > useful, but don't map to any central flow-control paradigms.
I have all this astonishing CL-code functionality over here and the type system i am using doesn't even rigorously mathematically map to any central flow-control paradigm?! I must be even better than I tell people I am! Gotta update that resume...
> If you want to research object systems, you'd write your own anyway.
Using CLOS and an implementation that supports the MOP? <sigh> Hell, Cells extend OO to deliver on the grail of object re-use with nothing more than unhygienic macros.
Oh, well, i guess this "gee, it's good for research" consolation prize to the Scheme insurrectionists is tantamount to an admission of defeat. We accept.
>>This is war. No fraternizing.
> Only in your head.
That's more like it.
:)
--
kenny tilton clinisys, inc http://www.tilton-technology.com/ --------------------------------------------------------------- "Career highlights? I had two. I got an intentional walk from Sandy Koufax and I got out of a rundown against the Mets." -- Bob Uecker
Kenny Tilton writes: > yes, that's the thing. let's have a language whose spec fits on the > head of a pin. no, you wouldn't want to do anything with it, that
Given the advances in the field of microelectronics, I guess it may be already possible to put the Common Lisp spec on the head of a pin.
Kenny Tilton <ktil...@nyc.rr.com> writes: > Tom Lord wrote: > > .. it's naive to respond to > > Common Lisp by saying things like "But Scheme is so much _cleaner_ -- > > why don't you agree that Common Lisp sucks?". We can acknowledge > > that it has been the experience of people deeply involved with Common > > Lisp that, unreasonable as it may sound, they have had to put up with > > a lot of such responses over the years.
> Can anyone confirm this? Is that why some Lispniks have a cow when > Scheme or even recursion gets mentioned?
> Is Scheme seen as an insurgent language? Steele and Sussman traitors? > This is starting to make some sense.
> If so, perhaps these Lispniks should take consolation from Scheme > being a failed experiment and just lighten up. Steele and Sussman were > wrong. They created something small, yes, and with appeal to some who > go for the short spec, but that is as far as it went. The CL crowd > voted with its feet and stood on the mother ship. Game over.
Certainly Steele and Sussman are not traitors.
For one thing, the only sense in which Steele abandoned anything is that he left both communities. ;)
However, there is an underlying problem that there is NOT a canonical notion of "simple". (For an elaboration, read my paper on equality. The same issues are in play.) In brief, you have to say "simple in what way?"
I claim that "simplicity of implementation" necessarily sacrifices "simplicity of programming", and vice versa. Scheme often uses the unadorned term "simple" as if it were "obvious" that "less to learn" was better. ("simple to learn" is probably some third axis, actually.)
While one can draw a three dimensional space with ease of programming on one axis, ease of learning on another, and ease of implementation on a third, this is deceptive because it suggests that it's easy to locate an object anywhere in that space. These axes are somewhat interdependent, and so making it easier on the implementors usually makes things harder on the users, and vice versa. Some counterexamples are possible, but there are reasons, I think, that most human languages are not like esperanto and loglan, and that even after the development of these so-called "simpler" languages, humans didn't flock to their use. Humans are equipped in hardware to spend a longer learning and to hold a large amount of information in exchange for easier programming. So the claim that CL is "less simple" addresses the language, not the programs.
I personally find CL programs simpler to read than Scheme programs in most cases exactly for the same reason that I would expect to find a copy of Gone with the Wind harder to read in Esperanto than in English. The fewer words you have to work with, the more heaps of modifiers and early little definitinos you need to "catch up" with a larger language.
There is some tiny fussing about the "size of the core" but that's all red herring because the actual difference between the CL core (not normally separately articulated) and the Scheme core is tiny, and is not by any means the bulk of what you spend your time learning about when programming either language.
I don't care to characterize Scheme as failed, though I have heard this characterization. If there are extant happy users, that's fine with me. I have no deathwish for Scheme. Just not a desire to be forced to use it.
And, moreover, in the context of this message, I have a desire not to be forced to use their metric of "simple".
I regard "making an implementation" as a "loop invariant" to be done once early, and as such it's ok for it to take a little longer than the iterative part (the part that will execute many times), that is, "programming". Scheme people are taught how to make an implementation virtually overnight. I don't care if it takes months to make an implementation. I care whether there are _enough_ implementations (and CL has "enough"--sometimes is even accused of having too many). What I really want is that when I sit down to write programs, I can do that. And with reasonable brevity.
Kenny Tilton <ktil...@nyc.rr.com> writes: > We need a bumper sticker: "Make (new) datatypes, not languages."
More than a decade ago, I began saying that if I could do it all over, I'd rather see standards for datatypes (and their accessors, and only a few control mechanisms, for the sake of error handling) rather than standards for languages. If datatypes (and these few other matters) were more standard, languages would not matter. (That is, they could be a private programmer choice that didn't interfere with later linking.) That's a bit of a pipe dream because sometimes languages derive their power from the choice of datatype, and so the two are not always separable.
The fact that CL and C do not agree on what an integer is, and that even a language (such as Java) that acknoledges the need for a (pardon the bad pun) "real" Integer does not agree with CL on where it goes in the type tree makes it very hard for data to be shared among these languages without expensive (un)marshalling, which was (I was once told) the effective downfall of CORBA. Likewise for NUL-terminated strings vs length-counted strings. And so on. That we don't have names for each others' "valuable goods" makes it very hard to serve each other.
> > Oh my goodness, no, it was a resounding success.
> No, to succeed they had to supplant Lisp, not just irritate Lispniks.
Scheme is older than Common Lisp, and ANSI Scheme is older than ANSI Common Lisp. If a language succeeds only by supplanting all previous languages in its family, then Common Lisp is a near-success: it supplanted all previous languages in the Lisp family except for Scheme.
Thus people who hold to Tilton's definition of success cannot proclaim Common Lisp a success except by denying that Scheme is a Lisp.
cesuraS...@verizon.net (William D Clinger) writes:
> Kenny Tilton quoting Thomas F. Burdick: > > > Oh my goodness, no, it was a resounding success.
> > No, to succeed they had to supplant Lisp, not just irritate Lispniks.
> Scheme is older than Common Lisp, and ANSI Scheme is older than > ANSI Common Lisp. If a language succeeds only by supplanting > all previous languages in its family, then Common Lisp is a > near-success: it supplanted all previous languages in the Lisp > family except for Scheme.
> Thus people who hold to Tilton's definition of success cannot > proclaim Common Lisp a success except by denying that Scheme is > a Lisp.
A curious analysis.
Incidentally, another way of looking at it is to say that ANSI would likely not, as a procedural matter, have allowed two co-existing standards for the same language. So, one might conclude, that ANSI, at least, must believe that Scheme and Common Lisp are not the same language.
Not that I (nor anyone) is empowered to speak for ANSI. Just speculating using the same power of pseudo-logic (or actual logic applied to pseudo-facts) that Will was using.
And not that anything ANSI (an entity with no stake in the outcome) thinks necessarily really matters... ;)
> Sounds like a trade school to me. Or are you going to give us some > different-laguages-for-different-purposes moral relativistic crap?
Right. Because we all know how popular Scheme and Smalltalk are in the commercial world... These languages are used because they are simple to learn, simple to teach, and have a wide body of literature and learning materials already available. Further, they each demonstrate different computing paradigms in a relatively pure manner:
1) Scheme: First year language (freshman undergraduate) used to teach basic computing paradigms. Has very little cruft to get in the way. Also useful for shock value. Its different from languages that people may know already (like BASIC) so its useful for teaching ideas without past experience getting in the way.
2) Java: Its a very useful teaching language. Its has lots of libraries available and good documentation. Because of the easily accessible libraries, students can get started on some "interesting" programs (read: games) that provide something similar to the software they see normally used on computers. CL might be a good fit here, as a powerful language with a wide range of capabilities, but hey, you gotta throw a bone to the commercial market somewhere, right?
3) Smalltalk: Useful for teaching OOP because its pure OOP, without anything else to get in the way.
4) C: Everybody should know C. It gives a very good understanding of how machines work at the lowest levels. The first C assignment in our particular course has students wade through SPARC assembly trying to figure out what each statement does.
I don't really know what else they use at our school, but I know that even MIT and Caltech push languages as varied as Ocaml, Scheme, and Eiffel, depending on a professor's particular bent.
> <sigh> What exactly do you think languages are for?
It really depends on what you want to do. For some people, a language is a way to reach a goal. For others, it is the goal. Your statement is like asking, "what is English for?"
> same people working on abstract farm machinery. You can learn so much > more about tilling if you don't get all bogged down in dirt!
Nice imagery, but unfortunately, it works better for my point than yours. If you just want to know the theoretics of tilling, there is no need for you to move dirt around. Similarly, if you just want the theory, there is no need for all the functionality of CL.
> Now there's a language design principle. Another good one is that you > can sing it to the tune of Camptown Races.
That smaller (and simpler) is better is a well established design philosophy. If you have a problem with that, then your opposition is a whole lot bigger than the Scheme community.
> Oh yes, I much prefer reinventing all the code documented by those 1000 > pages.
That's a really dumb argument that just keeps popping up. Nobody is reinventing the code in those 1000 pages of specs, because they don't need it. Have you ever been through a CS course? The concentration in the first few years (where Scheme is mainly taught) is not creating useful programs. Its teaching theory. Students in that phase are learning about data structures and algorithms --- they don't need any library support beyond a simple function to print strings and numbers!
> Well tsk frickin tsk.
You might not care, but if you're studying type theory you do!
> > ML, Haskell, etc) and it has lots of features (exceptions) that are > > useful, but don't map to any central flow-control paradigms.
> I have all this astonishing CL-code functionality over here and the type > system i am using doesn't even rigorously mathematically map to any > central flow-control paradigm?! I must be even better than I tell people > I am! Gotta update that resume...
It's not about functionality or your resume or anything of the sort. The goal isn't to pop out efficient little code monkeys as fast as possible. Its to create computer *scientists*. You sound like a practitioner who can't see the usefulness of those "stupid academics." We all know where thinking like that gets you.
Look, if all you want to do is pound your little hammer all day and generate "real-world" programs, than go ahead. If you believe that CL is the be-all end-all of computer languages, and that there is nowhere else to go, and that the only useful thing left is to sit down and code web portable back-ends, then fine. But thankfully, nobody is going to stop trying to push the field of computer science forward just because little Kenny thinks that he has no use for a better hammer.