IronScheme интерпретируется или компилируется? Выигрывает ли он от оптимизации .NET Framework?

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

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


person Robert Harvey    schedule 10.11.2010    source источник


Ответы (1)


Как и 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