IronScheme интерпретируется или компилируется? Выгода от оптимизации .NET Framework? - PullRequest
5 голосов
/ 10 ноября 2010

В книге «IronPython в действии» автор утверждает, что IronPython, в отличие от CPython, извлекает выгоду из определенных оптимизаций, как в JIT, так и в самой среде, которые CPython не может использовать в своих интересах. Следовательно, IronPython потенциально быстрее, чем CPython, особенно для многопоточных сценариев.

Пользуется ли IronScheme такой оптимизацией? Является ли это интерпретатором (не компилятором), и является ли он интерпретатором, потому что это природа Lisp, которую он должен интерпретировать для обеспечения гибкости, подобной Lisp? Если это интерпретатор, может ли он по-прежнему извлечь выгоду из оптимизаций джиттера?

1 Ответ

3 голосов
/ 11 ноября 2010

Как и IronPython (хорошо, с исходным DLR, на котором я основал IronScheme), IronScheme полностью компилируется до уровня IL.

Кроме того, в IronScheme нет интерпретируемых частей (если вы не вызываетепоиск символа времени выполнения), поскольку я в значительной степени вычеркнул все это из моей «ветви» DLR из-за того, что он не использовался и уменьшил занимаемую площадь (я оценил, что использовал только около 25% DLR, гдеrest был скорее ориентирован на Python).

Чтобы увидеть, что генерируется IL, вы можете посмотреть на сборку ironscheme.boot.dll в Reflector .NET (предпочтительно с использованием режима IL, поскольку C # имеет тенденцию быть странно и просто реструктурированным)неправильно в нескольких случаях).Вся эта сборка составлена ​​IronScheme.Чтобы увидеть сгенерированный во время выполнения код, гораздо сложнее.

Как уже говорилось, в этом есть все преимущества JIT, и с оптимизациями, которые я сделал на DLR, чтобы быть более ориентированными на схемы, он обычно выполнялся быстрее, чемIronPython, когда я в последний раз тестировал его (по крайней мере, добрых 18 месяцев назад, я понимаю, что с тех пор IronPython претерпел немало улучшений, но IronScheme был на несколько факторов быстрее, даже используя Scheme, который «чувствовал» больше как Python, даже для игры с мячом)).

Кроме того, я попытался использовать как можно больше компонентов платформы .NET в качестве основы для IronScheme и упростить взаимодействие.Такие вещи, как vectors, byte-vectors, binary-ports и hash-tables основаны на обычных классах .NET, которые мы все знаем и используем;object[], byte[], Stream и Hashtable соответственно, чтобы назвать несколько.

...