Most active commenters
  • epolanski(3)
  • fiddlerwoaroof(3)

←back to thread

141 points winkywooster | 15 comments | | HN request time: 0.879s | source | bottom
1. epolanski ◴[] No.40217466[source]
> Lisps have great control over what happens at compile-time, which lets you do incredible things.

> Lisp programmers have struggled ever since it was invented to explain why this is so powerful and why this has a major impact on simplifying software development

I've written some Common Lisp, Scheme, Racket.

I like them.

But what op defines as a feature is actually what kills all those lisps but Clojure where macro abuse is rare.

Everybody implementing their abstractions, every library implementing their own language, I like those features, macros are fun, but it just doesn't scale neither in open source and even less at work.

Haskell to some extent too suffers the same issue, simple Haskell is nowadays a dead project, but every single project has different language extensions, syntax, etc..

I feel like Lisp and Haskell attract people that love programming more than shipping code.

Which is why at the end of the day, php has more killer software than all those languages combined.

replies(5): >>40217975 #>>40218227 #>>40218333 #>>40220555 #>>40221174 #
2. fiddlerwoaroof ◴[] No.40217975[source]
This is one of those perpetual myths about macros. Ruby on Rails metaprogramming is often harder to debug than macros in Common Lisp. Flink and Spark work by generating and loading Java code at runtime (macros) but, since Java has no language-level support for macros, the generated code is very hard to inspect and debug.

What killed most lisps was the AI Winter and the concurrent drying up of DARPA funding.

replies(1): >>40218437 #
3. ww520 ◴[] No.40218227[source]
For compile time control and meta programming, I found Zig's comptime system to be the best. It blends with the regular syntax seamlessly and solves several problems at the same time. It's one of the best things came out of language design in recent years.
4. fr4nkr ◴[] No.40218333[source]
I've used Lisps on and off for a decade or so, and my experience with it is pretty much in line with the Grammarly devs' summary: misuse of macros is one of those things people just assume is a major problem, but in reality is quite rare, even in cases like Emacs Lisp where most packages are developed by just one person. Lisp is not Perl, its users do not create spaghetti mazes for fun.
5. epolanski ◴[] No.40218437[source]
I don't think I've expressed myself well.

When I say software at scale I mean:

- going on GitHub opening a file and understanding what's happening

- reviewing a PR and figuring out stuff without requiring an ide

- having easy onboarding with devs already accustomed to a base language and its patterns

Java, C, TypeScript, Scala, Kotlin, etc. Pretty much all major languages offer this: less power but much less ambiguity and mental overhead.

Lisps (with a minor exception for clojure) and Haskell are just not those languages.

Which, again, is why all of those languages produced very little software worth of mentioning for decades.

replies(5): >>40218462 #>>40219416 #>>40219972 #>>40221301 #>>40230977 #
6. fiddlerwoaroof ◴[] No.40218462{3}[source]
And this is just not true: I’ve worked on large lisp programs in various situations with minimal documentation and done just fine.
replies(1): >>40223479 #
7. jimbokun ◴[] No.40219416{3}[source]
Scala???

The language that never met an abstraction it didn’t immediately incorporate into itself?

8. fulafel ◴[] No.40219972{3}[source]
There's a place for languages that are the COBOL of their niche, yes. Depending on how you look at it, they are DSLs too.

Javascript in the browser is actually an interesting case here. (And after Javascript spralwed out... ClojureScript is the nicest way to write React apps)

9. lispm ◴[] No.40220555[source]
> Everybody implementing their abstractions, every library implementing their own language

In Lisp one can extend the language syntax. One does not need to implement a new language. For example the Common Lisp Object System adds operators like DEFCLASS, DEFMETHOD, DEFGENERIC, ... in addition to already existing operators like DEFUN, DEFSTRUCT, DEFTYPE, DEFPARAMETER, ...

Thus the language can be incrementally extended, instead of using a completely new language.

The CLOS macros are used by many programmers, they were standardized, documented and implemented.

As every form of abstraction, syntactic abstraction needs to be learned and requires extra work. Lisp was from the start developed to enable such things, and its early form of that applied to Lisp itself were the Lisp interpreter evaluating s-expressions, FEXPRs (procedured receiving unevaluated arguments) and in 1962 macros.

