metaclass: (Default)
[personal profile] metaclass
Вот жеж страуструпъ намутил, блин.
const/не-const
указатель/ссылка/значение
куча/стек

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

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

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

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

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

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

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

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

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

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 31st, 2025 08:36 pm
Powered by Dreamwidth Studios