← Ingestions

Ingestion 2927307d extracted

Format
transcript
Kind
talk
External ID
Charles Nutter - JRuby Professional-Grade Ruby - wroc_love.rb 2026.txt
Content hash
b51e32dec75b
Source at
2026-04-17 09:00
Manual extractions are temporarily disabled.

Extractions (1)

Status Model Tokens (in/out) Duration Cost Nodes/edges Read set (nodes/edges) Time
completed claude-opus-4-7
347,099 / 15,699
203,509 cached ยท 41,402 write
246.8s - 28 / 61 140 / 5 2026-04-22 08:41

Content

I would like to invite our first speaker


Charles which is going to tell us about


J Ruby which he's working on for 20


years already and at the moment he's


still funding it. So big applause to


Charles. Welcome.


All right. Thank you. Thank you.


Excellent. I'm very excited to be here


for the first time uh at the conference


and in the city. Uh, unfortunately I'm


only here for about 40 hours this trip


because I have to head to Ruby Kai right


after this. But I'll be at the party


tonight to answer questions. I got lots


of stickers for J Ruby for my company


Headas Enterprises which is now funding


J Ruby development and uh let's get


started and get all my equipment here.


Okay, so professional grade Ruby. We'll


find out what I mean by that here. Uh


bit of information about me. Uh so I


have been a full-time JVR developer now


for 20 years since 2006. Uh we were


hired by Sun Micros Systemystems. It was


kind of at the very beginning of the


Rails explosion. Everyone was really


excited. We were working on J Ruby just


trying to get it to run basic stuff. And


one day about about now 20 years ago we


managed to actually load up Rails and


route our first request. And it was


super exciting running rails from this


weird Ruby platform that nobody had ever


used before that uh on top of the JVM.


And so we got hired in by Sun Micros


Systemystems and it's been a wild ride


since then. So uh in in that time we had


about 19 18 years or so of big companies


that continued to sponsor us. Uh in 2024


that finally came to an end. We were


very happy for all the support that we


got over the years. But uh now I am


working to continue J Ruby development


by supporting folks like you that want


these features that want all of what I'm


showing here. So if you're interested in


this definitely get in contact with me.


Okay. So J Ruby uh I have been working


on and speaking about J Ruby for 20


years. And the first question I always


still get is what is J Ruby? I'm


obviously not doing something right.


I've done hundreds of talks all over the


world, but there's still people who


don't know. Let me see. How many people


in here have ever built something with J


Ruby?


Oh, that's always always surprising to


me. That's great. So, put those hands


back up for one second. Everybody that


doesn't have a hand up, these are folks,


you probably know one of them that can


tell you how their experience has gone


and why they chose J Ruby. But let's get


into it now and I'll explain it to


everyone here. So what is J Ruby? Well,


simply put, it's Ruby, but instead of


the C Ruby, the standard Ruby runtime,


it runs on top of the Java virtual


machine. Uh we focus very heavily on


being a Ruby implementation first. We


want the workflow to be the same. We


want the tools to be the same. You're


going to run all the same command lines.


uh almost everything that's pure Ruby.


All the stuff that you run for brailles


development should work the same on J


Ruby as it does with the regular Ruby


implementation. But we also have lots of


benefits from being on top of the JVM.


That's what I want to talk about the


most here today. We expect that Ruby


code should just work but maybe work a


little bit better for certain sort of


things.


Okay, J Ruby users worldwide. Uh we have


a thousands of applications out there.


There was a half dozen to a dozen folks


in here that have built something with J


Ruby at some point. Uh production users


since 2007. There were a lot of early


adopters and we love to see that. They


were probably a little early to the


game, but it it was cool to have them as


early adopters for us. Uh I will


showcase a few of these users. Uh some


of these are customers, some of them are


just cool use cases that I know about.


uh but they will show a little bit of


why they use J Ruby and why they


couldn't use Ruby otherwise in whatever


project they're doing. Uh down at the


bottom here there's another smaller QR


code. If you are a J Ruby user currently


we have a users.md file in our


repository and we just like to keep


track of who's doing what so new users


can pop by and say that's an interesting


use case. Maybe that's what I need J


Ruby for.


So to me, J Ruby, it's a way of opening


up lots of new opportunities to the Ruby


community. And I think these days with


the competition of other languages, with


all the AI stuff, we need opportunities.


