Вопрос

Я понимаю, что IronPython — это реализация Python на платформе .NET, точно так же, как IronRuby — это реализация Ruby, а F # — это более или менее OCaml.

Чего я, кажется, не могу понять, так это того, насколько эти языки работают ближе к своим «предкам» или ближе к чему-то вроде C # с точки зрения скорости.Например, будет ли IronPython каким-то образом «скомпилирован» в тот же байт-код, который используется в C#, и, следовательно, будет работать так же быстро?

Это было полезно?

Решение

IronPython и IronRuby построены на основе DLR — среды выполнения динамического языка — и на лету компилируются в CIL (байт-код, используемый .NET).Они медленнее, чем C#, но намного быстрее, чем их аналоги, не использующие .NET.Насколько мне известно, достойных эталонов не существует, но вы увидите разницу.

Другие советы

IronPython на самом деле является самой быстрой реализацией Python.Для некоторого определения «самого быстрого», по крайней мере:например, затраты на запуск CLR равны огромный по сравнению с CPython.Кроме того, оптимизирующий компилятор IronPython действительно имеет смысл только тогда, когда код выполняется несколько раз.

IronRuby потенциально может быть таким же быстрым, как IronPython, поскольку многие интересные функции, которые делают IronPython быстрым, были извлечены в среду выполнения динамического языка, на которой работают как IronPython, так и IronRuby (а также управляемый JavaScript, Dynamic VB, IronScheme, VistaSmalltalk и другие). построены.

В общем, скорость реализации языка в значительной степени не зависит от реальных особенностей языка и в большей степени зависит от количества человеко-лет, затраченных на разработку.ВАУ:динамический против.статика не имеет значения, важны деньги.

Например, Common Lisp — это язык, который даже более динамичен, чем Ruby или Python, и тем не менее существуют компиляторы Common Lisp, которые могут даже дать C возможность побороться за свои деньги.Хорошие реализации Smalltalk работают так же быстро, как Java (что неудивительно, поскольку обе основные JVM, Sun HotSpot и IBM J9, на самом деле являются лишь слегка модифицированными виртуальными машинами Smalltalk) или C++.Всего за последние 6 месяцев основные реализации JavaScript (Mozilla TraceMonkey, Apple SquirrelFish Extreme и новичок на рынке, Google V8) сделали огромный повышение производительности в 10 и более раз, чтобы сравнять JavaScript с неоптимизированным C.

В настоящее время IronRuby во многих отношениях довольно медленный.В целом это определенно медленнее, чем MRI (Ruby Implementation Matz), хотя в некоторых местах они быстрее.

IronRuby действительно может быть намного быстрее, хотя я сомневаюсь, что они когда-нибудь смогут приблизиться к C# с точки зрения скорости.В большинстве случаев это просто не имеет значения.Например, вызов базы данных, вероятно, будет составлять 90% от общей продолжительности веб-запроса.

Я подозреваю, что команда в первую очередь будет стремиться к полноте языка, а не к производительности.Это позволит вам запускать IronRuby и большинство программ Ruby, когда выйдет версия 1.0, а затем они смогут улучшать производительность по ходу работы.

Я подозреваю, что у IronPython похожая история.

Вы правильно поняли, предположив, что производительность современной реализации .NET будет между производительностью предка и C#.Причина в том, что C# очень близок к самому .NET.

F# не представляет никакой сложности, поскольку C# и OCaml сами имеют схожие характеристики производительности.

IronPython намного сложнее, поскольку Python и C# имеют совершенно разные характеристики производительности.Фактически, ответ зависит от самой реализации IronPython, которая будет стремиться преобразовать неэффективную оценку в стиле Python в эффективную оценку в стиле C#, когда это возможно.Ожидайте, что IronPython в целом будет намного медленнее, чем C#, с периодическими всплесками на той же территории.Вы можете увидеть этот эффект здесь.

Ура, Джон Харроп.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top