5

В книге «IronPython in Action», автор утверждает, что IronPython, в отличие от CPython, выигрывает от определенных оптимизаций, как в JIT, так и в самой структуре, которые CPython не может использовать. Следовательно, IronPython потенциально быстрее, чем CPython, особенно для многопоточных сценариев.Является ли IronScheme интерпретированным или скомпилированным? Получается ли это благодаря оптимизации .NET Framework?

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

ответ

3

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

Кроме того, в IronScheme нет интерпретируемых частей (если вы не вызываете вызов со временем выполнения), так как я довольно сильно вырвал все это из моей «ветви» DLR из-за того, что не использовался и не уменьшал (по моим оценкам, я использовал только около 25% DLR, где остальные были скорее ориентированы на 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 соответственно, чтобы назвать несколько.

+0

Спасибо, Leppie. –