понедельник, 28 апреля 2008 г.

"Редкая профессия" на сайте Интерстрона

Типа информация. :-)
Моя давняя-давняя статья "Редкая профессия", о том, как мы делали компилятор C++, выложена на сайте фирмы Интерстрон (www.interstron.ru). Статья вышла в конце 1997 года в PC Magazine/Russian Edition, довольно долгое время лежала у них в электронном архиве, но недавно исчезла (наверное, в связи с десятилетним юбилеем :-)) По этой причине я счел естественным опубликовать ее на сайте "своей" фирмы, подправив кое-какие ляпы и опечатки (не все, к сожалению).

С момента выхода статьи я получил на нее довольно много отзывов, как в различных профессиональных форумах, так и в личных письмах. Один раз даже удостоился критики: автор, мол, "ничего не понимает в компиляторах" или что-то в этом роде. Было очень лестно :-). Как ни покажется удивительным, отзывы продолжают приходить и по сей день (даже с утверждениями, что "статья не устарела"!), что послужило дополнительным мотивом ее повторного опубликования.

Прямая ссылка на статью:
http://www.interstron.ru/upload/images/pubs/Redkaya_professiya.pdf
Enjoy! :-)

Да, чуть не забыл. Вопрос к читателям (на сто тысяч):
Если вы смогли одолеть этот довольно длинный текст, то как бы вы отнеслись к появлению статьи под условным заголовком "Редкая профессия: десять лет спустя" - с рассказом о том, что последовало за описанными событиями, и о некоторых других похожих проектах? Не умею устраивать голосование на блоге (да и не хочу заморачиваться, честно говоря), но узнать интегральное мнение было бы очень интересно...

UPD: Оказывается, статья не исчезла, а просто переехала на другое место в связи с редизайном сайта PC Magazine/RE. Прошу прощения за ошибку, и спасибо Олегу Лебедеву за поправку. Вот новая ссылка на статью.

суббота, 5 апреля 2008 г.

Интервью Б.Страуструпа

Недавно, 27-го марта, в Dr. Dobb’s Journal было опубликовано очередное интервью Б.Страуструпа. Заметная часть интервью либо повторяет более-менее известные исторические обстоятельства появления C++, либо содержит любопытные (хотя тоже ранее озвученные) взгляды автора этого языка на обучение программированию. Самое же для меня интересное – информация о готовящемся новом стандарте C++ (кодовое наименование C++0x). Вот наиболее важное в вольном пересказе.

Срок

Новый стандарт языка (по плану?) должен быть готов к концу 2008 года, но все процедуры ISO, связанные с его официальным принятием, обычно занимают много времени. Поэтому то, что сейчас известно под именем C++0x, скорее всего, станет C++10.

Стандартная библиотека

Нововведения в стандартной библиотеке хотя и существенны, но, по его мнению, недостаточны. Добавлены потоки (threads), регулярные выражения, хеш-таблицы (которые изначально присутствовали в оригинальной STL, но не были внесены в предыдущий стандарт), "умные" указатели. Много усовершенствований внесено в существующую библиотеку контейнеров. Наконец, в язык добавлен ряд низкоуровневых свойств (новая модель памяти и задачная библиотека - task library),которые, как он говорит, не предоставляют непосредственных выгод для программистов, но скорее призваны служить основой последующих нововведений (которые откладываются до так называемого "C++13"): разделяемая память, пулы потоков (thread pools), распределенное параллельное программирование. С другой стороны, эти новые свойства уже используются в некоторых мощных коммерческих библиотеках.

(Кстати, один очень интересный момент: Страуструп несколько раз на протяжении интервью жалуется на совершенно недостаточное финансирование процесса стандартизации, из-за которого некоторые важные нововведения в стандартной библиотеке так и не были должным образом рассмотрены и из-за этого в новый стандарт уже не попадают. Причем это высказано в достаточно резких выражениях: «the committee has so few resources», «absolutely no funding» и т.п. Это удивительное для меня обстоятельство: ISO, оказывается, недостаточно финансирует свои комитеты!.. А казалось бы: уважаемая международная организация, важность которой никем не подвергается сомнению, работающая эффективно, тщательно и весьма результативно...)

Нововведения в язык

Основной мотив добавления большинства новых свойств - повысить уровень языка введением полезных высокоуровневых абстракций, которые бы способствовали созданию более ясного и хорошо организованного кода без дополнительных затрат по времени выполнения и требуемой памяти (это почти буквальная цитата). К числу таких свойств относятся обобщенные константные выражения (generalized constant expressions), статические утверждения (static assertions), ссылки на r-значения (rvalue references), а также новые возможности задания перечислимых типов.

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

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

Будущее C++ после принятия нового стандарта

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

Друзья, не спрашивайте меня, в чем существо упомянутых нововведений: сам еще толком не знаю. :-) В последующих постах собираюсь постепенно рассказывать о новых языковых свойствах, по мере того, как сам в них буду разбираться (но до новых библиотек руки, боюсь, скоро не дойдут). Одним из первых на очереди - попытка понять, что же такое concepts...