Создатель Node.js: «Для серверов я не могу представить другой язык кроме Go»

в 11:19, , рубрики: Go, node.js, nodejs, ryan dahl

Перевод отрывка из интервью с создателем Node.js Раяном Далом (Ryan Dahl) в котором обсуждается модель программирования и язык Go.

Создатель Node.js: «Для серверов я не могу представить другой язык кроме Go» - 1
— Расскажи нам, как как проходила начальная разработка Node? Это ведь уже было достаточно давно, ты создал Node в 2009.

Райан: — Я думаю для себя лично, что нет лучшего момента в жизни, когда ты, как это говорится, «в потоке» и у тебя есть идея, в которую ты сильно веришь. И при этом есть время, чтобы сесть и на самом деле работать над ней. И я думаю, Node была именно такой идеей, которая ждала, чтобы её кто-то ухватил, и если бы не я, то это бы сделал кто-то другой. Но так случалось, что я был тогда достаточно свободен от работы и имел время, и мог работать нон-стоп несколько месяцев, которых как раз были нужны, чтобы выкатить начальную версию. Так что да, это был отличный период.

— Отлично, супер. Node построена на идее «полностью асинхронной» модели программирования. Удачна ли она была для Node?

Райан: — Да, это очень интересный вопрос. Уже вот несколько лет, как я не работаю над Node, ну, где-то, примерно с 2012 или 2013. И Node, конечно же, большой проект сегодня. Поэтому да, я думаю… когда она только вышла, я разъезжал и выступал на конференциях, пытаясь убедить людей, что они должны… что может быть мы совершенно неправильно делаем I/O подсистему и что, может быть, если бы всё начали делать в неблокирующем стиле, мы бы смогли решить огромное количество сложностей в программировании на Node. Ну, как, например, мы могли бы забыть про потоки полностью и использовать только абстракции процессов и сериализованную коммуникацию между ними. Но в одном процессе мы могли бы обрабатывать сразу много запросов, будучи полностью асинхронными. Я был ярым сторонником этой идеи в то время, но через пару лет, я понял, что это была не самая лучшая идея, решающая все проблемы в программировании. В частности, когда вышел язык Go… точнее, Go вышел достаточно давно, но когда я впервые начал о нём слышать, это где-то около 2012-го, у них, на самом деле, был очень приятный runtime, в которых были нормальные «зеленые потоки» и они реально строили абстракции вокруг них, и я начал думать про блокирующий ввод/вывод опять — ну, «блокирующий» в кавычках, — потому что это опять же все в «зеленых потоках»… между Go и операционной системой, так что по сути, я думаю, это всё же неблокирующий ввод-вывод.

Но интерфейс, который они предоставляют пользователю всё же блокирующий, и, мне кажется, он на самом деле даёт гораздо более удобную модель программирования. И когда она блокирующая, она, во многих ситуациях, позволяет гораздо более чётко понимать, что ты на самом деле делаешь. Ну вроде как, знаете, если у вас есть несколько действий, хорошо если вы можете прямо так и думать: сделай вот эту штуку А, подожди ответ, может быть упади с ошибкой. Потом сделай штуку Б, подожди ответ, проверь ошибку. И в Node это намного сложнее, потому что ты должен для этого прыгать в вызов другой функции.

— Да, мне тоже нравится модель программирования в Go. Использование горутин намного легче и fun. Мы, кстати, тоже Go используем на работе для распределённых систем.

Райан: — Да, я думаю, что для определённого класса приложений, как например, серверы — если вы пишете сервер, я не могу представить другой язык кроме Go. В общем, неблокирующая парадигма в Node работала очень неплохо для JavaScript, там где у вас нету потоков. И я думаю, что многие из тех проблем с callback hell, когда вам нужно прыгать в кучу разных функций чтобы закончить то, что вы делаете, в эти дни достаточно неплохо решены, с помощью async, например, который сейчас есть в JavaScript. То есть, как бы, новые версии Javascript делают жизнь немного проще. Учитывая всё это, я бы сказал, Node не лучшая система для массивных веб-серверов, я бы использовал Go для этого. И, если честно, это вобщем-то причина, почему я ушел из Node. Это было осознание: ох, ну реально, это далеко не лучшая система для серверного софта.
Да, я думаю, что Node на самом деле реально себя показала, как это ни странно, на клиентской стороне. Вроде скриптинга для построения веб-сайтов, или browserify, или bundles для клиентского Javascript кода. Ну или что можно делать всю эту серверную часть обработки клиентского Javastipt-кода. А потом, ну знаете, может быть небольшой сервер, чисто для девелопмента, там и тут, а потом может и настоящий сервер в продакшн, который будет получать реальный трафик. Node может быть полезной, или это может быть просто ваш выбор. Но если вы пишете распределённый DNS сервер, я бы не выбирал Node.

Автор: divan0

Источник

Поделиться