LXF150:Go
Материал из Linuxformat
Версия от 14:18, 30 июля 2014; 2sash-kan (обсуждение | вклад)
|
|
|
Интервью
- Грэм Моррисон и Майк Сондерс набираются программистской мудрости от одного из самых выдающихся инженеров.
Роб Пайк уже не новичок. Он работал над Unix в Bell Labs, приложил руку к созданию Plan 9 и даже засветился с Penn & Teller на David Letterman Show. Но его страсть — языки программирования, и последний его проект — Google Go: быстрый, параллельный, с открытым кодом. Майк и Грэм немного пообщались с Робом на недавней конференции OSCON и выяснили, как используется Go в Google и о чем вас могут спросить при найме в компанию.
- LXF
- Почему талисманом выбран суслик?
- РП
- Все дело в Go... [суслик – англ. gopher]. Пусть это глупо, но важно, чтобы у продукта был некий узнаваемый образ, ассоциирующийся с ним. Да он и неплох – людям нравится, суслики и правда популярны.
- LXF
- Что нового в Go за последние 12 месяцев?
- РП
- Ну, главная новость в том, что две платформы, не имевшие ранее поддержки, ее получили. Хотя вся работа была проделана сообществом Open Source, вне Google, теперь есть хорошая поддержка для Windows, а также App Engine. На Google App Engine это теперь третий язык, после Python и Java.
- И теперь можно запускать приложения App Engine – пишите их на Go, а в облаке они будут собраны в статически скомпилированный бинарник, он и запустится. Скажем, если у вас идет какой-то ресурсоемкий процесс, вы можете использовать настоящую «числодробилку» для решения этой задачи, а мы сделали простенькую демо-версию, выполняющую кое-какие графические вещи, чтобы показать возможности. Кроме того, введено огромное количество исправлений и настроек.
- LXF
- Много ли вы работаете над Go? Или продвижением его внедрения в Google?
- РП
- Мы действительно используем Go (в Google), ведь у них изначально общее предназначение. Не берусь вдаваться в детали, но это относится ко внутреннему процессу.
- LXF
- Была ли его концепция связана с требованиями параллелизма, налагаемыми на язык?
- РП
- Да, хотя параллелизм – это только полдела. Вообще-то все началось с недовольства тем, что для написания серверного ПО приходилось использовать языки, которые работали плохо, по крайней мере, для нас. Стандартно, для всяких масштабируемых вещей применяют С++, но с ним куча сложностей. Параллелизм входит в наши планы, но это не самоцель. Лучшее – это скорость сборки. То же управление зависимостями реализовано таким образом, что пусть у вас множество деревьев – компиляция все равно будет очень быстрой, с чем C++ и Java (в меньшей степени) не справляются.
- LXF
- То есть главной целью было увеличение скорости компиляции?
- РП
- Да, для больших приложений. Стоит задаться этой целью, и вам потребуется новый язык, вот вы и начинаете думать – какой. Пока шла такая компиляция, мы и решили, что пора делать Go. Мы подумали: а не создать ли язык программирования с быстрой сборкой? Так что типичная сборка Go занимает долю секунды.
- LXF
- Да, при виде Go в действии больше всего поражает скорость.
- РП
- А сборка C++, даже для самой скромной программы – это много секунд. И Google держит эти огромные серверные фермы ради других ферм, и это маразм, никому они не нужны, а Go просто компилируется гораздо быстрее.
- LXF
- Полагаю, популярности ему прибавит App Engine?
- РП
- App Engine стал общедоступным на прошлой неделе (в середине июля), так что пока рано об этом говорить. Но, определенно, интересно будет посмотреть, что из него выйдет. Зарегистрировано уже несколько сотен приложений, использующих его.
- LXF
- После стольких лет в этой отрасли, ожидали ли вы, что языки будут так актуальны?
- РП
- Трудно сказать. Вот что мне действительно интересно, уходя в сторону от Go, так это что уже не актуальны операционные системы. Хоть многие от них в восторге, они уже не так важны.
- LXF
- Вы считаете это новым веянием?
- РП
- На самом деле, лет десять назад я давал интервью, где рассуждал об этом – что операционные системы, похоже, превращаются в пережиток прошлого. Все строят свое окружение так, чтобы оно либо было переносимым, либо работало на одинаковых API, а сама ОС уже роли не играет. Тем более, сейчас столько уровней виртуализации. Если вам понадобилось какое-нибудь приложение Windows, машина с Windows не нужна: поставили виртуальную машину – и дело в шляпе.
- И то, что было лет 20 – 30 назад таким насущным вопросом – разработка операционных систем – уже не важно. Люди привыкли воспринимать их просто как один из уровней API, и поэтому потеряли интерес. С языками, по крайней мере, чувствуешь какое-то разнообразие. Раньше с операционными системами так тоже было, а теперь – нет. Возвращаясь к вашему предыдущему вопросу – нет, я не думал об этом, но я не думал и о том, чем мне заняться вместо этого.
- Когда я пришел в Google, компания была гораздо меньше, и одним из первых моих больших проектов был связан с новым языком программирования для высокопараллельного анализа данных. Мало кто верил, что легко создать жизнеспособный язык программирования. Но оказалось, что это неплохая идея, и она сработала хорошо. Мы спроектировали очень простой язык, позволяющий на один запрос задействовать несколько тысяч машин. Это тоже открытый код, хотя я не знаю, использует ли его кто-нибудь. Я-то его и не открывал, это уже другие постарались. Но проект был интересный. Go к этому языку никакого отношения не имеет. Go – не параллельный, а просто распараллеленный, но это был интересный эксперимент по продвижению языка вовне, а в самом Google сейчас функционирует с полдюжины внутренних языков для разных конфигураций и сетевого управления.
- LXF
- То есть не видать нам одного языка на все случаи жизни?
- РП
- Нет. Похоже, будет языковой бум – после длительного периода, когда все пользовались только Java. Теперь же есть Erlang, и даже совсем древние языки переживают своего рода возрождение: Ruby, Closure, Scala и Pascal. Лет 10 назад о них не было ни слуху, ни духу. Теперь же они все потихоньку используются. Думаю, Go – из их числа, но у него положение особое, поскольку это по-настоящему компилируемый язык. Большинство других – интерпретируемые. Я считаю JVM интерпретатором, а вот Gо компилируется в машинный код. Поэтому вы можете написать очень, очень быстрый код, сравнимый с С или С++. По правде говоря, я думаю, Go даже обходит C++. Ведь в том есть скрытые издержки, о которых людям свойственно забывать, а в C они очевидны.
- LXF
- Вы пользуетесь Go в обычной жизни?
- РП
- Безусловно. Пожалуй, я только им и пользуюсь. Я нахожу его очень эффективным, и многие со мной солидарны.
- LXF
- Считаете ли вы, что высокоуровневые языки лучше подходят для обучения будущих компьютерных специалистов? Или их следует также знакомить и с азами машинного кода?
- РП
- Думаю, здесь ключевое слово – «также». Вычислительной среде и так уже поднавредили, сводя ее к таким языкам, как Java и Python, где вы в упор не видите компьютера – только скрывающую его оболочку. Мы проводим собеседования, принимая людей на работу, и многие даже не знают, сколько занимает целое число.
- LXF
- Но нужно ли им это знать?
- РП
- Вам нужно это знать, если вы хотите писать настоящее ПО. Вот если вы хотите писать только связующий код, чтобы привязать страницу к вашей базе данных, тогда, пожалуй, нет.
- LXF
- Но не виноваты ли в этом языки программирования — что вам все еще нужно знать размер целого?
- РП
- Вы же не хотите терять 90 % процессорного времени из-за неверного распределения ресурсов, потому что вы не понимаете, как работает компьютер. Нехватка знаний дорого обошлась некоторым очень известным сайтам. Им приходится пересматривать все свои сборки, потому что слишком много вчерашних школьников не имели представления о производительности.
- Высокоуровневые языки великолепны, пока в вашей программе не окажется миллион строк, при 100 программистах, над ней работающих, а вам невдомек, почему на выдачу одной страницы уходит 3 секунды. Дело не в том, чтобы всегда держать это в голове при написании кода, но если вы в этом не разбираетесь, то не поймете и где в коде это необходимо.