6 ms·
The author, a famous and well-liked lisper, is not consider ing portability features. CL is an ANSI standard and code often runs with no changes in many distin
by flavio81 9y ago
The author, a famous and well-liked lisper, is not consider ing portability features. CL is an ANSI standard and code often runs with no changes in many distinct CL implementations/compilers/interpreters.
Also, related to that point: There are many different CL implementations out there that satisfy different use cases, like for example JVM deployment (ABCL), embedded systems (ECL), speed(SBCL), fast compile times (Clozure), pro-level support (LispWorks, ACL), etc. So the same code has a huge amount of options for deployment. It really makes Common Lisp be "write once, run anywhere".
Then speed is also never mentioned. Lisp can be seriously fast; under SBCL it is generally 0.3x to 1x C speed; LispWorks might be faster, and there's a PDF out there called "How to make Lisp go faster than C", so that should give an idea of Lisp speed potential.
CL wasn't created by philosophing about what a programming language should be for many years; CL was basically created by merging Lisps that were already proven in the industry (Maclisp, Zetalisp, etc), already proven to be good for AI, heavy computation, symbolic computation, launching rockets, writing full operating systems, etc.
CL is a "you want it, you got it" programming language. You want to circumvent the garbage collector? need to use GOTOs for a particular function? want to produce better assembly out? need side effects? Multiple inheritance? Want to write an OS? CL will deliver the goods.
In short, i would guess that from a computer scientist or reseacher point of view, Racket is certainly more atttactive, but for the engineer or start-up owner that wants to have killer production systems done in short time, or to create really complex, innovative systems that can be deployed to the real world, Common Lisp ought to be the weapon of choice!
- cwyers 9y ago> Then speed is also never mentioned. What? There's five points on the numbered list, #4 is entirely about speed.
- flavio81 9y agoSorry. Speed is mentioned but overlooked, because the figures are not mentioned. It should be 2x-8x speed increase in favor of CL. For some people this truly doesn't matter (after all, Ruby is successful and loved), for other applications, it does matter a lot.
- dbcurtis 9y agoLooking at ECL, it doesn't seem to have a bare metal port? Or am I missing something? I take it "embedded" in this case means "links with your C code", not "runs on bare metal micro-controller."
- cosarara97 9y agoIt does, it's embedded as in "use it inside another program".
- jackdaniel 9y agoYes, it means that you may link it in your C code or use it standalone (hence – `Embeddable' in name). Lisp programs share ABI with C, so you are able to create library in Common Lisp which will be used from anything having FFI to C ABI.
- fludlight 9y ago"How to make Lisp go faster than C" (2006) http://www.iaeng.org/IJCS/issues_v32/issue_4/IJCS_32_4_19.pdf http://www.iaeng.org/IJCS/issues_v32/issue_4/IJCS_32_4_19.pd...
- wiz21c 9y agoReading that a bit, it makes me think about the current "push" in Python to add types whenever necessary...
- oumua_don17 9y ago>> There are many different CL implementations out there that satisfy different use cases And now there is also CLASP (LLVM based), great for interfacing with C++ libraries. https://github.com/drmeister/clasp https://github.com/drmeister/clasp
- pjmlp 9y agoThe biggest issue I see with Common Lisp is that the standard is stuck in time, lacking stuff like database providers, a common FFI or threading. It needs a review of the CL environments that survived to modern days and adopt the common extensions.
- jackdaniel 9y agoI think it is a pretty shallow view at standard. CL implementations grow and have agreed interfaces (or portability layers). A few examples: - sockets via usocket - threading via bordeaux-threads - metaobject protocol via closer-mop - foreign function interface via cffi all these are not mentioned in the standard at all, but are implemented and used in production environment. Having base standard and extensions which may be used portably (via portability layers) is better situation than having no standard (for instance python or ruby) and a reference implementation.
- pjmlp 9y agoWhich usually is what leads to feature expressions spaghetti. Also, it means that a Lisp newbie won't be aware of what are the best libraries that are portable across Lisps for such features. EDIT: typo correction (missing are)
- jackdaniel 9y agoFeature expressions shouldn't be used in normal applications, only in portability libraries. To use threads on any implementation which supports them (given it's supported by the recommended portability layer): > (ql:quickload 'bordeaux-threads) > (bt:make-thread (lambda () (sleep 1) (print "hijack"))) that's all, no feature expressions whatsoever. Quicklisp is a system manager (something similar to npm in sense that it helps you to download dependencies). Regarding best libraries: isn't that true for any language? Newbie doesn't know good libraries, because he is a newbie. He has to learn which libraries are good and which are bad. edit: and by each supported implementation I mean in fact all active complete Common Lisp implementations: ArmedBear, Allegro, clisp, Clozure, Corman, Embeddable, Man-Kai, LispWorks, Steel-Bank and Scieener.
- systems 9y agoone of the perceived (by outsiders) CL drawbacks, is the eco system if CL have a lot of libraries, it is not because CL have a large or active community, it is more because it existed for a long time so, what is honestly the reality of CL ecosystem, is quicklisp a solid part of this ecosystem, is it easy to find and install packaged compared to perl and python for example? do you think racket have a more reliable ecosystem?
- flavio81 9y ago> is quicklisp a solid part of this ecosystem, Yes, it is very popular. You can also, without Quicklisp, download manually the project and let ASDF do the rest of steps. > is it easy to find and install packaged compared to perl and python for example? There is this CL environment, Portacle (The Portable CL Environment) which you just download and immediately gives you (no more steps needed): - SBCL lisp implementation/compiler - Quicklisp - SLIME environment - Customized EMACS - and other nice tools. In any case, Quicklisp is easy to install as long as you have a modern ASDF version. Quicklisp is really easy to use, as easy as, say, PIP for Python.