6 ms·
The ecosystem of supporting libraries for Java is bigger than any other ecosystem. There's a mature library for every concept in existence. The Node ecosystem h
by bpicolo 6y ago
The ecosystem of supporting libraries for Java is bigger than any other ecosystem. There's a mature library for every concept in existence. The Node ecosystem has a lot, but for server-side libs it still doesn't reach the coverage of Java.
Apache, for example, supports a ton of Java libraries for which there's little competition, certainly not well distributed across language ecosystems. PDFBox, Lucene, etc.
When you're in the nitty gritty of automating business processes, that sort of thing is invaluable. For CRUD-style web services, any language will do the trick.
(I say this as not a big fan of Java the language)
Python also has a similarly wide ecosystem, and does better specifically in some regions than any other language, like ML, but a different set of focus areas. It's probably the other top contender for business-process automation, but big enterprises prefer OOP/static typing for typical work.
C# probably comes close in many areas, but there's still a split between the .net core and not-core ecosystems for the long tail of libraries, and no open-source powerhouse quite like Apache in the mix.
(C/C++ might fall here somewhere too, but I don't know nearly enough about those language ecosystems to comment)
- MaxBarraclough 6y ago> There's a mature library for every concept in existence If you'll forgive a light trolling: how about ahead-of-time compilation, allocating small objects on the stack, UTF-8, compile-time asserts, or SIMD support? (Was going to include await/async, but then I remembered EA Async.) I realise this is a little off topic, but the JVM isn't without limitations. (Or perhaps all my examples are wrong - disproof welcome!)
- bpicolo 6y agoYeah, I'm thinking higher level, for sure, rather than limitations of the language - fair to call out. You can specify UTF-8 as the default charset (unless you mean for identifiers?) and Grall does exist for AOT.
- MaxBarraclough 6y agoI thought Java's String was hard-coded to UTF-16. Is that mistaken?
- nickbauman 6y agoThe JVM world has Graal for AoT, FWIW. I would argue that await/async is really settling for the mediocre still. Many languages, even JVM languages offer more powerful abstractions and concepts for solving that problem. Clojure's implementation comes to mind.
- doteka 6y agoYou can get AOT compilation with GraalVM today, allocating small objects on the stack is being worked on in Project Valhalla, compile time asserts can be implemented with annotations if you care (see @NotNull), utf-8 is available in the standard library in the StandardCharsets class. For Async/await, I believe a much better approach is available with Quasar today or with Project Loom soon. SIMD is an issue though if you need that.
- apta 6y agoSIMD is being worked on as well: https://openjdk.java.net/jeps/338 https://openjdk.java.net/jeps/338 See Project Panama for the encompassing project: https://openjdk.java.net/projects/panama/ https://openjdk.java.net/projects/panama/
- vips7L 6y agoAOT was available for over a DECADE with the GNU Compiler for Java before it was removed.
- MaxBarraclough 6y agoIt's also long been possible with lesser-known proprietary solutions like Excelsior JET, so I suppose Java can claim to have a mature solution to that feature, just not a mature mainstream FOSS solution (not counting Graal).
- pron 6y agoAOT: GraalVM Native Image (https://www.graalvm.org/docs/reference-manual/native-image/ https://www.graalvm.org/docs/reference-manual/native-image/), Project Leyden: https://mail.openjdk.java.net/pipermail/discuss/2020-April/005429.html https://mail.openjdk.java.net/pipermail/discuss/2020-April/0... SIMD: https://openjdk.java.net/jeps/338 https://openjdk.java.net/jeps/338 (to be merged soon), plus, of course, auto vectorisation, which is already in. Allocating small objects on the stack: this already happens automatically through escape analysis, but more generally (and more importantly) arrays-of-structs: http://cr.openjdk.java.net/~briangoetz/valhalla/sov/01-background.html http://cr.openjdk.java.net/~briangoetz/valhalla/sov/01-backg... UTF-8: What do you mean? Java has supported UTF-8 for a loooong long time. Even the source files support Unicode with UTF-8 encoding. compile-time asserts: Not sure what you mean. But there's a rich compile-time plugin mechanism: https://www.baeldung.com/java-annotation-processing-builder https://www.baeldung.com/java-annotation-processing-builder and even pluggable type systems: https://checkerframework.org/manual/ https://checkerframework.org/manual/ Async/await: how about lightweight threads, instead? https://wiki.openjdk.java.net/display/loom/ https://wiki.openjdk.java.net/display/loom/
- throwanem 6y agoIn the Node ecosystem, there's no shortage of PDF libraries, including the quite full-featured and not unnecessarily painful to use PDFKit. We have a Lucene binding, too. It's called Elasticsearch. :)