ailev.ru

7 июля 2009 · Комментарий

Без заголовка

Кстати насчет DSL. Сейчас уже более менее зрело программирование с dependent types. Депендент тайп - типа параметризованные выражениями, например массив четных числе или массив длины 5. Фактически, депендент тайпс позволяют задавать спецификации, и явно или неявно доказывать их корректность - путем написания функции которая преобразует тип одновременно с функцией, которая преобразует входные данные. А затем компилятор проверяет валидность преобразования. Фактически неявно доказывается соответствие программы спецификации (выраженной типом). Эти языки пока новы, но их уже штук 5 минимум. Дык вот, есть такой язык/формальная система - Coq. Это система ХОЛ, поддерживающая депендент тайпс. Она весьма зрелая (на ней написали уже верифицированный компилятор подмножества Си, а один парнище пишет книгу, где убеждает что верифицированное программирование уже зрелая технология). Из программ/доказательств на этом языке, можно генерить Хаскел и МЛ код. А в Хаскел и МЛ языках есть библиотеки парсер комбинаторов - что-то типа ОМета (точнее, ОМета - это что-то вроде библиотеки парсер комбинаторов). В результате, получается что этот Coq - готовое йазыковое капище, ибо: 1 лексинг/парсинг можно вести в Хаскел/МЛ, там это легко и элегантно описывается (как в ОМета) 2 АСТ легко задается системой типов Хёдли-Милнера, которая лежит в основе Хаскел/МЛ типов 3 в Coq можно описывать преобразования из различных АСТ, задавать семантики языков, доказывать корректность и т.д. Сложности с верификацией в значительной степени облегчаются системой депендент тайпс плюс специализированными верификационным тактиками. 4 можно задавать и императивные фичи. В Хаскеле это делается монадами, которые хорошо разработаны. Монада - это такой способ инкапсуляции состояния и встраивания его в чистый функциональный язык. Для Coq есть библиотека работы с императивными монадами. 5 чистый функциональный язык типа Хаскела довольно просто кладется на многоядерность, ибо там порядок вычислений не важен, следовательно, подвыражения можно вычислять параллельно. Вобщем, компьютерная революция похоже началась и я ее немного проспал :). Хотя с Coq знаком с 2001 года.

К записи · К обсуждению