Libraries

Discussion of Common Lisp
Post Reply
psismondi
Posts: 13
Joined: Mon Jan 11, 2010 7:48 pm

Libraries

Post by psismondi » Sat Feb 20, 2010 10:31 pm

One of the common beefs about CL is the state of affairs with respect to libraries. I believe the originator of this forum blogged about this.

As much as I love CL, I fear that I am coming to the end of my rope with the library mess. I have just spent an hour trying to install allegroserve or portableallegroserve as I go through Peter Seibel's book. So far no joy :cry:

Here's the deal as I see it:
  • The amount of abandonware out there for CL is f**king huge. The cliki world is littered with half-baked crap.
  • Incompatibilities abound. CL seems to exist back at a point in time when every minor kingdom had its own definition for the length of a "furlong".
  • ASDF-INSTALL just does not work most of the time. I have not (so far) identified a decent alternative to it, nor have I found a reliable repository to rival e.g. CPAN.
Here is what I don't need to hear: "Roll your own" or "well it's not that hard." Baloney. I refuse to spend my time rewriting a damned sockets package. (For example.)
I have used perl, TeX, java, and obj-c for some time now without ever getting this *frustrated*. So the situation with CL is, yeah, just that GD bad.
I admit, though, that there is a pretty good alternative: purchase a commercial CL implementation. Maybe that's what I should do.

Finally, here is an actual question or two:

Is there actual *useful* discussion about this problem somewhere that would give me an opportunity to contribute? If not, what is the solution? Should I just by LispWorks and be done with it?

nuntius
Posts: 538
Joined: Sat Aug 09, 2008 10:44 am
Location: Newton, MA

Re: Libraries

Post by nuntius » Sat Feb 20, 2010 11:17 pm

IMO, ASDF-install was doomed to fail. clbuild and Desire are better implementations of the idea.
http://common-lisp.net/project/clbuild/
https://launchpad.net/desire

On another tack, I started LibCL with the express purpose of community development and software engineering. Unfortunately, my time is stretched thin, and progress has been slow. Any help would be appreciated. I have a few "simple" tasks if you're interested.
http://libcl.com/

Looking at the set of libraries included with commercial distros, I suspect you would be happier than your current state, but still feel hemmed in.

Suroy
Posts: 46
Joined: Sat Dec 19, 2009 11:20 am

Re: Libraries

Post by Suroy » Sun Feb 21, 2010 8:50 am

