andrewbinstock
andrewbinstock on Hacker News
A JVM written in go. [0] We're committed to a high-quality implementation that works reliably--so our test code is > 2.x the size of our production code. We can already run lots of classes, but the finished product won't be ready for alpha testing until, we hope!, end of this year.
[0] jacobin.org
Lead dev here. I gave a detailed reply earlier. Grep for "I've always thought of the JVM as magical technlogy" on this page and you'll find it.
Lead dev here. It's been an amazing amount of work. I'd change the above adage to: Every 10% is 90% of the work!
Lead dev here. Some very cool ideas in there. Will copy/paste this into our task tracker on YouTrack for further consideration. Much appreciated.
Thanks for your note. The package notes on Jacobin say that we strongly discourage folks from running it in its present form. There are enough features still to be implemented, that for anything but trivial classes, you won't have a good experience. TBH, we're about a year out (we think) from having a version we can solicit users to test.
Nonetheless, if you'd be kind enough to post the above error and the class you used into the GitHub Issues tracker [0], we'll definitely include it in our test suite and make sure whatever the problem is, it'll be corrected.
[0] https://github.com/platypusguy/jacobin/issues
Author here. Zero-length arrays are used in the narrow domain you mention. but they are rare in bread-and-butter Java programming. Given some of the other comments on this page, you can see that this aspect is new to multiple readers. And in my experience speaking to Java devs, the reaction of surprise is far more common than "of course, I use them."
Author here. Thanks for your comment. It's sometimes a little difficult to know how deeply to go into the innards of the JVM before readers' eyes glaze over and they can't follow. I'll bear in mind for future articles in this series that I can/should go deeper than the present level.
Author here. This is simply a comment on the way that Java refers to the subarrays. I believe most developers would think of the first subarray as being referenced with [0], rather than with no index at all. That's all the comment was intended to point out.
Author here. Your "correction" is wrong. All dimensions after the zero dimension are ignored by the JVM. This is explicitly stated in the JVM spec[0].The typecheck you're leaning on is a purely syntactical construct. Inside the JVM, the arrays function and are sized just as I described.
> Object having no size() method and arrays having therefore a length field is also confused. Arrays have distinct types (and classes, in the sense of getClass()), and therefore could very well have a size() method. It’s merely a stylistic choice of Java that they opted for the simpler .length syntax.
What's the "confused" part? Again, my description is accurate and you're simply saying that Java could have chosen a different way to do the same thing, but decided not to.
[0] https://docs.oracle.com/javase/specs/jvms/se16/html/jvms-6.h...
Lead dev here. Yup, that's right. There are a few classes that we will be forced to implement in Go. We're fixated on keeping this number as low as possible, but Thread is one that is inescapable. Class is another inescapable one--if we're to support reflection, etc.
Thank you for such kind words!
That's a good question. I don't know enough about the new green threads to give you a definitive answer, but it's certainly something we'll examine closely.
Thanks for asking. I've always thought of the JVM as magical technlogy--I'm certainly not alone in that view. But in trying to learn more about it, I was greatly frustrated by the difficulty of reading the code base.
As you likely know, the Hotspot JVM is open source. But reading the code is very difficult, in part because it grew organically and in part because of its unusual design, in which many actions are buried deep at the end of a long series of function calls involving unexpected classes and unusual methods, etc.
This led me to thinking there would be value in a JVM written as a single cohesive codebase. And given that there is a 300+ page JVM specification and a reference implementation, I thought to myself, how long could this take? Two years later, and with help from two major contributors, we're still finding out! ;-)
Eventually, we hope, it will be a fun/interesting experience for users to pop open their Go IDE and watch a Java program execute--which is why we're intent on making sure it's written in 100% go.
In a larger context, Jacobin might eventually be useful as an embeddable JVM.
Lead dev here. We've run a couple of benchmarks internally just for kicks. To create a fair comparison, you have to run the Hotspot JVM with the -Xint flag, which says interpret only. Right now our performance is anywhere from 15-25% of the speed of Hotspot with -Xint on small benchmarks. We figure that the use of go alone creates some important portion of that overhead when compared with the C++ of the Hotspot JVM. We're guessing that a well-optimized Jacobin interpreter will eventually get to 50-60% of the Hotspot's -Xint speed.
But we first want to get feature parity, before pivoting to performance. When we have feature parity, we'll run the Computer Language Benchmarks and post the results. That'll be fun to see!
Author here: Long ago, when I got the domain, the project was going to be JAva COmpiler to BINary = Jacobin. And as the Jacobins were revolutionaries, it sort of fit the intended project. I don't recall whether Jacobin Magazine was in publication then or not TBH.
Author here. No threading currently. Once we have all the bytecodes executing, we will perforce be obliged to add threading. Starting with the heavier threading that Java pre-Loom uses.
Author here: Right now we're entirely focused on getting parity of functionality so that anything that runs on the Hotspot JVM runs similarly on Jacobin. There's still a lot of work to do to get there. However, once we do get there, we'll start working on performance.
Author here: Yeah, those were first attempts in other languages.
Completely agree. But I find that it happens not just on HN, but on other high-quality boards as well. (It would be improper of me to make the remark without confessing that I've done this a few times myself.)
> American's 35+?
FB has >1 billion real users. So by the simplest arithmetic, the vast majority of its users cannot be American, regardless of age.
I used Notion for about six months, including paying for the service. I could never get the hang of it. I wrote to the company and said: "Give me an overview explanation of how it all fits together so that I can distinguish pages from templates, etc."
But instead all they could point me to was endless reference pages on one feature or another. So, I was never able to get the hang of it, which as you say, is necessary to put it to best use. After several months, I cancelled my subscription and told them they need better docs: an overview/getting started guide, rather than a series of man pages.
> They don't have the master key for my mailbox or entry hall
Why would you expect someone to have your keys? That’s not a reasonable expectation.
Totally common in the US. It's not the keys to your house but to the common areas of your building, such as the lobby and hallways where packages can be left.
Fairly old article. A lot has happened since then with these technologies.
And COBOL, don't forget COBOL! ;-)
But does not run on Windows.
>We have not yet added instrumentation to the Enterprise edition versions, and we will not do so until we have a way for self-hosted customers to opt out... (Scott Williamson, Gitlab VP of product, responding to the OP)
That's not the right way to do it. Customers should need to opt in, rather than having to opt out.
Agreed. And so did the authors of Tcl. They moved away from string representations years ago, but old articles on the previous releases keep being recycled.
>Every piece of market news that says "market change X, because incident Y" is pure speculation since there is no way to establish Y as the cause.
This is not correct. There are many market news items that can be directly attributed to another event. Boeing's numbers this week are directly attributable to the Max fiasco. The company and analysts agree on this. Why would you assert that it's "pure speculation."
But, unlike Bazel, it doesn't run on Windows, which is a big limitation in enterprises.
30 Under 30 is a lot like Mensa--the only benefit of getting in is so you can tell others you got in.