Как я могу сделать веб-программирование с помощью Lisp или схемы?
Я обычно пишу веб-приложения на PHP, Ruby или Perl. Я начинаю изучение Схемы, и я хочу попробовать веб-проект на этом языке. Но я не могу найти наилучшую среду для этого.
Я ищу следующие функции:
- Простой способ получить параметры запроса (например: get-get #key, get-post #key, get-cookie #key).
- Доступ Mysql.
- Генераторы HTML-форм, обработка, валидаторы и т.д.
- Помощники для пользовательских входных данных фильтра (что-то вроде htmlentities, escape-переменных для ввода запросов и т.д.).
- FLOSS.
- И дружественный GNU/Linux.
Итак, спасибо заранее всем ответам.
Ответы
Ответ 1
Racket содержит все, что вам нужно. См. Веб-сервер Racket учебник, а затем документация. Веб-сервер существует некоторое время, и у него много функций. Вероятно, единственное, что не включено, это интерфейс mysql, но он существует как пакет на PLaneT (инструмент распространения пакетов Racket).
UPDATE: Racket теперь поставляется с поддержкой DB, работает с несколькими БД, включая mysql.
Ответ 2
Вы можете посмотреть Clojure:
Clojure - динамический язык программирования, предназначенный для виртуальной машины Java. [...] Clojure обеспечивает легкий доступ к фреймворкам Java, с необязательными типами подсказок и выводами типа, чтобы гарантировать, что вызовы на Java могут избежать отражения.
Clojure является диалектом Lisp и делится с Lisp философией кода как данных и мощной макросистемой.
Взаимодействие с Java прямо в Clojure, поэтому вы можете повторно использовать любые существующие библиотеки Java по мере необходимости. Я уверен, что есть много полезных для веб-разработки.
clojure-contrib имеет SQL API, и есть ClojureQL, который должен охватывать ваши потребности в доступе к БД.
В разработке существует веб-инфраструктура для Clojure, называемая Compojure. Могут быть и другие.
Clojure source доступен в github под EPL. Легко запустить его в Linux; Я просто клонировал репозитории git и запускал ant
.
Ответ 3
Вы можете сделать веб-разработку с помощью схемы guile. Его стандартная библиотека включает в себя простой (sxml простой) модуль, который очень полезен для генерации, манипулирования и синтаксического анализа html. В библиотеке guile-www добавлена поддержка http, cgi и т.д. guile-dbi обеспечивает доступ к MySQL и другим базам данных. С помощью этих строительных блоков вы можете реализовать все: от простых скриптов cgi до веб-приложений со своим собственным HTTP-сервером.
Ответ 4
Попробуйте Weblocks, общую веб-инфраструктуру Lisp:
http://weblocks.viridian-project.de/
Ответ 5
Я написал довольно обширный учебник/книгу по теме: http://lispwebtales.ppenev.com/
Краткое резюме:
- Он использует Common Lisp
- Он использует инфраструктуру Restas
- В нем есть примеры почти для большинства основных веб-разработок, включая доступ к БД, аутентификацию, генерацию HTML и шаблонов.
- Поскольку документация Restas в значительной степени устарела, мой учебник является самым близким к современным документам.
- Показывает несколько более продвинутых функций, таких как политики, которые позволяют записывать подключаемые интерфейсы, например, вы можете написать слой хранилища данных и легко обращаться с образами для разных механизмов хранения, модульную систему, которая позволяет писать повторно используемые компоненты, такие как auth frameworks и тому подобное.
- Он охватывает такие вещи, как установка lisp, настройка системы сборки ASDF и диспетчера пакетов быстрого доступа и т.д.
- Он бесплатный онлайн, и как только я закончу его, он будет бесплатным и на постном пиве. Источник находится на https://github.com/pvlpenev/lispwebtales по лицензии CC, исходный код - MIT. Не все это опубликовано еще, и я сейчас пересматриваю.
Ответ 6
Это может быть то, что вы ищете.
http://www.plt-scheme.org/
http://docs.plt-scheme.org/web-server/index.html
http://common-lisp.net/project/cl-weblocks/
Ответ 7
Если вы заинтересованы в Common Lisp, чтобы быть точным и не хотите идти по маршруту weblocks, я бы рекомендовал следующую настройку:
- Используйте SBCL для Linux, но с поддержкой нескольких потоков.
- Используйте Hunchentoot как веб-сервер, который предоставит вам всю необходимую обработку сервера, включая сеансы и файлы cookie.
- Используйте ClSql для общения с MySql, у него достаточно документации и очень стабильная.
- Для поколения HTMl вы можете использовать Dr Edi Weitz Cl-WHO (очень хорошо документировано).
Примечание. Все перечисленные выше относятся к GPL или аналогичной лицензии (которая больше работает для программ Lisp).
Ответ 8
Пол Грэм (и друзья) сделал диалоги lisp специально для написания базовых веб-приложений. Он называется Arc, и вы можете получить его в arclanguage.org.
Вероятно, он не подходит для действительно больших сложных веб-сайтов, и я не уверен, в каком состоянии он поддерживает базу данных, но Пол Грэм знает как писать веб-приложения в lisp, так что Arc сделает часть HTTP/HTML легкой для вас, пока вы проводите большую часть своих циклов мозга, изучая способ lisp.
Ответ 9
Gambit Scheme имеет собственное решение для веб-приложений. Он использует структуру Spork, основанную на Black Hole (как по Per Eckerdal).
Andrew Whaley имеет начальный учебник о том, как заставить Gambit, Black Hole и Spork запускать веб-приложение под Apache с помощью mod_proxy. Вы можете взглянуть на это.
В случае (возможно) связанной заметки Gambit также скомпилирует ваши материалы на C, а затем в исполняемый файл, если вы так наклонены.
Ответ 10
Weblocks - хороший инструмент для создания веб-приложений в Common Lisp, но для меня это слишком тяжело.
Мы используем следующий стек:
-
OpenMCL (с открытым исходным кодом Lisp, очень приятно)
-
Портативный Allegroserve (веб-сервер, генератор HTML)
-
Наши собственные инструменты, подобные Rails, для работы с файлами Ajaxy (обновление: теперь это открыто, поскольку WuWei)
- Различные библиотеки CL, такие как cl-json, cl-smtp, md5
Ответ 11
Я использую свою собственную, настроенную версию Схемы, полученную из MzScheme. Он имеет новую, простую инфраструктуру веб-приложений, встроенный веб-сервер (а не тот, который поставляется с MzScheme) и библиотеки ODBC. (http://spark-scheme.wikispot.org/Web_applications). Документация не может быть исчерпывающей, поскольку это скорее личный инструмент. Но есть много примеров кода в репозиторий кода.
Ответ 12
Clojure - это диалект Lisp, который может вас заинтересовать. На данный момент есть довольно приличный стек веб-разработки. Я могу порекомендовать несколько вещей:
- Менеджер зависимостей
leiningen
, который делает, очень просто установить и управлять библиотеками, которые вы используете. Довольно хороший набор плагинов для него тоже. Там даже плагин для Clojurescript, который является языком на основе Clojure, который компилируется в Javascript.
- Абстракция HTTP-сервера
ring
. Его используют в большинстве реальных веб-фреймворков. Его довольно хорошая идея, чтобы узнать, что сначала, прежде чем перейти в реальную структуру.
-
hiccup
- это язык HTML dsl/templating, написанный в Clojure. Это очень выразительно! Напоминает мне немного Джейд, в некотором смысле.
-
composure
должен быть самой популярной веб-картой для Clojure. По существу, это библиотека маршрутизации, например express.js
.
Ответ 13
Clojure был бы идеальным для этого. С помощью очень короткого, чистого кода вы можете реализовать некоторые очень сложные приложения, такие как блоги или форумы.
Ответ 14
Посмотрим, что можно сделать с помощью Общий Lisp.
Состояние состояния общей экосистемы Lisp (2015) и Awesome Common Lisp показывает нам пару современных фреймворков (Caveman, Lucerne, все они построены на новом сервере Clack веб-приложений, интерфейс для Hunchentoot и других серверов). Позвольте обсудить наши собственные выводы.
Простой способ получить параметры запроса (например: 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.")))
Caveman way был менее понятным для меня.
Доступ Mysql
Crane - это ORM, который поддерживает MySQL, Postgre, SQLite и т.д. Он имеет автоматические миграции (что не работают с SQLite).
Caveman рекламирует интеграцию с базой данных.
Генераторы HTML-форм, обработка, валидаторы и т.д.
Я не знаю, есть ли генераторы форм. edit: есть cl-forms и formlets или снова 1forms, работая с Caveman2.
Caveman не имеет одного (вопрос поднят в 2011 году).
Помощники для пользовательских входных данных фильтра (что-то вроде htmlentities, escape-переменных для ввода запросов и т.д.).
Ratify - библиотека проверки ввода, но не интегрированная в фреймворк.
FLOSS и GNU/Linux дружественные ✓
Другие материалы в сети
Говоря о сети, есть другие приятные библиотеки в стране CL:
- веб-серверы: Woo - это быстрый HTTP-сервер, быстрее, чем Nodejs (остерегайтесь диаграмм...), wookie - это асинхронный HTTP-сервер,
- Dexador является HTTP-клиентом
- Plump, lquery и CLSS позволяют легко анализировать html и запрашивать DOM.
- cl-bootstrap предлагает ярлыки twitter-bootstrap для cl-who tempating engine (который заменяет Jade/Pug, хотя у нас также есть обычные шаблоны).
Ajax в Lisp
- Wuwei - интересный эксперимент, который позволяет писать Ajax-представления в Common Lisp. На веб-сайте есть интересные демоверсии реального мира. Он может включать в себя другие библиотеки Javascript.
- также SmackJack, поясненный в этом недавнем сообщении в блоге (2017).
- Weblocks - это старая структура для создания веб-приложений на основе ajax. Он перерабатывается с новым быстрым стартом здесь. Я буду следить за этим.