Зарождение современного программирования: язык С

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

• между простотой использования и предоставляемыми возможностями;

• между безопасностью и эффективностью;

• между устойчивостью и расширяемостью.

До появления языка С программистам, как правило, приходилось выбирать между языками, которые позволяли оптимизировать тот или иной набор характеристик. Например, хотя FORTRAN можно было использовать для написания достаточно эффективных программ для научных приложений, он не слишком подходил для создания системного кода. Аналогично, в то время как язык BASIC был очень прост в изучении, он предоставлял не очень-то много функциональных возможностей, а его недостаточная структурированность ставила под сомнение его полезность при создании крупных про-грамм. Язык ассемблера можно использовать для создания очень эффективных программ, но его трудно изучать или эффективно использовать. Более того, отладка ассемблерного кода может оказаться весьма сложной задачей.

Еще одной сыгравшей свою роль проблемой была та, что ранние языки программирования, такие как BASIC, COBOL и FORTRAN, были спроектированы без учета принципов структурирования. Вместо этого в них основными средствами управления программой были операторы безусловного перехода GOTO. В результате программы, созданные с применением этих языков, тяготели к созданию так называемого "макаронного кода" — множества запутанных переходов и условных ветвей, которые делали программу буквально недоступной для понимания. Хотя языки вроде Pascal и структурированы, они не были предназначены для создания максимально эффективных программ и были лишены ряда важных функций, необходимых для применения этих языков к написанию широкого круга программ. (В частности, учитывая существование нескольких стандартных диалектов Pascal, было нецелесообразно применять этот язык для создания кода системного уровня.)

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

Изобретенный и впервые реализованный Деннисом Ритчи на компьютере DEC PDP-11, работающем под управлением операционной системы UNIX, язык С явился результатом процесса разработки, начавшегося с предшествующего языка BCPL, разработанного Мартином Ричардсом. BCPL повлиял на язык, получивший название В, который был изобретен Кеном Томпсоном, и который в начале 70-х гг. привел к появлению языка С. В течение долгих лет фактическим стандартом языка С была его версия, поставлявшаяся с операционной системой UNIX и описанная в книге Язык программирования С, написанной Брайаном Керниганом и Деннисом Ритчи (2-е издание, ИД "Вилямс", 2007 г.). Язык С был формально стандартизован в декабре 1989 г., когда Национальный институт стандартизации США (American National Standards Institute — ANSI) принял стандарт С.

Многие считают создание языка С началом современного этапа развития компьютерных языков. Он успешно объединил конфликтующие компоненты, которые доставляли столько неприятностей в предшествующих языках. Результатом явился мощный, эффективный, структурированный язык, изучение которого было сравнительно простым. Кроме того, ему была присуща еще одна, почти непостижимая особенность: он был языком программиста. До появления С языки программирования проектировались в основном либо в качестве академических упражнений, либо бюрократическими организациями. Язык С -иной. Он был спроектирован, реализован и разработан действительно работающими программистами и отражал их подход к программированию. Его функции были отлажены, проверены и многократно переработаны людьми, которые действительно использовали этот язык. В результате появился язык, который нравилось использовать программистам. Действительно, С быстро приобрел много приверженцев, которые почти молились на него. Поэтому С получил быстрое и широкое признание в программистском сообществе. Короче говоря, С — это язык, разработанный программистами и для программистов. Как вы вскоре убедитесь, Java унаследовал эту особенность.