Hacker News new | ask | show | jobs
by andi999 2233 days ago
I think I read this a while ago and tried to learn lisp (i didnt fully understand macros, only superficially). Anyway.

I think there are 2 kinds of 'powerful'. Yes, I can see that the Macrosystem is powerful. But in a sense the language seems 'overqualified but underskilled'. Let me explain: I basically need arrays for my work, array functions and fourier transformation (fft). I use python and i think it has much higher productivity then lisp on these fields (correct me if I am wrong).

Also while the macrosystem easily allows (and probably requires) to write your own DSL, this productivity boost does not scale easily if you have a lot of ppl working on the same codebase.

For Paul it didnt matter, it was two ppl only, and languages with comprehensive libraries didnt exist at that time. So if you have to build everything yourself (alone) then lisp is probably superior.

2 comments

For your first point: Yes, good quality domain-specific libraries go very far in allowing one to be productive. Lisp does not offer a good, general-purpose, integrated numerical computing environment (plotting, scientific functions, etc.) and as such wont be good for belting out scientific code. If you like DIY, then Lisp is wonderful to write scientific code in because it can compile to extremely fast code.

For FFTs in particular, Common Lisp has very good support for them [1, 2, 3]. For matrix arithmetic, there’s an up-and-coming library called MAGICL [4].

As for DSLs, there’s no problem using these on a team. Their utility does scale if the DSL is actually solving a problem.

[1] NAPA-FFT3 https://github.com/pkhuong/Napa-FFT3

[2] BORDEAUX-FFT https://github.com/ahefner/bordeaux-fft

[3] Patrick Stein’s FFT https://github.com/nklein/FFT

[4] MAGICL https://github.com/rigetti/magicl

Thanks. Just to clarify on the dsl remark: dsl work of course, but usually it is a two tier approach. First the dsl is designed and implemented, then the (other) team works with it on the main application. So far it looked to me (especially from Paul Grahams article) that in lisp usually these two phases are mixed, but i might misunderstand this.
That's really a library problem. On a cursory glance it seems Racket supports DFTs.
Isn't the whole point of Lisp to make everything a library problem?