Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon.

Pages: 1-4041-8081-

Expert opinions of Common Lisp

Name: Anonymous 2011-03-13 8:30

Here's what the EXPERTS say about Commune Lisp:

"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

Name: Anonymous 2011-03-13 8:38

Back to /ruby/ , waxman

Name: Anonymous 2011-03-13 9:31

We all know that Graham said all of that to promote his new Arc Lisp.

Name: Anonymous 2011-03-13 9:52

You can say bad things about CL, but they wont make your fucking Scheme a good language.


Macro in CL DSL

m:aif cond then else -> if it:$cond $then $else


Macro in CL

(defmacro aif (cond then else)
  `(let ((it ,cond))
     (if it ,then ,else)))


"Macro" in Scheme/Racket.

#lang racket
(require racket/stxparam)
 
(define-syntax-parameter it (lambda (stx) (raise-syntax-error 'anaphora "missed context" stx)))
 
(define-syntax-rule (aif cond then else)
  (let ([temp cond])
    (syntax-parameterize ([it (make-rename-transformer #`temp)])
                         (if temp then else))))

Name: Anonymous 2011-03-13 9:53

CL DSL

find x [@xs m:@x @ys] -> m


Scheme/Racket

#lang racket
(require syntax/parse)
(define-syntax (find stx)
  (syntax-case stx ()
    [(_ (patt ...) expr) #`(begin (define-splicing-syntax-class my-class
                              (pattern (~seq patt ...)))
                            (syntax-parse expr
                                          [(a (... ...) q:my-class b (... ...)) #`q]
                                          [_ #f]))]))
 
(find (W o r l d) #`(H e l l o   W o r l d))

Name: Anonymous 2011-03-13 10:20

>>4-5
fuck you faggot

Name: Anonymous 2011-03-13 10:21

>>4
trolling with a retarded version of a worthless macro
You again, *sigh*

Name: Anonymous 2011-03-13 10:30

>>6>>7
But I love anaphoric macros and pattern matching out-of-box!

You, people, were just brainwashed with SICP crap about hygiene.

Name: Anonymous 2011-03-13 10:35

>>8
You, people, were just brainwashed with SICP crap about hygiene.
(-︢  ̱-︡   )

Name: >>7 2011-03-13 10:36

>>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: Anonymous 2011-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?

Name: Anonymous 2011-03-13 10:44

ITT: Gay tensions.

Name: Anonymous 2011-03-13 10:47

>>11
I don't hate defmacro any more than I hate people who think dynamic scope is a good idea; I'm deeply disappointed.

Name: Anonymous 2011-03-13 10:50

Dynamic scope is a good idea.

Name: Anonymous 2011-03-13 10:51

>>13
Dynamic scope has it's use. But I'm using lexical scope, when I need local vars and/or OOP-like functionality.

Name: Anonymous 2011-03-13 10:51

>>14
Newlisp user spotted.

Name: Anonymous 2011-03-13 10:53

>>15
Allow me to rephrase, dynamic scope by default, and pervasively is a bad idea.

Name: Anonymous 2011-03-13 10:54

>>17
But there is nothing bad with defmacro by default.

Name: Anonymous 2011-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.

Name: Anonymous 2011-03-13 10:56

>>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: Anonymous 2011-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.

Name: Anonymous 2011-03-13 11:10

>>21
If you love army and drilling
Hardly. It's very easy to break hygiene, it just needs to be a conscious decision.

Name: Anonymous 2011-03-13 11:15

what's the difference between racket and scheme ?

Name: Anonymous 2011-03-13 11:20

>>23
Scheme is for autists, racket for hipsters.

Name: Anonymous 2011-03-13 11:23

>>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: Anonymous 2011-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!!

Name: Anonymous 2011-03-13 11:23

>>22
easy to break hygiene,
see >>4

I prefer absence of confirmations to clicking 10 times "Ok" button, even if I enter "rm -rf /". I'm fuckin' programmer, so I'm know what I'm doing.

Name: Anonymous 2011-03-13 11:25

>>23
Racket has static typing and lazy/call-by-name evaluation, like in Haskell.

Name: Anonymous 2011-03-13 11:28

>>24
They're both for CS-students interested in theory. I won't recommend them to people wanting to do cool video game or a useful utility.

Name: Anonymous 2011-03-13 11:28

People actually *like* ``hygienic'' macros?

Name: Anonymous 2011-03-13 11:29

>>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.

Name: Anonymous 2011-03-13 11:31

Here's a simple task for the CLispers, write a useful implementation of swap! without using gensyms. Then tell me that hygiene is useless.

Name: Anonymous 2011-03-13 11:33

>>32

m:swap a b -> &t:a -> a=:b -> b=:&t

Name: Anonymous 2011-03-13 11:34

>>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: Anonymous 2011-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.

Name: Anonymous 2011-03-13 11:40

>I can call gensym manually
seflf fix

Name: Anonymous 2011-03-13 11:41

>>35
should treat `t` as gensymed var
What's that, an auto gensym, I thought hygiene was useless.

Name: Anonymous 2011-03-13 11:43

Hygiene won't make your code shorter.

Name: Anonymous 2011-03-13 11:46

>>37
You are arguing with a braindead fanatic and quite possibly a troll. This will lead nowhere.

Name: Anonymous 2011-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: Anonymous 2011-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))))))

