[Перевод] 7 ложных предположений о том, как устроены строки
Как Unicode уничтожает большинство ваших предположений о том, как на самом деле работают строки
Когда речь идет о написании чего-то простого, мы, программисты, обычно действуем интуитивно. В случае с простыми вещами мы полагаемся на четкий набор предположений вместо конкретных знаний о том, как эти вещи работают. Например, мы предполагаем, что если b = a + 1, то b больше a, или что если мы применим функцию malloc для какого-то буфера, то получим необходимое количество памяти для записи. Мы не заглядываем в документацию всякий раз, когда имеем дело с мелочами.
Мы делаем так, потому что тотальная проверка замедлит работу. Однако если бы мы все-таки провели проверку, мы бы обнаружили, что обычно ошибаемся в своих предположениях. Существует арифметическое переполнение, в результате которого a + 1 может быть значительно меньше, чем a. Иногда malloc дает нам null вместо буфера и мы оказываемся в пролете.
Нам обычно приходится обжечься на таких вещах, чтобы хотя бы немного изменить свои предположения. И даже тогда мы обычно исправляем их весьма условно.
Столкнувшись с досадной ошибкой переполнения, мы можем скорректировать свое предположение о целых числах в виде «a + 1 больше a, если отсутствует вероятность, при которой a представляет собой очень большое число». И мы действуем исходя из этого, вместо того, чтобы обдумать четкие правила, по которым работает переполнение.
Уточненные предположения – это опыт. Чаще всего они позволяют нам работать быстрее и правильнее. Однако мы можем вообще переместить некоторые вещи, например, правильную обработку malloc, из нашей внутренней категории «простые вещи» во внутреннюю категорию «сложные вещи». И тогда мы действительно можем пойти и уточнить, как они работают.
Читать дальше →Источник: Хабрахабр
Похожие новости
- Пентест на автопилоте: что доверить роботам, а что — нет?
- Ботнеты растут, стратегия DDoS — меняется? Аналитический отчет за первое полугодие 2025
- VI Форум «Мой бизнес» в Архангельске: предприниматели, эксперты и представители власти обсудят рост в новых условиях
- Утечка хендлов в IP Helper API: как мы нашли и обошли ещё один баг Windows
- Тайна замочной скважины — зачем ПК запирали на ключ
- [Перевод] Как ИБ-специалисты могут превратить шумиху в новые возможности
- Как настроить работу с ПД на сайте клиники: база и тонкости
- Политики безопасности k8s gatekeeper OPA. Интеграция с GO
- Почему фаундер — лучший маркетолог: история провалов и роста B2B-продукта
- От раздражения к лояльности: как UX влияет на бизнес-показатели