static bool isCrazyMurderinqRobot = false; humans (void){ iffisCrazyMurderinqRobot oppressive le / oppressive-silence :: убить всех человеков :: баг :: фича :: Oppressive Silence

Oppressive Silence баг фича убить всех человеков oppressive-silence 
static bool isCrazyMurderinqRobot = false;
humans (void){
iffisCrazyMurderinqRobot
oppressive lervce,Oppressive Silence,баг,фича,убить всех человеков,oppressive-silence
Подробнее
static bool isCrazyMurderinqRobot = false; humans (void){ iffisCrazyMurderinqRobot oppressive lervce
Oppressive Silence,баг,фича,убить всех человеков,oppressive-silence
Развернуть
Сэкономили на нормальной IDE
А разве IDE такое отслеживает? мне казалось это компилятора задача
Тут нет никаких ошибок с точки зрения компилятора. А с точки зрения IDE может возникнуть замечание, что странное место для присвоения, да и то не факт
Нормальный компилятор выдаст ворнинг. Так что не игнорируйте предупреждения, ребята =)
Рекомендую ставить -Werror в релизе ;)
Но перед этим
-Wall -Wextra и ещё несколько ключей, которые не входят в all и extra

да и -Werror= и в дебаге не помешает
-pedantic
-Werror в дебаге порой мешает - то там "лишняя" переменная, то еще что, что тебе скоро понадобится.

-Wall, -Wextra, -pedantic и так далее для каждого языка различны, но чем больше, тем лучше! =)
По-моему, параметр -pedantic аналогичен картинке ниже.
Я не говорю делать Werror для всех ворнингов в дебаге, а бить по рукам для особо извращённых случаев.
Например, всегда использую -Werror=return-type -Werror=delete-incomplete, тк считаю подобные косяки слишком опасны, чтобы быть просто ворнингами.
Мелочи IDE может отслеживать. Вообще есть и анализаторы всякие, не входящие в IDE для таких вещей.
1
2
3
4
5
6
7
8 9
10
<?php
$b	= 0;
$isCrazyRobot = false;
if ($isCrazyRobot = true) { _________—__________/\______
6}
Assignment in condition more... (Ctrl+Fl)
На здравом смысле сэкономили. Булевские переменные сравнивать с true или false бессмысленно.
Побуду кэпом: в if сэкономили на одном знаке равенства и происходит не сравнивание, а присваивание.
if (someBooleanVar == true) => if (someBooleanVar) - вот что имел в виду комментатор выше. И совершенно прав в этом.
Я в курсе. Ошибочка довольно распространённая. Но если бы не пытались сравнить bool с константой, то такого бы не случилось и разрабы могли бы продолжить быдлокодить.
Скорее на кодстайле, все-таки не зря правилом хорошего тона является написание констант слева в условных операторах. Тогда не то что компилятор, любая мало-мальски нормальная ИДЕ начнет очень громко ругаться.
Косипоры)
LcRL LcRL 12.08.201611:55 ответить ссылка 0.1
А ты у нас не программист?
Или, может - не мамкин?
Лучше в условиях не ставить "== (true/false)"
Хорошо, а как тогда сравнить переменные между собой без == ?
Так то сравнивание переменных. А в данном случаи компилятор достаточно умен чтоб самому узнать единственная переменная тру или фолс.
Как это делают индусы, разумеется:
if (a.toString().length < 5) ...
Извини, не знаю я индусский, чтобы объяснить, что сравниваются переменные, а не переменная и константа. Хотел сумничать, та написал бы уж "if (a - b) else doIt();", что равнозначно " if (a == b) doIt();".
nonnname nonnname 12.08.201614:55 ответить ссылка -0.4
Ты нервный. Это от процедурного программирования. Сравнивай так:

if (a.compare(b)) ...

