4 ms·
"There has been much talk about component architectures but only one true success: Unix pipes. It should be possible to build interactive and distributed applic
by api 12y ago
"There has been much talk about component architectures but only one true success: Unix pipes. It should be possible to build interactive and distributed applications from piece parts."
Java has many success stories in this area, starting with the amazing reusability of POJOs (plain old Java objects). I can take Java code from 1996 and almost always compile it and use it now without major refactoring and without having to really look at the internals. I can do it with the API docs only. Beyond POJOs there are many abstraction techniques like beans that have been used to build huge software systems that have stood the test of time, albeit with a bit of clunkiness. But Unix pipes are a bit clunky too.
I coded a lot with Java years ago. It's been out of vogue for quite some time -- though it's still very popular just not trendy. Lately I've been reflecting on some of the pain points of other languages and thinking "wow, Java really did have a lot of things right."
I've also been thinking that the JVM is almost an OS, and that it sort of wants to be. There were some efforts in that direction, but none really went anywhere. It's not quite perfect, but I feel like it's the only thing we've had in the past 30 years that looks like a step toward a post-C/Unix operating system that could really work. I also feel like in the age of many-cores we could do away with problems like GC pauses completely. I could forsee a future many-core box where 2-4 (of 32-64) cores are just almost flat out dedicated to GC, JITing, tracing, optimization, etc. When you've got that many cores you could dedicate a few to the OS and not worry much about it. The benefits would be things like forgetting about manual memory management, etc.
Also note that the JVM can run more than Java. Java would just be the "core language" of this hypothetical OS, taking the place of C on Unix.
- MrBuddyCasino 12y ago> I also feel like in the age of many-cores we could do away with problems like GC pauses completely. Unfortunately its not a resources problem, or else there wouldn't be an issue with GC pauses on fast hardware. There is a solution for that though, and Cliff Click of Azul Systems is willing to sell you the only pause-less JVM GC there is for the low low price of 7500$ per server (see http://www.azulsystems.com/products/zing/whatisit http://www.azulsystems.com/products/zing/whatisit).
- api 12y agoMy guess is he's using lock-free data structures + a lot of cleverness.
- hga 12y agoSomewhat more than that: http://www.azulsystems.com/sites/default/files/images/c4_paper_acm.pdf http://www.azulsystems.com/sites/default/files/images/c4_pap... Including a read barrier variation and batch VM remapping operations (change a bunch of large pages, only invalidating the TLB once at the end).
- pron 12y agoIn fact, there's a unikernel specifically optimized to run the JVM (as its only process): http://osv.io/ http://osv.io/
- jbergens 12y agoIsn't this exactly what Pike and other did not want? POJOs are not really components, you can't send them over the wire to something else, or split a system into subsystems with good security between. And CORBA did not work out. You can probably not get something like Rust to run really well on the JVM (the latter has GC and Rust tries to avoid that) etc. You can still build great system with Java but you can already do that with many other things like C++, Go, C# etc.