We need to be able to use Ruby in more


places. So what's the problems with


trying to get Ruby out there into these


big organizations? Well, for some of


them, the idea that there's this other


language runtime, this other platform


with these weird C extensions, it's just


too much of a leap. They won't even


consider it. They want something


standard, something that they're used


to, something that is tried and trusted.


They're not going to put a new runtime


into their stack right now. Uh, so


sometimes there's a lot there's


libraries that are missing from the Ruby


ecosystem. uh you can use J Ruby and


pull in anything that exists on the JVM


and call it like it's regular Ruby code.


Uh there's a lot of users that I'll talk


about here that demand true parallelism.


They're handling hundreds or thousands


of concurrent requests processing many


data files in parallel. Very difficult


to do. You got to jump through a lot of


hoops with regular Ruby. On J Ruby, it


just works. So I like to say J Ruby is


enterprise ready. It's big business


ready. It's anybody who's afraid of


doing Ruby. It's ready for them and


makes it much easier to get it into


those organizations.


So, first off, this first problem,


enterprise doesn't want to install Ruby.


Well, the easy answer is J Ruby.


Anywhere that you can install Java,


which is pretty much anywhere, anywhere


you can run a JVM, you can pull J Ruby


in and start writing Ruby and Rails


applications. And that includes


deploying on Java application servers.


that includes sending a single file to


someone that they've run Java-Jar and it


it's up and going. Very easy to get Ruby


into these organizations. So here I have


uh a JDK on my system. I think 26, the


most recent one just released uh last


month. So I have Java on my system.


That's all that's needed. That's really


the only thing you install there. We're


going to use Ruby install to pull J Ruby


down. It just fetches the tarball,


unpacks it. There's nothing to build, no


build tools required other than having


the JDK on your system. And here we are


in IRB just like we would with regular


Ruby. We can check our Ruby version. The


current version of J Ruby supports Ruby


3.4.5 right now. We have a 4.0 version


coming out hopefully next week. Uh J


Ruby version you can see here is 1005.


We can now start actually calling into


JVM classes. So here's the Java lang


runtime class. We'll get an instance of


that. We've got our runtime class. We


can call runtime available processors.


And notice this is using an underscore


here. We turn the Java case into Ruby


case so it flows nice with the rest of


your code. But you can use either.


Runtime available processor says there's


10. That's on this system with six


efficiency cores and four performance


cores. And we can check free memory. And


then we've got our free memory on the


system. But we're just using any library


that's on the JVM as if it was a Ruby


class. And once you've imported it,


pulled it in, you might never even


realize it's Java.


So compatibility. A brief note here. I


did mention we've got Ruby 3.4


compatibility in the currently available


releases. Uh some high number of 90 98%


or 99% of the core Ruby specs pass.


stuff that's missing is stuff that just


can't be done on the JVM like forking


and weird process management stuff.


Pretty much nothing you're going to run


into most of the time.


Uh J Ruby 10.1, which will be out next


week, fingers crossed, uh will support


Ruby 4.0. There's not a whole lot of new


features in Ruby 4.0, so it wasn't a


huge leap, but there's a bunch of other


cool optimizations coming along with


that version as well.


So deploying J Ruby, you can do the


standard Ruby thing if you want to just


run with a server like Puma. Puma works


great on J Ruby. You basically just go


into the configuration, change the


number of workers to the number of


threads, and you've got a fully parallel


single process that will run your entire


site, usually with less memory than the


all the workers you would normally have


to spin up. Uh we can also package J


Ruby applications up as either an


executable JAR file, a Java archive uh


which you run with the Java command or


as a WAR file, a web application archive


that you can deploy on any Java


application server. These are the


probably the most popular ways that big


customers use J Ruby because they've


already got Java infrastructure. They


just want to use Ruby and deploy it


alongside all the other stuff they've


got. J Ruby Rack is kind of the magic


library that ties these things together


that bridges from the Java serlet API to


any rack based application. So we have


people run rails, we have people run


Sinatra, Hanami, whatever. Deploy it the


same way on a Java server and you're


ready to go. Uh there's also a number of


users who just use J Ruby as a scripting


language for a larger Java application.


And that's another easy way to get Ruby


into the system and start building stuff


with it.


First user I want to mention here,


Quantum Inventions. It's a company out


of Singapore. Uh they use J Ruby exactly


like I just mentioned. They ship little


JAR file tools to their customers. All


they have to do is run a simple command


line and start it up or put it in a


service somewhere. They ship web


application archives, WAR files that get


deployed in on premises in the customer


cloud. And because we have a way to


ahead of time compile this code, you can


actually obfuscate the whole


application. And there's people who


package and sell commercial software


without worrying that the software, the


source code is going to be stolen. It's


all in one executable archive. You sell


it, they deploy it on their systems, and


they're ready to go.


So, second problem to tackle the C


extension problem. Uh, I've run into


this a lot of times. There's companies


that really are they're never going to


have a set of C build tools on any


server approaching production or even in


their user acceptance. Trying to get


them to have tools available to build C


extensions and to deal with all of these


other libraries that are getting pulled


in. It just doesn't happen. Well, with J


Ruby, there's no build tools necessary.


All of the extensions that we ship are


pre-ompiled regular Java bte code. They


all optimize and inline just like any


other piece of code on the VM. and


nobody has to worry about these these


security issues of having C and build


tools on the target systems.


Okay, so it's a JVM language. We fit


right into the JVM just like any other


language just like Java or Scala or


Closure. uh extensions are written in


Java all not insecure C code


and uh because we all live within the


same JVM as the same language we all


work we get the benefit of the JVM


garbage collector the GC's on the JVM


are never going to be your problem


they're never going to cause the pauses


that you might see in the C Ruby world


and people deploy J Ruby applications


that have hundreds


thousands of gigabytes terabytes of data


in a single process and the GC doesn't


care. It works just fine. You can have


huge applications on J Ruby that would


be almost impossible with the regular


Ruby implementation.


So a little walkthrough of the J Ruby


architecture here, how we fit into the


JVM. So we have our Ruby code come in on


the left. We parse and compile that into


our own intermediate representation, our


own bite code basically. And then we


have an interpreter for the bite code


and we interpret that code for some


amount of time uh until we real until we


decide that it's important enough or hot


enough to do the next step. That next


step we turn that Ruby bite code into


JVM bte code. Then the JVM just


basically takes it from there. It runs


this code, profiles it, optimizes it,


and eventually turns your Ruby code into


optimized native code. So this I think I


got the first version of the JIT


compiler done in 2008 and that was by


far the first native JIT for Ruby in the


world. Still working great and optimizes


really well. So a couple examples here.


Uh one of the big optimizations that


came in Ruby 4.0 was improving the


performance of constructing new objects.


So object new, my class new whatever. Uh


the problem in C Ruby is that anytime


there's a piece of C code that it has to


call the Ruby code and the JIT for it


YJIT cannot optimize across that C


boundary. That's a hard boundary for


optimization. And so most of the things


that we want from performance don't get


optimized into the system. What they did


is they added a new instruction that if


it's a standard object construction then


the JIT knows about it. It can optimize


it a little bit better. they know that


they C extensions are a problem for


performance. Uh but J Ruby of course


it's all Java. It's all on the JVM. So


whether we call to Java or we call to


Ruby code, it's going to inline and


optimize just great. Let's take a look


at a simple example here. Just


constructing object new as fast as we


can. How many can we do? Uh here are the


numbers for Ruby 3.4 with YJIT. This is


before that optimization came in. uh


about 10.3 million objects per second.


So this is kind of the max throughput of


your system. Simplest possible object,


how many you can do per second with that


opt new optimization. Uh around 30%


improvement. So definitely a big help


when just trying to crank through


objects and Ruby is an object- heavy


platform for sure. Lots of objects being


created, lots of garbage to clean up.


But then we look at J Ruby on any


standard JVM and it kind of changes the


whole scale of this thing.


The JVM is so efficient at optimizing


object allocation, making it not become


a GC problem if these are short-lived


objects. We're orders of magnitude more


performance on this sort of thing. And


this cascades to arrays, hashes,


everything that you're doing in a Ruby


application. the JVM is going to be able


to keep up with much higher throughput,


much more allocation than the standard


runtime can.


Something a little bit less synthetic.


This is a little there's a script that


does generates a very simple mandelro


bit map. Uh and here again, J Ruby just


by the nature of being on the JVM and


having that native JIT, the performance


is better than twice what it is in C


Ruby even with their native JIT. The


JVM's got a lot more years in it, a lot


