Graal
JDK
Our great sponsors
Graal | JDK | |
---|---|---|
155 | 188 | |
19,678 | 18,184 | |
1.2% | 2.3% | |
10.0 | 10.0 | |
6 days ago | 18 minutes ago | |
Java | Java | |
GNU General Public License v3.0 or later | GNU General Public License v3.0 only |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Graal
- FLaNK Stack 05 Feb 2024
-
Apple releases Pkl – onfiguration as code language
Pkl was built using the GraalVM Truffle framework. So it supports runtime compilation using Futurama Projections. We have been working with Apple on this for a while, and I am quite happy that we can finally read the sources!
https://github.com/oracle/graal/tree/master/truffle
Disclaimer: graalvm dev here.
-
Quarkus 3.4 - Container-first Java Stack: Install with OpenJDK 21 and Create REST API
Quarkus is one of Java frameworks for microservices development and cloud-native deployment. It is developed as container-first stack and working with GraalVM and HotSpot virtual machines (VM).
-
Level-up your Java Debugging Skills with on-demand Debugging
Apologies, I didn't mean to imply DCEVM went poof, just that I was sad it didn't make it into OpenJDK so one need not do JDK silliness between the production one and the "debugging one" since my experience is that's an absolutely stellar way to produce Heisenbugs
And I'll be straight: Graal scares me 'cause Oracle but I just checked and it looks to the casual observer that it's straight-up GPLv2 now so maybe my fears need revisiting: https://github.com/oracle/graal/blob/vm-23.1.0/LICENSE
-
Rust vs Go: A Hands-On Comparison
> to be compiled to a single executable is a strength that Java does not have
I think this is very outdated claim: https://www.graalvm.org/
- Leveraging Rust in our high-performance Java database
- Java 21 makes me like Java again
-
A JVM in Rust part 5 – Executing instructions
Why would they? The direction for safer JVM research is to implement JVMs in Java, which has the advantage of being both memory safe outside a few tiny core areas (same as rust) whilst having cleaner code than the Rust impl (none of these problems with lifetimes).
See here: https://github.com/oracle/graal/tree/master/substratevm/src
-
A History of Clojure (2020) [pdf]
Ah, yeah, that's probably a bit far off in the future. Probably would be possible via GraalVM once GC is available, https://github.com/oracle/graal/issues/3391
-
How can I integrate a Svelte(Kit?) frontend on a Spring Boot application?
In short, you need to use graalvm and install the nodejs plugin for it (guide here).
JDK
-
macOS 14.4 might break Java on your machine
The actual text from https://bugs.java.com/bugdatabase/view_bug?bug_id=8327860 says this:
> We have been working on a patch that switches the jit protection mode to EXEC around these potential faulting memory accesses.
Yes, they're changing one aspect of signal handler use to work around this problem. They're not stopping the use of signal handlers in general. Hotspot continues to use signals for efficiency in general. See https://github.com/openjdk/jdk/blob/9059727df135dc90311bd476...
The "safe fetch" code relies on a signal handler (either here https://github.com/openjdk/jdk/blob/48717d63cc58f693f0917e61... or here https://github.com/openjdk/jdk/blob/3c70f26b2f3fa9bc143e2506...), which is considered asynchronous delivery (i.e., delivered mid-execution, see `man 7 signal`) - which is why the `async-signal-safe` manpage simply states that it is functions that can safely be called within a signal handler.
This is opposed to calling `sigwait` or similar to actively suspend and wait for a signal, which is not possible to do here.
Granted, it may be that the stars align and their implementation works in practice, but that does not make it any less bizarre.
The signal comes from a safe fetch, which is just a read that allows ignoring the fault as if it never happened. Such a signal is deliver synchronously, so the usual restrictions for asynchronous signal handlers do not apply.
The code in question takes into account that the value read might be garbage. See the big comment here: https://github.com/openjdk/jdk/commit/29397d29baac3b29083b1b...
On current CPUs and operating systems, this is not an optimization, so the code was removed earlier this year: https://bugs.openjdk.org/browse/JDK-8320317
> Yes, they're changing one aspect of signal handler use to work around this problem. They're not stopping the use of signal handlers in general. Hotspot continues to use signals for efficiency in general. See https://github.com/openjdk/jdk/blob/9059727df135dc90311bd476...
This whole thread is about SIGSEGV, and specifically their SIGSEGV handling. However, catching normal signals is not about efficiency.
Some of their exception handling is still odd: There is no reason for a program that receives SIGILL to ever attempt continuing. But others is fine, like catching SIGFPE to just forward an exception to the calling code.
(Sure, you could construct an argument to say that this is for efficiency if you considered the alternative to be implementing floating point in software so that all exceptions exist in user-space, but hardware floating point is the norm and such alternative would be wholly unreasonable.)
> The wonderful thing about choosing not to care about facts is having whatever opinions you want.
I appreciate the irony of you making such statement, proudly thinking that your opinion equals fact, and therefore any other opinion is not.
This discussion is nothing but subjective opinion vs. subjective opinion. Facts are (hopefully, as I can only speak for myself) inputs to both our opinions, but no opinion about "good" or "bad", "nasty" or not can ever be objective. Objective code quality does not exist.
-
The Return of the Frame Pointers
I remember talking to Brendan about the PreserveFramePointer patch during my first months at Netflix in 2015. As of JDK 21, unfortunately it is no longer a general purpose solution for the JVM, because it prevents a fast path being taken for stack thawing for virtual threads: https://github.com/openjdk/jdk/blob/d32ce65781c1d7815a69ceac...
- The One Billion Row Challenge
-
Java JEP 461: Stream Gatherers
Map doesn't implement the Collection interface.
https://github.com/openjdk/jdk/blob/master/src/java.base/sha...
-
C++23: Removing garbage collection support
C++ lets you write anything you can imagine, and the language features and standard library often facilitate that. The committee espouses the view that they want to provide many "zero [runtime] cost," abstractions. Anybody can contribute to the language, although the committee process is often slow and can be political, each release the surface area and capability of the language gets larger.
I believe Hazard Pointers are slated for C++26, and these will add a form "free later, but not quite garbage collection" to the language. There was a talk this year about using hazard pointers to implement a much faster std::shared_ptr.
It's a language with incredible depth because so many different paradigms have been implemented in it, but also has many pitfalls for new and old users because there are many different ways of solving the same problem.
I feel that in C++, more than any other language, you need to know the actual implementation under the hood to use it effectively. This means knowing not just what the language specifies, but can occaissionally require knowing what GCC or Clang generate on your particular hardware.
Many garbage collected languages are written in or have parts of their implementations in C++. See JS (https://github.com/v8/v8)and Java GC (https://github.com/openjdk/jdk/tree/36de19d4622e38b6c00644b0...)
I am not an expert on Java (or C++), so if someone knows better or can add more please correct me.
-
Java 21 VirtualThreads vs. Clojure Lazy Seqs
The JVM and Java the language have always been intertwined. The same people that develop the language, develop the VM. Lots of optimizations in the VM know specifically about Java the language idioms and implementation details. Check out this function which helps determine if instance fields are trusted: https://github.com/openjdk/jdk/blob/edd454b502b9bacde5549282...
-
Show HN: Pile Programming Language
https://github.com/openjdk/jdk/blob/b16e5584abcae18fdcc4494f...
Should just use `Path/of` directly.
BTW, I thought I would give it a try, but my initial naive attempt hasn't yielded any results:
nix shell nixpkgs#maven nixpkgs#jdk20
What are some alternatives?
Liberica JDK - Free and 100% open source Progressive Java Runtime for modern Javaâ„¢ deployments supported by a leading OpenJDK contributor
Adopt Open JDK - Eclipse Temurinâ„¢ build scripts - common across all releases/versions
awesome-wasm-runtimes - A list of webassemby runtimes
maven-jpackage-template - Sample project illustrating building nice, small cross-platform JavaFX or Swing desktop apps with native installers while still using the standard Maven dependency system.
SAP Machine - An OpenJDK release maintained and supported by SAP
wasmer - 🚀 The leading Wasm Runtime supporting WASIX, WASI and Emscripten
teavm - Compiles Java bytecode to JavaScript, WebAssembly and C
Quarkus - Quarkus: Supersonic Subatomic Java.
Dragonwell8 - Alibaba Dragonwell8 JDK
j2cl - Java to Closure JavaScript transpiler
Vert.x - Vert.x is a tool-kit for building reactive applications on the JVM
JHipster - JHipster, much like Spring initializr, is a generator to create a boilerplate backend application, but also with an integrated front end implementation in React, Vue or Angular. In their own words, it "Is a development platform to quickly generate, develop, & deploy modern web applications & microservice architectures."