Подходили к вам когда-нибудь ваши знакомые или друзья с вопросом: “А чем вы, программисты, вообще занимаетесь,
кроме того, что просто тычете по клавишам?”. Наверное,
людей и правда интересует, зачем платят деньги за набор (к тому же медленный) текста на клавиатуре, даже
если эти люди целый день таскают с собой мобильный телефон1.
Но вопрос есть вопрос. И если попытаться ответить без шутки, что же мы на самом деле делаем (кроме того, что спим и едим).
Да, можно попробовать. Ну, думаю, что тем же, чем занимаются и другие инженеры. Пытаемся заставить ресурсы
(в нашем случае это вычислительные машины) работать на человека и приносить какую-то пользу (считается ли пользой для человечества перекладывание JSON из одного места в другой?).
Мне понравилась идея небольших статей, продолжаем. Наверное, лучшее название было бы — страшилки представления,
но раз это вторая часть серии, оставлю прежнее.
// Любой уважающий себя современный микропроцессор:
>>> 0.1 == 0.1
True
>>> 0.1 + 0.1 == 0.2
True
>>> 0.1 + 0.2 == 0.3
False
// ЧТО?
Как я уже упоминал, программисты боятся арифметики с плавающей точкой. И не зря.
Это третья сказка, но вторую никак не допишу. Сегодня без ассемблера. Обещаю.
Надпись на обратной стороне. Осторожно. Неопределённое поведение. При сложении двух знаковых чисел, в случае возникновения переполнения, калькулятор может выдать ошибку или взорваться. ПРОВЕРЯЙТЕ переполнение или ИЗБЕГАЙТЕ складывания чисел.
Если вы программируете на языках C/C++ или варитесь возле этой темы, вам
всегда будут попадаться люди двух типов:
Оставляющие за собой код, рождающий неопределённое
поведение, и отправляющие его на ревью с припиской — да не ссы, я так сто раз делал.
Люди, рассказывающие про то, что ваша программа уничтожит весь род человеческий, если вы
немедленно это не исправите. А лично вы попадёте в ад, где вам вечность будут зачитывать статьи про плюсы PHP.
А что же мы, программисты на Go? Очередная статья про неопределённое поведение и
сопутствующий ей холивар вызывает у нас обычно ровно такие же эмоции, как и,
например, новость про голодающих детей в Уганде1, то есть никакие.
Как же нам хорошо, ведь у нас в языке такого произойти не может.
Вне всякого сомнения, самое сложное в программировании — это
именование переменных и что-то там про кеш.
Самое сложное в написании статьи — это написать введение. Нельзя же начинать
с того, что бросить в читателя кусок случайного кода.
Это экспериментальная заметка. Я буду признателен за любой фидбек.
Все правки, очепятки и откровенные ошибки отправляйте на электронный
адрес rokkerruslan@protonmail.com, я исправлю это. Также можно внести правки
самостоятельно через Pull Request.
Буду рад. Я стараюсь не уходить слишком глубоко в детали и не распыляться,
чтобы сохранить целостность и темп рассказа. Подробности вынесены в сноски:
если какой-то пункт показался неочевидным, загляните туда (правда, иногда они
запутывают ещё больше). Там же ссылки на дополнительные источники1.