Charles Oliver Nutter
headius.bsky.social
Charles Oliver Nutter
@headius.bsky.social
JRuby co-lead, Java champion, Ruby hero, JavaOne Rockstar, international traveler and speaker. Book me for your next event! I depend on your donations and sponsorships! https://github.com/sponsors/headius
Inspired by Maciej's work in buff.ly/Pp5PKvT, I've attempted to integrate into JRuby a Java implementation of Daniel Lemire's fast float parsing. Early results are as much as 16x faster than the crusty old impl we currently have!
Use FastDoubleParser where appropriate by headius · Pull Request #9150 · jruby/jruby
This hooks up the FastDoubleParser project to our internal float parsing logic, excluding cases that are not 7-bit ASCII or which contain underscore characters (not currently allowed by FDP, see wr...
buff.ly
December 28, 2025 at 6:10 AM
Not sure which job is more repellant.
December 28, 2025 at 1:00 AM
If I were to do a 1.5 hour workshop on JRuby, what would you most want to learn? Performance and optimization? Deploying Ruby apps on Java servers? Calling into other libraries on the JVM? JVM tools for profiling and monitoring? Hacking on JRuby itself?
December 26, 2025 at 4:39 AM
I'm super excited to peak here for the first time and meet the local Ruby community! We will have a big new JRuby release by then with 4.0 compatibility and a bunch of optimizations.
Psst... see this gift under the Christmas tree? Let's unbox it 🎄

@headius.bsky.social joins us at #wrocloverb to show how you can level up your Ruby with JRuby - bringing true parallelism, pauseless garbage collection, and JIT optimizations to your Rails apps.

This one’s a real treat! 🎁
December 24, 2025 at 11:01 PM
A JRuby user upgrading an old app recently filed a bunch of bugs about poor perf versus CRuby. In almost every case, it was an optimization or logic change we never knew about, and once added JRuby is faster. If something isn't as fast in JRuby as in CRuby, it's a bug. Report it!
December 20, 2025 at 7:33 PM
I would bet money that Google et al have been dumbing down their existing non-LLM services to force people to use their LLMs. Now that Gemini is offered to replace Google Assistant, the latter has become FAR worse, failing simple queries and commands. Class-action suit incoming?
December 18, 2025 at 8:17 PM
I just tried to use ChatGPT to generate a switch to compare a byte[] with a set of strings, switched on the length of the string and then equality checks. The code looked right, except all of the sizes were totally wrong.

Lesson learned: don't use LLMs for anything numeric.
December 16, 2025 at 11:23 PM
I think I need to reset my Duolingo Chinese course. 😞 Although I studied for two years at University, Duolingo has evolved over the years and I was unwillingly grandfathered into a very high level. It will be too easy for a while, but my character comprehension needs a reboot.
December 16, 2025 at 5:37 PM
I'm having trouble adopting this new LLM regime. What happens when a developer you rely on produces bad code one time out of ten? How about one time out of a hundred, but it's a severely critical bug? Who's going to find these issues after I'm gone?
December 10, 2025 at 9:53 AM
Too many projects I wish I had time for.

* A (new) impl of Python, Go, or Rust-like language for JVM.
* Ruby library for emitting Project Babylon CUDA code.
* Ruby LSP plug-in for JRuby Java integration.
* New JRuby SSL library based on JDK crypto support.

I need a team.
December 10, 2025 at 6:12 AM
The Vector API for Java will have its 11th "incubator" release in JDK 16. Starting to wonder if we need Daenerys Targaryen to carry it into a funeral pyre before that egg will hatch. 🐲🐣
December 4, 2025 at 8:49 PM
Reposted by Charles Oliver Nutter
JDK 26 has been branched from the main line and is now in Rampdown Phase One: mail.openjdk.org/pipermail/jd...

openjdk.org/projects/jdk/26/

#JDK26 #OpenJDK #Java
mail.openjdk.org
December 4, 2025 at 6:53 PM
Now what do I do? 😩
December 4, 2025 at 6:35 PM
This is what happens when you torture a prickly pear with barely enough sun and water to survive.
December 4, 2025 at 5:46 PM
Why not use Java's instanceof patterns to null-check values in the middle of an `if` statement?
Non-null variable declaration in Java using instanceof patterns
Ever since JRuby 10 upgraded to Java 21, I’ve been re-learning Java with all the excellent language enhancements of the past decade. One of my favorites has to be the instanceof pattern matching…
buff.ly
December 4, 2025 at 8:47 AM
Somebody tell me why I shouldn't use instanceof pattern matching in Java to perform a null check plus variable declaration and assignment all at once:

if (obj.getValue() instanceof Value value) {
// use value
} else {
// it's null
}
December 4, 2025 at 4:54 AM
I'm holding out for AI contact lenses.
November 26, 2025 at 5:05 PM
Combined with compact objects in JDK 25+ this could be a huge breakthrough in scaling JRuby apps. What if your JRuby app's working set could be half as big on the heap, with improved throughput due to smaller objects and less allocator overhead?
A first shot at drastically reducing object size in JRuby, in this case by using more compact wrappers for small Integers: buff.ly/KxZEKBh

Other fixes will reduce the size of "immediate" types (numerics, etc) by up to 16 bytes and the size of ALL objects by 5-6 bytes. 🤯
Specialize Fixnum by headius · Pull Request #9085 · jruby/jruby
This adds specialized RubyFixnum subtypes for byte, short, int, and long, making RubyFixnum abstract. All allocations of a Fixnum are boxed using the most compact size. This drastically reduces the...
buff.ly
November 21, 2025 at 9:57 AM
A first shot at drastically reducing object size in JRuby, in this case by using more compact wrappers for small Integers: buff.ly/KxZEKBh

Other fixes will reduce the size of "immediate" types (numerics, etc) by up to 16 bytes and the size of ALL objects by 5-6 bytes. 🤯
Specialize Fixnum by headius · Pull Request #9085 · jruby/jruby
This adds specialized RubyFixnum subtypes for byte, short, int, and long, making RubyFixnum abstract. All allocations of a Fixnum are boxed using the most compact size. This drastically reduces the...
buff.ly
November 21, 2025 at 9:29 AM
Am I "old" for wanting to discuss a bug and its potential fixes *before* opening a pull request? I'm frequently chided for talking about the issue first rather than just making a PR right away (i.e. "wasting our time"). Personally I tend to reject nontrivial PRs that had no discussion.
November 20, 2025 at 11:06 PM
Asked ChatGPT to find the best way to choose the smallest Number box for a long value. Several options were discussed with JMH benchmarks. Code looked good, but unfortunately most options introduced tricky negative boundary bugs, despite my requirements. How can I ever trust it to write code?
November 20, 2025 at 8:27 PM
TFW AI generates *completely wrong* code that almost looks correct. Pretty hard to have any confidence in LLMs for code generation when they creates nonsense like this.

buff.ly/kMsOHX0
November 20, 2025 at 12:56 AM
This new AI world continues to frustrate the hell out of me. I'm seeing pull requests that clearly don't solve the problem, conversations that are automated nonsense, and fake engagement across all social media. No wonder people have no excitement about OSS work lately. ☹️
November 19, 2025 at 6:51 PM
I get asked about this a lot, so... Would anybody be interested enough in a native-compiled Ruby implementation to fund a fork of JRuby that can be compiled with GraalVM Native Image? It's totally doable, but the work involved is nontrivial and incompatible with the JVM version.
November 13, 2025 at 10:31 PM
Good progress discussing a Ruby "deep_freeze" feature at this month's ruby-core dev meeting! matz is not opposed to adding the feature, but we need to formalize the protocol and decide how much control user-defined objects should have over the process. We'll make it happen!
November 13, 2025 at 4:05 PM