По мнению создателя Unix, гораздо сложнее изменить массовое программное обеспечение, чем аппаратное

Дэнис Ритчи: «Не знаю, кто в итоге победит, но акцент в программировании будет неизменно смещаться в сторону языков высокого уровня»

Дэнис Ритчи пришел в Bell Laboratories в 1968 году, после окончания Гарвардского университета. Вместе с Кеном Томпсоном он участвовал в создании операционной системы Unix и был в числе первых разработчиков языка Си. Он сотрудничает также в таких инициативах, как Plan 9 и Inferno. В настоящее время Ритчи возглавляет отдел системного программного обеспечения исследовательского центра Bell Laboratories.

Кроме того, он является членом Национальной инженерной академии США и членом ученого совета Bell Labs. Его работы отмечены несколькими престижными наградами, в том числе премиями Тьюринга и Хэмминга, а также национальной медалью США за достижения в области техники. Недавно Ритчи ответил на несколько вопросов корреспондента электронного журнала LinuxWorld.com Дэнни Кэлева.

Не могли бы вы представить нашим читателям проект Plan 9, над которым работаете в настоящее время, и описать наиболее интересные новшества, предложенные в его рамках?

Новый выпуск Plan 9 намечен на июнь, в это же время мы рассчитываем предложить и следующую версию системы Inferno, которая получила название Vita Nuova. Многие идеи, родившиеся при работе над Plan 9, воплощены в Inferno. Однако последняя опирается на исключительные возможности переносимости, свойственные виртуальной машине, которая может быть реализована либо вместе с операционными системами, либо как независимая операционная система электронного устройства или приложение на обычном компьютере.

Что можно сказать о Plan 9? В этом проекте воплотились три перспективные идеи. Первая заключается в представлении системных ресурсов и служб в виде файлов, организованных в иерархию каталогов. Этот механизм пришел из Unix, был усовершенствован в Linux, а благодаря Plan 9 получил дальнейшее развитие. Не только устройства, но и такие ресурсы, как серверы имен доменов Internet, выглядят как файлы. Вторая — это удаленные файловые системы; идея, возможно, не уникальная, но весьма плодотворная. Ведь когда все системные ресурсы представлены в виде файлов, то работать с ресурсами другой машины становится исключительно просто, нужно лишь иметь соответствующие права доступа. Однако же самое необычное нововведение состоит в том, что иерархия имен файлов, видимая одной группе процессов, может быть недоступной для другой.

Си и Unix пользуются завидной популярностью на протяжении трех десятилетий. Как вы объясняете этот феномен?

Да, тут разработчики попали в яблочко. Долгожительство Unix и Си и вправду замечательно: без кардинальных изменений они продолжают активно использоваться вот уже более 30 лет, то есть более половины того срока, который существуют коммерческие компьютеры. Видимо, все дело в том, что модель аппаратного обеспечения, реализованная в этих продуктах, наиболее удобна для разработки приложений.

Принцип, который был положен в основу Unix, — использование иерархической файловой системы с набором простых операций (создание, открытие, чтение, запись, удаление), — не был нов даже в 70-х. Тем не менее такой механизм работы с данными оказался самым удачным решением с точки зрения адаптации к различным параметрам среды. Разработчикам языка Си удалось разорвать изначальную связь с Unix и стать полезным инструментом разработки приложений для многих других операционных систем. Не менее прагматичный, чем Unix, Си, на мой взгляд, развивается в правильном направлении.

С самого начала судьба была благосклонна к этой парочке. В 70-80-х годах широкое распространение получили компьютеры PDP-11 и VAX. И AT&T, и Bell Labs придерживались тогда очень либеральной по современным меркам политики в отношении распространения программного обеспечения. Хотя в то время еще не существовало популярного сегодня понятия открытых систем, принятый в Unix и Си подход позволил этим технологиям быстро распространиться по учебным и государственным учреждениям, а также в растущих компаниях.

