crypt of decay - August 18th, 2013 [entries|archive|friends|userinfo]
ketmar

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

August 18th, 2013

о переносимости софта [Aug. 18th, 2013|01:21 am]
libbitap совершенно непортабельна. то есть, совсем. сейчас поясню. вот так вот автор проверяет перенос при сдвиге:
int value; carry = ((value<<1) < 0);
это же ужас-ужас-ужас. в стандарте операции с переполнением дают неопределённый результат, и обязательность представления целых чисел в виде two's complement никак не указана.

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

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

и да: стандарт с «неопределённым поведением» — говно. всё «неопределённое поведение» надо или определить, или объявить фатальной ошибкой. некоторые ошибки снабдить оговоркой: «соответствующий стандарту компилятор обязан определять ошибочные ситуации на этапе компиляции, когда это позволяет его — компилятора — архитектура. соответствующий стандарту компилятор обязан генерировать код, определяющий ошибочные на этапе исполнения.» да, оговорка хуёвая, но в общем случае невозможно определить, например, валидна ли операция с неизвестными операндами в момент компиляции программы. и никто не мешает добавить в компилятор флаг «идите нахуй с вашими стандартами и проверками, я знаю, что делаю.» кто это использует — тот сам себе дурак.
Link5 meows|meow!

да, кстати: кикстартером пользуются только мрази и говноеды [Aug. 18th, 2013|10:55 pm]
[Tags|]

потому что только мразь и говное может пользоваться сервисом, который «против ГМО». читайте их tos: «Projects cannot offer genetically modified organisms as a reward». угу. поддерживаешь мразь и говноедов? значит, ты сам мразь и говноед.
Link18 meows|meow!

очередное лето прошло [Aug. 18th, 2013|11:17 pm]
заебись! ня, смерть!
Link10 meows|meow!

navigation
[ viewing | August 18th, 2013 ]
[ go | Previous Day|Next Day ]