
Lisp: No easy download - helveticaman
http://www.lispcast.com/drupal/No-easy-download.html
======
runevault
I dunno which is a bigger problem, this or the massive library pain issue.

Of course now that Clojure is out there I don't know if CL really COULD gain
traction, most people who want a Lisp for "real work" are going that route, or
have gone in other power language directions like Haskell, or so it appears
from where I'm standing.

~~~
mahmud
When was the last time you gave up your Lisp project for the lack of
libraries, and what were those libraries?

~~~
runevault
It was generally library problems, but then I was trying to use sbcl on
windows the last time I attempted CL development (this was over a year ago,
before I found out about clojure) so even the libraries that DID exist were
painful to deal with.

Maybe things have changed but I could not make much headway with ASDF so even
when I did find the libraries... yeah. And yes I did have cygwin installed
which is why I got past some of the problems.

Maybe I'd have made real headway if I were full on in Linux land where sbcl
and everything else has much better support, since it's built around the *nix
tool chain.

~~~
mahmud
I develop on Windows and deploy on Unix. Library problems are something we
have to face on every platform and programming language, as programmers, but
we learn to work around them.

This morning I needed HTML to PDF generation; my first instinct was to use
something from Lisp, I found xhtml to pdf generation stuff in CL-TYPESETTING's
contrib but it didn't work for me, so I went out and mocked up the application
with a web service .. just to find out the remote server shut me down. Next
try was to download Perl modules, PDF::FromHTML was broken for me and I didn't
know how to fix it (I am not a good perl programmer, btw.) I tend tried the
PHP HTML_ToPDF, and it too was too problematic for my tastes. A few hours
later, I retooled the app to use a shell pipe:

    
    
      (let ((file-path (handle-file file))))
        (if (and (shell-command 
                   (format nil "html2ps ~a > /tmp/~a" file-path file-path))
                 (shell-command 
                   (format nil "ps2pdf /tmp/~a /tmp/~a.pdf" file-path file-path)))
           (handle-static-file (merge-pathnames #p"/tmp/" file-path)
                 "application/pdf")))
    

Ugly but worked.

I then played with that for a bit and found it too fickle. Took a second look
at the CL-TYPESETTING stuff, my application was now working but still I wasn't
confident with it, however, since 7AM this morning, I have had so much
exposure to HTML to PDF converters that I knew how they were supposed to
function. It took me about 10 minutes to find the problem in the CL-
TYPESETTING package (Windows didn't have truetype font it was referencing and
the sample usage was buried in a comment at the bottom of the xml-xform.lisp
file.)

It would have been very convenient for me to bitch about Perl and its broken
PDF::FromHTML module, even though any competent Perl programmer would have
told me how to fix it in a jiffy. And the PHP package. It was also convenient
to bitch about the web service that blocked me, but I found out they were
charging an access fee for the API and I shouldn't have scraped their web page
and abused their servers.

Truth is, all languages, tools and platforms suck in small user-dependent ways
(they are not DWIM-enabled.) You could waste a life time complaining about
them, so the productive thing to do is weigh the language's pros against its
cons, and if it's _mostly good_ , then you better learn it well and use it to
its full potential.

~~~
runevault
Right, but I felt the productivity gains once I got past those problems
compared to the ease of getting python running with what I needed (my language
of choice at the time) and it's own level of power simply didn't create the
right situation to warrant continuing to fight with it after I spent something
like 4 evenings just trying to get my environment working how I wanted with
ability to download packages I needed via ASDF.

~~~
mahmud
Python is an excellent language in the hands of a competent pythonista: your
programming career will thank you if you stuck with one language and learned
its ins and outs over 3-4 years.

Libraries are add-ons and most can be ported and rewritten in your favorite
language with more natural idioms. SWIG is nowadays the equalizer; it makes
the entire C world callable from your favorite pet language. Stuff like LLVM
will take you even further, once you know what you're really doing. In the
mean time, use foreign functions and web service to bridge the gap where it
exists.

My advice to Clojure programmers is to learn Lisp and mine its rich heritage
for beautiful designs. A few months spent on a full CMUCL installation will
make you a much better programmer for the rest of your lives: I was a
Win32/COM guy writing GUIs for a living. When I discovered CMUCL I saw stuff I
couldn't imagine. I was able to put buttons in the Unix shell and attach
callbacks to all underlined text in an editor buffer. Stuff like that prepared
me for DOM scripting with jquery. Look at Smalltalk and SML too.