> I feel like Lisp and Haskell attract people that love programming more than shipping code.

One of the purposes of Lisp was to implement new ideas: like computing with mathematical formulas (-> Macsyma and earlier attempts), computing theorems (-> ACL2 and earlier attempts), ... This ability to support experimentation in R&D (actors, rule-based systems, frame systems, ...) was always a part of the language community.

If we look at the surviving commercial systems (Allegro CL and LispWorks), they still support this feature set.

Clojure was developed as a Lisp-inspired functional language with deep Java/JVM integration to support enterprise programming for people who were tired of programming in Java. That's fine. But the advice then was to not utilize the full power of Lisp (syntactic abstractions), to address the fear of unmaintainable software, while at the same time not using various features of Lisp (like gradually typed implementations of Lisp like SBCL) which helps to write robust software.

Generally Lisp has a broader outlook. It ran on an experimental spacecraft, it powered autonomous robots inspecting pipelines, it was the base for early research in computing (-> Interlisp), it ran on calculators (HP RPL), it supported children education (Logo), it's used to schedule telescope operations (-> Hubble and James Webb), it is used to schedule airline/airport operations, ...

> php has more killer software than all those languages combined.

If we research for ground breaking software, then I bet over the long history of Lisp there were a lot more in many more diverse domains written in Lisp

Lisp has been applied to develop airplane parts. BOEING and Airbus used to be Lisp users (they might be still use it for older planes). ICAD was the first parametric CAD system. ICAD used macros to describe physical objects and their relationships. This was used to construct turbines, wings, and a lot of other parts of Airplanes.

If you look into the long history of Lisp, it has been successfully applied in domains PHP has never seen. Sometimes really crazy stuff, like the first virtual military troop training systems, where the US army deployed a few extensive training and simulation systems, where the virtual worlds were controlled & generated by a Lisp system and rendered by multiple graphics engines for each training simulator. In the early 80s. -> https://en.wikipedia.org/wiki/SIMNET

That's nothing like PHP, but it was ground breaking in its domain. PHP had a different purpose: it was developed to make it simple to write&generate web pages in a large scale. That's a huge domain, but that was not what Lisp was developed for.

Btw., we see a bunch of new languages which now also support some form of macros. A recent example is Rust.

10. defyonce ◴[] No.40221174[source]
> I feel like Lisp and Haskell attract people that love programming more than shipping code.

this! but I find Clojure incredibly pragmatic, we grow our codebase, ship things, just the line of business work with Postgres/Clojure and Rum(React) on frontend.

We do it with super small team, where one person owns the entire sub system

replies(1): >>40221238 #
11. refset ◴[] No.40221238[source]
This is how I see things also. Clojure is extremely practical and naturally attracts people that want to ship products.

The "Figma OSS Alternative" post that's also on the HN homepage right now doesn't mention Clojure anywhere (no comments about it either!), but Penpot is clearly also yet another app successfully shipped using Clojure: https://github.com/penpot/penpot

12. tome ◴[] No.40221301{3}[source]
That's interesting, because to hit all those points I'd prefer Haskell! I've never found another language where it's so easy to jump into an unfamiliar codebase, or to come back to code I wrote years ago and get started again immediately. By contrast, I don't think I could read idiomatic Java without requiring an IDE to help me navigate.
13. epolanski ◴[] No.40223479{4}[source]
That's not a strong argument.

That's like saying world hunger does not exist because you had lasagna for dinner.

replies(1): >>40227639 #
14. fiddlerwoaroof ◴[] No.40227639{5}[source]
How about the existence of major pieces of software written in Common Lisp? For example, American Express fraud detection was and maybe still is done by a CL program. Google Flights uses ITA Software’s CL flight search system. Emacs is widely used and contains a lot of lisp.

I think basically no languages have failed or succeeded for technical reasons: generally, marketing and inertia explains the tech stack better than DX or theoretical superiority.

15. kazinator ◴[] No.40230977{3}[source]
Of all things, did you just lob an accusation of ambiguity at Lisp?