Текст книги "Журнал «Компьютерра» N 8 от 27 февраля 2007 года (Компьютерра - 676)"
Автор книги: Компьютерра Журнал
сообщить о нарушении
Текущая страница: 3 (всего у книги 9 страниц)
Микрофишки
Два прежде враждовавших гиганта спутникового радио – XM и Sirius – готовы объединить свои активы и слиться в единую компанию. Согласно договоренности, за каждую акцию XM акционеры компании получат по 4,6 акции Sirius. Общая сумма сделки – 4,6 млрд. долларов. После поглощения XM капитализация Sirius составит 13 млрд. долларов. Аналитики называют нынешнее объединение вполне предсказуемым: бизнес обеих фирм шел не слишком успешно, а слияние, вероятно, поможет кое на чем сэкономить. Осталось только получить одобрение государства – сделку могут счесть противоречащей антимонопольному кодексу. ТБ
***
Ларри Пэйдж, приложивший руку к созданию мощнейшей интернет-империи, дал наставление участникам ежегодного съезда Американской ассоциации развития науки (American Association for the Advancement of Science). Сооснователь Google призвал ученых смелее использовать приемы рыночных технологий. Большинство своих идей новаторы попросту не в состоянии завернуть в яркую «обертку», способную привлечь внимание широких масс. Пэйдж предложил ввести отдельную статью расходов для пиара новых разработок, а также по возможности делать их достоянием общественности, в чем Google готов оказать посильную помощь. Также Пэйдж напомнил лучшим умам современности, что множество проблем ждет своего скорейшего разрешения. В частности, были упомянуты высокая смертность на дорогах (и как вариант решения этой проблемы – передача контроля над автомобилями компьютерным системам), поиск нетрадиционных источников энергии и строительство дорог в развивающихся регионах. АЗ
***
ICANN заявила, что доменные зоны стран, прекративших свое существование, закрываться не будут. Вопрос рассматривался специальной комиссией, которая пришла к выводу, что закрытие зон и перенос сайтов доставят слишком много мороки и неудобств. Так что «мемориальные» зоны. su, tp, и. yu будут функционировать как и прежде. ТБ
***
SlySoft выпустила версию своей знаменитой программы Any-DVD, которая умеет снимать защиту с фильмов в формате HD DVD (Blu-ray-редакция на подходе). Копию дешифрованной картины можно записать на жесткий диск и просматривать даже при отсутствии HDCP-совместимого дисплея/видеоадаптера. Относительно использованного SlySoft метода обхода защиты AACS пока нет ясности. По некоторым сведениям, разработчики просто регулярно обновляют базу данных публикуемых в Сети ключей расшифровки для каждого конкретного фильма (title keys, подробнее см. колонку Бёрда Киви). НЯ
***
С 1 июня в Швеции DoS-атаки и хулиганская активность в Интернете будут считаться уголовными преступлениями, совершение которых грозит штрафами и даже тюрьмой. До сих пор за «нарушение онлайновых беспорядков» в Швеции не было предусмотрено даже административной ответственности. Последней каплей, переполнившей чашу терпения властей, стал взлом сайта Министерства внутренних дел прошлым летом. Привлечь к ответственности пойманного хакера так и не смогли – для него банально не нашлось соответствующей статьи закона. ТБ
***
Как гласит поговорка, «сапожник ходит без сапог». Что ж удивляться, что и сотрудники Федерального бюро расследований Соединенных Штатов, осуществляющие головокружительные операции по поимке преступников, бессильны предотвратить пропажу своих «рабочих лошадок». Согласно результатам аудита, проведенного Министерством юстиции, каждый месяц из недр ФБР бесследно исчезает в среднем три с половиной ноутбука. При этом на совести похитителей значится меньше трети подобных инцидентов: с большинством ноутов сотрудники бюро расстаются по рассеянности. Впрочем, если эти данные сравнить с результатами предыдущей проверки, проведенной в 2002 году, то окажется, что за последние годы федеральные пинкертоны стали куда бережливее относиться к казенному имуществу: тогда в ФБР каждый месяц на сторону уходило аж по одиннадцать ноутбуков. ДК
***
По данным крупнейшего в мире производителя карт памяти – компании SanDisk, за последние два месяца в результате перепроизводства оптовые цены на NAND-компоненты упали более чем вдвое. В итоге продукция, выпущенная SanDisk еще в конце прошлого года, стала сегодня неконкурентоспособной. Флэш-карты других производителей, появившиеся в феврале и собранные на новых дешевых чипах памяти, продаются по гораздо более низкой цене. Компания несет большие убытки, поскольку продукция «зависла» в дистрибьюторских сетях. Чтобы исправить положение, SanDisk планирует до конца первого квартала снизить розничные цены на всю линейку своих продуктов в среднем на 30–40 %. Кроме того, для уменьшения производственных издержек фирма намерена сократить 250 рабочих мест (10 % всего персонала), временно заморозить выплаты оставшимся сотрудникам и урезать зарплату топ-менеджмента. ТБ
***
Sony планирует превратить свою PlayStation Network для PlayStation 3 в аналог сети Xbox Live. В ближайшее время в этой развлекательной системе начнутся продажи фильмов, телесериалов и музыки. На этот шаг Sony идет в поиске любых возможностей для увеличения доходов. На каждой «старшей» PlayStation 3 компания теряет больше трехсот долларов. ТБ
***
Согласно исследованию, проведенному специалистами по компьютерной безопасности из Университета Мэриленда, на среднестатистическую «тачанку», подключенную к Сети, каждые 39 секунд обрушивается хакерская атака (в день приходится по 2244 покушения). Самым лакомым логином для взломщиков является (кто бы сомневался?) «root», опередивший такие популярные пользовательские имена, как «admin», «test» и «guest». Судя по всему, для успешного противостояния взлому незадачливым пользователям часто не хватает не знания криптографических премудростей, а обыкновенной фантазии. Судите сами: хит-парад взломанных паролей возглавляет «1234» (за ним по убыванию следуют комбинации цифр "1", «123», «12345» и «123456», а также слово «password»!). В общем, выражение «будь проще, и к тебе потянутся» в отношении компьютерной безопасности оправдывается на сто процентов. ДК
***
Компании Kodak и Exclaim запустили совместный сервис для печати «мобильных» фотографий. С любого Brew-совместимого телефона можно быстро скинуть фото на сайт KodakGallery.com, отредактировать и заказать отпечатки. О поддержке сервиса в США уже заявили Sprint и Verizon. Месяц пользования службой обойдется в 4 доллара. ТБ
Единый ключ, что правит всем
Автор: Киви Берд
В длинной и поучительной саге о преодолении AACS, системы защиты контента на видеодисках высокой четкости, открыта, похоже, новая интересная глава. Как показали последние результаты анализа, коллективно проводимого участниками веб-форума doom9.org, внешне грозная защита имеет не просто слабости, а вопиющие прорехи, наличие которых в сильной, вообще говоря, криптосхеме рационально объяснить пока никто не может. В частности, участник форума, скрывающийся под псевдонимом Arnezami, обнаружил, что в сложной и многоуровневой системе защиты дисков HD DVD имеется один ключ, processing key, который позволяет получать индивидуальные ключи названий (title keys), а значит, и доступ к зашифрованному контенту, для всех выпущенных на сегодняшний день дисков. Более того, вскоре выяснилось, что этот же самый ключ обработки подходит и для расшифровки всех фильмов на дисках Blu-ray… Единственное, что выяснить не удалось, так это по чьей инициативе столь вопиющая оплошность была заложена в конкретную реализацию AACS, запущенную на рынок.
Чтобы стала более или менее понятна суть открытия, рассмотрим некоторые детали управления ключами в криптосхеме AACS. Любому плееру – аппаратному или программному – для воспроизведения HD-видеодисков присваиваются секретные ключи устройства (device keys). Каждое устройство использует эти строго индивидуальные ключи для вычисления гораздо более многочисленной группы ключей обработки (processing key). В свою очередь, каждый видеофильм, защищенный AACS, зашифрован своим уникальным «ключом названия», и множество копий title key, зашифрованных разными ключами обработки, хранится в специальном разделе на оптодиске (HD DVD или Blu-ray). Чтобы воспроизвести такой диск, плеер определяет, какую из копий title key он может расшифровать, и использует свой ключ устройства для вычисления необходимого ключа обработки, а тот, в свою очередь, позволяет расшифровать ключ названия и получить доступ к контенту для воспроизведения.
Эти три типа ключей имеют разную ценность с точки зрения безопасности и противостояния вскрытию. Разумеется, атакующей стороне наиболее интересны и полезны ключи устройства. Если вы их знаете, то можете расшифровать любой диск, воспроизводимый плеером. Поэтому для защиты device keys предприняты максимальные меры безопасности и разработан хитрый механизм определения и блокирования скомпрометированных ключей такого рода. Ключи названий наименее полезны, поскольку каждый из них годится для расшифровки лишь единственного фильма. Ключи обработки занимают по ценности промежуточное положение, однако они нигде не хранятся – ни в плеере, ни на диске, – а вычисляются на одном из этапов подготовки фильма к воспроизведению. Поэтому их добыча атакующей стороной представлялась наиболее проблематичной, по крайней мере теоретически. На практике, однако, все оказалось иначе.
Ни одного ключа устройства на сегодняшний день, насколько известно, публично не скомпрометировано. До появления работы Arnezami все успешные случаи обхода защиты AACS так или иначе были связаны с отысканием ключа названия в оперативной памяти компьютера при воспроизведении фильма программным плеером (WinDVD). Понятно, что подобные атаки весьма замысловаты с технической точки зрения. А для человека, далекого от анализа дампов памяти, единственная возможность сделать резервную копию HD-диска сводилась к поиску в Сети уже вскрытого и опубликованного кем-то title key для данного фильма.
Но затем появился Arnezami, который придумал иной ход – анализировать не память, а канал обмена информацией между HD DVD-приводом и компьютером. Arnezami справедливо предположил, что в таком канале информационная избыточность намного меньше, чем в оперативной памяти, а значит, легче выявить и формируемые при обработке ключи. Чтобы длинная история стала покороче, Arnezami применил общедоступную программу-сниффер для анализа передач по USB-каналу (SniffUSB.exe) и действительно сумел выделить сгенерированный плеером processing key для имевшегося у него фильма (King Kong). Но главное – попутно, с помощью соратников по форуму, неожиданно выяснилось, что этот же ключ обработки подходит и для всех остальных фильмов, выпущенных на дисках HD DVD. А также и для всех проверенных фильмов на дисках Blu-ray. Что, вообще говоря, из спецификаций AACS следовать не должно.
Согласно этим спецификациям, каждый плеер имеет уникальный набор из нескольких сотен device keys, на основе которых может быть вычислено несколько миллиардов ключей обработки. В принципе, processing keys вполне могут совпадать для разных плееров, но при столь внушительном их числе каждый конкретный ключ обработки по законам теории вероятностей должен совпадать лишь у небольшой доли плееров по всему миру. А каждый конкретный фильм, в свою очередь, имеет на диске список идентификаторов тех ключей обработки, которые могут расшифровать контент, – то есть любого из перечисленных processing key достаточно для расшифровки title key и доступа к контенту.
По причинам, которых пока никто не понял, все выпущенные на рынок диски имеют один и тот же набор идентификаторов для 512 ключей обработки. Это и означает, что установленный Arnezami ключ подходит для расшифровки всех дисков.
Понятно, что теперь сообщество ожидает реакцию со стороны AACS-консорциума – блокирования скомпрометированных ключей/устройств или чего-то еще в этом роде. Однако общий уровень знаний о хитростях работы AACS уже успел вырасти настолько, что, как выразился один из комментаторов, теперь очень сложно будет «затолкать выдавленную пасту обратно в тюбик».
ТЕМА НОМЕРА: История, порезанная тонкими ломтиками: Языки программирования. Вдоль и поперек
Автор: Виктор Шепелев
Всю историю компьютерной индустрии и компьютерных наук с определенной точки зрения можно представить как историю развития языков программирования. Меняются времена, усложняются задачи, то, что раньше требовало человеко-лет, нынче энтузиасты делают на коленке за несколько недель; накоплена огромная масса типовых решений, типовых библиотек и типовых программистов. А создание, развитие и изменение языков программирования идет полным ходом.
Если бы «язык программирования» был всего лишь инструментом, вроде столярного, то очевидно, что за столь долгий срок (история развития языков программирования, если считать, к примеру, от первого Fortran’а, насчитывает больше полувека) должны бы возникнуть какие-то устоявшиеся «формы инструментов на каждый день» – по одной-две для каждой задачи (молоток, пила, отвертка), и дальнейшее развитие было бы лишь непринципиальным осовремениванием этих инструментов (бензопила, электропила, отвертка с моторчиком).
Но программисты – люди странные. Как правило, язык программирования они воспринимают именно как язык – в первую очередь средство для мышления и выражения мыслей, а потом уже все остальное [Классическая работа на эту тему – «Notation as a Tool of Thought» («Нотация как способ мышления», 1979) – лекция, прочитанная автором языков APL и J Кеннетом Айверсоном при получении Тьюринговской премии]. Отсюда – великое множество языков, «языковые войны», любовь и ненависть, страх и отвращение…
И все же, несмотря на то что существуют тысячи [Если кому-то оценка «тысячи» покажется преувеличенной, порекомендуем ему посетить сайт «Энциклопедии языков программирования» http://hopl.murdoch.edu.au, где на момент написания статьи любовно каталогизированы 8512 языков программирования] языков программирования, и десятки, если не сотни из них активно использовались и используются для написания софта и обучения, – в любой период времени существует всего несколько (три-пять) языков «общеизвестных» и «используемых буквально всеми»; эту группу принято называть мэйнстримом, основным направлением и главной тенденцией индустрии. В разное время и в разных отраслях мэйнстримом считались (считаются) Fortran, C, C++, Java, C#, PHP…
Интересное свойство всех или почти всех мэйнстримовых языков – они находятся в русле одной традиции, которую можно проследить вплоть до ассемблера и машинных кодов (выполнение инструкций по порядку, оперирование с именованными ячейками памяти – то, что называется императивным программированием). Такой способ написания программ естественным образом вытекает из самой фон-неймановской архитектуры – как литературный классицизм, построенный на «стройности и логичности самого мироздания», строго блюдущий традиции, зародившиеся еще в античности.
В оппозиции к «классицистическим» языкам всегда находились языки программирования, авторы которых основывались на собственных концепциях, не желая ограничиваться «естественными для компьютера» условиями; зачастую (но не всегда) идеологическая стройность ставилась выше практичности и вообще применимости к реальным задачам. Такие, условно говоря, «модернистские» языки (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; в процессе работы над Алголом были разработаны концепции структурного программирования (логические структуры для ветвления кода; разбиение программы на процедуры, положившее начало созданию библиотек кода для повторного использования, и т. п.); следующие тридцать лет Алгол будет де-факто стандартом для описания алгоритмов. При этом уклон авторов Алгола в «теорию» (эффективного компилятора нет; стандартных операторов ввода-вывода нет) привел к тому, что использование этого языка в промышленном программировании было мизерным.
Из первоязыков еще стоит упомянуть Cobol (1959), чудовищный как язык, но крайне успешный как платформа для создания бизнес-приложений. Что показательно.
Следующее десятилетие – эпоха экспериментов на ниве создания «самого лучшего языка». В широком использовании продолжают царствовать Fortran/Cobol, к ним добавляются языки класса «все-все-все-в-одном» PL/I и CPL [В этот же период созданы Lisp и Snobol, речь о которых – в следующей статье], тяжелые и для изучения, и для реализации. В районе 70-х происходит первая «большая чистка»: парк компьютеров растет лавинообразно, возникает необходимость в языках простых и практичных, которые легко выучить, легко реализовать под различные аппаратные платформы, легко писать и читать код; при этом возрастает количество «программ-ради-программ», не решающих некую бизнес-задачу, а облегчающие работу с самим компьютером.
Си вкупе с Unix; разномастные Бейсики как встраиваемые языки для первых домашних (и мелких недомашних) компьютеров; Pascal в Apple II/Apple III, чуть позже Паскали от фирмы Borland для простого написания программ под DOS, Windows – все это языки весьма простые [Basic, в частности, настолько прост, что даже структурного программирования в нем не было. Зато это давало возможность сделать крайне нетребовательную к ресурсам реализацию языка, что поспособствовало его распространению на «несерьезных» компьютерах. С ростом ресурсов этих компьютеров (и запросов программистов) структурность в Бейсике появилась (в середине 80-х)] и практичные; это, по большому счету, те языки, с которыми программирование стало действительно массовым занятием.
По мере расширения круга задач, решаемых на «простых» языках, количества повторно используемых библиотек и «времени жизни» этих библиотек стали возникать концепции более сложного структурирования кода. Самая популярная из них – объектно-ориентированное программирование; совмещение концепций «набора процедур и данных (модуля)» и «типа данных со сложной внутренней структурой» дало понятие «класса» и «объекта» [Большая часть концепций классического ООП была разработана в середине 60-х в рамках работы над языком Simula (Ole-Johan Dahl, Kristen Nygaard). Судьба его достаточно близка к судьбе Алгола: разработанные концепции были приняты и воплощены во многих успешных проектах, но сам язык использовался весьма ограниченно]. Мэйнстримовая разновидность ООП [О более радикальном наборе концепций с тем же названием – в следующей статье.9 Интересно, что другая разновидность «объектно-ориентированного C», известная под именем Objective C и зачастую воспринимаемая как забавный курьез, была языком вполне постмодернистским, смешавшим концепции классического C и модернистского Smalltalk. Распространение этого (и других «странных») языков исключительно в мире Apple весьма показательно] – естественное эволюционное развитие структурно-императивного подхода. Неудивительно, что и объектно-ориентированные языки, принятые «широкими массами», были естественным развитием все тех же C, Pascal, Basic – Visual Basic, C++ [Интересно, что другая разновидность «объектно-ориентированного C», известная под именем Objective C и зачастую воспринимаемая как забавный курьез, была языком вполне постмодернистским, смешавшим концепции классического C и модернистского Smalltalk. Распространение этого (и других «странных») языков исключительно в мире Apple весьма показательно], Object Pascal (позже Delphi).
Далее мэйнстримовая, структурная парадигма некоторое время дополнялась (например, шаблонами C++, позволяющими писать «обобщенные» классы и «обобщенные» алгоритмы). Но картина мира вновь начала меняться, что привело к очередной «большой чистке» языков и смене расклада, двадцать лет казавшегося незыблемым. По своей важности эти перемены близки к событиям, в результате которых Fortran, Cobol и PL/I сменились Cи, Бейсиком и Паскалем.
Причин тому было много, так что нельзя выделить одну, главную. Важнейшие, видимо, таковы: рост производительности железа, с одной стороны, и востребованности программистов (даже неквалифицированных) – с другой. Поскольку надежность софта становится важнее его быстродействия [В определенных, естественно, пределах. Тем не менее некогда одна из важнейших целей разработчиков C++ – «почти бесплатность (по производительности)» новых концепций – стала анахронизмом]; возникновение и популяризация компьютерных сетей «для всех» (в том числе и Интернета/веба), в результате чего «сетевое программирование» стало всеобщей деятельностью. С точки зрения пресловутых «парадигм» программирования важнейшая тенденция «нового времени» – компонентно-ориентированное программирование: независимые друг от друга компоненты могут быть написаны на разных языках, поставляться в скомпилированной форме, заменяться на лету, взаимодействие между ними должно быть легким, надежным и масштабируемым.
Попытки использования «компонентного» стиля без смены языка (COM/OLE, CORBA) выявили некоторые концептуальные трудности; собственно, попытка создать целостное решение этих трудностей и породила платформы Java и. Net [История Java, впрочем, довольно извилиста; в разное время у Sun было множество разных версий насчет «что это мы делаем и зачем оно надо». Тем не менее на сегодняшний день платформа Java – более или менее прямой конкурент и аналог. Net.]. Их свойства (богатая стандартная библиотека, автоматическое управление временем жизни объектов, наличие виртуальной машины и т. п.) – прямой ответ на те вызовы, которые бросает компонентность. Что же касается языков Java и C# [Заметим, что платформа. Net принципиально многоязычна; Java, изначально бывшая «платформой для одного языка», сегодня движется в том же направлении. Тем не менее мы-то здесь рассматриваем в первую очередь историю языков программирования], то их архитектура и дала мне основания назвать происшедшее «второй большой чисткой»: как в свое время C, эти языки стремились вобрать в себя все «хорошие идеи» своего времени, но вдобавок избавиться от наследственной сложности, неоднозначности и других проблем, свойственных C++/Delphi/Visual Basic. Первые версии обоих новых языков таки были проще предшественников, но дальнейшее развитие снова пошло по спирали накопления возможностей и впитывания концепций. Сегодняшний C# – сложный, лаконичный и мультиконцептуальный язык; Java – консервативнее в своем стремлении к простоте и однозначности, но постепенно подбирается к той же планке.
Заполняя пропуски: Концепции
Некоторые языки программирования, близкие «классицизму», но не попавшие в статью, весьма достойны упоминания – хотя бы совсем краткого.
Перечисленные языки – неотъемлемая часть истории развития средств написания программ; тем не менее всеобщая популярность обошла их стороной.
Линейка Pascal. Дело в том, что тот Паскаль, который стал популярным в руках фирмы Borland и который многие из нас учили в школе, от изначальной концептуально-чистой разработки Никлауса Вирта отличается довольно сильно, причем одни считают суть этого отличия «практичностью», другие – концептуальной грязью. Сам Вирт придерживается последнего мнения; будучи невысокого мнения о целостности и чистоте вообще всех широко используемых языков, Вирт и его ученики разработали несколько своих, «чистых и красивых» (Oberon, Modula, Zonnon).
Eiffel. Судьба Эйфелей и их создателя Бертрана Мейерса похожа на судьбу «настоящих Паскалей». Мейерс, как и Вирт, достаточно амбициозен в продвижении своих идей (в основном – об объектно-ориентированном программировании), называя их «единственно правильными»; распространен Eiffel нешироко, влияние его огромно.
Ada. Наконец, создатели самых разных языков программирования среди «вдохновляющих» называют язык Ada, разработанный в 80-х под руководством Пентагона. В каком-то смысле он был аналогом PL/I (не слишком удачная попытка собрать все возможные концепции в одном языке), но некоторые элементы Ada (в частности, ее система типов) оказали большое влияние на мышление авторов других языков.