Slashdot Mirror


Using Lisp to beat your Competition.

kovi writes "Paul Graham, the guy who developed what finally became Yahoo!Stores (and made him $50 million richer) wrote an article that explains how he used Lisp (the infamous programming language) as a competitive advantage against the competition. As a bonus: thoughts on startup experience." Its in pdf, but its actually worth a read. Very nifty.

418 comments

  1. Re:I can't stand articles like this by Anonymous Coward · · Score: 1
    Did you miss the footnote, or are you just being pedantic to sound smart? I'm sure the author took programming languages and automata theory classes while you were still picking your nose and playing Duke Nukem 2D.

    All languages are equally powerful in the sense of being Turing equivalent,but that 's not the
    sense of the word programmers care about.(No one wants to program a Turing machine.)The kind of
    power programmers care about may not be formally de nable,but one way to explain it would be to
    say that it refers to features you could only get in the less powerful language by writing an interpreter
    for the more powerful language in it.If language A has an operator for removing spaces from strings
    and language B doesn 't,that probably doesn 't make A more powerful,because you can probably
    write a subroutine to do it in B .But if A supports,say,recursion,and B doesn 't,that 's not likely to be
    something you can x by writing library functions.


    Hey, what do you know. He knows exactly what you mean, and you're too stupid to grasp his point. Now who's the moron?
  2. Re:What IS Lisp based off? by Anonymous Coward · · Score: 1
    We use ACL here to compile our game. My boss is a LISP nut. The game itself is written in a Scheme dialect which is compiled by a compiler written in ACL.

    Whoever told you ACL is _extremely fast_ was lying through their teeth. Probably either an Allegro rep or else one of these academics who use ACL to "prove" their postulate that LISP can be fast. Maybe compared to interpreted LISP, ACL *is* extremely fast! But the compiler we have written in ACL is extremely slow, and we have spent quite a lot of effort optimizing it. Effort we could have easily spent elsewhere if we had just written the damned compiler in C++.

    ACL is certainly powerful, and it is possible to make code run almost as fast as C code - but "possible" in this case means augmenting your source code with reams and reams of auxiliary information. We once tried to optimize a simple function in the compiler, and it took about 4 hours, and the size of the function grew by a factor of 3. Apply this to any large-scale project and you've suddenly shown that ACL is not a viable platform if speed is an issue.

    Sorry dude but this misinformation about ACL has got to be trashed. It takes a while [longer than I've got] to explain to newbies why LISP is such an inherently slow language, and I do appreciate that Allegro have made a compiler which is almost workable for small-scale projects. ACL contains many, many extremely clever features. I admire the programmers for making LISP even vaguely workable in speed terms. But to say that they've succeeded in making LISP a viable alternative to C/C++ is at best an exaggeration and at worst an outright lie.

    CLOS is a piece of shit too, but that's a different post.

  3. Re:Things I love/hate about lisp by Anonymous Coward · · Score: 1
    Typing Issues. I prefer stronger typing than lisp has. I think C++'s type system is just right. However, I understand there is no right answer to a type system. It is a tradeoff. Lisp allows some elegant tricks. For example, a pipe in lisp is built from a cons. The second element of the cons can either be another cons (the next element of the list), or a function to call to create the next element of the list. After the function is called, it (the cdr of the cons cells) is replaced with the new element. I can do the same thing in C++, but both the new cons cell and the function have to share a base class.

    Just a little note. You seem to still be thinking in LISP/some other language, or you haven't learned new-style C++. If you want a pipe of some sort which calls a function to get a new element, you write an iterator. So, *x would give you the last thing read from the pipe and ++x would read one more thing from the pipe. Then you can use all the fun STL algorithms with it, like any other input iterator.

    Take a look at the istream_iterator and ostream_iterator (one site is SGI's). If you don't know the STL look at the introduction and http://www.sgi.com/tech/stl/Iterators.html and http://www.sgi.com/tech/stl/InputIterator.html (sorry, too lazy to make them links, they're all on the site above)

    The author of the paper missed this little point. You not only don't understand cool features, you also can't use the language well because you're using the wrong paradigm.

  4. Re:Probably the right decision... by Anonymous Coward · · Score: 1

    Bravo! Bravo!

    Except that a cataloging and shopping cart system like Yahoo Store is not exactly one of the most inscrutable problems in computer science out there. It was a good idea, but never Rocket Science. In fact, the only difficult bits are the implementation issues. And if Lisp is the determining factor there, I have no idea why it would need to be rewritten, except as you pathetically argue, people aren't "brillant" enough.

    And while they did this pioneering work, they didn't leave much Lisp legacy on the web development community. (Apparently, it was such a good idea, it had to remain secret for 6 years.) Otherwise, there might be more than one major project to show for it. Too bad, considering the current Java/NET hype steamrollers. And they might have found it easier to hire maintenence programmers.

  5. Better Forth link... by Anonymous Coward · · Score: 1
    Try reading Chuck Moore's Forth writings. He invented it. There is also a good treatise on his (and others') philosophy of Forth.

    Forth is an interesting dual to Lisp. Lisp programming encourages building the language, and hence the computer, up to the problem. Moore wants to dispell the levels of abstraction, but interestingly enough his language works by building up phrase books of words to map your problem onto the machine. He emphasizes keeping the phrase books as simple as possible, but in a way so does Graham in On Lisp.

    A relevant USENET quote I cannot attribute: In Lisp, code is data. In Forth, data is code.

  6. Re:What IS Lisp based off? by Anonymous Coward · · Score: 1
    in Python you have the option whether or not to specify the types of objects, while in LISP you have no choice but to hope that it gets it right when it looks at the data at runtime

    For Common Lisp, at least, this is not true. One can specify the type of objects.

  7. Try REBOL by Anonymous Coward · · Score: 1

    Lisp is so great not because of some magic quality visible only to devotees but because it is simply the most powerful language available. If you agree with this, try REBOL. REBOL also appears as a weird AI language, with a bizarre syntax full of parentheres (replace with brackets for REBOL) and is a very high level language. The difference is that REBOL as built-in support for CGI, so you can also use it for the back-end. Dolmen.

  8. Re:Java too by Anonymous Coward · · Score: 1

    It's been done, of course. IBM did it and called it skij. - Rob

  9. Re:CL vs Scheme by Anonymous Coward · · Score: 2

    Try www.ocaml.org for the English version.

  10. Re:Any karma whores out there... by Anonymous Coward · · Score: 2
  11. Re:Interesting. by Anonymous Coward · · Score: 2

    A Link so everyone can read it and know, yes it is.

  12. LisP = "Lambda calculus" by Anonymous Coward · · Score: 2

    Historical note: LisP is an implementation of the *lambda calculus* (just as SQL is an implementation of the relational calculus). Lambda calculus is a wierd reverse-Polish notation function language that I think mathematicians may have invented before they even had decent computers to run it on. I think lambda calculus was one of the original 'paradigms for computation' that was shown to be equivalent to Turing machines and Finite State Machines by the "Church-Turing hypothesis". There is lisp-optimized, lisp-based processing hardware out there -- powerful stuff. Personally I think any algorithm involving recursion, parsing, and composing is more straightforward in lisp than pretty much any other language. But there's a learning curve--all those parenthesis are intimidating and I think this is the single biggest reason lisp isn't a more dominant language today. I think someone else here compared the moment of nirvana when they suddenly understood lisp to that scene in the Matrix where Neo suddenly sees the Matrix underlying everything. There is indeed something semi-mystical about how much more clearly I saw algorithmic programming after I'd done it in LisP. And it's a fun language to program in.

  13. Re:parent is flamebait by Anonymous Coward · · Score: 2

    It is much easier and more efficient to write the first implementation in Lisp and then translate to C++ when the Lisp implementation is pretty much frozen, when compared to designing and writing the final product in C++ from the start.

    Read Graham's books to understand the real reason why, but one of his more potent analogies is sculpture. When you want to make a sculpture in bronze, you first make one in clay which is an extremely flexible and responsive medium for sculpture, and then you use that clay model to create a mold in which the final bronze sculpture is then cast.

    You *cannot* start in bronze. It is far too inflexible.

    It's the same thing with Lisp. If you are trying to solve a problem that is ill-defined and incompletely specified, like most problems are, you need the flexibility of Lisp to solve the problem efficiently. Then, when you understand the problem well enough to have written the Lisp program, then the Lisp program is sufficient as a specification for a C++ implementation.

    With C++, for example, you need to develop a rigid set of classes before you can do anything. Changing that set of classes on the fly is tremendously painful.

    In Lisp, you can pause the program execution, REDEFINE a class, and CONTINUE EXECUTION, providing a method to AUTOMATICALLY TRANSLATE the instances of the old class into instances of the REDEFINED class as they are encountered. That's object oriented power. No half-hour recompile, no restarting the program, if it needs to be changed you change it. While you are paused, you can write as much Lisp code as you want, interactively testing your implementation to make sure it does what you want.

    You C++ guys have no clue what you are missing. Luckily, Paul Graham wrote two books to clue you in: "ANSI Common Lisp" and "On Lisp." Read them, and you'll never want to go back.

  14. Re:Emacs vs. modern LISP by Anonymous Coward · · Score: 2

    People have actually done some experiments at moving Emacs to a more modern lisp, but it would be a hell of a lot work for relatively little tangible gain. I believe RMS has a long-term plan to move Emacs on top of GUILE Scheme.

    Modern commercial lisp systems come with their own IDEs and integrated editors. Modern free lisp systems are typically used as subprocesses behind Emacs, which is surprisingly comfortable in itself, and with the ILISP emacs package actually resembles very much an IDE.

    Your final comment about converting Emacs Lisp to modern lisp is not far out at all -- people have done that. The problem is converting the reams of C code and libraries that Emacs uses, and which are closely tied to the internals of Emacs lisp the language. Besides, most of the packages available for Emacs lisp make many limiting assumptions that thwart the advantages of changing only the underlying lisp systems -- for example, no one has paid any attention to thread safety since Emacs lisp can only run single threaded.

    --han

  15. Re:Lisp teaches bad programming. by Anonymous Coward · · Score: 3

    Two words: tail recursion. Just as you wouldn't write the above code in C due to inefficiency, LISP programmers learn how to ensure that a function will be properly tail-recursive, and thus execute without chewing up a bazillion stack frames.

  16. Graham on Lisp is like Schwartz on Perl... by Anonymous Coward · · Score: 3
    Graham's comments about the power and ease of Lisp are similar to Schwartz's comments on Perl (and perhaps Tim Peters's on Python). Each is an extreme expert in the language, and each can perform tasks well beyond most people's capabilities. His opinions are based on that level of expertise, and his observations may not apply to people with less experience.

    The fact that he took notice of Perl- and Python-using competitors is significant. He views those languages as being nearly as powerful as Lisp; their main deficiency is that their syntax isn't ``easily extensible.'' Both possess means of extending syntax, but the revealed expressive power is handicapped by the languages' definitions.

    Lisp macros work directly on Lisp objects, which exist after parsing but before compilation. Perl mostly lacks that middle ground (or rather it has 12004782 different middle grounds, depending on how you look at it), and Python's AST system is terribly difficult to use (and somewhat non-portable). Both of those languages treat syntax extensions as black magic; Lisp makes them everyday tools.

    Lisp does have its problems. The package system is slightly obtuse, and the inheritance scheme in standard CLOS is completely busted. And it's only as portable as its implementations. The free Common Lisp implementations that run on many platforms are interpreters. The compilers run on a very restricted number of platforms. And there's no equivalent to CPAN. But it's still worth a look.

  17. Re:Lisp is great and all but... by Brett+Viren · · Score: 1

    VB is just Fortran with GUI callbacks.

  18. Re:It�s software productivity, stupid! by rodgerd · · Score: 1

    WRT to aD TCL, you've in some ways demonstrated precisely the author's point: he's suggesting that using technology your competitors don't understand is a win. Your competitors don't understand that a good data model and a simple, quick programming language (TCL) with a good library is more important that using tredy Java crapware.

    Your competitors don't understand that; they point and laugh and make fun of you for using TCL. They struggle with bloated, trendy middleware. You make your clients happy. You win.

  19. Re:What IS Lisp based off? by rodgerd · · Score: 2

    Actually, the most famous LISP app is probably AutoCAD, which many people outside of Unixy circles have heard of. Not only that, but AutoCAD's use of a LISP dialect for macros has proably resulted in more people becoming LISP programmers than anything else - all those drafters, engineers and whatnot who don't realise LISP is supposed to be hard and obscure and only for academics.

  20. Re:What IS Lisp based off? by jandrese · · Score: 2

    Another program that uses a Lisp like language (actually Scheme IIRC) is the Gimp. Maybe you've heard of it? :)

    Functional languages have some useful properties that can make some things really easy and fast (recursive list processing algorithms for instance).

    Unfortunatly, most functional programming languages are toys that sometimes get used in big projects. Before anyone flames me to a crisp, I'd like to point out how bad the I/O is in Lisp, and how hard it is to properly handle the myriad possible errors a program has to handle gracefully when working with humans. Also, most lisp engines I've seen are interpreted (save for things like the Lisp Machine). Now this doesn't prevent you from doing very powerful very high level things with Lisp, but for the most part you can do them easier and faster with C, also it's nigh impossible to do very low level things with Lisp (At least from with what's available). Lisp is truely the language of the theoretical math major.

    Please hold on until I finish donning my asbestos underwear, thank you.

    Down that path lies madness. On the other hand, the road to hell is paved with melting snowballs.

    --

    I read the internet for the articles.
  21. So what's better than LISP then? by Stefan · · Score: 1

    Lisp has powerful features like macros and lambda operators that many other langues don't have. So admitting that LISP is über-cool, even though I get bored of the parenthesises after a while...

    What do YOU think of other langauges, are there any other languages that you feel are even more powerful and flexible than LISP, allowing you to write better software in shorter time?

    1. Re:So what's better than LISP then? by TheLink · · Score: 1

      To me saying that X is the best language is like saying Y is the best data compression algorithm.

      Because it looks similar to data compression to me: given input + time + effort, go produce the necessary results. The worst programming language could involve typing all the possible results out, and getting the user to choose which result they want ;).

      Just as there is no best compression algorithm for all data, I don't think there a best programming language for all problems.

      However, as there exist good and appropriate compression algorithms for certain data, similarly there are good and appropriate programming languages for certain problems.

      I dunno whether LISP is more LZ than fractal, go figure ;). Maybe Forth is more LZ :).

      I think LISP is probably good if you are going to write most of it yourself. Suppose a lot of those top 1% programmers love doing that sort of thing.

      But Perl is hard to beat for cases where you only have to write the "important parts", and the tedious stuff is all done by:

      use niftyCPANmodule1;
      use niftyCPANmodule2;
      use DBI;
      use Digest::SHA1;
      use IO::Socket;

      As you can see I'm a strong believer in code modularity and reuse ;). Why reinvent everything from scratch? If you're not (yet?) a giant, stand on the shoulders of obliging giants I say. That's the real power of CPAN. Lots of obliging giants.

      Because of that even I could whip up a telnet proxy with user authentication (using data from a DB) in a short time.

      I'm sure there are many things LISP can do that are impossible in Perl. So LISP and Ruby are probably the languages I'll consider learning. Just have to see if modules to do all the tedious stuff are all there.

      But I'll leave the Java stuff to my colleagues ;).

      Cheerio,
      Link.

      --
  22. kind of a shallower lesson than one might hope by jabbo · · Score: 1

    (define better-tool 'emacs)
    (use (better-tool))

    Computers are great for counting parentheses. That sort of 'have the machine take care of it' thinking is the point of high-level languages...

    --
    Remember that what's inside of you doesn't matter because nobody can see it.
  23. Re:Lisp is great and all but... by Ian+Bicking · · Score: 1

    Smalltalk completely exposes as much of its implementation as you need to do all of this. It's not all built in, because that's not what Smalltalk is about -- it's philosophically more like a Scheme that actually does useful things. But that doesn't mean its less powerful -- as I said, I disagree that features is the best way to judge a language, and though Smalltalk has less features it has a more powerful metaphor and cohesive core.

  24. Re:"first Web-based application"? by Ian+Bicking · · Score: 2

    Ummm... maybe you missed what he was talking about. This is an application for making online stores -- not a store itself (though I suppose it is that too). This is in line with WikiWiki, or some of the homepage builders that have come about. It's not a shopping cart application.

  25. Re:Lisp is great and all but... by Ian+Bicking · · Score: 3
    This story isn't about Lisp being used for a kick-ass user interface or a 3d engine because (IMHO) Lisp isn't as well suited to those things.
    This story is all about a user-interface (over the web). This story isn't about applications deployed client-side, and it isn't about applications that are redeployed to local programmers (e.g., SQL), and it isn't about applications that have very high performance requirements (e.g., 3D). I think it's unfair to say Lisp isn't good at UI, though.
    Anyhow, having said all that, could someone who knows Lisp better than me explain what it is about Lisp that makes it so good for AI?
    It's nothing magic -- there's not really any particular fancy features that make Lisp and AI go together (unlike, say, Prolog). In part it is tradition -- currently there may be other languages just as capable of Lisp, but when it all started there wasn't.

    The real reason Lisp and AI go together is because Lisp is a very high level language, and as such is very good for prototyping and experimentation. In AI research this is very important, while the ease of deployment is very unimportant. Lisp scales into complexity well, and you can fit pieces together well. Lisp is just a good language.

    The reasons it is good for AI are all the reasons that it is good for server-side web development. That said, I think there's other languages that are just as high-level (or higher). Smalltalk, in particular, is just as high level as Lisp if not higher. I say this not because of the features that Smalltalk has compared to Common Lisp -- in fact, Smalltalk as a language has only a handful of features, and CL has very thick books worth of features. I think the author was wrong to say that languages are good just because of features. But Smalltalk does everything CL does without features, and if that doesn't make it higher level, it at least makes it wiser.

    I really like Python, but I can't claim it's on that level.

  26. Re:"first Web-based application"? by Ian+Bicking · · Score: 4
    To give that quote in context:

    Our plan was to write software that would let end users build online stores. What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface. (...) as far as I know, Viaweb was the first Web-based application.

    I think in that context, his statement seems much more reasonable. The Xerox map server is not nearly as interactive, or as stateful, as what he was doing. There was a novelty to it.

  27. Re:CL vs Scheme by Ian+Bicking · · Score: 5
    I think Scheme might be a better place to start, whether or not you go on to learn Common Lisp. The basic syntactic trauma of Lispish languages is softened by the small size of Scheme, and nearly everything you learn in Scheme will apply to Common Lisp.

    In a funny sort of way, while Scheme isn't used for many large projects, it's nearly as alive as Common Lisp -- which is to say, not very alive. Scheme is more popular in Academia at this point, in large part due to the book Structure and Interpretation of Computer Programs, by Abelson and Sussman, which is a great book for learning to think differently about programming. It's the standard introductory text for programming at MIT.

    Common Lisp is far more practical than Scheme. It has every feature you would want to use, and many features that you would never want to use (e.g., dynamic scoping). It was designed by committee by smushing a bunch of previous Lisps together, and it shows. But it actually has a lot of useful code for it, and a lot of useful features.

    Scheme is designed by a committee of mathematicians posing as computer scientists, and that shows too. Common Lisp has an ANSI standard, Scheme has a strong standard that is only endorsed by convention and the academic credentials of the committe. It's an interesting difference.

    Common Lisp is also interesting in part because of its rather novel object system, CLOS. It implements what's called a Meta-Object Protocol, and is supposed to be very Deep (though I haven't used it myself). It uses a style of generic programming, as opposed to object methods -- it looks reminiscent of C++ function overloading, but is somewhat more general (arguably more general than methods). There are comparible object systems (e.g., TinyCLOS) available for Scheme, but not generally built into the language.

    Common Lisp has been used more in AI, where Scheme is a more important foundation for language design.

  28. "first Web-based application"? by CaseyB · · Score: 1
    In the summer of 1995, my friend Robert Morris and I started a startup called Viaweb .... as far as I know, Viaweb was the first Web-based application.

    Whatever. I was building web apps full-time in early 95, at which point CGI app development was common knowledge. The Xerox map server was running in '93, and it was more technically interesting than any web store.

    1. Re:"first Web-based application"? by CaseyB · · Score: 2
      What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface.

      Um, that's EVERY web application ever written. It doesn't make his statement any more reasonable. It was a shopping cart application, just like everybody and their dog was writing by that point.

    2. Re:"first Web-based application"? by stilwebm · · Score: 1

      Nah, just being silly.

    3. Re:"first Web-based application"? by stilwebm · · Score: 2

      The Xerox map server was running in '93, and it was more technically interesting than any web store.

      But which type of project was more lucrative?

    4. Re:"first Web-based application"? by haruharaharu · · Score: 1

      Money's nice and all, but is that all you really care about?

      --
      Reboot macht Frei.
  29. Re:what I learned in school by Masem · · Score: 3

    So Yoda was a Lisp Master!

    --
    "Pinky, you've left the lens cap of your mind on again." - P&TB
    "I can see my house from here!" - ST:
  30. Re:What IS Lisp based off? by Zachary+Kessin · · Score: 2

    When I was in school the scheme class was about the hardest class you would get as a CS undergrad, and it was what you got *FIRST*. They figured if you could do that class you probably could do the entire CS major. And if not best to find out now so you can go major in something else while you still have time.

    --
    Erlang Developer and podcaster
  31. Re:Boy it sure was by Zachary+Kessin · · Score: 2

    You know the strange thing, now almost 10 years latter this morning I hit a problem and my first thought was that the Ableson & Sussman book from that class would probably be the right book to have handy, To bad my copy is at home. And yes Brandeis was a bit heavy on theory. But they did teach me rather well. In both CS and Physics.

    --
    Erlang Developer and podcaster
  32. Re:What IS Lisp based off? by Zachary+Kessin · · Score: 4

    I think every programer should learn lisp or scheme. It is very different from the Perl/C/Java that we spend most of our time working with. Since it is so different while programing in scheme you tend to come up with very different ways to solve problems. Once you know how to solve problems like that you can if needed take those ideas and move them back to Perl/C/java or whatever.

    But learning to think differently is something that is definitly worth it!

    --
    Erlang Developer and podcaster
  33. Re:What IS Lisp based off? by diaphanous · · Score: 1
    Lisp is a functional programming language

    This is a common misconception- as far as I know, there is no purely functional Lisp. Common Lisp allows to write programs in any style. So if you want functional, write functional. If you prefer procedural, you can use setf. If you want OO, then use CLOS. Scheme is closer to a true functional language and many users tend to write scheme in a functional style, but it does have set! and its simple to hack your own object system if the implementation you are using doesn't come with one. (One if the weaknesses of Scheme, is that it doesn't have a standardized object or module system).

  34. Re:CL vs Scheme by iabervon · · Score: 2

    On the other hand, CL's huge library makes it an enormous project to implement, whereas Scheme can be implemented in a weekend.

    Someday someone will write a good CL library in Scheme, and we'll all be happy, except for the people who want to know the truth value of the empty list.

  35. Re:Lisp as an Alternative to Java by iabervon · · Score: 3

    Yes, in the last 30 years, the C language family has finally gotten as slow and large as the Lisp family has been all along, and now processor speed and memory size have gotten up to the level needed to do things usefully in Lisp.

    You have to respect a language which is so much ahead of its time that it can compete with languages developed decades later, even if it was too slow for most applications on most hardware in the intervening time.

  36. Re:Abuse! by WWWWolf · · Score: 1

    ... http://abuse2.com ...

    Wow. Thanks for the link. =)

    SDL version of Abuse! Woohoo, my life is complete! I thought my world ended when I gave my old machine to my mother and this graphics card was no longer supported by SVGALIB (no way I would have used the 8bpp-only Abuse binary). Now I again have one way of letting out the steam =)

  37. Re:Functional Programming by Christopher+Cashell · · Score: 1

    Thanks for the additional info.

    I realized after I hit "Submit" that I prolly should have written a more thorough description of functional programming and it's benefits. ;-)

    --
    Topher
  38. Re:What IS Lisp based off? by Christopher+Cashell · · Score: 3

    Well, Lisp isn't really based of anything, at least, not off of any other programming langauges. It is based on the concept of the Lambda Calculus, which is something of a way to describe programs in a mathematical way. Or, something like that. <g> Honestly, I've never gotten a great definition of lambda calculus, but I'm content that Lisp is cool. ;-)

    Now, as to why you haven't heard of it before, my guess is because you are either not a University Computer Science graduate, or you haven't branched into functional programming. Most universities will cover it at least very briefly in some sort of programming languages class, though rarely do they do it justice.

    As for functional programming, it's a programming paradigm, like imperative or object oriented programming. It tends to be very powerful, often makes use of constructs which are terse (fewer lines of code to do the the same thing than required in other langauges) and generally makes extensive use of recursion.

    Lisp is very interesting, however. Even though it is usually thought of as a functional language, it actually provides excellent support for functional, imperative, and object oriented programming. In fact, many people think the Common Lisp Object System (CLOS) is one of the best Object Oriented Programming implementations available. It was also the first object oriented langauge that was standardized (by ANSI or ISO, I don't remember for sure which one).

    It's also been around for a while. In fact, Lisp is one of the oldest programming langauges still in somewhat common use today. (The only older language being Fortran, which predates it by about 5 years, as I recall.)

    If you've never had any experience with functional programming, I strongly encourage you to investigate and study[1] it a little, even if you never really use it, because you will learn a great deal about programming in general for your time invested.

    Now, as for what applications have been written in it, the canonical example is GNU Emacs. At it's core, Emacs is basically a lisp interpreter, and most of the editor is then written in Lisp.

    While applications that are written entirely in Lisp are perhaps not as well known, one of the most common places to find Lisp is as an extension language for other programs. Here are a handfull that make impressive use of Lisp:

    The GIMP uses Scheme, a dialect of Lisp for it's Script-Fu, which can be used to programatically execute anything that can be done by hand.

    Autodesk, the makers of the industry leading CAD software AutoCAD use their own dialect of Lisp, called AutoLISP, for programming and customising the AutoCAD software.

    Siag Office is a free small, Open Source, and very impressive, Office Suite making extensive use of Scheme. (SIAG == Scheme In A Grid). It includes a very cool Spreadsheet program, as well as others, and is highly customisable.

    GnuCash makes use of the Guile library to provide Scheme as an extension and scripting language for the application.

    Speaking of Guile, Guile is the official extension language library of the GNU project. Using Guile to provide Scheme scripting, you can add support for scripting and extensibility to any application. Guile is used in many applications including GnuCash (mentioned above), the SCWM Window Manager, the TeXmacs editor (integrating Tex support into an Emacs like editor), and many others.

    One last example is the Sawfish Window Manager, which seems to be among the most popular Window Managers around these days. It makes use of an Emacs-ish philosophy, having a very small core program, including a lisp interpreter, and implementing most of its feature set on top of that with lisp.

    This is, of course, not an exhaustive list of applications written in, or making use of, Lisp, however I think everyone here will prolly recognise a few names there. ;-)

    [1] If you're interested in learning more about Lisp, I strong suggest you take a look the book Structure and Interpretation of Computer Programs. The full text is available online at the link here, and it is one of the best books ever written about Computer Science. It's also used as an early CS text book at MIT.

    --
    Topher
  39. Re:LISP is really a simpler form of XML by bobdc · · Score: 1

    >LISP is a programming language. XML is a syntax.

    More specifically, XML is a Markup Language (the "ML" in "XML"). That's why, when people call it a programming language, I tell them, "if it was a programming language, it would be called XPL!"

    Bob DuCharme - see http://www.snee.com/bob/xsltquickly for
    info on upcoming "XSLT Quickly" from Manning Publications.

  40. Re:LISP is really a simpler form of XML by bobdc · · Score: 1

    One thing that's interesting about the relationship of LISP and XML is that XSLT, the W3C standard for transforming XML in which stylesheets are expressed as specialized XML documents, is a great-grandchild of LISP. It's derived from DSSSL, an ISO standard for transforming and formatting SGML that no one used because of all the Silly Parentheses, and DSSSL was based Scheme. People have taken to XSLT more easily than to DSSSL because it's easier to read: when I see "" it's very clear to me exactly which structures are ending, even if I'm reading a hard copy of it, but when I see "))))" it's not always easy to tell which "(" goes with which ")" at a glance.

    Bob DuCharme
    See http://www.snee.com/bob/xsltquickly for info on upcoming "XSLT Quickly" from Manning Publications.

  41. Emacs by richieb · · Score: 1

    Son, you need Emacs.....

    --
    ...richie - It is a good day to code.
  42. Re:I can't stand articles like this by Just+Some+Guy · · Score: 2

    The turn-off for me was his statement that high-level languages are inherently "more powerful" than low-level languages. I guess that he's using a definition of "powerful" that varies substantially from the standard CompSci meaning. Lisp, C++, Assembler, and Perl are all Turing-complete. End of story. If you can implement something in one, it can be done in any of the others. One may be easier to manage than another for a specific project, but that is completely different than saying that it is "more powerful".

    The author could use a little more CompSci theory before making such grandiose claims. I, for one, had difficulty reading further into the article once I had read that misstatement and realized that he did, in fact, mean exactly what I originally thought he said.

    --
    Dewey, what part of this looks like authorities should be involved?
  43. Re:I can't stand articles like this by laertes · · Score: 2
    NO, he did not mean what you orriginally thought he said. He did not say that one language can accomplish a task which is impossible in another language; rather, he said that one language (like LISP) is better at doing certain things than others (like C). Perhaps he should have called this elegance, or utility, but please don't confuse a mistake in labeling with a mistake in reason.

    On a different note, CmdrTaco said, "Its in pdf, but its actually worth a read." I have two problems. First, the two instances of "its" should be "it's," because the words are contractions for "it is," not the possessive pronoun. Second, why the implication that PDFs are not, in general, worth the read? Because they look identical on multiple platforms and allow the author to get exactly the result they want? Oh, the horror...

    --

    Yes, I'm still a junky. Are you still a bitch?
  44. Mirrored, and ASCIIfied. by David+E.+Smith · · Score: 5

    Why wait for Google to find it, just so you can read the essay in plain text? Don't! Here it is already. And since the Web server seemed a bit sluggish, perhaps in anticipation of the /. Effect, here's a mirror of the PDF original. Enjoy.

  45. Re:CL vs Scheme by TBone · · Score: 2

    Why should I learn English as a whole when I can just learn American English and spelling?

    Sarcasm aside...

    Scheme is a very reduced subset of LISP, designed for teaching functional language programming. I'm probably wrong, but I don't believe there are any 'real' programs written in Scheme, outside of teaching examples and such.

    --

    This space for rent. Call 1-800-STEAK4U

  46. Re:Lisp and Maintainability by TBone · · Score: 2

    Huh? Not liking LISP because of the parens is like saying I don't like you because you have too many freckles....

    But seriously - use an editor that matches your grouping structures (parens, braces, etc). EMACS does this, as does Vim and a whole crapload of editors.

    LISP is confusing. Most definitely. However, C++ and Perl were confusing to me when I first saw them, too. LISP is completely bass-ackward from every otehr language you've seen before. Where as in C and Perl, you have all these nifty notations for denoting objects and references and such, you have none of them in LISP. Why? Because LISP programming _is_ programming with objects, as opposed to programming in C or Perl, where you can program in an OO way, but OO is not inherent in the language or the syntax of the language.

    My first year of college was Scheme and LISP, then another semester my senior year when I took an AI course and programmed my computer to play Mancala (my computer beat me about 1 out of 10 times, and I wrote the gamespace interpreter). When I started, I said the same thing - (What's (up (with (all (these (parens))))))! But after I started formatting my code in a way that was understandable to me, I could 'see' the program just like Neo 'saw' the Matrix and Perl Hackers 'see' JAPH's.

    That being said, I would disagree with the thought that you should use LISP because it's the most powerful language out there. In fact, it's not for something like graphics programming. However, if the application you are working on can be broken down into a number of objects, and actions on said objects, then there's a 90% chance that LISP would be an excellent choice for your programming language.

    --

    This space for rent. Call 1-800-STEAK4U

  47. CL vs Scheme by Ed+Avis · · Score: 1

    Why should I learn Common Lisp rather than Scheme? Or why Scheme rather than Common Lisp?

    --
    -- Ed Avis ed@membled.com
    1. Re:CL vs Scheme by pivo · · Score: 1

      We did switch and it was a good decision, with J2EE and all. But I think at the time we just considered scheme too obsure for most of our clients. Could have been other reasons too, I just don't remember.

    2. Re:CL vs Scheme by nosferatu-man · · Score: 1

      I absolutely agree with you, of course. Different tools for different jobs.

      (jfb)

      --
      To spur "enterprise Linux," Big Bang, the distributed two-phase commit.
    3. Re:CL vs Scheme by nosferatu-man · · Score: 1

      > except for the people who want to know the truth value of the empty list.

      Well, *I* thought it was funny.

      Peace,
      (jfb)

      --
      To spur "enterprise Linux," Big Bang, the distributed two-phase commit.
    4. Re:CL vs Scheme by nosferatu-man · · Score: 5

      Scheme is much prettier than CL; it's breathtaking in its conceptual purity. And it's the foundation for the best book on programming ever written.

      One of the strengths of CL is that it has a large and comprehensive standard library, and tons of clever bits that make a working programmer's life easier.

      In other words, learn them both!

      Peace,
      (jfb)

      --
      To spur "enterprise Linux," Big Bang, the distributed two-phase commit.
    5. Re:CL vs Scheme by J.Random+Hacker · · Score: 1

      I assume you meant dynamic _extent_, by which bindings for variables can change in a controlled fashion. The binding is guaranteed to be restored to its former state as the function frame that created it exits. This is a GOOD THING, properly used.

      OTOH -- both languages are useful. I'd learn both. Oh -- wait -- I did... :)

    6. Re:CL vs Scheme by Rocky · · Score: 1

      I don't know. I've always has a slight problem with Felleisen and Friedman's Q&A method. That and the fact that the book tends towards "10 uses of recursion" as opposed to Scheme.

      --
      "I'm an old-fashioned type of guy. I worship the Sun and Moon as gods. And fear them."
    7. Re:CL vs Scheme by Rocky · · Score: 2

      Sigh. Young'uns.

      Structure and Interpretation of Computer Programs>

      by Abelson and Sussman

      --
      "I'm an old-fashioned type of guy. I worship the Sun and Moon as gods. And fear them."
    8. Re:CL vs Scheme by nielsene · · Score: 1

      Structure and Interpretation of Computer Programs aka SICP by Sussman and Abelson(sp?) not to be confused with Structure and Interpretation of Classical Mechanics aka SICM by Sussman and Wisdom.

    9. Re:CL vs Scheme by Mister+G · · Score: 1

      What about "The Little Schemer"? ;)

    10. Re:CL vs Scheme by Slump · · Score: 1

      The first couple of version of Art Technology Group's Dynamo application server were written in Scheme. Then they switched to Java.

    11. Re:CL vs Scheme by metafoobar · · Score: 1

      Scheme is more orthogonal as a language . It is a VERY small language, with only a few special forms, and a (relatively) small function library. The Scheme standard is about 50 pages together with implementation suggestions and examples. Common Lisp standard is ~1000 pages last time I looked. Scheme has no syntactic sugar, and only 4 special forms (set!, quote, lambda, and if) with others that are representable in terms of these 4. Whew. What a pantload. I guess the point is if you want to learn some LISP to understand the power of the language (and powerful it is), learn Scheme. If you want a language with the kitchen sink, learn Common Lisp.

    12. Re:CL vs Scheme by sv0f · · Score: 1

      Scheme is much prettier than CL; it's breathtaking in its conceptual purity.

      But Scheme can also feel like a straightjacket. It's easy to write beautfil small programs in Scheme, but what about beautiful LARGE programs? Common Lisp has 95% of Scheme's beauty on small programs but includes the extras (e.g., objects, macros) that allow it to scale beautifully to large programs.

    13. Re:CL vs Scheme by JMan1 · · Score: 1

      What book?

    14. Re:CL vs Scheme by Moghedien · · Score: 3

      Or why not learn Caml? It's fast! Yay.

      --
      I've come to... anesthetize you!
    15. Re:CL vs Scheme by lowflying · · Score: 1
      And it's the foundation for the best book on programming ever written.

      And that book would be....?

      Dave

    16. Re:CL vs Scheme by lowflying · · Score: 1
      Sigh. Young'uns.

      It's great to be young again! An industry shift every couple of decades seems to be working nicely...

      Dave

  48. LISP vs Python by Eponymous+Coward · · Score: 1

    What does LISP have that Python doesn't?
    Macros?
    Is a macro similar to Python's exec() or eval() statements? Is 'macro' just another name for dynamic execution of LISP code?

    -ec

    1. Re:LISP vs Python by Eponymous+Coward · · Score: 1

      I know some of C++. I've been using it every day for 7 years and I'm still learning it. Lately I've been working a fair bit with templates while reading Alexandrescu's _Modern_C++_Design (an excellent book, btw) and he does some *amazing* stuff with templates. Unfortunately, my compiler (MSVC) doesn't let me do any of the really cool stuff. :(

      So- if macros are like templates on steroids, then I'm impressed.

      -ec

    2. Re:LISP vs Python by alispguru · · Score: 4

      1. Macros. Like Graham, I can't explain why Lisp macros are the greatest thing since sliced bread in this small space. Suffice it to say macros make it possible for Lisp to absorb nearly any semantic innovation in any other language, without losing any of its current character. Lisp was invented before structured programing - we implemented macros for IF, WHILE, and LOOP, and went on. Lisp was where a lot of the early research for object-oriented programming was done, because it's so easy to prototype new languages inside it.

      2. A real specification. Like most of the new languages du jour, Python is defined by a portable implementation, and as such it will be a long time before sufficient effort can be applied to make it as efficient as any of the commercial Lisps that compile to native code, on-the-fly, cross-platform, cross-OS, cross-whatever. Both Common Lisp and Scheme have real specifications, vetted by international authorities (ANSI and IEEE, respectively), so implementors have a non-moving target when they need to get down to the metal for the last factor of two (or ten) in performance.

      --

      To a Lisp hacker, XML is S-expressions in drag.
    3. Re:LISP vs Python by sv0f · · Score: 1

      What does LISP have that Python doesn't?

      What does Python have that Lisp doesn't?

      Is a macro similar to Python's exec() or eval() statements?

      Is exec() similar to Lisp's (eval ...) statement?

      (The answer to your second question is "no", by the way.)

  49. Uppity Languages by pimp · · Score: 2
    Great, now we're going to see a wanton proliferation of uppity programming languages.

    What next? A decent application for Forth? Ada? Eiffel? C++? Oops. What that out loud?

  50. Re:What IS Lisp based off? by Dogun · · Score: 1

    Dearly loved among OLD theoretical computer scientists. Among students, hated. Perhaps the days of lisp, scheme, etc are finally over. I really hope so. People are better equipped to deal with implimentation these days. Consider the lack of experience among the people who created lisp, and you begin to see the why's of languages like C.
    lisp was great. now, lisp is not so great. Move on.

  51. Re:Symbolics' LISP OS by GypC · · Score: 2

    Why doesn't someone start another Lisp-based OS? I mean, Unix has been reimplemented so many times... If Lisp is so appropriate for rapid development, why hasn't a Lisp OS ever resurfaced?

    I think it would be wonderful.

  52. Cadence SKILL by Stephen+Chadfield · · Score: 1

    Cadence's popular chip CAD software is glued together by a lisp based language "SKILL".

    NEdit syntax highlighting patterns available here:

    http://www.nedit.org/download/contrib-patterns.sht ml#skill

    They even provide a console window into which SKILL commands can (and frequently are) typed directly.

  53. Implementations by Lazy+Jones · · Score: 2
    The only drawbacks to Haskell is that it is new and less people know about it and know how to use it. Many universities also do not teach Haskell because, again, it is too new.

    There are also few high quality implementations (as in "generates extremely fast native code" and "has commercial support options") out there ... Also, try to find good Haskell programmers in your area. I'm having trouble even finding a Perl expert ...

    --
    "I love my job, but I hate talking to people like you" (Freddie Mercury)
  54. Re:What IS Lisp based off? by HP+LoveJet · · Score: 1

    In the interest of completeness (and Six Degrees Of GLS)....I feel compelled to mention that the above-named Guy Steele Jr. is one of the two creators of the Scheme programming language, which is a stripped-down, not to mention nifty and useful, Lisp variant.

    --
    spawn_of_yog_sothoth
  55. Re:Interesting. by Sir+Robin · · Score: 1
    see http://tuxedo.org/jargon/html/entry/RTM.html

    "[...] After the storm of negative publicity that followed this blunder [the Great Worm], Morris's username on ITS was hacked from RTM to RTFM."

    --
    My /. ID is only 5,210 away from Bruce Perens's.
  56. Re:Lots of messages marked funny here by PD · · Score: 2

    Anyone out there with a licence plate that says
    'CDR CAR'?

  57. Lots of messages marked funny here by PD · · Score: 4

    A large number of messages in this list have been marked funny. Is the age of a language proportional to the number of jokes that people have invented about it?

    1. Re:Lots of messages marked funny here by Atlas · · Score: 1

      I had a Lisp prof that showed up all the time with t-shirts which he had written code all over. It was hilarious. Also he told us a story of how he gave his wife a grocery list written in lisp.

      --
      --------------------------------------------------
      "All paid jobs absorb and degrade the mind."
    2. Re:Lots of messages marked funny here by anjrober · · Score: 1

      I remember my Lisp professor loved Lisp jokes. Of course, he would always tell them with a slight lisp. Usually they were really bad puns somehow involving car/cdr. So I guess it's a part of the Lisp/Scheme sub-culture. The really bad part is I choose this professor because his class was in the PM and skipped taking Douglas Hofstadters AM course. bad choice on my part....

    3. Re:Lots of messages marked funny here by jayhawk88 · · Score: 2

      Yes, but then FORTRAN was designed from the ground up to be inheritly un-funny. There is absolutely nothing funny about FORTRAN code. In fact, if you place FORTRAN code next to something funny, that object will slowly become un-funny over the course of a few weeks.

    4. Re:Lots of messages marked funny here by markmoss · · Score: 3

      Is the age of a language proportional to the number of jokes that people have invented about it? I don't remember any jokes about FORTRAN, and it's older than LISP. LISP is just funny. Or in quasi-LISP:

      (not (remember I (about jokes FORTRAN)))
      (is LISP (funny just))

      Now do you see why people laugh?

  58. Master Hackers write in Smalltalk. by crovira · · Score: 2

    What can I say?

    There is nothing you can write in Smalltalk that can't be written in a hundred other languages and about a hundred times more slowly.

    I've written code in Ada, Basic (yes, I was young once and developped payroll systems for municipalities in Quebec on Wang 2200 minis [What's an OS? :-]) C, C++, COBOL, Forth, Fortran, HTML (& XML, XLST,) Java, JavaScript, Lisp, Pascal, Perl, php3 & 4, PL/I, Prolog, SetL and since 1987, I have used Smalltalk almost exclusively because in terms of reflexivity, productivity and expressiveness, Smalltalk RULEZ D00DZ.

    Its NOT perfect, contained objects don't know about their containers unless you make the reference explicit and the it doesn't understand squat about instantiation in context (using a schema,) but its light years ahead of the rest.

    Uber Smalltalkerz hack the VM and code BELOW the metal.

    --
    MSBPodcast.com The opinions expressed here are my own. If you don't like 'em... Think up your own stuff.
  59. Re:What IS Lisp based off? by Syberghost · · Score: 2

    Also, most lisp engines I've seen are interpreted (save for things like the Lisp Machine).

    Not just untrue for decades now, but a persistent myth/slur.


    I'm curious; how do you know it's untrue that most of the lisp engines HE'S SEEN are interpreted, and how is it a persistent myth that he's seen them?

    -

  60. Re:What IS Lisp based off? by xyzzy · · Score: 2

    Also, aeons ago, AutoCad used to be Lisp-based. I have no idea if it still is.

  61. Re:what I learned in school by xyzzy · · Score: 4

    You seem to be using an older dialect of Lisp. I think you meant

    (lisp (taught (me (to (count (parenthesis))))))

    or maybe

    (taught
    (me)
    (lisp)
    (to
    (count parenthesis)))

  62. Lisp and Maintainability by ArthurDent · · Score: 2

    First off let me say that I don't like lisp. The main thing I don't like about it is the bizarre syntax. All those parenthesis are hard to keep straight and even.

    Having said that, though, I'd like to hear a lisp zealot's view of how maintainable lisp code is. Obviously there is good lisp and bad lisp, but it seems to me that it would not be easy just by looking at lisp code to determine what exactly it does for the purposes of debugging and adding features.

    What do you all think?

    Ben

    1. Re:Lisp and Maintainability by Compuser · · Score: 2

      Ok, now you have me confused. The number one
      area where object oriented programming matters
      is GUI, precisely because GUI programs involve
      "objects, and actions on said objects". Or maybe
      by graphics programming you mean something like
      Autocad (oh wait, it's all LISP underneath).
      So what kind of graphics programs is LISP not
      suited for?

    2. Re:Lisp and Maintainability by Simon+Brooke · · Score: 2
      LISP has a fairly steep initial learning curve, and then suddenly you start to think in LISP and it all becomes very easy. To someone used to reading C, LISP looks weird, and you can't see how anyone could read it. But actually, when you're used to it, it's extremely natural and easy to read.

      the secret is that it doesn't have 'bizarre syntax'. It has extremely simple syntax - much, much more simple than anything you've ever seen before. You are looking for complexity that simply isn't there.

      --
      I'm old enough to remember when discussions on Slashdot were well informed.
    3. Re:Lisp and Maintainability by alispguru · · Score: 2
      The main thing I don't like about it is the bizarre syntax. All those parenthesis are hard to keep straight and even.
      That's what C-M-q in emacs is for. You do use a programmer's editor to write your code, don't you? Both emacs and vi have Lisp formatting support built-in - vi got its support back in the early BSD days, because John Foderaro (now at Franz Inc.) asked for it.
      Having said that, though, I'd like to hear a lisp zealot's view of how maintainable lisp code is.
      Syntactically/visually, Lisp code is no harder to maintain than C once you've worked in it awhile. After the editor indents stuff correctly, you don't even see the parentheses any more, just the logical structure.
      --

      To a Lisp hacker, XML is S-expressions in drag.
    4. Re:Lisp and Maintainability by GrEp · · Score: 2

      Come on. Lisp/Scheme/ML are functional. Everything is a function. How much more maintainable can you get?? If you don't like part of the program modify the function(s) that are bothering you. No classes to mess with, no brackets, little Microsoft obfiscation...

      bash-2.04$

      --

      bash-2.04$
      bash-2.04$yes "Don't you hate dialup connections?"| write USERNAME
    5. Re:Lisp and Maintainability by sv0f · · Score: 1

      In fact, it's not for something like graphics programming.

      As has been noted, Nichimen's (http://www.nichimen.com/) tools for authoring Ninetendo games are written in Lisp.

    6. Re:Lisp and Maintainability by hding · · Score: 1

      I don't know if I qualify as a Lisp zealot, but I primarily use Lisp for my work, so maybe I'm close enough.

      It's actually really easy to keep the parentheses in order. Just use a reasonable editor. And in other languages I have trouble keeping the bizarre syntax with all of those (){};:,'"[]{}|&^%#$@!->s straight. (Okay, maybe I don't have that much of a problem, but perhaps you get the point.)

      There's no a priori reason that it should be harder to understand Lisp code (assuming that one knows Lisp and that the code is decently written) than it would be to understand, say, C code (assuming that you know C and the code is decently written). The issues are essentially the same: are things well named, are functions sufficiently short and focussed, etc. I'd say debugging in general is easier, but this is because of the interactive nature of Lisp rather than the language itself; write a function, go to the listener and test it, refine until it works correctly.

      It is true that in some respects the idioms one uses to program in Lisp are different. So one does need to expend a little effort to understand those idioms; once this is done, however, one may find that Lisp code is even clearer than other code.

    7. Re:Lisp and Maintainability by tinrobot · · Score: 1

      Graphics? I believe Symbolics/Nichimen is written entirely in LISP. It's a pretty hefty graphics app if you ask me.

    8. Re:Lisp and Maintainability by pavonis · · Score: 4
      I certainly don't qualify as a LISP zealot, but for anything involving work with strings (an HTML-writer would be a pretty good example), many kinds of artificial intelligence and logic, databasing, what-all- any sort of more high-level task- LISP can be extremely straightforward. Often the logic of what you are doing is made extremely transparent, which can both make maintaining it easy, and reveal possible efficiencies that might otherwise be missed.

      While there are more libraries and better compilers for LISP than is commonly realized, it is relatively rarely used for anything directly touching hardware or demanding high performance. But it is very easy to tie in C or assembler code to deal with such things.

  63. Interesting. by grub · · Score: 3

    Unfortunately the author comes across as almost a "Lisp apologist" which may turn people off from looking at Lisp.

    Would anyone know if his co-author Robert Morris is the same Robert Morris (or his father) of the infamous Morris internet worm from the late 80's?

    --
    Trolling is a art,
    1. Re:Interesting. by GregWebb · · Score: 1

      Whoops, clicked the wrong box. Meant no +1, not anonymous :)

      Consider it duly attributed.

      --

      Greg

      (Inside a nuclear plant)
      Aaaarrrggh! Run! The canary has mutated!

    2. Re:Interesting. by alispguru · · Score: 5
      Would anyone know if his co-author Robert Morris is the same Robert Morris (or his father) of the infamous Morris internet worm from the late 80's?
      Yes, he means the Robert T. Morris of Internet worm fame. In a talk Graham gave at the 1998 Lisp Users and Vendors conference, he even joked about this, saying something like "remember when you do anything at Yahoo Store, your data is being handled by code written by RTFM".
      --

      To a Lisp hacker, XML is S-expressions in drag.
    3. Re:Interesting. by holzp · · Score: 2

      good thing he didnt write it in lisp!
      all the machines might have gotten smart enough to figure they had better things to do then send our mail around!

    4. Re:Interesting. by ccf · · Score: 1

      the author comes across as almost a "Lisp apologist" which may turn people off from looking at Lisp.

      I disagree--I think he makes a pretty strong argument in favor of Lisp. Makes me want to start reading up on Lisp.

      I think also the more important point he makes is that we often get stuck in the mode of thinking that goes along with whatever language we are most comfortable in. Once x language worked well in solving y problem, we tend to think it must be best for solving every problem. But the point he makes is to take a step back and look at the languages out there and keep an open mind.

      --

      Structured data. Structured searching. The Enzyme Project
    5. Re:Interesting. by The+Pim · · Score: 5
      Would anyone know if his co-author Robert Morris is the same Robert Morris (or his father) of the infamous Morris internet worm from the late 80's?

      Yes it is the same Robert Morris, but for Pete's sake, don't mod me up so everyone knows!

      --

      The evaluation of an action as 'practical' . . . depends on what it is that one wishes to practice.
    6. Re:Interesting. by sv0f · · Score: 4

      Would anyone know if his co-author Robert Morris is the same Robert Morris (or his father) of the infamous Morris internet worm from the late 80's?

      RTM the senior is the Unix/Security guru. He was a big fan of Brunner's "Shockwave Rider", which described a future world sporting a global network riddled with transient "worms". His son, RTM the junior, authored the infamous internet worm as a grad student at Cornell. I think Paul Graham and RTM the son were undergrads together at Harvard.

    7. Re:Interesting. by agentZ · · Score: 3
      Would anyone know if his co-author Robert Morris is the same Robert Morris (or his father) of the infamous Morris internet worm from the late 80's?

      Doubtful. Robert Morris Sr. had a long career with the NSA and is now rather old to be working on a start-up company. His son, Robert Tappan Morris, has stayed in academia AFAIK. Last I heard he was an Assistant Professor at MIT.

      (Although if the latter was involved, perhaps it just goes to show that the original Internet worm was caused by mis-matched parens?)

  64. 5-line leeching programs. by Christopher+Thomas · · Score: 2

    Whenever I need to do more in the shell than loop through a few files, I write it in Lisp (I've written 5-line programs to leech an entire Web page's MP3 archive).

    Hmm.

    Well, I can seldom resist a challenge :) :


    #!/usr/bin/perl
    $source = `lynx -source $ARGV[1]`;
    $ARGV[1] =~ m/(\S+\/)[^\/]*/; $base = $1;
    while ($source =~ m/([\w_-]+\.mp3)(.*)/is) {
    $fname = $1; $source = $2;
    $dummy = `lynx -dump $base/$fname > $fname`; }


    Probably made a few typos in there, but oh well :).

  65. Re:competitive advantage by pivo · · Score: 1

    It's fun when words loose their meaning, isn't it?

  66. Re:What IS Lisp based off? by Disco+Stu · · Score: 4

    What is "Lisp" based off of? Is it a C++ style code or something else, and why have I not heard of it before?

    Lisp is a functional programming language. Since you haven't heard of it, I'm betting you that didn't major in CS at a University. Lisp (along with ML and Scheme) is dearly loved by theoretical computer scientists.

    To find sample Lisp code, just do a Google search. It is very different than procedural languages lilke C, Java, etc.

    Prolly the most famous application using Lisp is Emacs. In fact, some people refer to Emacs as nothing more than a Lisp interpreter that includes some macros that are really good for text editing. Most people I know outside of academia that program Lisp do it to customize Emacs.

  67. Best book on programming? by nosferatu-man · · Score: 1

    "The Structure And Interpretation Of Computer Programs," Abelson, Sussman and Sussman.

    (jfb)

    --
    To spur "enterprise Linux," Big Bang, the distributed two-phase commit.
  68. Re:What IS Lisp based off? by nosferatu-man · · Score: 1

    Same way at Chicago when I was there. Taught out of SICP, and man, was it tough.

    Peace,
    (jfb)

    --
    To spur "enterprise Linux," Big Bang, the distributed two-phase commit.
  69. Programs writing programs by Weasel+Boy · · Score: 1

    Any time you have an interpretation environment, you have the potential for programs that write parts of themselves. It happens in Perl all the time. In environments such as Hypercard, you can even have GUIs that write GUIs (click a button that creates new pages, populates them with scripted buttons or other controls, and presents them to the user). How's that for a kick in the head? I wonder if anyone has programmed a VM system to programmatically generate custom VMs to run new jobs on... wouldn't that be fun? David Boyes, are you listening? ;-)

  70. Re:don't get too excited about this... by doom · · Score: 2
    Well, this seems like a good place to attach this comment:

    Okay, first of all, I'm glad to see someone pushing Lisp, even though I don't know it very well myself. I get really annoyed at the endless announcements for Yet Another Scripting Language ("It's just like Perl, except without that annoying flexibility!"). If I'm going to take the trouble to learn something new, I'd like it to be really new, and Lisp is high on my list (even if I am over 25).

    But I think his premises are severely flawed:

    Robert and I both knew Lisp well, and we couldn't see any reason not to trust our instincts and go with Lisp. We knew that everyone else was writing their software in C ++ or Perl. But we also knew that that didn't mean anything. If you chose technology that way, you'd be running Windows. When you choose technology, you have ignore what other people are doing, and consider only what will work the best.
    The trouble is that if you're planning on working with other human beings, all of a sudden you have to worry about things like "what languages do they know? what will they enjoy working on?" If your team is just two stunt programmers you can just talk it over and use whatever you like. If you've got to expand your team later, then you may be stuck sifting through stacks of C, perl and VB resumes.

    And I have to say I think there's a huge gap between saying "there's an advantage in using tools that aren't too unusual" and saying "we should all use Windows".

  71. Re:Y the argument falls apart. by sammy+baby · · Score: 1

    See, if you'd just said PIASACNASAK, instead of writing the whole thing out, you'd have illustrated my point perfectly. Thank you.

  72. Y the argument falls apart. by sammy+baby · · Score: 4
    Graham tries to make an argument that some languages are better than others. That's an abstract enough statement on the face of it that it's hard to take real offense. He quickly backs off from saying anything really controversial, though, because "Programmers get very attached to their favorite languages, and I don't want to hurt anyone's feelings." So, to illustrate his argument, he creates a cute little straw man, sets him up, and knocks him down.

    Programmers get very attached to their favorite languages, and I don't want to hurt anyone's feelings, so to explain this point I'm going to use a hypothetical language called Blub. Blub.. is not the most powerful language, but it is more powerful than Cobol or machine language.

    When we switch to the point of view of a programmer using any of the lan-guages higher up the power continuum, however, we find that he in turn looks down upon Blub. How can you get anything done in Blub? It doesn't even have y.

    So, what the hell is Y? If you're a Java zealot, you might say that it's strong typing and bytecode portability. Of course, a C nazi would want to tear his hair out because of how "limiting" all that strong typing is, and how infernally slow the produced code is. Meanwhile, Python geeks will sing the praises of syntactically signifigant source-code formatting, ML nuts will talk about how nifty it is to have your whole program look like it's written in EBNF, and Perl monks will spout off huge strings of acronyms which all serve to hilight the Swiss Army knife nature of their language.

    In other words, by failing to take a stand on what makes some languages better than others (other than the bland assessment that the addition of lexical closures in Perl 5 was a good thing), he succeeds in avoiding offense, but utterly fails to say anything useful. "Power" becomes a catch-all abstraction, like a D&D stat, and nobody gets to argue about what features they actually want in a hypothetical uber-language, because that might get someone's panties in a bunch.

    And now I'm grumpy because I stopped to write this out instead of studying for my Distributed Object Programming final tonight. Feh.

    1. Re:Y the argument falls apart. by Greg+Lindahl · · Score: 4


      Perl is a Swiss Army Chainsaw, not a Swiss Army Knife.

    2. Re:Y the argument falls apart. by J.Random+Hacker · · Score: 2

      no -- *you* missed the point. The idea is that a more powerful language has some feature Y that has these properties:

      (1) Y can't be replicated in a lower level language with out changing the language, or without lots of programming to simulate the feature, and that the programming does not yield a library.

      (2) Programmers who don't know about Y don't miss it because they can accomplish their goals without it, but the goals are lower than they might be otherwise.

      There are many such properties. GC, Macros, Recursion, continuations, closure, type inference, generic fuctions, templates, multiple inheritance, message passing, etc., etc.

      This yields a partial ordering of languages in terms of expressive power.

      Because LISP is so close to the lambda calculus (that was the motivation for writing it in the first place, btw), and because the code is also data, you can build up any abstraction you like as a component of the language. This yields a language that ranges from really low level computationally, to really, really abstract, to really close to the problem you want to solve. It is that last property that makes lisp programming so powerful. Invent a new property Y. You can almost certainly emulate/simulate it directly in LISP -- then refine your LISP implementation for better OS interface or what ever, you're done.

      Consider implementing multimethod dispatching in C++. I dare you. It is *hard* to get right. There is not enough in the way of introspection in the language to make it work.

      It is not *easy* in lisp, but it has been done, and it works. It is not a tool for everything, but there are problems for which there is no better techniques. thus LISP is more powerful than C++. QED.

    3. Re:Y the argument falls apart. by waiyian · · Score: 1
      I think you're guilty of your own accusation of attacking strawman. Here is the author's concept of "power":
      3. All languages are equally powerful in the sense of being Turing equivalent, but that's not the sense of the word programmers care about. (No one wants to program a Turing machine.) The kind of power programmers care about may not be formally definable, but one way to explain it would be to say that it refers to features you could only get in the less powerful language by writing an interpreter for the more powerful language in it. If language A has an operator for removing spaces from strings and language B doesn't, that probably doesn't make A more powerful, because you can probably write a subroutine to do it in B. But if A supports, say, recursion, and B doesn't, that's not likely to be something you can fix by writing library functions.
      Your point that some language constructs (per se) are mutually incomparable is a valid one; but this doesn't mean they can't be compared on other dimensions, such as economy of expression.
    4. Re:Y the argument falls apart. by SandsOfTime · · Score: 1

      So, what the hell is Y? If you're a Java zealot, you might say that it's strong typing and bytecode portability. Of course, a C nazi would want to tear his hair out because of how "limiting" all that strong typing is, and how infernally slow the produced code is. Meanwhile, Python geeks will sing the praises of syntactically signifigant source-code formatting, ML nuts will talk about how nifty it is to have your whole program look like it's written in EBNF, and Perl monks will spout off huge strings of acronyms which all serve to hilight the Swiss Army knife nature of their language.

      Some of the things you listed are definitely not Y's. Bytecode portability is not, strictly speaking a language feature, because you could also write a Java compiler that compiled Java source to native code. And speaking as a Python zealot, syntactically signifigant indenting is also not a Y, though I do like it. It doesn't give me power to do something I couldn't have done otherwise.

      Some candidates for Y's might include closures, continuations, functions as first class objects, etc. It is surely worth pondering what a Y is, and programmers may disagree over it, but I don't think just any language feature one happens to like would qualify.

  73. Deep Space 1 by cpeterso · · Score: 1
    Thanks for the information about Deep Space 1. I found that very cool!

    For those interested, here are some more links about Deep Space 1 and Lisp:

    SOFTWARE FOR FIRST NEW MILLENNIUM MISSION CLOSEST YET TO "HAL 9000"

    The Intelligent Execution Systems Project Home Page

    Back to the Future: Is Worse (Still) Better?

    That last paper is Richard Gabriel's follow-up to his original Is Worse Better?/i> paper. A cool quote from the "Back to the Future" paper:

    Last year, this Common Lisp code was selected by a NASA panel for NASA's software of the year award. Despite this and despite the fact that the software works well in space, one of the high officials at NASA blocked the award and declared that it would not be given unless the system were re-coded in C, in which language it would be obviously better because ... um, becase ... ?

  74. ML and Haskell? by cpeterso · · Score: 4


    Many "modern" functional languages, like ML and Haskell, have strong-yet-polymorphic typing and all of the functional abilities of Lisp. Of course, these languages suffer from a derth of libraries, too.

    Of course, this is a COM interface for Haskell called Haskell Direct, allowing your Haskell program to call COM and ActiveX controls. This work was done by someone in Microsoft Research and wrote a paper about it humorously titled "Calling Hell From Heaven And Heaven From Hell." ;-)

    1. Re:ML and Haskell? by epukinsk · · Score: 2
      This work was done by someone in Microsoft Research and wrote a paper about it humorously titled "Calling Hell From Heaven And Heaven From Hell." ;-)

      This paper can be found here

      -Erik

    2. Re:ML and Haskell? by waiyian · · Score: 1

      Not to mention not all people buy the "strong-yet-polymorphic typing" business. In Common Lisp, I could write my program in the most concise way, without worrying about type. But I still have the option to annotate sections of my code with type information for clarity, safety, and efficiency purposes. This approach makes much more sense to me, especially when you take into account the 80/20 rule.

    3. Re:ML and Haskell? by sv0f · · Score: 1

      Many "modern" functional languages, like ML andHaskell , have strong-yet-polymorphic typing and all of the functional abilities of Lisp. Of course, these languages suffer from a derth of libraries, too.

      And they lack macros, class systems as advanced as Common Lisp's CLOS, etc.

  75. average startup if go with a common language? by cwwang · · Score: 1

    the paper stated that if a startup follows the common ground of implemeting their system in a popular language such as C, C++, or Java then the startup is no better than the 'average' startup that uses the same technology is funny and wrong.

    its not about whether use LISP or Java or whatever. But the idea and the way it is implemented counts. And yes, if the application being used can't be maintained because the technology of choice is not very common then that would work against the technology selection itself.

  76. Re:LISP is really a simpler form of XML by Black+Parrot · · Score: 2

    > How do you find GUILE?

    "Works for me; YMMV."

    I've really liked it so far, and I seem to like it better as I get more familiar with it.

    > how easy is to create and access objects from the other language?

    Supposedly pretty easy, though I haven't tried that yet. You might want to google SWIG and see what it will do for you.

    Also, I haven't tried GUILE with C++, but I think I've seen messages about that on their mailing list, so I would ass-u-me that it works OK.

    > Know what the compiled code size of GUILE is?

    Sorry, no. FWIW, it looks like libguile.a is about 3/4 Mb and libguile.so is about 1/2 Mb.

    > How does it do garbage collection?

    I hear the technical term for the kind of GC they do now and then, but I haven't had time to read up on it, so it doesn't mean anything to me and I haven't bothered trying to remember it. I think it's supposed to be pretty aggressive, but still shy of precise. (Don't quote me on that.)

    From the above, it should be obvious that I'm nothing near an expert. You might want to subscribe to their mailing list and post your questions there.

    --

    --
    Sheesh, evil *and* a jerk. -- Jade
  77. Re:What IS Lisp based off? by Black+Parrot · · Score: 3

    > What is "Lisp" based off of? Is it a C++ style code or something else, and why have I not heard of it before?

    Actually, it's one of the oldest computer languages still in (semi-)common use. Vintage 1958, IIRC.

    > What are some other "famous" applications that are using Lisp?

    Lisp.

    --

    --
    Sheesh, evil *and* a jerk. -- Jade
  78. Re:What IS Lisp based off? by Black+Parrot · · Score: 4

    > Lisp (along with ML and Scheme) is dearly loved by theoretical computer scientists.

    Theoreticians do love functional languages, but Lisp is primarily popular among AI researchers.

    --

    --
    Sheesh, evil *and* a jerk. -- Jade
  79. Re:LISP is really a simpler form of XML by Black+Parrot · · Score: 4

    > Now that XML is around and the world is saying it?s the greatest thing since sliced bread - I have an analogy.

    FWIW...

    I have an as-yet unreleased OSS project that I tinker with when time allows. Last summer I implemented an XML system for storing external data. My thoughts upon reviewing it: Ugh-ly!

    Since then I have ripped out all the XML and replaced it with GUILE [= Scheme = a dialect of Lisp = on topic], and I find that it's much cleaner, more readable/maintainable, and incredibly easy to parse. As a free bonus, now that I've started on the user-level scripting part of the application, I can load Scheme code directly from my config files and use all the pattern matching / symbol substitution / code writing stuff that Lisp and its ilk are so good at.

    YMMV, but it sure as heck works for me -- as a data language, a data-description metalanguage, and a scripting language.

    As a side note, interested parties might want to investigate the use of a Lisp-style language by Xconq for specifing game variants.

    --

    --
    Sheesh, evil *and* a jerk. -- Jade
  80. Re:don't get too excited about this... by tbmoore · · Score: 3
    Okay, with that out of the way -- yes, we have a little bit of Lisp code here. No, this was not a good idea, and no it is not a good way to get rich in the future. I have it on good authority that every single scrap of Lisp code we have is quickly being rewritten from scratch in C++, because there are so few engineers competent in Lisp here (read: zero).
    Well who's problem is that? If Yahoo! claims that it's impossible to hire competent Lisp programmers, then they aren't trying very hard at all.

    It was a good idea for Graham to write the system in Lisp - Yahoo! bought his company and made him a rich man. Sounds like Yahoo!'s IT is in a pretty wretched state if it can't maintain a system in which they invested millions of dollars.

  81. Re:What IS Lisp based off? by Mr+T · · Score: 2
    I should clarify. From a compiler's perspective, Lisp has no syntax. Parsing it is cake. You can give it bad data but it's not like you're trying to evaluate an expression and determine implicitely what it means. (no if/else binding)

    Incidentally, the last compiler I worked on had an intermediate language after parsing that looked amazingly close to lisp.

    --
    This is my signature. There are many signatures like it but this one is mine..
  82. Re:What IS Lisp based off? by Mr+T · · Score: 4
    Lisp is, it's not based off anything. It has no syntax, you program directly in abstract syntax trees.

    Also, it's not functional like someone tried to point out. You can use it like a functional language but generally it isn't.

    It's good stuff, you can't say your a real CS guy until you've done a fair amount of lisp.

    --
    This is my signature. There are many signatures like it but this one is mine..
  83. Interesting, but devoid of facts by gruntvald · · Score: 1

    I program in LISP (CAD systems) and find it a useful language, but this article, and the essay fail to list any technical detail on just what the advantage was. The essay claims how they could do functions that their competition couldn't, but declines to state what those functions were. It also gives no detail on what it was that their competition did, that they were able to re-create so rapidly. In fact, it dangles the carrot of "it's basically macros", but then dismisses it along the lines of "but it's too complicated to explain". Bah. File under "unsubstantiated".

  84. Re:What IS Lisp based off? by PeterVanEynde · · Score: 1

    The problem is not that Common Lisp programs are slow, the problem is that in CL it is possible to do 'exploratory' programming to an extend that is impossible in other languages. So while you chip at the problem one function at a time and you get closer and closer to the solution you might solve the problem, but you'll do it in a non-optimal way. The good Lisp programmers have then placed abstraction layers at the places that mattered and can then profile the program and find and elimitate the bottle-neck. I did this with a program of mine and I elimitated 99% of memory-use and 90% of run-time by re-writing one function. Then the real problem of Lisp shows up: managers. They don't see an almost-solved-problem that requires a bit more of work, they see a solution and want to get it into production NOW! I've seen the results of 15 years of that too: a slow, buggy program.

    But in all horrors of Lisp programs I've seen it isn't the fault of Lisp that it is slow, it is due to Lisp the program exists! The fact that it is slow is only because nobody has the time to invest into making it fast.

    You don't need to recode your problem in C++, you need a Lisp expert!

    Peter Van Eynde

  85. What my boss would say . . . by churchr · · Score: 1


    (1) Yeah, but how do you find good Lisp programmers? Java programmers are a dime a dozen.

    (2) There's no support for Lisp. None of the app servers support Lisp. Databases don't support Lisp. Etc.

    1. Re:What my boss would say . . . by sv0f · · Score: 1

      (1) Yeah, but how do you find good Lisp programmers? Java programmers are a dime a dozen.

      Maybe it's because Lisp is esoteric these days, but most Lisp programmers are good. Where do you find GOOD Java programmers (i.e., not the "21 days" variety) and when you do, are they a dime a dozen?

  86. Lisp is great and all but... by Merk · · Score: 3

    I know a bit of Lisp -- I love Emacs and wanted to be able to customize it more, so I played around with Lisp. I learned enough to do some pretty cool things, and learning Lisp has taught me a lot about programming in general...

    But I'm not convinced that Lisp is the "highest level language of all high-level languages" or "the most powerful of all high-level languages". In a sense that is probably VB. It is the one that removes the programmer from the actual workings of the CPU the most. Unfortunately it's also a language that's horribly designed in a lot of ways. I think Lisp has some very powerful features like macros that other languages lack, but it loses out in other areas.

    Lisp code is hard to read for most programmers, one big reason for this is that the condition in a conditional statement can be 10 lines long, and 5 parentheses deep. Because of this, finding a bug in a Lisp program could take longer than finding on in a procedural program. Secondly not many people speak Lisp. Like Esperanto, something can be wonderfully designed but if it isn't widely used it's not going to be too useful.

    I think the main reason their software was so successful was that Paul Graham et al. were extremely good coders developing in a high level language they knew very well, that was well suited to what they were trying to do. This story isn't about Lisp being used for a kick-ass user interface or a 3d engine because (IMHO) Lisp isn't as well suited to those things.

    As has been said many a time before -- "Use the appropriate tool for the task at hand".

    Anyhow, having said all that, could someone who knows Lisp better than me explain what it is about Lisp that makes it so good for AI? I've always heard that but being pretty far removed from that field I've never seen any cool Lisp AI code.

    1. Re:Lisp is great and all but... by GusherJizmac · · Score: 1

      Since Lisp doesn't have strong typing, and you don't have to formally declare/define any data structures, it's very simple and quick to code up a complex algorithm and data structure that you typically need in AI, which makes heavy use of custom algorithms and data structures.

      PERL could be viewed similarly, but LISP has historical precedence.

      I tried to code an AI algorithm in C++ for one semester, and I wasted a lot of time coding and debugging basic data structures. Of course, I was doing that because the lisp version of the code was so unreadable and incomprehensible (due to lack of typing and data structures and documentation) that I needed something I understood to work with.

      --
      http://www.naildrivin5.com/davec
    2. Re:Lisp is great and all but... by Fnordulicious · · Score: 5

      > I know a bit of Lisp -- I love Emacs and wanted
      > to be able to customize it more, so I played
      > around with Lisp. I learned enough to do some
      > pretty cool things, and learning Lisp has taught
      > me a lot about programming in general...

      Emacs Lisp is not a modern Lisp. It is an archaic and *very* poorly designed implementation of a Lisp developed at MIT in the 1960s and 1970s called MACLisp. Do not confuse Emacs Lisp (which even its maintainers think is a piece of shit -- just ask them) with a *real* Lisp like Common Lisp or Scheme.

      Emacs Lisp is a bane to the Lisp community. An embarrasment. It carries on the awfulness of dynamic scoping (modern Lisps use lexical scoping), horrible garbage collection (GCPRO isn't just a hack, it's a crock -- of shit), and poor support for language extension (no easily constructed user-defined types, no object system, etc).

      > But I'm not convinced that Lisp is the "highest
      > level language of all high-level languages" or
      > "the most powerful of all high-level languages".

      There is no such thing as the 'highest level HLL'. Someone can always make a more abstract interface atop the language in question. So this statement is meaningless.

      There is no 'most powerful' language in any field. Power is a completely relative term. It's relative to the immediate situation at hand. Flexibility on the other hand is measurable by the number of different uses a particular technique can be put to.

      VB is not any higher level than Lisp is. Both remove you from the actual workings of the system. Lisp is *much* more abstract in many ways that VB will ever be. Common Lisp provides a generic and OS-independent interface to filesystems of all sorts, something that cannot be said of VB, which is locked into Microsoft's OS products. Common Lisp also provides a generic I/O system that is OS-independent. VB is again not OS-independent.

      Someone mentioned that Common Lisp had poor I/O facilities. I must disagree -- in Guy L. Steele's book _Common Lisp: The Language_ 2nd ed. there are over 100 pages in chapter 22 on I/O alone. That's not including the following chapter which focuses on filesystem interfaces and accounts for another 50 pages, and the chapter on prettyprinting code which takes up another 20 pages. Common Lisp certainly has a lot of I/O support, in many ways much better than C. And if you want someone else's I/O then you can use a foreign function interface to some other language library to call out to it.

      > Lisp code is hard to read for most programmers

      You just need a better tool. Turn on parenthesis highlighting in your Emacs. Use the sexp-movement functions. Or, quite simply, learn to expand your stack. I see plenty of piles of matched parens and braces and brackets in C. And they're *much* harder to sort out than parens. And if you really don't like parens then you can glue your own syntax onto Lisp. That's something that isn't easy to do with other languages.

      > This story isn't about Lisp being used for a
      > kick-ass user interface or a 3d engine because
      > (IMHO) Lisp isn't as well suited to those
      > things.

      Lisp was used for one of the first production 3D development environments, Symbolics Inc.'s S-Products. This was later sold to Nichimen Graphics who still uses Common Lisp as their base system for extensive 3D products. Nichimen's systems were used for a number of Nintendo 64 games, for instance.

      Kick ass user interfaces can be written in literally *hours* rather than months as in C or C++. And I write user interfaces in C and C++ so I know what I'm talking about. I could do my job in Lisp in one tenth the time, but unfortunately it's too late in the game to rewrite the existing code base.

      Don't open your mouth or your foot may fall into it. Always do your research before you post uninformed opinions.

    3. Re:Lisp is great and all but... by TheLink · · Score: 1

      "Kick ass user interfaces can be written in literally *hours* rather than months as in C or C++. And I write user interfaces in C and C++ so I know what I'm talking about. I could do my job in Lisp in one tenth the time, but unfortunately it's too late in the game to rewrite the existing code base. "

      That's the clincher. Why? Why would you have to rewrite the existing code base?

      Why not just do the newer stuff in LISP?

      Cheerio,
      Link.

      --
    4. Re:Lisp is great and all but... by sigue · · Score: 1

      It's not clear to me why you didn't use data structures in your Lisp program and did in your C++ program. If you're talking about Common Lisp then you could have used defclass or defstruct to define structures, or you could have written your own ADTs with a built-in type and accessor functions. Whahappen?

  87. Re:You're missing a few important points by Merk · · Score: 3

    I think you misunderstood what I was saying. Obviously in this case things worked out in this case, I'm talking about the more general cases.

    The main problems I see with Lisp aren't problems with the language, they're with how widely it's used. This affects 2 areas most:

    • The availability of programmers who know it
    • The availability of 3rd party libraries and tools

    If I went up to my boss and suggested we do our core products in Lisp he'd almost certainly reject the idea. Even if we had a few programmers who knew Lisp really well, if someone quit or we needed to expand, finding people who knew Lisp well enough to join the team would be really tough. Plus we do a lot of things in languages with huge libraries of useful code. It sounds like these guys avoided this problem by not having to hire new people and by concentrating on an area where they didn't need many external libraries.

    If I'm going to write a tool to use on my own I'll do it in whatever I feel like using. Perl for text manipulation, C for speed, Java for cross platform stuff, PHP for web stuff... As soon as the project becomes big enough I have to worry about whether other people around me know enough of the language I'm using to contribute. And if I'm going to write a client-side GUI program I'm going to do all I can to avoid using low-level GUI API calls if I can just use a wrapper library.

    Something doesn't have to be very popular to be good (i.e. Linux), but for certain things popularity is important (i.e. availability of Linux games).

    And I admit I can read procedural code in nearly any language (not Perl) easier than I can read Lisp. A big part of that is due to my having more experience with procedural languages, but I think some of it is just the nature of the language. I think most people would find that it's much easier to keep track of the level of indentation than the depth of parentheses (but hey, maybe that's just me).

  88. Re:What IS Lisp based off? by maw · · Score: 1
    For a laugh, why don't you email that comment to Erik Naggum...

    You're an evil, evil man.
    --

    --
    You're a suburbanite.
  89. Its the intelligence, stupid by edwards · · Score: 1

    The choice of programming language makes at most a 10% difference in results. And that is being generous. Its probably closer to 1%. The talent and experience of the programmer is all that matters, to a first approximation. A Master of Assembly Language will beat a drone in LISP any day.

    The conclusion is that you should hire the best people, and use whatever kinky language turns them on.

    What I think killed LISP is that many LISP programmers had the attitude that they wouldn't stoop to mere application programming, much of which has little technical thrill. What impresses me most about Viaweb is a bunch of LISP hackers willing to get their hands dirty and deliver value to the masses. Maybe those Founder's Shares helped.

    Anyway it is heartening to see LISP succeed for whatever reason. It really is the best programming language. God is written in LISP.

    1. Re:Its the intelligence, stupid by BitwizeGHC · · Score: 2

      I do love LISP as an applications language because when you get right down to application programming, LISP makes it a literal snap. Actually I prefer Scheme myself... RMS was right; Scheme is probably the best RAD tool there is. :)

      --
      N4st0r, trixx0r h0bb1tz0rz! Th3y st0l3 0ur pr3c10uzz!
    2. Re:Its the intelligence, stupid by blancolioni · · Score: 1

      The conclusion is that you should hire the best people, and use whatever kinky language turns them on.

      That's just lovely, and it must be nice to work in a place where all the best people go to get hired. Unfortunately, I work in the real world, and sometimes it's not possible to gather all the top programmers together. So you should use whatever language produces the most reliable results for the least money.

      For me, that's Ada or Haskell. YMMV.

  90. Re:Why Lisp when there is Haskell? by tietokone-olmi · · Score: 1

    If it ain't broken, don't fix it.

    (besides, Haskell's "pure functional, yet we have the I/O monad" dualism makes my head hurt, among other things.)

  91. Tail recursion by delmoi · · Score: 2

    If a recursive function call comes at the *end* of a function, then it's called 'tail recursion', and it dosn't need any stack space, it just jumps back to the begining of the function

    --

    ReadThe ReflectionEngine, a cyberpunk style n
  92. Java too by delmoi · · Score: 3

    Ok, Java might not have Scheme support, but writing scheme interpreters in java is pretty easy, and lots of people have done it. But what's cool about the way java works is that It's very easy to call objects in java dynamically using the reflection API. So, in theory (and in most cases practice as well), you could write a scheme interpreter that runs on the Java virtual machine, and can use the whole of the Java Runtime environment.

    --

    ReadThe ReflectionEngine, a cyberpunk style n
  93. A better functional language ML/Caml by bwilson · · Score: 4
    I recently had to learn ML (Meta Language) for a class. I'd done some Scheme and Lisp before, and ML at first seemed annoying.

    But ML turned out to be great! It functions like Lisp, but has some additional interesting features:

    • Strong type checking: Most of my Lisp errors were type errors. ML is the most strongly typed language I have heard of (its often used by language theoriticians). When you run the program it is first fully type checked, very few runtime errors are even possible. What makes it different from C is that type checking is implicit (although you can specify types if you want). The compiler/interpreter will figure out which types a function can accept, so you can have a function that accepts many different types for some argument, yet you get the safety of full type checking.
    • Its simpler than Lisp. Lisp has too much crap thrown in. ML is more understandable (like Scheme).
    • Few parenthesis. Although your programs are structured similar to Lisp, most parenthesis are not needed, which IMO really helps readability and makes it easier to change (no more counting parenthesis when you add something).
    • More powerful functions. When you call a function the arguements are actually matched against a pattern in the function declaration. The function with that name which has a pattern that matches the closest is used. You can write interesting recursive functions where one version of the function gets called normally, and another gets called when the argument is a 1, for example. This only scratches the surface of how powerful this feature is.
    • There is even an object oriented version: Caml
    It is available from Bell labs
    1. Re:A better functional language ML/Caml by ep385 · · Score: 2
      It sounds like you haven't used a modern Lisp.
      • Common Lisp is actually a pretty simple language. What throws people off is the size of the Common Lisp ANSI specification. It's large because the authors decided to specify a large library of functions as well as the core of the language. If you ignore the library (and you are free to) then you're left with a language which is probably simpler than ML.
      • No one using a WYSIWYG editor has counted parentheses in 20 years. That's the editor's job. This is a non-issue.
      • Common Lisp's object system (CLOS) allows you to specify that a certain method be called only if specific arguments are passed. This sounds a lot like what you're referring to with ML.
    2. Re:A better functional language ML/Caml by vanicat · · Score: 1

      May be you are talking about SML, but in Ocaml, it's very easy :

      let file = open_out "file" in
      fprintf "int : %i; string : %s" 12 "eza"

      it doesn't seem that difficult...
      (i believe that it is very similar in SML)

    3. Re:A better functional language ML/Caml by mdalgarno · · Score: 1
      • Most of my Lisp errors were type errors
      • Lisp has too much crap thrown in
      • no more counting parenthesis when you add something

      As an experienced Lisp programmer these comments indicate to me that you didn't persevere with the language for very long.

      • If most of your errors were type errors, did you start to declare types? You can do this in Lisp you know.
      • What 'crap' would you exclude ?
      • Nobody whose uses Lisp for more than a couple of weeks counts parenthesis. Correct indentation (as supported in many editors) eliminates the need for parenthesis counting.
  94. Re:LISP is really a simpler form of XML by jonathanclark · · Score: 1

    cool. Another convert! :) How do you find GUILE? The main issues with ingregrating LISP heavily into another applications are :

    - garbage collection
    - type information integration with C++ (how easy is to create and access objects from the other language?)

    I remember briefly looking at GUILE, but I was afraid that it was a little too big for many of the applications I had in mind. Know what the compiled code size of GUILE is? How does it do garbage collection?

  95. Re:LISP is really a simpler form of XML by jonathanclark · · Score: 1

    LISP is a programming language. XML is a syntax.

    Lisp programs are not programs in the interpreter. They are data. You can call (eval) on the data, but it's still just data that conforms to a standard. That is what makes lisp cool is that data=code. You can do the same with XML - that is create a stand where XML data can be evalulated. For example :

    In lisp this would be :

    (print (+ 4 5))

    After the parser has gone through both cases the data structures are basically the same. LISP can be used as a programming language and compiled to executable format, but it can also be used as a data-definition language. A lisp parser doesn't need the LISP execution environment - i.e. garbage collection and predefined functions. But, by allowing predefined functions such as defclass you can do everything you can do in XML in LISP.

  96. Re:LISP is really a simpler form of XML by jonathanclark · · Score: 1

    slashdot doesn't like XML... try again with ( replacing

    XML:

    (print)(plus arg1=4 arg2=5/)(/print)

  97. Re:LISP is really a simpler form of XML by jonathanclark · · Score: 1

    Some points well made, I don't have time to write back right now - but just wanted acknowdege your comments were read. :)

  98. Large numbers by jonathanclark · · Score: 2

    Reminds me of one math class where our home work was to find the first and last digits of some huge exponent and prove that was right. No one's calculator could handle a number that big so the teacher figured everyone would have to get us to figure out a pattern. But, I just typed in one line of code into clisp under linux and let it run for a few minutes. I printed out the result to prove I was right (the number was something like 8 pages of tiny text long)! The teacher wasn't too happy that I spoiled his logic proof.

    1. Re:Large numbers by jdwtiv · · Score: 1

      That's why I mentioned it (this is Jim... :) I remember we had to compile it as the intepreted version ran out of stack space...

  99. Re:Abuse! by jonathanclark · · Score: 3

    Check out Abuse (link below), even though the game came out more than 6 years ago the community is still going and active on a daily basis. I attribute this largely to the addition of LISP which made the game very expandable.

    http://abuse2.com

    Recently Jermey Scott made a Win32 port of Abuse and converted the IPX code to DirectPlay so you can play multi-player over the net. That can be found here:

    http://www.uidaho.edu/~scot4875/

  100. LISP is really a simpler form of XML by jonathanclark · · Score: 5

    I've been a big fan of Lisp since I first learned it, but I've always had trouble articulating why it is so useful. Now that XML is around and the world is saying it's the greatest thing since sliced bread - I have an analogy.

    Lisp and XML both support

    - Arbitrarily complex data can easily represented in text.
    - Parsing of data in an easy fashion.

    However, I think LISP has some advantages over XML:

    - XML standard is becoming too complex, LISP data format is about as simple as you can get. You can write a LISP parser in 100 lines of code. This makes LISP ideal for tiny "fun" applications, to the larger enterprise applications.
    - XML is much more verbose to write - making it easier to read by humans, but also making it something you don't want to write by hand - witness all the tools that have been writing to assist XML writing.
    - LISP allows for execution and interface with code. Sometimes data can't be stored and loaded in a 100% static format. It's very useful to be able to embed calls to your program to generate data on the fly. And it's very easy to mix and match data and code.

    To see LISP in work in the real world, download some of my programs:

    Abuse - a side scroller action game published by Electronic Arts. Almost all the data loaded by the game is specified externally in LISP files. All but the main character's AI functions are written externally in LISP. Source code for this is available.

    EZIP - This program shows my new HTML-like dialog layout library. I encourage you to look at the LISP code that generates the dialog boxes. 3 very nice dialog boxes specified in 100 lines of code. LISP is easier to write than HTML because with an editor that does paren matching you can see opening and closing of rows, tables, and columns. Here is an excerpt of the LISP code from ezip:

    (well /. Say
    "Lameness filter encountered. Post aborted.
    Reason: Junk character post.") when I post the code... oh well

    (This looks better in an editor). What is cool is that changes to variable names such as "filename" and "outname" are automatically applied . If this were an Active-X control with IE showing HTML then I'd have to have a "Submit" button which sent the results of the form, and then parsed the changes I wanted by hand.

    This dialog software uses the same algorithm as IE to layout dialog boxes so when I open I dialog I don't need to specify any sizes in the code. The layout algorithm automatically determines optimal size for tables, cols, and rows. This allows it to calculate a size for the tab control, and a size for the window itself. Language translations just work regardless of how long the German word is for "duck" It's a huge advantage over conventional dialog layout methods like GUI editors.

    Golgotha -A 3d action game that used external LISP files to specify data for the game. This allowed artist to add new models and textures to the game. They may not know lisp but they can copy a line of code and change file names like there is no tomorrow. Source for this is available.

    I'm not going to say that people should go out and programmer entire apps in LISP - but I think it's an excellent way to represent data extern to your program - perhaps better than XML because of the flexibility it can allow you.

    1. Re:LISP is really a simpler form of XML by Blackheart2 · · Score: 1

      Comparing LISP to XML is like comparing a Corvette to the chassis of a Trans Am. One is a car; the other looks like a car, but is missing a few things some people tend to insist on: for example, an engine, transmission, wheels, tires, fuel tank, etc.

      LISP is a programming language. XML is a syntax.

      'nuff said.

      BH

      --

      BH
      Fools! They laughed at me at the Sorbonne...!

    2. Re:LISP is really a simpler form of XML by Blackheart2 · · Score: 1
      Lisp programs are not programs in the interpreter. They are data. You can call (eval) on the data, but it's still just data that conforms to a standard.

      Not "just data": data together with an execution semantics. XML lacks this. (XML+XSLT is another matter, and begins to resemble something like a programming language.)

      Look at it this way: give me the source code of a well-formed LISP program. I can tell you at least two other reasonable ways (e.g., call-by-name and call-by-need) to execute that source code, neither of which are LISP's semantics.

      Now give me a well-formed piece of XML. I can give you a hundred ways to "execute" it. All of them are equally valid, because the XML standard says nothing about execution.

      BTW, the "programs are data" paradigm of LISP is overhyped. In fact you even pointed out the reason: any program is treated as data by its own compiler/interpreter. Whether you use a LISP-style syntax or not is irrelevant. The advantage of a LISP-style syntax is that the concrete syntax and abstract syntax of programs is nearly the same, so there is one less layer of indirection to go through when you are manipulating programs.

      Also, you can easily add macros and an eval command to any dynamically typed programming language; it's largely an implementation issue, except for some subtleties to do with scoping. Adding similar things to a statically typed language is much more challenging, and goes beyond implementation issues to semantical ones. In other words, if you want to thank someone for LISP's eval, you should thank foremost your LISP compiler's implementor, not the LISP designers, since all they had to do was declare that LISP implementors need to provide eval, rather than grapple with any deep issues related to it. (But the idea to allow eval in the first place was of course a bright idea, and McCarthy rightly deserves some acclaim for this---though honestly I dunno if it was McCarthy's idea or somebody else, say Steele or Gosling.)

      Personally, I find LISP-like languages' approach to reflection far too low-level. The existence of something like eval is, of course, essential for reflection, but LISP-style reflection only really lets you elide code generation code. There is still a lot of other compiler code you have to write yourself. For example, the least I would expect from a language with good reflection capabilities is that it ensures statically that dynamically generated code is actually well-formed; in a statically typed language, I would additionally expect that it statically ensures that dynamically generated code is well-typed. LISP does not ensure this. It is easy to feed nonsense to eval, and evoke a runtime code generation error or---even worse---silently produce a nonsensical program. Hygiene issues compound the problem since, I don't think anyone really uses hygienic macros in practice as they are too complicated and restrictive.

      BH

      --

      BH
      Fools! They laughed at me at the Sorbonne...!

    3. Re:LISP is really a simpler form of XML by Blackheart2 · · Score: 1
      Some points well made, I don't have time to write back right now - but just wanted acknowdege your comments were read. I appreciate that.

      BH

      --

      BH
      Fools! They laughed at me at the Sorbonne...!

  101. Lisp was a great language ... by scruffy · · Score: 2

    ... until the monstrosity called Common Lisp was created. More features does not make a better language. Also, it has many silly compromises because of differences between Xerox and Symbolics Lisp machines. Anybody remember those?

    1. Re:Lisp was a great language ... by e40 · · Score: 1

      Let me see. You hate common lisp because it has silly compromises that you can't remember. That sounds logical. I'm glad you're in the "hate CL" camp, because I'd hate to have you argue *for* CL. That would really make people hate CL.

  102. AliasWavefront is mostly LISP too... by drenehtsral · · Score: 3

    Among other famous LISP programs (Emacs, ABUSE, all the Sierra games (king's quest, etc...)), and some other good stuff, a decent portion of AliasWavefront is written in LISP.

    --

    ---
    Play Six Pack Man. I
  103. Re:what I learned in school by Aqualung · · Score: 2

    Apparently it didn't teach you to count them *well*. =P

    ----
    Dave
    MicrosoftME®? No, Microsoft YOU, buddy! - my boss

    --

    - Dave
  104. Re:Why Lisp when there is Haskell? by James+Lanfear · · Score: 1
    ..is standardized - an open standard.

    Common Lisp is a standard. "Open" is just an invitation to change the standard.

    ...also has free quality open source compilers and interpreters which adhere to the open standard.

    CMUCL, SBCL, and CLISP and all reasonably close to ANSI. CMUCL is probably one of the highest quility compilers on Earth.

    ...uses lazy reduction, which means that a wider variety of functions normalize, as opposed to strict reduction.

    This is more a matter of taste than most people care to admit. If you really want laziness, you can build it, as in Scheme.

    ...is purely functional, which leads to more elegant and easier to understand programs. Formal analysis is allot easier when the language is purely functional as opposed to polluted.

    Sometimes that is the effect, but often it isn't; I don't consider IO monads easier to understand than s/foo/Foo/, for example. It doesn't really matter anyway, since you can write purely functional programs in Lisp.

    ...allows for imperative or procedural features through the use of monads. So you can have your cake (purity) and eat it too (imperative/procedural aspects).

    I've never liked monads; frankly, they seem like a hack, and they spoil the conceptual simplicity. You can get the same effects through, e.g., uniqeness typing, without so much syntactic and sematnic baggage. Variable functions are even better, but you probably wouldn't like the "impurity".

    ...uses function currying to ease the use of higher order functions and to decrease the reliance of all those damn parenthesis!

    Currying is spiffy, and imagine it will eventually make it into a major Lisp. I believe I've actually seen curried Scheme, somewhere (and, actually, I starting writing one, once). And I like parenthesis.

    ...is statically typed and uses type inference too, so you don't even have to explicitly tell the compiler what types you are using. It can do all the dirty work for you, yet still give you very high automatic assurance of program correctness.

    Static vs dynamic typing is a matter of taste. Some people like the extra checking, some people don't, and some people don't need it (oddly enough, these tend to Lisp and Smalltalk hackers). The only type errors I can recall making in Lisp recently involve putting the wrong number of d's in cad*r. I'm not having trouble, so why should I throw extra code at a problem that doesn't exist?

    ...is simply better designed. Its syntax, semantics, and APIs are more simple, consistant, and pure than Lisp and its many incarnations.

    Mixed prefix and infix notation is not simple, consistent, or pure.

    So, I ask my question: Why fear new and better things? Why do people keep ranting about the virtues of an outdated programming language, when there are better alternative standard functional programming languages?

    Ah, I see, you're a troll. Well, bye then.

  105. Re:Things I love/hate about lisp by James+Lanfear · · Score: 1
    I didn't mean that the language standard contain those libraries, but merely that there exist standard, widely available, portable implementations

    I'm not convinced that there are actually standard, portable socket, GUI, even regexp, libraries for C. There are certainly some that are portable across Unices, or from Unix to Windows, but I wouldn't call those standard (nor working, in most cases).

    While the ANSI CommonLisp standard is one of the larger standards around, it is amazingly deficient in nailing implementations down enough to let programmers write efficient, portable, robust code.

    Of course, many people believe that vagueness is a strength, allowing vendors to innovate some in their implementations.

    I want a simple language definition, low-cost implementations, interoperable multi-vendor implementations, reasonable performance, runtime safety, interactive development, and a large set of libraries.

    CL gives you half the items on the list, and I would argue Java is missing interactive development and that mutli-vendor anything is still a big problem.

  106. Re:Things I love/hate about lisp by James+Lanfear · · Score: 2
    lack of evolution of the standard and language, lack of standardization

    We have a standard, and implementations try as hard as they can to follow it. The standard doesn't need evolutions; it's already ahead of any other ANSI language standard I know of, and certainly better than following Sun's whims.

    CMU CommonLisp finally gets released with multithreading

    AFAIK, the x86 port has threading.

    the language is brought into the 00's

    Meaning...? You seem to have caught a serious case of Java-itis: symptoms include conflating languages, libraries, and implementations, and believing that everything in the universe should be included in one of the three.

    include regular expressions

    I don't see why this should be in the standard. In a language like Perl, where text manipulation is the norm, it makes sense. Everywhere else it's just bloat.

    XML

    Ditto. XML parsing is an application of a language, not a part of a language. If you really want to play with XML, use XSL; otherwise, write your own library and keep the language small.

    sockets

    I would really like to see sockets as well, but I would rather have generalized streams (across sockets, FIFO's, pigeons, whatever). You also face the problem of defining sockets; e.g., would you include local (Unix-domainish) datagram sockets, which may not be available on some systems?

    HTML parsing

    This is a non-issue. HTML parsing doesn't belong in any language not defined by W3C, and in any case HTML is supposed to be dead in a few years, when XHTML replaces it.

    Internet protocols

    ...should be handled by the OS, or implementation. At most, you should just be able to open a stream to an address and read from it; there's no reason to expose the protocols to the user.

    graphics

    No, absolutely not.

    binary I/O

    Have it, or as much as I want.

    other common features

    Sorry? Since when are XML, regexps, sockets, and graphics "common" feature in language specs? My copy of the C standard must be missing some headers....

    Then, perhaps, the fact that it runs about 10x faster than common scripting languages might start attracting users again.

    I'd rather Lisp hang on the edge of oblivion than come back as a scripting language.

  107. Re:Why Lisp when there is Haskell? by James+Lanfear · · Score: 2

    I think his main point was that functional languages are sorely lacking when it comes to the representation of concepts beyond those found the lamba-calculi. For example, the common objects-passing-messages idea is a far better suited, conceptually, to some problems than the lambda calculus; similarly, lambda is better for many things than OOP. Imperative languages are more natural in some cases than declarative, and vice versa. It's true that you could implement anything in anything, but it's easier to think about some things in certain ways (e.g., it's easier to think about the world as composed of objects than to use quantum mechanics when your trying to make breakfast). Lisp provides almost every paradigm you could imagine, and in this regard I think it's ahead of functional languages.

  108. Re:I can't stand articles like this by lostguy · · Score: 1
    Last time I checked the C, C++, Objective C, Perl, SPARC Assembly, ..., n, n >> 100 languages all supported recursion.


    How about closures, then? Recursion was just an example. As an aside, how does C optimise tail recursion?

  109. Re:I can't stand articles like this by lostguy · · Score: 1
    :-)


    I'm hoping you actually got the point, though, amusing as you were.

  110. Re:What IS Lisp based off? by NCamero · · Score: 3

    LISP is also famous to engineers as the macro language used in AutoCAD.

  111. Re:PDF? Quit your whining... by Tower · · Score: 1

    Well, PDF is a lot more useful than ps in a few different ways. Acroread is a lot easier to get functioning properly on some platforms than ghostview is (not to mention the possible size redux and clarity). If I can have Acrobat Reader on AIX, with bookmarks, the ability to copy text out of a document, and know that anyone on just about every platform will have a reader for it... well, it just makes sense. #(WinPCs with Acroread) >> #(WinPCs with ps viewers). Add that to the fact that Acrobat Reader easily nests in Netscrape/Mozilla and IE, and it comes in pretty handy for most people. I avoid .ps on AIX, Linux and Windows as much as possible.

    And, as the other posters already mentioned, Google caching those pdfs is really handy...
    --

    --
    "It's tough to be bilingual when you get hit in the head."
  112. Re:What IS Lisp based off? by Tower · · Score: 1

    Back in undergrad, when we had a course that made use of LISP, we came up with quite a few backronyms... the file is at home, I'll have to grab that later, but one of my favorites was:
    Lots of Insidious, Superfluous Parentheses.

    Llamas from India, Syria, and Pakistan didn't seem quite right... wrong continent and all...
    --

    --
    "It's tough to be bilingual when you get hit in the head."
  113. Re:Did you try to copy... by Tower · · Score: 1

    >Acrobat 4.05, the latest version, put random characters in the text and a space before every comma.

    Hmmm, didn't have that problem... on windows or AIX...
    --

    --
    "It's tough to be bilingual when you get hit in the head."
  114. Re:don't get too excited about this... by Tower · · Score: 2

    >He could have written it in Sanscrit if he wanted to,

    "You're majoring in a 4000 year old dead language? ... Here's Latin, that's the best I can do."

    --

    --
    "It's tough to be bilingual when you get hit in the head."
  115. Re:PDF? Quit your whining... by Tower · · Score: 2

    >any web browser (with the exception of a few really weird ones, whose names I can't remember) can show html.

    That would have to be '>wget | less' ;-)

    I agree that pdf can be overkill for a small (in this case, 8-page) text document, especially when you don't make any use of real typesetting. HTML is well appropriate for these sort of things (though copy and paste from a text-based pdf still works better than from a web browser, due to the copy inserting unnatural carriage returns when grabbed from a web browser). For any real document (papers, not just trite commentary) that has any type of formulas, graphics or real format to it, pdf is superior to html, since you design it to be WYSIWEG (what everyone gets), and HTML isn't well suited for publishing complex things (tables, frames, etc aren't nearly as nice as the ouput from Pagemaker or [insert your favorite desktop publishing program here]). Printing a given document is likewise simplified...

    Plus, you can easily take a pdf with you, and not have to worry about grabbing all of the associated graphics and/or having a good connection every time you want to look at it (laptops, corporate firewalls)... an html-based document isn't as easy to pull down for complex docs. Plus, the indexing (bookmarks, thumbnails) and other navigation for pdfs far surpasses a side frame on a website, especially with responsiveness. resizing, zooming in... those are nice features, too.

    For short, text-only documentation, html is fine, but complex material (even longer, sectioned text-only material) pdf can provide a lot of nice add-ons.

    The original complaints seemed to stem from ps vs pdf, rather than pdf/ps vs html... which is what I was responding to...
    --

    --
    "It's tough to be bilingual when you get hit in the head."
  116. Re:PDF? Quit your whining... by p3d0 · · Score: 2

    That's because Google recently started indexing PDF files in addition to HTML.
    --

    --
    Patrick Doyle
    I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
  117. Re:Lisp is nice, but not that different anymore by bludragoon · · Score: 1

    lack of compilation to native code for Python source code
    FALSE
    You can compile python code under at least windows and Mac os, (don't know about Linux yet)
    I like being able to do this. it make python a real programming language being both interperted and compiled.

    --
    Elephant: a mouse built to government specs
  118. competitive advantage by wiredog · · Score: 3
    competitive advantage against the competition

    As opposed to, say, a competitive advantage against...?

    1. Re:competitive advantage by holzp · · Score: 1

      ...ALGOL users.

  119. Hard to believe.. by GoofyBoy · · Score: 2


    .. that their entire competitive edge was a programming language.

    There are other factors too, like sales and reputation.

    But Lisp? The reasons why given are vague.

    --
    The surprise isn't how often we make bad choices; the surprise is how seldom they defeat us.
  120. Re:Any karma whores out there... by Simon+Brooke · · Score: 2
    who can post a few links to good Lisp reference sites?
    --
    I'm old enough to remember when discussions on Slashdot were well informed.
  121. Re:What IS Lisp based off? by Simon+Brooke · · Score: 3
    I'd like to point out how bad the I/O is in Lisp

    LISP has had highly sophisticated I/O for many decades. This is why it's so widely used in parsers, text processors, editors and so on. The (Common LISP) I/O specification is here.

    ...and how hard it is to properly handle the myriad possible errors a program has to handle gracefully when working with humans

    in fact, of course, LISP has a condition handling system at least as sophisticated as any other language. The specification is here.

    Also, most lisp engines I've seen are interpreted (save for things like the Lisp Machine).

    Originally LISP was a compiled language. However it is extremely easy to write a LISP interpreter in LISP, so most LISP systems area able to execute both interpreted source and compiled code. Furthermore, interpreted code can call compiled code and vice-versa. Documentation on the Common LISP compiler is here.

    Only a few toy LISP systems lack a compiler.

    Now this doesn't prevent you from doing very powerful very high level things with Lisp, but for the most part you can do them easier and faster with C

    You really never have used the language, have you? If a programming problem can be solved easier by a good C programmer in C than it can by a good LISP programmer in LISP, it wasn't a problem in the first place. For example, I wrote a CASE tool for expert system design in LISP by myself in three months; it took a team of four programmers two years to produce the production C version of the same program.

    --
    I'm old enough to remember when discussions on Slashdot were well informed.
  122. Kewl by drivers · · Score: 4

    Great article. Now I actually want to learn lisp.

    But I don't expect to convince anyone (over 25) to go out and learn Lisp.

    Good thing I have about two weeks before I turn 26. I will have to learn quickly!

  123. Re:open source Common Lisps? by tfb · · Score: 1
    Apart from the correction you made yourself (CMUCL is actively maintained, and CLISP beats Python), there's an underlying truth in what you say: yes, the best CL implementations are probably commercial.

    But that's nothing new. The best C implementations are also commercial. gcc may run everywhere, but it typically doesn't compete too well in terms of performance with a vendor's compiler. Similarly, I guess, for almost all other languages other than those (like perl or Python) defined by a single implementation.

  124. You're missing a few important points by devphil · · Score: 2


    First, I just want to agree with your point about right-tool-for-the-right-job. Disturbingly few people understand that. Anyhow:

    Lisp code is hard to read for most programmers, one big reason for this is that the condition in a conditional statement can be 10 lines long, and 5 parentheses deep. Because of this, finding a bug in a Lisp program could take longer than finding on in a procedural program.

    Like the quote goes, "You can write FORTRAN in any language." Don't blame bad programming style or bad design on the language. You say it would take longer to find a bug than it would in a procedural language, but that's only because you know procedural programming better than Lisp hacking. Be fair.

    Secondly not many people speak Lisp. Like Esperanto, something can be wonderfully designed but if it isn't widely used

    So it has to be popular to be good? I know that's not what you really meant (hopefully), but that's a dangerous trap to fall into for a programmer. You just became one of those competitors in the article.

    it's not going to be too useful.

    If it makes me $20 million, I'd call it useful.

    --
    You cannot apply a technological solution to a sociological problem. (Edwards' Law)
    1. Re:You're missing a few important points by Phoukka · · Score: 3

      And yet, Paul Graham's point is that it is possible to write really good code really quickly using LISP, and that LISP is easy to learn, if you can get your head around the paradigm/parentheses. As such, Graham says that what your coworkers know should not be relevant -- they should learn LISP if they don't know it already.

      Notice the "should"s.

      I have no personal experience with LISP. I just got finished reading some of the source code that Graham and Norvig have published on the Web. I didn't find it that hard to understand. On the other hand, I am also rather new to programming, so maybe I don't suffer from a language rut yet. &nbspBut I doubt that.

      Your objection that LISP doesn't have an extensive set of libraries is a more powerful stumbling block. That, after all, is one of the major things that makes Java so useful. But I wonder if that objection is true? I'm not saying it isn't, because I simply don't know one way or the other. I do know that LISP libraries don't have anywhere near the exposure that the Java APIs have -- I haven't heard of any such libraries, for instance. But at the same time, I wonder whether such libraries exist and we are simply unaware of them?

      And, of course, if you take Graham's argument to heart, we should all just sit down and write some, since LISP is (in his eyes) the best language.

      The original commenter's point indeed: use the proper tool for the job. Graham would just reply the LISP is the best tool for the job.



      Have I been smarmy enough yet...? ;)

    2. Re:You're missing a few important points by Syphtor · · Score: 1

      I've seen quite a lot of people quote this and state it themselves

      ...that what your coworkers know should not be relevant -- they should learn LISP if they don't know it already.

      I'm sorry to say (I'm actually a fan of Lisp) but that is absolute HOGWASH!!! No matter how easy a language is to learn, no matter how great it is, there is still a certain amount of time/effort to learn it, play with it, make mistakes, fix your mistakes and generally become a good coder in it. So just unilaterally saying "Don't complain about how few coders know the language, they should all learn it." is a very stupid statement.

      Bit of supporting stuff for that brief rant, basically most coders/analysts/it people I know hardly have enough time to complete their current tasks with their existing skillsets, whatever they may be.... On the other hand, if a company (ie: Yahoo!) purchased something that was written in a 'relatively' obscure language and they're willing to hire people who have some knowledge (or desire for) in that language and then pay for the training... kewl, where do I sign?

      ok, I've finished now, you can shoot me down now... ;-)
      --
      It's in that place where I put that thing that time
  125. Re:Right, mostly... by J.Random+Hacker · · Score: 1

    um -- that depends on the quality of those hundred other programmers. If you have separable packages, OK. I'm guessing that a package one or 5 people would consider tackling does not read like that, so you suffer communication problems, and the lack of skill so often displayed by the average programmer. Interoperability becomes a problem too -- someone has to glue all that junk together.

    My advice is to choose the supporting libraries *very* carefully.

  126. Re:Uses of Lisp by J.Random+Hacker · · Score: 1

    the implementation model of elisp is simpler than CL, and is missing a number of really useful features, while retaining one really bad feature.

    elisp is derived from LISP 1.5 and MACLISP, IIRC.

    The ugly feature is dynamic scope -- all variables in all functions on the stack are visible for modification. *shudder*.

    The present in CL that are missing in elisp are almost too numerous to mention, but some simple elements of syntax like do and loop, and lexical scope, come to mind.

  127. Re:I can't stand articles like this by J.Random+Hacker · · Score: 1

    ROFL -- you have never groked LISP, have you?

    LISP is so flexible that the rewrites you talk about improve the program over time rather than making things works, provided that the programmer thinks rather than just slinging code. There is a moment when you look at the code, thinking about implementing some new feature, and your head explodes -- you suddenly realize that you can discard several hundred lines in various places with a new abstraction -- a macro or maybe a just a new function....

    I write C++ most of the time to work with an existing code base, but I use LISP every chance i get.

  128. Re:Lisp teaches bad programming. by J.Random+Hacker · · Score: 1

    and don't forget that the LISP compiler is likely to rewirite your code using tail-recursion elimination, making the recursive calls into a loop, along with some obvious variable transformations, leading to code which is obvious and correct and also effecient.

  129. Re:don't get too excited about this... by J.Random+Hacker · · Score: 2

    well yes, but they were looking for a particular type of other person to work with -- and that type of person either knows lisp, or wants to learn lisp. LISP has the hacker nature -- that quality that leads to being 100 times more productive than the average VB programmer.

  130. Re:Why Lisp when there is Haskell? by J.Random+Hacker · · Score: 2

    I challenge you to write an effecient planning package in Haskell. While I love functional purity, monads do not come close to providing the conceptual utility of Classes or some similarly clear representation of concepts, unless things have changed a *lot* in the last 5 years (since I last studied Haskell....)

    Yes I know about the newer compilers. You will soon hit the wall :)

  131. Re:Lisp teaches bad programming. by J.Random+Hacker · · Score: 2

    are you certain of that? I seem to recall some clever transformations that will result in the exactly the rewrite you suggest. Scheme compilers wont to do the rewrite, IIRC, but i;m nearly certain that Lucid Common LISP would do the transform with a high enough optimization level.

    On the other hand, that was at *least* 7 years ago, and those brain cells may already be demented -heh

  132. Re:I can't stand articles like this by J.Random+Hacker · · Score: 2

    That's pretty funny.

    OTOH, the substitution is not perfect. As cool as perl modules are, they do not give you new syntax, while lisp macros can. Splicing, backquote, reader macros are enough to totally transform the language to an entirely different thing.

  133. Re:don't get too excited about this... by J.Random+Hacker · · Score: 5

    Actually having used LISP and C++ (along with many other languages) in my career, I can speak with *some* authority on the differences. I'm frequently astonished with people who express opinions about some language with out first learning something about it. People seem to learn only some small corner of a language and assume the rest of the language is like that chunk, or worse, latch on to some half formed opinion expressed by some other person, and claim that to be the final word on the language.

    The saddest reality is that there is a 100:1 productivity ratio among programmers, and there are many more at the low end than at the high end. I have noticed that the best programmers all know LISP. They grok LISP. As a result, they *really* understand computation deeply enough for that understanding to translate to any other language, though it still takes time to grok the core idea of that other language (C++ comes to mind as a devilishly complex language to truely master).

    Every language has a core quality that the programmer must grasp to use the language effectively. If you can't learn that core idea, the game is over.

    So -- when you say that the code is being rewritten in C++ because your shop can't maintain it, what you are saying is that you can't understand the elegant design, so you will replace it with something simpler (you hope), and will ultimately find that the resulting program is far more brittle, and harder to maintain.

    You are also saying that you don't have any of those programmers who truely grok computation.

    As support for my position: I developed software for engineering automation in the 80's and 90's, then moved to control systems when my company was sold and destroyed by poor management. Technically, the product (written in CommonLISP) was a screaming success. We just could not make good sales/management/investment decisions. I now write control system software in C++. LISP would work better, but I needed to be compatable with an existing code base. I consider myself to be expert or at least competent in both languages.

    LISP is not that hard to learn, by the way. The syntax is *really* simple, the language uniform. What *really* stalls people is not the parens or the effeciency, or loose typing (as is often reported), the core problem people choke on is the abstraction. If your mind is not well enough trained to understand the idea of mapping a function over a domain and expressing that directly, rather than say as a looping procedure, or if you can't grasp recursion, you can't really pick up speed, and when you read code that uses those ideas, you will be lost entirely.

    We could all stand to learn much more. Study LISP -- it will improve your programming skills hugely, I promise you.

  134. Re:Lisp predates C ... by bobm · · Score: 1

    wow, C++ came out in the early 60's. Then when did C come out?

    I thought that C++ was a product of the 80's?

    While I agree that LISP is cool, they did'nt:

    1: do the whole thing in LISP,
    2: are killer programmers so any language would have probably worked.

    Could it be possible that they actually built an extensible product and had a small enough team that they were able to implement functionality quickly and easily, it's probably just that they like LISP and decided to use that.

    It is sad that he doesn't explain why he needs C for other parts of the system.

    I'm sure that he's only trying to make a point in that people over 25 won't learn new languages but I'm wondering if that also applies to him?

  135. Re:Abuse! by JasonAsbahr · · Score: 1

    Naughty Dog's 'Crash Bandicoot' for the Playstation uses a variant of LISP, too.

  136. Boy it sure was by Illserve · · Score: 2

    Tim Hickey was a great teacher wasn't he Zach? While I missed the application specific parts of CS, our theory-heavy department at Brandeis did a great job of making us into great programmers in any arena, provided we had the time to learn the language.

    I had no idea what scheme was, having only learned C up to that point. Boy was I in for a surprise, but that language really grew on me, and I ended up using Lisp heavily in AI applications throughout college.

    I'm very glad we got Scheme first. I would hope that most people entering CS programs these days begin with a fairly solid grasp of a more conventional language like C++.

  137. Re:Things I love/hate about lisp by Chalst · · Score: 2

    The nice thing about the LISP/scheme dynamically typed system is that it is pretty much complete (given the existence of macros). One can add object orientation, lazy evaluation, complex numbers, matrix types, even type inference, without changing the basic language. Wheras strongly typed languages always are in need of extensions. C++ isn't so bad, but then it isn't really strongly typed (the definition is that one can never encounter a run-time type error).

  138. Re:Why Lisp when there is Haskell? by Chalst · · Score: 2

    I'm a Kaskell fan, but I can't agree with a lot of this. Haskell's syntax is a convoluted mess, as is its module system. Monads are theoretically very nice, but they intrdouce horrible maintainence issues. The best Haskell compiles to slower code than the best LISP compilers, possibly *much* slower. It is very hard to predict performance with a lazy evaluating language, so it is not suitable for writing an OS in.

    Lazy evaluation, currying, type inference and pattern matching are all attractive features, but I think Haskell has some fair way to go, and, with the exception of currying, all of these can be introduced as extensions to LISP or Scheme.

  139. Re:what I learned in school by theonetruekeebler · · Score: 1
    Apocryphal story:

    A defense contractor once had the source code to a sensitive data analysis package broken because they transmitted an encrypted version of it across a public network. The attackers broke it because the file name ended in .l, so they assumed it was a LISP application and that the last 64 characters were closing parentheses (or 62 parentheses followed by a CRLF). They made a known-plaintext attack against the last block, extracted the key and used it to decode the remaining blocks.

    --

    --
    This is not my sandwich.
  140. dynamic scoping.... by Snorp · · Score: 1

    one thing that sucks about LISP is, it uses dynamic scoping, meaning that if you define a procedure, it uses the "calling" environment, and not the environment that exists when the procedure was defined..........
    Snorp

    1. Re:dynamic scoping.... by hding · · Score: 1

      Actually, this is (mostly) false. Emacs Lisp is dynamically scoped as you described. Common Lisp and Scheme are lexically scoped, although in Common Lisp (I don't know about Scheme) you can set things up to be dyamically scoped when you need them to be.

    2. Re:dynamic scoping.... by e40 · · Score: 1

      This is one of the powerful features of the language. Do you even know Lisp? Cause if you do, I think you missed the point.

  141. Whole point of macros by jaoswald · · Score: 1

    The whole point of macros is they are key for

    "fast, efficient development of an application like the Yahoo store builder"

    They make programmers FASTER and MORE EFFICIENT, by allowing them to EXTEND the language to meet the problem definition, until the problem can be solved with a one-page program. Then, you're done.

    If you are writing Lisp, and you find yourself repeating code, then you write a macro that repeats the code for you. It is the ultimate labor-saving device.

    Competent programmers know how to pick the tool that will let them solve the problem most efficiently. For most problems, that is Lisp. The fact that there are few programmers using Lisp is a clue as to how few competent programmers there actually are.

    1. Re:Whole point of macros by jaoswald · · Score: 1

      Your mention of SICP is a straw-man, having nothing to do with my point, as the textbook doesn't introduce Lisp macros at all. Even as far as Scheme goes (which I don't lump together with Lisp), SICP doesn't mention continuations, the most powerful feature of Scheme.

      Your holding up of CPAN as an example is pretty pathetic. Perl and CPAN pretty much exist as a bunch of hacks meant to deal with the fact that most UNIX programmers think that uniquely-formatted-but-only-quasi-documented text files are the best way to exchange data between processes.

      I'll concede that LAPACK is probably best written in Fortran. However, LAPACK is now a solved problem. Furthermore, LAPACK is meant as a foundation on which other programs will be built. If you want a convenient, yet efficient, INTERFACE to LAPACK, you can get one in Lisp. (Matlisp)

      Instead of the FreeBSD kernel, why don't you take a look at Lisp machines? They're Lisp all the way down to the machine code level. There are still programmers who develop on *twenty-year-old* Lisp machines because the environment kicks serious ass over any other development environment.

      Before you criticize Lisp, show me a language with a better macro system. Not C++ templates, not cpp, but a serious, robust way to do extensive and arbitrary computations and code manipulations at compile-time. Using the same language as the target language.

    2. Re:Whole point of macros by davidb54 · · Score: 1

      First, don't ever say things like, "For most problems". As soon as you say that you betray your inexperience. Second, wipe that semen off of your copy of SICP and go look at CPAN for a while, or browse the man pages for LAPACK, or download the source code to the FreeBSD kernel. Third, wait until you've developed a 20,000 line application from scratch in at least three languages before talking smack about one over the others. When you get to that point, you'll understand what you think you understand right now.

    3. Re:Whole point of macros by davidb54 · · Score: 1
      Hell if I'm going to criticize Lisp, I think it's a really nice language. My point is that a programming language is only useful to *most* people inasmuch as it permits them to solve a problem with a minimum of hassle. Lisp programmers seem to view the language as an end in itself, perhaps because of the self-selecting nature of that group - I would argue that a disproportionate fraction of serious Lisp programmers are more interested in problems for which Lisp is the most natural fit.

      My point is that there are entire classes of problems for which other languages are best suited - not always because of the innate superiority of the language in one respect or another. Fortran, LAPACK, yes. It is the best choice for complex and time consuming numerical computation. I mentioned CPAN because it is a mind-bogglingly extensive resource for programmers who don't wish to reinvent the wheel. You may sniff at Perl for various reasons, and that is fine, but the bottom line is because of its module system and the extensive community which has contributed to that system, there is an enormous variety of problems which I can solve in Perl much faster than you can solve in Lisp. That is Perl's strong point, and it makes Perl a much better choice than Lisp in those situations.

      You seem to interpret my remarks as criticisms of Lisp, the language. They are not. There has to be a language with such naked clarity, and Lisp's unique features exist because of that clarity. I respect that. But that doesn't mean I'm going to use Lisp if someone tells me I have to design an algorithm to compute three dimensional wind fields from radar data at regular, closely spaced intervals. It doesn't mean I'll use Lisp to parse an XML document when ten lines of Perl will do the trick. And it doesn't mean I'd use Lisp to implement a web server which has to support 10,000 concurrent clients on a system with limited resources. There are many situations one encounters in the real world where the best tool for the job is not Lisp. So what?

  142. Re:Lisp compilers by jaoswald · · Score: 1

    No serious Lisp programmer uses a Lisp interpreter. All the major Common Lisp implementations in use today are compiled.

    They are, however, interactive. When you type in your code, function by function, you can compile each function as you complete it, and test it out by calling it by hand with arguments, or writing another routine that calls it with test cases.

  143. Re:don't get too excited about this... by jaoswald · · Score: 1

    Try

    (defun f (x y z)
    "Routine to frobnicate X with Y, with Z degrees of freedom"
    (let ((result1 (- (g y) 2))
    (result2 (h (/ z 2) x)))
    (* 2.6 result1 result2)))

    Notice how much more compact the Lisp code is. I use "let" all the time for this kind of mathematical stuff, and also more ordinary common-expression elimination.

    The "let" is just syntax, that most compilers will compile as efficiently as the version that doesn't state intermediate results.

    Want speed? Use "declare" I'm not totally sure I have the syntax right, as my Lisp implementation is in the shop,...

    (defun f (x y z)
    "Routine to frobnicate X with Y, with Z degrees of freedom"
    (declare (double-float x y z))
    (let ((result1 (- (g y) 2))
    (result2 (h (/ z 2) x)))
    (* 2.6 result1 result2)))

    If g, h are properly defined with declarations, a good Lisp compiler will infer that the results of the computations are also doubles, and will omit type checking when optimization for speed is turned up and for safety is turned down. Chances are, you will get close to the same code as C.

    What do you mean by vanilla Lisp? Scheme? Emacs Lisp? Common Lisp includes CLOS ("Common Lisp Object System") by definition. Since most industrial-strength Lisp implemenations are Common Lisp, they also include CLOS.

  144. Re:don't get too excited about this... by jaoswald · · Score: 1

    "C++ is more challenging to use than Lisp"

    Walking around with your eyes closed is more challenging than walking with your eyes open. It doesn't mean you are smarter when you do so.

    What "features" of C++ exist to facilitate larger programs? Packages? Stolen (including the :: syntax) from Common Lisp. Templates? Get real. Lisp macros do more, and do it better, without the gross syntax and without the code bloat. Object orientation? CLOS is objects with all the power of C++ and more.

  145. Re:LISP macros by jaoswald · · Score: 1

    Perhaps an example will illuminate things.

    It is possible (see Graham's books) to ignore the object-oriented features (CLOS) that come with Lisp, and define your own object-oriented dialect of Lisp in about 100 lines of ordinary Lisp, using macros. And once you've done so, there is essentially no way to tell that your dialect was not part of Lisp to start with.

    To do the same thing in C, Stroustrup had to write cfront. Which is substantially more than 100 lines, and is far from transparent.

  146. Re:just a clarification by jaoswald · · Score: 1

    "new fancy features" == standardized in 1994. And, unlike some standards, existed before it was standardized.

  147. Re:don't get too excited about this... by jaoswald · · Score: 1

    You are assuming that the typical (i.e. popular) process of choosing a language in which to program weighs both the difficulty of learning and benefits of both C++ and Lisp. I think that assumption is false.

    I believe rather that most programmers *fail* to recognize how difficult C++ is to use well, and in fact don't use C++ well, whether they know it or not. Most programmers have never attempted to learn to use Lisp well (I'm not talking about Scheme, and I'm not talking about the "Lisp is interpreted and has only one data structure" 1950's view of the language), so they have no way of measuring the difficulty anyhow.

    My view is that most C++ programmers have accepted the challenge of C++ without knowing about, much less rationally considering, Common Lisp as an alternative. That is why I depict them as having their eyes closed.

  148. Re:if you have problems with Lisp's syntax... by jaoswald · · Score: 1

    Oh, come on. Lisp has practically *no* syntax. What it has is so logical and uniform that it gives huge power to macros, and allows editors to sensibly indent programs to reveal their semantic structure.

    Common Lisp lets you totally redefine the language's syntax anyway, if you don't like it. Want to write your math expressions using infix notation? Download the infix package, that lets you write #I'sin(x)+y^2' if you don't like
    (+ (sin x) (expt y 2))

    The very logic that you supposedly find appealing in Lisp drives inevitably toward the syntax that Lisp uses: code and list data have the same representation, so that the same operators that you use manipulate lists also lets you manipulate programs!!! That is the essence of macros.

    C++ is an example of a language that misses that great chance. How do you manipulate programs in C++? You either use the C-style preprocessor, which is so limited that it is deprecated in favor of things like inline functions, or you use templates, which introduce a whole new meta-language and a corresponding layer of complexity, and is living is such an over-syntaxified environment that you must remember to leave that extra space in << or the parser will barf on you.

    Arguments about syntax are going to favor Lisp over C++. Consider trigraphs, for God's sake.

    I find it hard to believe that anyone would prefer the syntax of C++ templates, for instance, over CLOS.

  149. Things I love/hate about lisp by nonya · · Score: 5
    C++ is my first language. I'm not a lisp expert, but here's my thoughts on the language:

    Things I love about lisp.
    • Macros. Because the syntax is so regular and the whole lisp system is available during macro expansion, you can extend the language in very powerful ways with macros. *THIS* is a killer feature in lisp.
    • Generic Functions. This is a generalization of virtual functions where a function can dispatch based on more than one parameter. Anyone who has used the visitor pattern in C++ knows implementing multi-dispatch in C++ comes with tradeoffs.
    • Method Combination. Before/After, Around methods.
    • Higher Order Functions
    • Metaobject Protocol
    • Efficient Compilers. Checkout CMULisp for a free advanced compiler
    Things I hate about lisp.
    • Not many good libraries. I would especially like to find a good gui library. I understand there are people working on this (Free CLiM).
    • Language seems to be dying. Not many employers are interested in lisp people.
    • Typing Issues. I prefer stronger typing than lisp has. I think C++'s type system is just right. However, I understand there is no right answer to a type system. It is a tradeoff. Lisp allows some elegant tricks. For example, a pipe in lisp is built from a cons. The second element of the cons can either be another cons (the next element of the list), or a function to call to create the next element of the list. After the function is called, it (the cdr of the cons cells) is replaced with the new element. I can do the same thing in C++, but both the new cons cell and the function have to share a base class.
    Just some random thoughts on lisp. BTW, I highly recommend Paul Graham's "OnLisp" if you're interested in seeing what the language can do. Other good books are: Norvig's "Paradigms of Artificial Intelligence Programming" and if you're interested in Lisp's object model try "The Art of the Metaobject Protocol" by Kiczales, Rivieres, and Bobrow.
    1. Re:Things I love/hate about lisp by Fnordulicious · · Score: 5

      > Things I hate about lisp.
      >
      > Not many good libraries. I would especially like > to find a good gui library. I understand there
      > are people working on this (Free CLiM).

      You must not have looked at CMU Common Lisp closely enough. It includes a binding to Motif, which for me works wonderfully with the Open Motif libraries. (They aren't Liber but they are Gratis.)

      > Language seems to be dying. Not many employers
      > are interested in lisp people.

      Lisp is definitely *not* dying. Certain dialects (such as {Symbolics, TI} Zetalisp, Scheme-style Dylan) are on the wane, but Common Lisp and Scheme are two Lisps that are definitely still going strong. I see Scheme as doing better than ever, actually, and Common Lisp holds its own in many areas.

      The reason why people aren't interested in hiring Lisp people is simply due to a lack of education in Lisp. Most people have some awful memory of it from university, and don't want to deal with it. What they don't know is that under Windows or Unix it's an ideal interface prototyping system, and packages such as CL-HTTP make programming for network applications almost a gedanken exercise. Lisp is still fantastically useful but people are afraid of it or don't know about it.

      > Typing issues.

      There are no typing issues with Lisp. If you want a string you've got a string. You can't go changing it without explicit conversion, just like in C. The idea that Lisp is weakly typed is a myth, something perpetuated from the 1960s and 1970s. Just like the myth that Lisp is slow, which is also a holdover from the 1960s.

      Lisp is a strongly but *dynamically* typed language. Any datum has one type. That typed cannot be changed. If you wish to have that datum converted to another type then you use something like 'coerce' which will create a new datum of different type holding the result of mapping the information in question from the old type to the new.

      It is *dynamically* typed because types are not static. You can change types, you can create new types, etc. It's not restrictive, but it is *safe*.

      C is actually *weakly* and *statically* typed. It's weak because any datum can be converted to any other, particularly through the use of a void pointer. It's static because you have to declare your types at compile time, which limits your program's capabilities, and makes things such as polymorphism very difficult.

    2. Re:Things I love/hate about lisp by Lozzer · · Score: 1

      The only comment in this thread that is more redundant than yours is this one.

      --
      Special Relativity: The person in the other queue thinks yours is moving faster.
    3. Re:Things I love/hate about lisp by vanicat · · Score: 2

      So you should try ocaml + camlp4 : ocaml is a functional language (like lisp) with a very powerful Modules system and object system, a very strong, and powerful type system. It also have a quick compiler that make very quick program. And camlp4 add to all this a very powerful macro language, very near to the lisp one.

    4. Re:Things I love/hate about lisp by sv0f · · Score: 1

      I prefer stronger typing than lisp has. I think C++'s type system is just right.

      I'm not sure what you're after, but in Common Lisp, you can optionally declare the types of variables (e.g., function parameters) and, under strict safety checking by the compiler (such as CMUCL's), some compile-time type-checking can be done.

    5. Re:Things I love/hate about lisp by sv0f · · Score: 1

      > Typing issues.

      There are no typing issues with Lisp. If you want a string you've got a string. You can't go changing it without explicit conversion, just like in C. The idea that Lisp is weakly typed is a myth, something perpetuated from the 1960s and 1970s. Just like the myth that Lisp is slow, which is also a holdover from the 1960s.

      Lisp is a strongly but *dynamically* typed language. Any datum has one type. That typed cannot be changed. If you wish to have that datum converted to another type then you use something like 'coerce' which will create a new datum of different type holding the result of mapping the information in question from the old type to the new.

      It is *dynamically* typed because types are not static. You can change types, you can create new types, etc. It's not restrictive, but it is *safe*.

      C is actually *weakly* and *statically* typed. It's weak because any datum can be converted to any other, particularly through the use of a void pointer. It's static because you have to declare your types at compile time, which limits your program's capabilities, and makes things such as polymorphism very difficult.

      This is a brilliant point, moderators.

    6. Re:Things I love/hate about lisp by janpod66 · · Score: 2
      You must not have looked at CMU Common Lisp closely enough. It includes a binding to Motif, which for me works wonderfully with the Open Motif libraries.

      A "binding to Motif" is not a full GUI toolkit, it's a kludgy workaround. Look at Java's Swing in comparison: full Postscript-like graphics model, entirely written in Java, and fully extensible in Java. Even as far as bindings go, Tkinter and Gtk+ bindings to Python beat CMU CommonLisp-to-Motif bindings any day in functionality, features, and ease of programming. Oh, and Java/Swing also supports multithreading.

      The reason why people aren't interested in hiring Lisp people is simply due to a lack of education in Lisp. [...] Lisp is still fantastically useful but people are afraid of it or don't know about it.

      I know many ex-Lisp users, and it's not lack of education. It's lack of libraries, lack of evolution of the standard and language, lack of standardization, and high cost of commercial Lisp implementations that killed Lisp. It's also the availability of cheap and good alternatives like Python and Java.

      It's a shame that Lisp is in shambles. But people stopped using it not because they didn't know any better or because they couldn't get over the syntax (Perl made it, after all) but because other tools got better and Lisp failed to keep up and address real-world needs of Windows and UNIX users.

      I don't have much hope for Lisp anymore. There is a marginal chance that it will attract more users in the open source community if CMU CommonLisp finally gets released with multithreading, the language is brought into the 00's, and the standard libraries get improved and documented to include regular expressions, XML, sockets, HTML parsing, Internet protocols, graphics, binary I/O, and other common features. Then, perhaps, the fact that it runs about 10x faster than common scripting languages might start attracting users again.

    7. Re:Things I love/hate about lisp by janpod66 · · Score: 2
      Sorry? Since when are XML, regexps, sockets, and graphics "common" feature in language specs? My copy of the C standard must be missing some headers....

      Actually, you just misunderstood. I didn't mean that the language standard contain those libraries, but merely that there exist standard, widely available, portable implementations, written in terms of a smaller set of portable language constructs and library primitives. ANSI C, Java, and Scheme managed to do this, CommonLisp never did.

      We have a standard, and implementations try as hard as they can to follow it.

      While the ANSI CommonLisp standard is one of the larger standards around, it is amazingly deficient in nailing implementations down enough to let programmers write efficient, portable, robust code.

      You seem to have caught a serious case of Java-itis: symptoms include conflating languages, libraries, and implementations, and believing that everything in the universe should be included in one of the three.

      Guilty as charged: I want a simple language definition, low-cost implementations, interoperable multi-vendor implementations, reasonable performance, runtime safety, interactive development, and a large set of libraries. Java delivers the whole package, CommonLisp never did get it right. After 15 years of Lisp programming and waiting for vendors to get their act together, I, as many of my colleagues, switched to Java.

    8. Re:Things I love/hate about lisp by Lisias · · Score: 1

      > > Typing issues. > There are no typing issues with Lisp. If you want a string you've got a string. You can't go changing it without explicit conversion, just like in C. The idea that Lisp is weakly typed is a myth, something perpetuated from the 1960s and 1970s. Just like the myth that Lisp is slow, which is also a holdover from the 1960s On high school I did some A.I. schedules using LISP, and I did it on a Apple //e using CP/M. Yes, I runned LISP (and runned well) on a 8 bits machine with 64K RAM. It was hard in the beggining, but once I learned this beast, I never did so compact and clean list processing and AI logic in any other language than I did on muLisp. Humm... On a second thought, I think I did some very nice "systems specialists" (sorry, my mother tongue isn't english) on PROLOG... 8-)

      --
      Lisias@Earth.SolarSystem.OrionArm.MilkyWay.Local.Virgo.Universe.org
  150. Closed-source ideas by mass · · Score: 1

    It's odd to see an article of this type (supporting the non-sharing of information, even if it's something as basic as not sharing what language you're using) posted on Slashdot, one of the primary supports of open-source. Larry Wall, on the other hand, is in support of the sharing of information, when he talks about Hubris, the basic motivation that should drive programmers (and the designers of languages) to get other people to want to use the same code/languages that we use.

  151. Re:What IS Lisp based off? by StrawberryFrog · · Score: 1

    > Lisp is, it's not based off anything.

    Lisp is based on lambda calculus. It's not based on any other computer language.

    > It has no syntax

    Don't be daft. Every language has syntax, otherwise you wouldn't be able to type in programs. lisp syntax is, however, incredibly simple (and incredibly subtle and powerfull)

    --

    My Karma: ran over your Dogma
    StrawberryFrog

  152. Whatever happened to Prolog by zapatero · · Score: 1

    I remember back in the AI days (the 80s), projects were categorized by the programming language:

    LISP : Standard AI stuff.
    Prolog: Theoretical AI Research.
    C : HMM or Neural Net

    Anyone know if prolog still exists?

  153. Re:What IS Lisp based off? by jonathansen · · Score: 2

    Lisp (LISt Processing) is a language used in Artificial Intelligence circles. Emacs is written in Lisp.
    --

    --
    "A dessert without cheese is like a beautiful woman who has lost an eye." -- Jean Anthelme Brillat-Savarin
  154. Re:What IS Lisp based off? by jonathansen · · Score: 2

    According to my CS prof, LISP == Lots of Insane, Silly Parentheses.
    --

    --
    "A dessert without cheese is like a beautiful woman who has lost an eye." -- Jean Anthelme Brillat-Savarin
  155. Why doesn't he use some of those millions... by smirkleton · · Score: 1
    ...to hire a graphic designer?

    It looks like his web store was BUILT in 1995!

    (from the Yahoo Stores online tutorial...)
    "High Production Values"

    "Production values are even more important on the Web. Consumers will not buy from an amateurish Web site..."

    "Of course there is no direct connection between the quality of your site and the quality of your company. A company could have a brilliant graphic designer and lousy products. But usually there is a connection, and that is what visitors to your site will assume. If your company is unable to put up a good Web site, then it seems natural to assume that your company cannot deliver good products or services..."

    Maybe Museumcompany.com or Despair.com could offer Mr. Graham some design tips on getting the most out of his own store-building application.

    Of course, with millions in the bank, he probably doesn't give a rat's ass whether he sells any LISP books or not. So I guess I answered my own question. Nevermind.
  156. don't forget chip design tools ... by taniwha · · Score: 1

    quite a few commercial products are based on lisp/scheme and provide the ability to load/run your own code within them (as proof of concept I offer the scan insertion tool I wrote a few years back that - gack - ran something like perl to scheme (run in router) to perl) - like all real hacks written under tapeout pressure as a stopgap and used for the following 5 years because it still worked as well or better than the vendor's :-)

  157. Lisp predates C ... by taniwha · · Score: 2
    and of course C++ ... it came out of MIT in the early 60s and is a great example of what gets designed when people have no preconceptions of what they should be doing (or in this case what a programming language should be or should look like).

    LISP is a great medium for learning abstract thinking/programming - I've always thought of it as being a bit like 'programming backwards' (not necessarily a bad thing - just a different mindset) - but that's just my C-centric world-view

  158. LISP used in the "real world"??? by dimator · · Score: 1

    It's hat-eating time for me...


    --

    --
    python -c "x='python -c %sx=%s; print x%%(chr(34),repr(x),chr(34))%s'; print x%(chr(34),repr(x),chr(34))"
  159. Re:I can't stand articles like this by dimator · · Score: 2

    The real reason these guys did well is simply that they were good, fast programmers and their competitors were not. It has nothing to do with Lisp.

    Agreed. This was strictly a right-time/right-place situation. We're talking '95 here; I could have started www.pictures-of-buckets-of-shit.com, IPO'ed, and sold-out to Yahoo or AOL and become a millionaire just as easily. EVERYTHING was new and exciting and profitable.

    I eagerly read every page of the article trying to determine how exactly Lisp had been used, and I did not find anything. The article is so incredibly vague; the author spends more time touting Lisp then trying to convince the reader of it's specific applicability to the realm of web programming.

    If someone has some code they could post, or a web page or two, done in Lisp, that demonstrates it's ultra-coolness, I'd love to see it (not doubting it exists, I just want to see it to make my own judgement).

    Side note: the (macros that right micros)* part sounds wicked cool. I never got to that point in my AI class.


    --

    --
    python -c "x='python -c %sx=%s; print x%%(chr(34),repr(x),chr(34))%s'; print x%(chr(34),repr(x),chr(34))"
  160. Linux Abuse by Inoshiro · · Score: 2

    Don't forget Abuse-SDL, which lets you relive the fun in Linux. It has links to free levels, other Abuse projects, etc, as well.

    My only problem with it is that SDL uses a buggy mode of the emu10k1 (which doesn't work properly on 1Ghz machines). Only XMMS works at all :/
    --

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
  161. Right, mostly... by alispguru · · Score: 2

    Getting out to non-Lisp libraries is doable, but harder than just linking stuff (the fact that we call them "foreign function interfaces" should tell you something).

    And it's also correct that if Lisp makes you N times more productive, but there are 100*N programmers whose work you can steal working in another language, you will probably still lose.

    The conclusion is pretty clear. If you're combining existing tools to make new stuff, stick with their languages. If you're doing something *really* different, go with Lisp.

    --

    To a Lisp hacker, XML is S-expressions in drag.
  162. Please read the WHOLE article, CAREFULLY... by alispguru · · Score: 2
    And I give the quote, in context:
    Today, as Yahoo Store, this software continues to dominate its market. It's one of the more profitable pieces of Yahoo, and the stores built with it are the foundation of Yahoo Shopping. I left Yahoo in 1999, so I don't know exactly how many users they have now, but the last I heard there were about 14,000.
    People sometimes ask me if Yahoo Store still uses Lisp. Yes, all the Lisp code is still there. Yahoo has server-side software written in all the languages Eric Raymond recommends to hackers, except Java.
    It's clear to me that he left out the word "Store" in the last sencence. The whole article talks only about Yahoo Store, mentioning the rest of Yahoo only when comparing profitability, not implementation.
    --

    To a Lisp hacker, XML is S-expressions in drag.
  163. Details on Yahoo Store code by alispguru · · Score: 2

    Graham noticed the activity on Slashdot and put more detailed papers up on his web site, most notably this, a pure-text file describing some of the guts of Viaweb/Yahoo Store, and why Lisp was the right thing for it.

    --

    To a Lisp hacker, XML is S-expressions in drag.
  164. Please read the article, CAREFULLY by alispguru · · Score: 3

    What he said was that Yahoo Store didn't contain any Java. Both what he said and what you said could be true. Do you have knowledge of the Yahoo store code base?

    --

    To a Lisp hacker, XML is S-expressions in drag.
  165. Graham addresses this issue... by alispguru · · Score: 4
    Did you miss the footnote that addresses this issue?
    3. All languages are equally powerful in the sense of being Turing equivalent, but that's not the sense of the word programmers care about. (No one wants to program a Turing machine.) The kind of power programmers care about may not be formally definable, but one way to explain it would be to say that it refers to features you could only get in the less powerful language by writing an interpreter for the more powerful language in it. If language A has an operator for removing spaces from strings and language B doesn't, that probably doesn't make A more powerful, because you can probably write a subroutine to do it in B. But if A supports, say, recursion, and B doesn't, that's not likely to be something you can fix by writing library functions.
    Graham may be opinionated, and you may not like his opinions, but he's not ignorant.
    --

    To a Lisp hacker, XML is S-expressions in drag.
  166. Probably the right decision... by alispguru · · Score: 5

    ... since on-line store building is no longer rocket science. After Graham showed how it ought to be done, on-line store building became a solved problem, and hence boring. Thus, it needed to be redone in languages more suited to use and maintenance by less brilliant developers. Let's face it, 99% of IT work has to be doable by the average programmer.

    I would argue that everything should be done in Lisp ... the first time.

    --

    To a Lisp hacker, XML is S-expressions in drag.
    1. Re:Probably the right decision... by janpod66 · · Score: 2
      I don't think Lisp is a good prototyping environment anymore. The language is good, as is the compiler, but the libraries aren't. For prototyping, you spend way too much time reinventing the wheel.

      While there were fewer choices when Graham started, today, I see little reason not to use either Python or Java for these kinds of prototypes. The convenience Graham got from closures can also be achieved with threads or nested classes (and Perl, Python, and some Java extensions support closures as well).

      BTW, I don't think that Graham invented online store building. Several people seem to have come up with the concept and prototypes around the same time.

  167. Reminds me of CODE WARS, episode 4. by HopeOS · · Score: 3

    BEN: Remember, a Lisp Programmer can feel the Recursion flowing through him.

    LUKE: You mean it controls your algorithms?

    BEN: Partially. But it also obeys your commands.

    ... luke gets his parentheses wrong and crashs. Han laughs heartily...

    HAN: Hokey religions and ancient syntaxes are no match for a good C compiler at your side, kid.

    LUKE: You don't believe in Lisp, do you?

    HAN: Kid, I've hacked from one side of this galaxy to the other. I've seen a lot of strange code, but I've never seen anything to make me believe there's one all-powerful language for programming everything. There's no mystical programming model that controls my destiny.

    ... Ben smiles quietly...

    HAN: It's all a lot of static casts and nonsense.

    BEN: I suggest you try it again, Luke.

    ... Ben fires up emacs and separates out the parentheses...

    BEN: This time, let go your conscious self and act on instinct.

    LUKE: (laughing) With the parentheses all over the place, I can't even grok the code. How am I supposed to debug?

    BEN: Your eyes can deceive you. Don't trust them.

    ... Han shakes his head. Luke runs the code, and it crashes again. Luke lets out a yell and attempts to smack the monitor...

    BEN: Stretch out with your feelings.

    ... Luke stands in one place, seemingly frozen. Luke counts out fifteen levels of parentheses in his head and adds a sixteenth. The code runs.

    BEN: You see, you can do it.

    HAN: I call it luck.

    BEN: In my experience, there's no such thing as luck.

    HAN: Look, going good against AI is one thing. Going good against UI? That's something else.

  168. Yeah but... by selectspec · · Score: 3

    Look, I love Lisp, and with it I can get my emacs to do wonderful things. However, there is a major drawback to using a relatively obscure language for mainstream application development. Fewer third party libraries will be available in Lisp. This means that you'll have to do a great deal of work from scratch either porting, patching or layering libs into your lisp framework. Let's face it. Also, your code will potentially suffer from interoperability problems unless you are extremely careful.

    --

    Someone you trust is one of us.

    1. Re:Yeah but... by ep385 · · Score: 1

      The part about third party libraries just isn't true. Ever since the 1980's Lisps (beginning with Franz Lisp) have had the ability to link to libraries written in other languages. Thus all libraries written for C programmers became libraries for Lisp programmers. Since Lisps usually offer an interactive interface, you can load in C libraries and interactively call functions in them. There are now interfaces to Java VM's as well and once again not only can you call Java functions form Lisp and vice versa, but you can interactively call Java functions and view the results. Lisp has become the ultimate interactive interface to functions normally accessed in the slow compile-link-run manner.

    2. Re:Yeah but... by koglerje · · Score: 2

      Just indent your code correctly. many editors will help you and match your parens. Think about it, XML has twice as many 's as LISP's ()'s noone has a problem with that

  169. Re:Abuse! by selectspec · · Score: 5

    Emacs is definetly difficult enough to qualify as a life long challenge. Emacs is like 42 in Hitchikers Guide to the Galaxy. Don't get me wrong, xemacs is my portal to the world. But, my configurations and modules are as cryptic as the Knights Templar. I've forgotten how half of them work anymore. Emacs is like Darth Vader. One day you realize that you are mostly Lisp/Emacs, but your not sure how you got there. You know its somehow evil, but the power of the darkside is just too tempting to ever go back.

    --

    Someone you trust is one of us.

  170. Re:What IS Lisp based off? by Datafage · · Score: 2
    He did only say one of the oldest, and even by your measure that's accurate.

    -----------------------

    --

    Nicotine free Amish .sig.

  171. Re:don't get too excited about this... by Random+Hamster · · Score: 1

    Rewriting a program because no-one in the company understands the language it was written in, never mind the program itself, is NOT going to be a recipe for success.

    You need to learn some humility, take a deep breath, write out a hundred times 'maybe the people who wrote this code knew something, I will attempt to learn from them' and get stuck in to their code.

  172. .NET and Scheme by km790816 · · Score: 5

    "Scheme is a simple, yet powerful, programming language. As a member of the Lisp family of languages, it is dynamically-typed and mostly functional. Since it is much smaller than Lisp, it can also be used as an embedded language, a scripting language or an extension language. The Hotdog Scheme compiler currently compiles most of the Scheme language. It has been extended to support development within the .NET framework, allowing integration of Scheme and other languages targeting the runtime (Visual Basic, C++, C#, etc.).

    • .NET provides a set of libraries that can be used by all languages.
    • .NET allows anyone to write code that can be used by anyone else. You could create components in LISP that any one else using .NET could easily use, inherit from, etc.
    • .NET provides a core set of types that are shared by all languages to allow seamless integration.

      I'm a little scared of the flame I'll get for bringing up .NET, but take a look at the site. It's some interesting stuff.

  173. Re:Abuse! by waynem77 · · Score: 2

    http://www.gnu.org/directory/calc.html

    Calc is written in elisp and runs in a pair of frames within emacs. It works really, really well. If you have gnuplot installed on your system, it'll even plot graphs for you.

  174. Re:Abuse! by waynem77 · · Score: 3
    I can't think of too many games that feature their own LISP interpreter, unless you think emacs is fun and difficult enough to qualify as a game.

    Well, emacs plays games, how about that? In fact, I keep telling people but no one ever listens: emacs does everything. If I get bored at work, sometimes I'll pop up an emacs and M-x mpuz. There's also tetris, blackbox, gomoku, doctor...

    A couple of weeks ago, I managed to completely destroy X on my home PC. I browsed the Web using emacs until I could get X back up.

    Last week, I was talking to a co-worker. I mentioned, "I'm forgetting my calculus, I tried to integrate such-and-such, and I couldn't do it. Luckily for me, emacs does symbolic mathematics." His jaw dropped open. (He does tech support for my company's symbolic math package.)

    Emacs does everything.

  175. God wrote in lisp code by Ukab+the+Great · · Score: 2

    a really cool, funny, song. Download it. http://artists.mp3s.com/artist_song/234/234762.htm l

  176. does this mean your webserver are really smart? by holzp · · Score: 1

    will the use of Lisp make web services more artificially intelligent?

  177. Re:Uses of Lisp by holzp · · Score: 1

    huh? what year is this?
    LISP is groovy man, and great for some things but there are better languages out there now for general purpose programming.
    let me introduce you to one.

  178. ICI - C-syntax, Lisp-ish data model by AtrN · · Score: 2

    A very nice little language. I am biased but for a reason (no i didn't write it, just an enthuastic user who's helped a bit over the years). ICI embodies many of the Lisp ideas - it's author having written C, Lisp and Postscript implementations - in its object-based data model. It, however, adopts C's expression syntax and control structures (with additions to both). It has OOP constructs (classes, methods), native code modules, autoloading, regexps, reasonable performance, etc... Worth a look. See the ICI web site.

  179. Any karma whores out there... by TopShelf · · Score: 2

    who can post a few links to good Lisp reference sites?

    --
    Stop by my site where I write about ERP systems & more
    1. Re:Any karma whores out there... by ekrout · · Score: 4

      There's a great site with tons of links and info on Lisp right here.



      --

      If you celebrate Xmas, befriend me (538
    2. Re:Any karma whores out there... by PeaNUTZ · · Score: 3

      A good start is Association of Lisp Users:
      http://www.alu.org

      And a couple of other:
      http://www.cons.org
      http://www.franz.com
      http://www.xanalys.com

      --
      /* 0x2b | ~0x2b is in fact -1 */
  180. Re:PDF? Quit your whining... by TheCarp · · Score: 1

    Would you please tell me where I can find a copy of Acroread for GS/OS. I have an Apple IIGS, there is a web browser for the GS... and Acro... oh wait. There is no version.

    But of course I can just download the source and port it right? Please, could you point me to the source, I can't seem to find it.

    Gee this seems like alot of work to read a simple english text article with no graphics or anything.

    -Steve

    --
    "I opened my eyes, and everything went dark again"
  181. Re:PDF? Quit your whining... by TheCarp · · Score: 3

    However, html is even more useful than PDF.

    This is the web afterall. I don't think that the "but its in pdf" was a complaint about pdf specifically, but rather "Not html or plain text", which are both universal, any web browser (with the exception of a few really weird ones, whose names I can't remember) can show html.

    This article was a good read, but it was ALL TEXT. There was absolutly no reason to use pdf, ps, TeX, RTF, MS Word Doc, Powerpoint or whatnot. hell, html would have been overkill for the article in question! (it would have required nothing more than <p> and <h1> for the entire article (with maybe a little <em> thrown in.

    PDF, PS etc all have their place. Articles posted on the web that are all text or text and simple graphics is NOT one of those places.

    -Steve

    --
    "I opened my eyes, and everything went dark again"
  182. Lisp macros by hading · · Score: 1

    A Lisp macro is simply a piece of Lisp code that writes another piece of Lisp code that it
    then feeds into the compiler/interpreter. From the ANSI spec:

    macro form n. a form that stands for another form (e.g., for the purposes of abstraction, information hiding, or syntactic convenience); that is, either a compound form whose first element is a macro name, or a form that is a symbol that names a symbol macro.

    Essentially macros perform transformations on the source code before it gets interpreted/compiled, and unlike (say) C macros, they're a lot more predictable and less dangerous. They're not really like an exec or eval.

  183. Emacs vs. modern LISP by steveha · · Score: 2
    Emacs Lisp is not a modern Lisp. It is an archaic and *very* poorly designed implementation of a Lisp developed at MIT in the 1960s

    This is very interesting. I never paid enough attention to LISP to know any of the above.

    Is anyone looking at updating the Emacs LISP to a modern LISP?

    Would RMS agree with you that Emacs LISP is archaic and very poorly designed?

    Do the modern LISPs come with an editor as part of the development environment? If so, are any of these editors good enough to be competition to Emacs?

    Last question. This is not a flame or a joke; if I'm being silly please set me straight. Since LISP is considered to be a great language for writing programs that can write programs, would it be practical to write some LISP code that would chew up the Emacs LISP and spit out modern LISP?

    steveha

    --
    lf(1): it's like ls(1) but sorts filenames by extension, tersely
  184. Typing Issues by undertoad · · Score: 1

    When you said "typing issues", I thought at first you were talking about all those parenthesis you have to use!

    --
    Move '.sig'

  185. factual inaccuracy in article by egomaniac · · Score: 1

    Not relevant to Lisp, but the article contains a blatantly inaccurate statement that Yahoo does not have server-side Java code.

    I find this rather amusing, considering that I work for Yahoo as a server-side Java programmer, and I've been here for years. My team has probably over a hundred thousand lines of server-side Java code at the moment.

    --
    ZFS: because love is never having to say fsck
  186. Re:don't get too excited about this... by egomaniac · · Score: 1

    I did not say we should all stick to one language -- you are putting words in my mouth. But the fact is, if you're the only programmer in the world who knows language X, and you insist on programming in it, you'll be doing it by yourself.

    "Fringe" programming languages are useful as research projects, certainly. But the real world doesn't seem to need more than a handful of them.

    --
    ZFS: because love is never having to say fsck
  187. Re:Please read the article, EVEN MORE CAREFULLY... by egomaniac · · Score: 1

    ...since you're the one who's reading it wrong.

    I quote:

    "Yahoo has server-side software written in all the languages Eric Raymond recommends to hackers, except Java."

    You'll note that the word 'store' does not appear anywhere in that sentence.

    --
    ZFS: because love is never having to say fsck
  188. don't get too excited about this... by egomaniac · · Score: 2

    Disclaimer: I work for Yahoo!, albiet not in the Store group. My opinions do not necessarily represent those of my employer.

    Okay, with that out of the way -- yes, we have a little bit of Lisp code here. No, this was not a good idea, and no it is not a good way to get rich in the future. I have it on good authority that every single scrap of Lisp code we have is quickly being rewritten from scratch in C++, because there are so few engineers competent in Lisp here (read: zero).

    I realise the hype is that you have free choice of languages and can write code in whatever works best. The sad reality is that there is a hell of a lot more to languages than just a different syntax, and it represents a tremendous investment of resources to become truly competent in a language.

    Just as you would be irritated with your web site designers for dropping into Spanish because "Spanish had a better idiom for saying that -- hey, what's the big deal? It's just a different language", use of programming languages in the Real World is often tightly constrained by the fact that not everybody knows every language.

    Usually when you have some lone rebel writing code in Lisp, it's because, well, he was a lone rebel. He could have written it in Sanscrit if he wanted to, but that doesn't make it a good idea. And, even though he got lucky, it wasn't a good idea -- because, as I said, all the code is being scrapped.

    Take this article with a *very* large grain of salt, please.

    --
    ZFS: because love is never having to say fsck
    1. Re:don't get too excited about this... by timmyd · · Score: 1

      No, the reason someone would rewrite lisp into C++ would be because of support reasons, not because C++ is simpler. There are more people that know C++ and it is more often taught in schools. The other reason is there aren't many programs that can compile lisp---it usually has to be interpreted which is a pain for most people and pretty slow. In other words, I don't think there would be a reason to use C++ if lisp had great tools for windows/linux/bsd.

    2. Re:don't get too excited about this... by waiyian · · Score: 1
      It's always sad to see superior technology has to take a backseat because of incompetent management and engineering.

      But I believe there is hope: just look at Linux! Hasn't the same argument been used against the adoption of Linux?

    3. Re:don't get too excited about this... by sv0f · · Score: 2

      use of programming languages in the Real World is often tightly constrained by the fact that not everybody knows every language.

      Yeah, we should just cut the crap and use one language for everything. Hmmm. What should that be? C#, VB, or x86 assembler? Running under Windows or...Windows?

      I wonder why other high-level programming languages appeared after Backus and the boys invented Fortran? I mean, they had a high-level language and all high-level programmers spoke it. Why invent others? Why Babel?

      And given that Campbell's soups are the most popular, and are probably nutritionally adequate, why slurp anything else?

    4. Re:don't get too excited about this... by statusbar · · Score: 3

      I wonder if it will take the C++ guys longer to rewrite it than the lisp guys took to write the original?

      I use C++ all the time, and I am still amazed at the poor quality of most c++ projects out there.

      --jeff

      --
      ipv6 is my vpn
    5. Re:don't get too excited about this... by Ardvaark · · Score: 1

      You've just demonstrated the author's point perfectly. The competitive advantage from List comes about because nobody knows the language. If Yahoo! doesn't have the ability to hire programmers who are able to keep their competitive advantage, then perhaps they will survive via Marketing Muscle (TM by MS).

    6. Re:don't get too excited about this... by undecidable · · Score: 1

      So -- when you say that the code is being rewritten in C++ because your shop can't maintain it, what you are saying is that you can't understand the elegant design, so you will replace it with something simpler (you hope), and will ultimately find that the resulting program is far more brittle, and harder to maintain.

      I used to be a Lisp advocate, but no longer. I've been there, done that, and it was a waste of time.

      Lisp is a very elegant language in the small. But Lisp simply doesn't have the features which help you manage large complex pieces of software. C++ and Java are not a silver bullet, but they are far better than Lisp when it comes to features which help control code complexity. This is why we use them, not because there is some conspiracy, or a basic failure in economics.

      Your claim is that most developers are too stupid to use Lisp. But C++ is vastly more challenging than Lisp. If you disagree, then you don't really know both languages. Despite the fact that C++ is more challenging to use than Lisp, it is consistently chosen over Lisp. Thus, it's hard to believe that we're consistently making the wrong choice: choosing an inferior language which is more complex to use.

      --
      "The only rights you have are the rights you are willing to fight for."
    7. Re:don't get too excited about this... by undecidable · · Score: 1

      What features are you thinking of, that would help you manage large pieces of software? How do you find the Lisp package system deficient?

      Lisp packages are fine.

      My main beef with Lisp is simply its syntax. The two main things about its sytax that I can articulate are:

      • Parens everywhere. Parens, parens, parens. The syntax is simple and easy to learn, but when you're dealing with large chucks of code that are all look the same, readability drops.
      • Functional return style: Lisp encourages the following style:
      (defun f (x y z)
      (* 2.6 (- (g y) 2) (h (/ z 2) x)))

      While C++ and Java encourage this style:

      double f(double x, double y, double z)
      {
      double result1 = g(y) - 2;

      double result2 = h(z/2, x);

      double result3 = 2.6 * result1 * result2;

      return result3;
      }

      I doesn't matter that you can label intermediate results in Lisp because nobody does it. And even if you do, it's still ugly and typeless.

      I don't know about you, but I wouldn't think of starting a large software engineering project using a language that doesn't have OOP. I have found object models to really help aid the design and understanding of large projects. Lack of OOP is of course another problem I have with vanilla Lisp, but thanks to CLOS, that's less of an issue. But since I don't like the fundamental syntax, no matter what features are band-aided onto Lisp, I will still not like it.

      So I should ask you, what do you not like about Java? Do you find it deficient?

      --
      "The only rights you have are the rights you are willing to fight for."
    8. Re:don't get too excited about this... by undecidable · · Score: 1

      I use "let" all the time for this kind of mathematical stuff, and also more ordinary common-expression elimination.
      Then you are a better Lisp coder than most.


      What do you mean by vanilla Lisp?
      It's basically Lisp with out the new fancy features added.


      I still don't like Lisp's syntax, which is too bad because I do like many of the features. I was very happy when anonymous functions were added to Java.

      --
      "The only rights you have are the rights you are willing to fight for."
    9. Re:don't get too excited about this... by undecidable · · Score: 1

      Walking around with your eyes closed is more challenging than walking with your eyes open. It doesn't mean you are smarter when you do so.
      Your response to my statement is not logical. I agree with your statement above in isolation, but it fails to engage with what I said. The fact is that C++ is a more challenging language to learn to use well than is Lisp. If Lisp was equal to C++ in all other ways, then Lisp should be a popularly chosen language by the software industry. But it is not a language favored by the software industry. Not even close. So apparently, not only does the entire software industry favor C++, but they feel that the advantages that C++ has to offer out-weight the disadvanage that it is a more challenging language to master.

      --
      "The only rights you have are the rights you are willing to fight for."
    10. Re:don't get too excited about this... by undecidable · · Score: 1


      You are assuming that the typical (i.e. popular) process of choosing a language in which to program weighs both the difficulty of learning and benefits of both C++ and Lisp. I think that assumption is false.

      This may be true in some cases, but not in all. In the company I work for, we are well aware of the challenges of C++ and only use it on large projects in which highly skilled develops are employed. For the rest of our projects we use a wide range of languages, though I don't believe that Lisp is one of them. But the bottom line is that we try to match the project with a language based on how it will be used, who will be using it, and what it needs to do.

      I believe rather that most programmers *fail* to recognize how difficult C++ is to use well, and in fact don't use C++ well, whether they know it or not. Most programmers have never attempted to learn to use Lisp well (I'm not talking about Scheme, and I'm not talking about the "Lisp is interpreted and has only one data structure" 1950's view of the language), so they have no way of measuring the difficulty anyhow.

      This is absolutely true of amatuer programmers. But I think you are selling short the many professionals that make the important descisions in the software industry. Perhaps I have a poor view of this situation since I have only worked with outstanding companies, but from my perspective, there is no failure to correctly recognize the trade offs.

      It sounds like we both agree that C++ is more challenging to use well.

      So there are two implications to this:

      1. A common argument as to why Lisp is not more popular is because it is too challenging to use well. I don't believe this based on the fact that other more popular languages are just as hard, if not harder, to use well. In fact, one of the things I like about Lisp is how logical it is. I personally think that it is easy to use well, as long as you are smart enough to, for example, understand how to map a function on a list of lists. If it weren't for that damn syntax.
      2. Despite the fact that C++ is more challenging to use than Lisp, it is more often choosen by the software industry. This indicates that a large number of people agree that the complexities of C++ are worth it.

      It will be interesting to see what happens in the future. I just hope that Lisp is not in mine. Perhaps Lisp2 with better syntax, but I don't see that happening.


      --
      "The only rights you have are the rights you are willing to fight for."
    11. Re:don't get too excited about this... by frr · · Score: 1

      So it was a bad idea to create one of the most profitable divisions
      of Yahoo (though that's hardly an impressive fact considering the price
      of Yahoo's shares), using the most suited language for the task?

      The reason you consider it a bad idea is ridiculous: it's like saying
      that building the library of Alexandria was a bad idea after all, since
      all the books were burned by some vandals that probably didn't know how
      to read.

      This only proves that many people in our profession consider that
      reading that "Teach yourself C++ in 24 hrs" is enough, and instead of
      learning how to use tools properly, they will flail with what they
      already know. Instead of learning a language (that might ot not be
      useful to you as a programmer) to maintain an important and already
      running application, you will rather "scrap every single line of code":
      a process that will introduce new bugs and cost your employer time and
      money, for just one reason: satisfying your laziness.

      Do us a favor and send your résumé to Readmond.

    12. Re:don't get too excited about this... by enloe2 · · Score: 1

      I am no Lisp programmer but I do develop Yahoo! Stores from the RTML end of things. This is probably off topic but I would like to know more info about the direction that Yahoo! is going with the rewritting of the language to C++. I know you are not in the store group but any info on how the interface will change (if at all) or the core development interface (from the user/developer standpoint) would be greatly appreciated. We create these stores for a living and have created a complete business model around the RTML design work. We were around when Paul Graham and Trevor Blackwell used to run the show. They were very accessible. Since they are gone, good strategic info is hard to find.

    13. Re:don't get too excited about this... by enloe2 · · Score: 1

      I am no Lisp programmer but I do develop Yahoo! Stores from the RTML end of things. This is probably off topic but I would like to know more info about the direction that Yahoo! is going with the rewritting of the language to C++. I know you are not in the store group but any info on how the interface will change (if at all) or the core development interface (from the user/developer standpoint) would be greatly appreciated. We create these stores for a living and have created a complete business model around the RTML design work. We were around when Paul Graham and Trevor Blackwell used to run the show. They were very accessible. Since they are gone, good strategic info is hard to find. Thanks

  189. Re:Abuse! by jdwtiv · · Score: 1

    LISP is also great for working with large numbers... :)

  190. Symbolics' LISP OS by OldAndInTheWay · · Score: 2
    Symbolics' operating system was written almost entirely in LISP. (Small bits were in assembler.) Very reliable and robust: in contrast to most other server or workstation operating systems of the time, Symbolics computers rarely crashed.

    Symbolics hardware was innovative as well. It had a tagged architecture in which a data value included data type information. This meant the hardware could enforce the type system at run time with no additional execution overhead.

    Here's a link to some Symbolics info: http://home.brightware.com/~rwk/symbolics/ (and it includes a picture of Zippy, the official Symbolics mascot!)

  191. Re:What IS Lisp based off? by fractaltiger · · Score: 1

    Scheme is actually seeen as a screening class since everyone who thinks of taking CS has to do it as 101. I dont know but I think that teaching them something as hard as scheme gets them discouraged and they end up taking Econ or Math.

    Fractal

    --
    "Wireless : LAN :: Laptop : Desktop"
  192. Re:What IS Lisp based off? by fractaltiger · · Score: 2



    I admire Lisp for its advances as a symbolic manipulation of concepts while encapsulating all the object typing. I, however, have to say that many computer science majors have renounced CS in my small liberal arts college because they didn't find lisp useful or easy to grasp.

    I hope not to sound off topic since Zach's post can branch into what I wanna say.

    The intro level Lisp doesn't seem as encouraging in terms of opening people's minds to functions. I have recommended the CS department to teach C++ as intro and *then* Lisp. I find that higher level languages are better for learning CS than languages *based* on recursion and non-obvious return types in higher level functions --which students don't see in their highschool. All they know is how to match parenthesis for math, but they never see 8 parenthesis in a row, I bet :)

    A function that takes another function seems to me like a disastrous thing to teach a 101 student who has *never* taken CS till the college level but has some hopes as a prospective major. In C++ class, higher level functions make more sense, and does the whole paradigm of programming to the intro student. List should be a powerful language used once you have a grasp of basic data structure concepts and program design.

    --
    "Wireless : LAN :: Laptop : Desktop"
  193. Re:What IS Lisp based off? by WMNelis · · Score: 1

    LISP (Lost In Stupid Parenthesis (this is not the real acronym (the real acronym is LISt Processing))) is a really cool language with a really annoying syntax (lots of parenthesis (they can be a real pain to deal with)). The language was designed with recursion in mind. Recursion is a very elegant way to do tasks repeatedly until a goal is met (an in-order traversal of a tree for example). One of the biggest drawbacks with recursion is that it involves alot of overhead, and LISP is designed to minimize this.

    --

    Sig free since 2/6/2002
  194. More powerful? by slamb · · Score: 1

    I disagree with this article's core point -- that one language is absolutely more powerful than another. He's right that Perl5 is more powerful than Perl4: it includes every Perl4 feature and a lot of new ones. But realistically, how often is this the case, other than a subsequent version of the same language?

    He never formally defines "powerful", instead saying this:

    All languages are equally powerful in the sense of being Turing equivalent, but that's not the sense of the word programmers care about. (No one wants to program a Turing machine.) The kind of power programmers care about may not be formally definable, but one way to explain it would be to say that it refers to features you could only get in the less powerful language by writing an interpreter for the more powerful language in it. If language A has an operator for removing spaces from strings and language B doesn't, that probably doesn't make A more powerful, because you can probably write a subroutine to do it in B. But if A supports, say, recursion, and B doesn't, that's not likely to be something you can fix by writing library functions.

    So he thinks an operator to do something that a subroutine could do doesn't make the language more powerful, because there's another way to do it. Yet by what he just said, that all are Turing equivalent, there is always a way to do the same thing. It may be much more obfuscated, but it's there.

    I would instead define powerful as this: providing a simple and elegant way to do a given task. This means powerful is not an absolute. A language like Perl is much more powerful at doing string manipulation because its string handling is part of the language. C obviously can do everything Perl can (Perl is written in C) but it's not as simple, so C is less powerful than Perl in this respect. Other languages are more powerful for other tasks. Some languages may be a poor choice for just about any task, but others are better for one thing than another.

    Also, powerful is not all there is to think about. He mentioned execution speed. Readability is another concern. COBOL was written so even non-programmers could understand it. Whether you agree or disagree that this is important (I'm inclined to think it's a lost cause), it is another thing to consider. LISP...well, I just don't get it. I will eventually try again to (actually, I think it's going to come up in a class fairly soon), but I'm hardly alone. It does make it harder to find programmers for, etc.

  195. Re:Lisp teaches bad programming. by davidb54 · · Score: 1
    This function is hardly likely to blow out the stack, as it does not even compile. Perhaps you meant:

    unsigned long factorial ( unsigned long x )
    {
    return (x>2)?x*factorial(x-1):2;
    }

    Besides, on a 32 bit machine the unsigned long will overflow when x > 13. You won't get a stack overflow until hundreds of thousands of levels of recursion for a function this simple. By that time, the result will be over 1 million digits long and would require a 5 million bit wide unsigned long data type. I don't see that happening anytime soon.

  196. Re:I can't stand articles like this by davidb54 · · Score: 1

    I gather from your comments that you are a rabid fan of Lisp. Good for you. Nevertheless, you've missed my point. My point is that for fast, efficient development of an application like the Yahoo store builder, you sure as hell don't need a language which permits the definition of new syntactic forms. For God's sake man, come back down to earth! Most web programming is child's play, and the main problem is not the insufficient capabilities of the languages used, it's the pathetic incompetence of the average web developer, especially in the early phases of application development, which matter the most. Software of any significance must be designed before it is written, and most web developers simply do not have experience with this. Unfortunately, that is the *real* reason why web applications are so frequently mangled beyond the point of maintainability as they evolve in capability over time - the accumulation of hacks and partial rewrites eventually turns the thing into an unintelligible mess which nobody can decipher save for the one or two poor souls who are unfortunate enough to have been there almost since the beginning, and they probably think that their ability to understand the pile of garbage makes them programming gurus. I also claim that this is the *real* reason Graham et al were able to move faster than their competition - better design, not a better language. Look, Lisp is a great programming language and I'm really happy for you that you love it so much, but you have got to understand that the difference between a master of a language working in his element and the typical programmer far, far outweighs the differences between the various programming languages used in web development. Didn't you ever read "The Mythical Man-Month"?

  197. Re:I can't stand articles like this by davidb54 · · Score: 1
    perl -e 'while(<&gt){s/LISP/Perl/;s/\+\+//;s/acro/odule /;print}'

    How's that for a labor-saving device?

  198. Re:I can't stand articles like this by davidb54 · · Score: 1

    I claim that the end result of your work is something which could have been done in Perl with an equivalent amount of effort by programmers as proficient in that language as you are in Lisp. The design would have been totally different, of course, but it would do the same thing. To me it sounds like you're saying, "I had to do it this way in Lisp, and there was no other way to do it in a different language which would not have been excessively difficult to implement.". Do you realize how sweeping of a claim that is? Is your expertise in Perl sufficient to allow you to make that claim?

  199. I can't stand articles like this by davidb54 · · Score: 2
    There's nothing wrong with having a favorite programming language, but why do people so often have to claim that their personal favorite is objectively superior to all other languages? Does it ever occur to these people that a large part of the reason they feel this way may have something to do with the fact that they USE this language more than the others, and are hence more competent at programming it than they are at the others (or vice versa)? And that this fact inevitably makes it impossible for them to have an unbiased view of the programming language landscape?

    That prejudice alone is perhaps forgivable, but the logic used to support the claim - in particular, the reference to their use of Lisp macros - is laughable. Paraphrasing: "We used macros for 20-25% of our code, and Lisp macros are hard to write and can do things you can't easily do in other languages. ERGO, 20-25% of our application did things other languages can't do and was thus beyond the capability of our competitors to implement.". "I encourage you to follow that thread", the author exhorts. Sure, I'll follow that thread. I'll follow that thread right to where it ends in a frayed, tattered mess at the foot of a giant billboard that says, "Hey guess what? It's an online store builder, and that ain't rocket science. Calm down and save the Aikido speech for the choir, because they'll listen and nobody else will.". The real reason these guys did well is simply that they were good, fast programmers and their competitors were not. It has nothing to do with Lisp. Had they been faced with a team of Perl hackers of equivalent skill to their Lisp mastery, things would have been more interesting.

    1. Re:I can't stand articles like this by sv0f · · Score: 1

      That prejudice alone is perhaps forgivable, but the logic used to support the claim - in particular, the reference to their use of Lisp macros - is laughable.

      Sure, I'll follow that thread. I'll follow that thread right to where it ends in a frayed, tattered mess at the foot of a giant billboard

      Macros allow one to write programs that write other programs. You can also recurse -- write macros that write other macros, macros that write macros that write macros, etc. Graham and friends did this. When it bottomed out, he was writing a few lines of code for every 10 or 100 his competitors were writing.

      Don't think stupid "replace this bit of text with that bit of text" C macros. They're laughable. In case you missed it, Lisp macros write Lisp code into other Lisp code, with the full power of Lisp available to compute each expansion.

      If you want to truly understand this, work through an intro text on Common Lisp and then read Graham's "On Lisp" for a peek at what real macros can buy you.

    2. Re:I can't stand articles like this by bugbear · · Score: 1
      for fast, efficient development of an application like the Yahoo store builder, you sure as hell don't need a language which permits the definition of new syntactic forms.

      Since I wrote it, I can tell you that you're mistaken. Any big Lisp program will tend to use a fair number of macros, because the way to write a big Lisp program is to start by writing a language for programs like yours, and then to write yours on top of it. Viaweb was, effectively, written in a language for building online apps. The core operator was not merely a macro, but a macro-defining macro.

      This bottom-up style of programming is not limited to Lisp, of course, but Lisp is very well suited to it and most good Lisp hackers work this way.

      There were also specific individual tasks I could not have done without macros. For example, the software does not use cgi scripts, but instead has a hash-table of closures stored in the server, which are generated on the fly when links are. (If you try out the editor you'll notice the urls are just hash keys.) These closures often needed to refer to variables from the surrounding context. I could not have done that without macros.

      It's true, incidentally, that everyone thinks their favorite language is great. That doesn't mean they're all wrong. In many cities, fans think their team will win the world series this year. In one city they are right.

      -- Paul Graham

    3. Re:I can't stand articles like this by bugbear · · Score: 1
      It could have been done in Perl, in the worst (and fairly common) case by creating another instance of Greenspun's Tenth Law.

      That's literally what would have been required if someone used Perl 4, which was what Perl was when we started in 1995. The Viaweb editor depended very heavily on lexical closures, which at that time only Lisp and Smalltalk had.

      And yet, you know, I kind of think you'd be saying the same thing if Perl was Perl 4.

      For more details of why we needed Lisp see these excerpts from a talk I gave recently.

      --pg

  200. LISP is the right tool for that job by Animats · · Score: 3
    I had a merchant account on Viamall in its early days, and was aware it was a LISP application. It was a good system, and way ahead of anything else in that era. It was solidly reliable in an era when few web complex web-based systems worked at all.

    HTML is a tree, and you want to manipulate it as a tree, not as a text file. LISP is good for manipulating trees. Doing Viamall in it made sense. Back then, all the alternatives were much worse.

    LISP concepts are still around. Java is conceptually quite close to LISP. The syntax is different, but the run-time systems look rather similar. Both offer a garbage-collected environment which can load new modules during execution without compromising safety. And to a considerable extent, XML is an attempt to re-invent LISP data structures, badly.

  201. Re:What IS Lisp based off? by jallen02 · · Score: 1

    Scary, that you would mention Emacs, and Artificial intelligence so close to each other. No more Emacs for me..

    Jeremy

  202. Re:Uses of Lisp by jallen02 · · Score: 1

    Where would you recommend starting to learn LISP? I have the common lisp book but there are like a million and one compilers/interpreters out there. One for windows is prefferred, but I can throw it on one of my Unix boxes if I must.

    Thanks

    Jeremy

  203. Re:Uses of Lisp by jallen02 · · Score: 1

    Thanks, I found that MIT book too, by susmann and someone. About Scheme. I may dig into that as I have been told Scheme is a more simplified version of LISP. Sounds fun, I love learning new languages. :)

  204. Intriguing Read... by jallen02 · · Score: 3

    Im not wure who wrote this but this was one of my first turn on's to functional programming languages.

    For the link paranoid.
    http://www.naggum.no/worse-is-better.html

    Very cool reading.



  205. huh? by Lord+Omlette · · Score: 1

    "It was in fact the first big end-user application to be written in Lisp, which up till then had been used mostly in universities and research labs."

    Crack dot com's Abuse? Naughty Dog's Crash Bandicoot?

    Peace,
    Amit
    ICQ 77863057

    --
    [o]_O
  206. Re:What IS Lisp based off? by ElectricMidnight · · Score: 1
    We just finished learning about LISP in my college programming languages class. It's a functional programming language developed in 1959 as an alternative to imperative languages like FORTRAN, which didn't support LISt Processing.

    LISP was designed at MIT for AI research, and was at the forefront of functional programming. LISP is based on Lambda Calculus and is controlled via recursion and conditional expressions.

    Common LISP is a contemporary version of LISP available for UNIX and Windows systems (Debian users $ apt-get install clisp )

    --jason

  207. Re:What IS Lisp based off? by igrek · · Score: 1
    Actually, it's one of the oldest computer languages still in (semi-)common use. Vintage 1958, IIRC.

    Close, but not correct. The oldest living language is FORTRAN, dated back to 1954.

    I wonder how many of the successful web sites hide the secret FORTRAN power from their competitors :)

  208. Re:What IS Lisp based off? by igrek · · Score: 1

    Oops... Haven't noticed the "one of" part. My bad, sorry.

  209. Classes exist in the Haskell 98 standard (nt) by Jagasian · · Score: 2

    Classes exist in the Haskell 98 standard (nt)

  210. Re:Why Lisp when there is Haskell? by Jagasian · · Score: 2

    If you are referring to some asymptotic time complexity disadvantage of purely functional languages compared to Von Neumann languages ... well, while it might seem like such a thing is true, I have yet to see a proof. And you can use arrays through monads, in Haskell.

    Also, you should check out a book titled: "The Optimal Implementation of Functional Programming Languages", which describes a new FP interpretation algorithm that is exponentially faster than the strict LISP interpreters/compilers because it optimally reduces beta-redexes (doesn't duplicate work when it doesn't have to). The nature of strict interpretation/reduction, which LISP uses, implies that function arguements are evaluated in a non-optimal way (arguements that aren't even needed are still evaluated and this can have exponential performance penalties... hell, it can have as bad of a performance hit as you want, depending on your program). While I don't know of any Haskell interpreter or compiler that uses this new theory... its just a matter of time before someone implements it.

    The fact that LISP dialects don't use a strongly normalizing reduction is enough to point out several other resulting problems of the language, with regards to functional programming and programming in general.

    Now, if you want the fastest full-fledged FP language available, you will want to check out Clean, which uses similar theory as the "Optimal" book mentioned above, except it uses Linear Logic theory to allow for linear types or unique types, which let the programmer destructivly update stuff, all the while keeping the language a purely functional language. Offices apps (spreadsheets and the like), video games, compilers, integrated development environments, and more have been implemented in Clean. Purity doesn't mean lack of efficiency or more difficult programming. In fact, purity means nothing more than easier program analysis... you end up with more correct programs because of it.

    Clean is like Haskell with uniqueness/linear types. The only reason that I didn't make a post titled: "Why Lisp when Clean?", is because Clean is a proprietary programming language, and it is my belief that an open language has an advantage by default, over any closed language. Not that the people who maked Clean aren't cool and open, but the language is propreitary... anyway, I am ranting. Sorry bout that. It just starts happening.

  211. Re:Why Lisp when there is Haskell? by Jagasian · · Score: 2
    Static vs dynamic typing is a matter of taste. Some people like the extra checking, some people don't, and some people don't need it (oddly enough, these tend to Lisp and Smalltalk hackers). The only type errors I can recall making in Lisp recently involve putting the wrong number of d's in cad*r. I'm not having trouble, so why should I throw extra code at a problem that doesn't exist?

    A matter of taste, yes, just like: parachutes, seat belts, helmets, traffic lights, file permissions, and encryption are a matter of taste. People who understand the importance of saftey and garenteed correctness prefer static inference type checking, while those who have never read any software engineering studies on productivity with typed and untyped languages prefer whatever-untyped-language they started with. I am not going to sit here and explain why static type checking is important, while dynamic type checking isn't even really true type checking. Static type checking tells me about errors before I ship my code, and dynamic type checking has my customers telling me about errors through customer support calls. Takes some really bad taste to like that!

    Also, you ask "why should I throw extra code at a problem that doesn't exist?" If you are talking about the code required to type things... well, you obviously do not understand Haskell's type inference system. You don't have to tell the compiler what the types of your code expressions are! If there is no problem like you say, then the compiler can figure out the types automatically. It is a win-win situation, and all untyped languages give you is less assurance that your code is correct. Taste has nothing to do with this rational preference for static type inference systems.
  212. Why Lisp when there is Haskell? by Jagasian · · Score: 4
    Why do people continue to promote old outdated technology, when there are better, open, free alternatives? Lisp is a perfect example. The language is not statically typed in most of its incarnations. It uses strict reduction, as opposed to lazy reduction, and the language isn't purely functional. Haskell on the other hand:
    • ...is standardized - an open standard.
    • ...also has free quality open source compilers and interpreters which adhere to the open standard.
    • ...uses lazy reduction, which means that a wider variety of functions normalize, as opposed to strict reduction.
    • ...is purely functional, which leads to more elegant and easier to understand programs. Formal analysis is allot easier when the language is purely functional as opposed to polluted.
    • ...allows for imperative or procedural features through the use of monads. So you can have your cake (purity) and eat it too (imperative/procedural aspects).
    • ...uses function currying to ease the use of higher order functions and to decrease the reliance of all those damn parenthesis!
    • ...is statically typed and uses type inference too, so you don't even have to explicitly tell the compiler what types you are using. It can do all the dirty work for you, yet still give you very high automatic assurance of program correctness.
    • ...is simply better designed. Its syntax, semantics, and APIs are more simple, consistant, and pure than Lisp and its many incarnations.

    The only drawbacks to Haskell is that it is new and less people know about it and know how to use it. Many universities also do not teach Haskell because, again, it is too new.

    So, I ask my question: Why fear new and better things? Why do people keep ranting about the virtues of an outdated programming language, when there are better alternative standard functional programming languages?

    If you have no idea what I am talking about, then download Hugs (for Mac, Windows, Linux), a Haskell interpreter, and try it for yourself. Debian GNU/Linux users can simply "apt-get install hugs" and start running hugs. I also recommend a book, if you have never programmed or never programmed in a functional language before: The Craft. Read the book an hour each day, and play around with hugs while you are at it. After a few weeks, you will understand why writing code in Haskell is allot like writing the poetry of algorithms.

  213. Re:What IS Lisp based off? by Gogo+Dodo · · Score: 2
    Prolly the most famous application using Lisp is Emacs. In fact, some people refer to Emacs as nothing more than a Lisp interpreter that includes some macros that are really good for text editing.

    The famous (?) quote is:

    GNU Emacs is a LISP operating system disguised as a word processor. - Doug Mohney, in comp.arch

    See http://www.lickey.com/emacs/ for more quotes.

  214. How about security issues? by TheLink · · Score: 1

    With data=program, and all that RTML, I'm wondering how the authors made sure that their users didn't add in "unwanted features" into their webapp.

    With my webapp, I at least know that sort of thing is close enough to impossible. But at the same time, that means zero user customization of the webpages.

    Cheerio,
    Link.

    --
  215. Paul Graham's "On Lisp" out of print? by allagash · · Score: 1

    Does anyone know where I can get a copy of Paul Graham's book "On Lisp"? It seems to be out of print, and I haven't been able to find a copy at any used book sites (half.com, alibris, powells, etc.)

    thanks.

    allagash98@yahoo.com

  216. PDF? Quit your whining... by clary · · Score: 1

    ...there is a postscript link too.

    --

    "Rub her feet." -- L.L.

  217. Re:What IS Lisp based off? by Lozzer · · Score: 1

    If nobody else finished the assignment its hardly surprising that yours was the quickest implementation

    --
    Special Relativity: The person in the other queue thinks yours is moving faster.
  218. Getting started with LISP by blackdefiance · · Score: 3

    A great book for anyone interested in reading up on this is The Little LISPer, by Daniel P. Friedman. The entire book is a dialog, consisting of questions down one side of the page, and answers down the other. It starts with the basic concepts, (ie, What is an atom?), and just builds and builds. This is easily one of the most compelling computer instruction books I've ever read. Probably not that great as a quick reference, but if there were more language books like this, I'd learn more languages.

  219. A useful language. by PeaNUTZ · · Score: 1

    The part I love about lisp is:

    (defun do-everything-you-ever-wanted ())

    Of course, the implementation is left as an excercise to the reader.

    --
    /* 0x2b | ~0x2b is in fact -1 */
  220. Lots of success stories by lispbliss · · Score: 2

    Check http://www.franz.com/success/ for a whole bunch of success stories from users of just one Lisp implementation.

  221. Links to Learn Lisp by lispbliss · · Score: 2

    Here is an excellent online introduction to Scheme, a lisp dialect.

    http://www.cs.utexas.edu/users/wilson/schintro/sch intro_toc.html

    And here are many links to Books, Online tutorials, etc for learning Lisp

    http://www.lisp.org/table/learn.htm

  222. Interesting Lisp Papers by lispbliss · · Score: 2

    Pride and Prejudice: Four Decades of Lisp

    http://kmi.open.ac.uk/people/snw2/papers/prejudice /prejudice.html Floating Point Performance of Common Lisp

    http://members.home.net/vogt/fft-paper.html John McCarthy's Home Page (the creator of Lisp)

    http://www-formal.stanford.edu/jmc/

  223. Extreme Rapid Development by lispbliss · · Score: 3

    Peter Norvig (Division Chief, Computational Science at NASA) recently reviewed 4 Dynamic environments and Lisp ranked _very_ highly. Here is the review:

    http://www.sdmagazine.com/articles/2001/0103/0103e /0103e.htm

  224. Lisp as an Alternative to Java by lispbliss · · Score: 4

    http://www-aig.jpl.nasa.gov/public/home/gat/lisp-s tudy.html

    Blurb... "We have repeated Precheltís study using Lisp as the implementation language. Our results show that Lisp's performance is comparable to or better than C++ in terms of execution speed, with significantly lower variability which translates into reduced project risk. Furthermore, development time is significantly lower and less variable than either C++ or Java. Memory consumption is comparable to Java. Lisp thus presents a viable alternative to Java for dynamic applications where performance is important."

    1. Re:Lisp as an Alternative to Java by sv0f · · Score: 4

      It should also be noted that Guy Steele, the editor of the original definition of Common Lisp in 1984 and the pre-ANSI definition in 1990, is the same guy who:

      (1) Co-invented scheme.
      (2) Co-wrote the best reference manual on C with Samuel Habison ("C: A Reference Manual", I think)
      (3) Co-wrote the best reference manual on Java ("The Java Programming Language Specification", I think)
      (4) Collected the original Jargon file and is therefore responsible for the funny stuff (as opposed to Raymond's contributions) in "The Hacker's Dictionary".

  225. PDF's by Srin+Tuar · · Score: 2
    why the implication that PDFs are not, in general, worth the read?

    Because theyre not designed to be read on a moniter. Theyre meant for printing out. Theyre a throwback to an older medium.

    They have their place yet, but ultimately, when we quit printing out things on paper, theyll go away.

    1. Re:PDF's by Srin+Tuar · · Score: 2

      Do they wrap paragraphs for you, to fit as much content in your desired font size in as little space?

      Do they allow you to extract the images easily? can you search through them for text properly? Can you search for regular expressions? can you generate them on the fly in response to queries?

      can you separate content from presentation?

      can you see more than one page at a time? Can you fit an entire book on one page?

      can you view the document in a font more to your liking?

      Can you convert them to plain text files that make sense?

      Can yau embed/link to content in other files. On other machines? Would you use a pdf for your homepage?

      You can use a hammer to dig a hole in the ground, but you cant say thats what it was meant for.

    2. Re:PDF's by Raffaello · · Score: 1

      Not designed to be read on a monitor? What makes you say that? Does your platform lack a decent PDF viewer? They have TOCs, hyperlinks, can be scaled to any size (fit page, fit width, fit visible, or arbitrary % magnification).

      I have *never* printed out a .pdf file, *ever*.
      I always read them on my monitor.

      Or did you mean they can't be read on a text console?

  226. got to love the lisp by slashdoter · · Score: 3
    "wrote an article that explains how he used Lisp"

    yeths, we all love theth lispths, some timeths iths helpfull in a cthndy Brady kind of way


    ________

    --
    Does anyone actually have a Java program designed to control air traffic, or for the operation of a nuclear facility?
    1. Re:got to love the lisp by 2ndPersonShooter · · Score: 1

      I think you meant:
      (yeths (love (we (all theth lispths)))) (some timeths (helpfull (iths (cthndy Brady) (way (kind of)))))

      --
      also by 2ndPersonShooter: Voices Inside My Head - The Unauthorized Autobiography
  227. Uthing Lithp? Thath Thilly!!! by -=OmegaMan=- · · Score: 1

    Howth that thupothed to beat the competithion??? ;)

    --

    This sig is xenon coated, and will glow red when in the presence of aliens

  228. Beating his own drum? by Quixote · · Score: 1


    I think Paul Graham is tooting his own horn a bit too much here. Lisp was 35 years old when he used it in ViaWeb. His claim that "It was in fact the first big end-user application to be written in Lisp,which up till then had been used mostly in universities and research labs." is patently wrong. Has he forgotten about Emacs? When I was a lowly grad student, we used to work on Lisp Machines (a TI Explorer and a Symbolics Lisp machine). IIRC, their whole OS was written in Lisp.
    So, for Mr. Graham to claim a first here is definitely hype.

  229. Re:What IS Lisp based off? by vsync64 · · Score: 1
    I suppose this sort of FUD is to be expected from someone with a sig from the man who unleashed Perl upon an innocent and unsuspecting world :)

    Unfortunatly, most functional programming languages are toys that sometimes get used in big projects.

    For a laugh, why don't you email that comment to Erik Naggum... Anyway, functional languages, CL especially, are the most scalable in my (or opinion experience).

    Before anyone flames me to a crisp, I'd like to point out how bad the I/O is in Lisp

    Ummmm, no. I write little Lisp programs in lieu of shell scripts or Perl. And I've written a package to process CVS logs (terribly painful format to parse, btw), which chows through megabytes of logs ridiculously fast.

    Also, most lisp engines I've seen are interpreted (save for things like the Lisp Machine).

    CLISP compiles to bytecode, and CMUCL compiles directly to native code. Both are completely free, with source code and everything.

    but for the most part you can do them easier and faster with C, also it's nigh impossible to do very low level things with Lisp (At least from with what's available)

    So use FFI. Call your C function from Lisp, and be happy.

    Lisp is truely the language of the theoretical math major.

    To be sure, but it should be the language of everybody else too.

    :-)

    --

    --
    TO BUY A NEW CAR WOULD MAKE YOU SEXUALLY ATTRACTIVE.
  230. Re:PDF? Quit your whining... by vsync64 · · Score: 1
    It would have been nice if they had run LaTeX2HTML, TtH, or some similar thing.

    --

    --
    TO BUY A NEW CAR WOULD MAKE YOU SEXUALLY ATTRACTIVE.
  231. Re:What IS Lisp based off? by vsync64 · · Score: 2
    Another popular AI language is Prolog, which is another language with weird syntax. This derives from the fact that it is a declarative language. Everything is stated in facts and rules, and the Prolog environment "reasons" based on these. Many expert systems and similar things are written with Prolog.

    Prolog seems more popular outside .us, but that seems to be a territorial thing to me (Lisp was invented in .us, while the major dialect of Prolog is called "Edinburgh Prolog"). Japan, especially, had a big thing for Prolog in the 80s, but it seems to have died off (along with, thankfully, Turbo Prolog).

    I actually tend to prefer Prolog for AI-type things, and use Common Lisp as my general-purpose language. It's also worth noting that implementations of simple Prologs in Lisp abound.

    --

    --
    TO BUY A NEW CAR WOULD MAKE YOU SEXUALLY ATTRACTIVE.
  232. thoughts on Paul Graham and Common Lisp by vsync64 · · Score: 5

    I'm a big fan of Common Lisp as well as Paul Graham (having read his book ANSI Common Lisp, I can see that he possesses both in-depth technical knowledge and a sense of humor). This article seems to match what I've read of him in quality, and I look forward to reading it in more depth when I get home.

    I'm not a Lisp guru by any means, but the one thing that I always get a kick out of is how easy it is to become a low-level guru. After a few weeks of playing, I was doing things I wouldn't have dreamed of doing in C or Java. And it changes one's perspective. It all translates to machine code at the lowest level, of course, but after learning Lisp I can say without a doubt that I'm a better C programmer.

    Lisp is an interesting language, because in some ways it's ridiculously high level (closures, generic functions, garbage collection, et cetera), but you're also able to get down and dirty with the cons cells with no trouble. I think this quote expresses it best:

    What I like about Lisp is that you can feel the bits between your toes.

    -- Drew McDermott

    Lisp is extremely versatile. While it was originally used in AI, it's honestly the best tool for most situations I come across. (You can see one thing I've done here, and I've done some other stuff that I haven't had a chance to post yet.) Whenever I need to do more in the shell than loop through a few files, I write it in Lisp (I've written 5-line programs to leech an entire Web page's MP3 archive). Lisp is great at processing logs, the output of various subprocesses, and other such things. It's also got a wonderful OO system.

    Graham's "Blub" example holds true for everyone I've met who has a disdain for Lisp. The advanced features it provides really do go over their heads, which is sad, because these are often intelligent people. Also, they don't look beyond the syntax differences, and often have a lot of misinformation (Lisp is slow, you can't do iteration in Lisp, Lisp is for lists and AI) fed to them by CS professors or whoever. I also often see a lot of posts from newbies who want to write "C-Lisp" and give up when that doesn't work. Lisp is a different paradigm, and needs to be treated as such.

    If you're interested in Lisp, I would recommend reading The Evolution of Lisp (don't be angry at the poor fonts in the PDF; they didn't use scalable TeX fonts, the weenies :), Paul Graham's ANSI Common Lisp, and Winston and Horn's LISP, 3rd Edition (but ignore them when they disparage car and cdr), in that order.

    Also, don't be confused by the various Lisps out there. First, ignore Emacs Lisp. Among its quirkyisms, it's dynamically scoped, which means that if you declare a variable, every function you call will also have access to that variable. Secondly, Scheme and Common Lisp are vastly different. Scheme is much leaner, and has 1 namespace, which means you can't name a variable and a function the same thing (I dislike this, but it's a hotly contested issue). Common Lisp has a huge set of standard APIs and much more versatility prebuilt into its core, while Scheme tries to stay small so as to provide an easily implementable standard. I'm a Common Lisp man, myself, but try things out for yourself.

    One final thing is that if you hang out with them, you'll realize that most of the long-time posters are extremely knowledgable and have a great sense of heritage. I've learned a great deal by simply lurking through their flamewars, since I find out a lot about what issues may crop up for an individual programmer.

    If you want a bit more advocacy, see my recent posts on the subject.

    --

    --
    TO BUY A NEW CAR WOULD MAKE YOU SEXUALLY ATTRACTIVE.
  233. Rewriting the macros? Understanding the Lisp? by ralphc · · Score: 1

    I have a couple of questions for the people rewriting the Lisp in C++:

    In his article Paul Graham stated that 20-25% of the code took advantage of Lisp's macros, and that it wasn't in there for fun, it was necessary. What are the people rewriting this in C++ using to duplicate the functionality that the macro facility provides?
    If zero people understand Lisp, how the heck do you understand the Lisp code enough to rewrite it? What's going on over there? I'm imagining the scene in 2001 where all the homonids are standing around trying to understand the monolith.

    1. Re:Rewriting the macros? Understanding the Lisp? by ralphc · · Score: 1

      If this was a two-guys-programming startup what makes you think there's a spec?
      ...and stop calling me Shirley.

  234. Ok all you guys with a view from the top... by yipper · · Score: 1
    It's been 15 years since I got my ComSci sheepskin from a midwestern Moo U. In those days the programming education came in two flavors, Pascal and Cobol. I chose Pascal. Shortly after graduation I became gainfully employed. I learned C. I learned SQL (for some value of 'learned').

    Over the years I picked up a course on Java. I did a little C++ on my own.

    Now I do most things in Perl.

    For example, I have to build a little script that will break up this monolithic file into multiple files, build a directory structure, and ftp the whole thing to another machine. Perl. Take a bit from this and a bit from that, throw in some CPAN and I'm done.

    One of you fine folks with a view from the top tell me what would work better. I'm always interested in doing less and getting more.

    Lay it on me.

  235. Re:What IS Lisp based off? by Joe_Camel · · Score: 1

    As far as I know, it isn't based off of anything. You haven't heard of it because you are probably in the "under-25" crowd. LISP isn't really good for much, outside of artificial intelligence or other heuristical analysis-type applications. AutoCAD used to make extensive use of LISP for user-written scripts; in fact, it still has built-in LISP functionality, but as with most other CAD packages, those functions have probably been translated to C by now....

    --
    "I ain't 'nobody,' dork....right?"
  236. Re:Uses of Lisp by Joe_Camel · · Score: 1

    I didn't say you COULDN'T use it for anything else. There are just better language choices today....

    --
    "I ain't 'nobody,' dork....right?"
  237. Re:What IS Lisp based off? by tykay · · Score: 1
    Well there is, this one. I think it's pretty famous ; )

    It's pretty simple: just "car", "cdr" and parenthesis. Heh, heh. You can do amazing stuff if you get used to thinking right.

    --
    Two is not equal to three, not even for very large values of two.
  238. Prolog by Meech · · Score: 1

    Functional languages are different, but if you really want to fuck with people, make them learn prolog!

  239. Re:What IS Lisp based off? by SquadBoy · · Score: 2

    I'm not. The without permission part is *funny* yes Eric does ask that you credit the file but since the Jargon File is public domain you do not have to. See this http://www.tuxedo.org/~esr/jargon/quoting.html

    --

    Cypherpunks: Civil Liberty Through Complex Mathematics. Those who live by the sword die by the arrow.
  240. Re:What IS Lisp based off? by SquadBoy · · Score: 3

    :LISP: /n./ [from `LISt Processing language', but mythically from `Lots of Irritating Superfluous Parentheses'] AI's mother tongue, a language based on the ideas of (a) variable-length lists and trees as fundamental data types, and (b) the interpretation of code as data and vice-versa. Invented by John McCarthy at MIT in the late 1950s, it is actually older than any other {HLL} still in use except FORTRAN. Accordingly, it has undergone considerable adaptive radiation over the years; modern variants are quite different in detail from the original LISP 1.5. The dominant HLL among hackers until the early 1980s, LISP now shares the throne with {C}. See {languages of choice}. All LISP functions and programs are expressions that return values; this, together with the high memory utilization of LISPs, gave rise to Alan Perlis's famous quip (itself a take on an Oscar Wilde quote) that "LISP programmers know the value of everything and the cost of nothing". One significant application for LISP has been as a proof by example that most newer languages, such as {COBOL} and {Ada}, are full of unnecessary {crock}s. When the {Right Thing} has already been done once, there is no justification for {bogosity} in newer languages.

    --

    Cypherpunks: Civil Liberty Through Complex Mathematics. Those who live by the sword die by the arrow.
  241. Functional Programming by denshi · · Score: 1
    As for functional programming, it's a programming paradigm, like imperative or object oriented programming. It tends to be very powerful, often makes use of constructs which are terse (fewer lines of code to do the the same thing than required in other langauges) and generally makes extensive use of recursion.
    A better definition of functional programming is that everything is a function, that there are no side effects, and there is no state outside of a function (and no assignment statements). In theory, this solves an entire class of programming errors. Further requirements for functional langs are referential transparency - a variable can be replaced by its value at any time; this helps in proving correctness, but cripples a system for I/O. (no matter what you Haskell people think about monads, they're insufficient.) Most functional langs support lazy evaluation, which is to say that a value is not computed until it is needed -- this leads to cool things like mapping a function onto the unbounded set of integers (a fairly routine operation, actually.).

    Functional programming is really only 20 years old, which is about how old a language has to be before the lowest-common denominator languages start paying attention. Is this the future? (god I hope not.).

    As for teaching students, functionals are an excellent place to start b/c it *forces* students to learn to work with higher-level functions and learn to think in sets, domains, recursion, and mapping. I think it a great boon that a freshman can pick up mapping in a week in functionals whereas someone with years of experience will stumble through 'Patterns with C++' to learn to kludge together something similar.

    vive le LISP!

  242. Re:What IS Lisp based off? by wishus · · Score: 2

    I agree with you completely. Lisp & Scheme opened my mind like a psychadelic drug.

    wishus
    ---

  243. It�s software productivity, stupid! by fraber · · Score: 2

    From the "I also know a programming language" section:
    I mean, the discussion basicly is about software productivity, which is minimizing:

    (func - lib) / (people * efficiency)

    So go for libraries, people and efficient programming languages. Depending on the job, even SAP might work... (lots of functionality, good people...)

    I think LISP falls short on the people part. The same unfortunately happens to Smalltalk and Prolog. Prolog is my personal favourite, and even more powerful than Lisp. See http://www.fraber.de/sitec for a full fledged content management system in 5000 lines. Checkout http://www.swi.psy.uva.nl/projects/SWI-Prolog/ .

    But there are some golden combinations. Checkout ArsDigita, http://www.arsdigita.com/ . These folks are using a ridiculous language (TCL, no argument passing by reference!!!) together with a huge library, lots of working examples and a solid infrastructure to build incredible online communities. And the language is so easy to learn.

    And (Im sorry, but ..) Java is really getting better in the library and working examples part. Checkout Yahoo for open source Content Management Systems in Java (great source of working examples to build your app on) and get IBM Visual Age for Java for quiche eaters integrated IDE and collaborative version management.

    Were using ArsDigita in my company, were still in business, and our competitors just dont get it how fast were shelling out new modules.

    Good luck!
    Frank

  244. Re:Son-of-Lisp by Gorbag · · Score: 1
    However, Dylan's infix syntax (highly readable is a matter of opinion) tosses out the ability to write macros the way one can in Lisp, and thus, the essential reason Lisp was found valuable in this application.

    Lisp is its own meta-language. That's the basis of much of its power.

    Also while Dylan can be more efficient than Common Lisp in terms of the object subsystem, I believe CLOS with the Metaobject protocol fully implemented is more powerful.

    Last, the condition system in ANSI Common Lisp is at least as sophisticated as Dylan's as far as I can tell. Do you have some particular feature in mind?

    Hacking Lisp professionally since 1985... and still doing so.

    --
    -- I speak only for myself
  245. Re:bzzt. by G+Neric · · Score: 1
    thanks for the clarification on Common Lisp having implemented operator overloading, the most important part of polymorphism. I didn't realize they had (it was a long time ago that I used lisp). does it support inheritance, abstracts/pure virtuals, and all that stuff? How do they handle user-defined data types? are they first class? I'm thinking they aren't. What I mean is that if you implement some semantics in terms of conses, you don't want all conses to polymorph the same way: a list of people is not the same abstract type as a list of temperatures.

    As to the traditional meaning of "strongly typed", I think it's an almost archaic distinction (not obsolete, but missing all of what is truly interesting about semantics), but it still means what it means, compilers that check actual parameters agains formals and spew errors.

  246. bzzt. by G+Neric · · Score: 2
    I'm on your side in defending Lisp, and you're right, many of these criticisms are very old-fashioned. But, your statements aren't exactly correct.

    There are no typing issues with Lisp... If you want a string you've got a string

    if you want a string and somebody passes you a cons, you've got a cons, and that's a problem. that's what the "strongly typed" crowd means by "weakly typed". Yes, lisp gives you the ability to inspect type at runtime, and that's very powerful, but it's not strongly typed. You may declare it to be better than strongly typed, but it's not strongly typed. You have similar problems with your statements casting [pun alert!] aspersions toward C. C is relatively strongly typed (with the exception of the short/long int business, the "see-through" typedefs and the "no formal paremeter" nature of cast operators)

    And, polymorphism: once again, lisp allows you to implement powerful polymorphic capabilities with its first-class user defined types, but it is not polymorphic in the sense that OOP people mean. You might argue "better", ok, but still, it's not polymorphic.

    1. Re:bzzt. by sv0f · · Score: 4

      if you want a string and somebody passes you a cons, you've got a cons, and that's a problem. that's what the "strongly typed" crowd means by "weakly typed".

      What the original poster is saying, I think, is that in Lisp OBJECTS are (strongly) typed, whereas in other languages VARIABLES are (strongly) typed. That this type information is not thrown away at compile time (as in STATICALLY-typed languages), but is available at run time, means that lisp is also DYNAMICALLY typed. This is particularly critical because new types (e.g., classes) can be created at run time in Lisp.

      C is relatively strongly typed (with the exception of the short/long int business, the "see-through" typedefs and the "no formal paremeter" nature of cast operators)

      I assume the original poster felt more strongly about the "exceptions" (as do I in the case of casts) than you do!

      And, polymorphism: once again, lisp allows you to implement powerful polymorphic capabilities with its first-class user defined types, but it is notpolymorphic in the sense that OOP people mean. You might argue "better", ok, but still, it's not polymorphic.

      Common Lisp has an object system, and it's in that context that it is polymorphic. For example, you can define:

      (defmethod foo ((x string)) ...)

      (defmethod foo ((x cons)) ...)


      and Common Lisp will select the correct method depending on the type of the argument it is passed. In other words, it's polymorphic. This is because foo is a "generic function" with several methods. Methods in Common Lisp are more expressive than those in C++ and Java, what with the elegant and extensive method combination protocol, the flexibility of lambda list keywords, the presence of multimethods (e.g., you can write (defmethod bar ((x string) (y cons)) ...)).

  247. Abuse! by dark_panda · · Score: 5

    I'm not sure how many people out there will remember, but many moons ago, back around post-Doom Year 1 or so, a non-id software company called crack-dot-com released a nifty side-scroller called Abuse. Not only did Abuse feature a cool mouse-keyboard combo for aiming/moving and some cool level designs, it also featured a complete set of game editing utilities and an honest-to-God LISP interpreter that let you completely reprogram the game. I can't think of too many games that feature their own LISP interpreter, unless you think emacs is fun and difficult enough to qualify as a game. J

    1. Re:Abuse! by the+Atomic+Rabbit · · Score: 2

      And don't forget dunnet, a text adventure game written entirely in elisp, and provided with GNU Emacs. By the way, how do you get Emacs to do symbolic math?

  248. article is a load of shit by omission9 · · Score: 1

    Clearly the author is a talented programmer. Not only that he is such an expert on Lisp that he wrote books on it. Co-incidentally he wrote some popular software in the languagfe he is an expert in. The lesson here is that your startup will succeed if you have someone working for you who is such an expert on a language he has written books on that language. You know, I bet Randal Schwartz writes excellent software in perl. Funny how that works, isn't it?

  249. Famous application: Ariba by daemonenwind · · Score: 1
    A fair portion of the scripting that makes the major B2B software Ariba (Version 6.1 and earlier) was made with Scheme. (a subset of lisp)

    They moved away from Scheme into Java for version 7.0 because most traditional companies (read: clients) couldn't get resources to maintain the stuff. So while the limited use of Lisp was an advantage to some startups, it was actually a disadvantage to Ariba. The article quoted in the story does talk about why that is, however.

  250. Re:What IS Lisp based off? by scotchie · · Score: 2
    I'll second these words of praise for LISP and its libraries. I remember a college assignment to do RSA encyrption. We weren't given many restrictions: it could be in any language, it had to encrypt/decrypt a short text string, it had to use 128 bit keys, and we could work in groups but didn't have to. We were given about 2 weeks or so.

    Most of the class decided to write it in C, but I chose Common LISP. I was the only person in the class to complete the assignment on time, even though I didn't work in a group. LISP helped me for two reasons:

    1. Most of the class spent the entire time writing C functions to handle large integers, but I was able to use the BIGInt library provided as part of the CL distribution.
    2. LISP is so closely tied with the underlying mathematics that I was able to code the algorithm in unbelievably fast time. Furthermore, I was able to spend my free time finding a better algorithm instead of debugging code, which led to my program being much faster than any of the others.

    Now if only I had had the opporunity to sell it to Yahoo for $50 Million! ... :-)

  251. What IS Lisp based off? by blitzrage · · Score: 3

    What is "Lisp" based off of? Is it a C++ style code or something else, and why have I not heard of it before? What are some other "famous" applications that are using Lisp?

    --

    I have no signature
    1. Re:What IS Lisp based off? by sv0f · · Score: 2

      It's a bit weird to put Lisp in the "functional" programming languages bin. It does have its roots in McCarthy's (its inventor) attempts to understand the lambda calculus, which is the formal foundation of functional programming languages. But functional programming languages as a separate category didn't really emerge until well after Lisp, with Backus's Turing Award lecture. This is why "purer" languages such as scheme, ml, and haskell are much better exemplars of functional programming languages.

      Lisp programmers view the language as multi-paradigmatic, but in an elegant way as opposed to the "bolted on afterwards" feel of C++. Lisp was one of the first programming languages to support OOP, for example. In fact, I believe it was the first OOP language to pass ANSI standardization. (Also, Alan Kay was a frequent visitor to MIT in the early 1970s and claims simula and lisp as twin influences on smalltalk.)

      Perhaps the dominant view of lisp programmers of lisp is that it supports metalinguistic programming -- the implementation of custom programming languages which are then used to elegantly solve problems. It's a compiler construction kit!

    2. Re:What IS Lisp based off? by sv0f · · Score: 2

      Lisp is good for writing programs that are unthinkable in other langauges -- exploring bleeding-edge ideas. When such programs prove feasible, they are often rewritten in conventional languages boasting plenty of cheap programmers. The Lisp origin is lost, for marketing reasons or whatever. For example, MACSYMA, the progenitor of all mathematical programming environments (mathematica, mathlab, etc.) was written in Lisp, as were the expert system shells of the 1970s and 1980s.

      Check out http://www.lisp.org/table/commercial-use.htm for a bevy of current applications and http://www.lisp.org/ for general information on lisp.

    3. Re:What IS Lisp based off? by sv0f · · Score: 2

      a previosu poster pretty much stole my thunder, but these points bear repeating:

      I'd like to point out how bad the I/O is in Lisp

      Not true. Lisp provides a myriad of I/O facilities, some of top-notch efficiency. It *is* true that the various options vary in efficiency. If you want to write a file of bytes, using FORMAT (think printf on ben-johnson-quality steroids) is overkill and inefficient. The knowledgable programmer instead uses WRITE-BYTE.

      how hard it is to properly handle the myriad possible errors a program has to handle gracefully when working with humans

      The Common Lisp condition system is at least as powerful as the C++ and Java equivalents. Maybe you're an old timer who's knowledge stops at CATCH and THROW?

      Also, most lisp engines I've seen are interpreted (save for things like the Lisp Machine).

      Not just untrue for decades now, but a persistent myth/slur. The Common Lisp implementation I use has NO interpreter. I can process files in batches or I can prototype interactively and incrementally, all using the compiler.

    4. Re:What IS Lisp based off? by killthiskid · · Score: 2

      Yes, you can still use Lisp in AutoCAD. Although, as of version "2000", it now has MS VBA built in too... take that for what it's worth.

    5. Re:What IS Lisp based off? by Courageous · · Score: 1


      Where'd you get this definition, BTW? Looks
      like a cool reference.

    6. Re:What IS Lisp based off? by jlanthripp · · Score: 1

      Yes, it's still there, at least for automating tasks and such (Word users - think "macro")

      Pretty darn useful too - the engineering company I work for uses lisp routines extensively for our customized visual tablet, and for tossing boring things like isometric riser diagrams, electrical specifications, and plumbing details into drawings.

      These things probably save the company at least $200,000 a year in drafting time alone.

      Not that I would be able to tell a lisp source file from an encrypted nude pic of Madeline Kahn if you opened em both in a text editor, but I hear these things from the people here who would...

      --
      "Alcohol, Tobacco, & Firearms" should be a convenience store, not a government agency.
    7. Re:What IS Lisp based off? by markmoss · · Score: 3

      I remember those LISP scripts in autocad. You could do amazing things with them, if you didn't mind that it was about as fast as a 3-legged turtle. But Autocad on a 286 was barely fast enough to be usable anyhow (redrawing the screen was time for a short coffee break). And Autocad was originally written for 8088's...

      In some ways, LISP was a natural language for CAD. A CAD (vector graphics) data file is a list of objects such as lines, circles, etc., so the program has to handle lists of objects of various types, and figure out what the type of each object is on the fly. Well, that's what LISP does. And in the early 80's when the first version was written, there weren't that many languages to choose from that did run-time binding. Of course, from performance considerations they had to write most of AutoCAD in C or assembly, including somehow faking the run-time binding, but my guess is the designers prototyped and thought in LISP, then hand-translated to lower-level languages.

      Neither list processing nor run-time binding is very special anymore. See Python, for example. And think I'd rather work in Python, although I haven't yet. It seems to me to be a little less error-prone in a couple of respects: grouping of statements is quite visible, while in LISP all grouping is controlled just by parentheses, and in Python you have the option whether or not to specify the types of objects, while in LISP you have no choice but to hope that it gets it right when it looks at the data at runtime.

      LISP's other special characteristic is that it has exceptionally good support for programs that write programs. Most of the time, writing a program that changes code is some sort of horrible mistake. But the web-site generating program described in the article needs to write code, so LISP was a natural match. And I can't think of any other language that would do that so well. (Partly because of those insane silly parentheses; this method of structuring the program is much friendlier to code than to coders...)

    8. Re:What IS Lisp based off? by hding · · Score: 5

      Have you actually used a Lisp environment in the past twenty years or so? Every major Common Lisp implementation has a compiler, and at least one doesn't even have an interpreter. What specifically about the condition system do you find inadequate compared to other languages? It definitely offers support at a level at least as high as something like C++ or Java.

      As far as doing real work in functional languages, perhaps you ought to ask the Erlang people about that. Or check out this link.

    9. Re:What IS Lisp based off? by freezingD · · Score: 2
      This definition was lifted (without permission I assume) from "The New Hackers Dictionary" by Eric Raymond and Guy Steele Jr. (Unless the poster is actually one of these men).

      --

      It seems the hero is misunderstood again - Marillion

    10. Re:What IS Lisp based off? by loconet · · Score: 1

      A good way to find some LISP sample code is by going to freshmeat and browsing their archives for programs written in LISP.

      --
      [alk]
    11. Re:What IS Lisp based off? by Brummund · · Score: 5
      How can this be moderated to 4, informative? Is all people on slashdot PHP and C freaks?

      Allegro CL, like implemented by Franz , is _extremely fast_. It is compiled, you can "live on top of the compiler", ie. interactively compile a function and disassemble it.

      You can either ignore types, or at the end of a project, optimize it with more specific types (ie define vars/members as floats etc). The hard part is third party libraries, but CL does have a hell of a lot of libraries SPECIFIED IN THE STANDARD. Yes, it has a standard. It also has OO, CLOS, which is a very flexible OO-implementation.

      And if you didn't know, check out this:

      the control software of the Deep Space 1 (DS1) spacecraft, which is written in Common Lisp, has been chosen together with another system as NASA's 1999 Software of the Year.

    12. Re:What IS Lisp based off? by e40 · · Score: 1
      ... Before anyone flames me to a crisp, I'd like to point out how bad the I/O is in Lisp, and how hard it is to properly handle the myriad possible errors a program has to handle gracefully when working with humans. Also, most lisp engines I've seen are interpreted (save for things like the Lisp Machine). Now this doesn't prevent you from doing very powerful very high level things with Lisp, but for the most part you can do them easier and faster with C, also it's nigh impossible to do very low level things with Lisp (At least from with what's available). Lisp is truely the language of the theoretical math major.

      This is a typical FUD (Fear Uncertainty Doubt... often used by Microsoft against Linux.... hmmmm, there's a parallel here) tactic to bash Lisp. How is it, after 20+ years of compilers that produce excellent code, idiots keep repeating the same crap?

    13. Re:What IS Lisp based off? by Mark+Tarver · · Score: 1

      Neither list processing nor run-time binding is very special anymore. See Python, for example. And think I'd rather work in Python, although I haven't yet. It seems to me to be a little less error-prone in a couple of respects: grouping of statements is quite visible, while in LISP all grouping is controlled just by parentheses, and in Python you have the option whether or not to specify the types of objects, while in LISP you have no choice but to hope that it gets it right when it looks at the data at runtime.

      You might like to check out Axel on www.spherum.com. It runs under Lisp, includes pattern-directed list handling, static type checking on demand and uses an approach to types more advanced than just about any on offer.

  252. Re:PDF? Quit your whining... by shokk · · Score: 1

    PDFs are immediately searchable for all platforms. You did download the searching version of Acroread, didn't you?

    To search the current link tree for the same thing will take you longer while you either wait for a spider to index it for you or while you download the content page(s) to run a script on it. I'm interested in finding the information, not making a job out of it.

    --
    "Beware of he who would deny you access to information, for in his heart, he dreams himself your master."
  253. Gnome uses lisp heavily -- over 10,000 lines by leighklotz · · Score: 2

    The Gnome default window manager, sawfish, uses Lisp as its extension language, via the librep package.

    On my RedHat system, the lisp code is in /usr/share/sawfish/0.36/lisp.

    There's over 8000 lines of Lisp in the default implementation, plus another 2500 or so in the themes. People customize it heavily as well.

    A visually impaired colleage, for example, can now use X Windows because he customizes it with Lisp to have audio cues.

  254. Re:Lisp teaches bad programming. by sv0f · · Score: 1

    First of all, a Lisper MIGHT write this as:

    (defun factorial (x)
    (if (= x 0)
    1
    (* x (factorial (- x 1)))))


    (Sorry about the indenting!)

    Some things to note:

    (1) In Lisp, integers automatically overflow into big integers, so you can type (factorial 1000) with confidence; try that with your C version.
    (2) Note that my function does the right thing on (factorial 1) and (factorial 0).
    (3) Because Lisp is expression-oriented, there's no need for the explicit return statements (in this case) that clutter your definition.
    (4) Of course, factorial can be written iteratively in Lisp using one of its many iteration constructs (dotimes, do, loop). The latter two put for(;;) style loops to utter shame, by the way.
    (5) The Lisp functions are much more general than this example shows. For example, the = function can compare a variable number of items a once, e.g., (= arg1 arg2 arg3 20). The * function also takes multiple arguments (e.g., (* 1 2 3 4) -> 24) and includes the correct identity: (*) -> 1.

  255. Re:Lisp teaches bad programming. by sv0f · · Score: 2

    Well, not my Lisp snippet, since it isn't tail recursive. However, the following could be rewritten by a sufficiently smart compiler:

    (defun factorial (x)
    (factorial-helper x 1))

    (defun factorial-helper (x result)
    (if (= x 0)
    result
    (factorial-helper (- x 1) (* x result))))


    (Again, excuse the indentation.)

    Tail recursion is when the last expression of a function is a recursive call to the function. The recursive call cannot be a mere subexpression, as it was in my original code snippet:

    (defun factorial (x)
    (if (= x 0)
    1
    (* x (factorial (- x 1)))))

  256. Re:Lisp teaches bad programming. by sv0f · · Score: 2

    but i;m nearly certain that Lucid Common LISP would do the transform with a high enough optimization level.

    You may be right; Lucid had the original "sufficiently smart compiler". And to paraphrase Arthur C. Clarke, "any sufficiently smart compiler can magically transform common recursions into tail calls." :)

  257. Lisp for AI by MacGabhain · · Score: 3

    Anyhow, having said all that, could someone who knows Lisp better than me explain what it is about Lisp that makes it so good for AI? I've always heard that but being pretty far removed from that field I've never seen any cool Lisp AI code.

    I'm not (unfortunately) a LISP god, but I think I know enough of the theory to answer. It's mentioned in the article, actually, where it describes LISP as a language where code and data are of the same form - that is, code returns data which is, syntactically, no different than code. What this means from an AI perspective is that LISP is designed to be able (given a good enough head start) to write itself. If one understands AI as learning systems rather than just logic-processing systems, this ability, in some form or another, is key.

    1. Re:Lisp for AI by evocate · · Score: 2
      Here is a reference that might help.

      http://research.microsoft.com/ip/May99/Disrupt.htm

      This is a paper written by Charles Simonyi at Microsoft Research. Salient quote: "The best representation for a complex structure is a program. So the complex program that we need should be expressed as a program that generates it." Lisp is good at tackling AI problems because the distinction between code and data is very weak. Learning and reasoning algorithms can be quite complex. A complex program can be represented as a simpler program that bootstraps itself to a higher level of complexity. It writes a more complex program by manipulating itself as a data structure, and then leaps the code/data boundry by executing its new, more complex self.

  258. Know your tools by dropdead · · Score: 2

    The article does point out one thing that seems to get lost in the computer world. Better to use a tool that does what you need than to use a tool that does what you want. Most want easy to use, but how often have we learned good enough isn't.

    --


    By definition, a government has no conscience. Sometimes it has a policy, but nothing more. - Albert Camus
  259. free video course in lisp (MIT Scheme) by abe+ferlman · · Score: 4
    There is a complete course on programming taught using the scheme language available from Ars Digita University, including, video (downloadable or streamable), problem sets, solutions, etc. It is closely based on the MIT course "6001 Structure and Interpretation of Computer Programs."

    The text for the course is available here.

    This was pretty much all I did last October.
    Enjoy.
    Bryguy

    --
    microsoftword.mp3 - it doesn't care that they're not words...
  260. open source Common Lisps? by smell_the_glove · · Score: 2
    I freely admit to being a lisp fan, and wish I could do a large portion of my own programming in lisp. However, the sad fact is that the best common lisp implementations are proprietary (e.g. Allegro Common Lisp) and expensive. The two free implementations I've used (clisp and cmucl) both have serious problems. Clisp is quite slow (slower than python even with compiling), and the latest version couldn't pass its own test suite on my machine. Plus, there are a few warts in the compile (minor hacking required). CMUCL is much faster, but chews up a lot of memory and cannot be compiled from C source AFAICT. Also, neither implementation appears to have much of a user base, and CMUCL seems stagnant; I haven't seen a new version in a while.

    This is a shame, because I think a top-notch open source common lisp implementation (of the same quality as ACL) would be a great thing. It would allow curious hackers to experiment with the language and get over lisp's rather long learning curve, which would increase the pool of lisp hackers, which might even make the language a practical choice for internet startups. As others have mentioned, what Graham conveniently forgets to mention in his article is the difficulty of finding (or training) qualified CL programmers; for a startup company, this is a show-stopper.

    1. Re:open source Common Lisps? by smell_the_glove · · Score: 2
      OK, I was wrong. After doing some more digging, I found out several interesting facts:

      1. Clisp code, when compiled, is substantially faster than python.

      2. CMUCL (http://www.cons.org/cmucl) had its last release on Dec. 25th, 2000.

      Also, as a test of Graham's arguments about lisp, I took a simple numerical speed test I use to compare languages and tried it on both CMUCL and the trial version of Allegro Common Lisp. Both versions achieved speeds within a factor of 2 of hand-optimized C code; the CMUCL code was actually *faster*; it was about 3/4 the speed of C. So the arguments about lisp being slow don't seem to have much merit.

  261. Re:Lost In Stupid Parenthesis by _ph1ux_ · · Score: 1

    thats what i was going to state.

    lisp has been in autocad for as long as I can remember - and provides a very powerful way of scripting things that are done on an everyday basis.

    almost every arch/eng firm you find that uses autocad will have its own custom set of commands for everything that autocad does (all in lisp)

    works extremely well for that sort of thing.

    i actually wish that every program had the ability to write out command macros and functionality programs in lisp to help acomplish many things.

  262. Re:Uses of Lisp by HyperbolicParabaloid · · Score: 1

    This is a follow up question, not an answer ;-)
    I just found (at www.gnu.org/manual/emacs-lisp-intro) an introduction to Emacs Lisp, which the document describes as simpler than Common Lisp. Can anybody explain what that means (not literally what it means...).
    Is this still a worthwhile introduction to Lisp (and a particularly convenient one if you have Emacs handy)?


    -------------------------

    --


    -------------------------
    A person of moderate zeal
  263. Should Read: "Using Lisp, Perl and C" by quam · · Score: 2

    The footnote of page one reads:
    "1.Viaweb at first had two parts: the editor,written in Lisp,which people used to build their sites,and the ordering system,written in C, which handled orders. The first version was mostly Lisp, because the ordering system was small.Later we added two more modules,an image generator written in C, and a back-office manager written mostly in Perl."

    It is very rare to rely on only one language for any application on the Web. I think this article, other than the provided footnote, mistakenly leads a reader to believe that the entire application (Viaweb) was written in Lisp.
    (write-line "Hello, world.")

  264. what about sawfish by discovercomics · · Score: 1

    If the faq page is correct sawfish uses lisp.

  265. HP48 SX/GX by ByteHog · · Score: 1

    I still program lisp on my HP48 calculator. That thing was (and still is) very cool. Only 128k of memory though, but thats a whole heck of a lot for a little calculator.

    --
    - This isn't the sig you're looking for. Move along, move along..
  266. Lisp is Great by Jon+Howard · · Score: 1

    ...I only got into Lisp a few weeks ago, but already the flexibility of the language is paying-off. I find the development of my code is much more rapid and "hands-on" - I'm able to spot logical errors and specific code flaws as I write them, rather than days or weeks down the line. Well - I won't rant, but I've found that the best IDE for my purposes is Franz's Allegro CL Franz also has an interactive Lisp course linked from their site.

  267. Shooting yourself in foot by ChillinToad · · Score: 2

    LISP: You shoot yourself in the appendage which holds the gun with which you shoot yourself in the appendage which holds the gun with which you shoot yourself in the appendage which holds the gun with which you shoot yourself in the appendage which holds the gun with which you shoot yourself in the appendage which holds... -taken from the Internet...

  268. You think LISP is weird? by markmoss · · Score: 2

    Try Forth.

  269. Re:Lisp for OSX? by hding · · Score: 1

    MCL is the most popular Mac environment, it seems.

  270. Re:Uses of Lisp by hding · · Score: 1
    I didn't say you COULDN'T use it for anything else. There are just better language choices today....

    Well, let us just say that we disagree on this.

  271. Re:Uses of Lisp by hding · · Score: 2

    Which book do you have? It may or may not be a good place to start. (Graham's own ANSI Common Lisp is a good starter.)

    There are plenty of good implementations. XAnalys Lispworks, Corman, and Franz have free trial versions of their environments which are suitable for learning. Also CLisp is a free (GPL) Common Lisp for Windows. All of the preceding except for Corman are also available for various Unices (although there may well only be free trial versions for Linux), and CMUCL is also available there. You'd be hard pressed to go too far wrong with any of those (I use Lispworks for most of my work and like it).

  272. Uses of Lisp by hding · · Score: 3
    LISP isn't really good for much, outside of artificial intelligence or other heuristical analysis-type applications.

    Really? Discounting the fact that the article linked to in the story demonstrates a quite non-AI use for Lisp, there are others as well. I, for example, use it for business programming.

  273. ML by rebean · · Score: 1

    ML is your daddy! Seriously though, someone told me about some CMU researchers who wrote a pretty fast web server in ML, sweet ... I must say that since I learned ML I have thought of everything at work (Java) in terms of how much easier I could do it in ML.

  274. Re:First? by sleeper0 · · Score: 1
    Yeah, the claim of the first web based application in the summer of '95 is obviously hysterical. How convenient it is to have such a selective memory when we are recounting our past accomplishments.

    Some of my notable past accomplishments:

    • Wrote the first video game in a late night hacking session in 1989
    • Developed a completely anonymous digital cash system... first in the world!... in 1997.
    • And finally, I was the first person to figure out how much smarter i was than the rest of the world and write a paper about it... in 1999!
    Apparently we are supposed to trust this guy that LISP is such a great business language... because (gasp!) he was able to sell out in the great business school rush to the Internet of the late 90's. Well, congratulations Paul, but if we all wrote applications in whatever Yahoo was buying, lets see, we'd be writing in C, C++, Perl, Python, PHP, Java, shell, LISP.... Oh
  275. Lisp is nice, but not that different anymore by janpod66 · · Score: 2
    Lisp is a nice, powerful programming language. But while 20 years ago, Lisp and Smalltalk were "it" when it came to high-powered dynamic languages, today, you have an embarrassment of riches.

    I think that for practical purposes, something like Python is very close to CommonLisp. The major differences are lack of macros in Python (not necessarily a bad thing), a less complex object system (probably a good thing, too), and lack of compilation to native code for Python source code (but you don't get that much of a speedup). And Python actually has a better standard library, better built-in datatypes, better OS integration, and cleaner semantics. Jython with Java for compute intensive stuff actually does better than most CommonLisp compilers.

    Yes, it is silly and wasteful that languages like Python, Perl, Tcl, etc. essentially reinvented Lisp and Smalltalk (Java made some sort of unholy but very functional compromise between Lisp and C++). But they did, and you might as well use them. None of those more recent languages have made the transition to a natively compiled environments like Lisp did, but on fast modern hardware, that matters less and less, and sooner or later they probably will.

    1. Re:Lisp is nice, but not that different anymore by janpod66 · · Score: 2

      Ummm, no, not really "FALSE". Yes, there are several Python "compilers" (I have used them), and they even run under Linux. However they don't do much for performance. For practical purposes, as far as I'm concerned, Python does not have native code compilers in the sense that CMU CommonLisp or Java do.

  276. Son-of-Lisp by oodl · · Score: 1

    Dylan fixes near all the complaints that I have seen posted here about Lisp:

    Dylan is fully objected-oriented from the ground up.
    Dylan has highly-readable infix syntax.
    Dylan has a module system.
    Dylan has a sophisticated exception handling system.

    The complaint that Dylan does not fix is the small user base. Unfortunately Dylan has a much smaller user base than even Lisp. But lack of other users should not stop a true geek.

    1. Re:Son-of-Lisp by oodl · · Score: 1

      > However, Dylan's infix syntax (highly readable > is a matter of opinion) tosses out the ability > to write macros the way one can in Lisp Dylan has a hygenic macro system. It's quite capable, though maybe a little burdened by the infix syntax of Dylan. (By the way, Dylan started out as a prefix syntax language, and later for a while, had both infix and prefix versions of essentially the same language). I would agree that Lisp is slightly more powerful than Dylan. But Dylan has 9/10 the power of Lisp and is very cleanly designed and has many cool ideas. It's a great language for begineers, but at the same time, Lisp lovers coud live with it too. Don't forget that Dylan was designed by people who were experts in Lisp.

  277. Errors by undecidable · · Score: 1

    This article is riddled with logical flaws. Here are just a few:

    If a painter were offered a brush that would make him a better painter, it seems to me that he would want to use it in all his paintings, wouldn't he?

    There is a big difference between using something because it helps you train for the real thing, and using something for the real thing. Using this same logic, football players should suddenly drop and start doing push ups on the field after the ball is snapped.

    Software is a very competitive business, prone to natural monopolies.

    This short sentence manages to contradict itself.

    When you choose technology, you have ignore what other people are doing, and consider only what will work the best.

    But in the process of considering what will work best, you need to consider what other people are doing. Businesses do not operate in a vacuum.

    --
    "The only rights you have are the rights you are willing to fight for."
    1. Re:Errors by undecidable · · Score: 1

      It is obvious from your numerous posts on this thread that you are extremely anti-lisp.

      I think I got a little carried away with the volume of my posts. Point taken. I'm not extremely anti-lisp; I just don't think it's the overall best language.

      You managed to make come up with a few logical flaws yourself. The first is the assumption that lisp is a learning tool only.

      Two points:

      1. I'm not sure that would be a logical flaw. It would simply be a false statement.
      2. I never say what you claim: that Lisp is a learning tool only. I agree that it's a real language that can do real work. The issue at hand is if it is the best language to do real work, and also if that can be logically supported by the author's claim (see below).

      Second is that football players train for football by doing pushups. Not sure but I think they use pushups (maybe) for strength/stamina; to play football better they practice PLAYING FOOTBALL.

      What you are saying doesn't make sense. Are you saying that football players do not train for playing football by doing push ups? That the act of doing push ups is somehow external to increasing their ability to suceed at football?

      I used this example because I thought its meaning would be so clear. Athletes train for their activity by doing many things: strength training, endurance training, streching, etc. Actually doing the activity that they train for is just one part of their training.

      My argument with the author's point is that it really just doesn't make any sense: he states that because X is an excellent training tool, then X must be an excellent tool to use for the real thing. But this is clearly a false statement. If you still don't see why, let me know and I'll try a different analogy.


      While I think lisp is a fabulous language I will agree that there are several reasons not to use lisp:
      1. nearly impossible to find lisp talent .
      2. commercial lisp products are extremely expensive.
      3. few available libraries
      None of these change the fact that lisp is extremely powerful, and *can* be used for real work, *and* may in some cases be the best tool for the job.

      I think we agree for the most part. No language is the best choice for everything. Most languages have domains in which they are superior.

      Though we may disagree on which domains Lisp is superior. Even if the problems with Lisp that are associated with its general lack of popularitly were solved, I'm not convinced that Lisp would be superior over C++ and Java for writing large complex systems. My fundamental problem with Lisp is readability. Can you honestly say that you enjoy reading Lisp code over Java?

      Perhaps there are many people out there that really do. But all I can say is that I don't, and every developer that I've worked with on large Lisp projects feels the same way.

      So, perhaps you feel differently. Have you worked on a very large Lisp project? I would sinceerely like to find just one person that has writen a very large Lisp project and likes it. Everyone that I've met that supports Lisp has yet to do so and have at most writen medium sized projects which at most amount to a few tens of thousands of lines. The zealousness in my posting is a reaction to the fact that I'm tired of hearing from these people how great Lisp is when they have yet to do anything serious with it.


      --
      "The only rights you have are the rights you are willing to fight for."
  278. Ripe for a rewrite by undecidable · · Score: 1

    The biggest mistake I believe this author makes is the fact that he makes it sound like Lisp is universally the best language to use except for a few edge cases. Lisp may very well be a good short-term choice for this narrow problem domain, but to assume that the rest of the world is so dumb that they would overlook the massive competitive advantage alleged by the author is ridiculous.

    Lisp is definitely good at rapid prototyping. I have been involved with two major projects which were initially written in Lisp. But after a while, as they grew in size, both projects became unmanageable. This was not because the developers involved were not skilled. Ultimately, each project needed to call a time out, and each was rewritten in C++ to regain control.

    The same will happen for the project that is discussed in this article. The author is just lucky that it didn't happen at a bad time.

    --
    "The only rights you have are the rights you are willing to fight for."
    1. Re:Ripe for a rewrite by undecidable · · Score: 1


      I got news for you pal, the rest of the world *IS* that dumb.

      I made it clear that the these failures were not due to the developers involved.

      The developers involved on these projects were some of the best developers I've ever worked with. Both projects were at Bell Labs, where being highly intelligent, having a high level of software engineering skill, and a deep appreciation for languages, is the norm for the department I was in.


      Additionally, you never come out and say it, but it sounds like you are saying that Lisp is more complex than C++, and thus, this is the reason that it goes unused. Are you sure you want to make this claim? Please tell me why you feel this way.

      --
      "The only rights you have are the rights you are willing to fight for."
  279. Re:Lisp vs Java by undecidable · · Score: 1


    Apparently not as skilled as you were led to believe

    No, the problem was not him.

    But this was just one test. To really get a good understanding, many more competitions like this should be conducted: with different people and different projects.

    So, we've done our job. Go and try it for yourself and add to the knowledge. If you do, please email me the results.

    --
    "The only rights you have are the rights you are willing to fight for."
  280. Re:if you have problems with Lisp's syntax... by undecidable · · Score: 1

    Oh, come on. Lisp has practically *no* syntax.

    I agree! I don't think I've made my objection to Lisp's syntax clear. It's basically all parens. When I was regularly using Lisp, auto-indentation was fine, but there was no color. Perhaps that would help me. But the simple fact that it's all parens I find leads to poor readability.

    What it has is so logical and uniform that it gives huge power to macros, and allows editors to sensibly indent programs to reveal their semantic structure.

    "Uniform" is both good and bad. A language should be sufficently uniform so that it is easy to understand and predict, but not so uniform that after a few hours of coding the whole screen looks the same.


    Common Lisp lets you totally redefine the language's syntax anyway, if you don't like it. Want to write your math expressions using infix notation? Download the infix package, that lets you write #I'sin(x)+y^2' if you don't like (+ (sin x) (expt y 2))

    I actually don't like this. The language should dictate the syntax. One of the reasons that I prefer Java over C++ is that C++ let's programmers rewrite the language a little too much. Java's developers were smart enough to create a language that allows you to extend the language, but not rewrite it forcing the next guy that needs to read your code to learn your language.

    The very logic that you supposedly find appealing in Lisp drives inevitably toward the syntax that Lisp uses: code and list data have the same representation, so that the same operators that you use manipulate lists also lets you manipulate programs!!! That is the essence of macros.

    The code == data aspect of Lisp is very cool. I've been sold on that since I first learned about it. But I just wish that it didn't have to imply the syntax that it has. I want it all.

    C++ is an example of a language that misses that great chance. How do you manipulate programs in C++? You either use the C-style preprocessor, which is so limited that it is deprecated in favor of things like inline functions, or you use templates, which introduce a whole new meta-language and a corresponding layer of complexity, and is living is such an over-syntaxified environment that you must remember to leave that extra space in << or the parser will barf on you.

    The C preprocessor is horrible. It leads to some of the worst readability known to man. Too many programmers have #defined too many things to make their program not even look like C or C++. That's why it's another feature left out of Java.

    I'm not a big fan of templates either. Again, another feature left out of Java. For smaller projects that need efficiency, they are fine. But for larger projects they can really clog up the works. If you have, say, 1000 or so classes which represent basic objects in your system, and of you need a smart Ptr for each, and you need, say 20 container classes, suddenly you have 40,000 classes. Compile times go through the roof, not to mention binary sizes and the number and size of your symbols, making debugging a royal pain. But this is a fundamental problem with templates for any language.

    Templates do have akward syntax, but only because of typing. This is what they are for. I don't recall Lisp having this same problem with macros since everything was basically left typeless.


    Arguments about syntax are going to favor Lisp over C++. Consider trigraphs, for God's sake.

    That's not fair. Just because C and C++ offer a way of specifying characters on lame keyboards doesn't mean that the language's syntax is poor.



    I find it hard to believe that anyone would prefer the syntax of C++ templates, for instance, over CLOS.

    Are you refering to the OO qualities of CLOS? I prefer C++ classes over CLOS. Do you mean to compare templates with macros?

    --
    "The only rights you have are the rights you are willing to fight for."
  281. Lisp vs Java by undecidable · · Score: 2


    But there is a contradiction in the conventional wisdom:Lisp will make you a better programmer,and yet you won't use it.

    This is faulty logic. It is not a contradiction. There are lots of things that you can learn to become a better programmer. I too believe that Lisp is one of them. But this does not imply that Lisp is a good programming language. It implies that it makes a good learning tool. That's it.


    Lisp is a neat language, but it's software engineering qualities are way behind the times. A friend and I actually did an interesting project comparing Lisp to Java. He was well skilled in Lisp, and I Java. We defined a project, and then I implemented it in Java, and my friend implemeneted it in Lisp. We then compared the results: the Java version took less time to develop, took less time to debug, contained slightly less lines of code, was more easily modified (we added an additional objective), and was more efficient. Keep in mind that my friend is a Lisp advocate, and a skilled developer.

    --
    "The only rights you have are the rights you are willing to fight for."
  282. Diction by simpgeek · · Score: 1

    Please, please, please stop it, everbody. Lisp is not infamous. The only things seen on slashdot threads that could be considered infamous are Microsoft, the FCC and Cowboy Neal. infamous adj. 1. Having an exceedingly bad reputation; notorious.

  283. what I learned in school by redcup · · Score: 2

    Lisp(taught(me(to(count(parenthesis))))))))))))))

    RC

    --

    RC
  284. Job Listings by SID*C64 · · Score: 1

    I like the comments about scanning your competitors job listings hehe... very clever. Don't get frightened by the Oracle guys bwahahah

  285. how about GNU guile now? by gerryxiao · · Score: 1

    is guile dying? look at http://www.gnu.ai.mit.edu/software/guile/docs/docs .html last updated at 23 Sep 2000

  286. Emacs Abuse! by mrericn · · Score: 1

    You know, I remember when that came out, but I swear I remember it being an emacs variant. I really had no idea that emacs wasn't abuse...

  287. that OTHER language by zoombah · · Score: 1

    i don't know about you guys, but I really like English. Its cross-platform compatible (especially in America), and I've had a lot of experience with it (I've known it since I was like 2). Some people get hung up on the syntax but man it totally kicks lisps ass :)

  288. try this in your favorite programming language by e40 · · Score: 3

    OK, kids. Here's a script I run on my website each night to produce a page which references files which have changed in the last day.

    How would you write this in your favorite programming language? Don't forget to have the program parse the page and insert the new stuff at the beginning, because the version below does. Yes, you could hack this with a pattern matcher. Gross.

  289. more details by bugbear · · Score: 1

    A couple people have mentioned that I didn't explain in sufficient detail what we did with Lisp. Sorry about that; I had been planning (and still plan) to write a second, more technical, article. In the meantime, there are more technical details in these excerpts from a talk I gave recently at BBN. -- pg

  290. What a macro is by macromancy · · Score: 1
    Macros are lisp functions that take code in and spit code out. It's easy to understand this concept, but it's not always easy to see the myriad benefits such a feature has. I know people will argue that you can do this in other languages, but those people are dead wrong - my intent here is to explain what a macro is, rather than to present a substantial macro that nobody but Scheme or lisp programmers would understand.

    Macros are used to create new special operators in Lisp that behave just like built in ones like if, loop, let, etc. -- it's a given that without learning macros you can't understand the truly groovy examples, but here's a simple one: Say I only have if/then/else, and I want to make a simpler form called "when" that only ever has a then clause.

    "if" is written thusly:
    (if test then-clause else-clause)
    ... a.k.a. predicate, consequent, alternative

    I want "when"to look like this:
    (when test then-clauses ...)

    please excuse the lack of proper lisp indentation.

    I can define a macro that is run whenever a function is compiled which uses "when," right along with any other macros I want, in this manner:

    (defmacro when (test &body body)
    `(if ,test (progn ,@body) nil))

    This allows me to use the "when" macro around any conditional code I like, wherever I like, and it will be treated as if I had the if statement right there in the code -- it's not like a function call because the "arguments" passed to a macro are CODE, not VALUES (well, except in lisp they're the same thing, but that's another posting).

    For the "can't write games in it" crowd...
    Say I want macros to push and pop transformation matrices in a 3d game. It's basically not reasonable to do this in C++ any other way than by hand because if you pass functions into a function which does the pushing and popping they lose their lexical environment and end up having to be more complicated than just doing it by hand. Not so with macros.