"an unwieldy, overweight beast"
"intellectual overload"
"did kill Lisp"
"A monstrosity"
"killed Lisp"
"sucks"
"an aberration"
"incomprehensible"
"a nightmare"
"no future"
"a significantly ugly language"
"hacks"
"unfortunate"
"bad"
In context:
Brooks and Gabriel 1984, "A Critique of Common Lisp":
Every decision of the committee can be locally rationalized
as the right thing. We believe that the sum of these
decisions, however, has produced something greater than its
parts; an unwieldy, overweight beast, with significant costs
(especially on other than micro-codable personal Lisp
engines) in compiler size and speed, in runtime performance,
in programmer overhead needed to produce efficient programs,
and in intellectual overload for a programmer wishing to be
a proficient COMMON LISP programmer.
-----
Bernard Lang:
Common Lisp did kill Lisp. Period. (just languages take a
long time dying ...) It is to Lisp what C++ is to C. A
monstrosity that totally ignores the basics of language
design, simplicity and orthogonality to begin with.
-----
Gilles Kahn:
To this day I have not forgotten that Common Lisp killed
Lisp, and forced us to abandon a perfectly good system,
LeLisp.
-----
Paul Graham, May 2001:
A hacker's language is terse and hackable. Common Lisp is not.
The good news is, it's not Lisp that sucks, but Common Lisp.
Historically, Lisp has been good at letting hackers have their
way. The political correctness of Common Lisp is an aberration.
Early Lisps let you get your hands on everything.
A really good language should be both clean and dirty:
cleanly designed, with a small core of well understood and
highly orthogonal operators, but dirty in the sense that it
lets hackers have their way with it. C is like this. So were
the early Lisps. A real hacker's language will always have a
slightly raffish character.
Organic growth seems to yield better technology and richer
founders than the big bang method. If you look at the
dominant technologies today, you'll find that most of them
grew organically. This pattern doesn't only apply to
companies. You see it in sponsored research too. Multics and
Common Lisp were big-bang projects, and Unix and MacLisp
were organic growth projects.
-----
Jeffrey M. Jacobs:
Common LISP is the PL/I of Lisps. Too big and too
incomprehensible, with no examination of the real world of
software engineering.
... The CL effort resembles a bunch of spoiled children,
each insisting "include my feature or I'll pull out, and
then we'll all go down the tubes". Everybody had vested
interests, both financial and emotional.
CL is a nightmare; it has effectively killed LISP
development in this country. It is not commercially viable
and has virtually no future outside of the traditional
academic/defense/research arena.
-----
Dick Gabriel:
Common Lisp is a significantly ugly language. If Guy and I
had been locked in a room, you can bet it wouldn't have
turned out like that.
-----
Paul Graham:
Do you really think people in 1000 years want to be
constrained by hacks that got put into the foundations of
Common Lisp because a lot of code at Symbolics depended on
it in 1988?
-----
Daniel Weinreb, 24 Feb 2003:
Having separate "value cells" and "function cells" (to use
the "street language" way of saying it) was one of the most
unfortuanate issues. We did not want to break pre-existing
programs that had a global variable named "foo" and a global
function named "foo" that were distinct. We at Symbolics
were forced to insist on this, in the face of everyone's
knowing that it was not what we would have done absent
compatibility constraints. It's hard for me to remember all
the specific things like this, but if we had had fewer
compatibility issues, I think it would have come out looking
more like Scheme in general.
-----
Daniel Weinreb, 28 Feb 2003:
Lisp2 means that all kinds of language primitives have to
exist in two versions, or be parameterizable as to whether
they are talking about the value cell or function cell. It
makes the language bigger, and that's bad in and of itself.
-----
Guy L. Steele, Jr., July 1989:
I think we may usefully compare the approximate number of pages
in the defining standard or draft standard for several
programming languages:
Common Lisp 1000 or more
COBOL 810
ATLAS 790
Fortran 77 430
PL/I 420
BASIC 360
ADA 340
Fortran 8x 300
C 220
Pascal 120
DIBOL 90
Scheme 50
>>8
1. SICP doesn't cover macros at all, let alone hygiene.
2. I gave you a working version of defmacro last time, so quit bitching
3. syntax-parse and the syntax parameters stuff aren't "Scheme", they are Racket.
4. As I said last time, if you don't care about hygiene, fine, but don't pretend that your macros are anything better than Cs.
Name:
Anonymous2011-03-13 10:43
1. They why do you hate defmacro?
2. If you try to use defmacro with Scheme, other'll label you "troll" and ban from Scheme community.
3. I don't know neither Scheme, nor Racket.
4. Can you implement a `for` loop with C macros?
>>15
Allow me to rephrase, dynamic scope by default, and pervasively is a bad idea.
Name:
Anonymous2011-03-13 10:54
>>17
But there is nothing bad with defmacro by default.
Name:
Anonymous2011-03-13 10:56
BTW, I don't thing C/C++ is bad, because you can get a segfault. C/C++ is bad, because you've no way to create system without segfault. You can't add garbage collector to C/C++, neither you can add dynamic typing.
>>18
Of course you don't think that, you've already stated that you think hygiene is a worthless concept. I, on the other hand, am interested in writing macros that can't leak their implementation details.
Name:
Anonymous2011-03-13 11:01
>>20
So, it's a matter of discipline. If you love army and drilling, then Scheme and Haskell are for you. If you more of a free thinker, then CL is the best Lisp.
>>23
Racket is arguably a superset of Scheme, but common Racket programming style uses enough extensions that they no longer feel that it is intellectually honest to call it Scheme.
Name:
Anonymous2011-03-13 11:23
I AM THE MOST FUCKING NGGER MATURE!!
YOU MUST GOOD WITH COMPUTER!!
DO YOU HEAR THAT SOUND?
IT IS THE SOUND OF A WILD NGGER MATURE, CHARGING YOUR ANUS.
YOU MUST INTERNET LIKE YOU MAY NEVER INTERNET AGAIN!!
YOU CANNOT KILL ME. I HAVE 29 COMPUTER INTERNETS AND YOU CAN NIGGER DICK SHITS!
HEIL NIGGERS.
HEIL BLACK AFRIKA.
NIG HEIL BLACK HITLER!!
>>27
You completely misunderstand the purpose of hygiene. What happens when I use your macro, and oh look it shadows half a dozen common variable names that I'm using. Hygiene is like throwing useful exceptions, it is a service to other programmers.
>>33
I'm assuming that t is the temporary variable name?
ok, say I want to swap two variables t and a, will this fail in your system?
Name:
Anonymous2011-03-13 11:39
>>34
`&` means "m:" (shorthand for macro) should treat `t` as gensymed var. Of course, I can call gensym automatically, when macro is really compliated. But in most cases `&` suffices.
>>37
You are arguing with a braindead fanatic and quite possibly a troll. This will lead nowhere.
Name:
Anonymous2011-03-13 11:50
>>39
Nope. His arguments just aren't strong enough. But if he shows us, that hygiene helps rewriting 100 lines code snippet into 10 lines one, I'll gladly agree that hygiene is cool.
Name:
Anonymous2011-03-13 11:50
>>38
That's arguably true, in the same sense that writing correct error handling won't usually make your code shorter. But if you have decided that the it's worth it, a macro system that does renaming implicitly, will save you time over the explicit renaming kind. e..g
(define-syntax swap!
(syntax-rules ()
((swap! a b)
(let ((temp a))
(set! a b)
(set! b temp)))))
;; versus
(define-syntax swap!
(er-macro-transformer
(lambda (form rename compare)
(let ((a (cadr form))
(b (caddr form))
(temp (rename 'temp)))
`(,(rename 'let) ((,temp ,a))
(,(rename 'set!) ,a ,b)
(,(rename 'set!) ,b ,temp))))))
>>41
With real macros I can make the error handling shorter.
Name:
Anonymous2011-03-13 11:54
>>42
Those are real macros, and if you can show me a version of swap! in CL, that doesn't shadow (easy enough), and that will work even if set and let are rebound at the expansion site, then more power to you.
>>48
Maybe it does, but when joey down the hall uses your FOO function on a BAR struct and gets a divide-by-zero exception instead of a malformed-BAR error, you've fucked up
Name:
Anonymous2011-03-13 12:07
>>50
Joey's retard and should use Java. Java is pretty bureaucratic and requires declaring precise interface for everything.
>>32
I haven't read the full thread, but I always use gensyms and I don't think hygiene is useless. I just don't like it being forced on me - I ensure it myself. As for swap!, why would I implement that myself when Common Lisp comes with shiftf by default (it works on generic places). Of course, I know how to implement shiftf myself, but there's little point in me posting such an implementation as it would require one to be familiar with how CL's generic places work and the API/functions/macros which are used to generate code which work with them ([m]setf[m/] and all related macros/functions).
>>55 I just don't like it being forced on me - I ensure it myself
Sure, it's reasonable to debate whether or not hygiene should be the default, just the same as it is reasonable to debate whether type safety should be enforced at compile time. I only take exception to programmers who assume they are immortal, and that neither will be an issue.
As for swap!, why would I implement that myself when Common Lisp comes with shiftf by default
True, but it helps to have a concrete example to argue about
The correct version of >>4 is
(define-syntax (aif stx)
(syntax-case stx ()
((aif p t f)
(with-syntax ((it (datum->syntax stx 'it)))
#`(let ((it p))
(if it t f))))))
If you don't like the verbose with-syntax you can use:
(define-syntax (unhygienic stx) ; name it whatever you want
(syntax-case stx ()
((unhygienic stx (id ...) . b)
#'(with-syntax ((id (datum->syntax stx 'id)) ...) . b))))
So that aif becomes:
(define-syntax (aif stx)
(syntax-case stx ()
((aif p t f)
(unhygienic stx (it)
#'(let ((it p))
(if it t f))))))
Now, please, stop being trolled so easily, Schemers.
>>60 Now, please, stop being trolled so easily, Schemers.
You mean I should do something productive with my Sunday instead of getting involved in stupid arguments on the internet? Are you crazy? :)
Name:
Anonymous2011-03-14 11:34
bump |> anus.my.{hax? -> ye; _ -> no}
Name:
Anonymous2011-03-14 14:08
Man. Twice the size of PL/I.
That's really saying something.
And now, some dude's Emacs fortune file issues some rebuttals. Maybe.
Any differences between Common Lisp and Scheme pale in contrast to
differences between Lisp and Java, C, etc. It's like arguing over
Guinness or Murphy's when everyone else is drinking Bud and Miller.
-- Joe Marshall, comp.lang.lightweight
The human race will decree from time to time: "There is something at which
it is absolutely forbidden to laugh."
-- Nietzche on Common Lisp
Bawden is misinformed. Common Lisp has no philosophy. We are held
together only by a shared disgust for all the alternatives.
-- Scott Fahlman, explaining why Common Lisp is the way it is....
CLOS isn't the solution to everything. Common Lisp (which includes
CLOS) is the solution to everthing ;)
-- Kelley Edward Murray (kem@franz.com)
"Like DNA, such a language [Lisp] does not go out of style."
-- Paul Graham, ANSI Common Lisp
Greenspun's Tenth Rule of Programming: any sufficiently complicated C
or Fortran program contains an ad hoc informally-specified bug-ridden
slow implementation of half of Common Lisp.
-- Phil Greenspun
"Including Common Lisp."
-- Robert Morris
Common Lisp, a happy amalgam of the features of previous Lisps
-- Winston & Horn, Lisp
Common Lisp is politics, not art.
-- Scott Fahlman
The utility of a programming language could be measured by
1) How easily can it be implemented?
2) How effectively can it be used to implement other languages?
3) How brittle is it?
4) How readable is it?
5) How expressive is it?
CL fails on 1, 3 and 4. It's fine on 2 and does well on 5.
>>74 4) How readable is it?
CL fails on ... 4.
I hope that's not for ``omglol parenteses xdd'', but something more serious like the order of obj/key parameters, etc.
Name:
Anonymous2011-03-22 22:17
>>76
I'm not >>74, but I do hate Lisp for its parentheses.