more performance. Uh, and we generally


can beat C Ruby on any benchmark.


Uh, interesting to note, there are


actually other JIT compilers for the


JVM. One of them is the Growljit. You


might have heard of Growl VM. Uh, if you


plug this benchmark into the Growl VM,


it gets even faster. Growl actually can


eliminate a whole bunch of temporary


objects and now we're twice as fast as J


Ruby on a standard JDK just by switching


configurations switching what JVM you


use your performance can actually go up.


So user focus here Poshmark uh is a big


e-commerce site uh for both new and used


products. They use J Ruby because of


this high performance because they have


things like flash sales. They have huge


amounts of traffic coming through and


they need throughput to be solid,


latency to be as low as possible and


it's the only way they can handle these


thousands, tens of thousands of


concurrent users and get the performance


that they need.


All right, so the libraries sometimes we


want to use a new feature or there's a


library in the Ruby world that just


doesn't implement things well. Uh that's


generally not a problem on J Ruby. if if


there's something you want to do,


there's probably five or six Java


libraries out there that do it, and


maybe like two of them are really good.


So, you can pull any of these libraries


into J Ruby and have all of that


functionality available.


Uh, hundreds of thousands of libraries


out in Maven Central and then there's


other repositories as well. Probably the


biggest collection of utilities and


libraries out there for almost any


language platform. Uh very easy to pull


these libraries into Ruby code. Let's go


right to a little example here. Uh


there's a QR code. This is to a blog


post I wrote recently showing how to use


a library called JFreechart. It's been


around almost as long as J Ruby. Uh but


it's a very solid library for generating


charts and graphs in various formats. Uh


first of all what we have in J Ruby is


something called jar file which is sort


of like a gem file for bundler but you


specify the namespace and coordinates


and version of what libraries you want


to use. Here I'm pulling in some


libraries from JFreechart.


Uh you run the lock jars tool that we


ship with J Ruby which is basically like


bundle install. It'll pull those


libraries down put them in a standard


location on your system and now you have


those available. No build tools, no C


build required. It's just on your


system.


Here we're going to import a few of the


classes from those libraries. So we're


pulling in the uh standard category data


set 3D and a keyed values basically a


store for the values we're going to put


into this chart. We pull in JSON and


then this is just the standard JSON


library with the standard file read. We


read our JSON data in. We parse it and


then we build up this this standard


category 3D data set that we're going to


populate for our uh 3D graph.


Do a little bit of tweaking here. Add


some titles to it. Add some headers and


so on. Uh adjust the colors, change


where we've got the legend for this


whole thing. Then we can generate a PNG


from this. And with practically no


configuration, no customization, we've


got this for free. Not the prettiest


chart in the world. There's work that we


can do to clean this up, but that was


all maybe 10 lines of code. No C


libraries to pull in. No le libraries


required to be installed on the system,


and you've got a full charting library.


There's also backends for this with the


exact same code. You can dump out SVG.


You can dump out uh PDFs as well. Uh and


there's a couple other formats, but it's


all the same code and it works fine in J


Ruby.


Some of you might have done the Glimmer


workshop here, the Glimmer web workshop.


Uh Glimmer, there he is. Glimmer also


supports building desktop guey


applications. Uh and the J Ruby plus SWT


option is a really easy way to build


portable graphical interface


applications. Again, package it up as a


JAR file, send it to a customer, they


run it, they've got a full graphical


console on their system without


installing anything else. It's really


amazing.


Uh we also have in the past supported uh


a set of Android APIs called Rub. These


are a little bit rotted at this point,


but we're willing to work with somebody


to update them. This is a demo


application, Rubato IRB. Basically gives


you a little IRB console and a very


simple editor within an application on


your Android phone. You can try out Ruby


stuff. You can type in code and run it.


uh just needs a little bit of updating


and we can get this back out there. So


if you're interested in building Ruby


applications for Android, just let us


know.


So the user focus I want to have here is


Cami. Uh they are a tool for education


used around the world. Millions of


students and teachers. Uh basically


teachers post homework. The kids go in


and they can do their edits. They can


fill in the work work worksheets send it


back to the teacher. Teacher grades it.


teacher marks it up and so on. But this


application, it's a standard Rails app


in the front end, but all of the heavy


lifting is done by a backend J Ruby


service. It uses PDF libraries on the


