Представлен (http://blog.nodejs.org/2011/11/05/node-v0-6-0/) третий стабильный релиз платформы node.js 0.6 (http://nodejs.org/) (нечетные ветки - экспериментальные, а четные (0.2, 0.4, 0.6) - стабильные), предназначенной для обособленного выполнения высокопроизводительных сетевых приложений на языке JavaScript. Функции платформы не ограничены созданием серверных скриптов для Web, платформа может использоваться и для создания обычных сетевых клиентских и серверных программ. Для обеспечения выполнения JavaScript-кода используется разработанный компанией Google движок V8 (http://code.google.com/p/v8/).Для обеспечения обработки большого числа параллельных запросов node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживается epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libev (http://so...
URL: http://blog.nodejs.org/2011/11/05/node-v0-6-0/
Новость: http://www.opennet.me/opennews/art.shtml?num=32247
https://raw.github.com/gist/724208/f8061aac7bd6d7af4715f4156...
Классная хохма ))))
Идеальный пример ущербности сей платформы.
Большая часть кода - проверка и обработка ошибок (в варианте на питоне их попросту нет). Если убрать их, будут те же несколько строчек.
По моему у js там вывод ошибки и завершение работы, то есть стандартное поведение питона.
> По моему у js там вывод ошибки и завершение работы, то есть
> стандартное поведение питона.То есть при ошибке питон завершает работу? Отличный веб сервис получится.
например предположим завершает работу один gevent-процесс (потомучто не был пойман ниодним try/except :):):))......но разве это проблема для gunicorn?
>gunicornЭтот который на hello worlde крошится без вариантов на 4 клиентах?
Или уже починили?
> например предположим завершает работу один gevent-процесс
>процессНеужели процессу на соединение? И сколько терабайт памяти мне потребуется на сайтик с пиком 50 коннектов/секунда?
Ты хоть погугли, что такое gevent.
Что за дичь? Просто сработает стандартный обработчик исключений.Разница в том, что Питон позволяет обработать все ошибки скопом, а Node.js заставляет городить по if-у для каждой асинхронной операции. Элегантности это точно не прибавляет.
Для гостей из Индии поясняю:
Если обрабатывать ошибки по месту возникновения то появляется возможность восстановить работу программы в случае не критической ошибки. То есть база вернула таймаут -- подождал секунду и попробовал снова. Соединение не установилось? Попробуем резервный адрес. И т. д.
А если обрабатывать ошибки "в одном месте", то в это "одно место" ошибка приезжает, предварительно раскрутив стек и возможности восстановления нет.Не говоря уже о том, что это плохой тон в программировании - обрабатывать ошибки "скопом".
Плохой тон утверждать, что что-то "плохой тон"Место обработки ошибок зависят только от удобства, целей программы и стиля принятого в разработке.
ЗЫ
как правило "обработка ошибок на месте" - стиль плохого проектирования.
РАЗМАТЫВАЕТСЯ СТЕК -- так понятнее или опять знакомых букв не видим?
>Место обработки ошибок зависят только от удобства, целей программы и стиля принятого в разработке.Не надо пытаться оправдать свой быдлокод.
>как правило "обработка ошибок на месте" - стиль плохого проектирования.
Дай угадаю: Высшее образование. Незаконченное. Три курса. Педагогического.
Вы и есть гость из Индии, который обрабатывает ошибки по месту ее возникновения - именно это плохой тон программирования. Обработка ошибок не должна работать быстро - это внештатная ситуация. Какие варианты ошибок вы учитываете в таком обработчике? А что будет делать программа, не обработав ошибку которую вы не учли? В месте возникновения нужно обрабатывать ошибки, которые не желательно передавать наверх (читайте - для которых нет возможности восстановления).
>По моему у js там вывод ошибки и завершение работы, то есть стандартное поведение питона.нода делает точно так же. просто в js-варианте обработали ошибки, а в пердоне - нет. так можно что угодно обгадить. И да, автор видимо не в курсе про node-fibers.
Кроме того, как и gevent, если падает один процесс ноды - тоже ничего страшного, есть другие. Не понимаю, в чем потрясение автора этого говна?
> Классная хохма ))))
> Идеальный пример ущербности сей платформы.Да ты прав: Питон как веб-платформа действительно ущербен.
PS
Не говоря про то, что код на питоне там приведен с ошибками.
Аноним как веб-платформа действительно ущербен
> Идеальный пример ущербности сей платформы.Это про питон чтоли? Да, с его синтаксисом и скоростью работы - в вебе он инвалид.
>> Идеальный пример ущербности сей платформы.
> Это про питон чтоли? Да, с его синтаксисом и скоростью работы -
> в вебе он инвалид.не нравится синтаксис Python? ну тогда самое время использовать
from __future__ import braces
!!!:-)
Callbacks на серверной стороне без обьектов синхронизации... IMHO Нечитабельный и трудно поддерживаемый код.
Школота-дектор :)Цитирование данной шутки демонстрирует наглядное непонимание сути вопроса. node.js для ВЫСОКОНОГРУЖЕННЫХ проектов, а не для сетевого Hello world на Python.
> Школота-дектор :)
> Цитирование данной шутки демонстрирует наглядное непонимание сути вопроса. node.js для ВЫСОКОНОГРУЖЕННЫХ проектов, а не для сетевого Hello world на Python.позовёте, когда это поделие научится само расползаться по процессорам, без пинков снаружи.
Хехе детектет 2. Еще раз для тех кто в танке: Асинхронные и синхронные вызовы сравнивать нельзя так, это совсем разные подходы. Недопиляность конкретно node.js/v8 тут не причем, примеры мог быть на совсем разных языках/библиотектеках.
как раз-таки текущая стабильность ноды позволяет писать на ней только приколюхи, чтобы похвастаться перед другими гиками
Я рад, что этому Вы уже научились. Но опять таки, речь шла о синхронных/асинхронных вызовах, что глупо.
Но зойчем переизобретать Erlang?
Потомушто Эрлангом невозможно пользоватся, и знание Эрлаг=нга нигде более не пригодится.
готовся, счас он тебе начнет рассказывать что эрланг это круто и мы не сечем
> Потомушто от иммутабельности, pattern matchingа и рекурсии вместо циклов у миня болит попа, и учитель информатики тоже не знает Erlang.fixed
>иммутабельности, pattern matchingа и рекурсии вместо цикловА зачем они мне?
>учитель информатики тоже не знает Erlang.Он также не знает Аду, Фокал и много других мертвых языков. И что?
>>иммутабельности, pattern matchingа и рекурсии вместо циклов
> А зачем они мне?для написания контрольных они не нужны, расслабься.
>>учитель информатики тоже не знает Erlang.
> Он также не знает Аду, Фокал и много других мертвых языков.то есть про школоту я таки угадал.
Ада вполне себе жива, школиё. Да-да, сейчас, в 2011м году. PL/SQL называется. Компрене?
А динозавры тоже живы -- крокодилы называются.
Не надо сравнивать язык Ада (светлая память), с этим чудоподелием PL/SQL, для превращения проектов в не поддерживаемое мясо.
> Ада вполне себе жива, школиё. Да-да, сейчас, в 2011м году. PL/SQL называется. Компрене?а почему тогда GNU Ada compiler, а не GNU PL/SQL compiler?
>> Ада вполне себе жива, школиё. Да-да, сейчас, в 2011м году. PL/SQL называется. Компрене?Ада жива как Ада, но области применения ограничены.
Thales Aerospace Division Selects GNAT Pro for Airbus A350 XWB (Xtra Wide-Body)
Safety-critical systems to be implemented in Ada 2005
June 1, 2009 – Avionics USA – AdaCore, a leading supplier of Ada development tools and support services, today announced that international electronics and systems group Thales has chosen the GNAT Pro technology, including several safety-qualified tools, to develop critical systems for the new Airbus A350 XWB (Xtra Wide-Body) family.
> а почему тогда GNU Ada compiler, а не GNU PL/SQL compiler?
потому что для таких применений надо сертифицированные средства типа
http://www.adacore.com/home/products/gnatpro/development_sol.../
Какой 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.
> Какой 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.
Пруфы есть?
>Как же вы поедете на лыжах по асфальту?
>Молча. Не обращая внимания на эти мелочи. Да и не снегом единым.Суровые какие программисты.
Гвозди бы делать из этих людей -- качество средней программ сразу взлетит.
> Суровые какие программисты. Гвозди бы делать из этих людей -- качество средней программ сразу взлетит.Да, качество софта на erlang обычно выше — т.к. и кода меньше и проще он, и вообще.
А если серьёзно: где именно в веб-приложении недостаточно представления строки в виде list of integers?
string.toUpper()?
> string.toUpper()?урлы/методы/параметры нормализовывать? это вебсервер делает (только он tolower использует, чтобы в атомы сложить)
Ну и для терминальных случаев есть https://github.com/freeakk/i18n
Чет не понял, он таки не только событийный но еще и многопоточный теперь чтоли ? и кросплатформенный при этом ?
не такой уж и кросплатформенный :-)......там V8 и не-опциональные ассемблерные вставки (в отличии от Spidermoney, который написан на C и *ОПЦИОНАЛЬНЫХ* asm-вставках , и скомпилируется даже если архитектура неизвестно какая)
другими словами -- на PPC этот Node.Js не будет работать, и на других редких архитекрутах
Ну бог с ним, основную часть накрывает уже хорошо. Я вот только про многопоточность посмотрел, и думаю теперь, а что бы было не сделать это совсем прозрачно, т.е. без явного программирования форков, чтобы само внутри форкалось как настроишь ?
> Ну бог с ним, основную часть накрывает уже хорошо. Я вот только
> про многопоточность посмотрел, и думаю теперь, а что бы было не
> сделать это совсем прозрачно, т.е. без явного программирования форков, чтобы само
> внутри форкалось как настроишь ?т.е. многопоточности как бы и нету, все ясно
> Ну бог с ним, основную часть накрывает уже хорошо. Я вот только про многопоточность посмотрел, и думаю теперь, а что бы было не сделать это совсем прозрачно, т.е. без явного программирования форков, чтобы само внутри форкалось как настроишь ?А тем временем приложения на сложном и неудобном Erlang уже лет 7 как самостоятельно расползаются по любому кол-ву процессоров.
>В дальнейшем разработчики намерены синхронизировать процесс разработки с браузером Chrome и движком V8, перейдя к выпуску новых версий каждые 6 недель.А LTS версии будут? Иначе станет никому не нужно.
>перейдя к выпуску новых версий каждые 6 недель.А как хорошо всё начиналось.
> По своей сути node.js похож на фреймворки Ruby Event Machine и Python Twisted,Эй, ну добавьте в новость, что нода похожа на Perl AnyEvent. Ведь это известно, что AnyEvent работает, также как и нода, поверх libev, и автор AnyEvent написал libev.
вот пруфлинк: http://software.schmorp.de/ps и, да, он еще написал libeio
pps AnyEvent работает очень быстро и круто, асинхронный код под Perl пишется легко и непринужденно
>AnyEvent работает очень быстро и крутоВ 14 раз медленнее ноды. Круто? Круто.
>асинхронный код под Perl пишется легко и непринужденноИ как только ты используешь например типовой клиент для базы данных либо разрешение DNS или любую стороннюю библиотеку не рассчитанную на такой режим работы, то все быстро и непринужденно катится в АД. Как и в случае с Twisted или EventMachine.
Под эффективный асинхронный код нужно чтоб все внешние модули и все конструкции языка были к этому готовы. А в перле вы даже файл открыть не сможете, не говоря уже про DNS-разрешение имен.
> В 14 раз медленнее ноды. Круто? Круто.пруф в студию, или тролль и лжец
> И как только ты используешь например типовой клиент для базы данных либо разрешение DNS...
Спасибо, Кэп.
> А в перле вы даже файл открыть не сможете, не говоря уже про DNS-разрешение имен.
Ложь:
https://metacpan.org/module/AnyEvent::DNS
https://metacpan.org/module/AnyEvent::AIOАсинхронное разрешение имен только ленивый не писал.
>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;
не вижу здесь ни ассинхронности ни не блокируемости.
Последовательное открытие чтение и закрытие файла.
Видимо в перле какаято своя астральная асинхронность не доступная простым смертным.
по ссылке не ходил, но может там coroutines?
да, так и есть, анонимус решил опозориться и привел пример отсюда http://search.cpan.org/~mlehmann/Coro-6.06/Coro/AIO.pmОн не даже не догадывается, что Coro отлично помогает тем, кого напрягает collback-стиль кода, так как код на короутинах выглядит так же как и обычный блокирующий.
в 0.6 libev заменили на libuv в основном благодаря этому и появилась родная поддержка windows.
Мне JavaScript по душе, и node.js тоже. Одно то, что для манипуляций на структурой DOM-дерева можно заюзать код, аналогичный тому JS-коду, что юзается в клиентской части - само по себе хорошо. Web-разработчику легче изучить хорошо один язык, и писать код серверной и клиенской части в одном стиле.
А мне в чем-то нравится, а чем-то раздражает, например своими областями видимости, сборкой мусора и прототипным наследованием (но здесь больше виноват не JS, а те кто пытаются классы натянуть на прототипную объектную модель JS'a)Ну кстати, это все басни про код одинаковый на сервере и клиенте, на клиенте ты скорее всего будешь через jQuery с DOM работать, да и стиль разный будет, и серверному программисту горздо полезнее понимать UNIX-архитектуру.
>но здесь больше виноват не JS, а те кто пытаются классы натянуть на прототипную объектную модель JS'a+много. не надо мыслить классами, надо мыслить объектами. хотя очень непривычно.
>Ну кстати, это все басни про код одинаковый на сервере и клиенте, на клиенте ты скорее всего будешь через jQuery с DOM работать, да и стиль разный будет, и серверному программисту горздо полезнее понимать UNIX-архитектуру.
и тем не менее, как минимум - утилитарный код, модели данных, валидаторы - общие. если конечно захотеть.