Деннис М. Ритчи возглавляет отдел исследований по системному ПО в исследовательском центре по информатике института Bell Laboratories.
Поступил он в Bell Laboratories в 1968 г. сразу по окончании Гарвардского университета. Помогал Кену Томпсону в создании ОС Unix, является первоначальным автором языка Си, а также участником разработки ОС Plan 9 и Inferno. Ритчи - член Американской национальной технической академии и член совета Bell Laboratories, лауреат премий Тьюринга (ACM), Пиоре (IEEE) и др.
Linux World. Можете ли вы познакомить нас с ОС Plan 9, над проектом которой сейчас работаете, и описать какие-либо из ее новшеств?
Деннис Ритчи. Новая версия Plan 9 появилась в июне 2000 г., и почти одновременно с этим компания Vita Nuova выпустила очередную версию ОС Inferno, также начинавшейся в Bell Labs. В Inferno присутствуют большинство системных идей из Plan 9, но кроме того, в ней реализована исключительно универсальная виртуальная машина, благодаря чему Inferno способна выступать и как автономная ОС небольшого устройства, и как прикладная программа для обычного компьютера.
Что же касается ОС Plan 9, то в ней заложены три главных идеи. Первая заключается в том, что системные ресурсы и службы представлены файлами в иерархии каталогов. Она идет от Unix и еще лучше разработана в Linux, но Plan 9 заходит дальше всех. Файлами выглядят не только устройства, но и такие объекты, как серверы имен Internet.
Вторая идея — удаленные файловые системы — тоже не является ни новой, ни единственной в своем роде. Но когда все системные ресурсы представляют собой файлы, вытаскивать биты из ресурсов другой машины очень просто — конечно, при наличии на то разрешения. А вот третья необычна: суть ее та, что пространство имен (иерархия) файлов, как его «видит» та или иная группа процессов, принадлежит только данной группе, а не всей машине.
Linux World. Язык Си и ОС Unix продемонстрировали в последние три десятилетия выдающиеся устойчивость, популярность и долговечность. Чем вы объясняете столь исключительное явление?
Деннис Ритчи. Каким-то образом оба попали в точку. Их долговечность, пожалуй, примечательна — некоторое время назад мне пришло в голову, что они в не слишком изменившейся форме присутствуют в компьютерном мире уже более половины всего срока существования коммерческих вычислительных машин. Должно быть, это связано с тем, что нам удалось найти правильную позицию для абстрагирования от конкретной техники при реализации прикладных программ.
Основная идея Unix — иерархическая файловая система с простыми операциями (создание, открытие, чтение, запись и удаление с вводом-выводом, основанным лишь на дескрипторе, буфере и счетчике) — не была новой даже в 1970 г., но проявила поразительную способность к адаптации. Язык Си сходным образом сумел освободиться от первоначальных тесных пут, связывавших его с Unix, и превратился в полезный инструмент написания программ для разных сред. Он в еще большей степени, чем Unix, представляет собой прагматическое средство, которое, по-видимому, удачно пришлось к месту.
И системе Unix, и языку Си помогло счастливое стечение обстоятельств. В 70-е годы мы выбрали весьма популярный PDP-11 (промышленный компьютер), в начале 80-х — VAX. А руководители AT&T и Bell Labs придерживались в отношении распространения программ весьма либеральной с современной точки зрения политики. Эта политика никоим образом не совпадала с нынешними схемами распространения открытого ПО, но была достаточно близка к ним, чтобы обеспечить принятие языка и ОС во многих местах, включая университеты, правительственные учреждения и развивающиеся компании.
Linux World. Останется ли Си и через пять или десять лет таким же популярным и незаменимым, как сейчас, особенно в областях системного программирования, сетей и встроенных систем, или его место займут новые языки программирования?
Деннис Ритчи. Я, честно говоря, не знаю ответа на этот вопрос. Могу только заметить, что программное обеспечение в целом труднее поддается замене, чем аппаратное. Скажем, число программ на Си++ и Java, вероятно, растет быстрее, чем число программ на обычном Си, но я готов спорить, что Си сохранится. Инфраструктура не позволит его вытеснить. То же самое, конечно, можно сказать и о других языках (например, о версиях Паскаля, о языке Ада). Однако экологические ниши, которые вы упомянули, плотно заняты.
Что меняется, так это роль высокоуровневых языков: по мере роста числа людей, связанных с компьютерами, она становится важнее. Языки, поначалу бывшие лишь симпатичными маленькими инструментами, такие как, скажем, Perl или Python, внезапно переместились ближе к центру мироздания. Тот вид программирования, для которого применяется Си, вероятно, сохранится в прежнем абсолютном объеме либо слегка сократится, но по относительным показателям JavaScript с вариантами и XML будут все дальше продвигаться в центральную позицию. В этом смысле самым интенсивно используемым языком в мире, возможно, следует считать Visual Basic. Я не выбираю здесь победителя, но высокоуровневые методы инструктирования машин все больше заполняют пространство в центре сцены.
Linux World. Что вы посоветовали бы разработчикам новых языков программирования?
Деннис Ритчи. По крайней мере тем, кто присылает мне письма о новых языках собственного изобретения, я даю следующий общий совет: занимайтесь этим, чтобы понять, как пишется компилятор. Не рассчитывайте, что вашим языком будут пользоваться, — разве что вы занимаете пост, позволяющий оказывать давление. Это лотерея. Существует масса прекрасных языков (прекраснее, чем Си), которые не привились. Но кто-то все же выигрывает, а разработка языка хотя бы научит вас чему-то полезному.
Да, кстати, если число пользователей вашего нового языка начнет-таки увеличиваться, может оказаться очень трудно исправить давние ошибки.
Linux World. Недавно ратифицированный ANSI/ISO стандарт языка Си под названием C99 содержит несколько новшеств, таких как ограниченные указатели, вариадические макросы, тип переменных bool и новые библиотеки для работы с комплексными и обобщенными числами. Удовлетворены ли вы стандартом C99?
Деннис Ритчи. Я был удовлетворен стандартом ANSI/ISO 1989/1990 г. Новый стандарт C99 намного более громоздкий, и хотя комитет сообщил, что потратил значительную часть своего времени на отсеивание предложений о нововведениях, принял он тоже немало, и все это еще предстоит переварить. Я определенно не хочу дополнительных возможностей и, очевидно, предпочел бы, чтобы комитет сопротивлялся более стойко.
Из новшеств полезны, вероятно, только ограниченные указатели. Вариадические макросы и тип bool — всего лишь украшения. Аргументы в пользу введения комплексных чисел я слышу уже довольно давно. Может быть, оно было неизбежно, но в итоге удваивается число правил работы с типами и раздувается библиотека. Еще один пункт, который не упомянут в вопросе, — это введение типа long long со всеми вытекающими последствиями, вызвавшее чуть ли не самые горячие споры в дискуссионных группах, посвященных языку. Оно тоже значительно усложняет правила преобразования типов, но, конечно, 64-разрядные машины и память существуют, и с этим нельзя было не считаться.
Стандарт C99 мне не очень нравится, однако я не пытаюсь его отменить. Комитет отлично поработал; Си действительно должен развиваться. Хотя я не участвовал в этой работе, у меня была полная возможность вносить по ходу дела предложения и делать замечания. Поэтому я не хочу критиковать результаты после того, как они стали свершившимся фактом.
Linux World. Давайте сравним Си с языками, принадлежащими определенным фирмам, как Java или C#. Было ли решение сделать Си свободно распространяемым принято сознательно? Пользователи Си иногда жалуются, что стандарт не в силах за себя постоять и невозможно заставить фирмы, выпускающие компиляторы, реализовать версию языка, соответствующую стандарту. Какую модель развития и стандартизации языка вы предпочитаете?
Деннис Ритчи. Я не припоминаю никаких трудностей с тем, чтобы сделать определение языка Си полностью открытым — все дискуссии по этому вопросу рано или поздно сбивались на обсуждение языков, авторы которых пытались сохранить жесткий контроль над ними, и их последующей печальной судьбой.
За языком Java я только наблюдаю, а о том, куда хочет пойти Microsoft с C#, говорить пока рано. Хотя корпорация Sun, несомненно, потратила на Java больше, чем потребовалось бы, чтобы просто обеспечить известность прекрасной исследовательской работе Гослинга и его группы, спецификации языка как таковые были полностью открытыми. Но, конечно, Sun рассматривала весь пакет Java (с библиотеками) как стратегическое средство в борьбе с Microsoft и другими конкурентами.
Утверждение о том, что у стандартов слабые зубы, достаточно справедливо, но когда язык начинает широко распространяться, стандарт все же приобретает и влияние, и значимость. Отчасти это происходит просто потому, что его можно публично критиковать, отчасти — из-за того, что он придает проекту определенную весомость. Когда на что-то существует стандарт ISO или ANSI, а вы предлагаете продукт, претендующий на соответствие ему, ваш клиент получает как минимум зацепку для спора с вами, если в действительности требования стандарта не выполняются.
Однако идея «открытого развития» (open evolution) имеет свои недостатки, причем независимо от того, происходит ли это развитие в официальных стандартах или неформально, например через Web или почтовую рассылку. Знакомясь с мнениями и предложениями по поводу того, куда должен идти Си, я часто оглядываюсь назад и благодарю судьбу, что этот язык разрабатывался без советов всемирной толпы. Он во многих отношениях своеобразен, но, как и многие другие успешные начинания, обладает определенным единством подхода, возникающим при разработке в небольшой группе. Честно говоря, я не понимаю, каким образом Линусу (Торвальдсу. - Ред.) и его веселой команде удалось настолько хорошо со всем справиться, — я бы не выдержал такого с Си.
Данная сфера очень сложна, и из ее истории нельзя извлечь очевидных уроков за исключением того, что ранние и экстремистские попытки жесткого контроля, по-видимому, бывают пагубны.
Linux World. Когда мы увидим издание книги «Язык программирования Си», учитывающее стандарт C99?
Деннис Ритчи. Над этим вопросом Брайан (Керниган. - Ред.) и я думали долго и интенсивно. Мы получали помощь и советы по каналам электронной почты и Usenet от своего издателя и от журналистов, бравших у нас интервью вроде этого, и все еще продолжаем размышлять. Сейчас наш план — объявить, что мы придерживаемся нейтралитета в отношении нового стандарта.
Об авторе
Дэнни Калев - системный аналитик и программист с 12-летним стажем работы, специализируется на Си++, объектно-ориентированном анализе и проектировании для различных платформ, включая Linux. Ведет раздел о программировании для Linux в форуме Linux Forum на сервере ITworld.com, а также еженедельник Linux Tips and Tricks.
Ссылки
- Страница Денниса Ритчи в Bell Laboratories: http://cm.bell-labs.com/cm/cs/who/dmr/
- Bell Laboratories: http://www.bell-labs.com/
- Страница Кена Томпсона в Bell Laboratories: http://cm.bell-labs.com/cm/cs/who/ken/index.html
- Страница Plan 9 в Bell Laboratories: http://plan9.bell-labs.com/plan9
- Хорошая подборка часто задаваемых вопросов по Plan 9 с базовой информацией по системе: http://www.fywss.com/plan9/plan9faq.html
- Страница Inferno в Vita Nuova: http://www.vitanuova.com/inferno/index.html
- Информация по стандарту C9X: http://web.onetelnet.ch/~twolf/tw/c/ c9x_changes.html
- The C Programming Language, Brian W. Kernighan and Dennis M. Ritchie (Prentice Hall, 1988): http://cm.bell-labs.com/cm/cs/cbook/index.html
- Страница Брайана Кернигана в Bell Laboratories: http://cm.bell-labs.com/cm/cs/who/bwk/index.html
- Страница, посвященная архитектуре VAX: http://cm.bell-labs.com/cm/cs/who/dmr/vax.html
- Страница, посвященная машинам PDP-11: http://www.psych.usyd.edu.au/pdp-11/
- Аудиофайл с продолжением беседы с Деннисом Ритчи: http://mithras.itworld.com/media/ 001021kalev_ritchie.ram