JVM, which are fast and standards


compliant. They process millions and


millions of PDFs through this thing a


day, and it works great. They could not


be handling this load if they didn't


have JB available.


So big data and high concurrency. This


is where we start to scale up and have


problems with some of the the systems we


use with regular Ruby. JVM is really


just designed for this. Um, and I would


even say if you have a tiny app and C


Ruby works well for you, stick with it.


But when you need us, the J Ruby


platform, the JVM is here to help take


it up to that next level. So I mentioned


the garbage collectors, worldclass GCs,


the best garbage collectors in the


world. Uh many of these configured can


be configured to be literally pauseless.


You trade a little bit of throughput for


zero pause times in your application.


Not something that the standard Ruby can


even get close to doing. Uh GC is


probably never going to be your problem.


I've run huge amounts of data through J


Ruby running with hundreds of threads


creating a tremendous amount of garbage.


GC never even bats an eye at it.


Uh we get some nice tools for monitoring


this stuff too. This is called visual


VM. It's a standard open- source tool


for the JVM. Uh what you're seeing here


on the left is some basic stats. How


many threads are running, how much


overall heap size there is. On the right


is actually a live view of the garbage


collector. So you can monitor your


application locally or in production


over secure socket and see whether the


heap is growing, whether we've got that


nice saw to that keeps collecting or


whether things are leaking over time.


And then from there you can pull off


things like heap dumps. You can look for


memory memory uh problems. Uh and really


an amazing set of tools. And this is


just the beginning.


So on the concurrency side, this is


something that there's been a lot of


work recently in the Ruby world trying


to do concurrent uh concurrent execution


of code, concurrent running of Ruby


stuff. uh prior to the introduction of


the Ractor API pretty much impossible to


get concurrency in a single Ruby


process. You need to spin up workers and


you need to coordinate between them


somehow. Uh with J Ruby, it's trivial to


do this. You can use multiple threads.


You can use shared data in the same


process and fully parallelize fully get


the use of all of the cores on your


system. So I made a little demo example


here. Uh this is basically just trying


to process JSON as fast as possible. So


we've got say hundreds of JSON files. In


this case, we're reparsing one giant one


megabyte JSON file that came from


somewhere. But you can imagine if we've


got these coming in from all sorts of


requests, we need to be able to handle


these in parallel and move quickly with


them. Here is a version that uses


threads. So instead of doing a hundred


parses in one thread, we're going to do


10 on each and split that work up


between the threads. And it's really


that easy to get the use of all the


cores in my system. Spin up 10 threads,


have them each do a piece of the work,


and you get full use of the system. This


is roughly the equivalent for C Ruby


right now. You use a ractor to do this.


Um there's a lot of details missing here


like you would need to make that data


rack safe when you pass it back to the


rest of the system. you can't interact


with anything that's mutate mutable from


the main system. Uh, a lot of hoops that


you have to jump through, but you can


get parallelization a little bit better


with ractors now. So, I'm excited to see


this coming along and it means people


are going to be doing a lot more


interesting thread safe code, too. So,


let's compare these.


So, we've got C Ruby with threads on the


left. Basically, not really getting any


extra usage out of the 10 cores that I


have in my system. uh it's kind of


spread out across those cores, but each


one's only using a tiny bit of what the


CPU can do. So in this case, it was


about a 1.6 times improvement. Uh that's


probably because the actual JSON parsing


can sort of get parallelized. Ractors


are definitely helping here. So here


with my with the the four performance


cores, 10 efficiency cores, I get about


a 3.7 times improvement by using 10


ractors. So this is certainly a big


improvement over what we had in standard


Ruby in the past. But then of course J


Ruby, we're maxing out all of the cores.


Uh those six efficiency cores translate


to about another two uh two performance


cores, get about six times performance


on my system, but I could throw 50


cores. I could throw a hundred cores at


this, max them all out, uh and the


Ractors would still be just kind of


ticking up a little bit. very easy to


get fully parallel code running anything


on J Ruby.


So, how many people have used Log Stash


before? Log Stash actually is uh has


been a J Ruby app for pretty much its


entire lifespan. This is a centralized


log aggregation tool that you deploy on


one server and all of the logs from all


of your applications get dumped into


this and managed and distributed. Uh


clearly lots of parallel applica


parallel use there. lots of requests


coming in from all over your enterprise.


