5 ms·
The JVM, for all it's benefits, comes with a significant number of downsides. Many folks no longer wish to operate a JVM when less bloated and clunky runtimes e
by shizcakes 9y ago
The JVM, for all it's benefits, comes with a significant number of downsides. Many folks no longer wish to operate a JVM when less bloated and clunky runtimes exist.
- kimi 9y agoLike what? :-)
- shizcakes 9y agoIn this particular case, it looks like the author is preferring to target the Node runtime.
- FieryTransition 9y agoWell, there is an OpenJDK version that azul systems make called zulu, which is open source and free from oracle. The jvm is still a really good runtime. Java is a way more consistent language than javascript. Other languages running on top of the jvm are way more beautiful and sensible than javascript. The jvm can be leveraged many ways when it comes to performance and use cases, and I consider it way more stable than different javascript runtime implementations running in different browsers coded by different organizations. Out of curiosity, why do you think the JVM is such a thing of the past and so bloated and clunky? I'm curious about what reasons people have. From my own experience, I get that javascript is easy to start things in, but damn, it can get sucky once you have to maintain and refactor a bigger codebase. It just feels like javascript and node gets a lot of mindshare since it is what the web industry pushes down everyones throat sometimes :/
- always_good 9y agoWell, you're writing ClojureScript in TFA so I'm not sure what Java vs Javascript has to do with it. But if you're interested in one way Node is nice: single-threaded + unified way to write async code.
- FieryTransition 9y agoFrom my understanding, the article is about leveraging clojurescript serverside on nodejs. Then someone asks why just not write in clojure serverside on the jvm. I just took some example languages, maybe I shouldn't have as it polluted my point with my own biases. It also felt relevant to bring them up, since it is what people mostly end up writing in, on those respective platforms. But I'm mostly interested in the JVM vs. node discussion though and opinions. Yeah, the single threaded model + async can be nice and resolve problems with race conditions etc. making one headache go away. But it can also be a limiting factor that you cannot change if you need to, but then you maybe choose the wrong tech to begin with if your use case can include high cpu usage etc.
- dahauns 9y ago>Yeah, the single threaded model + async can be nice and resolve problems with race conditions etc. making one headache go away. What often astounds me in these kinds of discussion: People just seem to assume that's not possible with the JVM. So, just for the record (not neccesarily directed to you :) ): You can totally do node.js style (event-driven, async, nonblocking, no-shared-state - "single-threaded", if you will) with the jvm, and it works great (e.g. vertx, netty, play and many others). And as you said: Contrary to node, with the JVM there's no danger of it being a limiting factor you're stuck with.
- always_good 9y agoNobody said it's not possible to do it on the JVM. It's also possible to do it in C. It's totally different. There is no unified solution. Just about every library is blocking the thread and you have to code around that. And the solutions don't interop. And they can be atrocious abstractions: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html https://docs.oracle.com/javase/8/docs/api/java/util/concurre... I work with Netty professionally and I would not call that a pleasant experience. Async programming in Node has really good ergonomics that are hard to find elsewhere. For example, compare Promise.map(..., { concurrency: N }) to the Go solution.
- grzm 9y agoThe parent may be assuming "Clojure on the JVM" as opposed to the JVM alone. Loading the Clojure runtime on the JVM can be slow.
- krisdol 9y agoJVM is slow as heck to start, but an awesome runtim. In an ideal world I'll never have to restart my application or my repl, but in the real world I do it all the time. It's much faster than node.js/V8 when executing heavy tasks. One reason I might be interested in running clojurescript on node.js is because most web technologies nowadays are written for node.js/javascript first and ported as an afterthought. GraphQL servers on Clojure/Java, for example, are like 3rd class citizens compared to node.js. Google provides nice wrappers to their APIs as long as you're not using clojure. I end up writing things in-house a lot more often than I would with node where I just npm install the package I want and I get something that is maintained by the official author.
- coltnz 9y ago~ time java test Hello world java test 0.11s user 0.03s system 88% cpu 0.161 total MacBook Pro (Retina, 15-inch, Late 2013)
- grzm 9y agoI think what's missing in your parent but assumed is, within the context of Clojure, startup is slower than ClojureScript. The Clojure runtime is relatively slow on startup.
- jeremiep 9y agoUnless you restart your server 400 times a day, how does startup times matter, even remotely?
- grzm 9y agoI think your question is better directed upthread: I'm attempting to clarify possible misunderstandings, not arguing for any particular position. But it's important to keep in mind that people have different needs and desires in different contexts. One off the top of my head is something like AWS Lambda. It's not necessarily the context where Macchiato would play a role, but a server context where one might indeed be starting up processes thousands of times a day.
- noobermin 9y ago>less bloated and clunky runtimes exist. Like cljs ontop of node?
- grzm 9y agoThis isn't particularly helpful. Do you have something to add besides answering a question with another one? People have different use cases and different needs, and in general is a good think to have options with Clojure/Script. If you think ClojureScript on node is misguided, please provide more argument as to why and help move the discussion forward, regardless of how wrong you might feel the comment you're responding to is.
- didibus 9y agoYou'll have to specify what you mean by the JVM being bloated and clunky. I think a lot of people are wrongly under the impression that the JVM is complicated, and annoying to use. It is not, Java is. Java is not the JVM, and in the context of Clojure and ClojureScript, the JVM is amazing. The only reason not to use the JVM I'd say would be cases where you need sub-second start times, or you have memory and space constraints, or need full real time. Though for the latter two, there exist paid JVMs that can work for those use cases. In fact, that's another amazing thing about the JVM, its a standard, and there exist multiple fully functional implementations. Some benefits of the JVM are its very complete standard library, as well as its gigantic set of third party libs. It runs on almost any imaginable hardware. It is extremely fast. All other VMs or even VMless GC runtimes benchmark themselves against it because its the known performance champion. It has amazing GCs, it even has more then one type of GC. It supports multiple programming languages, such as Clojure. It comes with top notch tooling support for debugging, profiling and monitoring. Finally, its backed by a lot of money, which means it keeps improving quickly. Some of its soon to be improvements are complete modularity, AOT compilation, faster startup time, smaller memory footprint, ability to call native code and use native data and finally support for first class fibers (like erlang and go threads).
- ledgerdev 9y agoI think you meant to say sub 20 second start times for clojure apps :) But seriously completely agree with you about the jvm being awesome. However clojure var load times on top of the base jvm and memory use makes it dog slow to start a development repl(30+ seconds is normal.. queue comment about how someone only restarts their repl every couple of days LOL) and unsuitable or unusable for situations where you care about app start times of less than 10 seconds and memory constrained environments such as cli, iot, serverless, android.
- swlkr 9y agoMy repl starts in about a second... maybe it’s because I’m using cursive
- 9y ago
- dahauns 9y agoMaybe, but what has that to do with node.js? badum tsss But jokes aside - the whole node environment doesn't strike me as particularly un-bloated or un-clunky, especially compared to modern JVM solutions like e.g. vertx, netty or even wildfly/undertow. Same goes for the pure runtime itself (i.e. v8 vs jvm), where v8 may be competitive at best, but hopelessly outclassed in other cases.