Как 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
соответственно, чтобы назвать несколько.
Спасибо, Leppie. –