M>http://www.thinkingparallel.com/2007/03/20/ten-questions-with-joe-armstrong-about-parallel-programming-and-erlang/
M>Времени нет переводить, увы
Накрапал, но за качеством особо не следил:
Joe Armstrong | Джо Армстронг
Этим постом мне бы хотелось открыть серию интервью c великими людьми в области параллельного программирования(
Interviewing the Parallel Programming Idols). Сегодня я задам несколько вопросов Джо Армстронгу, который был одним из основателей языка Erlang. В настоящее время Джо работает в компании Ericsson. Кстати работая именно на эту компанию, Армстронг создал свой первый прототип Erlang’a в далёком 1986 году. Кроме этого мой собеседник является соавтором книги (
Concurrent Programming in Erlang), которая как видно из названия посвящена вышеупомянутому языку программирования. Кроме того, в скором времени на свет выйдет новая книга Армстронга (которую он создает в сотрудничестве с Pragmatic Programmers, но в этот раз Джо – единоличный автор сего труда). Книга будет называться
Programming Erlang: Software for a Concurrent World. Наряду с созданием книг и изобретением языков программирования Джо ведёт курсы по Erlang, работает над своей докторской диссертацией, основал один из первых проектов на Erlang’e (прим.перев. насколько я понял это коммерческий проект) и любит погонять на своём мотоцикле. Когда ж он успевает всем этим заниматься ?!
Ну, собственно давайте, и мы займёмся, наконец, делом. И так первые 5 вопросов посвящены параллельному программированию вобщем:
Майкл: Наступает эра многоядерных процессоров, как вы думаете, Джо, как это отразиться на области параллельных вычислений, станет ли, наконец, параллельное программирование частью мейнстрима? Или же это просто ещё один этап на пути использования параллелизма и вскоре интерес к параллельному программированию вновь будут проявлять только люди, занимающиеся высокопроизводительными вычислениями (HPC — high performance community)?
Джо: Да-да, мейнстрим. Мы практически уже сегодня можем получить двух кратное ускорение на двухядернике, 4-х кратное на процессоре с четырьмя ядрами и т.д…. Я имел дело с программами, которые стали в 18 раз быстрее работать на 32-х ядерной машине. В 18 раз! А сейчас мы гонимся за 5-10% ускорением за счёт переписывания кусочков нашего кода, а тут сразу 400% или даже 1800% — очевидно это коснётся всего программного обеспечения в целом.
Майкл: Время от времени в сети разгораются споры – что лучше для параллельного программирования – программирование в системе с общей, разделяемой памятью(shared-memory programming) или же программирование через посылку сообщений(message passing). Каково ваше мнение на этот счёт?
Джо: Системы с разделяемой памятью необычайно трудны в плане их понимания программистами, совсем плохо обстоит дело, если в такой системе возникают ошибки. Там и без ошибок-то полно проблем, а когда появляются баги понять работу таких систем фактически невозможно. Если программа держит блокировку, гадит, куда не попадя в общей памяти, и после этого падает, как, чёрт побери, другие процессы узнают об этом, и что они смогут сделать, чтоб исправить ошибки.
При этом в системах с транзакционным доступом к памяти (Transaction memories system) и в системах на основе посылки сообщений вообще нет таких проблем.
Майкл: Хорошо. Отметьте, пожалуйста, самые выдающиеся, на ваш взгляд, достижения\инновации в области параллельного программирования за прошедшие несколько лет.
Джо: P2P архитектуры, распределённые хэш-таблицы и системы планетарного, так сказать, масштаба интеграции(planet-scale integration), наподобие planet lab и т.д.
Системы типа битторентов(bit torrent) разрушают традиционную индустрию – в 1770-х ткацкий станок убил домашнее производство пряжи, сегодня битторенты делают то же самое с индустрией записи. Фактически это уже свершилось, нужно просто немного подождать.
Майкл: Каким вы видите будущее параллельного программирования? Что вы можете предложить в качестве серебряной пули в этой области разработки?
Джо: Думаю инфраструктуры, основанные полностью на посылке сообщений, способны решить многие проблемы (примером такой системы может служить amazon queue service). Фактически идеи данного подхода относятся к потоко-ориентированному (flow-based) программированию Пауля Мориссона (Paul Morisson).
Майкл: На сегодняшний день, одной из главных проблем параллельного программирования является то, что оно несколько сложнее последовательного. Продуктивность кодирования при этом резко отличается, от последовательного программирования. Как вы думаете, существуют ли способы, спосбоные изменить такое положение дел?
Джо: Да, параллельное программирование непросто несколько сложнее, оно сложнее значительно. Это так сказать «тяжелое программирование». Связано это с тем, что сегодня доминируют модели, основанные на потоках(thread), блокировках(lock), разделяемой памяти – именно это делает параллельное программирование таким сложным. Системы, основанные на посылке сообщений легко реализовывать и просто понимать.
Мир сам по себе параллелен – мы сами насыщены параллелизмом.
--
Это была первая часть интервью. Следующая посвящена, собственно, Erlang:
Майкл: В чём вы видите сильные и слабые стороны Erlang’a по сравнению с другими языками параллельного программирования ? Что бы вы хотели улучшить в нём?
Джо:
Сильные стороны: Erlang изначально проектировался как ошибкоустойчивая система, поэтому сегодня он хорошо работает на практике – когда мы постоянно сталкиваемся с багами в ПО и проблемами с железом. Erlang относится к ошибкам серьезно. Процессы и обработка ошибок – это части языка, они не спрятаны где-то там, в дебрях ОС.
Слабые стороны: Распределённые системы на Erlang’e характеризуются достаточно жёстким(негибким) подходом к безопасности. Возможно, было бы лучше иметь несколько уровней безопасности или несколько моделей безопасности, основанных на привилегиях или на чём-то подобном (прим.перев. дословно — trust based security models)
Майкл: Если бы вы сегодня создавали Erlang с нуля, чтобы вы реализовали по-другому?
Джо:
Сделал бы более высокоуровневую систему модулей и поддержки кода, добавил бы возможность интроспекции(introspection)
Добавил бы поддержку контрактов для декларирования свойств протоколов (прим.перев. аналог design by contract)
Добавил бы поддержку протоколов в сам язык.
Добавил бы возможность определять уровень безопасности при создании распределённых систем
Добавил бы поддержку слабосвязанных распределённых систем(weakly-connected distributed system) Сейчас же распределённый Erlang удобен для организации безопасных распределённых вычислений(что похоже на вычисления на кластерах).
Майкл: Можете ли вы порекомендовать какой-либо инструментарий для людей, программирующих на Erlang. Может быть IDE? Редакторы? Отладчики? Профайлеры? Верификаторы? Ещё что-нибудь…
Джо: Нет – 95% всего, что нужно есть в самом компиляторе. Люди вообще очень трепетно(мягко говоря) относятся к своим любимым IDE и т.д. Что касается меня, я использую emacs, make и xterm. Некоторым удобнее пользоваться более GUI-ориентированным инструментарием, про себя я такого сказать не могу.
Майкл: Пожалуйста, дайте совет тем, кто только начинает использовать Erlang. С чего бы вы начали сами? Может быть книги? Уроки? Интернет ресурсы? Где, то самое место, где можно найти ответы на все вопросы?
Джо: Книги? Хм…
мою могу посоветовать, скоро, кстати, выйдет на свет.
Tutorials:
http://www.trapexit.org/
Distribution:
http://www.erlang.org/
Questions: erlang mailing list (sign on at
http://www.erlang.org/)
Майкл: Самая ужасная ошибка, с которой вы когда-либо сталкивались в программе на Erlang’e..?
Джо: Программа без документации – Я терпеть не могу людей, которые говорят мне – «читай код». Код – это *решение* проблемы, читая код без комментариев, я вынужден догадываться, в чём состоит сама проблема. Это плохо. Я хочу, чтоб мне явно сказали, что за проблему они решили в этом коде, я не хочу теряться в догадках по этому поводу.
Поэтому самый ужасный баг, найденный мной в программе был, когда я в начале написал комментарий на несколько страниц, объясняющий тонкое место в программе, а затем обнаружил, что в следующей версии кто-то удалил всё, что я написал.
Майкл: Большое спасибо за интервью!
От себя ещё хотел добавить, что в этом интервью Джо Армстронг так размещает акценты и говорит о таких правильных,по его мнению, идеях. Что у меня прям возникло дежавю со статьей The Problem With Threads Эдварда Ли. И Ли и Армстронг говорят практически об одном и том же(удивительно, да
), только Ли замечает, что вот есть да, Erlang, есть Ada — хорошие языки, но в мейнстрим они уже не попадут... (при этом правда сам Ли в явной форме не предлагает ничего конкретного чтобы попало в мейнстрим).
[я, наверное, просто немного материалов читал по этой тематике, поэтому меня так порадовало, что два умных человека об одной и той же и главное понятной вещи говорят
]