3 điểm bởi GN⁺ 2023-07-22 | 1 bình luận | Chia sẻ qua WhatsApp
  • Tác giả đã tạo ra một JVM viết bằng Rust có tên là rjvm như một dự án học tập.
  • JVM này là một bản triển khai mang tính thử nghiệm và không hỗ trợ generics, luồng, reflection, annotation, I/O hoặc biên dịch JIT.
  • JVM này triển khai các câu lệnh điều khiển luồng, kiểu nguyên thủy và tạo đối tượng, gọi phương thức ảo và tĩnh, xử lý ngoại lệ, garbage collection và phân giải lớp từ tệp jar.
  • Tác giả đã triển khai bộ kiểm thử bằng cách sử dụng rt.jar thực tế của OpenJDK 7.
  • Mã nguồn gồm ba crate: reader, vmvm_cli.
  • Crate reader có thể phân tích tệp .class và mô hình hóa nội dung của chúng.
  • Crate vm chứa máy ảo có thể thực thi mã.
  • Crate vm_cli là một trình khởi chạy dòng lệnh đơn giản cho VM.
  • Tác giả đang cân nhắc tách crate reader thành một kho lưu trữ riêng để người khác có thể sử dụng.
  • Việc nạp tệp .class là bước đầu tiên để thực thi mã Java.
  • Tệp lớp chứa metadata về lớp, tên lớp cha và interface, các trường và phương thức cùng descriptor và bytecode của chúng.
  • API chính của crate vmVm::invoke, được dùng để thực thi phương thức.
  • Crate vm hỗ trợ cả phương thức bytecode Java và phương thức native được triển khai bằng Rust.
  • JVM là một hệ thống dựa trên stack, trong đó các lệnh bytecode hoạt động trên ngăn xếp giá trị và biến cục bộ.
  • Giá trị và đối tượng được mô hình hóa bằng enumstruct của Rust.
  • Việc thực thi phương thức bao gồm chạy từng lệnh bytecode một, cập nhật bộ đếm chương trình và thao tác với stack cùng biến cục bộ.
  • JVM hỗ trợ nhiều kiểu gọi phương thức khác nhau, bao gồm tra cứu ảo và tĩnh.
  • Ngoại lệ được triển khai bằng bảng ngoại lệ và có thể làm gián đoạn luồng điều khiển thông thường của phương thức.
  • Tác giả tự hào về cách triển khai ngoại lệ bằng Result và pattern matching của Rust.
  • JVM bao gồm một bộ gom rác sử dụng thuật toán sao chép bán không gian stop-the-world.
  • Bộ gom rác chia bộ nhớ thành hai bán không gian và sao chép các đối tượng còn sống từ bán không gian này sang bán không gian kia.
  • Tác giả đã có rất nhiều niềm vui và học hỏi được nhiều điều khi viết rjvm bằng Rust.

1 bình luận

 
GN⁺ 2023-07-22
Ý kiến trên Hacker News
  • Việc triển khai bộ gom rác viết bằng Rust trong JVM đặt ra câu hỏi về cách bảo đảm việc root đúng cách cho các tham chiếu tới heap.
  • Bài viết đề cập rằng khi chạy thử nghiệm trên kho lưu trữ đã sao chép, sẽ phát sinh lỗi khi thêm mục vào classpath.
  • Người bình luận nhớ lại kinh nghiệm từng làm việc trong một dự án Java OS trước đây và nhấn mạnh lợi ích về an toàn bộ nhớ của việc triển khai JVM bằng Rust.
  • Có câu hỏi về việc hỗ trợ generic trong JVM, liệu mọi thứ có đều được xử lý như Object do type erasure hay không.
  • Người bình luận hỏi về giới hạn của việc sử dụng lifetime trong chữ ký hàm và tác động của nó tới xử lý lỗi.
  • Dự án này được khen ngợi về thành tựu và giá trị học hỏi mà nó mang lại.
  • Một lời mời làm việc được gửi tới người sáng lập dự án.
  • Một liên kết tới triển khai JVM khác được viết bằng Go được chia sẻ.
  • Người bình luận bày tỏ sự thán phục với dự án và xin được chỉ dẫn về hướng dẫn bắt đầu với Rust.
  • Dự án này được mô tả như tầng nền tảng của JVM với những cơ chế cơ bản thú vị.
  • Có một nhắc đến hài hước về các dự án hệ điều hành làm vì sở thích.
  • Một liên kết tới dự án tương tự cũng được chia sẻ.