Comments 27
Вы сравниваете друг с другом три языка разных парадигм, существующих в разных экосистемах и применяющихся для решения разных непересекающихся задач?
Низачет.
Низачет.
Задачи все чаще пересекаются. В проекте который я пишу используются все три языка на разных уровнях. Но грница между слоями нечеткая, иногда можно вот так позволить себе написать одно и то же на том или ином языке.
С++ был упомянут просто для истории, раньше спорили про С++ и Java, а вот теперь уже «молодая» Java примеряет на себя роль динозавра, а на смену ей приходят node.js, scala, python, groovy. Статья лишь напоминание что не стоит зацикливаться на чем-то одном и доказывать всем что лучше X ничего не бывает.
С++ был упомянут просто для истории, раньше спорили про С++ и Java, а вот теперь уже «молодая» Java примеряет на себя роль динозавра, а на смену ей приходят node.js, scala, python, groovy. Статья лишь напоминание что не стоит зацикливаться на чем-то одном и доказывать всем что лучше X ничего не бывает.
> Статья лишь напоминание что не стоит зацикливаться на чем-то одном и доказывать всем что лучше X ничего не бывает
Ну вот вы доказываете, что javascript лучше.
Ну вот вы доказываете, что javascript лучше.
Ни в коем случае! Доказывают обычно оторванно от контекста употребляя слова «везде» и «всегда». Я же просто поделился личным опытом как за полчаса написать несложный template engine и, кстати, если добавить пару строк и один интерфейс, то его с успехом можно будет использовать в обычной Java за пределами Javascript. Что я и делаю в своем проекте.
Я так понял, что большинство читателей заглянули сюда из интереса, не особо имея представление о JSR 223. Но это все равно приятно, всем спасибо за критику и комментарии.
Я так понял, что большинство читателей заглянули сюда из интереса, не особо имея представление о JSR 223. Но это все равно приятно, всем спасибо за критику и комментарии.
Очень желтый заголовок!
Прошу прощения, в следующий раз постараюсь придумать менее броский заголовок.
Этот заголовок это такая неудавшаяся попытка пошутить. Нельзя даже рядом ставить эти 3 языка, но так случилось, что они постоянно крутятся рядом друг с другом. Прошу прощения у тех кто хотел найти в статье продолжение какого-то холивара, но это техническая статья о том насколько просто сейчас писать одну систему на 3х разных языках. Security layer — на С++, фреймворки, утилиты — на Java, а Swing UI например на Javascript.
Посмотрите на проект Griffon: http://griffon.codehaus.org/Quick+Start
Это же потрясающе насколько красиво можно писать Java приложения, пусть даже не на самой Java. Не будьте такими закостенелыми, Вам совершенно не обязательно «жениться» только на одном языке программирования. Откройте для себя мир вокруг. Есть Javascript? Отлично, я его выучу и смогу понимать других, тез кто на нем пишет каждый день. Есть Groovy? А он классный? Здорово, буду учить Grovy чтобы однажды он мне пригодился.
Посмотрите на проект Griffon: http://griffon.codehaus.org/Quick+Start
Это же потрясающе насколько красиво можно писать Java приложения, пусть даже не на самой Java. Не будьте такими закостенелыми, Вам совершенно не обязательно «жениться» только на одном языке программирования. Откройте для себя мир вокруг. Есть Javascript? Отлично, я его выучу и смогу понимать других, тез кто на нем пишет каждый день. Есть Groovy? А он классный? Здорово, буду учить Grovy чтобы однажды он мне пригодился.
Тут на хабре недавно был перевод интервью(или статьи, не суть важно) Джона Кармака, одна из фраз меня там очень сильна зацепила и изменила мой подход к подобным вопросам. Вот этот кусок:
Тут можно, например, начать говорить о функциональном программировании, лямбда-счислении, монадах — это всё красиво и очень наукообразно. Но всё это не влияет на то, что конкретно и как конкретно вы разрабатываете. Да, эти «методики» и полезные штуки позволяют ликвидировать определённые классы ошибок, допускаемых абстрактными разработчиками. Но, знаете, всё то, что я могу сделать с использованием чистого функционального языка (а это, как известно, самый академичный, научный и строго формализованный способ решения задач) — всё это будет преобразовано точно в такой же ассемблерный код, в который будет преобразовано аналогичное решение, реализованное на каком-нибудь BASIC или на чём-нибудь другом на ваш выбор.
Пример красивый но не убедительный:
1. Так ли плохо добавить еще библиотеку? Ну будет еще пару мегабайт, который один раз скачаются к пользователю, ну и что?
2. Если уж добавлять скриптовые языки, я бы советовал groovy — просто потому что его синтакс очень похож на Яву, а кроме того, он может использовать совершенно прозрачно уже имеющиеся Ява библиотеки, чего Javascript наверное не сможет
1. Так ли плохо добавить еще библиотеку? Ну будет еще пару мегабайт, который один раз скачаются к пользователю, ну и что?
2. Если уж добавлять скриптовые языки, я бы советовал groovy — просто потому что его синтакс очень похож на Яву, а кроме того, он может использовать совершенно прозрачно уже имеющиеся Ява библиотеки, чего Javascript наверное не сможет
2. Прелесть Javascript в том что ничего добавлять не надо, он идет с JRE «из коробки» и как я писал соответствует Rhino 1.7R3.
К тому же его не надо учить, любой JEE девелопер подразумевается что знает javascript. Соответсвенно это экономит время на интергацию и изучение новых технологий, а это то что мне надо.
1. Библиотеку добавить можно, но в данном случае было нецелесообразно. Добавлял бы я ее минут 20, а скрипт написал за полчаса.
К тому же его не надо учить, любой JEE девелопер подразумевается что знает javascript. Соответсвенно это экономит время на интергацию и изучение новых технологий, а это то что мне надо.
1. Библиотеку добавить можно, но в данном случае было нецелесообразно. Добавлял бы я ее минут 20, а скрипт написал за полчаса.
Автору неплохо бы загонять текст в Word на предмет проверки орфографических ошибок и опечаток перед тем, как постить. («Препологается», «соответсвенно» и т.д. ).
Но зато видно, что сам писал :)
Но зато видно, что сам писал :)
При таких примерах хотелось бы увидеть обоснование почему javascript, а не
1) google guava — возможность не выходить за приделы Java
2) Scala — двусторонняя совместимость с Java. Тот же байткод, JIT.
2) groovy — совместимость с java (не знаю двусторонняя ли).
1) google guava — возможность не выходить за приделы Java
2) Scala — двусторонняя совместимость с Java. Тот же байткод, JIT.
2) groovy — совместимость с java (не знаю двусторонняя ли).
>Тех кто пользуется Javascript-ом каждый день будет трудно чем-то удивить, но для приверженцев чистой Java, без «вредных» скриптовых примесей кое-что может показаться открытием.
Судя по этому предложению, вы считаете JS примесью Java. Это немножко не так.
Судя по этому предложению, вы считаете JS примесью Java. Это немножко не так.
Под примесью подразумевается ситуация, когда продукт разрабатывается на Java, а в него с какой-то целью добавляют «инородные» вставки на javascript, groovy, scala и т.п.
Есть много «за» и «против» таких миксов, наверное это обсуждение стоит вынести в отдельную статью. А обсудить есть что. С одной стороны скрипт это что? Скрипт это гибкость, это zero cost deployment, это полная свобода мысли. Но сдругой стороны надо понимать какой ценой нам это дается, ведь никто не отменил abstraction penalty. Если все это интересно обсудить, пишите в комментариях, попробую написать статью поинтереснее чем эта.
Есть много «за» и «против» таких миксов, наверное это обсуждение стоит вынести в отдельную статью. А обсудить есть что. С одной стороны скрипт это что? Скрипт это гибкость, это zero cost deployment, это полная свобода мысли. Но сдругой стороны надо понимать какой ценой нам это дается, ведь никто не отменил abstraction penalty. Если все это интересно обсудить, пишите в комментариях, попробую написать статью поинтереснее чем эта.
1. Guava это сторонняя библиотека которую надо интегрировать, тестировать и поддерживать. Это все дополнительное время и ресурсы, не говоря уже о том, что надо с ней самой еще разбираться.
2. Scala is… Scala is… Scala is целый отдельный мир, и приведи я здесь как пример кусок кода на scala, меня бы застрелили. К тому же, вы мнея простите, но где scala, а где javascript. Гугл для scala дает 1.5 млн. ссылок, для java — 27 млн., а для javascript — 31 млн.
3) Groovy. Молодой динамичный язык. отличная алтернатива, быстро растущая аудитория, но… Проблемы те же: время на изучение, тестирование и поддержку надо где-то взять.
Хочу напомнить всем всем всем — javascript прекрасный язык с многолетней историей, который бесплатно доступен из Java. Да, Вы не ошиблись — совершенно бесплатно! Не надо подключать third-party libraries, не надо тратить время на изучение их API, не надо их тестировать и даже поддерживать. Javascript у вас просто есть. И все.
Подробнее тут: http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/index.html
Еще подробнее тут: https://developer.mozilla.org/en-US/docs/Rhino_documentation
2. Scala is… Scala is… Scala is целый отдельный мир, и приведи я здесь как пример кусок кода на scala, меня бы застрелили. К тому же, вы мнея простите, но где scala, а где javascript. Гугл для scala дает 1.5 млн. ссылок, для java — 27 млн., а для javascript — 31 млн.
3) Groovy. Молодой динамичный язык. отличная алтернатива, быстро растущая аудитория, но… Проблемы те же: время на изучение, тестирование и поддержку надо где-то взять.
Хочу напомнить всем всем всем — javascript прекрасный язык с многолетней историей, который бесплатно доступен из Java. Да, Вы не ошиблись — совершенно бесплатно! Не надо подключать third-party libraries, не надо тратить время на изучение их API, не надо их тестировать и даже поддерживать. Javascript у вас просто есть. И все.
Подробнее тут: http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/index.html
Еще подробнее тут: https://developer.mozilla.org/en-US/docs/Rhino_documentation
Зачем тестировать саму Guava, если достаточно тестировать ваш, использующий ее, код, который вы и так будете тестировать?
С таким подходом можно начать стандартную библиотеку java тестировать.
javascript доступен очень не бесплатно. За него придется заплатить потерей статической типизации и потерей совместимости с Java. Потеря производительности, которая тоже будет, на этом фоне сущий пустяк.
За Scala вас бы тут не пристрелили — смотрите другие статьи про scala и kotlin (кстати +1 к списку).
У списка {guava, scala, groovy, kotlin} есть один огромный плюс по сравнению с javascript: совместимость с java.
Вы получаете не только удобный инструмент для скриптов, но и возможность как использовать java, так и использовать свои скриптовые наработке из java.
А движков javascript достаточно из без jvm.
С таким подходом можно начать стандартную библиотеку java тестировать.
javascript доступен очень не бесплатно. За него придется заплатить потерей статической типизации и потерей совместимости с Java. Потеря производительности, которая тоже будет, на этом фоне сущий пустяк.
За Scala вас бы тут не пристрелили — смотрите другие статьи про scala и kotlin (кстати +1 к списку).
У списка {guava, scala, groovy, kotlin} есть один огромный плюс по сравнению с javascript: совместимость с java.
Вы получаете не только удобный инструмент для скриптов, но и возможность как использовать java, так и использовать свои скриптовые наработке из java.
А движков javascript достаточно из без jvm.
Уточните. пожалуйста, как Вы позиционируете прменение javascript в данном контексте?
Как удобный скриптовый язык для мелких некритичных задачь? Тогда у меня к Вам следующие вопросы:
1) При чем тут java. javascript можно и без jvm запустить.
2) Почему вы в комментариях постоянно упоминаете трудоемкое тестирование? Подобные задачи не покрываются тестами обычно.
3) Почему вы считаете необходимость однократной настройки существенным недостатком?
Как часть большей системы на java? Тогда почему вы отказываетесь от совместимости с java и повторного использования кода?
Как удобный скриптовый язык для мелких некритичных задачь? Тогда у меня к Вам следующие вопросы:
1) При чем тут java. javascript можно и без jvm запустить.
2) Почему вы в комментариях постоянно упоминаете трудоемкое тестирование? Подобные задачи не покрываются тестами обычно.
3) Почему вы считаете необходимость однократной настройки существенным недостатком?
Как часть большей системы на java? Тогда почему вы отказываетесь от совместимости с java и повторного использования кода?
Как часть не очень большой, но системы на java. Скорее даже проекта. По пунктам.
1) Javascript без JVM запускать можно. Но для этого надо что-то сделать, что-то поставить. А утилита jrunscript есть везде где стоит Java. А сейчас она где только не стоит. Бонусом к этой утилите будет то что она очень много умеет делать через Java. Открыть сокет? Нет проблем, зашифровать поток — да пожалуйста. Есть какая-то библиотека на Java которая умеет все что тебе надо — кинь ее в classpath и будет тебе счастье. Но хочу предупредить, jrunscript понятия не имеет о CommonsJS. Если это важно, тогда придется ставить оригинальный Mozilla Rhino который уже дорос до версии 1.7R4. Это конечно не тема статьи, но еще почитатйте о E4X — страшно удобное дополнение для тех задач, для которых оно было создано. Жаль что v8 его скипнул.
2) Вы деливери кастомеру делаете по принципу «кажется та библиотека что мы вчера прикрутили как-то работает»? Простите, но это путь в никуда.
3) Для получасового таска это не то что минус, это недопустимо. Главное ответьте на вопрос — зачем мне это надо. В статье написано что небольшой проект который я делаю имеет свои restrictions. Мне абсолютно не зачем даже один раз конфигурировать какие-то сторонние скриптовые движки, у меня уже есть все, что мне надо для успешного продолжения проекта.
> Тогда почему вы отказываетесь от совместимости с java и повторного использования кода?
Извините, но я вот не увидел где я от нее отказываюсь. Если бы я использовал Lua, то Вы были бы на 200% правы. Java + Lua это как-то неправильно. К счастью я не извращенец.
1) Javascript без JVM запускать можно. Но для этого надо что-то сделать, что-то поставить. А утилита jrunscript есть везде где стоит Java. А сейчас она где только не стоит. Бонусом к этой утилите будет то что она очень много умеет делать через Java. Открыть сокет? Нет проблем, зашифровать поток — да пожалуйста. Есть какая-то библиотека на Java которая умеет все что тебе надо — кинь ее в classpath и будет тебе счастье. Но хочу предупредить, jrunscript понятия не имеет о CommonsJS. Если это важно, тогда придется ставить оригинальный Mozilla Rhino который уже дорос до версии 1.7R4. Это конечно не тема статьи, но еще почитатйте о E4X — страшно удобное дополнение для тех задач, для которых оно было создано. Жаль что v8 его скипнул.
2) Вы деливери кастомеру делаете по принципу «кажется та библиотека что мы вчера прикрутили как-то работает»? Простите, но это путь в никуда.
3) Для получасового таска это не то что минус, это недопустимо. Главное ответьте на вопрос — зачем мне это надо. В статье написано что небольшой проект который я делаю имеет свои restrictions. Мне абсолютно не зачем даже один раз конфигурировать какие-то сторонние скриптовые движки, у меня уже есть все, что мне надо для успешного продолжения проекта.
> Тогда почему вы отказываетесь от совместимости с java и повторного использования кода?
Извините, но я вот не увидел где я от нее отказываюсь. Если бы я использовал Lua, то Вы были бы на 200% правы. Java + Lua это как-то неправильно. К счастью я не извращенец.
Насчет Guava. Я привел 2 билиотеки где мне вообще бы не пришлось ничего учить или дописываать — Freemarker & Velocity. Но я не пошел этим путем, объяснение в статье и комментариях к ней. Тестировать косвенно или явно это неважно, важно что я не имею практического опыта с этой библиотекой. И вообще, не обижайтесь, но статья не про Guava.
Javascript бесплатный не в сравнении с Java, но если уже сравнивать, то нет статических типов — прекрасно! Без них мне было проще написать 20 строчек кода.
А вот про потерю совместимости вообще не понял — я успешно использую этот template engine из Java и пока они как-то совмещаются. Наверное Вам стоит почитать следущую статью: https://developer.mozilla.org/en-US/docs/Scripting_Java
Зачем мне писать пример на Scala если интерес к ней несравнимо меньше чем интерес к Java и Javascript? И вообще, мне пришла в голову мысль написать пример на Javascript. В наказание за это лишь один Вы меня упрекаете, а если бы я сделал наоборот — меня бы 10 энтузиастов Javascript упрекало точно в том же в чем и Вы.
По поводу наработок. Отлично мне доступна Java из Javascript, отлично я использую Javascript из Java, ну а про количество скриптовых наработок я уже писал. Сравните популярность Javascript и Scala, только пользуйтесь логарифмической линейкой, чтобы все нули поместились. (шутка)
Движки типа v8 и SpiderMonkey мне не интересны — мой проект написан на 20% на Java и на 80% на Javascript. Куда я дену 20% написанные на Java?
Снова и снова: эта статья есть попытка популяризовать agile не только на уровне project management, но и в сознании самих разработчиков. Проще сделать на Java — пиши на Java. Надо кусочек на Groovy (не люблю Scala, простите) — пиши на Groovy. Пришла в голову светлая мысль как за полчаса написать template engine на Javascript — не стесняйся, так и делай. Чем быстрее ты напишешь все эти куосчки кода, тем больше тебе останется времени на что-то более интересное, например на семью, домашних любимцев, машину. У каждого оно свое, любимое увлечение.
Javascript бесплатный не в сравнении с Java, но если уже сравнивать, то нет статических типов — прекрасно! Без них мне было проще написать 20 строчек кода.
А вот про потерю совместимости вообще не понял — я успешно использую этот template engine из Java и пока они как-то совмещаются. Наверное Вам стоит почитать следущую статью: https://developer.mozilla.org/en-US/docs/Scripting_Java
Зачем мне писать пример на Scala если интерес к ней несравнимо меньше чем интерес к Java и Javascript? И вообще, мне пришла в голову мысль написать пример на Javascript. В наказание за это лишь один Вы меня упрекаете, а если бы я сделал наоборот — меня бы 10 энтузиастов Javascript упрекало точно в том же в чем и Вы.
По поводу наработок. Отлично мне доступна Java из Javascript, отлично я использую Javascript из Java, ну а про количество скриптовых наработок я уже писал. Сравните популярность Javascript и Scala, только пользуйтесь логарифмической линейкой, чтобы все нули поместились. (шутка)
Движки типа v8 и SpiderMonkey мне не интересны — мой проект написан на 20% на Java и на 80% на Javascript. Куда я дену 20% написанные на Java?
Снова и снова: эта статья есть попытка популяризовать agile не только на уровне project management, но и в сознании самих разработчиков. Проще сделать на Java — пиши на Java. Надо кусочек на Groovy (не люблю Scala, простите) — пиши на Groovy. Пришла в голову светлая мысль как за полчаса написать template engine на Javascript — не стесняйся, так и делай. Чем быстрее ты напишешь все эти куосчки кода, тем больше тебе останется времени на что-то более интересное, например на семью, домашних любимцев, машину. У каждого оно свое, любимое увлечение.
Сравнили теплое с мягким.
Простите, а Вы статью вообще читали? Там ни слова про хоть какое-то более менее обстоятельное сравнение. То что заголовок неудачный — это действительно так, я согласен. Но почитайте пожалуйста саму статью. Желательно при этом открыть консоль и набрать в ней
Если ответом Вам будет
то Вы мой «клиент», для Вас я писал эту статью.
~$ jrunscript
Если ответом Вам будет
> js
то Вы мой «клиент», для Вас я писал эту статью.
Поменял заголовок статьи на более понятный. Надеюсь теперь он не будет смущать уважаемого читателя.
По поводу сравнения языков: в самой статье ни слова не сказано про то, что надо сравнить три языка, в результате 2 выкинуть, а на оставшемся будем писать. Если бы так было, то дальше нулей и единиц мы так и не ушли бы. Ведь это единственный язык на котором с любой железякой можно что угодно сделать.
Я люблю Java, C++, Javascipt, Groovy и многое другое, вот только Scala как-то не очень. Шутка!
Еще раз спасибо всем за комментарии и справедливую критику.
По поводу сравнения языков: в самой статье ни слова не сказано про то, что надо сравнить три языка, в результате 2 выкинуть, а на оставшемся будем писать. Если бы так было, то дальше нулей и единиц мы так и не ушли бы. Ведь это единственный язык на котором с любой железякой можно что угодно сделать.
Я люблю Java, C++, Javascipt, Groovy и многое другое, вот только Scala как-то не очень. Шутка!
Еще раз спасибо всем за комментарии и справедливую критику.
Я бы использовал готовый удобный джаваскриптовый метод template из библиотеки Underscore вместо того, чтобы расходовать время на сочинение собственного — но ход Ваших мыслей мне понятен.
Sign up to leave a comment.
Scripting Java с помощью JSR 223 — пример написания template engine в 20 строк из личного опыта