Как создать язык .Net или JVM?

Я вижу все эти новые языки для .NET и JVM. Как это сделать?

Я не могу найти хорошую документацию по спецификациям JVM или MSIL.

Edit

Я уже знаю, как разбираться, меня больше интересует, как так много людей создают новые языки, основанные на этих платформах.

Ответ 1

Ты вроде как повезло. Существует взрыв языков, которые разрабатываются для .NET, и есть статьи/ресурсы, предназначенные для таких людей, как вы сами (а не только крупные корпорации с тоннами денег для инвестиций).

Найдите "динамическое языковое исполнение" и оттуда.

Вот несколько ссылок:

Блог парня, который является мозгом позади IronPython

Дом динамического языка исполнения

Статья о том, как IronPython был реализован

Сообщение в блоге о абстрактных синтаксических деревьях и DLR

Ответ 2

Технические характеристики виртуальной машины Java, второе издание доступны в Интернете.

Можно настроить таргетинг на JVM, написав компилятор, который создает байт-код Java (который определен в спецификациях JVM.)

Или, используя существующие библиотеки, такие как Apache BCEL, можно создать достоверные файлы class через Java-программу, не имея на самом деле манипулировать байт-кодом на уровне байта.

Ответ 3

MSIL уже не называется MSIL, как общедоступный стандарт - CIL (Common Intermediate Language), часть стандарта CLI (Common Language Infrastructure).

Здесь спецификация ECMA-335 CLI.

Ответ 4

Ответ на обновленный вопрос:

Я уже знаю, как разбирать, я больше заинтересованы в том, как их так много люди, создающие новые языки, которые на основе этих платформ.

Что позволяет так много людей разрабатывать языки для этих платформ, вероятно, это наличие нескольких очень полных примеров с общедоступным исходным кодом.

Характеристики платформ доступны для загрузки, и людям, уже имеющим опыт написания компиляторов, не потребовалось много времени для создания новых бэкэндов для существующих компиляторов, предназначенных для новых платформ.

Microsoft сама опубликовала ротор, есть также Mono конечно. Существует также множество популярных методов генерации кода времени выполнения, которые строят простые классы-оболочки на лету - это тоже мини-компиляторы.

Компилятор С# довольно быстро и предоставляет большинство объектов CLR прямо, поэтому вы можете написать компилятор, который просто создал временные файлы С#, а затем получил компилятор С# для завершения задания.

Ответ 5

Для .NET вы можете использовать деревья выражений DLR или даже скомпилировать существующий высокоуровневый langauge, например С# или Java, а затем скомпилировать это. Некоторые высокоуровневые языки без VM (liek Haskell и Eiffel) компилируются на C. Если вы хотите скомпилировать байт-код MSIL или JVM, вы можете использовать Mono. Cecil или BCEL, чтобы сделать это проще.