Blog Stash could not be what it is today


without J Ruby and being able to handle


this stuff massively parallel across the


whole system.


Uh, another one that takes big advantage


of this substitute alert is an


application used in the United States


for distributing substitute teacher


requests. Uh, teachers out sick, anybody


that's available that day can get a


notification saying we've got a


substitute slot open. So that's sending


out hundreds or thousands of requests


all at the same time, responding to


their yes or no whether they can take


that job. All scales really well and


they've been a great customer for us and


we work very closely with them to keep


improving J Ruby and making sure it


works for their application.


Uh this is a fun quote I got recently


from someone a new user that just


started using J Ruby about two months


ago. Uh J Ruby is excellent. I don't


even code for MRI anymore and I don't


miss it. They're getting better


performance, better scaling, and the


entire set of features on top of this


platform.


So, let's talk a little bit about J Ruby


Futures here. Uh 10.1 and beyond. I


mentioned that we've got 10.1 coming


out. We're very excited about this.


There's a bunch of new optimizations.


We've managed to shrink the size of


objects. We've managed to improve the


number of places where it inlines and


optimizes code well for us. Uh we're


also taking more advantage of a whole


bunch of new JVM features. There's


features that can pre-optimize your


code. So once you go into production,


it's already warm. It's already running


fast. There's a a feature called liiput


that shrinks objects even more in


memory. J Ruby's objects are actually


down about half the size of the objects


in C Ruby in memory. And I was amazed. I


ran a test yesterday where I basically


just create 10 million objects and hold


them in memory. And for the first time,


the JVM running J Ruby had a smaller


process size than C Ruby. I was blown


away.


Uh so yes, upgrade your JVM and you get


these features for free, but we're


continuing to integrate them and make it


automatic that you get the best out of


whatever level of JDK you're on. So a


final problem. Maybe this sounds cool.


Maybe you want to start playing with


this. Maybe you don't know how to get


started with J Ruby. Well, obviously my


company can help with this. I've been


working on J Ruby for 20 years. I can


handle anything that you want to throw


at it. So please, if you're interested,


get in contact with us. We can help you


do some trials for your applications,


help you do new application work. Uh


yeah, new development, migration of


existing apps to J Ruby. If you're


already running J Ruby and you don't


know how to upgrade it, we can help with


that, too. This is how J Ruby


development is funded today. Uh I get I


I got a little bit of GitHub sponsors


and that like buys a couple beers for me


a month, but this is where it actually


the rubber hits the road. So, if this is


interesting to you and you think it


might help your company, please get in


touch. Other than that, I am here for


free questions and you can ask me


whatever you like. I've got a bunch of J


Ruby stickers and HDIA stickers down


here for anybody who wants them during


the break. Uh I think we have time for


some questions. Is that correct?


Excellent. So, let's get to that right


over here.


>> I have how to switch it on.


>> One, two, three.


The first ones.


>> Yeah.


>> One, two, three. Okay. Hey, hello. Thank


you for speech. It was very interesting.


Uh, really short question. What is bad


about J J J J J J J J J J J J J J J J J


J J J J J J J J J J J J J J J J J J J J


J J J J R R Ruby.


>> If I if I had a 45minut talk, I would


have put that one in. Um, so the the


other a the other question that I get


after I tell people what J Ruby is, the


qu the next question is, well, why isn't


everyone using this? And I'm like, well,


yeah, it does all of this stuff. Why


doesn't everyone use it? Uh, there are


two or three things that people run


into. Number one, and this is improving


every day and is much better now,


startup time. Uh, the JVM is not known


for getting up and going fast. So let's


say 5 10 years ago uh J Ruby running a


rake task where C Ruby would take 500


milliseconds to a second J would be like


four or five seconds to do it. It's just


enough to throw off your flow and people


get really annoyed especially if you're


doing lots of rake tasks lots of Rails


commands uh you know iterative


development on a command line it gets in


the way. That's much better now. J Ruby


is probably going to be in the one to


1.5 seconds for a big rake task or


something that loads a lot of Ruby gems.


Our baseline startup is well under a


second, probably down to 400


milliseconds. So that's kind of going


away, but that's one of the first


things. Uh the other one that people run


into, we do not support all of those C


extensions that are out there. In most


cases that are big important libraries


like Anokuggeiri, like JSON, like Psych,


