Like I suggested elsewhere, it's worth not dismissing this from this one small section in the docs. While I don't sympathize with this use case, this is a fun Lisp passion project with the kind of oddities you just don't see enough of these days. And refreshingly not vibe-coded, every single piece of documentation is quirky and clearly written by a human. Love it.
But the worst part is that the language itself is pretty lacking when you need string or calculus functions. You then download a ton of libraries to do stuff that is usually part of any basic programming language.
I am always taking suggestions for new things to add to the standard library! Recent additions include set union/intersection/etc, sum, base64.
I think a lot of people don’t know anyone in tc39 and don’t realize that they’re in our midst, or feel that it’s not worth trying because it’d be 3 years before their suggestion lands anyway and a utils/ folder sucks but can happen right now.
To be honest 3 years is if anything optimistic. But I plan to be programming in ten years (even if the bots are writing all commercial code at that point, it's still fun for me), so I still think it's worth trying to improve things.
Thanks... the stdlib has moved more than I tracked, I should revise the article a bit. My argument is actually less about what JS lacks in terms of function and more about the delivery model: even with a fully-stocked stdlib, the average app still ships megabytes of transitive npm dependencies. LispE-as-WASM (3.3MB, ~450 documented functions, C++ core, source on GitHub) is an experiment in what an auditable runtime looks like. We've actually built an agent harness on top of it, LispE rules executing on the fly... In the browser itself. I'm a big fan of the JS event loop!!!
No really... [JavaScript] syntax seems to have been invented by someone who wanted to bet that he could push more brackets in a code than C++ and Lisp together. [...] Who could come up with a syntax as bloated as this? You open a parenthesis, and within the parentheses you open a curly bracket, and you have to close all of them in the right order.
I've learned to get nervous when someone describes syntax as bloated. A minimal syntax can be much more difficult to scan than one that makes use of separate characters for visual distinction.
I think we have not remotely milked what might be possible with more succinct syntax in appropriate domains. There's still a lot of juice to milk from APL's brevity. A great example is Nile/Gezira - this is an old Bret Victor visualization of it at work - https://tinlizzie.org/dbjr/high_contrast.html, click around to see the mathematical syntax at the bottom. Alan Kay's Viewpoints Research Group showed that you could get a whole graphics rendering stack include text layout with just 500 lines of code.
This is a weird entry point into this project, this seems better https://github.com/naver/lispe/wiki/1.-Introduction. It's a native Lisp project that offers WASM as a target. There's some fun geeky stuff in there for PL nerds.
My first impression was that this is a fairly contrived piece of JavaScript.
I suspect much of the hatred comes from early browser incompatibilities, painful DOM APIs, and syntax footguns -- things that have essentially zero impact on my day-to-day today.
Modern JavaScript (especially with TypeScript and sane lint rules) is perfectly fine as a language.
There are still issues -- CJS vs ESM, supply chain risk, ecosystem churn -- but most of those sit outside the language itself.
Who could come up with a syntax as bloated as this? You open a parenthesis, and within the parentheses you open a curly bracket, and you have to close all of them in the right order.
SHOCK! HORROR!
Amazing you have to close them in the right order!
If you want a language where you don't close them in "the right order" there's J, but the Lisp enthusiasts who are so horrified at the verbosity of a language like JavaScript often turn on their heel at APL-family languages and then start arguing about how clarity and readability are much more important than being maximally terse.
LispE's author clearly has at least some appreciation for APL primitives, but given that exposure to a language with concise notation I struggle to understand preferring the long, sparse, deeply-nested sexpr version of Conway's Life to its equivalent in APL, J, K, or even Q.
Internet_Janitor | 13 hours ago
De-bloat your javascript by... adding an opaque 3.3mb WASM blob and then writing your app in a lisp?
I can get quite a bit done with vanilla JS and zero extra dependencies before I hit even a tenth of that size.
swannodette | 12 hours ago
Like I suggested elsewhere, it's worth not dismissing this from this one small section in the docs. While I don't sympathize with this use case, this is a fun Lisp passion project with the kind of oddities you just don't see enough of these days. And refreshingly not vibe-coded, every single piece of documentation is quirky and clearly written by a human. Love it.
bakkot | 12 hours ago
I am always taking suggestions for new things to add to the standard library! Recent additions include set union/intersection/etc, sum, base64.
That said I basically never hear requests for calculus functions, and the only string related functions people regularly request are
.reverse(which doesn't have many convincing non-toy-problem use cases) or.titleCase(which is doable, and discussion is ongoing, but it requires internationalization data), neither of which are in this library.lilac | 9 hours ago
I think a lot of people don’t know anyone in tc39 and don’t realize that they’re in our midst, or feel that it’s not worth trying because it’d be 3 years before their suggestion lands anyway and a utils/ folder sucks but can happen right now.
bakkot | 8 hours ago
There's also a forum and a matrix chat room! Not really fonts of great ideas but they're linked in our docs and delegates do read both, especially the matrix room.
To be honest 3 years is if anything optimistic. But I plan to be programming in ten years (even if the bots are writing all commercial code at that point, it's still fun for me), so I still think it's worth trying to improve things.
[OP] Claudius | 8 hours ago
Thanks... the stdlib has moved more than I tracked, I should revise the article a bit. My argument is actually less about what JS lacks in terms of function and more about the delivery model: even with a fully-stocked stdlib, the average app still ships megabytes of transitive npm dependencies. LispE-as-WASM (3.3MB, ~450 documented functions, C++ core, source on GitHub) is an experiment in what an auditable runtime looks like. We've actually built an agent harness on top of it, LispE rules executing on the fly... In the browser itself. I'm a big fan of the JS event loop!!!
jmillikin | 12 hours ago
I've learned to get nervous when someone describes syntax as bloated. A minimal syntax can be much more difficult to scan than one that makes use of separate characters for visual distinction.
Let's see what LispE offers as an alternative:
... !?
https://github.com/naver/lispe/wiki/5.3-A-la-APL
swannodette | 12 hours ago
This a port of course of a famously terse APL example https://aplwiki.com/wiki/Conway's_Game_of_Life
antonmedv | 10 hours ago
Wow, i would not allow such in any production
swannodette | 9 hours ago
I think we have not remotely milked what might be possible with more succinct syntax in appropriate domains. There's still a lot of juice to milk from APL's brevity. A great example is Nile/Gezira - this is an old Bret Victor visualization of it at work - https://tinlizzie.org/dbjr/high_contrast.html, click around to see the mathematical syntax at the bottom. Alan Kay's Viewpoints Research Group showed that you could get a whole graphics rendering stack include text layout with just 500 lines of code.
swannodette | 12 hours ago
This is a weird entry point into this project, this seems better https://github.com/naver/lispe/wiki/1.-Introduction. It's a native Lisp project that offers WASM as a target. There's some fun geeky stuff in there for PL nerds.
[OP] Claudius | 8 hours ago
Thank you very much for your comments...
jonathannen | 2 hours ago
My first impression was that this is a fairly contrived piece of JavaScript.
I suspect much of the hatred comes from early browser incompatibilities, painful DOM APIs, and syntax footguns -- things that have essentially zero impact on my day-to-day today.
Modern JavaScript (especially with TypeScript and sane lint rules) is perfectly fine as a language.
There are still issues -- CJS vs ESM, supply chain risk, ecosystem churn -- but most of those sit outside the language itself.
zzing | 3 hours ago
SHOCK! HORROR!
Amazing you have to close them in the right order!
Internet_Janitor | 3 hours ago
If you want a language where you don't close them in "the right order" there's J, but the Lisp enthusiasts who are so horrified at the verbosity of a language like JavaScript often turn on their heel at APL-family languages and then start arguing about how clarity and readability are much more important than being maximally terse.
LispE's author clearly has at least some appreciation for APL primitives, but given that exposure to a language with concise notation I struggle to understand preferring the long, sparse, deeply-nested sexpr version of Conway's Life to its equivalent in APL, J, K, or even Q.