Интервью С Райаном Далем. Первая Часть

Это интервью было проведено Олег Подсечин С Райан Даль (Райан Даль) 8 июля 2010 года, вскоре после чтения Райана в Кельне.

Олег — энтузиаст JavaScript, руководитель консалтинговой компании Ionsquare Ltd. О.

П.

: Первый вопрос вообще-то вводный.

Как вы пришли к Node.JS? Был ли у вас раньше опыт работы с JavaScript? Когда вы начали использовать JavaScript? А также с программным обеспечением, управляемым событиями? РД: Я работал по контракту и выполнял различные небольшие проекты на C, обычно это серверное программное обеспечение, управляемое событиями, и понял, что пишу один и тот же код снова и снова.

C — отличный язык для работы, но мне хотелось чего-то, что позволило бы мне писать сценарии в том же стиле, который я обычно использую для программирования серверного программного обеспечения.

О.

П.

: Делали ли вы что-нибудь для клиентской части с использованием JavaScript? РД: Немного.

Я много работал с Ruby on Rails, поэтому много занимался фронтендом.

Затем я написал на Ruby небольшой веб-сервер под названием Ebb, который должен был быть быстрее, чем Mongrel. Этот код стал отправной точкой для Node. О.

П.

: Ebb в основном написан на C? Итак, вы сначала написали его на Ruby, затем переписали на C, а теперь, наконец, переписали на JavaScript? РД: Верно.

Итак, изначально был Ruby, затем C. Я некоторое время подумывал о том, чтобы иметь небольшую C-библиотеку для построения веб-серверов — но на C сложно сделать что-то подобное.

В один прекрасный день ко мне пришло прозрение: «JavaScript — это именно тот язык, который подходит для этого приложения».

Это произошло вскоре после выхода V8. О.

П.

: Вы сказали, что есть два языка, которые всегда будут вокруг нас: C и JavaScript. Что вы думаете о JavaScript как о языке программирования общего назначения? РД: У JavaScript есть определенные характеристики, которые сильно отличают его от других динамических языков, а именно отсутствие концепции потоков.

Его модель параллелизма полностью основана на событиях.

Это несколько отличает его от других языков динамического программирования общего назначения, таких как Ruby и Python. По крайней мере, для некоторых классов задач я обнаружил, что JavaScript гораздо проще программировать, например, при написании IRC-сервера.

О.

П.

: Каким вы видите будущее JavaScript? Считаете ли вы, что JavaScript становится все более распространенным не только на серверах, но и на настольных компьютерах? РД: JavaScript уже проделал огромную работу по созданию графических интерфейсов.

Я думаю, что благодаря знакомому браузерному API JavaScript также может стать хорошим языком для настольных приложений.

О.

П.

: JavaScript слабо структурирован, поэтому люди просто копируют и вставляют код JavaScript. РД: Да, отсутствие модульной инфраструктуры является помехой.

JavaScript действительно заставляет людей хранить все в глобальных переменных.

Это настоящая боль для JavaScript, но в конечном итоге лучшие практики решают подобные проблемы.

О.

П.

: Да, вы следите за обсуждением ECMAScript 4 и ECMAScript 5? РД: Я согласен с мнением Крокфорда о том, что язык должен быть простым.

Одна из лучших особенностей JavaScript — это его простота.

Он определяет не так много концепций о том, как делать определенные вещи, особенно относительно ввода/вывода.

Хотя спецификация ECMAScript 4 не определяет никаких API-интерфейсов ввода-вывода, она определяет множество других вещей.

Она отметила множество важных изменений.

Однако мне бы хотелось, чтобы в ECMAScript 5 было больше возможностей.

О.

П.

: Какие конкретно возможности вы имеете в виду? РД: Как это называется? Деструктивное присвоение? Если у вас есть массив справа и список переменных слева, их можно определить таким образом.

Что было бы хорошо.

ОП: Это включено в Rhino, но не включено в V8. О.

П.

: Итак, перейдем к Node. Какое архитектурное решение, принятое вами в отношении проекта, было самым сложным? РД: Самое сложное для меня было.

Моя первоначальная идея заключалась в том, что это будет чисто неблокирующая система, и мне пришлось отказаться от этого во многом, в системе модулей и в некоторых других областях.

В браузерах загрузка JavaScript через тег сценария является неблокирующей операцией.

Вы действительно не знаете, когда сценарии будут полностью выполнены, пока не будет вызван OnLoad. Первоначально Node работал аналогично.

Вы можете загрузить кучу файлов модулей и не будете знать, что они уже полностью интерпретированы, пока не будет запущено событие загрузки.

Это немного усложнило ситуацию.

Вы не могли просто выполнить «require» и начать использовать этот код сразу после этой операции, вам приходилось ждать обратного вызова, прежде чем начать использовать загруженный код. О.

П.

: Приложение «Привет, мир!» было еще одно углубление.

РД: Верно.

ОП: Но это забавно, потому что люди говорят, что одно из преимуществ JavaScript заключается в том, что вы можете использовать его везде, как и в браузере.

На сервере можно использовать ту же логику проверки данных, что и в браузере, но спецификация модуля CommonJS в браузере не работает, поэтому предпринимаются попытки создания библиотек, загружающих модули асинхронно.

РД: Да, поэтому с точки зрения сложности архитектурного выбора я хотел, чтобы Node был похож на среду браузера.

Он может использовать разные методы, но одни и те же структуры можно легко портировать, если создать методы со схожими именами.

Первоначальная цель Node заключалась в том, чтобы быть полностью похожим на браузер.

В ранних версиях он даже определял объект «окно».

Со временем я удалил это API, так как оказалось, что мне не нужно, чтобы серверное окружение было точно таким же, как браузерное.

Поэтому я выбрал модульную систему CommonJS, что вполне разумно; Ребята из группы CommonJS уделили большое внимание системе модулей, и мне очень не хотелось тратить слишком много времени на обдумывание своего варианта.

Так что да, require — это блокирующая операция, и есть некоторые другие небольшие операции, которые используют блокировку в Node. В целом, этот прагматичный подход, заключающийся в выполнении неблокирующих операций в 99% случаев, но с возможностью выполнения нескольких синхронных операций, работает хорошо.

Тот факт, что вы загружаете модули синхронно, вероятно, не имеет значения для серверной программы.

Теги: #Интервью #Райал Даль #node.js #node.js

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.