4 ms·
>the world has been busily re-inventing (parts of) Common Lisp for 20 years There is a certain sleight of hand that every lisp advocate pulls when this convers
by Banana699 4y ago
>the world has been busily re-inventing (parts of) Common Lisp for 20 years
There is a certain sleight of hand that every lisp advocate pulls when this conversation comes : claiming that every single inspiration or language feature that is remotely related to lisp is "re-invention", with the additional implication that it's an inferior imitation.
APL, Algol60, ML, Smalltalk, Simula, Prolog, Perl, Ada, Erlang and Eiffel are all extremly influential languages that all modern languages (including Lisp, ironically) are imitating and re-inventing all the time. But it's always the lispers who are obsessed with who took ideas from them, you never see smalltalkers raving about how the rest of the world took JITs, MVC and most OOP from them, or MLers about how the rest of the world learned proper static typing and module systems from them. Only lisp is that special snowflake that the PL community, countless researchers and language implementers, have been stuck helplessly imitating since 1960 and failing.
"The thing about re-inventing the wheel is : you can actually do it better the second time"
- Paraphrased, allegedly from one of JSON creators in response to somebody telling them they are re-inventing XML.
-------
Among the endless "exclusive" features claimed for lisp are :
- Homoiconity: Which Mathematica does better, with its extremly expressive and diverse syntax that nonetheless all boils down to Lists in the end. Unlike Lisp which tries to force its inferior syntax on me as a "feature", Mathematica understands that concrete syntax is not abstract syntax, the former can be (indeed, needs to be in a high level language) rich and expressive, the latter can be spartan and pure. Also Elixir.
- Macros: Which countless languages does with a myriad of forms and functions. Some are : Elixir, Rust, Julia, Scala, and those are just the ones that call them "macros", AST manipulation and compile-time code reification are very general concepts that are called a lot of things in different languages. ("Templates" in Haskell, "Annotations and Annotation Processors" in Java and Groovy.)
- Dynamicity: Come on, Ruby can redefine the base language from underneath you.
- Image-Based Development: Fair enough, but I will politely point to Smalltalk and Erlang, and beg lispers to read some PL history before claiming that their programming languages is the O N L Y one to do so and so.
- The Condition System: Also fair, and this is the only one that is truly without analog in any other programming languages I know, but it's also only in Common Lisp, not scheme or Clojure or Arc or Racket or any other lisp dialect, and it doesn't meaningfully (as far as I know) depend on "Lisp" the language, what prevents anyone from implementing it in any language they like ? What's so "Lispy" about it exactly?
Lispers need to wake up to the fact that Lisp is not special in 2020. They needed to wake up to that fact since 2000, but better late than never I guess.
>the cognitive burden of figuring out whether to write x.f(z) or f(x,z) every single time they want to invoke f
huh ?
- lisper 4y ago> APL, Algol60, ML, Smalltalk, Simula, Prolog, Perl, Ada, Erlang and Eiffel are all extremly influential languages that all modern languages Of course. The reason I like Common Lisp is not because it has been influential. I like it because by my personal quality metric it got more things right than any other language currently in use. > you can actually do it better the second time Theoretically. But in practice all modern languages suck compared to CL with respect to my personal quality metric, which is that I want a language that imposes the minimal cognitive burden on me as a programmer. To me, making programming as easy as possible is the whole point of high level languages. If I were willing to work hard, I'd just write in assembly language. There have been a few improvement on CL: T. Oaklisp. Dylan. But they have all sunk into obscurity. > every single inspiration or language feature that is remotely related to lisp is "re-invention", with the additional implication that it's an inferior imitation. Yeah, well, if the shoe fits. The only real innovation in programming languages since Common Lisp is static type inference. > Ruby can redefine the base language from underneath you. Yeah, that is not necessarily a good thing. Also, Ruby can't change its surface syntax. Common Lisp can.
- Banana699 4y ago>The reason I like Common Lisp is not because it has been influential But that's not what I was saying, I wasn't saying that you should like those languages, I was saying that Common Lisp is not special compared to them and nobody is specifically "re-inventing" it, it's a pretty vanilla (by 2000s standards) language descended from a 1960 grandpa. >my personal quality metric How would that convince anyone who is not you ? >To me, making programming as easy as possible is the whole point of high level languages Lisp syntax fails spectacularly on this one, it's painful and tedious, it forces you think about the explicit nesting between structures, like how assembly forces you to explicitly think about data flow between instructions. In any sane programming language, you just write a+b, in lisp, it's (+ a b). A bizarre 1980s-calculator world where you have to think carefully about every operation and read it outloud. It can be gotten used to with experience off course, but it's not effortless, it's far from the language making it easy for you. The entire point of conrete syntax and grammars is that the compiler builds the syntax tree for you, you just lay out a nice and readable specification of it in the mathematics\english mixed notation that is most programming languages, and the parser infers all the dependencies in the implicit tree structure and builds it for you. Lisp inverts this relationship, making you into a human parser that translates your own ideas into its simplistic notation. S-Expression is a 1960s hack to simplifiy parsing. >The only real innovation in programming languages since Common Lisp is static type inference. This dismissal shows an astonishing ignorance of PL design and history. Haskell lets you design your own control structures with lazy evaluation. Perl6\Raku has first class support for BNF grammars built right into the language. Both languages doesn't treat operators as special and let you define arbitary unicode symbols as operators and control their precedence and associativity, enabling unparalled DSL development. OCaml has a module system that represents code as first class structs and runs arbitary functions to transform them at compile time. Ironically for the community that invented the "Blub Paradox", CL programmers have an unfortunate syndrom of the Blub Programmer. "CL is all I know, therefore CL is all I need and the most powerful language in existence". >Yeah, that is not necessarily a good thing I wasn't saying it's necessarily a good thing, I was saying it (and Python, and Groovy) beats Lisps in dynamicity, which was once (and sometimes still is) a common selling point that lisp advocates repeat. >Also, Ruby can't change its surface syntax. Common Lisp can. Plenty of others can, some with systems that are not inspired from lisp. I mentioned some of them in a point that you skipped right over.