Ultralisp: A fast-moving Common Lisp software distribution
ultralisp.org
ultralisp.org
Clojure is very nice. I have used it for several projects. But sometimes I would prefer not to rely on Java libraries so much, and cleaner stack traces.
Racket may get some critical momentum now, with the whole merge with Chez.
I don't have high hopes for a Common Lisp implementation, as the ecosystem has become too fragmented and stagnant. But I wish I could be surprised here. Shen introduced some great ideas to make a powerful static typing an option in Lisp [1].
All these new exciting programming languages over the past ~5 years or so are quit exciting. I'm starting to believe that in the not so far future we'll look back on that time period between the late 90s up to the mid 2010s as some kind of a dark age for programming, where we kept using those inelegant, inefficient, hacky languages carried by Moore's law and an incredible demand for new software being written in huge quantity extremely fast, quality be damned.
Now that the gold rush starts to cool down there seem to be a lot of very interesting work to take a few steps back and do it right.
I'm also hoping that Racket (which is is like a secret oasis community) will get more attention, and someone will dust off some old Paul Graham writings about startups and Lisp, and some startups (probably ones who're not just doing another cookie-cutter madlibs startup) will decide to use Racket initially. (Disclosure: I have an interest in promoting Racket, because I'd love to help build startups in Racket, and also recruit top programmers with Racket as a carrot.)
I already received some cool VC funding offers. I'm evaluating them, and planning stuff.
For my use case, Racket is perfect, so it has big chances.
And feel encouraged to email me directly. I might be available then myself, and, if I can get some understanding of your needs, I might also know some other good candidates.
There's an imposing wall of manuals at: https://docs.racket-lang.org/
Racket isn't purely FP, but it can be used that way, even with the base language. There's also at least one lazy `#lang`, and you can make more.
As such, many good multiparadigm books will be of great help. E.g. SICP, but also the much less known yet equally fantastic CTM. None are written in Racket, although SICP with Scheme is close, but many concepts can be ported.
There's also excellent Lisp literature like Lisp in Small Pieces or PAIP, that are always worth to consider.
Racket also implements most of http://www.eopl3.com/, which is a great textbook.
Granted, I’ve been using elixir and erlang, where the use of pattern matching matching and immutability give you a lot of the benefits that modern static languages have, but I wouldn’t mind a new wave of modern dynamic languages, or at least static ones that feel more dynamic (Carp may fit in that spot).
[1] http://lfe.io
We had a dark age of too much VM and scripting languages, and only now getting back how computing could have looked like.
For example, given Anders background imagine how .NET would have been if it was fully AOT compiled and the same low level features from Delphi since version 1.0.
Or if C++ Builder wasn't the only surviving example to RAD development with C++, before others started to build on top of LLVM toolchain.
There are a few interesting talks on yt: https://www.youtube.com/watch?v=mbdXeRBbgDM
Common Lisp is extensible.
We are better off hoping for Lisp inspired languages like Julia or Clojure to win wider market adoption.
Maybe what is really missing is having a Lisp for WebAssembly, being advertised as the best implementation available everywhere and such.
https://www.reddit.com/r/lisp/comments/7z7wuq/has_anyone_con...
Racket's weird, not quite a Scheme anymore, tons of libraries but they're often hard to use, and the object system infected too much of it. And performance is poor even with Chez underneath, there's just too much stuff on top. It's a better teaching tool with the tutorial sub-languages than a production language.
I can't work in CLISP, it's like scavenging a junkyard for parts where some work, some haven't for 30 years. Some people love that experience.
Strong typing (also in Typed Racket) isn't going to improve anything, but it's good for marketing to enterprise people.
I work on CL everyday and don't think it's fragmented. Stagnant, maybe, when comparing it to the mainstream languages.
I have a couple projects in QuickLisp, and more than once I've broken them after I pushed incremental or non-working changes to my repo, didn't go back and fix them in time, and QL pulled the broken code.
Developing in branches would solve the problem, but not everybody does that on smaller informal projects.
On the other hand, I've also been annoyed waiting for bug fixes to trickle through to Quicklisp, so it's not an entirely bad idea...
But then again, neither are monthly releases.
Ultralisp is a Quicklisp-compatible distribution, except it's a bleeding-edge one. Each time a piece of software included in it releases a new version/release/commit, a new dist is created, and the modified software is available in Ultralisp within minutes.
Also -- and this is very important to me -- it means I'm in control of which version of every library I use. I've been burned too many times by Quicklisp "updating" a library that was previously working which doesn't any more. Now I have direct git control over my version coherency and I'm a happy camper.
[0] https://en.wikibooks.org/wiki/Common_Lisp/External_libraries...
(asdf:initialize-source-registry
(:SOURCE-REGISTRY
(:EXCLUDE "exclusion-string1" "exclusion-string2")
(:TREE #P"/Users/me/Lisp/my-repos/")
(:TREE #P"/Users/me/Lisp/quicklisp-repos/")
(:TREE #P"/Users/me/main-project/src/")
:IGNORE-INHERITED-CONFIGURATION))- docker
- mailgun
- s3
facepalm
"Don't be snarky."
Docker, while not proprietary, still subject to moving fast and breaking things, which was amply criticised here on HN.
Common Lisp should stay a refuge from all the rug pulling around. While it's true that quicklisp is far from bedrock, adding volatile APIs into the mix won't help.
In my mind reimplementing in CL is better bet than pulling Docker.
Just this: if something interferes badly with a basic CL feature such as SLIME (cl-async does), toss it.
It basically starts an event loop in a separate thread and then wraps all of the SLIME's evals so they're executed from within that event loop.
What do you use instead?
That is perfect match for guix channels too.
What I do is maintain a repository of package definitions (that possibly inherit from guix master package definitions) and only change a few hashes here and there when I need.