Top
Best
New

Posted by ska80 4/11/2025

Why I Program in Lisp(funcall.blogspot.com)
286 points | 273 commentspage 3
damnitbuilds 4/11/2025|
"properly working lambda expressions were only available in Lisp until recently."

until -> since

JadeNB 4/11/2025||
> "properly working lambda expressions were only available in Lisp until recently."

> until -> since

I think "only since recently" is not standard English, but, even if it were, I think it would change the intended meaning to say that they were not available in Lisp until recently, the opposite of what was intended. I find it clearer to move the "only": "were available only in Lisp until recently."

BalinKing 4/11/2025|||
Personally, I'd probably move "until recently" to the front: "Until recently, properly working lambda expressions were only available in Lisp."
damnitbuilds 4/11/2025||
Sorry, I did indeed misunderstand the sentence due to its phrasing. I cannot edit my comment for some reason.

I like your fix the most.

mikelevins 4/11/2025|||
It's perfectly good and idiomatic English, but it's an ambiguous formation and your suggested edit does clarify it.
JadeNB 4/11/2025||
I agree that "properly working lambda expressions were only available in Lisp until recently" is perfectly idiomatic, but easily misunderstood, English. I believe that the suggested fix "properly working lambda expressions were only available in Lisp since recently," which is what I was responding to, is not idiomatic. Claims about what is and isn't idiomatic aren't really subject to definitive proof either way, but it doesn't matter, because the suggester now agrees that it is not what was meant (https://news.ycombinator.com/item?id=43653723).
mikelevins 4/11/2025||
To be clear, the construction I’m endorsing is: "were available only in Lisp until recently", which is the construction that my editors typically proposed for similarly ambiguous deployments of "only". The ambiguity in the original placement is that it could be interpreted as only available as opposed to available and also something else. My editors always wanted it to be clear exactly what the "only" constrains.
argentier 4/11/2025||
"properly working lambda expressions were available only in lisp until recently."
zoky 4/11/2025||
I’m not really familiar with Lisp, but from glancing at this article it seems like all of these are really good arguments for programming in Ruby (my language of choice). Easily predictable syntax, simple substitution between variables and method calls, dynamic typing that provides ad hoc polymorphism… these are all prominent features of Ruby that are much clunkier in Python, JavaScript, or really any other commonly used language that I can think of.

Lisp is on my list of languages to learn someday, but I’ve already tried to pick up Haskell, and while I did enjoy it and have nothing but respect for the language, I ultimately abandoned it because it was just too time-consuming for me to use on a day-to-day basis. Although I definitely got something out of learning to program in a purely functional language, and in fact feel like learning Haskell made me a much better Ruby programmer.

hxegon 4/11/2025||
I have about 6 years of ruby experience and if you're saying that ruby has "easily predictable syntax"...

You really should try lisp. I liked clojure a lot coming from ruby because it has a lot of nice ergonomics other lisps lack. I think youd get a lot out of it.

shadowgovt 4/11/2025||
Ruby and LISP have a lot of overlap. To my money, LISP is a little more predictable because the polymorphic nature of the language itself is always in your face; you know that you're always staring at a list, and you have no idea without context whether that list is being evaluated at runtime, is literal, or is the body of a macro.

Ruby has all those features but (to my personal taste) makes it less obvious that things are that wilding.

(But in both languages I get to play the game "Where the hell is this function or variable defined?" way more often than I want to. There are some advantages to languages that have a strict rule about modular encapsulation and requiring almost everything into the current context... With Rails, in particular, I find it hard to understand other people's code because I never know if a given symbol was defined in another file in the codebase, defined in a library, or magicked into being by doing string transformations on a data source... In C++, I have to rely on grep a lot to find definitions, but in Ruby on Rails not even grep is likely to find me the answer I want! Common LISP is similarly flexible with a lot of common library functions that magick new symbols into existence, but the codebases I work on in LISP aren't as large as the Ruby on Rails codebases I touch, so it bites me less).

speedbird 4/11/2025||
Go back to the source, use Smalltalk in a nice environment like VisualWorks and get all that built in :-)
rjsw 4/11/2025|||
Common Lisp has compilers that produce fast code.
shadowgovt 4/11/2025||
On this topic: My absolute favorite Common Lisp special operator is `(the`. Usage, `(the value-type form`, as in `(the integer (do-a-bunch-of-math))`.

At first glance, it looks like your strong-typing tool. And it can be. You can build a static analyzer that will match, as best it can, the type of the form to the value-type and throw errors if they don't match. It can also be a runtime check; the runtime is allowed to treat `the` as an assert and throw an error if there's a mismatch.

But what the spec actually says is that it's a special operator that does nothing but return the evaluation of the form if the form's value is of the right type and the behavior is undefined otherwise. So relative to, say, C++, it's a clean entrypoint for undefined behavior; it signals to a Lisp compiler or interpreter "Hey, the programmer allows you to do shenanigans here to make the code go faster. Throw away the runtime type identifier, re-represent the data in a faster bit-pattern, slam this value into functions without runtime checks, assume particular optimizations will succeed, paint it red to make it go fasta... Just, go nuts."

cess11 4/11/2025||
If you want something similar to Ruby but more functional, try Elixir. The similarities are superficial but might be enough to ease you in.

Haskell is weird. You can express well defined problems with relative ease and clarity, but performance can be kind of wonky and there's a lot more ceremony than your typical Lisp or Scheme or close relative of those. F# can give you a more lispish experience with a threshold about as low as Haskell, but comes with the close ties to an atrocious corporation and similar to Clojure it's not exactly a first class citizen in the environment.

Building stuff in Lisp-likes typically don't entail the double programming languages of the primary one and a second one to program the type system, in that way they're convenient in a way similar to Ruby. I like the parens and how they explicitly delimit portions that quite closely relate to the AST-step in compilation or whatever the interpreter sees, it helps with moving things around and molding the code quickly.

i_love_retros 4/11/2025|
Given that code is mostly written by LLMs now (or will be soon) isn't it better to just use the best language that fits these requirements:

- LLM well trained on it. - Easy for human team to review. - Meets performance requirements.

Prob not lisp?

worthless-trash 4/11/2025||
Llm content is trained in popularity. If we use that as a metric there will never be any improvements or changes again.
i_love_retros 4/19/2025||
Who cares, in ten years the llm will output machine code
elllg 4/11/2025||
how is that anywhere close to a given?