Страница:
Казалось бы, вопрос закрыт. Тем не менее в 1978 году Уилер подметил еще одну возможность, которая никому не приходила в голову. Допустим, что фотон каким-то образом заранее «узнает», намерен ли экспериментатор задействовать промежуточные детекторы, и в соответствие с этим меняет свое поведение? Конечно, эта гипотеза выглядит весьма причудливо, но ведь квантовая механика вообще полна парадоксов. Во всяком случае, Уилер считал, что проверить гипотезу стоит.
Это и сделали французские ученые. Правда, в классическом двухщелевом эксперименте такая проверка была бы слишком сложной технически, поэтому Жан-Франсуа Рош (Jean-Francois Roch) и его коллеги построили другую приборную схему. Стенку с двумя щелями заменил двухплечевой интерферометр. Единичные фотоны от источника попадали на полупрозрачное зеркало BS1, которое с равной вероятностью направляло их по двум 48-метровым путям, приводящим к двум детекторам. Оба пути совершенно разные, так что регистрация фотона детектором, стоящим на пути 1, означает, что этот фотон не мог пройти по пути 2. Таким образом, пути фотонов точно прослеживаются, и детекторы, в соответствии с принципами квантовой механики, не должны регистрировать никакой интерференции.
Однако экспериментаторам надо было ответить на вопрос Уилера, поэтому они расположили на пересечении обоих путей еще один делитель света BS2, который, подобно первому, с равной вероятностью пропускал и отражал фотоны. Если бы этот делитель действовал постоянно, не стоило бы и огород городить. Его присутствие уже не позволяет сказать, по какому пути фотон попадает в тот или иной детектор, поэтому эти приборы обязаны показать интерференцию (правда, для ее наблюдения требуются определенные ухищрения, но это не принципиально). Во всяком случае, вопрос Уилера в этом случае остался бы без ответа.
Но ученые действовали хитрее. Второй делитель — и в этом-то все дело! — был соединен с управляющим устройством, которое могло его включать и выключать. При этом электронный контроллер был синхронизирован с источником света и начинал работать лишь после того, как очередной квант встречался с делителем BS1. Получив информацию, что фотон уже внутри интерферометра, контроллер иногда активировал второй делитель. Однако эти команды подавались без ведома кого бы то ни было, ими управлял генератор случайных чисел. Так что «осведомиться» о намерениях экспериментаторов фотон никак не мог.
Физики из группы Роша провели великое множество тестов и набрали обширную статистику. Оказалось, что квантовая механика и тут не подвела. Когда второй делитель отсутствовал, интерференции, как и положено, не наблюдалось, фотоны вели себя как классические частицы. А вот когда экспериментаторы устанавливали BS2 с его управляющей системой, возникала интерференционная картина, и фотоны самым честным образом демонстрировали свой корпускулярно-волновой дуализм. Именно этого и требуют от них принципы квантовой механики. А поскольку делитель BS2 включался и выключался случайно, фотонам уж точно было неоткуда узнать, что задумали экспериментаторы. Более того, даже если бы такая информация откуда-то и поступала, ей бы пришлось распространяться быстрее света, чтобы достичь фотона без запоздания — а этого теория относительности не допускает. Так что поставленная Уилером проблема теперь разрешена, только он сам, к сожалению, до этого счастливого дня не дожил. АЛ
Микрофишки
Два прежде враждовавших гиганта спутникового радио — XM и Sirius — готовы объединить свои активы и слиться в единую компанию. Согласно договоренности, за каждую акцию XM акционеры компании получат по 4,6 акции Sirius. Общая сумма сделки — 4,6 млрд. долларов. После поглощения XM капитализация Sirius составит 13 млрд. долларов. Аналитики называют нынешнее объединение вполне предсказуемым: бизнес обеих фирм шел не слишком успешно, а слияние, вероятно, поможет кое на чем сэкономить. Осталось только получить одобрение государства — сделку могут счесть противоречащей антимонопольному кодексу. ТБ
Как гласит поговорка, «сапожник ходит без сапог». Что ж удивляться, что и сотрудники Федерального бюро расследований Соединенных Штатов, осуществляющие головокружительные операции по поимке преступников, бессильны предотвратить пропажу своих «рабочих лошадок». Согласно результатам аудита, проведенного Министерством юстиции, каждый месяц из недр ФБР бесследно исчезает в среднем три с половиной ноутбука. При этом на совести похитителей значится меньше трети подобных инцидентов: с большинством ноутов сотрудники бюро расстаются по рассеянности. Впрочем, если эти данные сравнить с результатами предыдущей проверки, проведенной в 2002 году, то окажется, что за последние годы федеральные пинкертоны стали куда бережливее относиться к казенному имуществу: тогда в ФБР каждый месяц на сторону уходило аж по одиннадцать ноутбуков. ДК
Согласно исследованию, проведенному специалистами по компьютерной безопасности из Университета Мэриленда, на среднестатистическую «тачанку», подключенную к Сети, каждые 39 секунд обрушивается хакерская атака (в день приходится по 2244 покушения). Самым лакомым логином для взломщиков является (кто бы сомневался?) «root», опередивший такие популярные пользовательские имена, как «admin», «test» и «guest». Судя по всему, для успешного противостояния взлому незадачливым пользователям часто не хватает не знания криптографических премудростей, а обыкновенной фантазии. Судите сами: хит-парад взломанных паролей возглавляет «1234» (за ним по убыванию следуют комбинации цифр "1", «123», «12345» и «123456», а также слово «password»!). В общем, выражение «будь проще, и к тебе потянутся» в отношении компьютерной безопасности оправдывается на сто процентов. ДК
Единый ключ, что правит всем
ТЕМА НОМЕРА: История, порезанная тонкими ломтиками: Языки программирования. Вдоль и поперек
Генеральная линия: От Fortan до C#
Это и сделали французские ученые. Правда, в классическом двухщелевом эксперименте такая проверка была бы слишком сложной технически, поэтому Жан-Франсуа Рош (Jean-Francois Roch) и его коллеги построили другую приборную схему. Стенку с двумя щелями заменил двухплечевой интерферометр. Единичные фотоны от источника попадали на полупрозрачное зеркало BS1, которое с равной вероятностью направляло их по двум 48-метровым путям, приводящим к двум детекторам. Оба пути совершенно разные, так что регистрация фотона детектором, стоящим на пути 1, означает, что этот фотон не мог пройти по пути 2. Таким образом, пути фотонов точно прослеживаются, и детекторы, в соответствии с принципами квантовой механики, не должны регистрировать никакой интерференции.
Однако экспериментаторам надо было ответить на вопрос Уилера, поэтому они расположили на пересечении обоих путей еще один делитель света BS2, который, подобно первому, с равной вероятностью пропускал и отражал фотоны. Если бы этот делитель действовал постоянно, не стоило бы и огород городить. Его присутствие уже не позволяет сказать, по какому пути фотон попадает в тот или иной детектор, поэтому эти приборы обязаны показать интерференцию (правда, для ее наблюдения требуются определенные ухищрения, но это не принципиально). Во всяком случае, вопрос Уилера в этом случае остался бы без ответа.
Но ученые действовали хитрее. Второй делитель — и в этом-то все дело! — был соединен с управляющим устройством, которое могло его включать и выключать. При этом электронный контроллер был синхронизирован с источником света и начинал работать лишь после того, как очередной квант встречался с делителем BS1. Получив информацию, что фотон уже внутри интерферометра, контроллер иногда активировал второй делитель. Однако эти команды подавались без ведома кого бы то ни было, ими управлял генератор случайных чисел. Так что «осведомиться» о намерениях экспериментаторов фотон никак не мог.
Физики из группы Роша провели великое множество тестов и набрали обширную статистику. Оказалось, что квантовая механика и тут не подвела. Когда второй делитель отсутствовал, интерференции, как и положено, не наблюдалось, фотоны вели себя как классические частицы. А вот когда экспериментаторы устанавливали BS2 с его управляющей системой, возникала интерференционная картина, и фотоны самым честным образом демонстрировали свой корпускулярно-волновой дуализм. Именно этого и требуют от них принципы квантовой механики. А поскольку делитель BS2 включался и выключался случайно, фотонам уж точно было неоткуда узнать, что задумали экспериментаторы. Более того, даже если бы такая информация откуда-то и поступала, ей бы пришлось распространяться быстрее света, чтобы достичь фотона без запоздания — а этого теория относительности не допускает. Так что поставленная Уилером проблема теперь разрешена, только он сам, к сожалению, до этого счастливого дня не дожил. АЛ
Микрофишки
Два прежде враждовавших гиганта спутникового радио — 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 уже успел вырасти настолько, что, как выразился один из комментаторов, теперь очень сложно будет «затолкать выдавленную пасту обратно в тюбик».
В длинной и поучительной саге о преодолении 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 скоро справит двадцатилетний юбилей. Поэтому деление языков программирования (и темы номера) на «классицизм», «модернизм» и «постмодернизм» происходит скорее «вдоль» истории, нежели «поперек».
С этим и начнем.
Всю историю компьютерной индустрии и компьютерных наук с определенной точки зрения можно представить как историю развития языков программирования. Меняются времена, усложняются задачи, то, что раньше требовало человеко-лет, нынче энтузиасты делают на коленке за несколько недель; накоплена огромная масса типовых решений, типовых библиотек и типовых программистов. А создание, развитие и изменение языков программирования идет полным ходом.
Если бы «язык программирования» был всего лишь инструментом, вроде столярного, то очевидно, что за столь долгий срок (история развития языков программирования, если считать, к примеру, от первого 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; в процессе работы над Алголом были разработаны концепции структурного программирования (логические структуры для ветвления кода; разбиение программы на процедуры, положившее начало созданию библиотек кода для повторного использования, и т. п.); следующие тридцать лет Алгол будет де-факто стандартом для описания алгоритмов. При этом уклон авторов Алгола в «теорию» (эффективного компилятора нет; стандартных операторов ввода-вывода нет) привел к тому, что использование этого языка в промышленном программировании было мизерным.
Как уже было сказано, подавляющее большинство языков программирования из «настоящего мэйнстрима» ведут свою идеологическую родословную напрямую из машинного языка/ассемблера. Конечно, по этому пути они успели зайти далеко, но каждый следующий шаг был лишь логическим продолжением предыдущего.
В этом «естественном развитии» популярных языков новые концепции вводились путем постепенного «уточнения парадигмы»: новые возможности вводятся как почти «синтаксический сахар» (более краткая, удобная и понятная альтернатива существующим конструкциям, ничего принципиально не меняющая), но возникающие нюансы и вопросы и разрешение этих нюансов и вопросов приводит к формулировке новых идей [Для примера: использование именованных переменных вместо регистров и адресов памяти поднимает вопросы о типах данных; структуризация кода с помощью процедур и модулей порождает вопрос «области видимости» переменных, а также разницы между «передачей по ссылке» и «передачей по значению»; и т. п.].
Господствующая парадигма [Любим мы это слово. По большому счету, оно означает «подход», «модель построения программы или ее частей», «способ думать об архитектуре программы» — что-то в этом духе] — программирование императивное: программа — суть набор инструкций «сделай то, потом сделай это», результаты действий сохраняются и изменяются в именованных ячейках — «переменных». Отслеживая историю развития промышленного программирования, можно заметить, что все новые «победившие» языки развивали, а не опровергали эту парадигму.
Первым [Попытки «автоматизировать программирование» были и до Фортрана — «язык» 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; в процессе работы над Алголом были разработаны концепции структурного программирования (логические структуры для ветвления кода; разбиение программы на процедуры, положившее начало созданию библиотек кода для повторного использования, и т. п.); следующие тридцать лет Алгол будет де-факто стандартом для описания алгоритмов. При этом уклон авторов Алгола в «теорию» (эффективного компилятора нет; стандартных операторов ввода-вывода нет) привел к тому, что использование этого языка в промышленном программировании было мизерным.