2008-09-28 45 views
8

Tôi hiểu rằng IronPython là một triển khai Python trên nền tảng .NET giống như IronRuby là việc triển khai Ruby và F # là nhiều hơn hoặc ít hơn OCaml.Hiệu suất ngôn ngữ .NET động?

Điều tôi không thể hiểu là liệu các ngôn ngữ này có hoạt động gần hơn với "tổ tiên" của chúng hay gần hơn với một cái gì đó như C# về mặt tốc độ. Ví dụ, là IronPython bằng cách nào đó "biên dịch" xuống cùng một bytecode được sử dụng bởi C# và, do đó, sẽ chạy nhanh như vậy?

Trả lời

9

IronPython và IronRuby được xây dựng dựa trên thời gian chạy ngôn ngữ động DLR - và được biên dịch thành CIL (bytecode do .NET sử dụng). Chúng chậm hơn C# nhưng faaaaaaar nhanh hơn các đối tác không phải của chúng. Không có bất kỳ điểm chuẩn phong nha nào ngoài đó, với kiến ​​thức của tôi, nhưng bạn sẽ thấy sự khác biệt.

+0

Bạn có bằng chứng nào về "faaaaaaar nhanh hơn các đối tác không phải của họ không?" Ngoài ra còn có cách nào để tránh thời gian khởi động 10 giây nguy hiểm không? – Unknown

1

Hiện tại IronRuby khá chậm trong hầu hết các trường hợp. Nó chắc chắn chậm hơn so với MRI (Matz 'Ruby Implementation), mặc dù ở một số nơi chúng nhanh hơn.

IronRuby không có khả năng nhanh hơn nhiều, mặc dù tôi nghi ngờ rằng chúng sẽ không bao giờ đạt được gần C# về mặt tốc độ. Trong hầu hết các trường hợp, nó không quan trọng. Một cuộc gọi cơ sở dữ liệu có lẽ sẽ chiếm tới 90% tổng thời lượng của một yêu cầu web, ví dụ.

Tôi nghi ngờ nhóm sẽ hoàn thành ngôn ngữ thay vì thực hiện trước tiên. Điều này sẽ cho phép bạn chạy IronRuby & chạy hầu hết các chương trình ruby ​​khi 1.0 tàu, sau đó họ có thể cải thiện perf khi họ đi.

Tôi nghi ngờ IronPython có một câu chuyện tương tự.

7

IronPython thực sự là triển khai Python nhanh nhất trên mạng. Đối với một số định nghĩa "nhanh nhất", ít nhất: chi phí khởi động của CLR, ví dụ, là lớn so với CPython. Ngoài ra, trình biên dịch tối ưu hóa IronPython có, thực sự chỉ có ý nghĩa, khi mã được thực hiện nhiều lần.

IronRuby có khả năng nhanh như IronPython, vì nhiều tính năng thú vị làm cho IronPython nhanh chóng, đã được trích xuất vào Dynamic Language Runtime, trên cả IronPython và IronRuby (và JavaScript được quản lý, Dynamic VB, IronScheme, VistaSmalltalk và những người khác) được xây dựng.

Nói chung, tốc độ triển khai ngôn ngữ là khá độc lập với các tính năng ngôn ngữ thực tế và phụ thuộc nhiều hơn vào số lượng năm công việc kỹ thuật đi vào đó. IOW: năng động so với tĩnh không quan trọng, tiền bạc.

Ví dụ: Lisp phổ biến là ngôn ngữ thậm chí còn năng động hơn Ruby hoặc Python, nhưng vẫn có các trình biên dịch Lisp phổ biến ở đó thậm chí có thể cung cấp cho C chạy tiền. Việc triển khai Smalltalk tốt chạy nhanh như Java (không có gì ngạc nhiên vì cả hai JVM chính, Sun HotSpot và IBM J9, thực ra chỉ là các máy ảo Smalltalk được sửa đổi nhỏ) hoặc C++. Chỉ trong 6 tháng qua, các triển khai JavaScript chính (Mozilla TraceMonkey, Apple SquirrelFish Extreme và đứa trẻ mới trên khối, Google V8) đã thực hiện các cải tiến hiệu suất ginormous hiệu suất, 10x và hơn thế nữa, để đưa JavaScript trực tiếp với chưa được tối ưu hóa C.

1

Bạn đã có ý tưởng đúng bằng cách giả định rằng hiệu suất của triển khai .NET hiện đại sẽ nằm giữa tổ tiên và của C#. Lý do là C# rất giống với .NET.

F # là không có trí tuệ vì C# và OCaml có đặc điểm hiệu suất tương tự.

IronPython khó hơn nhiều vì Python và C# có đặc điểm hiệu suất cực kỳ khác nhau. Trong thực tế, câu trả lời phụ thuộc vào bản thân triển khai IronPython, điều này sẽ cố gắng chuyển đổi đánh giá kiểu Python không hiệu quả thành đánh giá hiệu quả kiểu C bất cứ khi nào có thể. Mong IronPython thường chậm hơn rất nhiều so với C# với các gai đột xuất vào cùng một lãnh thổ. Bạn có thể thấy hiệu ứng này here.

Chúc mừng, Jon Harrop.

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