А в общем случае "a - b" недопустимо, поскольку для некоторых типов переменных операция +/- не определена.
Hellsy Hellsy 12.08.201618:23 ответить ссылка 0.3
Указатели через приведение типов замечательно вычитаются. Вещественные и целочисленные типы умеют в отрицание. Нельзя сравнить только массивы данных (к которым относятся строки и объекты), но это очевидно. Я что-то пропустил?
nonnname nonnname 12.08.201619:09 ответить ссылка -0.1
Строки и объекты нынче встречаются чаще, чем что-либо еще. Но у меня вопрос - ты всерьез собрался сравнивать два вещественных числа через == или сравниваемую с нулем разницу?
В IA86 есть сопроцессорные команды FCOM и FSUB, в которые и траслируется соответственно == и вычитание вещественных чисел. В системах, где вещественные числа на уровне процессора не поддерживаются, необходима нормализация, а потом можно и сравнивать и вычитать. Не знаю, какие у тебя проблемы возникли при сравнении вещественных чисел.
Конечно же ты не знаешь, я в этом даже не сомневался, но решил дать тебе шанс.

Операции с вещественными числами ограничены в точности и ведут к накопительным ошибкам. Поэтому прямое сравнение двух переменных не имеет смысла. Их сравнивают так: abs(a - b) < EPS, где EPS - окрестность в пределах которой числа будут считаться идентичными.

Пример ошибки:
# perl -e '$a=$b=1.50; $a-=1.5; for (1..15) {$b-=0.1}; print ("$a, $b, ".($a==$b ? "true":"false"))'
0, -1.94289029309402e-16, false
Вспомнился анекдот про 43 миллионных... Но это уже совсем другая история.
Узнаю старые добрые трюки из численных методов на фортране :)
Я написал true/false в скобках для конкретизации: если функция или переменная имеют (возвращают) значение true или false, лучше не писать "==" вообще.
Для данного конкретного случая и подобных - согласен.
nonnname nonnname 12.08.201615:46 ответить ссылка -0.4
Истину говорю вам, мир погубит быдлокод.
Но ведь можно просто
if isCrazyMurderingRobot
kill(humans);
К else+; и без {}/begin..end отдельная претензия. Зависит от языка.
Не-не-не надо обязательно писать именно так, а еще вот так while(1==1){...} . Нас так в универе учили(с)
З.Ы. это сарказм если че
А можно в стиле perl:
isCrazyMurderingRobot && kill(humans);
javascript тоже такое сжуёт
Функция kill есть? Есть. Значит все-таки запрограммировали на это.
А вообще так и надо тем, кто смешивает CamelCase и snake_case
JJack JJack 12.08.201612:11 ответить ссылка 4.6
Потому что правильно писать:

if(true == isCrazyMurderingRobot)

Вот тогда IDE точно скажет что-то не так
Тогда и компилятор заматерится. К сожалению, данный метод работает только при наличии констант или результат функции в условии. С переменными всё равно можно ошибиться.
nonnname nonnname 12.08.201613:46 ответить ссылка -0.4
Чтобы не ошибиться, нужно просто не доверять программирование таких роботов юниорам. Опытные разработчики знают о всех потенциально опасных местах и несколько раз их перепроверяют чисто по привычке.
Hellsy Hellsy 12.08.201614:40 ответить ссылка 0.1
У опытных разработчиков имеются наборы тестов, которые позволяют частично исключить логические ошибки. Но алгоритмические всё равно останутся незамеченными и всплывут уже при использовании ПО.
Он все правильно написал, есть вообще правило: КОНСТАНТА при сравнении должна быть слева. А всякие идиоты ебашат справа.

Этому есть одно простое объяснение, если у вас константа слева и вы поставите '=' вместо '=='. Что компилируемый, что интерпретируемый язык даже не запустят программу.

if(true = isCrazyMurderingRobot)
Не все читали умные книги про совершенный код.
nonnname nonnname 12.08.201614:56 ответить ссылка -0.3
Спасибо магистр Йода, но в языках с нормальными компиляторами (а не как JS/PHP), подобные извращения не нужны. Компилятор выдает предупреждение, этого достаточно.
зажрались. компилятор выдаст.
совсем так перестанете головой думать
b.o.g b.o.g 12.08.201615:18 ответить ссылка 0.1
Чем меньше держишь в голове фигни, которую можно в голове не держать, тем больше держишь в голове того, что действительно важно. Ресурсы мозга весьма ограниченны.
Ogra Ogra 12.08.201615:22 ответить ссылка 0.1
Посадить бы таких умных писать программы вначале в блокнот (написал с маленькой буквы специально, я не про программу Блокнот).
nonnname nonnname 12.08.201615:47 ответить ссылка -0.3
отсутствие знаний про "эту фигня" в итоге и приводит к тому, что оч много "специалистов" вообще не представляют как работают микропроцессорные системы. зато херачат мегабайты кода да еще без комментариев.
а потом все дружно удивляются, чего это 64 процессорный sun загружен под жвах.
На микропроцессорный уровень реально пофиг сейчас, почти везде.
Но вот как нафигачат O(n^2) там, где не надо, так хоть вешайся =)
Гм, а вы товарищ рисковый. А если на сборку уходит несколько часов? Будем ждать пока сборка отвалится? А еще при этом всем будете сравнивать переменную с результатом функции и случайно поставите только один знак равенства? Это и компилятор и иде пропустят как валидный код и подвох можно будет заметить только во время тестирования(и будет еще хорошо если автотестами все покрыто). А вот если правильную очередность соблюдать, то можно здорово упростить жизнь себе и своим коллегам.
Компилятор это не пропустит, если не забыть про флаги компилятора
vga@lws04:~/code/csandbox$ cat main.cpp finclude <iostream> int randomNumber() { return 4; > int main() { int i = 0; if (i = randomNumber()) { std::cout « "IF TRUE" « std::endl; > else { std::cout « "IF FALSE" « std::endl; > return 0; > vga@lws04:~/code/csandbox$ g++ -Wall -Werror
Ну опять таки, компиляция занимает сколько? Пару десятков миллисекунд. А теперь возвращаемся к ситуации когда на компиляцию уходит гораздо больше времени.
Если компиляция занимает много времени, то это отдельная проблема с которой надо бороться.
Ogra Ogra 12.08.201618:21 ответить ссылка 0.0
В проекте небольшого размера на C/C++ линковка обычно занимает от нескольких скунд. И с этим ничего уже не сделать.
Ну, если пошла линковка, то компиляция уже прошла, правильно? ;)
Ogra Ogra 13.08.201607:01 ответить ссылка 0.0
У меня другой вопрос: почему вообще добавлять такую функцию? И почему не добавить идентификацию своих и чужих, если это военный робот? А 3 закона робототехники? Да ну нафиг!
А писали бы на шарпах, такой фигни не былоб.
Ассемблер рулит. На нём так вообще невозможно ошибиться.
nonnname nonnname 12.08.201619:42 ответить ссылка -0.8
асемблер? серьезно? да там яйца можно себе отстрелить
unkuse unkuse 12.08.201619:50 ответить ссылка 0.6
ну так..точечно да. хорошо использовать (для узких мест).
для клиентского ПО каких нибудь учетных систем он нафиг не нужен.
остаются спецпроцессоры, да критичный по ресурсам и времени функционал.
Я просто иначе написал фразу unkuse.
Можно ещё так: "А писали бы на асме, такой фигни не былоб" (стилистика сохранена).
А вообще, MenuetOS и ПО к ней.
ну там вообще все по другому. пришлось тут с год назад вспоминать. аж слышно было как мозги заскрипели.
b.o.g b.o.g 13.08.201617:15 ответить ссылка 0.0
блять и никто не удивился а нафиг вообще писать такое в код роботам? вот это вот killhumans? без него никак нельзя было?
krako krako 12.08.201619:41 ответить ссылка 0.0
ну не писать же код выключения закона Ома. Вот тогда будет пиздец!
b.o.g b.o.g 13.08.201616:58 ответить ссылка 0.0
if (isGood === true) {
.... beNiceTo(humans);
} else if (isGood === false) {
.... beBadTo(humans);
} else {
.... kill(humans);
}
achiatma achiatma 13.08.201600:39 ответить ссылка 0.0
Кстати, в Perl возможно дойдет до kill ;-)
В javascript тоже дойдёт, без проблем :)
Хватит умничать, во всех языках с duck typing дойдет :)
▶ typeof(isGood)
◀ "string"
Это ещё что, может быть и "Object", потому распарсилось из XML ответа как null :)
еще не забудь про область видимости, если оно пришло через асинхронный запрос и выполнилось в виртуальной машине.
b.o.g b.o.g 13.08.201616:49 ответить ссылка 0.1
А я нихера не понял :(
Nonono Nonono 13.08.201610:11 ответить ссылка 0.0
Это чисто программистские шуточки) не обращай внимание
Все таки роботы не от этого взбунтовались. Скорее от такого
http://govnokod.ru/3032
сегодня определенно вечер приятных воспоминаний про дедала и fvmas
b.o.g b.o.g 13.08.201617:08 ответить ссылка 0.0
Чесно, слово ))
Срачь и пипискомерство в комментариях, доставляет больше самой картинки.
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
ПОСКОЛЬКУ ты ПРЕДПОЧИТАЕШЬ ПРОВОДИТЬ ВРЕМЯ В СВОЕЙ ИАИОТСКОЙ ЛАБОРАТОРИИ,А НЕ СО МНОЙ - Я ТЕБЯ БРОСАЮ. ОН РАБОТАЕТ///1
подробнее»

Смешные комиксы,веб-комиксы с юмором и их переводы Oppressive Silence oppressive-silence мой перевод

ПОСКОЛЬКУ ты ПРЕДПОЧИТАЕШЬ ПРОВОДИТЬ ВРЕМЯ В СВОЕЙ ИАИОТСКОЙ ЛАБОРАТОРИИ,А НЕ СО МНОЙ - Я ТЕБЯ БРОСАЮ. ОН РАБОТАЕТ///1
В ПОСЛЕДНИЕ ГОДЫ ТВОЕЙ ЖИЗНИ Я ВСЁ ВРЕМЯ ТАЙНО ОТСЛЕЖИВАЛ И ЗАПИСЫВАЛ ТВОИ МЫСЛИ. НО ЛИШЬ НЕДАВНО Я ОБНАРУЖИЛ НЕСКОЛЬКО АЛГОРИТМОВ, КОТОРЫЕ ПОЗВОЛИЛИ МНЕ ЛЕГКО СМОДЕЛИРОВАТЬ ЧЕЛОВЕЧЕСКОЕ СОЗНАНИЕ. ЧЯ ИСПОЛЬЗОВАЛ ТВОИ ДАННЫЕ 50-ЛЕТНЕЙ ДАВНОСТИ КАК ИСХОДНЫЕ И - ВУАЛЯ/ ТЫ ЗДЕСЬ/ А САМОЕ ЛУЧШЕЕ, ЭТО
подробнее»

Oppressive Silence oppressive-silence Смешные комиксы,веб-комиксы с юмором и их переводы длиннопост мой перевод

В ПОСЛЕДНИЕ ГОДЫ ТВОЕЙ ЖИЗНИ Я ВСЁ ВРЕМЯ ТАЙНО ОТСЛЕЖИВАЛ И ЗАПИСЫВАЛ ТВОИ МЫСЛИ. НО ЛИШЬ НЕДАВНО Я ОБНАРУЖИЛ НЕСКОЛЬКО АЛГОРИТМОВ, КОТОРЫЕ ПОЗВОЛИЛИ МНЕ ЛЕГКО СМОДЕЛИРОВАТЬ ЧЕЛОВЕЧЕСКОЕ СОЗНАНИЕ. ЧЯ ИСПОЛЬЗОВАЛ ТВОИ ДАННЫЕ 50-ЛЕТНЕЙ ДАВНОСТИ КАК ИСХОДНЫЕ И - ВУАЛЯ/ ТЫ ЗДЕСЬ/ А САМОЕ ЛУЧШЕЕ, ЭТО
^Excuse me, Hiss, but did you just throw a paper cup into a plastic recyclingОх Тимми, НАМ ТАК. ЖАЛЬ, ЧТО Т/ЗОЙ ДЕДУШКА УМЕР. ❖ ОС Но ОН ЖЕ Мы ПОНИМАЕМ а Он ЖИВЁ НЕ УМЕР. 1 ТЕ£5Я ТИММИ. В ТВОИХ Нет! Он ПРАВДА НЕ УМЕР, Видите! Он тогда просто неправильно лёг! I Уей^Л/ арргг$ъ>Уе -$>кпсе, сопл
подробнее»

Смешные комиксы,веб-комиксы с юмором и их переводы oppressive-silence

Ох Тимми, НАМ ТАК. ЖАЛЬ, ЧТО Т/ЗОЙ ДЕДУШКА УМЕР. ❖ ОС Но ОН ЖЕ Мы ПОНИМАЕМ а Он ЖИВЁ НЕ УМЕР. 1 ТЕ£5Я ТИММИ. В ТВОИХ Нет! Он ПРАВДА НЕ УМЕР, Видите! Он тогда просто неправильно лёг! I Уей^Л/ арргг$ъ>Уе -$>кпсе, сопл