очень интересно смотреть, как js начинает применятся не только в качестве украшалки для web страниц, но как полноценный язык разработки. после знакомства с mooTools я познал, насколько js может быть мощным и что он не сильно уступает ruby.
пардон, мне какзалось, что GWT просто транслирует Java код в JS, но это немного другой разговор, из разряда трансляторов (например VB в С++ — были подобные штуки)
в языке
— Классическое наследование, mix-ins
— method_missing
— destructuring
— &:method
— потоки
— всё — объекты
в комьюнити
— Rails, Rack, Passenger
— DHH, Yehuda Katz
Могу по каждому пункту развернуть, почему это действительно нужно, и написать еще много чего))
В целом, преимуществ node.js два:
— скорость (да, V8 рулит)
— молодость (орентир на асинхронность дан изначально, нет legacy кода)
При этом сам язык менее мощный и выразительный, чем руби (см. выше). Зачем писать на менее мощном языке, при том, что производительность имеет тенденцию повышаться просто из-за следствий закона Мура, я не понимаю.
— наследование — используйте любой каркас типа base2.
— разрушение объектов в языках со сборкой мусора — не дело.
— для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
— Yehuda Katz является контрибутором в такой проект, как jQuery Core.
А вообще это всё новое, поэтому каркасы ещё только начали создаваться. аналог Синатры уже есть.
> используйте любой каркас типа base2
Они кривы в мелочах.
> разрушение объектов в языках со сборкой мусора — не дело.
Вы не поняли. multi.rubyforge.org/text8.html
> для событийно-управляемых приложений и вообще для Unix потоки скорее вредны.
Согласен, что в этом классе приложений они не нужны. Тем не менее, я говорил о мощности языка и платформы вообще.
> Yehuda Katz является контрибутором в такой проект, как jQuery Core
и?
I'm sorry to report that it is going to take more work to get jQuery running on jsdom. Sizzle however does work! I really want to keep jsdom as light as possible, so adding in full browser emulation like env.js is not really a priority at this time. stackoverflow.com/questions/1801160/can-i-use-jquery-with-node-js
Это от автора jsdom.
По поводу моего незнания, вывод абсолютно нелогичен. И неверен, кстати (полтора года хардкорного JS). ПРавее остальных себя не считаю. Привык оперировать аргументами.
знаете, а ведь обилие фишек — это не всегда плюс. Достаточно вспомнить хотя бы те же С++ или Perl.
Я сам питонист, но был при ближайшем рассмотрении очарован простотой и элегантностью Javascript. Откровенно говоря, прототипирование мне даже показалось более логичным, нежели привычный ООП с классами. Хотя, конечно, есть и в JS неувязки и неоднозначности.
ну и что? а что вообще значит «невозможны»? Невозможно Жигуль разогнать до скорости Порше. А сайт собрать можно на любом языке.
Отсутствие какой-либо фишки не значит, что в принципе чего-то сделать нельзя из функционала, а просто значит «это нельзя сделать так, как мы привыкли это делать в любимом языке».
проблема вашей логики в том, что вы записываете в недостатки ДжаваСкрипта то, что он не такой как Руби. ДжаваСкрипт другой. Вот и все. И то, что в руби реализован какой-то синтаксический сахар не значит, что джаваскрипт плох из-за того, что в нем это реализуется другим способом.
В js тоже можно сказать все объекты (есть примитивы, конечно типо number, string, но при вызове метода у примитива создается обертка-объект). Mix-in фактически это просто копирование методов и реализуется просто. Насчет destructuring это есть в js 1.7 — https://developer.mozilla.org/en/New_in_Javascript_1.7#Destructuring_assignment_(Merge_into_own_page.2fsection), а в ECMAscript Harmony (aka ECMAscript 6) это планируется внедрить также как и method_missing (в js это будет noSuchMethod). Также есть форк node.js с реализацией noSuchMethod. А комьюнити дело времени =)
> при вызове метода у примитива создается обертка-объект
Не во всех случаях.
10.times(function(){})
«preved».encode()
Mix-in — совсем не копирование методов. Сохраняется связь. Например, при добавлении метода в примешиваемый модуль он появится у всех объектов, с включенным этим модулем.
У number первая точка является отделением от дробной части числа, поэтому в случае с number нужно либо так: 10..times(function(){...}) либо так (10).times(function(){...}) (В спеке все описано). Про строку не понял. Достаточно добавить свой метод в прототип String и все работает. С mix-in верно, связи не будет, но не припомню случая, когда mix-in динамически менялся у меня.
Ой, а вы не скажете, что там с производительностью, сколько примерно запросов в секунду на типичную страницу с контроллером/моделькой/шаблоном получается?
Ну так это хорошо :) Жаль, в Javascript нет модулей, require_once, классов, наследования и *нативной* (не на яваскрипте) функции Object.extend(), e нас в PHP 50-100 запросов в секунду всего лишь :'(
эта недальновидная идея слишком развращает неокрепшие умы программистом и позволяет им оправдывать свою безалаберность в разработке архитектуры, которая должна быть максимально гибкой и не приводить к экспоненциальному росту сложности по мере развития проекта
да я собрал запустил. При простое жрет 9мб. При нагрузках серьезных до 50 доходит. Сравнил с синатрой с запущенным одним монгрелом, у синатры 50мб, как без нагрузки так и с ней. Вот только с пхп не знаю как сравнивать) Там куча вариантов и не знаю как тестить)
Сборщик мусора вообще порадовал. А то у всех остальных со временем бывает потребление памяти только растет.
Я вот теперь думаю если писать сайты js + mongodb например, то теперь можно будет клиентам предлагать сайты с дешевым vps 128 или даже 96мб памяти. А то писать на рельсах визитки или на других руби фреймворках выходит затратно.
Ребята! А напишите, пожалуйста, топик в духе «SSJS: первый HelloWorld» =] (гугл молчит)
Очень хочется попробовать написать какой-то на серверном JS, но боюсь дальше освоения Денвера я не ушел :(
Вот я потому и попросил написать топик, чтобы избежать в комментах вопросов: «А где его запускать?», «А на че означает 3-я строчка?»…
Потому что все эти вопросы сейчас роятся в моей голове (
Express — Sinatra для Node