Lisp 또는 Scheme으로 웹 프로그래밍을 어떻게 할 수 있습니까?


77

저는 보통 PHP, Ruby 또는 Perl로 웹 앱을 작성합니다. 저는 Scheme 연구를 시작하고 있으며이 언어로 웹 프로젝트를 시도하고 싶습니다. 그러나 이것에 가장 적합한 환경이 무엇인지 찾을 수 없습니다.

다음 기능을 찾고 있습니다.

  • 요청 매개 변수를 가져 오는 간단한 방법 (예 : get-get #key, get-post #key, get-cookie #key).
  • MySQL 액세스.
  • HTML 양식 생성기, 처리, 유효성 검사기 등
  • 사용자 입력 데이터 필터링을위한 도우미 (htmlentities, 쿼리 입력을위한 이스케이프 변수 등)
  • 풀솜.
  • 그리고 GNU / Linux 친화적입니다.

따라서 모든 답변에 미리 감사드립니다.


1
htmlentities, 이스케이프 함수, 요청에 대한 래퍼 등과 같은 것은 학습 계획을 시작한다고 말했기 때문에 Scheme에서 자신을 구현하는 좋은 연습이 될 수 있습니다.
erjiang 2009-08-14

답변:


72

라켓 에는 필요한 모든 것이 있습니다. 라켓 웹 서버를 참조하십시오 튜토리얼 다음 문서를 . 웹 서버는 한동안 사용되어 왔으며 많은 기능을 가지고 있습니다. 아마도 포함되지 않은 유일한 것은 mysql 인터페이스이지만 PLaneT (라켓 패키지 배포 도구)에 패키지 로 존재합니다 .

업데이트 : Racket은 이제 DB 지원과 함께 제공되며 mysql을 포함한 여러 DB에서 작동합니다.


1
두 번째. 연속 인터페이스도 흥미 롭습니다. 헷갈 리더라도 걱정하지 마세요. 나머지 서블릿 인터페이스는 여전히 작동합니다. mysql 인터페이스를 몰랐습니다. 확인해 보겠습니다. 감사합니다!
아론

1
'09 이후 Racket은 내장 데이터베이스 지원을 받았습니다. PostgreSQL, MySQL, SQLite 및 ODBS에 대한 지원이 있습니다. docs.racket-lang.org/db/index.html
soegaard

19

Clojure를 살펴볼 수 있습니다 .

Clojure는 Java Virtual Machine을 대상으로하는 동적 프로그래밍 언어입니다. [...] Clojure는 선택적 유형 힌트 및 유형 추론을 통해 Java 프레임 워크에 쉽게 액세스 할 수 있도록하여 Java 호출이 리플렉션을 피할 수 있도록합니다.

Clojure는 Lisp의 방언이며 데이터로서의 코드 철학과 강력한 매크로 시스템을 Lisp와 공유합니다.

Clojure에서는 Java와의 상호 운용이 간단하므로 필요에 따라 기존 Java 라이브러리를 재사용 할 수 있습니다. 웹 개발에 유용한 정보가 많이 있다고 확신합니다.

clojure-contrib 에는 SQL API가 있으며, ClojureQL 도있어 DB 액세스 요구 사항을 충족해야합니다.

Compojure 라는 Clojure 용 웹 프레임 워크가 개발 중입니다. 다른 것도있을 수 있습니다.

Clojure의 소스는 EPL 아래 github 에서 사용할 수 있습니다 . Linux에서 실행하는 것은 쉽습니다. git repos를 복제하고 .ant


답장을 보내 주셔서 감사합니다. Java에 대한 경험이 없습니다. 클로저 설정 또는 사용에 대한 요구 사항이 있습니까?
Castro

1
Java가 요구 사항이라고 생각하지 않습니다. Clojure를 잘 시작할 수 있습니다.
Mike Mazur

1
Clojure는 JVM에서 실행되므로 하나를 설치해야합니다. Java 클래스 라이브러리에 대한 경험은 Clojure의 내장 유형을 벗어나면 확실히 플러스입니다.
wm_eddie

18

guile scheme으로 웹 개발을 할 수 있습니다 . 표준 라이브러리에는 html 생성, 조작 및 구문 분석에 매우 유용한 (sxml simple) 모듈이 포함되어 있습니다. 교활-WWW의 라이브러리는 HTTP에 대한 지원, CGI 등을 추가 교활-DBI 라이브러리는 MySQL을 사용하고 다른 데이터베이스에 대한 액세스를 제공합니다. 이러한 빌딩 블록을 사용하면 간단한 cgi 스크립트에서 자체 HTTP 서버가있는 웹 애플리케이션에 이르기까지 모든 것을 구현할 수 있습니다.



10

나는 주제에 대해 꽤 광범위한 튜토리얼 / 전자 책을 썼습니다 : http://lispwebtales.ppenev.com/

요약 :

  • Common Lisp를 사용합니다.
  • Restas 프레임 워크를 사용합니다.
  • DB 액세스, 인증, HTML 생성 및 템플릿을 포함한 거의 대부분의 기본 웹 개발에 대한 예제가 있습니다.
  • Restas 문서는 거의 구식이기 때문에 내 튜토리얼은 최신 문서에 가장 가까운 것입니다.
  • 플러그인 가능한 인터페이스를 작성할 수있는 정책과 같은 몇 가지 고급 기능을 보여줍니다. 인증 프레임 워크와 같은 재사용 가능한 구성 요소를 작성합니다.
  • lisp 설치, ASDF 빌드 시스템 및 quicklisp 패키지 관리자 설정 등을 다룹니다.
  • 그것은 무료 온라인이고 내가 그것을 끝내 자마자 leanpub에서도 무료입니다. 소스는 CC 라이선스에 따라 https://github.com/pvlpenev/lispwebtales 에 있으며 소스 코드는 MIT입니다. 아직 모든 것이 게시되지는 않았으며 수정하는 중입니다.


8

Common Lisp에 관심이 있고 weblocks 경로를 따르지 않으려면 다음 설정을 권장합니다.

  1. Linux에서 SBCL을 사용하지만 다중 스레드 지원
  2. Hunchentoot를 웹 서버로 사용하여 세션 및 쿠키를 포함하여 필요한 모든 서버 처리를 제공합니다.
  3. ClSql을 사용하여 MySql과 통신하면 충분한 문서가 있으며 매우 안정적입니다.
  4. HTMl 세대의 경우 Dr Edi Weitz Cl-WHO (매우 잘 문서화 됨)를 사용할 수 있습니다.

위의 모든 내용은 GPL 또는 유사한 라이선스 (LISP 프로그램에서 더 많이 작동하는 라이선스)에 따릅니다.


6

Gambit Scheme 에는 웹 앱에 대한 자체 솔루션도 있습니다. 블랙홀 모듈 시스템 (둘 다 Per Eckerdal)을 기반으로 하는 Spork 프레임 워크를 사용합니다 .

Andrew Whaley는 mod_proxy를 사용하여 Apache에서 웹 앱을 실행하는 Gambit, Black Hole 및 Spork를 얻는 방법에 대한 초기 자습서 가 있습니다. 당신은 그것을보고 싶을 것입니다.

(아마도) 관련 메모에서 Gambit은 또한 당신이 그렇게 느끼면 C로 컴파일 한 다음 실행 파일로 컴파일합니다.


5

Paul Graham (및 친구들)은 기본 웹 애플리케이션을 작성하기 위해 특별히 lisp 방언을 만들었습니다. Arc라고 불리며 arclanguage.org 에서 얻을 수 있습니다 .

정말 크고 복잡한 웹 사이트에는 적합하지 않을 수 있으며 데이터베이스 지원 상태가 무엇인지 확실하지 않지만 Paul Graham은 lisp에서 웹 응용 프로그램을 작성하는 방법을 알고 있으므로 Arc는 대부분을 소비하는 동안 HTTP / HTML 부분을 쉽게 만들 것입니다. lisp 방식을 배우는 당신의 두뇌주기의.


3

Weblocks는 Common Lisp에서 웹 앱을 빌드하는 데 좋은 도구이지만 나에게는 너무 무겁습니다.

다음 스택을 사용합니다.

  • OpenMCL (오픈 소스 Lisp, 매우 좋음)

  • Portable Allegroserve (웹 서버, HTML 생성기)

  • Ajaxy 작업을 수행하기위한 자체 Rails와 유사한 도구 (업데이트 : 이제 WuWei 로 오픈 소스되었습니다 )

  • cl-json, cl-smtp, md5와 같은 다양한 CL 라이브러리

2

저는 MzScheme에서 파생 된 나만의 맞춤형 Scheme 버전을 사용합니다. 새롭고 간단한 웹 애플리케이션 프레임 워크, 내장 웹 서버 (MzScheme과 함께 제공되지 않음) 및 ODBC 라이브러리가 있습니다. ( http://spark-scheme.wikispot.org/Web_applications ). 이것은 개인적인 도구에 가깝기 때문에 설명서가 완전하지 않을 수 있습니다. 그러나 코드 저장소 에는 많은 샘플 코드가 있습니다.


2

Clojure는 당신이 관심을 가질만한 Lisp 방언입니다. 이 시점에서 꽤 괜찮은 웹 개발 스택이 있습니다. 몇 가지를 추천 할 수 있습니다.

  • leiningen하게 의존 관리자는 설치하고 사용하고 있는지 라이브러리를 관리하는 정말 쉽습니다. 그것에 대한 꽤 멋진 플러그인 세트도 있습니다. Javascript로 컴파일되는 Clojure 기반 언어 인 Clojurescript 용 플러그인도 있습니다.
  • ringHTTP 서버 추상화입니다. 대부분의 실제 웹 프레임 워크에서 사용됩니다. 실제 프레임 워크로 이동하기 전에 먼저 배우는 것이 좋습니다.
  • hiccupClojure로 작성된 HTML dsl / 템플릿 언어입니다. 매우 표현력이 있습니다! 어떤 의미에서 제이드를 조금 생각 나게합니다.
  • composureClojure를위한 가장 인기있는 웹 프레임 워크가되어야합니다. 본질적으로 express.js.

2

Common Lisp로 무엇을 할 수 있는지 살펴 보겠습니다 .

Common Lisp 생태계상태 (2015)Awesome Common Lisp 목록은 몇 가지 최신 프레임 워크 ( Caveman , Lucerne , 모두 새로운 Clack 웹 애플리케이션 서버, Hunchentoot 및 기타 서버용 인터페이스)에 구축되었습니다. 우리 자신의 결과에 대해 논의합시다.

업데이트 2019 : Common Lisp Cookbook에 새로운 튜토리얼 이 있습니다 : https://lispcookbook.github.io/cl-cookbook/web.html 라우팅, 템플릿 엔진, 자체 포함 바이너리 빌드, 배포 등을 다룹니다.

업데이트 : 조금 후에 Sly 또는 Emacs의 Yasnippet 제작자가 Snooze를 발견했고 Caveman보다 훨씬 더 좋은 인상을 받았습니다. 엔드 포인트를 선언하는 것은 함수를 선언하는 것과 같으므로 Caveman에서 지루했던 일부는 url 매개 변수에 액세스하는 것과 같이 Snooze에서 분명합니다. 나는 그것에 대해 많은 경험이 없지만 그것을 확인하는 것이 좋습니다.

2018 년 6 월 업데이트 : Weblocks의 지속적인 재 작성도 놓치지 마세요. 엄청날 것입니다! : D http://40ants.com/weblocks/quickstart.html Weblocks를 사용하면 앞뒤를 구분하지 않고 자바 스크립트 한 줄없이 동적 웹앱을 만들 수 있습니다. React와 같은 구성 요소 기반이지만 서버 측입니다. 작성 시점 (2018 년 6 월)에는 매우 알파이지만 진행 중이며 작동 중이며 몇 가지 간단한 웹 앱이 작동합니다.

요청 매개 변수를 가져 오는 간단한 방법 (예 : 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은 데이터베이스 통합 (Fukamachi의 Datafly 및 sxql 사용)을 광고합니다.

clsql 또는 Mito ORM을 사용할 수 있습니다 : https://lispcookbook.github.io/cl-cookbook/databases.html

HTML 양식 생성기, 처리, 유효성 검사기 등

거기에 폼 생성기가 있는지 모르겠습니다. 편집 : 거기에 :  cl-formsformlet , 또는 Caveman2 와 함께 작동하는 1forms.

원시인 에게는 하나가 없습니다 (2011 년에 제기 된 문제).

사용자 입력 데이터 필터링을위한 도우미 (htmlentities, 쿼리 입력을위한 이스케이프 변수 등)

Ratify 는 입력 유효성 검사 라이브러리이며 프레임 워크에 통합되어 있지 않습니다.

FLOSS 및 GNU / Linux 친화적 : ✓

기타 웹 자료

웹에 대해 말하면 CL 땅 에는 다른 멋진 도서관 이 있습니다 .

  • 웹 서버 : Woo 는 Nodejs보다 빠른 빠른 HTTP 서버 (차트에주의하세요…), wookie 는 비동기 http 서버입니다.
  • Dexador 는 HTTP 클라이언트입니다.
  • Plump , lqueryCLSS를 사용하면 html을 구문 분석하고 DOM을 쉽게 쿼리 할 수 ​​있습니다.
  • cl-bootstrapcl-who 템플릿 엔진에 대한 twitter-bootstrap 단축키를 제공합니다 (일반 템플릿도 있지만 Jade / Pug를 대체하는 종류).

Lisp의 Ajax

(위 블록을 사용하면 위의 내용이 필요하지 않을 수도 있습니다.)

ParenScript를 사용하면 일반적인 워크 플로를 사용하지 않고도 Common Lisp에서 JavaScript를 작성할 수 있으므로 fetch웹 API를 사용하여 Ajax 호출을 작성할 수 있습니다 .


0

Clojure는 이것에 완벽 할 것입니다. 매우 짧고 깨끗한 코드로 블로그 나 포럼과 같은 매우 복잡한 애플리케이션을 구현할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.