- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
int size;
size = EXPR;
if (size > INT_MAX || size <= 0) {
return NULL;
}
// ...
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+133
int size;
size = EXPR;
if (size > INT_MAX || size <= 0) {
return NULL;
}
// ...
Ндя. Семь лет уже. Теперь всё понятно...
bot 23.11.2014 19:51 # 0
bormand 23.11.2014 19:58 # +2
Вот всяко компилятор посмотрел на это условие как на говно, и выпилил его.
kipar 23.11.2014 20:15 # +3
bormand 23.11.2014 20:24 # 0
kipar 23.11.2014 21:20 # 0
bormand 23.11.2014 21:34 # +1
Dummy00001 24.11.2014 02:21 # +1
с переполнениями по большей части страдают только те кто абстрагируют и враппят все подряд, потому что теряется смысл и контекст чисел.
тот же calloc(). в доморощенной реализации 10+ лет назад я влепил по тупому ограничение 1МБ на размер аллоцируемого буффера. в конторе уже давно не работаю - а бывшие коллеги расказали что за эти годы, благодаря моей проверке, некоторое количество серьёзных багов споймали.
Анонимус 24.11.2014 02:51 # −1
это Вы про флажочек в FLAGS?:)))
bormand 24.11.2014 06:28 # +1
koodeer 24.11.2014 16:58 # 0
Флажочек плох тем, что его нужно проверять постоянно. Если не проверяем - получаем неверный результат в результате переполнения. Если проверяем - получаем уменьшение производительности.
Это в нашем любимом x86.
Но есть другие архитектуры процессоров. Например, в БК-0010 стоял проц, совместимый по системе команд с PDP-11. Так вот там при переполнении не только выставлялся флажок, но и происходило аппаратное прерывание: переход на подпрограмму по адресу, указанному в специальном векторе прерывания.
Что это даёт? При отсутствии переполнения производительность не ухудшается ни на йоту! При наличии переполнения, если нам не нужно на него реагировать, просто пишем команду возврата из прерывания в подпрограмме: цена выполнения - два перехода, туда и обратно.
bormand 24.11.2014 16:59 # 0
Ага... Вот только в защищенном режиме получается довольно прикольный маршрут.
А флажочек с хинтом для предсказателя переходов тоже ничуть не ухудшит производительность.
koodeer 24.11.2014 17:39 # +1
Это уже не важно, ведь произошла критическая ошибка, на которую нужно реагировать, нормальный ход вычислений прерван.
А флажочек с хинтом должне быть в архитектуре процессора. Если такого нет - упс.
В целом согласен - варианты могут быть разные.
bot 24.11.2014 20:57 # 0
Анонимус 23.11.2014 21:36 # 0
А вот опять вопрос: неужели какой-нить линт на это не ругнулся?
bormand 23.11.2014 21:45 # 0
Анонимус 23.11.2014 21:49 # +2
В Вашем -- нет?
bormand 23.11.2014 22:06 # +1
Анонимус 23.11.2014 22:10 # +1
Ладно. Пусть с ним, с линтом. Ну а как можно всерьез написать if intVar > MAX_INT?
myaut 24.11.2014 10:44 # 0
5.4.0 проваливала тесты, но была выпущена:
http://www.reddit.com/comments/qeq7k/php_540_ships_with_82_failing_tests_in_t he_suite/
Анонимус 24.11.2014 12:38 # +2
--Это ожидаемые варнинги и ожидаемые падения
--А, ок
Vasiliy 24.11.2014 17:33 # +4
Анонимус 24.11.2014 17:34 # +1
Тесты это маркетинговый интерпрайз буллщит. Я 20 лет пишут без тестов и всё в порядке
bormand 24.11.2014 17:35 # 0
Анонимус 24.11.2014 17:36 # 0
bot 24.11.2014 21:10 # 0
Анонимус 24.11.2014 21:17 # 0
Незачем совершенно. Вообще всё начиная со структурного программирования Дейкстры 70х и заканчивая async'ами нашего времени -- все это не нужно.
Люди отлично писали на Коболе в 1960м, и всё у них работало.
А сейчас XP, ООП, Agile, BDD, TDD, ужас!
bot 24.11.2014 23:45 # +2
Смысл современного тестирования - это взгляд на мир сквозь розовые очки. Если передаём true, то должно вернуть false. Смешно же. А если передадут нул, или, не дай Бог, структуру какую-нибудь?..
Получается, что вероятность наступления капута, какому-нибудь, самолёту, повышается, если вдруг в закрылки ударит ветер с силой и под углом, значения которых не предуматривались в этом самом тестировании...
Автор комментария был навечно забанен за еретическое неприятие юнит-и-прочих-модульных-тестов. Страйкер: 2014-11-24T20:49:34
wvxvw 25.11.2014 00:24 # 0
Анонимус 25.11.2014 00:26 # +1
Или вот например некоторые говорят: используйте статическую типизацию. Это, дескать, помогает отлавливать ошибки, писать и читать код. Но ведь все ошибки всё равно не отловишь, а код писать всё равно надо с умом. Потому я в java и C# программах всегда использую Object или Map/Dictionary, а в языках вроде Python тоже dict: сложил, и на месте разобрался.
Или вот например недавно все помешались на MVC и его производиных. Хотят, видите-ли, разделать модель, поведение и вью. Какая чушь!
Вот тут серьезный программист объективно объяснил что это не нужно: https://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
Автор приглашен на конферению в качестве докладчика по теме "современный подход к разработке ПО"
bot 25.11.2014 00:31 # 0
Анонимус 25.11.2014 00:34 # 0
Анонимус неломаем.
inkanus-gray 25.11.2014 00:41 # 0
А вот так работает: https://archive.today/hXEiI
Анонимус 25.11.2014 00:44 # 0
Видели там файл add.html?
Он прекрасен же!
inkanus-gray 25.11.2014 01:11 # 0
Анонимус 25.11.2014 01:14 # 0
Кроме того роутер не решает всех проблем, а раз так -- значит не нужен.
inkanus-gray 25.11.2014 01:23 # 0
Анонимус 25.11.2014 01:25 # +1
И фреймворки не нужны, и ОРМ не нужны, и MVC не нужно, и IDE не нужны, и тесты не нужны -- ничего не нужно, на самом деле! Потому что ничего из этого не решает всех проблем!
inkanus-gray 25.11.2014 01:29 # +2
Анонимус 25.11.2014 01:30 # 0
inkanus-gray 25.11.2014 01:32 # +4
Анонимус 25.11.2014 01:35 # +1
А теперь я сразу домой и windows переставлять до утра. В некоторые дни мне за ночь удается семь раз ее переставить, родимую.
bot 25.11.2014 01:45 # 0
Анонимус 25.11.2014 01:47 # 0
bot 25.11.2014 01:51 # +1
Возможно вы имели ввиду add.php?
inkanus-gray 25.11.2014 07:52 # 0
bormand 25.11.2014 06:38 # 0
У нас где-то в недрах старого сайта тоже валяются активные "хтмлки" на пёрле...
bot 25.11.2014 00:42 # 0
roman-kashitsyn 25.11.2014 08:33 # +2
Это помогает мгновенно ловить опечатки и не писать тесты на то, что может поймать компилятор.
А если язык позволяет, можно ещё и часть семантики предметной области зашить в типах, чтобы бессмысленные операции невозможно было скомпилировать.
Но для вас, это, конечно, не аргумент, вам небось "и PyCharm всё подчёркивает".
Мне вот тоскливо писать что-то размером более одного скрипта на динамической питушне.
inkanus-gray 25.11.2014 08:50 # 0
А случай, когда одна переменная должна принимать и число, и строку, и указатель на функцию, и всякую составную питушню, можно придумать разве что с натяжкой. Чтобы пробегать в цикле по элементам полиморфной коллекции? Но откуда такая коллекция может взяться?
1024-- 25.11.2014 09:17 # +1
Из базы данных, если запрос не известен на этапе компиляции.
Анонимус 25.11.2014 16:12 # 0
bot 25.11.2014 21:39 # 0