thedeemon: (office)
Воистину, типобезопасность для багобоязненных!
Написал я недавно такое трехстишие:
ComboBox_AddString(combo, "Source Max");
ComboBox_AddString(combo, "Source Average");
ComboBox_AddString(combo, "Source Median");

Компилятор послушал его и принял без единого замечания. Но шайтан-машина вместо нужных строк изобразила такое:


Мне тут недавно некоторые советовали на WinAPI писать, и порой, в плагинах, этим таки приходится заниматься. Microsoft, милостивый, милосердный, послал страждущим заголовочный файл "Windowsx.h" с набором макросов вроде этого ComboBox_AddString, но если всякие винапишные функции чтут различение между юникодом и неюникодом, и компилятор не дает туда просто так отдать строку не в том формате, то эти макросы занимаются бесстыдными кастами, нисколько не заботясь о типах переданных значений. В результате тут ансишная строка была трактована как юникодная, английский текст стал китайским.

12. И те, кто не уверовал (в строгую типизацию), верующим говорят: "Вы следуйте по нашему пути, И понесем грехи мы ваши на себе!" Но ничего из их грехов они не понесут - Лжецы они, и только!
13. Нести им бремя собственных (грехов) И груз (грехов за совращение душ ближних), Что ляжет грузом на их груз. В День Релиза их спросят За (ложь всего) измышленного ими.
43. Вот притчи, что Мы людям предлагаем, Но внемлют им лишь те, кто сведущ.
thedeemon: (office)
Абсолютно волшебное выступление Мейерса о современном С++, как много там косяков и ненужных сложностей прямо со входа:
http://www.ustream.tv/recorded/47947981
Практически stand-up comedy получилась. Рекомендую.



"Everything's there for a reason (except for auto type deduction rule)."

"One of the things they do is they design nuclear bombs. And one day they said to me: Scott, if we don't do our job right millions of people could live."
thedeemon: (office)
Делаю плагин для AviSynth, это такая гибкая штука для обработки видео: снаружи скриптовый язычок, внутри написанные на С++ модули. Модули эти обмениваются видео кадрами, для которых сделано автоматическое управление временем жизни через COM-like подсчет ссылок. Документация велит обычные указатели на VideoFrame не использовать, а использовать умный указатель PVideoFrame везде, он сам счетчик ссылок дергает когда надо. А еще там некоторое подобие uniqueness typing а-ля Clean: PVideoFrame может кому угодно выдать указатель для чтения видеоданных, но на запись он даст указатель только когда счетчик ссылок равен 1, т.е. писать можно только когда никто не смотрит, когда кадр всецело твой. Натурально как в Clean, там тоже, когда никто объект не пытается менять, можно несколько ссылок на него иметь из разных мест, а вот писать туда можно только когда ссылка единственная, уникальная. Но только в Clean сделано правильно: ежели мы уникальный указатель в функцию передали, то он внутри нее тоже уникальный, а то, что где-то на стеке остался еще один - во фрейме вызывающей функции - это не считается, он же сейчас недоступен. А вот на С++ когда умный указатель PVideoFrame передается в функцию, то это идет как создание копии, и теперь у нас на кадр две ссылки: одна в вызывающей функции и одна в вызванной. Счетчик ссылок становится больше 1, и все, получить указатель на видеоданные для записи он уже не дает. Приходится в функции ссылку на умный указатель передавать. Указатель на указатель на указатель... Такой вот смешной дизайн.
thedeemon: (Default)
В предыдущем посте изначально проигрывавший сиплюсплюсу Окамл после одной оптимизации интерпретатора стал С++ немного обгонять, а после второй - еще сильнее. Как справедливо заметили читатели, те же оптимизации можно сделать и в С++. Вторая делается элементарно, а вот первая требует наличия замыканий и оптимизации хвостовой рекурсии. Только что попробовал сделать закат солнца вручную - первый прием с замыканиями реализовал на С++ в лоб, представив замыкания объектами.

Update: это НЕ попытка предложить оптимальный способ интерпретации. Это только попытка напрямую перенести на С++ прием из предыдущего поста.

Кода получилось намного больше:
Read more... )
Зато скорость возросла в 1,3 раза. Результат быстрее, чем аналогичный вариант на Окамле после первой оптимизации. Что и понятно - т.к. С++ есть кроссплатформенный ассемблер с рюшками, на нем можно повторить почти все, просто нередко, как в данном случае, это потребует кропотливого мартышкиного труда, который в случае более высокоуровневых языков берет на себя компилятор. А т.к. оптимизатор в Окамле почти никакой, аналог на С++ получается быстрее.

Profile

thedeemon: (Default)
Dmitry Popov

May 2025

S M T W T F S
    123
45678910
11 121314151617
18192021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 11th, 2025 02:45 am
Powered by Dreamwidth Studios