Это неправда. Во-первых, для _кодогенерации_ не нужно глубогокого описания семантики. Во-вторых, описание некоторого подмножества сишечки не так и сложно. Я сам лично пробовал таким вот образом низкоуровневого программировать, и получалось куда прикольнее C++. Тогда я активно работал с C++ и ещё мог оценить... Получаются относительно нормальные макросы, взамен всяких там <>. И уже дальше, при желании, если задача большая и сложная, то моожет быть, и стоит моделировать глубже. Вот там уже и возникнут, вероятно, и пачки монадных и даже стрелочных трансформеров. Но и без этого, получается ничуть не хуже C++. Типаа, в C++ это всё так замечательно типизровано, что ли??... Это у меня было, приблизительно, в эпоху, когда только-только в GHC сделали инфиксную запись типов и вот уже включали в новый GHC. Помню потому, что помню, как радовался ;-)
Сгенерить код "шоб работало" сравнительно несложно. А вот видеокодек так писать, придется массу подробностей указывать - тут выравнивание, тут интринсик, тут столько битов в арифметике, тут столько, тут на стеке массивчик, тут еще что. Сокращения кода не ожидается, только синтаксис многословнее.
Если говорить про написание на чистом си, ну или подмножестве, которое эмулируем — да, даже близкого по объёму кода добиться сложно. А если говорить про C++, о чём и начали разговор, то все его возможные мета-хрени будут выглядеть куда проще. И дело вовсе не в выравнивании и битах в арифметике.
Ну вот, сэкономим на метахрени, проиграем на основной массе кода. Речь про генерацию зашла в контексте видеокодеков, там метахрени мало, а банальной арифметики много.
У меня для кода микроконтроллеров чисто "сишная" часть получалась раза в полтора больше по объёму. Сейчас бы, я бы смог сделать получше и было бы больше процентов на 20. Причём, _только_ из-за синтаксиса. Если бы не поленился с Template Haskell, то можно было бы сделать так же или близко к тому. В контексте видеокодеков — не знаю, неохота смотреть-вспоминать. Посмотрю пример ниже. Да и тебе тут виднее.
При управлении пачками шаговых двигателей по определённому нетривиальному сценарию, именно "мета" в смысле имитации высокоуровневых конструкций особенно и не была нужна, признаю. Для этого, надо сильно другую специфику. Зато, было запросто строить свой EDSL с хорошими такими гарантиями корректности. И это было очень проще, чем в сишечке. И работать с получившимся было проще. Что (не) получится упростить в кодеке, посмотрю.
Да, вот корректность - это то, в чем реально тут можно хорошо выиграть. В недавнем моем проекте-кодеке самые частые баги были - забыл счетчик инициализировать, забыл где надо увеличить или увеличил не на ту дельту.
no subject
Во-первых, для _кодогенерации_ не нужно глубогокого описания семантики.
Во-вторых, описание некоторого подмножества сишечки не так и сложно.
Я сам лично пробовал таким вот образом низкоуровневого программировать, и получалось куда прикольнее C++. Тогда я активно работал с C++ и ещё мог оценить...
Получаются относительно нормальные макросы, взамен всяких там <>.
И уже дальше, при желании, если задача большая и сложная, то моожет быть, и стоит моделировать глубже. Вот там уже и возникнут, вероятно, и пачки монадных и даже стрелочных трансформеров. Но и без этого, получается ничуть не хуже C++.
Типаа, в C++ это всё так замечательно типизровано, что ли??...
Это у меня было, приблизительно, в эпоху, когда только-только в GHC сделали инфиксную запись типов и вот уже включали в новый GHC. Помню потому, что помню, как радовался ;-)
no subject
no subject
А если говорить про C++, о чём и начали разговор, то все его возможные мета-хрени будут выглядеть куда проще.
И дело вовсе не в выравнивании и битах в арифметике.
no subject
no subject
Сейчас бы, я бы смог сделать получше и было бы больше процентов на 20. Причём, _только_ из-за синтаксиса.
Если бы не поленился с Template Haskell, то можно было бы сделать так же или близко к тому.
В контексте видеокодеков — не знаю, неохота смотреть-вспоминать. Посмотрю пример ниже. Да и тебе тут виднее.
При управлении пачками шаговых двигателей по определённому нетривиальному сценарию, именно "мета" в смысле имитации высокоуровневых конструкций особенно и не была нужна, признаю. Для этого, надо сильно другую специфику.
Зато, было запросто строить свой EDSL с хорошими такими гарантиями корректности. И это было очень проще, чем в сишечке. И работать с получившимся было проще.
Что (не) получится упростить в кодеке, посмотрю.
no subject
no subject
http://ffmpeg.org/doxygen/trunk/msvideo1_8c-source.html
Что тут сильно упростится при генерации его из хаскеля?
no subject
http://wiki.multimedia.cx/index.php?title=Microsoft_Video_1