Як я можу робити веб-програмування за допомогою Lisp або Scheme?


77

Зазвичай я пишу веб-програми на PHP, Ruby чи Perl. Я розпочинаю вивчення схеми і хочу спробувати веб-проект з цією мовою. Але я не можу знайти найкраще середовище для цього.

Я шукаю такі особливості:

  • Простий спосіб отримати параметри запиту (щось на зразок: get-get #key, get-post #key, get-cookie #key).
  • Доступ до MySQL.
  • Генератори форм HTML, обробка, валідатори тощо.
  • Помічники для фільтрування вхідних даних користувача (щось на зразок htmlentities, захисних змінних для введення в запити тощо).
  • ФЛОС.
  • І зручний для GNU / Linux.

Отже, завчасно дякую всім відповідям.


1
Такі речі, як htmlentities, функції екранування, обгортки для запитів тощо, можуть бути приємною вправою для реалізації себе в Scheme, оскільки ви говорите, що тільки починаєте навчальну схему.
Ерцзян

Відповіді:


72

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

ОНОВЛЕННЯ: Ракетка тепер має підтримку БД, працює з кількома БД, включаючи mysql.


1
Відряджений. Інтерфейс продовження теж цікавий - не хвилюйтеся, якщо він виглядає заплутаним; решта інтерфейсу сервлета все ще працює без нього. Не знав про інтерфейс mysql, я перевірю це, дякую!
Аарон

1
Починаючи з '09 Ракет отримує вбудовану підтримку баз даних. Існує підтримка PostgreSQL, MySQL, SQLite та ODBS. Див. Docs.racket-lang.org/db/index.html
soegaard

19

Можливо, ви захочете поглянути на Clojure :

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

Клоджуре - це діалект Ліспа, який поділяє з Ліспом філософію коду як даних та потужну макросистему.

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

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

Існує веб-фреймворк для Clojure, який називається Compojure . Можуть бути й інші.

Джерело Clojure доступне на github під EPL . Запустити його на Linux легко; Я просто клоную репозиторії git і запускаю ant.


Дякую за відповідь. У мене немає досвіду роботи з Java. Чи є вимогою налаштування або використання кложуре?
Кастро

1
Я не думаю, що Java є вимогою; ти зможеш розпочати роботу з Clojure чудово.
Майк Мазур

1
Clojure працює на JVM, тому вам потрібно буде встановити його. Досвід роботи з бібліотекою класів Java, безумовно, є плюсом, коли ви вийдете за межі вбудованих типів Clojure.
wm_eddie

18

Ви можете зробити веб-розробку за допомогою схеми хитрості . Його стандартна бібліотека включає (sxml simple) модуль, який дуже корисний для генерації HTML, маніпуляцій та аналізу. Бібліотека guile-www додає підтримку http, cgi тощо. Бібліотека guile-dbi забезпечує доступ до MySQL та інших баз даних. За допомогою цих будівельних блоків ви можете реалізувати все, від простих скриптів cgi до веб-додатків за допомогою власного сервера HTTP.



10

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

Короткий підсумок:

  • Він використовує Common Lisp
  • Він використовує фреймворк Restas
  • У ньому є приклади майже для більшості основних веб-розробок, включаючи доступ до БД, автентифікацію, генерацію HTML та створення шаблонів.
  • Оскільки документація Restas майже застаріла, мій підручник - це найближче до сучасних документів.
  • Показує декілька більш досконалих функцій, таких як політики, які дозволяють писати підключаються інтерфейси, наприклад, ви можете писати рівень сховища даних та писати зворотні кінці для різних механізмів зберігання з відносною легкістю, модульна система, яка дозволяє вам писати багаторазові компоненти, такі як рамки для автентифікації та подібні речі.
  • Він охоплює такі речі, як встановлення lisp, налаштування системи збірки ASDF та менеджер пакунків швидкого списку тощо.
  • Це безкоштовно в Інтернеті, і як тільки я закінчу, це буде безкоштовно і на leanpub. Джерело знаходиться на https://github.com/pvlpenev/lispwebtales під ліцензією CC, вихідний код - MIT. Ще не всі вони опубліковані, і я переглядаю їх.


8

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

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

Зверніть увагу, що все вищезазначене підпадає під GPL або подібну ліцензію (та, яка більше працює для програм lisp)


6

Gambit Scheme має своє власне рішення і для веб-додатків. Він використовує фреймворк Spork , заснований на Чорній дірі системі модулів (обидва - від Per Eckerdal).

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

У відповідній примітці (можливо) Gambit також скомпілює ваші матеріали в C, а потім у виконуваний файл, якщо ви відчуваєте настільки схильність.


5

Пол Грехем (та друзі) зробили діалект, що говорив, спеціально для написання основних веб-додатків. Він називається Arc, і ви можете отримати його на arclanguage.org .

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


3

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

Ми використовуємо такий стек:

  • OpenMCL (з відкритим кодом Lisp, дуже приємно)

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

  • Наші власні Rails-подібні інструменти для роботи з речами Ajaxy (оновлення: тепер це відкрито, як WuWei )

  • Різноманітні бібліотеки CL, такі як cl-json, cl-smtp, md5

2

Я використовую власну, індивідуальну версію схеми, похідну від MzScheme. Він має новий, простий фреймворк веб-додатків, вбудований веб-сервер (не той, який постачається з MzScheme) та бібліотеки ODBC. ( http://spark-scheme.wikispot.org/Web_applications ). Документація може бути не вичерпною, оскільки це скоріше особистий інструмент. Але в сховищі кодів є безліч зразків коду .


2

Клоджуре - це діалект Ліс, який може вас зацікавити. На даний момент є досить пристойний стек веб-розробки. Я можу порадити кілька речей:

  • Менеджер leiningenзалежностей, який робить, дуже простий у встановленні та керуванні бібліотеками, якими ви користуєтесь. Досить гарний набір плагінів для нього теж. Існує навіть плагін для Clojurescript - мови, заснованої на Clojure, яка компілюється в Javascript.
  • ringHTTP сервер абстракції. Він використовується в більшості актуальних веб-фреймворків. Це досить гарна ідея навчитися цьому спочатку, перш ніж переходити до реальних рамок.
  • hiccup- це HTML dsl / мова шаблонів, написана мовою Clojure. Це дуже виразно! У певному сенсі мені це трохи нагадує Джейд.
  • composureмав би бути найпопулярнішим веб-фреймворком для Clojure. Це, по суті, бібліотека маршрутизації, як express.js.

2

Давайте подивимося, що можна зробити з Common Lisp .

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

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

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

оновити червень 2018 : також не пропустіть постійний перепис Weblocks, це буде величезно! : D 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 від Fukamachi).

Ви можете просто використовувати clsql або Mito ORM: https://lispcookbook.github.io/cl-cookbook/databases.html

Генератори форм HTML, обробка, валідатори тощо.

Я не знаю, чи є там генератори форм. редагувати : є:  cl-форми та анкети , або знову 1 форми , що працюють з Caveman2.

У Печерної людини його немає (питання порушено в 2011 році).

Помічники для фільтрування вхідних даних користувача (щось на зразок htmlentities, захисних змінних для введення в запити тощо).

Ratify - це бібліотека перевірки вхідних даних, яка не інтегрована у фреймворк.

FLOSS та GNU / Linux: ✓

Інші веб-матеріали

Якщо говорити про Інтернет, то в CL Land є й інші приємні бібліотеки :

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

Аякс у Ліспе

(пам’ятайте, що з Weblocks див. вище, вони можуть нам не знадобитися)

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


0

Clojure був би ідеальним для цього. За допомогою дуже короткого, чистого коду ви можете реалізувати деякі дуже складні програми, такі як блоги чи форуми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.