3 ms·
I've used Lisp for a production system I delivered one year ago. I used CCL as an implementation and had a lot of success. Here i'll cover your points: > poor
by flavio81 6y ago
I've used Lisp for a production system I delivered one year ago. I used CCL as an implementation and had a lot of success.
Here i'll cover your points:
> poor ecosystem of libraries - few gems, most other half-baked
I'd say the ecosystem is high-quality. There are relatively few libraries (around 2000+) compared to other ecosystem, but on the other hand most of them are either interesting, or unique (wouldn't exist in languages that lack certain features), or really well-written. Or many of those qualities at the same time.
In the absolute sense, there are enough libraries, IMO.
If you need something that isn't available, you have at least three options:
1. Bind to a C library; for this, Common Lisp has many facilities/libs for this, some of them make this task rather easy.
2. Same as (1) but Use ECL (Embeddable Common Lisp) for integrating a C program with a Lisp program as a whole, easily calling C from Lisp and Lisp from C, etc.
3. Use the java ecosystem and use the Armed Bear Common Lisp (ABCL) implementation. This implementation makes calling java libs a piece of cake, basically you call a java method with just one line of code. Or instance a class with just one line of code, etc. Really easy.
> poor community coordination
That's a bit meaningless. There are really good quality books and resources, i think that's what counts.
> Dependency management limitations with quicklisp
Quite the opposite. Quicklisp is awesome, better than PIP or NPM. It "just works".
> And some specific red flags like:
> poor support for json[6]
The opposite, many libs for JSON. The one I use, I like a lot.
> poor support for async
What does this mean? You can use cl-async, but i wonder what would be the benefit when in CL you have actual threads and great libraries for concurrency like lparallel (which introduces parallel processing constructs) or chanL (which gives you an easy to use channel implementation).
Cl-async allows you to leverage the whole power of libuv (just like Node does), but why? I'd rather use threads.
> have to restart the server every 20 days because of some memory leak [3]
Never heard about such things.
Perhaps you are confusing the "condition - restarts system" (which is the Lisp exception handling system) with having to restart something?
> hack to tune GC [5]
The URL you cite says "We had to tune the generation sizes".
Any respecting developer who wants to release a high performance production quality service NEEDS to tune the GC. Tune the GC is not a "hack", is just configuration parameters. Ask any Java developer who has had to "tune" the JVM for best performance.
By the way, everybody raves about Golang but it has a GC system that is comparatively outdated to the ones in most Lisp implementations (or the JVM). For example CCL has a very good generational garbage collection.