Name: Anonymous 2011-03-13 11:52

>>41
With real macros I can make the error handling shorter.

Name: Anonymous 2011-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.

Name: Anonymous 2011-03-13 11:58

>>41
Hackers don't care about error handling.

Name: Anonymous 2011-03-13 12:00

that is to say

(let ((a 3)
      (temp 9))
  (let-syntax ((let (syntax-rules () ((let . rest) (syntax-error 'let "BAD LET"))))
               (set! (syntax-rules () ((set! . rest) (syntax-error 'set! "BAD SET")))))
    (swap! temp a)
    `(a ,a temp ,temp)))

should return (a 9 temp 3)

Name: Anonymous 2011-03-13 12:00

error handling is for users, to show them nicely formatted error message in a cute transparent window with animated bomb icon.

Name: Anonymous 2011-03-13 12:00

>>44
If writing proper code is too hard for you, then perhaps you can pick a different hobby

Name: Anonymous 2011-03-13 12:02

>>47
My code works properly.

Name: Anonymous 2011-03-13 12:04

>>47
Tell us, when was the last time you checked return from `fopen`?

Name: Anonymous 2011-03-13 12:04

>>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: Anonymous 2011-03-13 12:07

>>50
Joey's retard and should use Java. Java is pretty bureaucratic and requires declaring precise interface for everything.

Name: Anonymous 2011-03-13 12:08

>>49
The last time I wrote my fopen wrapper macro!

Name: Anonymous 2011-03-13 12:18

>>52
I'll interpret this as "never".

Name: Anonymous 2011-03-13 12:23

>>49,53
Last time I used it probably. I haven't used C in the past year and a half.

Name: Anonymous 2011-03-13 12:33

>>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).

Name: Anonymous 2011-03-13 12:39

>>4,5
Oh look, it's that troll again.

>>6-
Ignore troll posts, please.

Name: Anonymous 2011-03-13 12:40

>>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

Name: Anonymous 2011-03-13 12:42

Real Macros, for Real Men.

#define swap(a, b, temp) ({ (temp) = (a); (a) = (b); (b) = (temp); })

Name: Anonymous 2011-03-13 12:44

>>58
C/C++ CANNOT INTO GENSYM!!!1

Name: >>56 2011-03-13 12:47

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.

Name: Anonymous 2011-03-13 12:48

>>59
We don't want some silly gensym crutch, we want to specify exactly what memory is used to swap a value.

Name: Anonymous 2011-03-13 12:49

>>59
We can't have gensym, our language is not garbage collected.

Name: Anonymous 2011-03-13 12:52

>>62
Macros are compile-time constructs. You could have gensyms if you had access to the AST the compiler builds.

Name: Anonymous 2011-03-13 13:01

>>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: Anonymous 2011-03-14 11:34

bump |> anus.my.{hax? -> ye; _ -> no}

Name: Anonymous 2011-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

Name: Anonymous 2011-03-14 14:34

  ? ? ? ???
? ? ??. _, -?-???
? ./? l????Tf??? ?
??? |?|?????|??!l|
???_|????? ?y?|????,..?
? |?fr| ??_? ? L???? _,?/??l ??
? |??|?'''? r???,????? ???l ?? ? ?????????
??? | ??}? ?'I?|? {::::{ ??V??  ?
??|?? ?????????????
? ??| l!?Y ? Q?????
? ? ????l???? ????
????? ?? ? ? ? ??

Name: Anonymous 2011-03-14 14:34

  ? ? ? ???
? ? ??. _, -?-???
? ./? l????Tf??? ?
??? |?|?????|??!l|
???_|????? ?y?|????,..?
? |?fr| ??_? ? L???? _,?/??l ??
? |??|?'''? r???,????? ???l ?? ? ?????????
??? | ??}? ?'I?|? {::::{ ??V??  ?
??|?? ?????????????
? ??| l!?Y ? Q?????
? ? ????l???? ????
????? ?? ? ? ? ??

Name: Anonymous 2011-03-14 14:34

  ? ? ? ???
? ? ??. _, -?-???
? ./? l????Tf??? ?
??? |?|?????|??!l|
???_|????? ?y?|????,..?
? |?fr| ??_? ? L???? _,?/??l ??
? |??|?'''? r???,????? ???l ?? ? ?????????
??? | ??}? ?'I?|? {::::{ ??V??  ?
??|?? ?????????????
? ??| l!?Y ? Q?????
? ? ????l???? ????
????? ?? ? ? ? ??

Name: Anonymous 2011-03-14 14:35

  ? ? ? ???
? ? ??. _, -?-???
? ./? l????Tf??? ?
??? |?|?????|??!l|
???_|????? ?y?|????,..?
? |?fr| ??_? ? L???? _,?/??l ??
? |??|?'''? r???,????? ???l ?? ? ?????????
??? | ??}? ?'I?|? {::::{ ??V??  ?
??|?? ?????????????
? ??| l!?Y ? Q?????
? ? ????l???? ????
????? ?? ? ? ? ??

Name: Anonymous 2011-03-14 14:35

  ? ? ? ???
? ? ??. _, -?-???
? ./? l????Tf??? ?
??? |?|?????|??!l|
???_|????? ?y?|????,..?
? |?fr| ??_? ? L???? _,?/??l ??
? |??|?'''? r???,????? ???l ?? ? ?????????
??? | ??}? ?'I?|? {::::{ ??V??  ?
??|?? ?????????????
? ??| l!?Y ? Q?????
? ? ????l???? ????
????? ?? ? ? ? ??

Name: Anonymous 2011-03-14 19:13

http://lispm.dyndns.org/news?ID=NEWS-2010-10-29-1
THE DSL ``in Lisp''
Also known as ``in Lisp'' DSL

Name: Anonymous 2011-03-15 5:19

>>72
That's something different, IHBT.

Name: Anonymous 2011-03-22 21:46

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.

Name: Anonymous 2011-03-22 21:46


           /二\
          ( ̄\__ク   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ( ´∀`) < VIVA MEOWXICO!
        /    |    \ 
       /       .|     \________ 
       / "⌒ヽ |.イ |
   __ |   .ノ | || |__
  .    ノく__つ∪∪   \
   _((_________\
    ̄ ̄ヽつ ̄ ̄ ̄ ̄ ̄ ̄ | | ̄
   ___________| |
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| |

Name: Anonymous 2011-03-22 22:09

>>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: Anonymous 2011-03-22 22:17

>>76
I'm not >>74, but I do hate Lisp for its parentheses.

Name: Anonymous 2011-03-22 22:33

>>77
That's because you like cocks.

Name: Anonymous 2011-03-22 23:45

>>78
fuck you faggot, guess why they call it the gay lisp.

Name: Anonymous 2011-03-22 23:51

>>79
Because usually faggots like you have speech impediment?

Name: LISPPER 2011-03-23 2:17

>>80
exactly

Name: LISPPER 2011-03-23 9:37

>>81
I'm sorry, I'm the real LISPPER. LISP

Name: Anonymous 2013-05-09 5:30

>>null
nice dubs bro

Name: Anonymous 2013-05-09 13:33

LISP
GC is shit.

Name: Anonymous 2013-05-09 14:39

>>84
GC is a lie.

Name: Sagist 2013-05-09 16:39

I'd just like to bump all the actual /prog/ threads.

Don't change these.
Name: Email:
Entire Thread Thread List