Сохранит ли Си свои позиции лет через пять- десять или его заменят более новые языки программирования?

На этот вопрос я и сам не знаю ответа. Единственное, что я могу сказать, — гораздо сложнее изменить массовое программное обеспечение, чем аппаратное. Возможно, С++ и Java развиваются быстрее, нежели «чистый» Си, но готов поспорить, что для него тоже найдется место. Есть области, в которых Си сложно подыскать замену. Сюда, в частности, относится системное и сетевое программирование, а также разработка программ для встроенных систем.

Языки высокого уровня приобретают все большую значимость с ростом числа людей, работа которых в той или иной степени связана с компьютерами. Такие системы, как Perl или Python, раньше занимавшие куда как скромное место, вдруг оказались в центре событий. Возможно, те задачи, для решения которых Си предоставляет наиболее эффективные возможности, будут постепенно отходить на второй план. С другой стороны, JavaScript, со всеми его разновидностями, и XML все чаще оказываются в центре внимания разработчиков. Если рассматривать языки программирования с точки зрения их популярности, то может оказаться, что самым популярным является Visual Basic. Не знаю, кто в итоге победит, но акцент в программировании будет неизменно смещаться в сторону языков высокого уровня.

Что бы вы посоветовали разработчикам новых языков программирования?

Тем, кто присылает мне письма с описанием придуманных ими языков, я бы посоветовал не бояться экспериментировать — это даст опыт, необходимый для написания компилятора. Однако пока вам не удастся заручиться поддержкой какой-либо заинтересованной и влиятельной организации, не ждите, что кто-нибудь будет использовать ваше творение. Существует великое множество языков программирования, которые не уступают или даже превосходят Си по красоте и удобству. Тем не менее ими никто не пользуется. Это похоже на игру в лотерею. Вы раз за разом покупаете все новые билеты, но ничего не выигрываете. Тем не менее рано или поздно кому-то ведь достается выигрышный билет, а опыт разработки языков программирования не будет бесполезен. Да, кстати, если язык программирования все-таки начнет использоваться, исправление ошибок, допущенных на раннем этапе разработки, может оказаться крайне проблематичным.

В свете появления таких «закрытых» языков программирования, как Java и C#, было ли правильным решение сделать Си открытым? Пользователи иногда жалуются, что независимые организации, занимающиеся стандартизацией, не имеют рычагов влияния на разработчиков. Какую модель стандартизации предпочитаете вы?

Я не могу припомнить, чтобы возникали какие-либо трудности при разработке Си как полностью открытого стандарта. Споры на эту тему были бы беспочвенны, если бы не печальный опыт некоторых компаний, пытающихся сохранить жесткий контроль над своими разработками.

По поводу С# пока трудно что-либо говорить, поскольку планы Microsoft в отношении этого языка еще не известны. Что касается Java, то здесь я всего лишь наблюдатель. Хотя Sun, без сомнения, относится к Java как к стратегическому направлению своей деятельности и уделяет этой технологии достаточно много внимания, все спецификации этого языка остаются открытыми. Это, конечно же, не мешает Sun использовать Java в конкурентной борьбе с Microsoft и другими соперниками.

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

С другой стороны, концепция «открытого развития» имеет свои минусы, которые предопределены не только принимаемыми стандартами, но и общественным мнением в широком смысле этого слова. Когда я читаю письма с рекомендациями по возможным путям развития Си, я мысленно возвращаюсь в прошлое и благодарю Бога, что тогда нам не приходилось прислушиваться к мнению мировой общественности. Си — весьма своеобразный язык, и как любой удачный продукт, он объединил в себе несколько различных подходов к программированию. Это было обусловлено тем, что на начальных этапах его разработкой занималась небольшая группа людей. Честно говоря, я не понимаю, каким образом Linux удалось добиться такой популярности, несмотря на полную свободу.

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