16
Общий раздел / Re: Расширенный тест на производительность.
« : Декабрь 02, 2016, 07:45:58 pm »Ну, WinAPI в *nix'ах нет :-) А что сейчас модно использовать вместо Files?А Wine тогда что такое?
Онлайн компилятор Oberon-07/11
Путеводитель по Оберон-проектам.
Логи jabber-конференции.
Онлайн исходники BlackBox: тут:WeBB и на github
Исходники Project Oberon V4 на github.
Сборник решений задач книги "Современное программирование с нуля!" тут. А обсуждение здесь.
В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.
Ну, WinAPI в *nix'ах нет :-) А что сейчас модно использовать вместо Files?А Wine тогда что такое?
Допустим у нас O7. "Зачистки" не так актуальны, потому что 95% зачисток берет на себя GC. В 5% я согласен написать вложенный IF. Но GOTO лучше (можно с контролем, что только в конец процедуры, как раз для зачисток).В вашем предложении выбор ложится на программиста, а это открывает путь для ошибок. Специфика применения такова, что если из 5% случаев найдётся 1% случаев, где будет принято неправильное решение, потому что программист скорее всего будет действовать аналогично 95% случаям, то именно эти "невероятные" случаи и будут использованы злоумышленниками.
Rule 14.4 (required): The goto statement shall not be used.Ни одного advisory, сплошные required.
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.
Такой богатый опыт заслуживает апплодисментов.ЦитироватьВо-вторых, я целый компилятор написал и так и не привыкВы это серьёзно? А сколько до, во время и после написания транслятора Вы написали кода не так? Привычка подразумевает стабильность и отсутствие предубеждённости, естественно.
До компилятора тоже пытался пару недель соблюдать в рамках работы (C++). Убедился что не, херня получается.
Картина такая, что люди пытаются избежать многоуровневых if'ов. В разных языках по-разному. В С с помощью goto. В С++ RAII. В джавах/шарпах return/finally. И только в оберонах влолженные if'ы готовый считать чем-то хорошим, лишь бы не множественый return.А вот это вообще умора. Сначала люди придумывают отступы, чтобы сделать поток управления более наглядным, а затем уничтожают наглядность с помощью неструктурных переходов, и даже считают, что всё в порядке. Если так не нравятся лишние отступы, может просто их не делать ?
Вы сами читали там по ссылке? Там постоянно упоминатеся некий /* Handle error */, а вот что там внутри очень интересно применительно к "структурности". Cудя по коду внутри там или goto (привет линукс-стайл) или какой-нибудь abort (аварийное завершение программы) или return Четвертого не дано, потому что оно крэшиться будет сразу после такого if'аНаверно, нужно было прояснить для чего была ссылка, ведь как говорится в одной из вариаций закона Мерфи, если есть малейшая возможность, что поймут неправильно, то обязательно кто-то поймёт неправильно. А я оставил не просто малейшую возможность, а большущую и наводящий вопрос не оправдание - не тот случай.
Во-вторых, я целый компилятор написал и так и не привыкВы это серьёзно? А сколько до, во время и после написания транслятора Вы написали кода не так? Привычка подразумевает стабильность и отсутствие предубеждённости, естественно.
- единственный выход из процедуры, отсутствие прерываний циклов. Спорная фича. Затрудняет кодинг, увеличивает размер и снижает эффективность кода, немного упрощает отладку.А вот я склонен считать это сильной стороной. Всегда так пишу вне зависимости от выбранного языка. Если не привыкать к обратному, то и не возникает желания писать неструктурно. В MISRA C есть похожие, но не доведённые до логического конца требования.
Потому что в Активном Обероне нет приведения булевого типа к целому, то есть 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 да и чем оригинальное Си-выражение, которое, подозреваю, само по себе банально перевымудренно, и вместо этого нужно что-то поадекватней.
видимо, 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 не имел бы смысла.