crypt of decay - January 7th, 2017 [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

January 7th, 2017

кстати, про эти ваши эквалайзеры [Jan. 7th, 2017|01:33 am]
чего так бояться было — не ясно. там всех дел-то — сначала fft, потом тупо домножаем, потом reverse fft. плюс-минус коэффициэнты и окно. в общем-то ура, у нас есть оченьдохераполосный эквалайзер. очень дохера, поэтому оставляем по паре управляемых полос на октаву. всего кода меньше десяти кило (не считая kiss_fft). не то, чтобы я его весь сделал сам — списал, конечно. но хотя бы немного понял, что списал.
Link2 meows|meow!

о си, великолепном и могучем [Jan. 7th, 2017|01:50 pm]
кажется, я это уже писал, но вечные истины от повторения только ярче сияют. итак: на си невозможно написать безопасный код. в принципе. вообще. потому что стандарт такой.

иллюстрирую в простейшем варианте. как всем известно, переполнение для знаковых целых — UB. это плохо. давайте защищаться.

if (a < INT_MAX) a += 1;

нормально, вроде бы, защита есть. а теперь делаем то, что стандарт разрешает.

поскольку INT_MAX+1 не определено, а компилятор си вправе считать, что ему на вход дают программы БЕЗ UB, то с точки зрения компилятора… уже догадались, да? проверка совершенно излишняя, и потому бессмысленна. noop. любой оптимизирующий компилятор вправе выкинуть всё условие, потому что UB, с его точки зрения, не может быть никогда. так считают авторы компиляторов, потому что так разрешает им считать стандарт. раз не может быть, то и проверять не надо, a всегда будет меньше INT_MAX. собственно, всё, на этом любой разговор про «безопасный код на си» можно заканчивать.

нет, вы, конечно, можете попробовать сделать if (a < INT_MAX-1) a += 1; else a = INT_MAX;, никто не спорит. а теперь попробуйте то же самое сделать со всем своим кодом. отслеживая все возможные UB (их видов в стандарте си почти две сотни, если что).

поэтому как только вам кто-то начинает задвигать про «безопасный код на си», можете смело обзывать его любым понравившимся вам прозвищем, и вообще невозбранно глумиться.

для особо одарённых: не надо показывать мне дампы кода и кричать, что «канпилятыр такова ниделаед!» достаточно того, что стандарт позволяет. а ситуации с выкидыванием проверки указателя на NULL ровно из-за того, что до проверки делалась адресная арифметика, уже были. напрягитесь — и увидите: это то же самое.

весь ваш сишный код (включая ведро пинусов, конечно) — это багодром, который работает только потому, что нам везёт. а иногда не очень везёт, и тогда он в лучшем случае просто не работает.

tl;dr: написать корректный безопасный код на си без UB настолько сложно, что эту задачу можно смело считать невыполнимой.
Link88 meows|meow!

navigation
[ viewing | January 7th, 2017 ]
[ go | Previous Day|Next Day ]