I think the issues you’re talking about, is that most use-cases for JavaScript are really using it as a scripting language to configure a framework of some sort (browser DOM, react native, electron, etc.)
Since you don’t actually use JavaScript to model concurrent information systems, powerful immutable data-abstractions aren’t as useful, and then manipulating frameworks with an added layer of translation maybe just adds friction.
In general, UI and UX code, it’s often about just figuring out the right hook, the right setting, and the right call, to get the UI framework to render what you want, reflow how you want, layout how you want, etc.
But if you had business logic, it would still benefit from being pure no, for which immutable data-structures would then come in really handy no?
I’ve not used it for such things, but if it was used for it in a Node backend for example, or inside an app for the business logic core layer and data access, wouldn’t the pure, functional, immutable structures have the same benefits as Clojure JVM? And you wouldn’t mind as much about bundle sizes, async/await support, back and forth js->cljs conversions, etc.
I have fairly strong feelings about languages and JS is just a deal-breaker for me for any serious development
Haha, same, might be one of the few languages I’ve turned down an offer because of. But I think maybe ES6 JavaScript has improved quite a bit, and I should probably give it another chance.
then having something like shadow leverage NPM to sort out all the bundling /modulesand externs is a big advantage
I’ve always wondered, if shadow-cljs can automatically figure out the externs, couldn’t something automatically bundle NPM packages as cljsjs packages?
I definitely don’t do serious Clojurescript use, don’t use it for work, so only some of my personal projects I’ve used it for, but cljsjs I’ve always found an overall better experience even when compared to NPM dependencies through shadow or the newer Clojurescript bundle NPM support.
Not having to deal with NPM at all, and just adding deps, requiring as normal, it’s so much nicer. The issue is you can’t find everything as cljsjs, but if there was like an auto-importer, when you wanted something form NPM, you’d run it, it convert it to cljsjs and publish it to Clojars, then just add is as a normal deps. If this was possible, wouldn’t it be much nicer? Or would there still be reasons to favor NPM ?