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