Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - kkkk

Страницы: 1 [2] 3 4 ... 9
16
Ну, WinAPI в *nix'ах нет :-) А что сейчас модно использовать вместо Files?
А Wine тогда что такое?

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

18
Как происходит компоновка модуля, собранного с использованием интерфейса и модуля, являющегося воплощением этого интерфейса, если модуль-клиент использовал недоопределённые записи в массиве, в статической памяти или в как компонент других записей?

19
Допустим у нас O7. "Зачистки" не так актуальны, потому что 95% зачисток берет на себя GC. В 5% я согласен написать вложенный IF. Но GOTO лучше :) (можно с контролем, что только в конец процедуры, как раз для зачисток).
В вашем предложении выбор ложится на программиста, а это открывает путь для ошибок. Специфика применения такова, что если из 5% случаев найдётся 1% случаев, где будет принято неправильное решение, потому что программист скорее всего будет действовать аналогично 95% случаям, то именно эти "невероятные" случаи и будут использованы злоумышленниками.

Естественно, такими особенностями всё не ограничивается, как я уже писал, это лишь часть большой картины.
Возьмём, казалось бы, совсем другую область - критичное к надёжности ПО для встраиваемой электроники, например, автомобильной. И что же мы видим в общепризнанном документе, регламентирующем разработку на Си в этой области - MISRA C:
Цитировать
Rule 14.4 (required):    The goto statement shall not be used.
Rule 14.5 (required):    The continue statement shall not be used.
Rule 14.6 (required):    For any iteration statement there shall be at most one break statement used for loop termination.
Rule 14.7 (required):    A function shall have a single point of exit at the end of the function.
Ни одного advisory, сплошные required.

20
Цитировать
Во-вторых, я целый компилятор написал и так и не привык
Вы это серьёзно? А сколько до, во время и после написания транслятора Вы написали кода не так? Привычка подразумевает стабильность и отсутствие предубеждённости, естественно.

До компилятора тоже пытался пару недель соблюдать в рамках работы (C++). Убедился что не, херня получается.
Такой богатый опыт заслуживает апплодисментов.

21
Картина такая, что люди пытаются избежать многоуровневых if'ов. В разных языках по-разному. В С с помощью goto. В С++ RAII. В джавах/шарпах return/finally. И только в оберонах влолженные if'ы готовый считать чем-то хорошим, лишь бы не множественый return.
А вот это вообще умора. Сначала люди придумывают отступы, чтобы сделать поток управления более наглядным, а затем уничтожают наглядность с помощью неструктурных переходов, и даже считают, что всё в порядке. Если так не нравятся лишние отступы, может просто их не делать :) ?

22
Вы сами читали там по ссылке? :) Там постоянно упоминатеся некий /* Handle error */, а вот что там внутри очень интересно применительно к "структурности". Cудя по коду внутри там или goto (привет линукс-стайл) или какой-нибудь abort (аварийное завершение программы) или return :) Четвертого не дано, потому что оно крэшиться будет сразу после такого if'а :)
Наверно, нужно было прояснить для чего была ссылка, ведь как говорится в одной из вариаций закона Мерфи, если есть малейшая возможность, что поймут неправильно, то обязательно кто-то поймёт неправильно. А я оставил не просто малейшую возможность, а большущую  ;D и наводящий вопрос не оправдание - не тот случай.
Ссылка была дана для показа реальной, хотя и довольно неочевидной потребности. То, как предлагают её решать на этом ресурсе - это отдельная песня, скажу только, что они составляли свой список правил из раздельного анализа выявленных уязвимостей, целостного решения они не предлагают.
Ну а я повторю заданный ранее наводящий вопрос, может быть в этот раз получится лучше. Как Вы думаете, в каком случае проще упустить нужную зачистку(и не только)?

23
Зачем же Вы с плеча так рубите про труЪ Оберонщиков? Это ценится не только у них, но и, например, у людей, пишущих защищённый код. В таких задачах нередко возникает потребность в зачистке важных данных в уже неиспользуемых переменных https://www.securecoding.cert.org/confluence/display/c/MEM03-C.+Clear+sensitive+information+stored+in+reusable+resources. Угадайте, где больше шансов пропустить очистку. Это, конечно, лишь частный случай большой картины, но переубеждать не берусь, я за свободу религий.

Цитировать
Во-вторых, я целый компилятор написал и так и не привык
Вы это серьёзно? А сколько до, во время и после написания транслятора Вы написали кода не так? Привычка подразумевает стабильность и отсутствие предубеждённости, естественно.

24
- единственный выход из процедуры, отсутствие прерываний циклов. Спорная фича. Затрудняет кодинг, увеличивает размер и снижает эффективность кода, немного упрощает отладку.
А вот я склонен считать это сильной стороной. Всегда так пишу вне зависимости от выбранного языка. Если не привыкать к обратному, то и не возникает желания писать неструктурно. В MISRA C есть похожие, но не доведённые до логического конца требования.

25
Можете немного осветить, как это сделано?

26
Общий раздел / Re: Странные битовые операции
« : Ноябрь 29, 2016, 09:49:11 am »
Потому что в Активном Обероне нет приведения булевого типа к целому, то есть ORD( TRUE ) не работает. Причем булево даже через SYSTEM.VAL не удастся ни к чему привести.
Тогда я предпочёл бы написать что-то вроде:
IF x > clipBox.x2
THEN ret := 1
ELSE ret := 0
END;
IF x < clipBox.x1
THEN INC(ret, 4)
END;
RETURN  ret
Длинно, зато понятней, чем мегавыражение через SYSTEM да и чем оригинальное Си-выражение, которое, подозреваю, само по себе  банально перевымудренно, и вместо этого нужно что-то поадекватней.

27
Общий раздел / Re: Странные битовые операции
« : Ноябрь 18, 2016, 09:10:24 pm »
Может, современные интелы настолько круты, что умножение на степень 2-ки выполняют столь же быстро, как битовый сдвиг, поэтому интеловский компилятор и не напрягается  ;D ?

28
Общий раздел / Странные битовые операции
« : Ноябрь 18, 2016, 03:52:59 pm »
Цитировать
видимо, return  (x > clip_box.x2) | ((x < clip_box.x1) << 2);
на обероне будет как-то так:
RETURN SYSTEM.VAL( UNSIGNED32, SYSTEM.VAL( SET, ORD( x > clipBox.x2 )) + SYSTEM.VAL( SET,  ASH( ORD( x < clipBox.x1 ), 2)));
А почему не так?
RETURN ORD( x > clipBox.x2) + ORD( x < clipBox.x1 ) * 4 Или я что-то упустил? Ещё я не припомню гарантий в описании, что ORD(TRUE) = 1, а ORD(FALSE) = 0, но иначе ORD для BOOLEAN не имел бы смысла.

В Си где только можно использую нормальную арифметику вместо битовых операций и не чувствую, что чего-то не хватает.

29
Общий раздел / Re: Your Language Sucks
« : Ноябрь 17, 2016, 09:44:24 am »
В чём преуспели создатели списка, так в том чтобы сам список представлял из себя отстой. Зачем переводить такую лабуду?

30
Для удовлетворения любопытства было бы интересно узнать, такой вариант где-нибудь воплощён?

Страницы: 1 [2] 3 4 ... 9