Реализация функциональных языков для CLR (или документы по реализации F #) - PullRequest
3 голосов
/ 04 ноября 2011

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

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

1 Ответ

9 голосов
/ 04 ноября 2011

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

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

...