Slashdot Mirror


LispM Source Released Under 'BSD Like' License

mschaef writes "Announced on Bill Clementson's Blog, Brad Parker has stated that he has 'permission from MIT to release all the LISPM source code with a "BSD like" source license.'" Zach Beane has also set up a torrent for easy download.

75 of 336 comments (clear)

  1. BSD like license? by Anonymous Coward · · Score: 5, Funny

    Is that anything like a death certificate?

    1. Re:BSD like license? by ninejaguar · · Score: 2, Funny
      My wife wondered at my guffaw when that quip caught me by surprise. I then made the sad mistake of trying to explain why a particular joke about software licensing was so funny...I was soon given a sympathetic smile and shown the hand as she quickly walked away saying it was more than she needed to know...sigh. I think my cat's a nerd and would've enjoyed it, but I don't speak cat.

      = 9J =

  2. Lisp? by cdn2k1 · · Score: 5, Funny

    Does that mean we have to pronounce it as

    Bee - Ethh - Dee?

  3. As Einstein once said... by Anonymous Coward · · Score: 2, Interesting

    "Imagination is more important than knowledge..."

  4. Let's be orderly now by Minwee · · Score: 4, Funny
    Okay, you know the drill. A new story has been released and you're all aching to comment on it without reading the article, so let's get going.

    All "What is LISPM?" comments over on the right.

    "This proves BSD is dying" comments on the left.

    Wordplay that desperately wants to be clever, like "I guess that makes it a 'Bee Eth Dee Licenth'" comments go there by the door.

    If you have read the article, know the history of Brad Parker, LISPM and their involvement in the Church of the Flying Spaghetti Monster, and have something intelligent to say, then we don't want your kind around here. Slashdot has standards to maintain, you know.

  5. Re:This is News? by Gordonjcp · · Score: 5, Funny

    The permissioned release of 25 year old code is /. news now? This code is worthless IMO

    Just like your opinion. Now get back to work, those burgers won't flip themselves!

  6. Argh! by Brent+Spiner · · Score: 5, Funny

    I don't know, does anyone still program in LISP (I'm sure some people do (personally I could never get used to its syntax (although I never really tried that hard (I did use it with Autocad (one of the really old DOS versions) for a while))))?

    --
    Reality test... am I dreaming?
    1. Re:Argh! by Just+Some+Guy · · Score: 3, Informative
      I don't know, does anyone still program in LISP

      Naughty Dog used a variant to write "Jak and Daxter", an extremely popular game for Playstation 2. Many more people use spiritual descendents like Python.

      --
      Dewey, what part of this looks like authorities should be involved?
    2. Re:Argh! by DeafByBeheading · · Score: 5, Informative

      Does this count? Or this? Lisp is a very powerful language. Paren matching is rendered trivial with any decent editor. The syntax is actually quite nice and clean once you get used to it. I wouldn't use it for everything, and it does have some core ugliness (hey, so does C++), but it has an undeservedly bad reputation.

      --
      Telltale Games: Bone, Sam and Max
    3. Re:Argh! by Bastian · · Score: 3, Insightful

      Methinks a lot of folks would argue that Python isn't a spiritual descendant so much as a wannabe. My understanding (I haven't programmed in Python much) is that it lacks a lot of the features that make lisp So. Damn. Cool., such as macros, and its closures are broken in the eyes of a lot of lispers. To me, the real kicker is that there is still a strong division between data and code in Python.

    4. Re:Argh! by Just+Some+Guy · · Score: 2, Informative
      My understanding (I haven't programmed in Python much) is that it lacks a lot of the features that make lisp So. Damn. Cool.

      However, it does have a lot of the features that many of us liked about Lisp, but in an easier-to-use package (in the opinion of some). Example: trivially ease introspection and metaprogramming. Functions as first-class objects. Native, fast list operations. Elegance.

      Maybe "spiritual descendents" was too strong; "strongly influenced by it" might have been better.

      --
      Dewey, what part of this looks like authorities should be involved?
    5. Re:Argh! by sickofthisshit · · Score: 4, Informative

      However, [Python] does have a lot of the features that many of us liked about Lisp,

      The comparison is a bit complicated.

      From the starting point of, say, C++, Python has a lot of the same kind of appeal that Common Lisp does, and for many of the same reasons. In philosophy, however, the Pythonistas and the Lispniks seem to have much to disagree about.

      For instance, it seems (from the noises I hear over in Lisp forums), that Guido actively works to eliminate Lisp-isms in favor of his own "clearer" syntax. Whereas the Common Lisp folks tend to keep stuff around *forever*, and if someone invents a clearer replacement, they migrate to it, but nobody cares much that the old stuff is left behind. However, Schemers like the "one elegant way instead of three different ways". Whether you consider Scheme to be a Lisp or not is a great way to start a flame war.

      Where this matters most is in Lisp macros. (For the nth time, these have nothing to do with C preprocessor macros, rather, they let you implement language extensions using the full power of the language, and with seamless integration to the original language and other extensions). Lispniks would never give those up. Pythonistas seem to not understand what the big deal about macros is. Schemers don't like macros because it is possible to write buggy macros, and want their own elegant, bulletproof mechanisms to define language extensions. This is yet another great way to start flame wars.

    6. Re:Argh! by lgw · · Score: 2, Insightful

      Between Algol, Lisp, and Smalltalk, all the modern core language ideas were present. The last 30+ years of programming language design have added efficiency and better syntax, but I can't think of any new core ideas in that time. Perhaps the idea of running on an emulator on *every* platform counts.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    7. Re:Argh! by pnatural · · Score: 3, Informative

      Pythonistas seem to not understand what the big deal about macros is.

      Actually, the python community in general and Guido in particular understand very well what the big deal is. They've looked at macros and said, "yeah, that would be nice, but we don't want to allow the language to be rewritten on a user-by-user basis."

      In other words, "readability counts", and that goes out the door with macros. Maybe not for disciplined programmers, but we all know the world is full of the other kind.

    8. Re:Argh! by sickofthisshit · · Score: 3, Insightful

      Well, I can't argue with your phrasing.

      Yet, the Common Lisper's perspective is that the power to reshape the language to suit the problem (not to suit the individual user per se) is such a useful and time-saving innovation that no one should deprive the programmers of it. After all, people can write unreadable code in Fortran or C, but we don't take those languages away.

      Crippling everybody because bad programmers would write bad code seems like winning the wrong battle. Which pretty much shows what side of the fence I live on.

      To polarize it, "readability" doesn't count for much if we have to stick at the level of Dick-and-Jane. Faulkner and Joyce might be "unreadable" compared to Basic English, but you can't translate it back.

    9. Re:Argh! by be-fan · · Score: 2, Insightful

      Yeah right. Dylan tried that, look where it got them. People just use parentheses as an excuse to not try a language they're too chicken to try anyway.

      --
      A deep unwavering belief is a sure sign you're missing something...
    10. Re:Argh! by Peaker · · Score: 2, Insightful

      Python is strongly typed, Perl isn't
      Python is polymorphic, Perl isn't
      Python has a few concise operators that implement hundreds of possible operations via polymorphism, Perl has hundreds of operators to implement hundreds of possible operations
      Python allows named arguments and reflection on those, Perl doesn't
      Python has proper exception handling, Perl doesn't
      Python has real classes and instances, Perl doesn't
      Python has real data structures with no arbitrary restrictions on what they can contain, Perl differentiates "scalars" from other objects, requiring reference hacks to build real data structures, and may actually cause dangling references(!)

      I'd say the languages are pretty different.

    11. Re:Argh! by be-fan · · Score: 4, Insightful

      The whole point of macro is readability! Reading Lisp code with a well-chosen set of macros is like reading code written in a language precisely-designed for the problem you're trying to solve. It keeps the boiler-plate and the implementation details from interfering with the expression of the core algorithms.

      --
      A deep unwavering belief is a sure sign you're missing something...
    12. Re:Argh! by RevAaron · · Score: 2, Funny

      Out of that 3%, how much is emacs?

      I'm surprised no one has brought up emacs as an example of a lisp app...

      --

      Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
    13. Re:Argh! by bani · · Score: 2, Insightful

      I took enough lisp in CS to determine it's a language for people like you who see the world in black and white, where all the world is a nail and lisp is the hammer.

      Your appeal "you're unqualified to criticize lisp until you really 'know' it" is like how christians assert you can't criticize christianity until you really "know" jesus.

    14. Re:Argh! by bani · · Score: 2, Informative

      actually, yahoo rewrote their merchant system in C++ and Perl, and of Jan 2003 yahoo is no longer using lisp.

      so no, yahoo doesn't count anymore.

      orbitz uses lisp indirectly. they didn't write the software, they licensed it from ITA. to claim orbitz "uses" lisp is kinda like claiming someone "uses" C because the linux kernel is written in it.

  7. Great News! by RAMMS+EIN · · Score: 3, Interesting

    Let me be the first to say...Great News!!

    This has long been the dream of those yearning for the revival of Lisp machines and their allegedly superior programming environment.

    --
    Please correct me if I got my facts wrong.
    1. Re:Great News! by sickofthisshit · · Score: 2, Insightful

      Except a lot of the really powerful stuff (Genera), was developed commercially at Symbolics, which is still very much a commercially licensed product (although it comes with almost all source code.)

      Think "ultimate programmer workstation" where you can get the source to *any* function in an API by hitting Meta-., and replace it with your own code, if you wish. And point to *any* object on the screen, and hit a mouse button, and the data object inspector lets you see and manipulate it.

      At least from what I understand, this stage of development was a hundred man-years or more of improvement over the MIT Lispm stuff. But hey, maybe this is a start.

    2. Re:Great News! by Abcd1234 · · Score: 4, Interesting

      Sounds like Squeak to me.

    3. Re:Great News! by sickofthisshit · · Score: 2, Informative

      Yes, Lisp had OO added after Lisp was already a mature language. (Although it is included explicitly in the ANSI Common Lisp standard, so it's as much part of the language as CONS is.) So what? Common Lisp also added lexical scope to Lisp, but you can hardly tell Lisp wasn't this way from the creation.

      *Except* for built-in Lisp functions not being extensible generic functions, you can hardly tell OO wasn't part of Lisp from the beginning. This flaw turns out not to be a big deal. The reason it is such a clean extension is mostly because the surgeons who added it on had the power of Lisp macros to design with.

      To compare this to the Frankenstein-like addition that OO is to Perl or C++ is needlessly provocative. Language "surgery" doesn't have to be done with chainsaws.

    4. Re:Great News! by be-fan · · Score: 2, Informative

      Lisp is generally as OO as Smalltalk, and CLOS is anything but pseudo-OO (and far from the monstrosity that is Perl). All Lisp objects are CLOS objects, and you can specialize CLOS methods on any Lisp type.

      --
      A deep unwavering belief is a sure sign you're missing something...
  8. SCO needs to be all over this... by bani · · Score: 3, Funny

    ...this is obviously stolen SCO intellectual property.

    I mean if SCO can claim all your ELF are belong to SCO, why stop there?

    SCO needs to start up a Lisp licensing program, it can be as wildly successful as their Linux licensing program.

  9. But I thought... by pmike_bauer · · Score: 5, Interesting
    • Tar file of the tape images, extracted files and extract software, 71Mbytes

    This software was written in the 80s. Back then, all the programmers were supposed to have supernatural abilities and could, like, fit an entire operating system in 640K! What is this??!!! A modern JVM download is only 15MB.
    --
    I read /. for the (Score:-1, Conservative) comments.
    1. Re:But I thought... by Anonymous Coward · · Score: 5, Funny

      This distro is JPEGs of the 80-column cards.

    2. Re:But I thought... by Zathrus · · Score: 2, Informative

      Back then, all the programmers were supposed to have supernatural abilities and could, like, fit an entire operating system in 640K! What is this??!!!

      LISP.

      And that may shed some light why your box dies everytime you run emacs.

    3. Re:But I thought... by RAMMS+EIN · · Score: 2, Informative

      One of the reasons Lisp "died" is that it didn't achieve the performance of FORTRAN (the other language of the time). Of the two, Lisp was tha language that had all the features (really..."modern" languages still don't have some of the features Lisp has), and FORTRAN was the one with the raw performance. As more research and implementation work was done, Lisp became competitive with "simple" languages in terms of performance, but it retains the image of being a slow, interpreted language to this day, no matter how false.

      --
      Please correct me if I got my facts wrong.
    4. Re:But I thought... by rsheridan6 · · Score: 2, Insightful

      Ever since I bought an extra 2 Megs of RAM for my 386, that doesn't happen anymore.

      --
      Don't drop the soap, Tommy!
    5. Re:But I thought... by sketerpot · · Score: 2, Informative

      What horrendously old computer are you using that is incapable of running emacs properly? Emacs is very resource-light compared to most programs these days.

    6. Re:But I thought... by melonman · · Score: 3, Informative

      For a start, it's source code. It compiled for a processor designed specifically to run Lisp (36-bits anyone?), so the object code was quite compact.

      Second, it did stuff in the 80s that are still hard to do today. For example, how many development systems allow you to locate a piece of windowing behaviour that you like, anywhere in the OS, and import that behaviour to your own code with a few mouse clicks? Or drop into microcode when necessary? The JVM is smaller because it does a whole lot less.

      Third, the machine I used cost £1M at the time, so I don't think they were worried about the odd extra RAM chip. Lisp uses lots of RAM when it runs, no matter how compact the code.

      They were fantastic machines - in the year Apple released their first laser printer and IBM were talking seriously about a windowing environment, these guys were using a 68000 just to bootstrap the main processor, and there weren't a lot of other 24-bit displays around, let alone full-blown rendering packages to take advantage of them.

      --
      Virtually serving coffee
  10. Nice... by lpangelrob · · Score: 4, Interesting
    ...they found it on 9-track tapes in the basement. Excellent.

    Does that make this the oldest software to be released under an "open-sourceish" license?

    1. Re:Nice... by mccalli · · Score: 4, Funny
      ...they found it on 9-track tapes in the basement.

      ....with a sign on the door saying "Beware of the Leopard".

      Cheers,
      Ian

  11. Somebody had to say it... by Anonymous Coward · · Score: 4, Funny

    (This(truly(is(great news))))

    1. Re:Somebody had to say it... by kaarigar · · Score: 2, Funny

      (great news (is (truly (this))))

  12. Re:cdr cdr car? by RAMMS+EIN · · Score: 4, Funny

    Yeah! This clearly shows that C is superior! At least in C you have superfluous parentheses, semicolons, commas, ...

    --
    Please correct me if I got my facts wrong.
  13. There's some duplication. by CyricZ · · Score: 4, Informative

    There are the original TPC tape images included, and then those same images in SIMH format. Then there's an archive of the extracted files, and the archive is also extracted.

    --
    Cyric Zndovzny at your service.
    1. Re:There's some duplication. by pmike_bauer · · Score: 3, Insightful

      I was going for funny, but the slashdot mods found me insightful. Amazing!

      --
      I read /. for the (Score:-1, Conservative) comments.
  14. Richard Stallman and the Lisp Machine by mschaef · · Score: 4, Interesting

    This was in the body of the story, but maybe it's more appropriate elsewhere. One of the more interesting links in the blog posts about this source code release was a transcript of a speech by RMS on how the Lisp Machine influenced his decision to start the free software movement. Interesting reading.

    1. Re:Richard Stallman and the Lisp Machine by $RANDOMLUSER · · Score: 2, Funny
      > ...speech by RMS on how the Lisp Machine influenced his decision to start the free software movement.

      I always thought it was pot. Live & learn.

      --
      No folly is more costly than the folly of intolerant idealism. - Winston Churchill
    2. Re:Richard Stallman and the Lisp Machine by WryCoder · · Score: 2, Informative
      Does he even write code anymore? Or is it 100% politics for him nowdays? Seems like he's quite a wizard.

      He still develops Emacs, and he's leading the design of the GNU System (all GNU, Hurd kernel, no Linux).

      He write the GNU C compiler (gcc), the debugger gdb, emacs, and many other critical utilities, all of which were prerequisites when Linus developed the Linux kernel. He's a legendary hacker.

  15. Obligatory by Acey · · Score: 3, Funny

    In Thoviet Rutha, LITHP lithenthes you!

    Sorry, it needed to be done. That and a co-worker suggested I post it.

  16. good by idlake · · Score: 2, Interesting

    I think it's good that this is getting released. The LispM software contained a lot of low-level ideas that are being rediscovered now 25 years later. This will be useful for the history of computing, as well as a potential source of prior art in patent claims.

    Still, personally, I think Smalltalk 80, developed around the same time, was more innovative and interesting than the LispM software. You can get a complete Smalltalk 80 environment in its original form as part of the Squeak project.

  17. Re:Newbie here... by $RANDOMLUSER · · Score: 2, Funny

    No, a Lisp is a speech language as well as a programming impediment.

    --
    No folly is more costly than the folly of intolerant idealism. - Winston Churchill
  18. Re:cdr cdr car? by be-fan · · Score: 4, Informative

    Here here! I find it incredible to see that C/Java people bitch about "superflous" punctuation. Compare this:

    (defun square (x) (* x x))    ; 6 punctuation marks

    To C:

    double square(double x) {return x * x;}    // 5 punctuation marks

    To C++:

    template <typename T>
    T square(T x) {return x * x;}    // 7 punctuation marks

    To Java:

    public class Square
    {
        public double operate(double x) {return x * x;}
    };        // 7 punctuation marks

    Compare this:

    (if (something)           ; 8 punctuation marks
        (do-this)
        (do-that))

    To C/C++/Java:

    if(something())            // 10 punctuation marks (11 if you count the 'else')
        do_this();
    else
        do_that();

    Compare this:

    (do-something to-this with-that in-there)       ; 2 punctuation marks

    To C/C++/Java:

    do_something(to-this, with-that, in-there)      // 4 punctuation marks

    The only reason it seems like there are so many parentheses in Lisp is because of LET and because Lisp uses just a single type of punctuation while C/C++/Java use all sorts of different punctuation. With a good editor, the parentheses don't even matter, all you see is the indented structure!

    --
    A deep unwavering belief is a sure sign you're missing something...
  19. Thank Goodness! by leighklotz · · Score: 3, Funny

    Now I can fix that annoying bug that Symbolics introduced when they changed Zwei to say "is not a defined key" instead of "undefined", so when I press Meta-Symbol-B it will say "Meta-Beta Undefined (doo-dah, doo-dah)" again.

  20. Oops... by Alwin+Henseler · · Score: 2, Informative

    Parent screwed up link, try Squeak.org

  21. being able to get the hardware would be better by ecloud · · Score: 2, Interesting

    Somebody needs to design a modern Lisp Machine. It would be a nice "open hardware" project. Maybe could run on an FPGA PCI board or something.

    1. Re:being able to get the hardware would be better by Empty+Threats · · Score: 2, Informative

      Have you looked at Movitz? It's a minimal operating system and lisp runtime environment for x86 PCs, which makes kernel development in Lisp practical.

      Movitz is arguably the first step to a modern "Lisp Machine." Actually doing it in hardware would be foolish; even Symbolics abandoned that path. Their last-generation products were a tagged-memory RISC architecture and a VM system that ran Genera (and Symbolics Common Lisp) on top of UNIX on the DEC Alpha.

      Unfortunately, the Symbolics RISC project never saw the light of day. OpenGenera, the Genera-for-Tru64, is still available, but costs thousands of dollars.

  22. bad reputation?? by toby · · Score: 2, Insightful
    it has an undeservedly bad reputation.

    Only if you confuse 'reputation' with 'loudmouth /. trolling'.

    --
    you had me at #!
  23. Re:cdr cdr car? by Anonymous Coward · · Score: 3, Funny

    That's all well and fine, but let's look at a more common example:

    Common Lisp: 12 punctuation marks

    (tagbody
        10 (print "hello")
        20 (print "world")
        30 (go 10))

    BASIC: 4 punctuation marks

    10 PRINT "hello"
    20 PRINT "world"
    30 GOTO 10

    C: 24 punctuation marks, but you don't even have real line numbers

    #include
    main() {
            ten: printf("hello\n");
            twenty: printf("world\n");
            thirty: goto ten;
    }

    Java: 22 punctuation marks, but you don't even have GOTO!

    public class HelloWorld {
            public static void main(String args[]) {
                    System.out.println("hello");
                    System.out.println("world"); // crap!
            }
    }

  24. Re:cdr cdr car? by be-fan · · Score: 2, Insightful

    The problem with the Python mechanism is that it makes macros quite a bit trickier to implement.

    --
    A deep unwavering belief is a sure sign you're missing something...
  25. back to the future by rheotaxis · · Score: 2, Informative

    According to the Unix Haters Handbook, the Lisp Machines were much better than the early Sun workstations that replaced them (except for cost, which is why people bought the first Suns instead of LispM.) Didn't they used to cost more than $50,000 each? I've been wating 20 years to get my own Lisp Machine, now I can run one on a cheap PC. Emacs is like eating crumbs from the table, its time to cook some real meals!

    --
    Software freedom...I love it!
  26. Wikipedia Ref by billstewart · · Score: 2, Informative
    Dude, they were made before you were born. LISP 1.5 came out in about 1960, a few months after COBOL, and unfortunately COBOL caught on and LISP didn't - most languages developed after it were inferior, though some were designed for special environments that didn't have the resources to run or develop LISP.

    LISP Machine Wikipedia Page

    --

    Bill Stewart
    New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
  27. LispM had a superiour hardware model by Anonymous Coward · · Score: 4, Insightful
    The Lisp Machine, as well as Burroughs Algol hardware, embodies some computer engineering principles that address fundamental failures in the current computing environment:

    1. Memory bounds checking in hardware.

    2. Hardware typed memory.

    3. Hardware designed for specific language implementation.

    The current problems that plague the software industry are unreliable code, vulnerabilities to malicious software and poor programmer productivity. It's embarrassing that architectures that were abandoned 20 years ago had features that address these issues.

    Memory bound checking is a complete no-brainer. When you declare a data structure you know the size. If you try to go outside that size, then something is wrong. It might be a run time bug, it might be a malicious attack. Who cares? If an exception occurs, you're going to be safer.

    Hardware typing in memory is more of the same. If you add a floating point value to an address you are in trouble, and an exception should be the result. In the Lisp world, type bits support arithmetic between various numerical representations, so there is added value beyond error checking.

    Hardware/software co-design is not quite as obvious, but it can have big payoffs. Both the Lisp machines and the Burroughs machines were incredibly reliable. They also ran very fast, as least on the tasks that fit the architecture. (Although Symbolics had a great graphics setup, they were not the fastest rendering engines.) Some of this was due to memory bounds checking and some because of typed memory, but much was because the software was designed to match the hardware and hardware was targeted as software. There are currently many examples of hardware designers building computers that are no good for software and software systems that have to make up for gaps in the hardware. Can you say Itanium?

    I know I'm really going to get flamed for this, but I think it's true: RISC is to blame for a lot of these problems. RISC attempts to optimize one thing, the instruction execution pipeline. This was fine when speed was the bottleneck, but we are now at a point where the problems are not if we can run fast enough, but can we run reliably enough?

    1. Re:LispM had a superiour hardware model by be-fan · · Score: 2, Informative

      The LispM model is an obsolete one. Its bad engineering to make a "fast Lisp computer", when you can make a "fast computer" and run a "fast Lisp" on it. The advantages you mentioned are largely irrelevent in modern RISC designs.

      1) Why bother with bounds-checks in hardware when, in a language like Lisp, you can have the compiler insert the bounds checks? With modern machines with several integer pipelines, some of which are usually idle, its not like the cost of a bounds check is noticible.

      2) There is some validity in this --- it would be nice for hardware to provide tag bits so integers and floats wouldn't have to be twiddled before doing arithmatic on them, but type-checking can be handled just fine in software. Again, when you've got several integer pipelines, the cost of bounds check is not that big.

      --
      A deep unwavering belief is a sure sign you're missing something...
    2. Re:LispM had a superiour hardware model by be-fan · · Score: 3, Insightful

      BS. Take a look at the die of something like an Athlon 64. Large portions of it are dedicated to C support. For example, the entire MMU. If C programs (more appropriately, the C memory model) didn't allow programs to write willy-nilly all over memory, you'd save enough die space to put a couple of more execution units on there. Consider also the massive amounts of out-of-order execution hardware. If C wasn't built on the model of a unit-width instruct stream, a lot of that hardware could be dispensed with.

      Programmers seem to have this idea that "C works the way CPUs work". Nothing could be farther from the truth. Modern CPUs are out-of-order, parallel vector machines. The C machine model assumes in-order, single-pipeline scaler machines. C assumes a linear memory space, while modern machines have complex cache hierarchies and often have non-uniform main memories. There are a lot of elements of functional languages that map better to modern hardware than does C. For example, in (strict) functional languages, the following two statements can be executed in parallel:

      a = makea()
      b = makeb()

      A compiler for such a language can map these statements directly to two commmand streams issued to seperate execution units. A C compiler can do something similar, but has to go through massive dataflow analysis to ensure that makea() doesn't modify anything used in makeb(). In another example, functional languages tend to encourage the use of lots of small, transient objects, while C encourages accessing large, long-lived global data structures. Guess which one is more suited to modern machines, with small-fast caches, and large-slow main memories?

      And that's just how hostile C is to modern hardware. Don't even get me started on how hostile its "every pointer can overwrite every object" model is hostile to mdoern compilers!

      --
      A deep unwavering belief is a sure sign you're missing something...
  28. Re:LISP by TheRaven64 · · Score: 2, Informative
    To add a little more information, LISP machines were a hardware stack-based architecture. Most modern CPUs are register-based - you load values into registers and then perform operations on them[1]. With a stack-based architecture, you load values and operations onto a stack, and then pop them to get results. The abomination of an FPU design that is known as the 8087 used this, and still survives to this day in `modern' x86 chips.

    Since the demise of LISP machines, the concept of a stack-based machine has surfaced repeatedly in virtual machines. Pascal was originally compiled to a simple stack-based instructions set known as P-Code. A simple P-Code interpreter was all that was required to get Pascal programs running on new architectures. Other notable virtual machines based on the stack model are the Java VM and the .NET CLR. Parrot, in contrast, uses a register-based VM.

    [1] If you are using x86, VAX, or something equally archaic, you may be able to do operations directly in memory, but in modern implementations these are actually run-time translated into load-operate-store sequences.

    --
    I am TheRaven on Soylent News
  29. RMS Essay: Come Celebrate the Joy of Programming by SimHacker · · Score: 2, Interesting

    How ironic that they released the LispM sources under a BSD-like license instead of GPL.

    Here is an essay written a while ago (1986 or so) by Richard M Stallman (RMS), telling his side of the story about the MIT AI Lab, and the Lisp Machine Wars.

    Many other sides of the story, less extreme than from RMS's viewpoint, are covered here and here and here and here and of course here.

    Machine Room Folk Dance, Thursday at 8pm. Come Celebrate the Joy of Programming, with the World's Most Unbureaucratic Computers. (There were only five of us dancing, but we had a good time.)

    [...] The Lab Betrayed

    There is still an institution named the MIT Artificial Intelligence Lab, and I still work there, but its old virtues are gone. It was dealt a murderous blow by a spin-off company, and this has changed its nature fundamentally and (I believe) permanently.

    For years only we at the AI lab, and a few other labs, appreciated the best in software. When we spoke of the virtues of Lisp, other programmers laughed at us, though with little knowledge of what they were talking about. We ignored them and went on with our work. They said we were in an ivory tower.

    Then parts of the "real world" realized that we had been right all along about Lisp. Great commercial interest in Lisp appeared. This was the beginning of the end.

    The AI lab had just developed a computer called the Lisp machine, a personal computer with a large virtual address space so that it could run very large Lisp programs. Now people wanted the machine to be produced commercially so that everyone else could have them. The inventor of the Lisp machine, arch-hacker Richard Greenblatt, made plans for an unconventional "hacker company" which would grow slowly but steadily, not use hype, and be less gluttonous and ruthless than your standard American corporation. His goal was to provide an alternative way of supporting hackers and hacking, and to provide the world with Lisp machines and good software, rather than simply to maximize profits. This meant doing without most outside investment, since investors would insist on conventional methods. This company is Lisp Machines, Incorporated, generally called LMI.

    Other people on the Lisp machine project believed this would not work, and criticized Greenblatt's lack of business experience. In response, Greenblatt brought in his friend Noftsker, who had left the lab for industry some years before. Noftsker was considered experienced in business. He quickly demonstrated the correctness of this impression with a most businesslike stab in the back: he and the other hackers dropped Greenblatt to form another company. Their plan was to seek large amounts of investment, grow as rapidly as possible, make a big splash, and the devil take anybody or anything drowned in it. Though the hackers would only get a small fraction of the fortunes the company planned to make, even that much would make them rich! They didn't even have to work any harder. They just had to stop cooperating with others as they had used to.

    This resulted in two competing Lisp machine companies, Greenblatt's LMI and Noftsker's Symbolics (generally called "Slime" or "Bolix" around the AI lab). All the hackers of the AI lab were associated with one or the other, except me, because even LMI involved moral compromises I didn't want to make. For example, Greenblatt is against proprietary operating system software but approves of proprietary applications software; I don't want to refuse to share either kind of program.

    I strongly suspect that the destruct

    --
    Take a look and feel free: http://www.PieMenu.com
  30. Not even close (Re:Nice...) by argent · · Score: 2, Informative

    Does that make this the oldest software to be released under an "open-sourceish" license?

    Hell no. Not even close.

    There was a thriving free software community back in the '70s, with operating systems, compilers for C, Forth, Basic, Pascal, and other languages, editors, graphics systems... all released to the public domain or under BSD-style licences. Heck, there were already Berkeley Software Distribution tapes circulating when most of this code was being written, and those contained software under all kinds of licenses.

    Let's see... just off the top of my head, thinking back a quarter of a century, I used Small C (1980), Fig-Forth (1978), Software Tools (1976), ... the "Free Software Movement" was already in high gear years before Stallman decided *he* was going to invent it.

  31. Re:LISP by be-fan · · Score: 2, Informative

    Egads.

    1) A Lisp machine isn't a VM. It's a computer with a native-code Lisp compiler and an OS and development environment written in Lisp.

    2) Lisp was designed by an AI professor at Stanford, John McCarthy.

    3) The early Lisp's were anything but portable, usually written in PDP or IBM assembly. Most modern Lisp's aren't terribly portable either. The major current Lisp compilers generate native code. Indeed, the only major non-compiled Lisps are Emacs Lisp and Clisp.

    --
    A deep unwavering belief is a sure sign you're missing something...
  32. Re:LISP by John+Meacham · · Score: 2, Interesting

    The x87 is a stack machine and it was a major leap forward at the time when floating point loops tended to be hand-coded assembly, it was like having a little hardware forth interpreter. (sort of.. maybe..)

    but the main problems are that is that it is very difficult to write an optimizing compiler that spits out code suitable to run on a stack machine, there are lots of algorithms for optimal register selection, but when your registers move around with every operation, things become considerably more difficult.

    The other problem is that it does not parallelize well. modern CPUs are all about superscalar architectures where they have multiple execution units that try to execute non-conflicting instructions concurrently. since the x87 is stack based, pretty much all operations act on the top of the stack and the top only. this means that every floating point instruction conflicts with each other and you are forced to execute them in sequence. modern CPUs have taken some steps to alleviate this, but it is a non-trivial problem to solve, especially when you want to do it as fast as possible in your instruction scheduler.

    --
    http://notanumber.net/
  33. Re:This is News? by masklinn · · Score: 2, Informative

    As in Philip Greenspun's 10th Rule of Programming you mean?

    Any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.
    --
    "The way we can tell it's C# instead of Haskell is because it's nine lines instead of two." -- wadler
  34. Rethinking Lisp Macros by Peaker · · Score: 2, Informative

    Lisp macros are somewhat like a function that receives its arguments unevaluated. Sure, the function executes at read-time, but it could, in principle, do all the logic in run-time - as long as its arguments are unevaluated.

    Now, suppose we provide the reverse feature, of saying "dont-eval-this" (much like Lisp's quote), and use normal functions instead of macros.

    We may lose some performance (moving work from read-time to run-time), but we gain simplicity and readability.

    In most dynamic languages, there is no "quote" operator, but instead there are first-class function objects which are, for most purposes, practically equivalent (as any piece of unevaluated code can be enclosed in a closure definition). So that in practice, aside for trivial syntax issues, (almost) every macro can be converted to a function call with a closure argument.

    For example, the "loop" macro can be converted to a set of functions (for/while/etc) that receive the conditional as a closure, and the loop body as a closure. This approach is used by Smalltalk.

    Advantages of this macro alternative:
    A. Simpler to enhance language, much easier than to write a macro
    B. More predictability and explicitness about the evaluation of code
    C. Does not require code to be representable as data

    Disadvantages:
    A. Some macros may provide more syntatic sugar
    B. Performance, read-time work is moved to run-time.

    I would say that Disadvantage A is moot because a nice readable syntax is something Lispers must give up in order to support macros in the first place. And that advantage B is not relevant for the vast majority of software development.

    Thus, contrary to popular oppinion, macros don't really empower the developer, they just make it possible to create really powerful performance hacks at read-time. Their disadvantages far outweigh their advantages, and that is why they haven't won out.

    1. Re:Rethinking Lisp Macros by be-fan · · Score: 2, Insightful

      You're not solving the basic problem that macros solve, however. Receiving a function as a closure doesn't allow you to manipulate the function. You can use it as-is, but a lot of very powerful constructs require that manipulation. Many of the macros used in Common-Lisp programs could not be rewritten as a function taking a closure. A trival example is PUSH. Bigger examples are DEFUN, DEFCLASS, DEFMETHOD (pretty much all of CLOS, really), etc. Your loop example is particularly good. Languages like Python rely on hard-coded syntaxes for their looping constructs, which invariably express only a very limited subset of the looping constructs the programmer wants to use. Something like CL's LOOP macro is far more powerful (and wisely used, can be every-bit as readable), but could not be implemented as a function taking a closure.

      As for "giving up a readable syntax", I consider Lisp's much more readable than C++. Lisp is readable if you're used to reading Lisp. Its unreadable if you're not. The same is true of C++. Before anybody complains about Lisp's syntax being unreadable, they should have at least a thousand lines of code (in an actual program, not some homework assignment!) under their belt. A thousand lines seems like a lot, but its a decent metric for seperating those who know Lisp and those who do not. Ask yourself: would you hire somebody who claimed to "know" C++, when they hadn't written more than a thousand lines in it?

      --
      A deep unwavering belief is a sure sign you're missing something...
    2. Re:Rethinking Lisp Macros by Peaker · · Score: 2, Interesting

      and in fact, that's exactly the kind of thing one has to do when working in functional languages with no macros, but (a) it's less elegant because you're making the programmer do some of the macro's work, and (b) this is still a pretty simple macro.

      I find it a lot more elegant, as it uses simpler primitives to achieve the same goal. Also, it makes it very clear where the variables come from, even if I don't know the "with-file" function (explicit function arguments).

      # This is not really longer than the macro example so you cannot say that you have to "do" some of the macro's work. What work?

      data = with(open_file('/etc/passwd', 'rb', lambda stream: stream.read()))

      Macros empower the developer by enabling the construction of syntactic abstractions -- each of which extends the syntax of the language. Like any other power, it is sometimes abused by the inexperienced; one can certainly write utterly unfathomable code using macros. But used well, macros greatly enhance the elegance, readability, and maintainability of code.

      Instead of changing the syntax itself, one can have a rich syntax to begin with, and only overload the semantics of the syntax. Some things should never change, for readability's sake. Things such as when code is evaluated and when its not. Macros break this rule and make reading Lisp much harder. While I can read code that uses functions I do not know with relative ease, I have no idea what's happening when macros are used, because there are no evaluation rules that the code adheres to.

      As for why macros are not more widely used, there are a couple of reasons. Lisp's minimalist syntax, so strange-looking at first glance, turns out to be one of its greatest advantages. The very simplicity of the syntax is exactly what makes it so powerful and general: user-defined constructs are invoked just like built-in constructs. While in principle a language with keywords and infix expressions could have an extensible grammar, syntactic extensions get much harder to manage in such a language because they tend to interact, causing ambiguities in the grammar.

      Again, if you assume syntactic extensions are a good thing (as opposed to semantic extensions by overloading an existing rich syntax).

      And the second reason is one the above post touches on when it mentions the representation of code as data. Lisp is the only major language to give programmers access to a standardized tree representation of source code. The fact that the representation is a tree makes Lisp macros powerful (contrast the pitifully weak "preprocessor macros" of C/C++, which operate on a character string representation), and the fact that the representation is standardized makes them portable.

      Again, if you assume syntactic extensions are an advantage. (btw: Python does allow you access to its code tree, but its rather inconvinient).

      I have plenty of experience in more mainstream languages, but when programming for myself, I almost always use Common Lisp. Macros are a major reason.

      You are one of a very tiny minority.

  35. Re:cdr cdr car? by sickofthisshit · · Score: 2, Interesting

    You want to learn about xmodmap

    First, do xmodmap -pke

    That will print out the current keymap you have.

    Then, you want to find lines like

    keycode 45 = 9 parenleft
    keycode 46 = 0 parenright
    keycode 71 = bracketleft braceleft
    keycode 72 = bracketright braceright

    (the lines show unshifted shifted)

    Then, you want to create a file (call it .xmodmap) which has lines like

    keycode 45 = 9 braceleft
    keycode 46 = 0 braceright
    keycode 71 = parenleft bracketleft
    keycode 72 = parenright bracketright

    Then, in a suitable init file (such as .xinitrc) you want to put a command

    xmodmap $HOME/.xmodmap

    to load it when you start up or just type it from the command line to try it out: You can do it one line at a time by using the syntax

    xmodmap -e "keycode 72 = parenright bracketright"

    Note: the alternative keysym syntax is a briar patch: it allows you to make all the keys which emit left brackets to now emit left parentheses, but then it doesn't offer you a way to change only the ORIGINAL left parenthesis key to emit a left bracket. Perhaps your xmodmap has a swap syntax, but my clunky Solaris environment does not. The keycodes are unfortunately not guaranteed to be portable, but hey, how many machines will you need to customize?

  36. Norvig by drewness · · Score: 2, Informative

    Peter Norvig has a nice comparison of Python and Lisp.

  37. Re:Why design a new language? by sickofthisshit · · Score: 4, Interesting

    I didn't miss your point.

    Passing around functions is something Lisp is perfectly capable of doing. (And without any performance hit, because our anonymous functions are compiled to machine code just like our named functions.) But--guess what?--we don't use it to implement control structures, even though we could. One quickly finds that the function-passing style is LESS readable and LESS convenient than real Lisp macros.

    You plainly misrepresent Lisp macros if you claim they are about moving basic operations to read-time instead of run-time. They implement program *transformations* that BY DEFINITION must occur at code-reading time (but before compile-time). By the time the program actually runs, it is too late to rewrite it, after all.

  38. Re:Why design a new language? by sickofthisshit · · Score: 2, Insightful

    Well, how about adding object-oriented programming to a language which previously did not include it?

    Multiple pre-CLOS object-oriented extensions to Lisp were written using heavy-duty macrology.

    How about adding Prolog-style logic programming to a language which previously did not include it?

    You can do so in Lisp, and macros are the best tool for the job.

    How about adding an English-like syntax for defining common looping constructs? Lisp's infamous LOOP macro could be and was developed by *users* who didn't have to wait for some language implementor to do it for them.

    How about a whole book's worth of code?

    What about allowing simple application-oriented forms to declare and define multiple associated functions and data structures?

    The basic fact is that Lisp programmers f*cking INVENTED the use of closures in programming, and they STILL PREFER MACROS by a large margin to implement control structures. Do you think they all are brainwashed, or stupid amnesiacs, or what? Does learning "defmacro" somehow block all memory of "lambda"? If it were just a matter of "good closure syntax", we'd use defmacro to define a nicer syntax and use it. But the plain fact is that the syntax is superficial---the expressive power is fundamental.

    The code transformations possible greatly outnumber the total number of closures it is reasonable to ask a higher-order-function user to pass it. Furthermore, forcing the use of closures means the user of your utility has to jump through more hoops to use it, and makes your design more complicated.

  39. Re:Why design a new language? by Tayssir+John+Gabbour · · Score: 2, Informative

    Also, many find this a great intro to Common Lisp. With examples of building .mp3 servers and unit test frameworks.
    http://www.gigamonkeys.com/book/

  40. Comment removed by account_deleted · · Score: 4, Interesting

    Comment removed based on user account deletion