Im interested - what exactly is causing trouble when intalling libraries? Usually you just
(a) check the dependencies of the asd file and download them from cliki
(b) add toplevel directory to asdf:*central-registry* and
(c) load using (asdf:load-op 'asdf:operate :library-name) where library-name is the name of the .asdf file.

And of course you can easily automate (b) if you wanted to. And you add those loading statements (well i do) or the asdf:*central-registry* to be automatically executed when lisp starts. Or save it in a convenient file you can load. If youre using the personal addition of allegro, you cant do this i think.

If the library fails to install for reasons other than you didn't include some dependencies, than its probably not your fault, and you walk away. I think libcl
contains some excellent packages that should already load and you may want to start there.

But in general I agree with you when it comes to libraries. I eventually got sick of writing binder after binder. And then I eventually found ecl lisp. In that you can embed
c code (and i bet c++ if you build ecl with certain flags) quite easily. So, if theres no lisp library to do something, than just write parts of it in c directly in your code~! Or c++, though im still not sure you can embed that. Plenty of c/c++ libraries out there.

Then i also found linux and ubuntu. This February i switched to it from windows. If your not on it you should give it a shot - every open source thing is way easier to build on it. Bye bye frustrations when building all those open source libraries on windows! So ecl eliminated library frustration and ubuntu the general frustration - so I'm firmly back into lisp, and dont mind writing c/c++ code whenever necessary.

rickmode
Posts: 2
Joined: Sun Feb 21, 2010 9:00 pm

Re: Libraries

Post by rickmode » Sun Feb 21, 2010 11:25 pm

I’ve been looking for the most powerful toolbox to build my own web projects. For me Java and other JVM languages are out. I played the Java game on and off since 2000. I’m set on using a dynamic language. Ruby and Python, while cool and have extremely active communities, both seem crippled version of Lisp to me. So I’ve been learning Common Lisp (CL) and looking for a CL based web stack.

CL has been a blast to learn. The Practical Common Lisp book (http://www.gigamonkeys.com/book/) is excellently written and fun to work through. Getting SBCL and Aquamacs set up was fairly easy. Getting SLIME going…. took some work.

Then it gets harder.

ASDF. ASDF-INSTALL. What? What’s the difference? What’s the relationship? So eventually I *get* that ASDF is just the packaging bit, while ASDF-INSTALL is the downloading bit. ASDF-INSTALL is frankly busted. The web of trust chains back to nothing. And I only found that out after I use ASDF-INSTALL to pull down Hunchentoot and CL-WHO. This bombs horribly for many reasons. Eventually I’m pointed to clbuild. This takes a bit of work and for a while my SLIME is dead. Then the guys at #lisp ask if I install clbuild’s SLIME. OK I do that and now clbuild is working. Clbuild isn’t terribly sophisticated though. The whole process of putting your own project in a project and exporting symbols is a bit weak. In this respect Java got it right. Heck, Maven (though a *massively* painful tool to use) gets much closer. Clbuild knows how projects are related, but it does not seem to deal with versioning. It only knows how to pull the latest versions down.

But at least I’m running and now I even get how to use asdf:*central-repository* to bring in my own projects, outside of clbuild’s directory tree.

Now I finally get the Lisp for the Web example (http://www.adampetersen.se/articles/lispweb.htm) working. Except embedding Parenscript in a CL-WHO with-html-output form doesn’t work for me. Next I add in persistence with Rucksack.

That was more pain because Rucksack’s with-transaction inside a with-html-output caused an internal error in SBCL (no stack trace). There was nothing for it but to move code around until it worked. Not a happy debugging process.

Using metaclasses to add persistence is just elegant. I’m in. I’ve seen the the object-oriented persistence problem solved in many ways. I’ve even worked on a few object-relational mapping tools. The last attempt was in Scala, and even that wasn’t ideal. CL and it’s meta-object protocol are up to the task though. Rockin’.

So I get Rucksack working with the example and I feel like I’m getting somewhere. Then I find that Rucksack isn’t ready for prime-time; the author doesn’t recommend it as a primary datastore (http://common-lisp.net/pipermail/rucksa ... 00818.html).

Hunchentoot with CL-WHO and HTML-TEMPLATE seem cool. I’m looking for a higher level of abstraction though.

Then it gets harder.

I take a look at Uncommon Web. Or I try to. It’s really just a bunch of source code. So I’m to master a code base before deciding if I even like it? That’s just… dumb.

Next up: Weblocks. More documentation. The articles on http://defmacro.org are very clear and well written. The widget approach sounds promising. The idea building HTML based on object and view definitions sounds really good. Dynamically created and modifiable scaffolding sounds good (as opposed to Rails style one-time created scaffolding). Even better Weblocks installs with clbuild. The demo even fires up right away. Rockin’. Now we’re on to something. So today I try to work through the remaining 3 examples. No go. All are busted.

The simple-blog doesn’t show blog entries on the main page. That example uses an XML backed store (cl-prevelance), so I’m not interested (why use XML with in a language based on s-expressions?). The weblocks-clsql-demo example tries to use a missing clsql-fluid package. This doesn’t come from clbuild; you need to manually patch your copy of CLSQL. Wait so to use Weblocks with CLSQL, I have to make a code change to CLSQL? That’s just… dumb. The final weblocks-elephant-demo uses a symbol, drop-instance, which is not exposed in the latest version of Elephant. Busted. This is exactly the sort of version issue with clbuild I mentioned above. Lame. So Weblocks, though promising, is not maintained in a useful way. Sad.

All in all, CL is feeling very fringe. I see blind spots. CL is the Lisper’s Blub (http://www.paulgraham.com/avg.html).

Destruct1
Posts: 20
Joined: Wed Jan 20, 2010 1:40 am

Re: Libraries

Post by Destruct1 » Mon Feb 22, 2010 6:31 am

I feel your pain

I think the best solution is to use Lisp with a mature library from another language. Configure a foreign language interface and you are free for a lifetime.
Ruby is good for the integrated Web framework, Python is useful all around and Java's library is just huge but uses the low-level abstraction typical to Java.

I think Lisp is really neat in concept but has sooo many practical problems (libraries just being one of them).

Kompottkin
Posts: 94
Joined: Mon Jul 21, 2008 7:26 am
Location: München, Germany
Contact:

Re: Libraries

Post by Kompottkin » Mon Feb 22, 2010 9:11 am

rickmode wrote:I’ve been looking for the most powerful toolbox to build my own web projects. For me Java and other JVM languages are out. I played the Java game on and off since 2000. I’m set on using a dynamic language.
Hmm. Why are you set on avoiding the JVM? Clojure is a very nice language, and Compojure is a nice web app engine.
rickmode wrote:CL is the Lisper’s Blub (http://www.paulgraham.com/avg.html).
Maybe. But it's not like we don't know about CL's shortcomings. It's just that knowing about the problems isn't the same thing as being able to solve them. Solving the problems needs manpower, coordination, and possibly some inspiration, too.

Happily, there are promising approaches like clbuild, ECL, LibCL, and even Clojure. If you want things to improve, contribute. As we're a pretty small community compared to Python's or Ruby's, you can make a real difference.

psismondi
Posts: 13
Joined: Mon Jan 11, 2010 7:48 pm

Re: Libraries

Post by psismondi » Mon Feb 22, 2010 9:45 am

Well, I have calmed down a bit since I posted the original rant.

I am going to check out clbuild, desire, and LibCL.

I just can't bear the thought of giving up what CL provides, even if there are difficulties. Aesthetically and functionally CL seems to be what I have been looking for all my life :P. Love at first (or maybe second/third) sight!

Since I do most of my work on OS X, I use Clozure Common Lisp (ccl) which is very nice indeed. It does provide a lovely bridge to cocoa, which has a vast quantity of stuff available. There is very active discussion on the ccl mailing list of using cocoa gui capabilities.

The only problem with resorting to foreign libraries is that it seems like a slippery slope in the direction of losing the value of CL. This comes up right away with, e.g. the use of cocoa gui stuff. Should I use cocoa object persistence, or stick to something Lispy-er? I just don't know. But, I guess it's nice to have a choice, anyway.

In the end I may end up purchasing a commercial CL implementation. LispWorks libraries don't cover everything I might want, but there is quite a bit there. Moreover, it may eventually be worth the price to be able to do cross-platform development with relative ease.

Meanwhile, I am going to find a spot to contribute (even with my rudimentary CL skills). Maybe LibCL, as nuntius suggests.

Best,

- Phil -

rickmode
Posts: 2
Joined: Sun Feb 21, 2010 9:00 pm

Re: Libraries

Post by rickmode » Mon Feb 22, 2010 11:03 am

A comment on Hacker News to a blog entry with similar comment to my post here suggests I avoid the continuation based frameworks and use postmodern over PostgreSQL (http://news.ycombinator.com/item?id=1142086).

I'll give that simplified stack a whirl. I worry that I'll be spending time building more to fill in the gaps, but I'll reserve judgement. (I'm talking about things like admin accounts, role based access and form validation.)

Jasper
Posts: 209
Joined: Fri Oct 10, 2008 8:22 am
Location: Eindhoven, The Netherlands
Contact:

Re: Libraries

Post by Jasper » Tue Mar 23, 2010 5:17 pm

I see what you mean, Asdf isn't bad, i just intend to never use asdf-install again.. Largely because it fails so often, and it isn't transparent to me what happens to the files and how it is registered. It is neat to have a library sitting in a directory and just being able to remove it just by removing it's directory from (being loaded at startup) into asdf:*central-registery*.

Pre-packaging to make libraries easier and uniform to install like Libcls approach is one good approach, tbh i haven't looked at the others that much yet. But of course making things easier to manage and install in other ways is a good idea too.

Some things could be more cushy for instance cl-fad doesn't have a function to take out ".." (which library does) and it took me too long [url http://www.lispworks.com/documentation/ ... namestring]finding these[/url], and how about functions specifically for translating directories (cd ..) and such. We have cliki and stuff, but the roadmap to different libraries is important. And it is also important that users aren't frustrated with them or they'll prefer redoing things over the risk of libraries not working for other people.

I am hoping to help with auto-documentation, lots of the libcl packages, and cl-store(warning big pngs!!) and visualization of the packages. I think i will allow for optional formalized input in terms of examples and argument-documentation of a function aswel. It uses GIL is a markup library(/language, same difference) hoping to also to be able to output and be Gui library aswel. (Working on 'output' to clg.)

Btw, asdf seems to have a system to see what is already loaded and what needs to be reloaded, is there a good library to use under there?

Post Reply