покажи мне, что ли, энкодер видео на хаскеле :) или стример того же видео / аудио на эрланге видел, на хаскеле - нет еще пусть даже он будет что-то стороннее из libav* подключать
Я думаю, написать можно и даже оптимизировать, но ничего хорошего с этого не выйдет. Оптимизированный под производительность хаскелевый код выглядит чудовищно. Интерор с сторонним тоже печален, впрочем.
Вот и основная разница. Плюсы - высокопроизводительный кроссплатформенный язык, синтаксис которого /местами/ ужасен, оброс всякими всякостями за годы. Все что он умеет можно писать и на чистых сях, но неудобно получается для больших проектов (или код выглядит как внутренности того же ffmpeg). Альтернативы я ему пока не вижу. Тут проскакивали попытки впихнуть в него гэрбедж-коллектинг, но при наличии shared_ptr оно и не сильно нужно (оверхед в случае наличия множества мелких объектов убирается аллокаторами памяти, типа гуглового или jemalloc, что позволяет избавляться от излишней фрагментированности кучи при активной работе с памятью).
ну ебать. Разве у крестиков проблемы с синтаксисом? Проблемы как раз с семантикой. Синтаксис -- почти всегда мелочь, на которую почему-то именно тупые кодеры обращают внимание.
я сколько общался со страдальцами - все жаловались на синтаксис я сам не могу быть объективен, так как на плюсах пишу уже лет 15 и давно глаз замылен т.е. что-то типа typedef boost::shared_ptr< Frame > FramePtr; FramePtr frame = boost::make_shared< Frame >( data, width, height, pixelformat ); не вызывает проблем никаких, но для многих может быть непривычным
значит дебилы-страдальцы попадались. Это бывает. Конкретно тут -- разве что type inference могла бы пофиксить синтаксис, да и то, не сильно: убрать typedef и/или тип значения frame. Но в данном куске кода это всего лишь косметика, к такому придираться низко. К отсутствию type inference придерусь, но это не синтаксис, а типизация (которую я бы назвал "семантика для компилятора", хотя слишком вольно звучит). В остальном -- пример очень понятный с точки зрения синтаксиса, если знать, что такое "t1<t2>" и "::" и представлять параметризованные типы данных (так называемая "большая лямбда" в функциональщине, "типы, зависящие от типов").
И в связи с этим приподнимается вопрос: как будет выглядет тот же хаскель лет через тридцать сверхинтенсивного индустриального использования где надо и не надо - и пары-тройки ревизий с учётом накопившегося опыта. ;)
Ну-ну, попробуй. Будет эмуляция С++ на монадах и хаскельном синтаксисе, в три раза многословнее Си, ибо скорее всего очень много низкоуровневых моментов придется прописывать явно.
Это неправда. Во-первых, для _кодогенерации_ не нужно глубогокого описания семантики. Во-вторых, описание некоторого подмножества сишечки не так и сложно. Я сам лично пробовал таким вот образом низкоуровневого программировать, и получалось куда прикольнее C++. Тогда я активно работал с C++ и ещё мог оценить... Получаются относительно нормальные макросы, взамен всяких там <>. И уже дальше, при желании, если задача большая и сложная, то моожет быть, и стоит моделировать глубже. Вот там уже и возникнут, вероятно, и пачки монадных и даже стрелочных трансформеров. Но и без этого, получается ничуть не хуже C++. Типаа, в C++ это всё так замечательно типизровано, что ли??... Это у меня было, приблизительно, в эпоху, когда только-только в GHC сделали инфиксную запись типов и вот уже включали в новый GHC. Помню потому, что помню, как радовался ;-)
Сгенерить код "шоб работало" сравнительно несложно. А вот видеокодек так писать, придется массу подробностей указывать - тут выравнивание, тут интринсик, тут столько битов в арифметике, тут столько, тут на стеке массивчик, тут еще что. Сокращения кода не ожидается, только синтаксис многословнее.
Если говорить про написание на чистом си, ну или подмножестве, которое эмулируем — да, даже близкого по объёму кода добиться сложно. А если говорить про C++, о чём и начали разговор, то все его возможные мета-хрени будут выглядеть куда проще. И дело вовсе не в выравнивании и битах в арифметике.
no subject
если кажется сложным - пиши на objective-c (бугага)
no subject
no subject
или стример того же видео / аудио
на эрланге видел, на хаскеле - нет еще
пусть даже он будет что-то стороннее из libav* подключать
no subject
no subject
no subject
Синтаксис -- почти всегда мелочь, на которую почему-то именно тупые кодеры обращают внимание.
no subject
я сам не могу быть объективен, так как на плюсах пишу уже лет 15 и давно глаз замылен
т.е. что-то типа
typedef boost::shared_ptr< Frame > FramePtr;
FramePtr frame = boost::make_shared< Frame >( data, width, height, pixelformat );
не вызывает проблем никаких, но для многих может быть непривычным
no subject
Конкретно тут -- разве что type inference могла бы пофиксить синтаксис, да и то, не сильно: убрать typedef и/или тип значения frame. Но в данном куске кода это всего лишь косметика, к такому придираться низко.
К отсутствию type inference придерусь, но это не синтаксис, а типизация (которую я бы назвал "семантика для компилятора", хотя слишком вольно звучит).
В остальном -- пример очень понятный с точки зрения синтаксиса, если знать, что такое "t1<t2>" и "::" и представлять параметризованные типы данных (так называемая "большая лямбда" в функциональщине, "типы, зависящие от типов").
no subject
no subject
no subject
no subject
no subject
no subject
(no subject)
(no subject)
no subject
no subject
no subject
no subject
no subject
no subject
Во-первых, для _кодогенерации_ не нужно глубогокого описания семантики.
Во-вторых, описание некоторого подмножества сишечки не так и сложно.
Я сам лично пробовал таким вот образом низкоуровневого программировать, и получалось куда прикольнее C++. Тогда я активно работал с C++ и ещё мог оценить...
Получаются относительно нормальные макросы, взамен всяких там <>.
И уже дальше, при желании, если задача большая и сложная, то моожет быть, и стоит моделировать глубже. Вот там уже и возникнут, вероятно, и пачки монадных и даже стрелочных трансформеров. Но и без этого, получается ничуть не хуже C++.
Типаа, в C++ это всё так замечательно типизровано, что ли??...
Это у меня было, приблизительно, в эпоху, когда только-только в GHC сделали инфиксную запись типов и вот уже включали в новый GHC. Помню потому, что помню, как радовался ;-)
no subject
no subject
А если говорить про C++, о чём и начали разговор, то все его возможные мета-хрени будут выглядеть куда проще.
И дело вовсе не в выравнивании и битах в арифметике.
(no subject)
(no subject)
(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
no subject