Rust JVM — 1
JVM based developer for over 6 years (Scala, Java, Clojure).
Experience with distributed algorithms using Apache Flink and Apache Spark.
Experience with high performance simulation development using C++ and Fortran
Interested in the Rust programming language and programming language design in general.
Contributor to the Foresight Autonomous Driving project for BMW through their joint venture with Critical Software, Critical Techworks.
The project is developed in Scala, using Apache Flink and Apache park to process map data and events. Through this project I am able to further improve my knowledge of Functional Programming and distributed algorithms.
With the support of Critical Techworks I am also a lead on the Community of Practices for the Rust Development language, where interested developers are able to learn and discuss this new programming language.
From the end of 2018 to the end of 2019 I've worked as a Calypso developer for the back office at Natixis Porto.
The first 4 years of my career I worked with the Brazilian Navy, developing simulators for the Mercantile Navy. During this period I was able to learn and develop my skills as a programmer. Over the last two years at the project I was assigned the role of Technical Manager in the project, where I was tasked with the decisions over our technology stack, tools and processes.
There we successfully migrated from SVN to Git using a self hosted GitLab instance, implemented a CI pipeline and moved old support systems (such as file sharing servers and databases) to newer and more modern technologies. The success of these migrations in the project raised the interest of the rest of the development group, and many projects are moving to the same processes we implemented here. In March 2018 my team and I released the first version of our simulator for the Mercantile Navy School in Rio de Janeiro. An article about the inauguration can be found in the following link (in portuguese):
https://www.marinha.mil.br/ciaga/node/425
Technical information about the simulator can be found in the following link (in Portuguese):
https://www.marinha.mil.br/ipqm/node/114
From September 2014 to June 2018 I contributed as a tutor for the CEDERJ foundation, where I helped students on topics such as Programming using Pascal and Python, basic computing using Libre Office tools and mathematics courses for Computer Science courses.
Introduction
No more bullshit, let’s begin the year with a bang!
Project Setup
The project will be hosted at Github, where eventually I’ll setup some Github actions to compile and test the code. For now you just need to access it through the following link:
https://github.com/pedrohjordao/justvm11
The name comes from an old project where I was implementing the JVM8 specification, but I’ll be starting this one from scratch (though with a lot of the experience from the other project in mind).
I’ll keep tags in the format “post-#” so you can follow along with the exact point where the project was in a given post. The tag “post-1” will contain the initialized project structure.
Project Structure
I’ll not be following the HotSpot structure. The project will use the workspaces feature from Cargo, and we will not care about os/cpu details unless where it is strictly necessary. The project contains the following workspaces:
class_reader will contain the code that parses .class files into a representation we can work with;
class_commons will contain the primitives we will be working with;
interpreter will contain the code that is able to parse the bytecode and execute it;
jni will contain the FFI interface through which eventually we will be able to plug our code into javac;
runtime contains the runtime code, that is, the runtime representation of classes, bytecode, class loaders, etc.
This is not a set in stone structure, but it is a nice starting point to split the project in a reasonable manner.
Contributing
Please, feel free to contribute to the project by forking it and creating PRs, creating issues and calling me out for mistakes I make.
Since this is meant to be a learning experience I need to keep in pace with the posts, so contributions might need to be reworked or split to follow the programming of the posts.
Finally, make sure you keep references to the specification in your documentation.
Conclusion
This was a short one, but as I promised we will start the year with a bang, so tomorrow we will have a new post with code!



