Responses to common criticisms of Lisp languages?

I think in practice the differences aren't that big. In many "conventional" languages much less gets deprecated than you might think, at least that's my experience. You could even argue that because language features are hard to change, they're more thought out before they're added.

Also, in Racket many APIs stay in the standard library because of backward compatibility, even though technically it would be much easier to change/replace these features.

That's actually my main motivation to use Scheme or Racket. :slight_smile: It's really fascinating how programming in the language feels and I enjoy it. But for "real" programs I'd usually choose a different programming language, mostly because of better libraries and tools.

In the end, I think, it's different tradeoffs for different situations.

1 Like

I spent about four years in the '80s with Interlisp and Zetalisp. They were really fun years. Now that I'm retired I'm still coding for fun and I started to feel a desire for Lisp. Currently I'm playing with Racket.

Here's what I remember and desire:

  • Macros give me the ability to build another language in which to solve specific problems.
  • Lisp code can self-modify by constructing executable lists and using eval.
  • An error can be fixed on the fly and code restarted from where the error occurred.

Let me go ahead and say that my favorite languages are the ones that give me enough rope to hang myself. I'm all for languages such as dart, rust, and clojure that attempt make errors difficult or impossible, but I'm not working any more so I want coding to be fun. There, I've said it, and I'm not ashamed. :stuck_out_tongue_winking_eye:

The third bullet is the hardest to come by now. I used Interlisp and Zetalisp which ran on custom hardware in configurations where everything was written in Lisp. Modern IDEs such as VSCode and the various JetBrains offerings do an admirable job of providing debugging for conventional languages but less so for Lisp IMHO. Still, DrRacket in teaching mode does pretty well, and it's written in Racket.

And yes, IMHO a large part of the Lisp magic is the fun of using it.

2 Likes

To add another answer to my own question:

A few folks have mentioned Julia, but what you didn't mention is that there's literally an entire Lisp engine baked into it

That's pretty unique to Common Lisp, though I think MIT Scheme has similar functionality.

It's "only" used for parsing though.

Apart from Lisp, here's something on metaprogramming in Julia.

2 Likes

Typed Scheme mentions the possibility of incrementai typing, but it's not really practical. Yes, you can convert an entire source code file from Racket to Typed Racket, and thus convert a large program one file at a time.

But you can't convert one file incrementaily. It's all or nothing.
There is a feature in typed Racket (with-type in 10 Typed Regions) that allows you to have an untyped regular Racket expression in typed Racket code, but there is nothing allowing you to mix functins in regular Racket withe functions in typed Racket within one file.

And you may well have to type-check part of the code before you know enough about it to be able to figure out types for the rest.

It would be useful also to be able to embed a typed Racket expression within an untyped Racket program.

-- hendrik

with-type is for including Typed Racket code inside normal untyped Racket. You can also use submodules with different base languages.

1 Like

with-type is for including Typed Racket code inside normal untyped Racket. You can also use submodules with different base languages.

Yes, I stated that backwards. My mistake.

I still say the features available aren't enough to allow wixing typed and untyped code within a source file.

Splitting a source file into several and mving definitions gradually from one to the other isn't practical with many large files. especially, as I said, when you need the support of type-checking as you determine the types of the functions, reqriting them as necessary. Untyped programs ore often somewhat careless about type distintions, after all.

-- hendrik

What do You think about Forth?

bash is C REPL. Perl should have been a better bash... And it is Stringly Typed!!

Of what use are C Header Files? A fitting punishment for anyone that will allow them?
"cc Linux.c" should suffice! It should be obvious!!

Re: Continuation; HowTo get Return Address as first parameter, that it is, in C?!
HowTo get the Activation Record of a subroutine?! "subr1.AR"?

One thing that hasn’t been mentioned much is personal preference.

There is an aesthetic I find beautiful in the underlying simplicity of lisps. It’s the same appreciation I have for a well-written book or piece of art.

That being said, when complexity starts coming in the beauty can fade. My job gives me flexibility to use any language I want, and I have used Racket for several things. The moment I need to do IO or work with vectors or dictionaries (which is pretty much everything I do), then many other languages start having a better aesthetic to me.

There are a lot of technical and historical reasons that lisps have such a good reputation, but a lot of times the problem being solved can be done more efficiently using other tools. I can easily see how someone who does the kind of work I do would look at a lisp and not understand the love some people have for it or think broadly enough to see domains where it is a superior tool.

Tl;Dr: people are different, including their personal preferences, sense of aesthetic, problems they need to solve, etc. You don’t need to defend lisps. If you like them and can do useful stuff, who cares what others think.

5 Likes