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

В оппозиции к 'классицистическим' языкам всегда находились языки программирования, авторы которых основывались на собственных концепциях, не желая ограничиваться 'естественными для компьютера' условиями; зачастую (но не всегда) идеологическая стройность ставилась выше практичности и вообще применимости к реальным задачам. Такие, условно говоря, 'модернистские' языки (Smalltalk, Lisp, Haskell, Prolog) выглядят непривычно для 'традиционного' программиста, их изучение требует определенных усилий [Интересно, кстати, что существует довольно распространенное среди программистов мнение: 'профессиональный программист легко и быстро освоит любой новый язык, потому что все языки, в общем-то, похожи'. Как правило, к этому мнению склонны именно программисты 'классицистической' школы, и в ее рамках оно действительно верно; в противоположность этому изучение совершенно незнакомого модернистского языка обычно требует немалых усилий и времени], но и значительно расширяет кругозор и заставляет изменить взгляд на программирование как таковое. 'Модернистский' подход предлагает 'взгляд на программирование с другой стороны' - который, как предполагается, дает программисту возможности совершенно иного уровня. Благодаря своей непривычности и концептуальной новизне, 'модернистские' языки участвуют в 'общем прогрессе индустрии' опосредованно: в мэйнстрим, как правило, проникают не сами языки, а их отдельные концепции и подходы.

Диффузия идей модернистских языков в программистское сообщество происходит с двух направлений - через постепенное изменение 'классицистических' языков и через появление языков абсолютно новых, которые можно назвать постмодернистскими [Мы не станем дальше углубляться в искусствоведческую метафору: определения программистского рококо, романтизма, экспрессионизма, кубизма и абстракционизма оставим в качестве развлечения для читателя] (OCaml, Python, Ruby, Scala). 'Постмодернистские' языки выходят за рамки стилей и парадигм, смешивая старые и новые идеи в разных пропорциях; зачастую жертвуют концептуальной целостностью ради выразительности и поливариантности возможностей. На уровне отдельных 'фраз' многие из постмодернистских языков выглядят просто и понятно любому программисту, отчего их проникновение в мэйнстрим идет куда легче, чем у 'более идейных' предшественников. А тем временем и сами мэйнстримовые языки стремительно впитывают новые идеи: подобно миру искусства, в мире программирования широкое наступление постмодернизма характеризуется смешением стилей и парадигм до их полной неразделимости.

Объект исследования темы этого номера - языки программирования, которые в разное время и в разных условиях предлагались и предлагаются как альтернатива привычному, мэйнстримовому, и общепринятому; их судьба, свойства и шансы. В первой обзорной статье вкратце описывается история самого мэйнстрима - без понимания перипетий смены одного языка другим рассмотрение 'альтернативы' бессмысленно. Вторая статья посвящена языкам модернистским, а третья - постмодернистским. Каждая из трех частей отслеживает развитие соответствующей ветки истории; таким образом, должна получиться некая общая картина сегодняшнего состояния дел (возможно, несколько перекошенная, и наверняка неполная).

И последнее. В соответствии с главным принципом киберпанка 'будущее уже здесь, просто оно неравномерно распределено' - разные течения в программировании очень трудно разделить хронологически; первый модернистский язык программирования - Lisp - один из старейших (1958 год, из общеизвестных старше только Fortran), да и очевидно постмодернистский Perl скоро справит двадцатилетний юбилей. Поэтому деление языков программирования (и темы номера) на 'классицизм', 'модернизм' и 'постмодернизм' происходит скорее 'вдоль' истории, нежели 'поперек'.

С этим и начнем.

Генеральная линия: От Fortan до C#

Автор: Виктор Шепелев

Как уже было сказано, подавляющее большинство языков программирования из 'настоящего мэйнстрима' ведут свою идеологическую родословную напрямую из машинного языка/ассемблера. Конечно, по этому пути они успели зайти далеко, но каждый следующий шаг был лишь логическим продолжением предыдущего.

В этом 'естественном развитии' популярных языков новые концепции вводились путем постепенного 'уточнения парадигмы': новые возможности вводятся как почти 'синтаксический сахар' (более краткая, удобная и понятная альтернатива существующим конструкциям, ничего принципиально не меняющая), но возникающие нюансы и вопросы и разрешение этих нюансов и вопросов приводит к формулировке новых идей [Для примера: использование именованных переменных вместо регистров и адресов памяти поднимает вопросы о типах данных; структуризация кода с помощью процедур и модулей порождает вопрос 'области видимости' переменных, а также разницы между 'передачей по ссылке' и 'передачей по значению'; и т. п.].

Господствующая парадигма [Любим мы это слово. По большому счету, оно означает 'подход', 'модель построения программы или ее частей', 'способ думать об архитектуре программы' - что-то в этом духе] - программирование императивное: программа - суть набор инструкций 'сделай то, потом сделай это', результаты действий сохраняются и изменяются в именованных ячейках - 'переменных'. Отслеживая историю развития промышленного программирования, можно заметить, что все новые 'победившие' языки развивали, а не опровергали эту парадигму.

Первым [Попытки 'автоматизировать программирование' были и до Фортрана - 'язык' A-0 для компьютера UNIVAC (1952), экспериментальный 'транслятор формул', созданный в MIT (1954); но эти реализации показывали чудовищную неэффективность сгенерированного машинного кода, что породило стереотип 'никакая автоматизация не сможет заменить человека-программиста, пишущего на ассемблере'. Фортран этот стереотип разрушил] реально используемым высокоуровневым языком программирования стал Fortran [Имена ранних языков программирования, как правило, писались большими буквами (FORTRAN, COBOL, ALGOL, LISP…). Причина тут не в склонности к аббревиатурам (довольно вымученным, вроде FORmula TRANslator), а убогость тогдашних средств ввода/вывода, зачастую оснащенных только шрифтами с заглавными буквами. 'Как правильно' писать название языка - иногда непонятно и самим авторам, пишут и так и эдак. Мы предпочли вариант, более симпатичный с типографской точки зрения (кроме случаев, когда название языка - явная аббревиатура: PL/I, PHP)] (первое описание - 1954, первая реализация - 1957). В немалой степени перво-Fortran - это 'подсахаренный' ассемблер; но это был огромный шаг вперед, хотя бы в том смысле, что вычисление A+BхC можно было записать так, как понятно математику, а не как набор операций по загрузке значений в регистры и вычисления ответов в других регистрах.

Проблемы со структурой программ на Фортране (вкратце: структуры не было) привели к разработке языка Algol (1958). Судьба его весьма показательна: совместная разработка американских и европейских ученых, к которой приложили руку многие 'легенды' IT; в процессе работы над Алголом были разработаны концепции структурного программирования (логические структуры для ветвления кода; разбиение программы на процедуры, положившее начало созданию библиотек кода для повторного использования, и т. п.); следующие тридцать лет Алгол будет де-факто стандартом для описания алгоритмов. При этом уклон

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату