4 ms·
I think lisp could benefit from a small core and building out a standard library. You could pack all the features it needs (packaging, lexical/dynamic scoping (
by orthecreedence 11y ago
I think lisp could benefit from a small core and building out a standard library. You could pack all the features it needs (packaging, lexical/dynamic scoping (defvar), let/lambda, defun/defmacro, multiple values (via values, multiple-value-call), setf (w/ setf expansion), simple arithmetic, declare/declaim/proclaim, maybe a few more) into the core and have standard libraries: cl.bind (multiple-value-..., defparameter, etc), cl.math (sin, cos, etc), cl.clos, cl.collections (arrays, hash tables), cl.io, etc etc.
I think this would clean things up a lot, still preserve the spec (aside from documenting what's in which libs), and make things more approachable.
Shoving everything into the "common-lisp" package works but it's cumbersome and you have to have the entire language sitting there to use anything.
- tjr 11y agoI don't have the exact quote/source right here handy, but I believe that was Guy Steele's intention with Scheme.
- Jtsummers 11y agohttps://en.wikipedia.org/wiki/Scheme_(programming_language)#R6RS https://en.wikipedia.org/wiki/Scheme_(programming_language)#... This was a concept for R6RS (not sure what happened, apparently some controversy with it) and R7RS has (attempted? succeeded?) in going in this direction.
- duaneb 11y agoIIRC R6RS was deemed too modular for not much reason while abandoning backwards compatibility. Thus, R7RS was split into small/large specs, and largely builds on R5RS.
- bitwize 11y agoR6RS was the systemd of language standards. It went against the very philosophy of the language it purported to standardize, and was basically a prescriptive standard based on a few influential individuals' notion of what Scheme "should" be. That's another reason why I remain unswayed in my detestation for systemd: I'd seen this movie before and I don't like how it ends.
- tikhonj 11y agoHe gave a brilliant talk about it: "Growing a Language"[1]. The idea is to make languages that grow—ones that provide a small, uniform core that can be extended by the user. Ideally, these extensions feel like first-class citizens: things added by users should feel on par with built-in language features. It's still one of the best technical talks I've ever come across. [1]: https://www.youtube.com/watch?v=_ahvzDzKdB0 https://www.youtube.com/watch?v=_ahvzDzKdB0
- agumonkey 11y agoHe even humorously implied that a growing language shrinks, by replacing many specific constructs with a single general one.
- nabla9 11y agoIf that's so important why has nobody done it? CL is programmable programming language. It would take less than a hour to separate those core 25+ symbols in Common Lisp into core package and then separate other symbols into other packages. Common Lisp has less than 1000 symbols.
- orthecreedence 11y agoActually, I think I might do it. After thinking about it for a few minutes, you're right, the work is somewhat minimal. Then you have a standard library. Instead of :use'ing :cl, you'd just use what you want out of the lib. If it caught on, implementations could use it for hinting when compiling, and everything would be backwards compatible by just using :cl again.
- mrottenkolber 11y agoI would like to do this too. Would you like me to join this effort? I want to propose to write up a CDR that standardizes a hierarchy. Please send me a mail! :)
- Blackthorn 11y agoI think nobody's efforts there have really caught on because Common Lisp as a community is hopelessly conservative. At least Lisp as a whole isn't -- Clojure is a hell of a lot simpler than CL, though even it now has someone with a "let's separate things out into different packages" project (called Dunaj -- I actually think it's a pretty good idea, but nobody's really talked about it).
- bitwize 11y agoThis exists; it's called the R7RS standard for Scheme. It basically divides Scheme into two languages: a small core with a basic module system, and a more extensive language with a robust standard library packaged as modules.