for YAML, we have our own J Ruby version


that will install automatically when you


get the gem. But we still find lots of


little C extensions all over the world


that need a J Ruby version. Uh sometimes


we can point you to a JVM library that


does the same thing and then it's just a


matter of changing your API calls a


little bit. Uh other times we'll work


with those authors to get a J Ruby


version that works. But that's probably


the next thing that most people trip on.


Other than that, it's once you get it up


and going, if you can take your


application and bundle it, it's probably


just going to work. Like almost all of


it should just work. It's getting past


the the the concerns about startup time.


And we have various ways to mitigate it


and any libraries that are missing


support for J Ruby.


>> Sure. Any other questions?


>> Hi, thank you for your talk. Um I might


catch you later for more elaborate


answer but just uh in Lyman terms um


what's the difference between J Ruby


especially on growvm and truffle Ruby?


>> Okay difference between J Ruby and


truffle Ruby. Uh truffle Ruby is another


implementation. It's not it's not really


a JVM version of Ruby. it kind of only


runs on growl VM and it depends very


heavily on growl VM to have any sort of


performance at all. Uh they have taken a


very different approach. They are trying


to support C extensions. They are trying


to be absolute blazing fast performance


on small things on on fast little


benchmarks. uh we have focused more on


being a whole ecosystem, a whole


platform pulling in JVM libraries,


making it easy to deploy. Uh we've just


kind of had different goals. Uh as far


as I know, J Ruby still has way more


deployments out there. We are probably


the most popular really like the only


alternative Ruby with huge scales and


large applications that have been


deployed out there. Um, truffle Ruby


also some of the stuff I talked about


with us being smaller and more compact


in memory. Generally, truffle Ruby is


going to use a lot more memory because


of the way they optimize, because of the


way the systems designed. And the


startup time also tends to be a big


problem for them. They haven't really


solved that issue.


>> Any other questions?


>> Thank you. Can you reliably run a Rails


application on J Ruby?


>> Yes, you can. And there's actually a


bunch of users out there. Hundreds,


thousands, I don't know. We only hear


from them when we break something. So


like like I probably didn't even know


about any of these applications in the


room. Uh Rails for sure is is a big use


case for us. You can take a Rails


application. Rails itself has done a lot


of work over the years to be thread


safe. Uh the one catch right now, we


still don't quite have database adapters


for 8 8.0 and 8.1 out, but that's almost


ready and almost done. I actually did


the MCP workshop and I followed along


the whole thing just using a little bit


older version of Rails, generated the


scaffolds, hooked up the MCP stuff, and


it all worked just exactly like it would


in C Ruby modulo a few little


configuration changes. So yeah,


definitely Rails works well. Um, if you


want to want to see some super high


performance, there are people who have


taken little Sinatra applications with


like the SQL database library handling


like 10,000 concurrent requests,


hundreds of thousands of stuff per


second, huge amounts of scale on that.


So, all the way from little service


level applications up to full Rails apps


works great.


We got time for one more question.


Can you before Sunday help me change my


Ractor talk to use J Ruby?


>> So you're speaking Sunday.


>> Yeah.


>> Okay. That's not the question. The real


question is so with Rails and like


deploying to a platform


like a Heroku or a Railway or something


like that, what is that like? Is is that


any more significant in terms of getting


it up and running on that kind of a


platform?


>> I don't know about all of them. I know


Heroku, every time we do a release, they


put out the J Ruby build pack that works


fine just like it does with regular Ruby


and it's all there and works well. Um,


any of these cloud services that have


support for deploying Java applications,


obviously they can deploy J Ruby apps


very easily. uh really because the


command line and the whole workflow for


J Ruby development is pretty much the


same. Any of these can easily support


it. Uh it's just a matter of probably


providing a configuration file that does


Ruby install J Ruby instead of Ruby


install 4.0 or whatever. There's really


not that much difference.


>> And then you said the adapters for 808.1


aren't there yet, but soon.


>> Yeah. So there are a couple folks that


really needed them. They've told me that


they are just running from gems they


built off master and they're working


fine. I think the main reason we haven't


released is because we have a high bar


for passing all of the active record


tests or as many of them as we can and


we're not quite where we wanted to be


for a release yet.


>> Thank you.


>> Sure. And I think that's it. We've got a


little break before the next talk. Thank


you very much. Come get some stickers.


You