Как сделать язык .Net или JVM? - PullRequest
13 голосов
/ 04 апреля 2009

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

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

Редактировать

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

Ответы [ 6 ]

7 голосов
/ 04 апреля 2009

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

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

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

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

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

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

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

4 голосов
/ 04 апреля 2009

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

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

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

3 голосов
/ 04 апреля 2009

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

Вот стандартная спецификация ECMA-335 CLI .

1 голос
/ 04 апреля 2009

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

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

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

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

Microsoft сами опубликовали Ротор , также есть Моно конечно. Есть также много популярных методов генерации кода во время выполнения, которые создают простые классы-обёртки на лету - это тоже мини-компиляторы.

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

0 голосов
/ 13 октября 2011

Взгляните на эту презентацию от Олы Бини. Загрузите слайды также.

0 голосов
/ 04 апреля 2009

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

...