вторник, 8 февраля 2011 г.

RESTAS и JavaScript

Популярность JavaScript в качестве серверного языка стремительно увеличивается, чему способствует в том числе и свойства самого языка - JavaScript это удивительно гибкий и пластичный язык, он даже мягче, чем лисп. Кроме того, в современных веб-приложениях часто логика перемешивается между клиентом и сервером и очень удобно использовать и там и там один и тот же код. cl-closure-template решает многие проблемы разделения логики, но не все. Поэтому, у меня зародилась мысль дать возможность создавать модули для RESTAS на JavaScript. Тем более, что существует CL-JavaScript - достаточно качественная реализация JavaScript на Common Lisp.

restas-javascript - проект, который должен дать возможность смешивать код на Common Lisp и JavaScript при разработке web-приложений на базе RESTAS. Кое-что уже работает. В частности, я уже смог переписать на JavaScript примеры из статьи Hello World - смотрите код в файле demo.js.

Структура этого кода полность аналогична соответствующему кода на Common Lisp, только использует идиомы JavaScript. Доступ к объектам request и reply (которые в CL оформлены в виде специальных переменных) в обработчиках маршрутом осуществляется через this.request и this.reply. Интерфейсы request и reply повторяет функции из документации к Hunchentoot, но именуются в стиле CamelCase, плюс некоторые методы оформлены в виде "активных свойств".

Загрузить данный файл можно следующим образом:
(restas.javascript:execute #P"/path/to/demo.js")
после чего уже можно будет идти в браузер смотреть результат.

С помощью
(restas.javascript:repl)
можно запустить примитивную JavaScript-консоль и поиграться с маршрутами. Что бы несколько упростить это я добавил простейшую реализацию console.log.

Кстати, дизайн интерфейса для JavaScript мне нравится в некоторых аспектах больше, чем для CL.

7 комментариев:

  1. > Кстати, дизайн интерфейса для JavaScript мне
    > нравится в некоторых аспектах больше, чем для CL.

    Какого интерфейса? В смысле Javascript API предоставляемый RESTAS, по сравнению с Lisp API предоставляемый RESTAS?

    Например, в каком аспекте он больше нравится? Можно ли лисповый улучшить, или не получится?

    ОтветитьУдалить
  2. > В смысле Javascript API предоставляемый RESTAS

    Угу.

    > Например, в каком аспекте он больше нравится?

    В плане синтаксиса. CL постоянно норовит заставить меня писать одно большое s-выражение, а я не люблю больших нагромождений кода. А в JavaScript я могу себе спокойно конструировать объект, который по сути хэш-таблица, постепенным уточнением его параметров.

    Кроме того, в JavaScript мне удаётся выразить интерфейс в виде естественных объектов, а в CL версии я манипулирую символами, ибо на объектах было бы слишком громоздко.

    > Можно ли лисповый улучшить

    Ну я его уже давно улучшаю, концентрируя внимание в основном на дизайне. Пока лучшего варианта я не вижу.

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Этот комментарий был удален автором.

    ОтветитьУдалить
  5. Кстати, насчет гибкости JavaScript, вспоминается выражение, что JavaScript это лисп в сишной шкуре (может понравится такое сравнение, если вы не слышали его).

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

    Если используется база, сервер может быть просто proxy к базе данных. SQL писать прямо в JavaScript.

    Случаев когда логику нужно "прятать" на сервере не очень много. Наверное в большинстве случаев логику можно на клиенте исполнять.

    Это будет реальный cloud computing - сколько клиентов, столько и машин в cloud подключается. У сегодняшних веб приложений сервер зачастую - это bottleneck производительности.

    И программировать так проще.

    ОтветитьУдалить
  6. > насчет гибкости JavaScript, вспоминается
    > выражение, что JavaScript это лисп в сишной
    > шкуре

    Да, говорят он делался под влиянием Scheme и сишный синтаксис туда прикрутили в самый последний момент по маркетинговым соображениям (и название же по тем же соображениям дали). Это реально сильно заметно, хотя инструменты вроде немного не те, но есть однозначная весьма существенная общность.

    > писать веб приложения целиком в браузере

    Я поначалу примерно так и делал. Потом отказался. Люблю всё по полочкам раскладывать, а так получается слишком много кода (и бардака) на клиенте.

    ОтветитьУдалить
  7. JavaScript мне нравится в некоторых аспектах больше, чем для CL.

    мне тоже кстати

    ОтветитьУдалить