3 पॉइंट द्वारा GN⁺ 2023-07-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • लेखक ने एक 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 टिप्पणियां

 
GN⁺ 2023-07-22
Hacker News राय
  • JVM में Rust में लिखे गए garbage collector का implementation इस सवाल को उठाता है कि heap के references की सही rooting कैसे सुनिश्चित की जाती है।
  • लेख में उल्लेख है कि cloned repository में tests चलाने पर classpath में entries जोड़ने से जुड़ी error आती है।
  • एक commenter ने अतीत में Java OS project पर काम करने के अपने अनुभव को याद करते हुए Rust में JVM implement करने के memory safety फ़ायदों पर ज़ोर दिया।
  • JVM में generics support को लेकर सवाल है कि क्या type erasure के कारण सब कुछ Object के रूप में handle होता है।
  • एक commenter ने function signatures में lifetime usage की सीमाओं और उनके error handling पर असर के बारे में पूछा।
  • इस project को उसकी उपलब्धि और learning experience के लिए सराहा गया है।
  • project के creator को job offer भी दिया गया है।
  • Go में लिखे गए एक दूसरे JVM implementation का link साझा किया गया है।
  • एक commenter ने project की प्रशंसा करते हुए Rust शुरू करने के लिए guide की सिफारिश मांगी।
  • इस project को JVM की foundational layer के रूप में बताया गया है, जिसमें दिलचस्प base mechanisms हैं।
  • hobby operating system project का हल्के-फुल्के अंदाज़ में ज़िक्र किया गया है।
  • समान projects के links भी साझा किए गए हैं।