-Поиск по дневнику

Поиск сообщений в lj_mkazantsev

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 06.05.2010
Записей:
Комментариев:
Написано: 1


Elements of Programming

Воскресенье, 18 Июля 2010 г. 18:40 + в цитатник
19-го и 20-го апреля 2010-го года Александр Степанов, создатель Standard Template Library (STL) в C++, ныне трудящийся в Amazon над их cloud-проектами, побывал в московском Яндексе и прочитал там лекцию по мотивам второй главы своей книги Elements of Programming.
Выступление можно посмотреть в Яндекс.Видео: часть первая (83 минуты), часть вторая (88 минут).

Лекция главным образом интересна не содержанием этой главы, которая выглядит слишком формально (ее можно скачать бесплатно с сайта книги и убедиться, что в виде текста она выглядит еще более формально, чем на словах), а идеей, которую автор хочет донести (возможно, ему это удается и в книге, но полностью ее я пока не читал), и, в первую очередь, обсуждением, которое эту лекцию сопровождает. Особенно полна интересностями вторая часть видео, где автору задают вопросы.

Степанов, как активный апологет принципа generic programming, считает, что следующим шагом в развитии программирования должно стать применение, выражаясь STL'ными терминами, шаблонов алгоритмов. И в идеале как минимум алгоритмы описанные у Кормена и Кнута должны быть реализованы в шаблонном виде и выложены в интернете для публичного доступа. Шаблоны создают обыкновенные программисты, тестируют их как могут и выкладывают. Каждый, кто хочет использовать qsort, берет существующий шаблон, вставляет в свой код и тестирует на своих данных. Если что-то пошло не так - человек рассказывает сообществу, что в алгоритме проблема. Если все в порядке - плюсует его, как пост на Хабре. Если какой-то алгоритм набирает пару миллионов плюсов (STL'ные контейнеры набрали бы и больше), то можно быть уверенным, что работает он отлично.

В качестве языка реализации предлагается C++. Здесь Степанов делает ремарку о том, что код в принципе не должен сильно зависеть от используемого языка. Алгоритм первичен, а код вторичен. Речь ведь идет о простых алгоритмах, которые из псевдокода легко переносятся в C++, а синтаксис C++ легко позволяет написать программу так, что ее перенос в другой язык потребует минимума затрат.

Никаких формальных доказательств программ не предполагается. Мотивы: 1) нет универсального прувера, а без него в доказательстве легко допустить ошибку; 2) если шаблон уже используется в 2 миллионах программ, то это лучшее доказательство его корректности. Тут можно вспомнить Кнута, который алгоритмы доказывал, но не тестировал. А тестировать все равно можно только на конечном множестве примеров, иначе - только индуктивно, а это уже доказательство, в котором можно допустить ошибку. Степанов тут приводит в пример тот самый quicksort, в доказательстве которого у Кормена нашли ошибку только в одной из 12 версий второго издания.
На эту же тему - закон Арнольда о технической документации: "Если она должна существовать, то ее не сделали. Если она существует, то устарела. Первые два закона не распространяются только на бесполезную документацию."

Лично мне реализация этой неправдоподобно красивой концепции видится так: шаблоны алгоритмов загружает и сохраняет сама IDE - чтобы далеко не ходить. А за плюсование рейтинга авторитетности и опробованности должна отвечать VCS - мало ли чего ты там из IDE понагрузил, главное что лежит в репозитории.

Интересной мне также показалась идея сохранения свойств математических операций, когда они применяются в языках программирования. Степанов приводит в пример нарушение коммутативности сложения в C++ - строки там конкатенируются перегруженным для них методом operator+(), который в этом контексте становится некоммутативным. К слову, в знаменитом языке PHP конкатенация выполняется точкой (var str = "Hello, "."World!"). С другой стороны, меня настолько убила убогость элементов ООП, присутствующих в PHP5, что говорить о нем в положительном свете опасно для кармы. Чего стоит одно отсутствие множественных конструкторов или чудовищного вида костыли для поддержки overloading'а.

https://mkazantsev.livejournal.com/132612.html

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку