Реализация функциональных языков для среды CLR (или, документы по реализации F #)

#compiler-construction #f# #lambda #functional-programming #clr

#компилятор-построение #f# #лямбда #функциональное программирование #clr

Вопрос:

Кто-нибудь знает какие-нибудь хорошие статьи по реализации компилятора F #? Я пытаюсь сгенерировать CIL-код для простого функционального языка, ориентированного на среду CLR, но у меня возникли проблемы с несколькими аспектами.

Различия между функциональными языками и CIL затрудняют генерацию хорошо типизированного кода CIL. У меня есть решения, которые работают с помощью стирания типов, но я бы предпочел найти способ генерировать CIL-код, который отражает (по крайней мере, в некоторой степени) систему типов Хиндли-Милнера моего исходного языка (например, путем генерации универсальных классов). Судя по сгенерированному коду из компиляторов MS и Mono F #, им удается добиться именно этого!

Комментарии:

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

2. Может быть, фактический исходный код F # поможет? blogs.msdn.com/b/dsyme/archive/2010/11/04 /…

Ответ №1:

Существует не так много научных работ по реализации на F # — хотя компилятор с открытым исходным кодом, поэтому вы можете изучить исходный код, если хотите узнать о некоторых конкретных деталях. (Кстати: компилятор F #, доступный в Mono, основан на выпуске с открытым исходным кодом, поэтому он по сути такой же, как компилятор F #, доступный в Visual Studio).

Единственной соответствующей академической публикацией является статья Дона Сайма ILX: расширение общего языка .NET для функциональной совместимости языков. Это довольно интересное чтение — в нем обсуждается, как можно расширить IL, чтобы упростить компиляцию функциональных языков. Под обложкой начальные версии компилятора F # компилируются в этот расширенный IL (ILX), который затем переводится в обычный IL. С тех пор детали, вероятно, изменились, но основные принципы останутся теми же.

Комментарии:

1. Для функциональных языков в целом я бы также рекомендовал Саймона Пейтона-Джонса «Реализация функциональных языков»: research.microsoft.com/en-us/um/people/simonpj/papers /…

2. Хорошо, итак, я прочитал статью Дона Сайма, и я продан идее нацеливания на ILX. Однако, похоже, я не могу найти никаких ресурсов для загрузки / использования ассемблера ILX. Включено ли это в VS / Mono? Он был удален / немного гниет?