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


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

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

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

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

14 73

14 ответов:

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

обновление: ракетка теперь поставляется с поддержкой DB, работает с несколькими DBs в том числе и mysql.

вы можете посмотреть на Clojure:

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

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

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

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

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

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

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

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

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

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

краткое описание:

  • он использует Common Lisp
  • использует Restas рамки
  • он имеет примеры для почти большинства основных веб-разработки, в том числе доступа к БД, аутентификации, генерации HTML и шаблонов.
  • поскольку документация Restas в значительной степени устарела, мой учебник самое близкое к современным документам.
  • показывает несколько более продвинутых функций, таких как политики, которые позволяют вам писать подключаемые интерфейсы, например, вы можете написать слой хранилища данных и записывать внутренние компоненты для разных механизмов хранения с относительной легкостью, модульная система, которая позволяет вам писать многоразовые компоненты, такие как auth Framework и тому подобное.
  • он охватывает такие вещи, как установка lisp, настройка системы сборки ASDF и quicklisp менеджер пакетов и т. д.
  • это бесплатно онлайн, и как только я закончу это будет бесплатно на leanpub, а также. Источник находится на https://github.com/pvlpenev/lispwebtales под лицензией CC исходный код является MIT. Не все это опубликовано, и я в процессе пересмотра.

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

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

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

Схема Гамбит имеет собственное решение для веб-приложений. Он использует Ловилка рамки, основанные на Черная Дыра модульная система (как в Eckerdal).

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

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

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

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

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

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

  • OpenMCL (open source Lisp, очень приятно)

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

  • наши собственные рельсы, как инструменты для выполнения Ajaxy вещи (обновление: теперь это было с открытым исходным кодом, как Увэй)

  • разнообразие CL библиотеки, такие как cl-json, cl-smtp, md5

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

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

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

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

обновление июня 2018: также не пропустите текущий переписать веб-блоков, это будет огромный ! :Д http://40ants.com/weblocks/quickstart.html Weblocks позволяет создавать динамические веб-приложения, без строки 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 Фукамати и sxql).

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

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

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

Дикарь нет (вопрос поднят в 2011 году).

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

ратифицировать - это однако библиотека проверки ввода не интегрирована в структуру.

FLOSS и GNU/Linux дружественные ✓

другие веб-прочее

говоря о web, есть другие хорошие библиотеки in CL land:

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

Ajax в Lisp

(помните, что с веб-блоками, см. выше, нам может не понадобиться те)

  • Увэй это интересный эксперимент, который позволяет писать Ajax-представления в Common Lisp. На сайте есть реальные Демы. Он может включать в себя другие библиотеки Javascript.
  • и SmackJack, объяснено в этом недавнем сообщении в блоге (2017).

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

  • The leiningen менеджер зависимостей, который делает очень легко установить и Управлять библиотеками, которые вы используете. Довольно хороший набор плагинов для него тоже. Есть даже плагин для Clojurescript, который является языком, основанным на Clojure, который компилируется в Javascript.
  • The ring абстракция HTTP-сервера. Ее использовали в большинство актуальных веб-фреймворков. Его довольно хорошая идея, чтобы узнать, что сначала, прежде чем прыгать в реальной структуре.
  • hiccup - это язык HTML dsl / templating, написанный в Clojure. Это очень выразительно! В некотором смысле напоминает мне нефрит.
  • composure должен быть самый популярный веб-фреймворк для Clojure. Его по существу библиотека маршрутизации, как express.js.

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