The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Релиз серверной JavaScript-платформы node.js 0.6

07.11.2011 21:06

Представлен третий стабильный релиз платформы node.js 0.6 (нечётные ветки - экспериментальные, а чётные (0.2, 0.4, 0.6) - стабильные), предназначенной для обособленного выполнения высокопроизводительных сетевых приложений на языке JavaScript. Функции платформы не ограничены созданием серверных скриптов для Web, платформа может использоваться и для создания обычных клиентских и серверных сетевых программ. Для обеспечения выполнения JavaScript-кода используется разработанный компанией Google движок V8.

Для обеспечения обработки большого числа параллельных запросов node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживается epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libev, для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe).

По своей сути node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine и Python Twisted, но цикл обработки событий (event loop) в node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных. Ни одна функция в node.js не должна напрямую выполнять операции ввода/вывода - для получения данных с диска, от другого процесса или из сети требуется установка callback-обработчика.

Для расширения функциональности приложений на базе node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3 серверов и клиентов, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (например, OAuth), XML-парсеры.

Ключевые новшества node.js 0.6:

  • Поддержка платформы Windows с задействованием API I/O Completion Ports для обеспечения высокопроизводительной асинхронной обработки большого числа одновременных сетевых соединений. Ранее доступный порт, работающий через систему Cygwin, больше не поддерживается. Портирование для Windows было не простой задачей и потребовало переработки большой части архитектуры ядра node.js, что положительно сказалось на производительности, в том числе и при работе на Unix-системах;
  • По сравнению с версией 0.4.12 в 0.6.0 увеличилась производительность операций чтения (io.js read), уменьшилось время запуска и возросла скорость выполнения некоторых других операций. Например, на платформе Linux тестовый скрипт http_simple.js способен выполнить 6263 запросов в секунду (в прошлой версии 5461 запросов в секунду). Пропускная способность операции io.js read возросла с 19.75 mB/s до 26.63 mB/s, а скорость запуска startup.js уменьшилась с 74.7 ms до 49.6 ms. Пропускная способность операций записи (io.js write) немного уменьшилась - с 21.60 mB/s до 17.40 mB/s;
  • Интегрированы средства балансировки нагрузки с её распределением на несколько процессов. Для более полного задействования возможностей многоядерных CPU поддерживается запуск кластера из отдельных процессов node.js;
  • Улучшена поддержка IPC-вызовов между несколькими экземплярами node.js, созданными при выполнении вызова fork;
  • Расширены возможности работающего в режиме командной строки клиента для работы со встроенным в V8 отладчиком;
  • Встроен модуль для обеспечения сжатия с использованием библиотеки zlib;
  • Незначительное изменение API. Например, удалены http.Agent.appendMessage(), http.getAgent(), net.Server.listenFD(), process.ENV, process.ARGV, process.binding('stdio') и т.д.

    Добавлены: child_process.fork(), crypto.createDiffieHellman(), crypto.pbkdf2(), crypto.randomBytes(), fs.utimes()/utimesSync(), fs.futimes()/futimesSync(), http.ClientRequest.setTimeout()/setNoDelay()/setSocketKeepAlive(), net.connect(), os.arch(), os.platform(), os.uptime(), os.networkInterfaces() и т.д.

  • JavaScript-движок V8 обновлён с версии 3.1 до 3.6. Из наиболее заметный изменений: RegExp больше не является функцией, поэтому необходимо выполнять RegExp.exec(); строковые даты (например Date('2011-06-06 00:00:00')) теперь привязываются в GMT, а не к локальному часовому поясу (нужно указывать Date('2011-06-06 00:00:00 +09:00')).

