[HN Gopher] OpenJDK Proposes Project Galahad to Merge GraalVM Na... ___________________________________________________________________ OpenJDK Proposes Project Galahad to Merge GraalVM Native Compilation Author : mfiguiere Score : 95 points Date : 2022-12-21 19:56 UTC (3 hours ago) (HTM) web link (www.infoq.com) (TXT) w3m dump (www.infoq.com) | adra wrote: | I don't see too many immediate term improvements from what we | have today, but I do see GraalVM to be just different enough from | mainline OpenJDK releases to question exploring the features of | that build (in JVM or native modes). I poked at the release from | time to time between 19 and 22 but always ended up going back. If | this can improve that story, I'd say it's a win for all. Of | course I'm not sure what this changes in regards to Oracle's | extended paid version of the GraalVM runtime. | Alupis wrote: | GraalVM will mostly benefit those who are building and | deploying Function/Serverless and Microservices most - the | native compilation really shines in that space (for near- | instant start times and footprint reduction). | | For anyone else, the normal JVM is likely a better choice for | now - the tech built in there is very mature and battle tested. | | With that said - baking a bunch of GraalVM features into the | normal JVM is nothing but good for everyone. Native AOT | compilation does have it's uses outside | microservices/serverless, and some cross-pollination of VM | ideas is a great idea. | cogman10 wrote: | There are a lot of other neat parts for graal that will | likely be beneficial. One of the big benefits of graal is | that it makes implementing guest languages a snap (via the | truffle framework). | | So you can get all the operational benefits of the JVM + a | nice set of languages to play with along with interopt cross | language (python calling java calling ruby calling perl, | etc). | | Here's the languages they already have. | | https://github.com/oracle/graal/blob/master/truffle/docs/Lan. | .. | kasperni wrote: | There are no plans to move Truffle to OpenJDK. | Alupis wrote: | That particular claim/goal used to get me excited (run any | language on GraalVM), but the reality seems to have worked | out to be a very large asterisk next to that claim. | | From what I can tell, the effort to get any particular | language running on Graal is non-trivial, leading to that | relatively small list of supported languages - most of | which seem to be custom dialects in one fashion or another. | Perhaps I'm wrong though... | mike_hearn wrote: | Is it a small list? Especially if you count ILs like LLVM | bitcode or WASM, it probably includes most of them. | | Many of the languages people use in the real world are | really large, really old, really hairy and rely heavily | on native extensions that poke arbitrary interpreter | internals. Truffle at least makes these implementable | with higher performance, and the team size needed to get | that done isn't infeasible. But implementing a Ruby or | Python will never be a five minute job regardless of what | tech you use. | Alupis wrote: | It's small in that nearly half of the published list is | academic languages and dialects, and the other half seems | to be custom dialects of languages. | | While LLVM or WASM support is nice, most modern languages | are not compiling to either one by default, and likely | means it's not "turn key" to get your system running on | Graal anyway. | kaba0 wrote: | It can run Javascript with similar peak performance than | V8 with a tiny tiny fraction of development than what | went into the latter. (Of course it is possible only due | to it leveraging the many many dev-hours spent on the | JVM), it is the fastest Ruby implementation by an integer | factor and it can run C dependencies (often used by | Python/Ruby) as well, and even optimize across language | boundaries. | | The smallish list of languages is just due to lack of | effort, plus lack of immediate benefits -- it is not hard | to create an alternative language implementation. It is | very hard to create one that is 100% drop-in replaceable | with the real thing as every sufficiently complex program | will depend on implementation quirks as well. | mukel wrote: | GraalVM team member here. Implementing any mainstream | language is indeed a challenge, more so if you have to | maintain bug-compatibility and cope with all the bits of | bad design that went through the cracks in the de-facto | implementation. Truffle is not for beginners, but knowing | the basic set of features e.g. partial evaluation, | deoptimization... can get you very far already e.g. you | can easily speedup any interpreter by 10X or more with | minimal changes. | | How long does take to implement a programming language? | Well, from hours to years... depending on the language. | To make my point; how long would it take to implement a | JVM? A JVM is a complex beast, so I would myself guess | from years to a decade probably, what if I told you, that | Espresso was written in just 6 months by an intern and a | seasoned engineer... in just 6 months it was able to | Minecraft and even run itself. I assure you there's no | magic here, and certainly no blinding talent either; the | only reason for this unheard productivity was | Graal/Truffle. So, whenever I talk about Espresso I | always give all credit to Graal/Truffle, it is a sublime | platform for implementing fast languages and runtimes, of | which Espresso is just a byproduct. | threeseed wrote: | > building and deploying Function/Serverless and | Microservices most | | For those you may be better with IBM OpenJ9: | | https://www.eclipse.org/openj9/ | | It also integrates with CRIU so you can almost instantly | start/stop the JVM: | | https://blog.openj9.org/2022/09/26/getting-started-with- | open... | mdaniel wrote: | I keep forgetting about J9 but they're not doing themselves | any branding favors since there actually is J17 on J9 :-/ | https://github.com/eclipse- | openj9/openj9/blob/openj9-0.35.0/... (Also that 0.35 | versioning ...) | | As best I can tell, these are the docker images: | https://hub.docker.com/_/ibm-semeru-runtimes | $ docker run --rm ibm-semeru-runtimes:open-11-jdk java | -version openjdk version "11.0.17" 2022-10-18 | IBM Semeru Runtime Open Edition 11.0.17.0 (build 11.0.17+8) | Eclipse OpenJ9 VM 11.0.17.0 (build openj9-0.35.0, JRE 11 | Linux amd64-64-Bit Compressed References 20221031_559 (JIT | enabled, AOT enabled) OpenJ9 - e04a7f6c1 | OMR - 85a21674f JCL - a94c231303 based on | jdk-11.0.17+8) | thangalin wrote: | It'll help build cross-platform desktop applications. In | theory, it'll streamline using GitHub Actions to produce | platform-specific binaries, such as my FOSS Markdown editor | KeenWrite[0], without having to have a copy of every target | operating system. | | To my knowledge, cross-compiling "native" Linux and Windows | binaries using Java requires duct tape, chewing gum, and warp- | packer.[1][2] If there's another way to cross-compile a Java | application into a standalone binary for multiple target | platforms, do tell! | | GraalVM isn't a panacea. For example, GraalVM cannot compile | Renjin[3], a pure Java R interpreter, which means switching | from Renjin to FastR. Not trivial. Other sinkholes likely lurk | that'll only reveal themselves when walking through the weeds. | | [0]: https://github.com/DaveJarvis/keenwrite | | [1]: https://dave.autonoma.ca/blog/2020/06/29/write-once-build- | an... | | [2]: https://github.com/dgiagio/warp | | [3]: https://github.com/bedatadriven/renjin/issues/564 | hrpnk wrote: | The challenge with GraalVM runtime is that there are | differences in licensing. What was great about Java is that | only for specialized use cases, one had to invest in a paid | runtime. GraalVM moves essential features known from Java | Runtime into an Enterprise Edition. | | From GraalVM docs [1] on memory management: "The G1 GC (only | available with GraalVM Enterprise Edition) is a multi-threaded | GC that is optimized to reduce stop-the-world pauses and | therefore improve latency, while achieving high throughput. | Currently, G1 can only be used in native images that are built | on Linux for AMD64." | | [1] https://www.graalvm.org/22.2/reference-manual/native- | image/o... | aseipp wrote: | GraalVM is a bunch of components, but the most important one | are 1) Graal, a library in Java that is a code generator and | optimizer for compiler authors, 2) Native Image, a tool which | turns Java programs into native executables via Graal, and 3) | Truffle, a tool for implementing languages in Java that then | get code generated, again by Graal | | "GraalVM" is the umbrella name of all these things packaged | together, together with a couple languages implemented in | Truffle. That's what you download when you go to the website. | | Galahad is a proposal to merge the Graal code generator library | in Java, into OpenJDK's codebase, so that it is developed in | tandem and comes with first-class support. And none of the | other things, for now (Native Image will come later.) But you | can also do this today: you can instead configure a stable LTS | release of Java to use Graal as the code generator for the | HotSpot VM, as an alternative to C2. It's a little bit of work | to do so, but you can use any compliant OpenJDK build and test | it out. Galahad will just make this an "out of the box" option | rather than having to get Graal from Maven or whatever. | | So, you can just test things incrementally and see if Graal | gives performance improvements over C2. You don't need to throw | out your whole existing JVM, it's mostly just a new maven | dependency. That's a much simpler and more targeted change, if | you haven't given it a try (mostly by fiddling with some JVM | -XX flags, as usual.) | kasperni wrote: | The title of the article is a bit misleading. The goal is first | to merge GraalVMs JIT compiler (as an alternative to C2). Then | later to bring in the AOT compiler. | pulse7 wrote: | After this merge we will have JVM implemented mostly in Java (aka | "self hosted"). Currently about 1% of the JVM runtime is | implemented in C and this will be replaced with instrumented Java | code (including garbage collectors). This means that only one | runtime will be maintained in the future and Java developers will | do it (and not C/C++ developers which are harder to get). It will | be much easier to implement and test new memory management | mechanisms than it is today. | | If they also decide to merge support for other languages | (including WASM and LLVM) we will be able to run everything that | compiles to WASM and to LLVM on the same runtime - in the same | JVM. So we will get another "Docker Without Containers"... | | EDIT: It seems that I am wrong with the above 1% statement. I | meant that about 1% of the Java standard library is written in | C/C++. Regarding JVM: I guess that the whole HotSpot VM will be | replaced with GraalVM in the future and when this happens, | majority of the JVM code will be in Java. | morelisp wrote: | It's surprising to me that effective knowledge of C and/or C++ | is the stumbling block for contributing to the core of the JVM. | | I work at a company with one large C++ codebase, and also many | Go projects where C and C++ knowledge are helpful. _We_ have | trouble hiring good C++ developers, because our candidate pool | starts as "people who want to write web applications". | | But if you're already restricted to people who want to work on | an extremely mature compiler, VM, and JIT - is lack of C | knowledge really what's making it hard to hire people? These | are people who are likely to end up reading kernel code and | C-defined ABI documentation and etc. etc. even if the codebase | is 100% Java... | kaba0 wrote: | > It's surprising to me that effective knowledge of C and/or | C++ is the stumbling block for contributing to the core of | the JVM. | | Parent is just talking out of his/her ass. | lmm wrote: | The people who believe in and care about Java tend to be Java | people; C-oriented people tend to be rather anti-Java. | kaba0 wrote: | Writing state-of-the art runtimes is probably one of the | hardest CS fields. They are way above this "your language | sucks" category. | lmm wrote: | People are human; we get petty and tribal at every level. | And ever putting all that aside, if you genuinely believe | that one kind of programming or another is the way | forward then of course you're going to be more interested | in working on technologies that support that. | wiseowise wrote: | > We have trouble hiring good C++ developers, because our | candidate pool starts as "people who want to write web | applications". | | You have trouble hiring good C++ developers, because you | don't pay enough. | morelisp wrote: | Also true, but not the only reason nor a particularly | relevant response. | moralestapia wrote: | Now that you touch on that and since I'm considering a role | in C/C++ that came up to me. | | How much is a good salary for that if you're remote (but US | based) and have about 10 years of decent experience (plus a | PhD in CS). | kasperni wrote: | > Currently about 1% of the JVM runtime is implemented in C | | The JIT is probably half of the VM and is written in C++. | | Github [1] says (for the whole JDK, not just the VM): Java | 75.1% C++ 13.4% C 7.4% Assembly 2.3% Objective-C 0.4% | | [1] https://github.com/openjdk/jdk | Alifatisk wrote: | Is C devs really hard to get? | Alupis wrote: | C devs? No. Competent systems-level C devs - yes. | | The embedded and systems space are hard and require special | talent and knowledge. You can't just take some front-end | React developer and get them writing quality systems C code | in a weekend... people spend entire careers in that space, | and the number of people interested in that work shrinks by | the year (look at all developer surveys). | Yoric wrote: | Incidentally, that's one of the reasons for which Rust is | so successful in this space. Rust won't magically make you | productive in a week-end, but the Rust compiler (with its | error messages) is pedagogic enough that it is going to | help you learn from your mistakes. | | That's the extreme opposite of raw C (or raw JavaScript, | etc.) in which it's very easy to believe that you have | solved an issue, only to realize much later that you've | been entirely misunderstanding some constructions of the | language and (if your code somehow managed to land) you | have made the entire product unstable or insecure without | realizing it. | | Of course, there are tradeoffs to each approach. But I | believe that investing in Rust was a great initiative from | Mozilla. | delusional wrote: | But can you take some JavaEE backend developer, shove them | into the compiler, and expect them to do well? | | I think the language difference is a red herring. | yakak wrote: | It's certainly very interesting since Java was among the | few high level languages that had unlimited access to C | OS devs in theory, but it doesn't show this in practice. | | I always felt they were hostile to understanding OSes and | problems/solutions they provide and thereby limiting | themselves to mostly junior C devs who didn't rock the | boat by making real OS features for the JVM. | pyuser583 wrote: | How does embedded programming pay? | jalcazar wrote: | not _really hard_ just _harder_ than Java | mike_hearn wrote: | Where did you get the 1% figure from? HotSpot has millions of | lines of C++, that seems far too low. | | Graal doesn't affect memory management. It's a JIT compiler, | not a GC. Although there's a relatively simple GC written in | SystemJava for native images, G1, ZGC and Parallel will | continue to be the standard GCs in the regular JVM for the | foreseeable future and they are all written in C++. | taeric wrote: | To add to your question, assuming the tooling at github is | ok, it has ~20% as c/c++ for https://github.com/openjdk/jdk. | I would think most of that would be concentrated in the | hotspot code, but I don't know. Would be delighted to know | what the original post was referring to. | fathyb wrote: | I think the entirety of Hotspot is written in C++ [0]? The | standard library in the JDK is mostly written in Java, but | the VM itself with the GC and JIT code is in C++, which | makes sense. | | If you do not count the standard library as part of the JVM | (but part of the JDK), then the JVM is written mostly in | C++. | | [0]: https://github.com/openjdk/jdk/tree/master/src/hotspot | Alifatisk wrote: | I've had thoughts about trying GraalVM with a old Ruby project | using (truffleruby) but I found the docs to be a bit rough. ___________________________________________________________________ (page generated 2022-12-21 23:00 UTC)