metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-06-17 01:33 pm

Крестики же.

Вот жеж страуструпъ намутил, блин.
const/не-const
указатель/ссылка/значение
куча/стек

[identity profile] nivanych.livejournal.com 2012-06-18 11:14 am (UTC)(link)
Это неправда.
Во-первых, для _кодогенерации_ не нужно глубогокого описания семантики.
Во-вторых, описание некоторого подмножества сишечки не так и сложно.
Я сам лично пробовал таким вот образом низкоуровневого программировать, и получалось куда прикольнее C++. Тогда я активно работал с C++ и ещё мог оценить...
Получаются относительно нормальные макросы, взамен всяких там <>.
И уже дальше, при желании, если задача большая и сложная, то моожет быть, и стоит моделировать глубже. Вот там уже и возникнут, вероятно, и пачки монадных и даже стрелочных трансформеров. Но и без этого, получается ничуть не хуже C++.
Типаа, в C++ это всё так замечательно типизровано, что ли??...
Это у меня было, приблизительно, в эпоху, когда только-только в GHC сделали инфиксную запись типов и вот уже включали в новый GHC. Помню потому, что помню, как радовался ;-)

[identity profile] thedeemon.livejournal.com 2012-06-18 03:10 pm (UTC)(link)
Сгенерить код "шоб работало" сравнительно несложно. А вот видеокодек так писать, придется массу подробностей указывать - тут выравнивание, тут интринсик, тут столько битов в арифметике, тут столько, тут на стеке массивчик, тут еще что. Сокращения кода не ожидается, только синтаксис многословнее.

[identity profile] nivanych.livejournal.com 2012-06-18 03:49 pm (UTC)(link)
Если говорить про написание на чистом си, ну или подмножестве, которое эмулируем — да, даже близкого по объёму кода добиться сложно.
А если говорить про C++, о чём и начали разговор, то все его возможные мета-хрени будут выглядеть куда проще.
И дело вовсе не в выравнивании и битах в арифметике.

[identity profile] thedeemon.livejournal.com 2012-06-18 04:42 pm (UTC)(link)
Ну вот, сэкономим на метахрени, проиграем на основной массе кода. Речь про генерацию зашла в контексте видеокодеков, там метахрени мало, а банальной арифметики много.

[identity profile] nivanych.livejournal.com 2012-06-19 02:10 am (UTC)(link)
У меня для кода микроконтроллеров чисто "сишная" часть получалась раза в полтора больше по объёму.
Сейчас бы, я бы смог сделать получше и было бы больше процентов на 20. Причём, _только_ из-за синтаксиса.
Если бы не поленился с Template Haskell, то можно было бы сделать так же или близко к тому.
В контексте видеокодеков — не знаю, неохота смотреть-вспоминать. Посмотрю пример ниже. Да и тебе тут виднее.

При управлении пачками шаговых двигателей по определённому нетривиальному сценарию, именно "мета" в смысле имитации высокоуровневых конструкций особенно и не была нужна, признаю. Для этого, надо сильно другую специфику.
Зато, было запросто строить свой EDSL с хорошими такими гарантиями корректности. И это было очень проще, чем в сишечке. И работать с получившимся было проще.
Что (не) получится упростить в кодеке, посмотрю.

[identity profile] thedeemon.livejournal.com 2012-06-19 02:36 am (UTC)(link)
Да, вот корректность - это то, в чем реально тут можно хорошо выиграть. В недавнем моем проекте-кодеке самые частые баги были - забыл счетчик инициализировать, забыл где надо увеличить или увеличил не на ту дельту.

[identity profile] thedeemon.livejournal.com 2012-06-18 03:14 pm (UTC)(link)
Собсно, чего далеко ходить. Вот очень простой но реальный кодек:
http://ffmpeg.org/doxygen/trunk/msvideo1_8c-source.html
Что тут сильно упростится при генерации его из хаскеля?

[identity profile] nivanych.livejournal.com 2012-06-19 02:25 am (UTC)(link)
Следовало бы приложить ссылку типа
http://wiki.multimedia.cx/index.php?title=Microsoft_Video_1