Про всякие генерации кода.

Mar 02, 2012 01:41

Илея использования Хаскеля, как лучший C (VHDL, Javascript, и тд), чем сам C (VHDL, Javascript, и тп) состоит в использовании системы типов Хаскеля, синтаксиса Хаскеля и частично семантики Хаскеля. Вообще, это получается такая строго типизированная макросистема, возможно, оптимизирующая ( Read more... )

dsel, разное, Хаскель

Leave a comment

Comments 19

ex_juan_gan March 1 2012, 21:59:51 UTC
Справедливо. По-моему, главное препятствие - непробиваемость организаторов софтверного производтсва, у которых в голове не укладывается, что кто-то может понимать больше их в этом деле.

Reply

thesz March 1 2012, 22:50:49 UTC
Я тут HPC область издалека наблюдаю практически изнутри.

В общем и целом, дело движется в указанном выше направлении.

Reply


isorecursive March 2 2012, 00:34:11 UTC
Клёво. А что насчёт трансформеров монад для декомпозиции/модуляризации/расширяемости кодогенератора?

Reply

thesz March 2 2012, 00:52:16 UTC
Там особо много не требуется. И скомбинировать VHDL и C тяжеловато. ;)

Хотя всё равно может быть полезно. Например, мы можем просто тупо генерировать код с разными параметрами (монада State), а потом выбирать наилучший (монада List).

Reply


dmzlj March 2 2012, 05:20:57 UTC
Хм. Фактически, макроязык, генерирующий Си, оперирующий примитивом "оперативная память" и административная воля, принуждающая писать сишный только на нём. Надо подумать. Не очень ясно, что остается от Хаскелла в этом случае. И вот еще что.

Код, содержащий большой объем TH компилируется ОЧЕНЬ медленно и ест ОЧЕНЬ много памяти при компиляции. А firmware бывает очень взрослого объема.

Вообще, интересно бы написать на этом языке для начала базовые примитивы -- stack, ring_buffer, queue, list, tail call + tail recursion, lambda + lambda conversion и так далее. Это возможно? Вот например, замыкания + размыкание незамкнутых замыканий.

Reply

ext_956459 March 2 2012, 11:02:03 UTC
то, что сказал ТС, я понял очень поверхностно, поэтому расскажу как я это понимаю

предположу, что от хаскеля останется самое ценное -- система типов; остальное -- ленивость и персистентные структуры данных доступны и в с/с++, так что особой ценности не представляют, скорее наоборот -- обуза

Reply

ext_956459 March 2 2012, 11:05:51 UTC
возможность с помощью системы типы тайпчекнуть ленивость в том случае, когда она и правда нужна я отношу к системе типов, а не к ленивости

Reply

ext_956459 March 2 2012, 11:14:39 UTC
> размыкание незамкнутых замыканий

а что это такое?

Reply


ext_956459 March 2 2012, 11:16:42 UTC
на такой степени краткости я не понимаю

где-нибудь есть полные примеры, которые можно попытаться "поломать" и поглядеть на ошибки, которые будут выдаваться, скажем, для bracket?

Reply

thesz March 2 2012, 11:25:19 UTC
Нет.

Попробуйте написать самостоятельно. В конце концов, это же не приложение.

Reply

ext_956459 March 2 2012, 11:37:08 UTC
само по себе включать мозги конечно полезно, но в хаскеле я совсем не склонен это делать -- лучше изучать готовое

Reply

ext_956459 March 2 2012, 11:47:13 UTC
а вот запрограммировать те идеи, что у меня уже есть, и погонять их в REPL думаю будет мне полезно

Reply


otake March 2 2012, 13:50:55 UTC
Вопрос "в струю" системы типов Haskell: насколько сложно реализовать систему конструирования типов, используемую в Modula2:

CONST No = 8;
CONST Nt = 1024;
TYPE Elem = No .. Nt;
TYPE TTT = ARRAY [ 'i' .. 'n' ] OF SET OF Elem;
...

Reply

thesz March 2 2012, 15:47:54 UTC
Это зависимые типы данных, где тип данных зависит от значений. В Хаскеле такого нет. Это есть в Coq или Agda2.

Да ещё и помощнее, с type erasure и проверками на этапе компиляции, а не во время выполнения.

Reply

otake March 2 2012, 17:12:21 UTC
Спасибо - Agda2 выглядит на первый взгляд интересно, стоит покопаться детальнее...

Reply

thesz March 2 2012, 19:52:22 UTC
Вот в Агде себя можно зафксировать в практически любой позиции.

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

Reply


Leave a comment

Up