2009-07-17 9 views
13

Tôi đang thiết kế một ngôn ngữ lập trình biên dịch sang bytecode trung gian. Tuy nhiên, tôi đang gặp rất nhiều khó khăn khi thiết kế cấu trúc bytecode. Có ai có bất kỳ con trỏ về làm thế nào để đại diện cho một chương trình trong nhị phân? Ngoài ra, có bất kỳ tài nguyên nào (tốt nhất là miễn phí) về cách thực hiện điều này không? Gần nhất tôi đã tìm thấy là description of the Lua interpreter's bytecode.Thiết kế Bytecode?

EDIT: Thêm một chút thông tin: Tôi đang triển khai lược đồ thu gom rác của riêng mình, được tối ưu hóa rất nhiều cho tính không thay đổi và đồng thời. Vì hiệu quả, tôi cần một số hướng dẫn bytecode duy nhất cho phép các chương trình tương tác với lược đồ thu gom rác.

Trả lời

4

This article mô tả các Smalltalk VM và GNU của nó bytecode. Googling cho "Smalltalk bytecode" sẽ đến với các nguồn lực khác.

1

Bạn có thể tìm thấy nó hữu ích để nhìn vào bài viết trên Wikipedia về Bytecode http://en.wikipedia.org/wiki/Bytecode " và làm theo một số tài liệu tham khảo cho các ngôn ngữ của thời đại và phong cách bạn quan tâm.

5

Đừng thiết kế bytecode của bạn nó không cần thiết!

tôi sẽ khuyên bạn nên nhìn vào LLVM và 0.123.làm rất nhiều công việc khó khăn cho bạn và chỉ yêu cầu bạn tạo một lược đồ giống như AST để dịch sau khi bạn đã chú thích mọi thứ và giải quyết phạm vi, v.v.

Cuốn sách rồng cũng bao gồm một số phần trên bytecode. Nghệ thuật lập trình máy tính cũng có thể giúp khi ngôn ngữ Mix nêu lên một số quyết định thiết kế quan trọng.

Thật, mã trung gian của bạn nên là:

  1. Cái gì đó bạn viết là một hình thức trung gian hiệu quả cho phép các thuật toán tối ưu hóa phổ biến và dịch thuật để một backend mà không mất ngữ nghĩa qua dịch xấu và tương tự:
  2. IR nổi tiếng và được sử dụng để bạn có thể sử dụng các công cụ khác để dịch sang mã máy. Ngay cả khi bạn sử dụng thiết lập .NET/Mono như IR thì nếu nó đáp ứng nhu cầu của bạn thì tuyệt vời.

Đó là tất cả về yêu cầu của bạn, không thiết kế IR/bytecode của riêng bạn trừ khi bạn cần. Nếu cái gì khác phù hợp, hãy sử dụng nó! Bạn không cần phải duy trì nó!

+0

Cảm ơn bạn đã nhập, nhưng các tính năng sáng tạo nhất của ngôn ngữ của tôi là cấu trúc dữ liệu dựng sẵn và cách chúng được thu thập rác, thật không may phải được triển khai ở cấp VM. – Imagist

+0

@Imagist ... sau đó có thể là một con đường phía trước sẽ là xây dựng một động cơ bytecode cho phép bên ngoài hooking cho những điều này tạo ra một động cơ bytecode với internals hướng sự kiện và đoàn chức năng. Điều đó sẽ khá tuyệt vời, nó sẽ cho phép mọi người chỉ định trong BC những gì GC họ muốn sử dụng (và mọi thứ) –