2010-11-10 12 views
5

Trong cuốn sách "IronPython in Action", tác giả nói rằng IronPython, không giống như CPython, lợi ích từ tối ưu hóa nhất định, cả trong JIT và trong khung chính nó, CPython không thể tận dụng. Do đó, IronPython có khả năng nhanh hơn CPython, đặc biệt là cho các kịch bản đa luồng.IronScheme có được dịch hoặc biên dịch không? Liệu nó có được lợi ích từ việc tối ưu hóa .NET Framework không?

IronScheme được hưởng lợi từ việc tối ưu hóa như vậy không? Nó là một thông dịch viên (không phải là một trình biên dịch), và nó là một thông dịch viên bởi vì đó là bản chất của Lisp, rằng nó phải được giải thích để cung cấp sự linh hoạt giống như Lisp? Nếu nó là một thông dịch viên, nó vẫn có thể được hưởng lợi từ việc tối ưu hóa trong jitter?

Trả lời

3

Giống như IronPython (cũng là mã ban đầu với DLR mà tôi dựa trên IronScheme), IronScheme được biên dịch tất cả các con đường xuống cấp IL.

Hơn nữa, không có phần nào được giải thích trong IronScheme (trừ khi bạn gọi tra cứu ký hiệu thời gian chạy), vì tôi đã loại bỏ tất cả những thứ đó khỏi nhánh 'của tôi' của DLR, do không được sử dụng và giảm code footprint (Tôi ước tính tôi chỉ sử dụng khoảng 25% của DLR, nơi phần còn lại là khá Python-centric).

Để xem IL được tạo ra gì, bạn có thể xem cụm từ ironscheme.boot.dll trong Reflector .NET (sử dụng chế độ IL tốt nhất, vì C# có xu hướng được cấu trúc lại một cách kỳ lạ và chỉ sai trong một vài trường hợp). Toàn bộ hội đồng này được biên soạn bởi IronScheme. Để xem mã được tạo trong thời gian chạy, điều này phức tạp hơn rất nhiều. Như đã nói, điều này có tất cả các lợi ích của JIT, và với các tối ưu tôi thực hiện trên DLR để có nhiều Đề án trung tâm, nó thường thực hiện nhanh hơn IronPython khi tôi thử nghiệm lần cuối (18 tháng trở lại tốt ít nhất, tôi nhận ra IronPython đã có một vài cải tiến kể từ đó, nhưng IronScheme là một vài yếu tố nhanh hơn, thậm chí sử dụng Đề án 'cảm thấy' giống như Python thậm chí là trò chơi bóng).

Hơn nữa, tôi đã cố gắng tận dụng tối đa khuôn khổ .NET làm nền tảng cho IronScheme và để làm cho khả năng tương tác dễ dàng hơn. Những thứ như vectors, byte-vectors, binary-portshash-tables dựa trên các lớp .NET thông thường mà chúng ta đều biết và sử dụng; object[], byte[], StreamHashtable tương ứng, để đặt tên một vài.

+0

Cảm ơn, Leppie. –

Các vấn đề liên quan