A personal note to Clojure web framework guys, specially people using
Compojure: take a look at Hunchentoot and copy all its good parts. I develop
on Hunchentoot and everyday I discover an engineering decision made by its
author that just humbles me. Good code makes you respect its author.

~~~
runevault
I've not looked at it in a long time but Hunchentoot is certainly an excellent
piece of engineering, and one of the things I was certainly interested in
using at the time I was attempting to get into SBCL development.

I should go back and look at it's code again, and see what new ideas I can get
out of it now that I've come back to lisp style syntax, though obviously w/o
CLOS and the MoP.

------
zoba
<http://www.gigamonkeys.com/lispbox/>

Lispbox makes it really easy to download and get going with Lisp.

------
arb
There are at least five links on the first page of results searching Google
for "common lisp download": <http://sbcl.sourceforge.net/platform-table.html>
<http://clisp.cons.org/> <http://ftp.gnu.org/gnu/gcl/>
<http://www.franz.com/downloads/> <http://www.lispworks.com/downloads/>

It's true there is no one link, but his examples suffer a related problem --
no links are provided to Jython, IronPython, JRuby, etc., which is misleading
if marginally more convenient.

That said, do people typically download releases, even of Perl, Python or Ruby
implementations? I've only used distro packages or RCS checkouts of any of
those systems. Is this mainly an issue for Windows or Mac users?

------
10ren
"In order to download lisp, one must first download lisp."

Antiviral marketing.

~~~
thunk
Sometimes it feels like: "Lisp - Go away". And sometimes I'm just fine with
that.

~~~
thunk
And sometimes it feels like: "Hacker News - Go away", and I'm just fine with
that, too. :)

------
hvs
This post is from May 2008 and I couldn't find a link to download Lisp
anywhere on his site.

I don't disagree with his point, but over a year to make good on his promise
doesn't speak well of his argument.

~~~
mahmud
Where is the link to download Fortran, Cobol, C, C++, and "Assembly"?

Remember kids, single-implementation languages are the exception in industry,
not the norm.

It's actually a two way street: where can I download the ANSI/ISO language
specification for Perl, Python and Ruby? Just because it's nimble, interactive
and quick to hack doesn't mean Common Lisp is a prototyping language.

~~~
plinkplonk
"Where is the link to download Fortran, Cobol, C, C++, and "Assembly"?

You forgot Ada and Pascal ;-)

"single-implementation languages are the exception in industry, not the norm"

If I may dispute this just a little bit, is this really true?

Perl, Python, Java, Ruby, C#, VB(.net) are all "single implementation".

(Though some of these have implementations on different platforms, there is
indeed one canonical and dominant implementation(Guido's Python (vs Jython or
stackless) , Matz's Ruby (vs Jruby or Rubinius), Micrsosft's C# (vs Mono) ), a
canonical download page (googling "$language download" leads to this page)and
download links to that page).

Though there are many variants of C and C++ (mostly for embedded devices) ,
most people (>90% ?) use either VC++ or gcc I think. I don't know about Cobol
(never had to work in it Thank God)but I suspect IBM's variant(s ?) is close
to having a monopoly.

It would seem that single (or close to single) implementation languages are
indeed the norm and multiple implementation languages (with predefined
standards and so on) are the exception?

Again I don't think it is a specially useful distinction, just something to
think about.

In my (admittedly limited and subjective) experience, languages with a
benevolent dictator seem to evolve better than committee/standards driven
languages.

I think this (benevolent dictator/single creator vs committee/standards driven
design) might be a more meaningful distinction.

~~~
mahmud
_I think this (benevolent dictator/single creator vs committee/standards
driven design) might be a more meaningful distinction._

And it's up to the rest of the world to bet money on one guy's whims and
desires eh? what happens when your benevolent dictator has holes in his
understanding of programming languages? Not even Wirth could get away with
dictatorship, and Wirth _knew_ what he was doing. Your pet language grows up
the moment industry and governments want to use it, and they expect their code
bases to work for the next few decades, not until the next big epiphany or
mood swing of THE language architect.

~~~
plinkplonk
"And it's up to the rest of the world to bet money on one guy's whims and
desires eh? "

