Библиотека сайта rus-linux.net
Среда времени выполнения динамических языков и языки Iron
Глава 8 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: The Dynamic Language Runtime and the Iron Languages
Автор: Jeff Hardy
Дата публикации: 2012 г.
Перевод: Н.Ромоданов
Дата перевода: ноябрь 2013 г.
Creative Commons. Перевод был сделан в соответствие с лицензией Creative Commons. С русским вариантом лицензии можно ознакомиться здесь.
Языки Iron являются неформальной группой реализаций языков, у которых, в честь первого из них — языка IronPython, в названиях есть приставка «Iron» (железный — прим.пер.). У всех у них есть, по крайней мере, одна общая черта: они являются динамическими языками, ориентированными для использования в общей среде времени выполнения Common Language Runtime (CLR), которая более известна как .NET Framework, и они построены поверх динамической среды времен выполнения Dynamic Language Runtime (DLR). «CLR» является общим термином; платформа .NET Framework реализована фирмой Microsoft, также есть реализация с открытым исходным кодом - Mono. DLR представляет собой набор библиотек для CLR, которые обеспечивают гораздо лучшую поддержку динамических языков в среде CLR . Оба языка IronPython и IronRuby используются в нескольких десятках проектов с закрытым и с открытым исходным кодом, и оба находятся в стадии активной разработки; среда DLR, разработка которой началась как проект с открытым кодом, включена в качестве частей в проекты .NET Framework и Mono.
С точки зрения архитектуры языки IronPython и IronRuby и среда DLR являются одновременно как достаточно простыми, так и необычайно сложными. На самом высоком уровне их проекты похожи на многие другие реализации языков, с анализаторами и компиляторами, а также генераторами кода; но посмотрите на них поближе и начнут появляться интересные подробности: для того, чтобы сделать так, чтобы динамические языки выполнялись почти так же быстро, как статические языки на платформе, которая разработана для статических языков, используются точки вызовов, средства привязки, адаптивная компиляция и другие методы
8.1. История
История языков Iron начинается в 2003 году. Джим Хаганин (Jim Hugunin) уже написал для виртуальной машины Java (JVM) реализацию языка Python, которая называлась Jython. В тот момент среда Common Language Runtime (CLR) для .NET Framework, тогда еще новая, рассматривалась некоторыми (кем именно, точно сказать не могу) как плохо подходящая для реализации таких динамических языков, как Python. После того, как Джим реализовал язык Python на JVM, ему стало интересно, насколько фирма Microsoft сделала платформу .NET, возможно, хуже, чем язык Java. В сентябре 2006 года он писал в блоге:
Я хотел понять, насколько сильно фирма Microsoft потеряет свое лицо, т. к. среда CLR была как платформа хуже для динамических языков, чем JVM. Мой план состоял в том, чтобы потратить пару недель для сборки прототипа реализации языка Python на CLR, а затем использовать эту работу для того чтобы написать короткую содержательную статью под названием «Почему среда CLR является ужасной платформой для динамических языков». Пока я работал над прототипом, мои планы быстро изменились, поскольку обнаружил, что язык Python может работать в среде CLR - во многих случаях заметно быстрее, чем реализация на основе языка C. Для стандартного бенчмарка pystone язык IronPython в среде CLR работал приблизительно в 1,7 раза быстрее, чем реализация на основе языка C.
Часть «Iron» («железный» ), используемая в имени, стала обыгрыванием названия компании Want of a Nail Software, в которой в то время работал Джим. (Прим.пер.: Want of a Nail Software означает программы, выполняющие некоторые незначительные операции, которые, в общей совокупности, могут оказать достаточно большое воздействие, т. е. что-то вроде «эффекта бабочки»).
Вскоре после этого Джим был нанят фирмой Microsoft для того, чтобы сделать платформу .NET более подходящей для динамических языков. Джим (и несколько других разработчиков) создал среду DLR при помощи выделения языково-нейтральных частей оригинального кода реализации IronPython в отдельный код (факторинга). Для того, чтобы создать общее ядро реализации динамических языков платформы .NET, была разработана среда DLR и она было основной новой особенностью платформы .NET 4.
В тот момент, когда была анонсирована среда DLR (апрель 2007), фирма Microsoft для того, чтобы продемонстрировать приспособляемость среды DLR к различным языкам, также объявила, что в добавок к новой версии языка IronPython, собранного на базе среды DLR (IronPython 2.0), также на базе среды DLR будет разрабатываться язык IronRuby. В октябре 2010 года Microsoft прекратила разработку языков IronPython и IronRuby, и они стали независимыми проектами с открытым исходным кодом. Интеграция с динамическими языками, использующими среду DLR, также рассматривалась как основная особенность языков C# и Visual Basic, использующих новое ключевое слово (dynamic), что позволило этим языкам легко обращаться к любому языку в среде DLR или к любому другому динамическому источнику данных. Среда CLR уже была хорошей платформой для реализации статических языков, а среда DLR делает динамические языки основными игроками платформы.
К числу других реализаций языков, которыми не занималась фирма Microsoft, но в которых также используется среда DLR, относятся IronScheme и IronJS. Кроме того, в PowerShell v3 фирмы Microsoft также будет использована среда DLR вместо ее собственной системы динамических объектов.
Продолжение статьи: Принципы реализации среды времени выполнения динамических языков