Как я могу заниматься веб-программированием с помощью Lisp или Scheme?

Обычно я пишу веб-приложения на PHP, Ruby или Perl. Я начинаю изучение Scheme и хочу попробовать какой-нибудь веб-проект на этом языке. Но я не могу найти лучшую среду для этого.

Я ищу следующие функции:

  • Простой способ получить параметры запроса (что-то вроде: get-get #key, get-post #key, get-cookie #key).
  • Доступ к MySQL.
  • Генераторы HTML-форм, обработка, валидаторы и т. Д.
  • Помощники для фильтрации вводимых пользователем данных (что-то вроде htmlentities, escape-переменные для ввода запросов и т. Д.).
  • FLOSS.
  • И дружественный к GNU / Linux.

Итак, заранее спасибо за все ответы.


person Castro    schedule 14.08.2009    source источник
comment
Такие вещи, как htmlentities, функции экранирования, оболочки для запросов и т. Д., Могут быть хорошим упражнением для вас, чтобы реализовать себя в Scheme, поскольку вы говорите, что только начинаете изучать схему.   -  person erjiang    schedule 14.08.2009


Ответы (14)


В Racket есть все, что вам нужно. См. руководство веб-сервера Racket, а затем документация. Веб-сервер существует уже давно и имеет множество функций. Вероятно, единственное, что не включено, - это интерфейс mysql, но он существует в виде пакета на PLaneT ( Средство распространения пакетов Racket).

ОБНОВЛЕНИЕ: Racket теперь поддерживает БД, работает с несколькими БД, включая mysql.

person Eli Barzilay    schedule 14.08.2009
comment
Прикомандированный. Интерфейс продолжения тоже интересен - не волнуйтесь, если он выглядит запутанным; остальной интерфейс сервлета по-прежнему работает без него. Не знал об интерфейсе mysql, я проверю это, спасибо! - person Aaron; 14.08.2009
comment
С '09 Racket получил встроенную поддержку баз данных. Есть поддержка PostgreSQL, MySQL, SQLite и ODBS. См. docs.racket-lang.org/db/index.html. - person soegaard; 18.12.2012

Вы можете взглянуть на Clojure:

Clojure - это динамический язык программирования, ориентированный на виртуальную машину Java. [...] Clojure обеспечивает легкий доступ к средам Java с дополнительными подсказками типов и выводом типов, чтобы гарантировать, что вызовы Java могут избежать отражения.

Clojure - это диалект Lisp, разделяющий с Lisp философию кода как данных и мощную макросистему.

Взаимодействие с Java в Clojure просто, поэтому вы можете повторно использовать любые существующие библиотеки Java по мере необходимости. Я уверен, что есть много полезных для веб-разработки.

clojure-contrib имеет API SQL, и есть ClojureQL, который должен покрыть ваши потребности в доступе к БД.

В стадии разработки находится веб-фреймворк для Clojure под названием Compojure. Могут быть и другие.

Источник Clojure доступен на github в разделе EPL. Запустить его в Linux очень просто; Я просто клонирую репозиторий git и запускаю ant.

person Mike Mazur    schedule 14.08.2009
comment
Спасибо за ответ. У меня нет опыта работы с Java. Требуется ли установка или использование clojure? - person Castro; 14.08.2009
comment
Я не думаю, что Java является обязательным требованием; вы сможете сразу приступить к работе с Clojure. - person Mike Mazur; 14.08.2009
comment
Clojure работает на JVM, поэтому вам потребуется ее установить. Опыт работы с библиотекой классов Java определенно станет плюсом, если вы выйдете за пределы встроенных типов Clojure. - person wm_eddie; 14.08.2009

Вы можете заниматься веб-разработкой с помощью схемы хитрости. Его стандартная библиотека включает модуль (простой sxml), который очень полезен для генерации, обработки и анализа HTML. Библиотека guile-www добавляет поддержку http, cgi и т. Д. guile-dbi обеспечивает доступ к MySQL и другим базам данных. С помощью этих строительных блоков вы можете реализовать все, от простых сценариев cgi до веб-приложений с собственным HTTP-сервером.

person gcbenison    schedule 27.01.2012

Попробуйте Weblocks, веб-фреймворк Common Lisp:

http://weblocks.viridian-project.de/

person Leslie P. Polzer    schedule 14.08.2009

Я написал довольно обширный учебник / электронную книгу по этой теме: http://lispwebtales.ppenev.com/

Краткое резюме:

  • Он использует Common Lisp
  • Он использует структуру Restas.
  • В нем есть примеры практически для большинства базовых веб-разработок, включая доступ к БД, аутентификацию, создание HTML и создание шаблонов.
  • Поскольку документация Restas в значительной степени устарела, мой учебник ближе всего к современным документам.
  • Показывает несколько более продвинутых функций, таких как политики, которые позволяют вам писать подключаемые интерфейсы, например, вы можете написать уровень хранилища данных и относительно легко писать серверные части для различных механизмов хранения, модульная система, которая позволяет вам писать повторно используемые компоненты, такие как фреймворки аутентификации и тому подобное.
  • Он охватывает такие вещи, как установка lisp, настройка системы сборки ASDF, диспетчера пакетов quicklisp и т. Д.
  • Он бесплатный онлайн, и как только я его закончу, он будет бесплатным и на Leanpub. Источник находится на https://github.com/pvlpenev/lispwebtales по лицензии CC, исходный код - MIT. Еще не все опубликовано, и я нахожусь в процессе пересмотра.
person Pavel Penev    schedule 11.10.2013

Это может быть то, что вы ищете.

http://www.plt-scheme.org/

http://docs.plt-scheme.org/web-server/index.html

http://common-lisp.net/project/cl-weblocks/

person Unknown    schedule 14.08.2009
comment
Было бы неплохо описание ссылок. - person Sasha Chedygov; 14.08.2009
comment
Схема PLT теперь известна как Racket и находится на другом сайте: racket-lang.org - person Nate C-K; 26.03.2012

Если вас интересует Common Lisp, а точнее, и вы не хотите идти по маршруту веб-блоков, я бы порекомендовал следующую настройку:

  1. Используйте SBCL в Linux, но с поддержкой нескольких потоков
  2. Используйте Hunchentoot в качестве веб-сервера, который предоставит вам всю необходимую серверную обработку, включая сеансы и файлы cookie.
  3. Используйте ClSql для связи с MySql, он имеет обширную документацию и очень стабилен.
  4. Для поколения HTMl вы можете использовать Dr Edi Weitz Cl-WHO (очень хорошо документировано).

Обратите внимание, что все вышеперечисленное находится под GPL или аналогичной лицензией (которая больше подходит для программ Lisp)

person Mackram    schedule 19.10.2009

Gambit Scheme также имеет собственное решение для веб-приложений. Он использует структуру Spork на основе Black Hole (оба автора Per Eckerdal).

У Эндрю Уэйли есть начальное руководство о том, как получить Gambit, Black Hole и Spork, запускающие веб-приложение под Apache, используя mod_proxy. Возможно, вы захотите взглянуть на это.

По (возможно) связанной с этим примечанием, Gambit также скомпилирует ваш материал в C, а затем в исполняемый файл, если вы так захотите.

person malvim    schedule 18.08.2009

Пол Грэм (и его друзья) сделали шепелявый диалект специально для написания базовых веб-приложений. Он называется Arc, и вы можете получить его на arclanguage.org.

Вероятно, он не подходит для действительно больших сложных веб-сайтов, и я не уверен, в каком состоянии находится поддержка базы данных, но Пол Грэм знает как писать веб-приложения на лиспе, чтобы Arc упростил вам работу с HTTP / HTML, пока вы тратите большую часть своих мозговых циклов на изучение лиспа.

person wm_eddie    schedule 14.08.2009

Weblocks - хороший инструмент для создания веб-приложений на Common Lisp, но для меня он слишком тяжелый.

Мы используем следующий стек:

  • OpenMCL (Lisp с открытым исходным кодом, очень красиво)

  • Portable Allegroserve (веб-сервер, генератор HTML)

  • Наши собственные инструменты, подобные Rails, для работы с Ajaxy (обновление: теперь он открыт как WuWei)

  • Разнообразные библиотеки CL, такие как cl-json, cl-smtp, md5
person mtraven    schedule 25.08.2009

Я использую свою собственную настроенную версию Scheme, производную от MzScheme. Он имеет новую простую структуру веб-приложений, встроенный веб-сервер (не тот, который поставляется с MzScheme) и библиотеки ODBC. (http://spark-scheme.wikispot.org/Web_applications). Документация не может быть исчерпывающей, поскольку это скорее личный инструмент. Но есть много примеров кода в репозитории кода.

person Vijay Mathew    schedule 14.08.2009

Clojure - это диалект Лиспа, который может вас заинтересовать. На данный момент существует довольно приличный стек веб-разработки. Могу порекомендовать несколько вещей:

  • leiningen диспетчер зависимостей, который упрощает установку и управление используемыми вами библиотеками. Для него тоже неплохой набор плагинов. Есть даже плагин для Clojurescript, языка, основанного на Clojure, который компилируется в Javascript.
  • Абстракция ring HTTP-сервера. Он используется в большинстве актуальных веб-фреймворков. Хорошая идея - сначала изучить это, прежде чем переходить к реальной структуре.
  • hiccup - это язык dsl / шаблонов HTML, написанный на Clojure. Очень выразительно! В некотором смысле напоминает мне Джейд.
  • composure должен быть самым популярным веб-фреймворком для Clojure. По сути, это библиотека маршрутизации, такая как express.js.
person Jonathan Boudreau    schedule 17.10.2015

Давайте посмотрим, что можно сделать с помощью Common Lisp.

состояние экосистемы Common Lisp (2015 г.) и Awesome Common Lisp показывает нам пару современных фреймворков (Caveman, Люцерн, все построено на новый сервер веб-приложений Clack, интерфейс для Hunchentoot и других серверов). Давайте обсудим с нашими собственными выводами.

update 2019: есть новое руководство по Common Lisp Cookbook: https://lispcookbook.github.io/cl-cookbook/web.html Он охватывает маршрутизацию, механизмы шаблонов, создание автономных двоичных файлов, развертывание и т. д.

update: чуть позже я узнал о Snooze от создателя Sly или Emacs 'Yasnippet, и произвел на него гораздо лучшее впечатление, чем, скажем, Caveman. Объявление конечных точек похоже на объявление функций, поэтому некоторые вещи, которые были утомительны в Caveman, очевидны в Snooze, например, доступ к параметрам URL-адреса. У меня нет большого опыта с этим, но я рекомендую проверить это.

обновление июнь 2018: также не пропустите текущую перезапись Weblocks, это будет огромно! : D http://40ants.com/weblocks/quickstart.html позволяет создавать динамические webapps, без строчки Javascript, без разделения лицевой и обратной сторон. Он основан на компонентах, как React, но на стороне сервера. На момент написания (июнь 2018) он был альфа-версией, но в процессе, и он работает, у меня работает пара простых веб-приложений.

Простой способ получить параметры запроса (что-то вроде: get-get #key, get-post #key, get-cookie #key).

Я нашел более простой способ Люцерна, он такой же простой, как макрос with-params (пример из реальной жизни):

@route app (:post "/tweet")
(defview tweet ()
  (if (lucerne-auth:logged-in-p)
      (let ((user (current-user)))
        (with-params (tweet)
          (utweet.models:tweet user tweet))
        (redirect "/"))
      (render-template (+index+)
                       :error "You are not logged in.")))

Путь пещерного человека был для меня менее ясным.

MySQL доступ

Caveman рекламирует интеграцию с базами данных (с Datafly от Fukamachi и sxql).

Вы можете просто использовать clsql или Mito ORM: https://lispcookbook.github.io/cl-cookbook/databases.html

Генераторы HTML-форм, обработка, валидаторы и т. Д.

Я не знаю, есть ли там генераторы форм. edit: есть: cl-forms и formlets или снова 1forms, работающий с Caveman2.

У пещерного человека нет его (проблема возникла в 2011 году).

Помощники для фильтрации вводимых пользователем данных (что-то вроде htmlentities, escape-переменные для ввода запросов и т. Д.).

Ratify - это библиотека проверки ввода, однако она не интегрирована в структуру.

Совместимость с FLOSS и GNU / Linux: ✓

Прочие веб-материалы

Говоря о Интернете, в стране CL есть другие интересные библиотеки:

  • веб-серверы: Woo - это быстрый HTTP-сервер, быстрее, чем Nodejs (остерегайтесь диаграмм ...), wookie - это асинхронный http-сервер,
  • Dexador - это HTTP-клиент.
  • Пухлый, lquery и CLSS упрощают синтаксический анализ HTML и запросы к DOM.
  • cl-bootstrap предлагает ярлыки twitter-bootstrap для cl-who шаблонизатор (который заменяет Jade / Pug, хотя у нас тоже есть обычные шаблоны).

Ajax в Лиспе

(помните, с Weblocks, см. выше, они нам могут не понадобиться)

С помощью ParenScript мы можем писать JavaScript на Common Lisp без привычного рабочего процесса. , и, таким образом, мы можем использовать fetch веб-API для написания вызовов Ajax.

person Ehvince    schedule 16.03.2017

Clojure идеально подходит для этого. С помощью очень короткого и чистого кода вы можете реализовать очень сложные приложения, такие как блоги или форумы.

person Imagist    schedule 14.08.2009