Как я могу сделать веб-программирование с помощью Lisp или Scheme?
Я обычно пишу веб-приложения на PHP, Ruby или Perl. Я начинаю изучение схемы, и я хочу попробовать какой-то веб-проект с этим языком. Но я не могу найти то, что является лучшей средой для этого.
Я ищу следующие функции:
- простой способ получить параметры запроса (что-то вроде: get-get #key, get-post #key, get-cookie #key).
- доступ к Mysql.
- HTML генераторы форм, обработка, валидаторы, так далее.
- помощники для фильтрации входных данных пользователя (что-то вроде htmlentities, escape-переменные для ввода запросов и т. д.).
- зубная нить.
- и GNU / Linux дружественные.
Итак, заранее спасибо всем ответам.
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-сервером.
Я написал довольно обширный учебник / электронную книгу по этой теме: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, я бы рекомендовал следующую настройку:
- используйте SBCL на Linux, но с поддержкой нескольких потоков
- используйте Hunchentoot в качестве веб-сервера, который предоставит вам всю необходимую серверную обработку, включая сеансы и куки-файлы
- используйте ClSql для связи с MySql он имеет достаточную документацию и очень стабилен.
- для генерации 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
(помните, что с веб-блоками, см. выше, нам может не понадобиться те)
Clojure-это шепелявый диалект, который может вас заинтересовать. На данный момент существует довольно приличный стек веб-разработки. Я могу порекомендовать несколько вещей:
- The
leiningen
менеджер зависимостей, который делает очень легко установить и Управлять библиотеками, которые вы используете. Довольно хороший набор плагинов для него тоже. Есть даже плагин для Clojurescript, который является языком, основанным на Clojure, который компилируется в Javascript.- The
ring
абстракция HTTP-сервера. Ее использовали в большинство актуальных веб-фреймворков. Его довольно хорошая идея, чтобы узнать, что сначала, прежде чем прыгать в реальной структуре.hiccup
- это язык HTML dsl / templating, написанный в Clojure. Это очень выразительно! В некотором смысле напоминает мне нефрит.composure
должен быть самый популярный веб-фреймворк для Clojure. Его по существу библиотека маршрутизации, какexpress.js
.