TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

The Tragedy of the Common Lisp, Or, Why Large Languages Explode

144 pointsby error54almost 10 years ago

20 comments

lisperalmost 10 years ago
One cool thing about Lisp is that you can easily embed new languages in it, and those languages can be small and beautiful. For example, I have a Python-esque FOR macro that uses an iterator protocol, and a universal binding macro that subsumes all of Common Lisp&#x27;s binding constructs (LET, LET*, LABELS, FLET, MULTIPLE-VALUE-BIND, etc.) So for me, Common Lisp has actually shrunk without losing any functionality. This is not possible in languages without macros. Such languages are indeed doomed to either grow forever, or change in non-backwards-compatible ways (e.g. Python3). But with macros you can shrink a language as well as grow it. This is one of the reasons Common Lisp continues to thrive.<p>[UPDATE]: You can find my code here: <a href="https:&#x2F;&#x2F;github.com&#x2F;rongarret&#x2F;ergolib" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;rongarret&#x2F;ergolib</a><p>Also, I forgot to mention another language-shrinker included in that library: REF. REF is a universal de-referencer that subsumes NTH, ELT, SLOT-VALUE, GETHASH and probably a few other things that I can&#x27;t remember right now. It also lets you build abstract associative maps (a.k.a. dictionaries) with interchangeable implementations (see the DICTIONARY module), which lets you get rid of ASSOC and GETF.
评论 #9741218 未加载
评论 #9741323 未加载
评论 #9743164 未加载
评论 #9743340 未加载
评论 #9741391 未加载
hydandataalmost 10 years ago
There is a great book about Lisp from Christian Queinnec titled &quot;Lisp in Small Pieces&quot; or LISP. Here is a little excerpt from it.<p>&quot;There are subjects treated here that can be appreciated only if you make an effort proportional to their innate difficulty. To harken back to something like the language of courtly love in medieval France, there are certain objects of our affection that reveal their beauty and charm only when we make a chivalrous but determined assault on their defenses; they remain impregnable if we don&#x27;t lay siege to the fortress of their inherent complexity. In that respect, the study of programming languages is a discipline that demands the mastery of tools, such as the lambda calculus and denotational semantics. While the design of this book will gradually take you from one topic to another in an orderly and logical way, it can&#x27;t eliminate all effort on your part.&quot;<p>Lisp has some of the best literature around of any programming language. Anybody who really cares about craft of programming should make use of wisdom therein.
评论 #9743062 未加载
davelnewtonalmost 10 years ago
It was painful watching Common Lisp happen; too many competing interests, and commercial stakes. Unfortunately languages went a different direction. (I also mourn Smalltalk&#x27;s &quot;loss&quot;, but Java had much more money coming into it.)<p>Lisp50 went into this somewhat (<a href="http:&#x2F;&#x2F;www.nhplace.com&#x2F;kent&#x2F;Papers&#x2F;cl-untold-story.html" rel="nofollow">http:&#x2F;&#x2F;www.nhplace.com&#x2F;kent&#x2F;Papers&#x2F;cl-untold-story.html</a>) and, unrelated, was a freakin&#x27; awesome good time. I sat next to Guy Steele for one talk but was too in awe to even say anything.<p>(Anecdote about same: I IMed a friend and said &quot;I&#x27;m sitting next to Guy Steele&quot; and he replied &quot;Cool, ask him who Guy Steele is.&quot; Damn kids.
评论 #9741179 未加载
kazinatoralmost 10 years ago
Though the 1994 ANSI standard is 1153 pages, Common Lisp somehow doesn&#x27;t feel large. A lot of it is library pieces that can be understood more or less on their own and work independently. Somehow you can know the language well, without reading 1153 pages cover to cover. If you see anything in someone&#x27;s code which is standard, but which you don&#x27;t know well (or at all), it&#x27;s not going to throw you a big curve ball.<p>C is a &quot;small&quot; language and is pushing 700 pages now.<p>Projects written using small languages tend to use lots of extensions. So do projects in larger languages, too; they use some subset of the core language, probably a small one, and then other libs which address problems not covered in the language at all.<p>How big is Perl? How much of CPAN should be included in that measurement? If the answer is &quot;none&quot;, how realistic is that? Do you know Perl if you don&#x27;t know any CPAN module?<p>How about Scheme? The base standard is small. But then there are SRFI&#x27;s. It seems disingenuous not to count htem. And then there are implementations and their environments and extensions, which projects depend on. What better represents &quot;Scheme size&quot;? The R6RS document, or some measure of the size of, say, Racket?
评论 #9745211 未加载
PaulHoulealmost 10 years ago
In the case of Java it is not that Java is a &quot;large language&quot;, it is that to get anything useful done with Java you need to know about Maven and Spring and Log4J and Apache Commons Logging and SLF4J (because if you&#x27;re using a lot of libraries surely all of those will be in use.)<p>That is, it is the complexity of the ecosystem, not of the language.
评论 #9741443 未加载
评论 #9741069 未加载
评论 #9742018 未加载
评论 #9741576 未加载
评论 #9741776 未加载
评论 #9741389 未加载
orthecreedencealmost 10 years ago
I think lisp could benefit from a small core and building out a standard library. You could pack all the features it <i>needs</i> (packaging, lexical&#x2F;dynamic scoping (defvar), let&#x2F;lambda, defun&#x2F;defmacro, multiple values (via values, multiple-value-call), setf (w&#x2F; setf expansion), simple arithmetic, declare&#x2F;declaim&#x2F;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.<p>I think this would clean things up a lot, still preserve the spec (aside from documenting what&#x27;s in which libs), and make things more approachable.<p>Shoving everything into the &quot;common-lisp&quot; package <i>works</i> but it&#x27;s cumbersome and you have to have the <i>entire language</i> sitting there to use anything.
评论 #9740966 未加载
评论 #9741027 未加载
评论 #9741714 未加载
chubotalmost 10 years ago
I&#x27;m glad someone said this. I&#x27;m an occasional JavaScript programmer, and I looked over ES6 last night and was surprised by how large it&#x27;s become. And I learned that ES7 is already on the way.<p>That said, most of the features seem nice, and many are borrowed from stable languages like Python, so perhaps it&#x27;s not too much. I&#x27;ll have to try it and see.<p>It made me wonder what Crockford is up to, and what he thinks of this.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;lukehoban&#x2F;es6features" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;lukehoban&#x2F;es6features</a><p><a href="http:&#x2F;&#x2F;es6-features.org&#x2F;" rel="nofollow">http:&#x2F;&#x2F;es6-features.org&#x2F;</a>
评论 #9741989 未加载
评论 #9742872 未加载
评论 #9742951 未加载
评论 #9741644 未加载
gongadoralmost 10 years ago
The plan for Common Lisp originally was to have a &quot;core&quot; and a standard library. From Daniel Weinreb&#x27;s blog post &quot;Complaints I’m Seeing About Common Lisp&quot;:<p><pre><code> It’s just too big. Actually, the real problem is that the core of the language is not cleanly separated from the built-in libraries. The Common Lisp designers had originally intended to do this separation, but there wasn’t time enough. </code></pre> <a href="https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20100706204555&#x2F;http:&#x2F;&#x2F;danweinreb.org&#x2F;blog&#x2F;complaints-im-seeing-about-common-lisp" rel="nofollow">https:&#x2F;&#x2F;web.archive.org&#x2F;web&#x2F;20100706204555&#x2F;http:&#x2F;&#x2F;danweinreb...</a><p>(Daniel Weinreb was, among other things, one the designers of Common Lisp.)<p>Zach Beane has some more information on this at <a href="https:&#x2F;&#x2F;xach.livejournal.com&#x2F;319717.html" rel="nofollow">https:&#x2F;&#x2F;xach.livejournal.com&#x2F;319717.html</a><p>EDIT: &quot;time enough&quot;, in the quote, may seem strange; after all, work began in 1984 and the standard was finalized in 1994. But remember that many stakeholders were companies with jobs to do, and they had to assign employees to the design&#x2F;standardization work at real costs for said companies.
braythwaytalmost 10 years ago
I like the author’s remarks and philosophy about keeping JavaScript small, but I thought the opening was remarkably uncharitable. The specific person and the specific feature are quite irrelevant to the point he’s making here.<p>I am left with some admiration for his goals, but also a great deal of trepidation about ever suggesting anything or even talking about JavScript.next. Will I be the next one called out by name if I make the mistake of asking whether traits might be a good addition to JavaScript?
评论 #9749285 未加载
Grue3almost 10 years ago
Interestingly hardly anybody uses Algol, Smalltalk, Pascal and early Scheme anymore, while people still use Common Lisp. Perhaps &quot;being small and beautiful&quot; is actually a bad thing for a programming language?
Animatsalmost 10 years ago
I didn&#x27;t realize that Scheme had become bloated. I haven&#x27;t looked at it in years, and thought it was still the basic language described in SICP.
评论 #9741980 未加载
newuser88273almost 10 years ago
Common Lisp actually has a core of a mere thirteen &quot;special operators&quot;. You can think of everything else as standard library.
TazeTSchnitzelalmost 10 years ago
ECMAScript 6 is a shame, there&#x27;s a lot of stuff added which is unnecessary.<p>&quot;let&quot; is unnecessary. JS now has two kinds of variable scoping! &quot;var&quot;&#x27;s hoisting is annoying, sure, but we don&#x27;t need two kinds of variable scope. If you want to scope something to a block, you can just use an IIFE.<p>&quot;class&quot; is unnecessary at best. JavaScript has a bunch of ways of constructing objects to choose from, and that&#x27;s not a problem. Why lock users into one paradigm, and obscure what&#x27;s actually happening underneath? This will just confuse people when they have to deal with code that doesn&#x27;t use &quot;class&quot; syntax or the OOP model it presents.<p>Object property shorthand is confusing. Why the hell is {bar} equivalent to {bar: bar}? Isn&#x27;t that a set literal (Python, math)? Why isn&#x27;t there the colon, if it&#x27;s an object? What the hell? Try explaining that to newcomers.<p>Computed property names looks weird and is misleading. You&#x27;d logically expect {[1+1]:2} to be an object with an Array (coërced to string?) key, because [] is an Array literal. But instead it means &quot;compute this expression&quot;. In which case, why isn&#x27;t it ()? That&#x27;s what you&#x27;d intuitively expect. I&#x27;ve tried to use () before and was surprised it didn&#x27;t work, even.<p>Method properties, e.g. { foo(a,b) { ... } }, are unnecessary given =&gt; functions.<p>All that being said, I think ES6 has some quite positive additions. Maps, sets, tail-call elimination, =&gt;, modules and symbols are all very important and useful features JavaScript really needed.
评论 #9743627 未加载
评论 #9743268 未加载
pjmlpalmost 10 years ago
The common fallacy about simple languages.<p>Yes the language might be simple to understand, but then the result is the complexity lands in the shoulders of developers and an ever increasing library of workarounds to compensate for missing features.<p>Hence why every simple language that achieves mainstream use, ends up becoming like the ones it intended to replace.
jaunkstalmost 10 years ago
My prespective could be very wrong but isn&#x27;t this a sort of quality is in the eye of the beholder issue. I get building a silo isn&#x27;t very beneficial to another. But isn&#x27;t building monolithic library just as destructive. I don&#x27;t think anything is perfect even if it&#x27;s perfectly executed.
ericbbalmost 10 years ago
Here&#x27;s a title for a rebuttal in case anybody wants to write it. ;)<p>The Tragedy of ISLISP, Or, Why Small Languages Implode
upofadownalmost 10 years ago
Whenever I encounter people arguing about Python3 I am reminded that I still miss Python1.
raymondhalmost 10 years ago
Python also suffering in this regard. It has moved from being &quot;a language that fits in your head&quot; to a language where very few people on the planet know most of what&#x27;s in it.
a8da6b0c91dalmost 10 years ago
You hear this &quot;safe subset&quot; thing about the syntax rich languages all the time and I really don&#x27;t get it. I really do use all of C++. There are some pseudo deprecated bits and some extremely esoteric bits I don&#x27;t hit, but beyond that I do wind up jogging most pieces of the language and standard library. Pretty much the same with my usage of perl. I&#x27;ve never written a source filter or a format, but otherwise I use a lot of the &quot;niche&quot; features regularly to great effect.<p>This whole sentiment comes from people who work on large rotating teams with enough inexperienced people, I guess? Sorry, learning a language properly takes a couple years or more. The features aren&#x27;t wrong or bad, your team just doesn&#x27;t know the tools well enough. You can&#x27;t play modal jazz with the big boys until you can do your scales. I guess have fun doing your pop medleys with &quot;simple&quot; languages.
dschiptsovalmost 10 years ago
The Arc language (which runs this site) is a remarkable attempt to &quot;fix&quot; what went wrong with CL. It lacks a decent runtime and native code compiler (it offloads everything to mzscheme, the way clojure did to JRE) but it is already more than a proof of concept.<p>The problem is that there is no more DoD or other grants for creating new Lisps anymore (particularly due to Java mass hysteria and prevalence of packer&#x27;s mentality).<p>BTW, making something similar to SBCL (everything written in itself, except for a tiny kernel written in C) for Arc (a core language, without the kitchen sink syndrome) is of moderate difficulty compared to meaningless piling up of more and more of Java crap.