Как и 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
соответственно, и это лишь некоторые из них.
person
leppie
schedule
11.11.2010