В настоящее время ведётся работа по сокращению цикла подготовки релизов node.js. Следующий стабильный выпуск 0.8 запланирован на январь. В дальнейшем разработчики намерены синхронизировать процесс разработки с браузером Chrome и движком V8, перейдя к выпуску новых версий каждые 6 недель.

  1. Главная ссылка к новости (http://blog.nodejs.org/2011/11...)
  2. OpenNews: Сотрудники AOL представили web-фреймворк SocketStream, основанный на Node.js и WebSockets
  3. OpenNews: Релиз серверной JavaScript-платформы node.js 0.4
  4. OpenNews: Разработчики Mozilla приступили к созданию гибридного JavaScript-движка V8Monkey
  5. OpenNews: Проекты по компиляции кода на языках Clojure и Pascal в JavaScript-представление
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/32247-node.js
Ключевые слова: node.js, javascript, v8, event
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (60) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 21:44, 07/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    https://raw.github.com/gist/724208/f8061aac7bd6d7af4715f4156da7a8606b55a0fc/no
     
     
  • 2.2, Аноним (-), 21:53, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Классная хохма ))))
    Идеальный пример ущербности сей платформы.
     
     
  • 3.3, anonymous (??), 22:03, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Большая часть кода - проверка и обработка ошибок (в варианте на питоне их попросту нет). Если убрать их, будут те же несколько строчек.
     
     
  • 4.4, user (??), 22:20, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    По моему у js там вывод ошибки и завершение работы, то есть стандартное поведение питона.
     
     
  • 5.7, Аноним (-), 22:42, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > По моему у js там вывод ошибки и завершение работы, то есть
    > стандартное поведение питона.

    То есть при ошибке питон завершает работу? Отличный веб сервис получится.

     
     
  • 6.10, Xasd (ok), 23:00, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    например предположим завершает работу один gevent-процесс (потомучто не был пойман ниодним try/except :):):))...

    ...но разве это проблема для gunicorn?

     
     
  • 7.14, Аноним (-), 23:27, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >gunicorn

    Этот который на hello worlde крошится без вариантов на 4 клиентах?
    Или уже починили?

     
  • 7.16, Аноним (-), 23:33, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > например предположим завершает работу один gevent-процесс
    >процесс

    Неужели процессу на соединение? И сколько терабайт памяти мне потребуется на сайтик  с пиком 50 коннектов/секунда?

     
     
  • 8.19, Аноним (-), 23:46, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ты хоть погугли, что такое gevent ... текст свёрнут, показать
     
  • 6.11, Аноним (-), 23:14, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Что за дичь? Просто сработает стандартный обработчик исключений.

    Разница в том, что Питон позволяет обработать все ошибки скопом, а Node.js заставляет городить по if-у для каждой асинхронной операции. Элегантности это точно не прибавляет.

     
     
     
    Часть нити удалена модератором

  • 8.26, Аноним (-), 07:25, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Для гостей из Индии поясняю Если обрабатывать ошибки по месту возникновения то ... текст свёрнут, показать
     
     
  • 9.27, CLI521 (?), 08:03, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Плохой тон утверждать, что что-то плохой тон Место обработки ошибок зависят то... текст свёрнут, показать
     
     
  • 10.28, Аноним (-), 08:14, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    РАЗМАТЫВАЕТСЯ СТЕК -- так понятнее или опять знакомых букв не видим ... текст свёрнут, показать
     
  • 10.29, Аноним (-), 08:23, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Не надо пытаться оправдать свой быдлокод Дай угадаю Высшее образование Незако... текст свёрнут, показать
     
  • 9.63, анонимус (??), 13:46, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Вы и есть гость из Индии, который обрабатывает ошибки по месту ее возникновения ... текст свёрнут, показать
     
  • 5.20, koloboid (ok), 00:10, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >По моему у js там вывод ошибки и завершение работы, то есть стандартное поведение питона.

    нода делает точно так же. просто в js-варианте обработали ошибки, а в пердоне - нет. так можно что угодно обгадить. И да, автор видимо не в курсе про node-fibers.

    Кроме того, как и gevent, если падает один процесс ноды - тоже ничего страшного, есть другие. Не понимаю, в чем потрясение автора этого говна?

     
  • 3.8, Аноним (-), 22:44, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Классная хохма ))))
    > Идеальный пример ущербности сей платформы.

    Да ты прав: Питон как веб-платформа действительно ущербен.

    PS
    Не говоря про то, что код на питоне там приведен с ошибками.

     
     
  • 4.32, Аноним (-), 09:39, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Аноним как веб-платформа действительно ущербен
     
  • 3.9, Аноним (-), 22:58, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Идеальный пример ущербности сей платформы.

    Это про питон чтоли? Да, с его синтаксисом и скоростью работы - в вебе он инвалид.

     
     
  • 4.12, Xasd (ok), 23:15, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >> Идеальный пример ущербности сей платформы.
    > Это про питон чтоли? Да, с его синтаксисом и скоростью работы -
    > в вебе он инвалид.

    не нравится синтаксис Python? ну тогда самое время использовать
            from __future__ import braces
    !!!

    :-)

     
  • 2.36, Славик (?), 12:41, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Callbacks на серверной стороне без обьектов синхронизации... IMHO Нечитабельный и  трудно поддерживаемый код.
     
  • 2.64, Аноним (-), 18:40, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Школота-дектор :)

    Цитирование данной шутки демонстрирует наглядное непонимание сути вопроса. node.js для ВЫСОКОНОГРУЖЕННЫХ проектов, а не для сетевого Hello world на Python.

     
     
  • 3.65, develop7 (ok), 18:47, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Школота-дектор :)
    > Цитирование данной шутки демонстрирует наглядное непонимание сути вопроса. node.js для ВЫСОКОНОГРУЖЕННЫХ проектов, а не для сетевого Hello world на Python.

    позовёте, когда это поделие научится само расползаться по процессорам, без пинков снаружи.

     
     
  • 4.69, Аноним (-), 12:12, 14/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Хехе детектет 2. Еще раз для тех кто в танке: Асинхронные и синхронные вызовы сравнивать нельзя так, это совсем разные подходы. Недопиляность конкретно node.js/v8 тут не причем, примеры мог быть на совсем разных языках/библиотектеках.
     
  • 3.66, anono (?), 11:42, 10/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    как раз-таки текущая стабильность ноды позволяет писать на ней только приколюхи, чтобы похвастаться перед другими гиками
     
     
  • 4.70, Аноним (-), 12:15, 14/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Я рад, что этому Вы уже научились. Но опять таки, речь шла о синхронных/асинхронных вызовах, что глупо.
     

  • 1.5, whoami (??), 22:26, 07/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Но зойчем переизобретать Erlang?
     
     
  • 2.6, Аноним (-), 22:40, 07/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Потомушто Эрлангом невозможно пользоватся, и знание Эрлаг=нга нигде более не пригодится.
     
     
  • 3.24, Аноним (-), 01:23, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    готовся, счас он тебе начнет рассказывать что эрланг это круто и мы не сечем
     
  • 3.35, develop7 (ok), 12:28, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Потомушто от иммутабельности, pattern matchingа и рекурсии вместо циклов у миня болит попа, и учитель информатики тоже не знает Erlang.

    fixed

     
     
  • 4.39, Аноним (-), 13:32, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >иммутабельности, pattern matchingа и рекурсии вместо циклов

    А зачем они мне?
    >учитель информатики тоже не знает Erlang.

    Он также не знает Аду, Фокал и много других мертвых языков. И что?

     
     
  • 5.42, develop7 (ok), 14:11, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >>иммутабельности, pattern matchingа и рекурсии вместо циклов
    > А зачем они мне?

    для написания контрольных они не нужны, расслабься.

    >>учитель информатики тоже не знает Erlang.
    > Он также не знает Аду, Фокал и много других мертвых языков.

    то есть про школоту я таки угадал.

     
     
  • 6.47, Аноним (-), 16:17, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ада вполне себе жива, школиё. Да-да, сейчас, в 2011м году. PL/SQL называется. Компрене?
     
     
  • 7.50, Аноним (-), 16:58, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А динозавры тоже живы -- крокодилы называются.
    Не надо сравнивать язык Ада (светлая память), с этим чудоподелием PL/SQL, для превращения проектов в не поддерживаемое мясо.
     
  • 7.52, develop7 (ok), 18:06, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Ада вполне себе жива, школиё. Да-да, сейчас, в 2011м году. PL/SQL называется. Компрене?

    а почему тогда GNU Ada compiler, а не GNU PL/SQL compiler?

     
     
  • 8.60, anonymous vulgaris (?), 00:10, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ада жива как Ада, но области применения ограничены Thales Aerospace Division Se... текст свёрнут, показать
     
  • 2.43, anonimus (?), 14:39, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Какой Erlang вы о чем? Оо.
    Как вы собрались использовать для веба язык в котором нет ни строкового типа, ни работы со строками?
    >In Erlang, there is no string type, strings are just a list of integers, each integer being an encoded character value in the string.

    Например:
    [100,111,103] == "dog".
    =>true.
    Когда создавалась база Couchdb(а написана она на Erlang) для обработки данных, которые представлены в базе как раз строками, разработчикам пришлось включать в дистрибутив spidermonkey и обработку писать на javascript.

     
     
  • 3.44, develop7 (ok), 14:58, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Какой Erlang вы о чем? Оо. Как вы собрались использовать для веба язык в котором нет ни строкового типа, ни работы со строками?

    Молча. Не обращая внимания на эти мелочи. Да и не вебом единым.

    >>In Erlang, there is no string type, strings are just a list of integers, each integer being an encoded character value in the string.
    > Например:
    > [100,111,103] == "dog".
    > =>true.

    в 90% случаев строку достаточно передать дальше. для остального есть ux.

    > Когда создавалась база Couchdb(а написана она на Erlang) для обработки данных, которые  представлены в базе как раз строками, разработчикам пришлось включать в дистрибутив  spidermonkey и обработку писать на javascript.

    Пруфы есть?

     
     
  • 4.49, Аноним (-), 16:53, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >Как же вы поедете на лыжах по асфальту?
    >Молча. Не обращая внимания на эти мелочи. Да и не снегом единым.

    Суровые какие программисты.
    Гвозди бы делать из этих людей -- качество средней программ сразу взлетит.

     
     
  • 5.51, develop7 (ok), 17:47, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Суровые какие программисты. Гвозди бы делать из этих людей -- качество средней программ сразу взлетит.

    Да, качество софта на erlang обычно выше — т.к. и кода меньше и проще он, и вообще.

    А если серьёзно: где именно в веб-приложении недостаточно представления строки в виде list of integers?

     
     
  • 6.53, koloboid (ok), 19:37, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    string.toUpper()?
     
     
  • 7.54, develop7 (ok), 19:54, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > string.toUpper()?

    урлы/методы/параметры нормализовывать? это вебсервер делает (только он tolower использует, чтобы в атомы сложить)
    Ну и для терминальных случаев есть https://github.com/freeakk/i18n

     

  • 1.23, Аноним (-), 01:18, 08/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чет не понял, он таки не только событийный но еще и многопоточный теперь чтоли ? и кросплатформенный при этом  ?
     
     
  • 2.59, Xasd (ok), 00:05, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    не такой уж и кросплатформенный :-)...

    ...там V8 и не-опциональные ассемблерные вставки (в отличии от Spidermoney, который написан на C и *ОПЦИОНАЛЬНЫХ* asm-вставках , и скомпилируется даже если архитектура неизвестно какая)

    другими словами -- на PPC этот Node.Js не будет работать, и на других редких архитекрутах

     
     
  • 3.62, Аноним (-), 00:53, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Ну бог с ним, основную часть накрывает уже хорошо. Я вот только про многопоточность посмотрел, и думаю теперь, а что бы было не сделать это совсем прозрачно, т.е. без явного программирования форков, чтобы само внутри форкалось как настроишь ?
     
     
  • 4.67, anono (?), 11:44, 10/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну бог с ним, основную часть накрывает уже хорошо. Я вот только
    > про многопоточность посмотрел, и думаю теперь, а что бы было не
    > сделать это совсем прозрачно, т.е. без явного программирования форков, чтобы само
    > внутри форкалось как настроишь ?

    т.е. многопоточности как бы и нету, все ясно

     
  • 4.68, develop7 (ok), 11:49, 10/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну бог с ним, основную часть накрывает уже хорошо. Я вот только про многопоточность посмотрел, и думаю теперь, а что бы было не сделать это совсем прозрачно, т.е. без явного программирования форков, чтобы само внутри форкалось как настроишь ?

    А тем временем приложения на сложном и неудобном Erlang уже лет 7 как самостоятельно расползаются по любому кол-ву процессоров.


     

  • 1.31, Аноним (-), 09:38, 08/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >В дальнейшем разработчики намерены синхронизировать процесс разработки с браузером Chrome и движком V8, перейдя к выпуску новых версий каждые 6 недель.

    А LTS версии будут? Иначе станет никому не нужно.

     
  • 1.34, anonymous (??), 11:33, 08/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >перейдя к выпуску новых версий каждые 6 недель.

    А как хорошо всё начиналось.

     
  • 1.37, anonym (?), 13:24, 08/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > По своей сути node.js похож на фреймворки Ruby Event Machine и Python Twisted,

    Эй, ну добавьте в новость, что нода похожа на Perl AnyEvent. Ведь это известно, что AnyEvent работает, также как и нода, поверх libev, и автор AnyEvent написал libev.

     
     
  • 2.38, anonym (?), 13:28, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    вот пруфлинк: http://software.schmorp.de/

    ps и, да, он еще написал libeio

    pps AnyEvent работает очень быстро и круто, асинхронный код под Perl пишется легко и непринужденно

     
     
  • 3.40, Аноним (-), 13:39, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >AnyEvent работает очень быстро и круто

    В 14 раз медленнее ноды. Круто? Круто.
    >асинхронный код под Perl пишется легко и непринужденно

    И как только ты используешь например типовой клиент для базы данных либо разрешение DNS или любую стороннюю библиотеку не рассчитанную на такой режим работы, то все быстро и непринужденно катится в АД. Как и в случае с Twisted или EventMachine.
    Под эффективный асинхронный код нужно чтоб все внешние модули и все конструкции языка были к этому готовы. А в перле вы даже файл открыть не сможете, не говоря уже про DNS-разрешение имен.

     
     
  • 4.46, anonym (?), 16:11, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > В 14 раз медленнее ноды. Круто? Круто.

    пруф в студию, или тролль и лжец

    > И как только ты используешь например типовой клиент для базы данных либо разрешение DNS...

    Спасибо, Кэп.

    > А в перле вы даже файл открыть не сможете, не говоря уже про DNS-разрешение имен.

    Ложь:
    https://metacpan.org/module/AnyEvent::DNS
    https://metacpan.org/module/AnyEvent::AIO

    Асинхронное разрешение имен только ленивый не писал.

     
     
  • 5.48, anonimus (?), 16:51, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >https://metacpan.org/module/AnyEvent::AIO

    Пример по ссылке:
    my $fh = aio_open "/etc/passwd", O_RDONLY, 0
       or die "/etc/passwd: $!";
    aio_read $fh, 0, 1_000_000, my $buf, 0
       or die "aio_read: $!";
    aio_close $fh;
    не вижу здесь ни ассинхронности ни не блокируемости.
    Последовательное открытие чтение и закрытие файла.
    Видимо в перле какаято своя астральная асинхронность не доступная простым смертным.

     
     
  • 6.55, koloboid (ok), 19:56, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    по ссылке не ходил, но может там coroutines?


     
     
  • 7.56, anonym (?), 21:16, 08/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    да, так и есть, анонимус решил опозориться и привел пример отсюда http://search.cpan.org/~mlehmann/Coro-6.06/Coro/AIO.pm

    Он не даже не догадывается, что Coro отлично помогает тем, кого напрягает collback-стиль кода, так как код на короутинах выглядит так же как и обычный блокирующий.

     

  • 1.45, Yuri (??), 15:14, 08/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    в 0.6 libev заменили на libuv в основном благодаря этому и появилась родная поддержка windows.
     
  • 1.57, lucentcode (ok), 21:45, 08/11/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мне JavaScript по душе, и node.js тоже. Одно то, что для манипуляций на структурой DOM-дерева можно заюзать код, аналогичный тому JS-коду, что юзается в клиентской части - само по себе хорошо. Web-разработчику легче изучить хорошо один язык, и писать код серверной и клиенской части в одном стиле.
     
     
  • 2.58, vasek (?), 00:03, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А мне в чем-то нравится, а чем-то раздражает, например своими областями видимости, сборкой мусора и прототипным наследованием (но здесь больше виноват не JS, а те кто пытаются классы натянуть на прототипную объектную модель JS'a)

    Ну кстати, это все басни про код одинаковый на сервере и клиенте, на клиенте ты скорее всего будешь через jQuery с DOM работать, да и стиль разный будет, и серверному программисту горздо полезнее понимать UNIX-архитектуру.

     
     
  • 3.61, koloboid (ok), 00:11, 09/11/2011 [^] [^^] [^^^] [ответить]  
  • +/
    >но здесь больше виноват не JS, а те кто пытаются классы натянуть на прототипную объектную модель JS'a

    +много. не надо мыслить классами, надо мыслить объектами. хотя очень непривычно.

    >Ну кстати, это все басни про код одинаковый на сервере и клиенте, на клиенте ты скорее всего будешь через jQuery с DOM работать, да и стиль разный будет, и серверному программисту горздо полезнее понимать UNIX-архитектуру.

    и тем не менее, как минимум - утилитарный код, модели данных, валидаторы - общие. если конечно захотеть.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру