Шрифт:
Интервал:
Закладка:
Часть IV
Дополнительные темы
Глава 22
Идеалы и история
Когда кто-то говорит: “Мне нужен такой язык
программирования, которому достаточно
просто сказать, его я хочу”,
дайте ему леденец.
Алан Перлис (Alan Perlis)
В этой главе очень кратко и выборочно изложена история языков программирования и описаны идеалы, во имя которых они были разработаны. Эти идеалы и выражающие их языки программирования образуют основу профессионализма. Поскольку в настоящей книге используется язык С++, мы сосредоточили свое внимание именно на нем, а также на языках, появившихся под его влиянием. Цель этой главы — изложить основы и перспективы развития идей, представленных в книге. Описывая каждый из языков, мы рассказываем о его создателе или создателях: язык — это не просто абстрактное творение, но и конкретное решение, найденное людьми для стоявших перед ними проблем в определенный момент времени.
22.1. История, идеалы и профессионализм



22.1.1. Цели и философия языка программирования
Что такое язык программирования? Для чего он предназначен? Ниже приводятся распространенные варианты ответа на первый вопрос.
• Инструмент для инструктирования машин.
• Способ записи алгоритмов.
• Средство общения программистов.
• Инструмент для экспериментирования.
• Средство управления компьютеризированными устройствами.
• Способ выражения отношения между понятиями.
• Средство выражения проектных решений высокого уровня.
Наш ответ таков: “Все вместе и еще больше!” Очевидно, что здесь речь идет об универсальных языках программирования. Кроме них существуют специализированные и предметно-ориентированные языки программирования, предназначенные для более узких и более точно сформулированных задач. Какие свойства языка программирования считаются желательными?
• Переносимость.
• Типовая безопасность.
•Точная определенность.
• Высокая производительность.
• Способность точно выражать идеи.
• Легкая отладка.
• Легкое тестирование.
• Доступ ко всем системным ресурсам.
• Независимость от платформы.
• Возможность выполнения на всех платформах.
• Устойчивость на протяжении десятилетий.
• Постоянное совершенствование в ответ на изменения, происходящие в прикладной области.
• Легкость обучения.
• Небольшой размер.
• Поддержка популярных стилей программирования (например, объектно-ориентированного и обобщенного программирования).
• Возможность анализа программ.
• Множество возможностей.
• Поддержка со стороны крупного сообщества.
• Поддержка со стороны новичков (студентов, учащихся).
• Исчерпывающие возможности для экспертов (например, конструкторов инфраструктуры).
• Доступность большого количества инструментов для разработки программ.
• Доступность большого количества компонентов программного обеспечения (например, библиотек).
• Поддержка со стороны сообщества разработчиков открытого кода.
• Поддержка со стороны поставщиков основных платформ (Microsoft, IBM и т.д.).
К сожалению, все эти возможности нельзя получить одновременно. Это досадно, поскольку каждое из этих свойств объективно является положительным: каждое из них приносит пользу, а язык, не имеющий этих свойств, вынуждает программистов выполнять дополнительную работу и осложняет им жизнь. Причина, из-за которой невозможно получить все эти возможности одновременно, носит фундаментальный характер: некоторые из них являются взаимоисключающими. Например, язык не может полностью не зависеть от платформы и в то же время открывать доступ ко всем системным ресурсам; программа, обращающаяся к ресурсу, не существующему на конкретной платформе, не сможет на ней работать вообще. Аналогично, мы очевидно хотели бы, чтобы язык (а также инструменты и библиотеки, необходимые для его использования) был небольшим и легким для изучения, но это противоречит требованию полной поддержки программирования на всех системах и в любых предметных областях.

22.1.2. Идеалы программирования
Предисловие к книге The C++ Programming Language начинается со слов: “Язык C++ — универсальный язык программирования, разработанный для того, чтобы серьезные программисты получали удовольствие от работы”. Что это значит? Разве программирование не предусматривает поставку готовой продукции? А почему ничего не сказано о правильности, качестве и сопровождении программ? А почему не упомянуто время от начального замысла новой программы до ее появления на рынке? А разве поддержка разработки программного обеспечения не важна? Все это, разумеется, тоже важно, но мы не должны забывать о программисте. Рассмотрим другой пример. Дональд Кнут (Don Knuth) сказал: “Самое лучшее в компьютере Alto то, что он ночью не работает быстрее”. Alto — это компьютер из центра Xerox Palo Alto Research Center (PARC), бывший одним из первых персональных компьютеров. Он отличался от обычных компьютеров, предназначенных для совместного использования и провоцировавших острое соперничество между программистами за дневное время работы.
Наши инструменты и методы программирования предназначены