63 года Бьёрну Страуструпу, 'отцу' С++, или 4 несозданных языка программирования
Сегодня мы поздравляем с днём рождения Бьёрна Страуструпа, разработчика языка программирования С++. 30 декабря в местечке Орхус в Дании родился тот, чьё имя сегодня известно всему миру благодаря его детищу - языку программирования, завоевавшему огромную популярность.
Первое описание "Язык программирования С++" было опубликовано в 1985 году, через три года вышла расширенная версия 2.0, в 1998-м был опубликован первый стандарт языка "С++98", в 2003 году появилась его следующая редакция ISO/IEC 14882:2003. В настоящее время она (с дополнениями, которые выходят почти ежегодно) является тем, что называется "язык С++".
И это не просто один из новых в то время языков программирования, которых уже в те годы было навалом. В своё время это стало приходом совершенно нового уровня абстракций и идей, принципиально расширивших возможности языка и программирования в целом.
Недаром "за создание языка С++" в 2004 году Бьёрн Страуструп был избран в члены Национальной академии инженерии США, в 2005-м удостоен престижной награды и премии Уильяма Проктера Американского научно-исследовательского общества, а Американский институт инженеров электротехники и электроники (IEEE) наградил Страуструпа "за начало разработки и коммерциализации объектно ориентированной технологии создания программ и за большие изменения, внесённые в бизнес и индустрию".
Вообще же, исследователи в области философии программирования и искусственных языков склоняются к мнению, что сам по себе феномен искусственного языка глубоко отражает наше знание процессов, протекающих в любой среде, не важно - естественной или искусственной. В этой связи весьма интересно проследить наше движение к созданию языков программирования там, где их пока нет, - в качестве оценки того, насколько мы сильны (или не очень) в этой области технологий.
1. Кванты. Первый подход к снаряду
Мечта использовать отдельные квантовые частицы для обработки информации не нова. И первые более или менее успешные попытки использовать свойства микрочастиц связаны с технологиями оптических когерентных процессоров - вычислительных устройств, в которых используются кванты света - фотоны.
Почти сразу стало ясно, что, хотя каждый из фотонов (как и вообще квантовый объект) способен одновременно находиться во многих состояниях (принцип суперпозиции) и хранить о них информацию, обращаться с отдельными фотонами "индивидуально" не получится. Вот тогда и появился подход, заключающийся в использовании когерентного света - потока одинаковых, квантово неразличимых фотонов, состояние которых в специально созданных условиях оптического процессора контролируемым образом меняется. Характер этих изменений и их порядок определяют операции над информацией, которая "закодирована" волновой функцией фотонов. Выяснилось, что оптические процессоры с потрясающей быстротой способны выполнять действия, на которые у их обычных, электронных собратьев уходит в миллионы раз (!) больше времени: операции распознавания образов, фильтрации сигналов, свёртки и т. п.
Например, специализированный оптический процессор (пока что единственный на рынке) EnLight 256, созданный израильской фирмой Lenslet, обладает производительностью 8 трлн операций в секунду, но аппаратно "запрограммирован" на выполнение лишь одной функции - перемножение 256-разрядного вектора и матрицы 256×256 бит. А вот оптических когерентных вычислителей, способных выполнять разные программы обработки данных и готовых к лёгкому перепрограммированию, на рынке пока нет, как нет и соответствующих языков программирования.
Помимо фотонов - "настоящих" квантов, как выяснилось, существует много вполне макроскопических объектов, но в определённых условиях проявляющих квантовые свойства. Это и ток сверхпроводимости, и сверхтекучая жидкость, и - вот! - туннельные, "джозефсоновские" контакты. Именно на базе их и появились первые коммерческие (следовательно, настоящие, "без дураков") квантовые компьютеры. В 2007 году канадская компания D-Wave продемонстрировала процессор, содержащий 16 квантовых ячеек - "кубитов", в 2011-м - 128, а последнее достижение - 512 кубитов. Обе последние модели приобрела Lockheed Martin, заплатив за покупку несколько десятков миллионов долларов (за первый компьютер - $10 млн, сумма второй сделки не разглашается). В числе прикупивших такой компьютер - Google.
Существующая сегодня система программирования компьютеров D-Wave включает 6 уровней.
1 - аппаратура, осуществляющая квантовые операции.
2 - уровень "машинных кодов" - элементарных операций, осуществляемых процессором; программирование на этом уровне соответствует организации начальных состояний квантовых элементов.
3 - уровень компилятора. Позволяет программисту, ничего не зная о конкретных процессах квантового вычисления, задавать оптимизируемую функцию (основная задача компьютеров D-Wave - оптимизация функций в пространстве переменных).
4 - уровень клиентских библиотек. Позволяет программисту использовать языки высокого уровня для создания приложений.
5 - уровень функциональной оболочки. Здесь доступно создание алгоритмического "окружения" вокруг, собственно оптимизационной задачи.
6 - слой приложений. Уровень, где конечный пользователь задаёт условия задач и получает решения.
2. Кванты. Все очень запутано
Специалисты различают два типа квантовых процессоров - с сосредоточенными параметрами (характерный пример - компьютер D-Wave) и построенные на основе квантово запутанных состояний кубитов. Уже самые первые квантовые алгоритмы - алгоритм разложения числа на простые множители (факторизации) Питера Шора, предложенный ещё в 1994 году, или алгоритм Гровера (поиск элемента списка) - разрабатывались именно для таких, "настоящих" квантовых компьютеров, хотя "в железе" их тогда не существовало. Надо сказать, технически создание компьютера на базе квантово запутанного состояния даже нескольких кубитов представляет собой очень сложную задачу. Вдобавок существующие конструкции этих процессоров здорово напоминают не цифровые устройства, а скорее аналоговые ЭВМ, где программирование сводится к созданию каждый раз новой электрической схемы...
И вот недавно был совершён серьёзный прорыв. Группа исследователей Калифорнийского университета в Санта-Барбаре под руководством Джона Мартиниса (на фото - крайний справа) сумела создать первый в мире квантовый компьютер, построенный на базе классической архитектуры фон Неймана, то есть обладающий ячейками памяти и процессором. Сегодня этот компьютер состоит всего из двух регистров и двух ячеек памяти, построенных на основе квантово запутанных состояний кубитов. Что важно: структура взаимодействий кубитов (а следовательно, функционал устройства) задаётся программным путём, а не за счёт изменения физической структуры вычислителя.
Для программирования квантовых компьютеров разработано несколько языков (QPL, QCL, QML), имеющих весьма ограниченные возможности и являющихся скорее "демонстраторами принципов программирования". Первый квантовый язык программирования высокого уровня Quipper в прошлом году представила группа Петера Золингера из Университета Дальхаузи (Dalhousie University, Галифакс, Канада). Основой Quipper является классический язык программирования Haskell, который доработан и дополнен библиотеками кода, включающими семь квантовых алгоритмов (из примерно 45 известных на сегодня).
3. Молекулярное программирование
Представления о молекуле ДНК как о носителе наследственной программы живой клетки автоматически предполагает желание начать попытки программировать клеточные процессы; это естественно. Недавние удачные опыты Крейга Вентера по созданию работоспособной искусственной ДНК бактерии подтвердили принципиальную возможность "перепрограммирования" внутриклеточных процессов. Однако работа, проведённая сотрудниками группы Вентера, являлась не столько программированием, сколько ручным копированием, точным воспроизведением природной ДНК-последовательности. Любая попытка "написания" ДНК-программы потребует наличия аппаратной "среды программирования" с модулями синтеза ДНК-последовательности, её редактирования, репликации и уничтожения, поскольку в данной случае запись информации осуществляется путём физического формирования последовательности соединённых молекул нуклеотидов. Такую "среду программирования" ещё предстоит создать (причём, это будет аппаратная среда!), как и программы-трансляторы (для обычных компьютеров), переводящие запись о желаемых свойствах клетки в ДНК-последовательность, реализующую желаемую программу.
Интересное исследование в этом направлении недавно предприняла группа учёных из Вашингтонского университета (отчёт опубликован 29 сентября в журнале Nature Nanotechnology). Они предложили, по их собственному выражению, новый язык программирования химических процессов и "программируемый химический контроллер на базе ДНК". По существу, речь идёт о программировании химических процессов при помощи синтетической ДНК. Несмотря на то что исследования находятся ещё в самой ранней стадии, один из авторов разработки Георг Силиг и его коллега Эрик Клавинс получили финансирование в размере $2 млн от Национального научного фонда для развития исследований в области молекулярного программирования. Большие надежды возлагаются на эту "технологию программирования" в силу того, что она способна (пока теоретически) обеспечить управляемый синтез белков, в том числе не существующих в природе. А это потенциально сверхчувствительные сенсоры, молекулярные роботы, выработка электроэнергии от солнца, новые источники света, сверхэффективные катализаторы и многое другое.
4. Запрограммированная жизнь
Говоря о нашем понимании роли ДНК как носителя наследственной программы живой клетки, мы всё же должны признать, что принципы программирования развития многоклеточного организма нам пока не известны.
Примечательно, что даже Алан Тьюринг (да-да, тот самый - автор "машины Тьюринга", "теста Тьюринга" и целого ряда идей в области обработки данных) уделил внимание этой загадке и в 1952 году опубликовал "Химические основы морфогенеза" - работу, где впервые попытался математически обосновать возможность самоорганизации материальных систем. То, что постэмбриональное развитие управляется некоторой программой, - бесспорно, но где эта программы скрыта и какова природа "процессора", выполняющего её, пока никто сказать не в состоянии, хотя гипотез на этот счёт существует предостаточно. Программирование морфогенеза - процессов создания форм живого - станет в будущем, вероятно, самым захватывающим занятием человека как программиста.