Зачем вам чужие ошибки? Исправляем уязвимости в сторонних библиотеках


Как Макконнелл завещал


В 2001 году Джим Тревор (AT&T Research) и Грег Моррисетт (Cornell) запустили совместный проект по разработке безопасного диалекта языка программирования C — как развитие более ранних работ над Типизированным Ассемблером. После пяти лет напряженной работы и нескольких опубликованных научных работ, команда (в том числе Дэн Гроссман, Майкл Хикс, Ник Свами и другие) выпустила Cyclone 1.0. А затем разработчики занялись другими делами.



Вторая часть перевода статьи Леона Старра, инженера программных моделей. Первая часть вот здесь. В этой части — о семантике и о том, что отличает хорошую модель.
В этой статье автор предложил написать свои книги, которые относятся к разряду неувядающей классики. Если в оригинальной статье был сделан упор на электронику, то у меня будет упор на разработку программ.
Disclaimer: это мой личный топ из тех книг, которые я лично прочитал, и у которых первое издание было в прошлом веке, даже если она переиздавалась недавно (при условии актуальности именно того издания, которое было в прошлом веке).
В данном топе книги не упорядочены по важности, они все очень хорошие, но есть одна книга, которая равнее других.





Когда программисты первый раз видят прикладной язык 1С, многие впадают в ступор. Несмотря на то, что родной русский язык в любом случае ближе и понятнее, читать код на русском языке и понимать, что происходит в нем (когда это в новинку) не так-то просто.
Как же человеку, уже прикипевшему к русскому языку в коде и / или со знаниями английского на уровне «London is the capital of Great Britain… Microsoft…Coca-Cola…Ok» быстро перестроиться на кодирование на английском языке?
Ответ ищите под катом.

Мне показался близким подход Леона Старра к объяснению чётких моделей классов и описанию их преимуществ. Настолько, что мы в Retail Rocket решили сделать перевод его большой статьи "How To Build Articulated UML Class Models". Будем выкладывать по частям, под катом — первая из трёх.


Сегодня необычный для меня формат статьи: я скорее задаю вопрос залу, нежели делюсь готовым рецептом. Впрочем, для инициирования дискуссии рецепт тоже предлагаю. Итак, сегодня мы поговорим о чувстве прекрасного.
Я довольно давно пишу код, и так вышло, что практически всегда на C++. Даже и не могу прикинуть, сколько раз я написал подобную конструкцию:
for (int i=0; i<size; i++) {
[...]
}Хотя почему не могу, очень даже могу:
find . \( -name \*.h -o -name \*.cpp \) -exec grep -H "for (" {} \; | wc -l
43641Наш текущий проект содержит 43 тысячи циклов. Проект пилю не я один, но команда маленькая и проект у меня не первый (и, надеюсь, не последний), так что в качестве грубой оценки пойдёт. А насколько такая запись цикла for хороша? Ведь на самом деле, важно даже не то количество раз, когда я цикл написал, а то количество раз, когда я цикл прочитал (см. отладка и code review). А тут речь очевидно идёт уже о миллионах.
На КПДВ узел под названием «совершенная петля» (perfection loop).

Так каков он, совершенный цикл?

В «Ростелеком-Солар» мы разрабатываем статический анализатор кода на уязвимости и НДВ, который работает в том числе на деревьях разбора. Для их построения мы пользуемся оптимизированной версией ANTLR4 – инструмента для разработки компиляторов, интерпретаторов и трансляторов.