At the time of writing, I am a second year computer science undergraduate student at the University of Waterloo. The winter of 2018, I interned at IBM Runtime Technologies, working on the recently open-sourced Eclipse OpenJ9 Java Virtual Machine.
It’s a bit early in my academic career to say, but at school, my favourite topics have had to do with programming languages and their runtimes. I’ve really enjoyed exploring (basic) programming language theory, and writing (basic) interpreters and (basic) compilers. When I saw the chance to work on a real-world (and very not basic) interpreter with OpenJ9, I was very excited!
During my term, I prototyped features for the Value Types component of Project Valhalla, one of the current experimental OpenJDK projects incubating new Java language features. In essence, objects in Java have several properties (like identity and hence the need for boxing, mutability, polymorphism, etc.) that incur a significant performance cost in applications where objects need only behave like values anyway. The addition of value types in Java allows the JVM to perform optimizations that are not possible with objects (for more information see http://cr.openjdk.java.net/~jrose/values/values-0.html).
Looking back on these past four months, I’m surprised how much my experience exceeded my expectations. I implemented value types and two new Java bytecodes, wrote logic for flattening structures containing values, read proposals and specifications as they came out, got better at pool, and even got to listen in on meetings where engineers planning Project Valhalla discussed and worked out issues with value types. Throughout all of it, I had support from an excellent mentor (thanks Tobi Ajila).
With so many software projects, the focus is on business logic, but working on a JVM, talking and reading about value types, I have had the chance to think about computer science topics 8 hours a day, every day, while also honing my practical software engineering skills.