Mối quan hệ giữa Thời gian chạy ngôn ngữ động và C # 4.0 là gì?


11

Giả sử tôi muốn tạo một trình biên dịch / trình thông dịch ngôn ngữ động, một trình thông dịch Scheme có lẽ, trên nền tảng .NET như nó tồn tại ngày nay. Tôi sẽ tốt hơn khi sử dụng Thời gian chạy ngôn ngữ động (DLR) hoặc sử dụng C # 4.0 để triển khai các tính năng động của ngôn ngữ của mình? Hay tôi cần cả hai?

Tôi biết rằng đã có những công việc khác được thực hiện trong lĩnh vực này, đặc biệt là với IronSchemeIronPython . Cả hai ngôn ngữ này đều sử dụng DLR; Tôi tin rằng IronPython sử dụng phiên bản DLR mới nhất (khoảng một năm tuổi), trong khi IronScheme sử dụng một ngã ba được sửa đổi rất nhiều của phiên bản đầu tiên của DLR. Nhưng C # 4.0 không khả dụng khi các trình biên dịch này được tạo.

Tôi đã thấy Rob Conery hoạt động với Massive, sử dụng các tính năng động của C # 4.0; nó khá ấn tượng Nhưng liệu C # có giữ được nỗ lực toàn diện của trình biên dịch / intepreter ngôn ngữ động không? Có các tính năng nào trong DLR bị thiếu trong C # hay DLR về cơ bản được đưa vào C # 4.0 không? Tôi có thể thiếu bất kỳ tính năng quan trọng nào của DLR không nếu tôi chỉ sử dụng riêng C # 4.0?


Tôi tin rằng các tính năng .Net 4.0 Dynamic cũng dựa trên DLR.
Dave Nay


@Dave: Tôi sẽ hài lòng với một liên kết hiện tại, có thẩm quyền đến một bài viết mô tả chi tiết mối quan hệ giữa thời gian chạy .NET 4.0 và DLR. Điều này sẽ cho tôi một ý tưởng hợp lý nếu hệ thống loại động trong C # 4.0 đủ mạnh và liệu có bất kỳ tính năng quan trọng nào trong DLR bị bỏ qua trong thời gian chạy .NET 4.0 hay không. Tôi đã tìm thấy một số bài báo, nhưng tất cả chúng đều được viết lại vào ngày khi DLR đang hình thành, và nhiều trong số chúng là đầu cơ.
Robert Harvey

Câu trả lời:


3

Đây là bài viết tôi nhớ đọc. msd.microsoft.com/en-us/magazine/gg598922.aspx

Sau đó, DLR cũng được đưa vào .NET Framework 4 để hỗ trợ các tính năng động trong C # và Visual Basic. Nếu bạn chỉ cần từ khóa động trong C # 4, bạn chỉ cần sử dụng .NET Framework và trong hầu hết các trường hợp, nó sẽ tự xử lý tất cả các tương tác với DLR. Nhưng nếu bạn muốn triển khai hoặc chuyển một ngôn ngữ động mới sang .NET, bạn có thể được hưởng lợi từ các lớp trợ giúp bổ sung trong dự án nguồn mở, có nhiều tính năng và dịch vụ hơn cho những người triển khai ngôn ngữ.


3

Từ: jimmysch

Robert,

Sự thật: Cả IronRuby và IronPython đều sử dụng DLR, trên thực tế hầu hết các tính năng của DLR đều bắt nguồn từ việc triển khai IronPython trước đó. Tôi không quen với cách sử dụng phiên bản DLR IronScheme. Một phần của DLR (Microsoft.Scripting.Core.dll) đã được gửi trong .NET 4.0 trong System.Core.dll và phần đó là những gì C # 4.0 sử dụng để hỗ trợ từ khóa "động", đó là lý do tại sao hội thảo đó không có mặt trong các bản dựng .NET 4.0 của DLR.

Phần còn lại của cơ sở mã của DLR (Microsoft.Scripting.dll, Microsoft.Docate.dll là quan trọng nhất) có sẵn để tải xuống từ dự án CodePlex này hoặc dự án GitHub của IronLacular. Họ cung cấp các API cho người tiêu dùng và nhà sản xuất ngôn ngữ lưu trữ, trong khi các API trong .NET 4.0 thực sự thực hiện các phương thức động.

Để viết trình biên dịch ngôn ngữ động cho .NET 4.0, tôi sử dụng C # làm ngôn ngữ triển khai và sử dụng DLR làm thư viện để đơn giản hóa các tác vụ biên dịch phổ biến. Để biết một ngôn ngữ ví dụ đơn giản trên DLR, hãy xem Sympl.

~ Jimmy

http://dlr.codeplex.com/discussions/268746#post656778

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.