- लेखक ने एक learning project के रूप में Rust में लिखा गया
rjvm नाम का JVM बनाया है.
- यह JVM एक toy implementation है, और generic, thread, reflection, annotation, I/O या JIT compilation को support नहीं करता.
- यह JVM control flow statements, primitive और object creation, virtual और static method calls, exception handling, garbage collection, और
jar फ़ाइलों से class resolution को implement करता है.
- लेखक ने test suite को implement करने के लिए OpenJDK 7 के वास्तविक
rt.jar का उपयोग किया.
- कोड तीन crates से बना है:
reader, vm और vm_cli.
reader crate .class फ़ाइलों को parse कर सकता है और उनकी सामग्री को model कर सकता है.
vm crate में वह virtual machine शामिल है जो कोड चला सकती है.
vm_cli crate VM के लिए एक सरल command line launcher है.
- लेखक इस बात पर विचार कर रहे हैं कि दूसरे लोग भी इसका उपयोग कर सकें, इसलिए
reader crate को एक अलग repository में निकाला जाए.
.class फ़ाइलों को load करना Java कोड चलाने का पहला कदम है.
- class files में class से जुड़ा metadata, superclass और interface के नाम, fields और methods, तथा उनके descriptors और bytecode शामिल होते हैं.
vm crate का मुख्य API Vm::invoke है, जिसका उपयोग methods को execute करने के लिए किया जाता है.
vm crate Rust में implement किए गए Java bytecode methods और native methods, दोनों को support करता है.
- JVM stack-based है, इसलिए bytecode instructions value stack और local variables पर काम करते हैं.
- values और objects को Rust के
enum और struct का उपयोग करके model किया गया है.
- method execution में bytecode instructions को एक-एक करके चलाना, program counter को update करना, और stack व local variables को manipulate करना शामिल है.
- JVM virtual और static lookup सहित कई प्रकार के method calls को support करता है.
- exceptions को exception table का उपयोग करके implement किया गया है, और वे method के सामान्य control flow को बाधित कर सकते हैं.
- लेखक को Rust के
Result और pattern matching का उपयोग करके exception implementation पर विशेष गर्व है.
- JVM में stop-the-world semispace copying algorithm का उपयोग करने वाला garbage collector शामिल है.
- garbage collector memory को दो semispace में विभाजित करता है और एक semispace से दूसरे में जीवित objects को copy करता है.
- लेखक ने Rust में
rjvm लिखते हुए बहुत आनंद लिया और बहुत कुछ सीखा.
1 टिप्पणियां
Hacker News राय