This is an old debate. No one is asking anyone to "bet money" on anything.

I am just saying the languages rising to dominance _these days_ (vs in the
eighties) seem to be driven by "benevolent dictator" types (Ruby, Python, even
Clojure]. [here is a counterpoint for you. Haskell is an exception] and, yes,
a single canonical implementation with a download page.

A lot of very competent people seem to be fine "betting on" these languages.
Or are you saying anyone who uses Python or Ruby is stupid because they don't
have committees or standards?

Clojure is very much "the whim of Rich Hickey" and is doing just fine.

Now perhaps you have some special caution that leads you to avoid these
languages. That's fine.

"what happens when your benevolent dictator has holes in his understanding of
programming languages? "

Oh you mean like the lisp folks didn't understand static scope in the
beginning? ;-).

From Richard Gabriel's (one of the people on the Common Lisp Committee) paper
"A critique of Common Lisp"

" Every decision of the committee can be locally rationalized as the right
thing. We believe that the sum of these decisions, however, has produced
something greater than its parts; an unwieldy, overweight beast, with
significant costs (especially on other than micro-codable personal Lisp
engines) in compiler size and speed, in runtime performance, in programmer
overhead needed to produce efficient programs, and in intellectual overload
for a programmer wishing to be a proficient COMMON LISP programmer."

That doesn't sound very much like they had "hole less" knowledge of language
design does it?

 _Every_ language in existence has "holes", depending on your view point. So
what?

Look plenty of languages have been successful without deep programming
language (semantics) understanding "embedded" in them. The languages with
committees ( COBOL. Common Lisp) are hardly cutting edge research languages
now are they?Success has little to do with programming language
"understanding".

So the answer to "what happens when your benevolent dictator has holes in his
understanding of programming languages?" is "any resulting problems get fixed"
(e.g: ruby block scoping between 1.8 and 1.9).

"Your pet language grows up the moment industry and governments want to use
it"

so by this metric Common Lisp never really "grew up" and is a massive failure?
Why do you still use it then? Ruby seems to be a "grown up" language by your
own idea of "grown up" (a lot of government and industry usage) and still
doesn't have a committee and is very much a "benevolent dictator" language.

My idea of a successful language, fwiw is what applications were written it
and how successful _they_ were.

By this standard, CL is successful . Emacs Lisp is successful. Arc and PLT
Scheme are successful. Of course Ruby, Python, etc are massively successful.
Success doesn't really need a committee or a formal standard.

"not until the next big epiphany or mood swing of THE language architect"

you prefer the frozen-language-spec-by-committee leaving the language mired in
the past? (Common Lisp).

I still prefer the (benevolent dictator + knowledgable community to debate
design options) to industry committees.

The creators of the non committee languages (Guido, Matz, PG etc) are without
exception bright, articulate people with a strong design sense and an ear to
the users' opinion. Those languages have friendly knowledgeable communities.
I'd rather trust them than some random business/government committee.

If that means my language isn't "grown up" then so be it :-)

------
aerique
Ha, good point! I've been using CL for quite a few years now so this issue
isn't even on my radar. But this question could be asked for C++ and probably
Scheme as well.

This is a 'problem' for languages with no single implementation that's easily
solved by Google. "common lisp download" gives the CLISP site as top hits
which is a good CL to start with.

~~~
tsally
Not at all with Scheme. PLT Scheme is an awesome example of a centralized,
well documented language with easy installation and application deployment.

Note the prominent download link on the home page: <http://www.plt-
scheme.org/>

~~~
mahmud
Please ignore the troll article. Anybody interested in a programming language
can google for implementations and compare them. I don't understand why there
needs to be a single lisp.exe binary.

The abundance of Scheme implementations is actually a good thing: there is a
scheme for every n-choose-r machine configurations :-)

[http://community.schemewiki.org/?scheme-faq-
standards#implem...](http://community.schemewiki.org/?scheme-faq-
standards#implementations)

------
jonjacky
It's Scheme not CL, but the PLT Scheme/Dr Scheme download and install was easy
enough for many in my introductory programming class to get through without
help (this was years ago already).

------
Tichy
apt-get install

------
tsally
Step 1: Try doing concurrent programming in Common Lisp.

Step 2: Switch to Clojure.

