3 ms·
Alas there are two schools -- those that consider Lisp to be a language with its cradle defined by JMC's "Recursive Functions of Symbolic Expressions and Their
by amszmidt 2y ago
Alas there are two schools -- those that consider Lisp to be a language with its cradle defined by JMC's "Recursive Functions of Symbolic Expressions and Their Computation by Machine" and descendants thereof (Lisp1.5, MACLISP, Lisp Machine Lisp, Common Lisp, Emacs Lisp, ...). Sort of like with C, where Objective-C is clearly a "C", similar with C++.
Then there is another school which considers the meta programability, REPL, syntax, ... the more philosophical notion of Lisp (Scheme, Clojure, Racket, Arc, ...). Some have no similarity with Lisp 1.5 descendants, and only share a superficial similarity.
Lisp seems to be the only language where people really want to argue that they are a Lisp, nobody tries to argue that Javascript, Java, PHP etc are "a C" (similar syntax? semantics?). Does it even matter what is "a Lisp"?
The barrier for Lisp (be it one school or the other) is about as high as Python, you type the name of the implementation and do stuff. CL specifically doesn't say anything interesting about the REPL (e.g., SBCL doesn't even allow by default to navigate forms on the command line), so to say that it is "powerful" is very misleading. Similar about the requirement of Emacs, you can use anything you like.
- samatman 2y ago> Lisp seems to be the only language where people really want to argue that they are a Lisp, nobody tries to argue that Javascript, Java, PHP etc are "a C" (similar syntax? semantics?). Does it even matter what is "a Lisp"? Lisp is far from being the only family of languages. There's the APL family, with k, j, q. There are the many Forths, to the point where it's been quipped that the language has more implementations than users. The C family rather clearly includes C++, Objective C, and D, as well as C itself (Swift and Rust are arguable here). I wouldn't put the three languages you named in the C family, but they're all Algols in a manner of speaking. At least, I routinely describe them that way, and people tend to understand what I mean. The reason no one argues that those languages are in the C family is just the broad and informal consensus that ABI compatibility is the most important feature, rather than syntax. Any time there's taxonomy going on, you'll have lumpers and splitters. I'm a lumper where Lisps are concerned. I would call Dylan and Julia Lisps, and have done so. If anything, what makes Lisp unique here is a faction of Common Lisp users who feel strongly that the only Lisp is Common, and historical variants which lead up to the Hyperspec (elisp being grandfathered in on that basis). I've never entirely understood this, but I don't let it bother me. That appears to be the source of the argument you reference in the section of your post I've quoted.
- ggm 2y agoYou took clause #1 .. family of language and ignored clause #2 .. where people argue about admissability into the family. The point is not "only family" its "only family, where people argue about being in the family" I think it's actually not the only language family where people argue about admission. But that doesn't seem to be your point. Your point seems to be "there are other families"
- samatman 2y agoMy conclusion, rather, was that the Lisp family is the only family where people argue against languages belonging to that family. Your statement was that it's the only family where people argue for languages belonging to it. Much of my reply was a response to the other clause I quoted, about no one arguing that JS, Java, and PHP, are "a C". I pointed out that the reason for that is simply that no one thinks of them that way, superficial syntax resemblances aside. There is in fact a C family, but it happens that you picked three languages where neither users of C family languages, nor users of the languages you mention, would argue that those three are a part of it. You'll note that arguing for vs against is not a disagreement: if someone is arguing against inclusion, that rather implies that someone is is arguing for it. Rather, your last sentence posed a question, based on your observation. My reply, which explains why there's such an argument to begin with, was intended to answer it.
- kazinator 2y agoDoes it matter what is a Lisp? We can answer it like this. Yes, it matters in the following way. New languages being touted as Lisps, which deviate from the Lisp characteristics, cause confusion. For instance, nowadays you read comments like: "I tried Lisp for a while but couldn't get used to doing everything using immutable sequences, nice as the pure functional paradigm might be conceptually". Obviously, that person is referring to Clojure, and since Clojure is promoted as a Lisp, they believe that all that is true of Clojure is true of Lisp. People believe such misleading statements which is then harmful to the real Lisps. Someone out there will avoid using Common Lisp believing that they would be required to do everything using immutable sequences or hashes.
- kazinator 2y agoThere is a third school: those who consider "Lisp" to refer to, in a historic context, a specific old language that is no longer in use (which was actually called LISP), and in a modern context to a fairly diverse family of languages. People don't argue whether Javascript is "a C". However, people do argue whether GNU C is C. Some pedants insist that only ISO C is C and that, for instance, GNU extensions like nested functions are not C. (And are off topic in the usenet newsgroup comp.lang.c.) To me, C++ is a dialect of C. In fact, you can write production code in a language that compiles as either C or C++ and behaves the same way, with similar executable size and performance. When you do that, there are obviously C++ features you cannot use, but also C features you cannot use.
- anthk 2y ago>dialect Not true from long ago. By far, that's statement it's pretty wrong. You will get zillions of bugs and compilation errors in both ways.
- kazinator 2y agoI mean, say, draft C23 and C++20 are still dialects. There is a large subset that is mutually intelligible and useful for production work. C23 is closer to C++ in one small way: () is now a prototyped parameter list, meaning the same as (void). Thus if you want to program in a common C23/C++ dialect, you can drop the (void) kludge now.