crypt of decay - Post a comment [entries|archive|friends|userinfo]
ketmar

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

ёбаный булшит! May. 14th, 2024|05:25 am

ketmar
Undefined behavior exists in C-based languages because the designers of C wanted it to be an extremely efficient low-level programming language.

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

ёбаную жабу (про которую оно там дальше упоминает) ПРОЩЕ скомпилить в эффективный машинный код, чам современную всратосишечку. для всратосишечки надо писать охулиард бесполезных проверок на UB — которые Дохуя Умный Компилятор всё равно выкинет, потому что «UB не бывает и быть не может никогда».

вот, например: «int n; … if (n >= 0) n &= 0x1f;». все в курсе, что компилятор — в принципе — Имеет Право к хуям выкинуть тут проверку? а потому что хуй знает, что будет с таким «&» для отрицательных целых. короче, не может этого быть — а потому и проверка не нужна. да, гоцэцэ ещё не дошёл до такого маразма (по крайней мере, не всегда), но я уверен, что дойдёт.

впрочем, если я верно помню, то «&» с отрицательными целыми — это unspecified, а не undefined. так что есть очень-очень маленькая надежда, что хотя бы это не сломают.

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

и да: кукареки говноавторов говнокомпиляторов про то, что подобные оптимизации Сильно Ускоряют Код — булшит. разные независимые исследования показывают, что всех ускорений — в районе «1.1» максимум. и даже это можно нивелировать, если чуть-чуть поправить руками исходный код (например, использовать `size_t` для индексов циклов, чтобы не приходилось постоянно делать sign extension). зато сломать вполне рабочую программу такие «оптимизации» могут на ура. и, кстати, сделать программу МЕНЕЕ надёжной: интересующиеся без труда найдут описания разных случаев, когда Дохуя Умный Компилятор убирал проверки, которые считал ненужными, и этим самым делал из надёжной программы сломаную.

да, я знаю, что я об этом писал уже кучу раз. ничего страшного: истина от повторения не тускнеет.
Link Read Comments

Reply:
From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message: