Lisp에서 (심각한) 웹 개발을하는 것이 가능합니까? [닫은]


99

거의 모든 프로그래밍 언어, 특히 Lisp (Scheme 또는 Common Lisp)와 같은 강력한 언어로 거의 모든 종류의 응용 프로그램을 작성할 수 있습니다. 그러나 웹 개발에 사용하는 것이 실용적입니까? 그렇다면 좋은 출발점은 무엇입니까? 이러한 성격의 프로젝트에 적합한 리소스 (도구, 라이브러리, 문서, 모범 사례, 예제 등)는 어디에서 찾을 수 있습니까?


2
"실용적"이라는 의미에 따라 다릅니다. 가능합니다. 실용적이지만 대부분은 그렇지 않습니다. 사이트를 호스팅 할 계획입니까? 루트 제어 권한이있는 전용 박스를 운영 하시겠습니까? 얼마나 많은 노력을 기울이고 있습니까?
핵심

Leonardo, 저는 지금이 주제에 대한 책을 모으고 있으며 Lisp에 관심이있는 웹 개발자로부터 피드백을 받고 싶습니다. 원한다면 Lisp 사용 아이디어를 어떻게 얻었는지, 그런 책에서보고 싶은 것이 무엇인지 알려주시겠습니까? vsedach@gmail.com
vsedach 2009-04-05

@chris-최근에 내 사이드 ​​프로젝트 중 일부를 위해 Scheme 호스팅을 설정했습니다. 그것은 내가 생각했던 것보다 쉬웠다 - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison

2
Paul Graham의 에세이를 읽으십시오. 웹 애플리케이션에 LISP를 사용하는 것에 대한 논의에서 그가 놓친 것이 없는지 의심스럽고 훌륭한 작가이기도합니다. paulgraham.com/avg.html 그의 홈페이지는 : paulgraham.com/index.html
Kelly S. French

동료 Google 직원 : 멋진 CL 목록 에 더 많은 최신 답변이 있습니다.
Ehvince apr

답변:


82

예, 웹 개발은 오늘날 Common Lisp의 강점 중 하나입니다.

  • 웹 서버 로 Edmund Weitz 박사가 이전에 tbnl로 알려진 Hunchentoot를 사용하십시오 .

    mod_proxy를 역방향 프록시로 사용하거나 독립형 서버로 사용하여 Apache에 대한 백엔드로 실행할 수 있습니다.

  • PHP 스타일 템플릿에서 Lisp 매크로 해킹, XSLT에 이르기까지 다양한 HTML 생성 솔루션을 사용할 수 있습니다. 그냥 골라보세요.

    HTML-TEMPLATE 가 한 예입니다.

  • 클로저 XML 은 XML 구문 분석, 직렬화, XPath 1.0, XSLT 1.0에 사용할 수 있습니다. HTML 태그 수프 구문 분석을위한 Closure HTML도 있습니다.

    (전체 공개 : 저는 Closure XML 및 Closure HTML의 관리자입니다.)

  • 원하는 경우 Parenscript 는 JavaScript 경험을 더 멋지게 만들 수 있지만 물론 일반 JavaScript를 직접 작성할 수도 있습니다.

    Common Lisp로 작성되고 JavaScript를 변환하여 지속 지원을 추가하는 jwacs의 또 다른 멋진 JavaScript 향상 솔루션입니다 .

  • 웹 서비스 프로젝트에는 서버 외에 HTTP 클라이언트가 필요할 수 있습니다.

    Drakma 는 오늘날이를 위해 사용할 라이브러리입니다.

    PURI 는 URI 조작에 유용합니다.

    그리고 더 있습니다! 한 가지 시작점은 cliki입니다 (예 : cliki.net/web) .

웹에서는 서버가 Common Lisp로 작성된 것을 아무도 모릅니다. :-)


1
그리고 이것은 일반적인 lisp와 한 세트의 도구만을위한 것입니다 ...
Attila Lendvai


1
@MattBall 씨. 얍. 멀리서 짖다.
동기화 됨

인터넷에서 아무도 당신의 lisp 서버 비명을들을 수 없습니다.
kd4ttc

31

Common Lisp의 웹 개발은 효과적이고 재미 있습니다.

몇 가지 예 :

CL-WHO를 사용하면 닫는 태그를 다시 잊지 않고 HTML을 작성할 수 있습니다.

Weblocks를 사용하면 기본 제공 유효성 검사를 통해 선언적으로 양식을 정의 할 수 있습니다.

(defview signup (:type form :caption "Sign up")
  (username :satisfies #'valid-username)
  (password :present-as dual-password :parse-as dual-password)
  (receive-newsletter-p :present-as checkbox :parse-as predicate))

또한 완전 자동 방식으로 AJAX를 지원하여 브라우저가 지원하지 않는 경우 일반 링크로 돌아갑니다.

cl-prevalence 는 SQL에 대한 매우 간단한 대안입니다.

최근에 많은 사람들이 미션 크리티컬 애플리케이션에 이러한 기술을 성공적으로 사용하고 있습니다.

실제로 가장 중요한 CL 오픈 소스 프로젝트는 우수한 커뮤니티 지원을 제공합니다.


19

웹 개발을위한 웹 프레임 워크가 있습니다. 보세요 :

잘 지원되는 lisp 도구를 원한다면 비용을 지불해야합니다. 오픈 소스 도구 주변에는 큰 커뮤니티가 없기 때문에 Python의 Django와 같은 수준의 문서화 / 채택이 없습니다.

다음은 몇 가지 상업용 lisp 제품입니다.

또한 Reddit이 처음에는 Lisp로 빌드되었지만 작성자는 나중에 잘 사용되고 문서화 된 라이브러리가 부족하다는 이유로 Python으로 마이그레이션했다는 점도 주목할 가치가 있습니다. ( 링크 )


그는 라이브러리가 "가장 큰 문제"라고 말했지만 그 직전에 "reddit은 내 Mac에서 실행되지 않을 것"이라고 말했습니다. 당시에는 Mac 용 스레드 CL이 하나만 있었지만 저수준 소켓 코드를 실행할 수 없었습니다. 그것은 적어도 딜 브레이커만큼 들립니다.
Ken

3
나는 Lisp의 열렬한 팬이며 Python을 대신하고 있습니다. 하지만 저는 C ++로 작업합니다. 파이썬 프로토 타입을 이해할 수있는 다른 파이썬 프로그래머를 찾을 수 있지만, 현재 Lisp 부활이 더 성공할 때까지 "왜 파이썬이나 루비를 사용하지 않았습니까?"라는 끝없는 질문없이 직장에서 사용할 수 없습니다.
Aaron

10

다른 프레임 워크에 대해서는 말할 수 없지만 웹 서버에 Hunchentoot 를 사용하는 것은 매우 행운입니다 (자체적으로 잘 작동하거나 Apache 뒤에 둘 수 있음 ). 실제로 그것을 빛나게 만드는 것은 (아마도 일부에게는 충격으로 올 것입니다) 도서관입니다!

  • CL-WHO 를 사용 하여 lisp 스타일 구문으로 간편한 HTML 작성
  • Parenscript를 사용하면 자바 스크립트로 컴파일되는 코드를 작성할 수 있습니다.
  • 데이터베이스 연결의 경우 Postmodern 을 사용 하여 PostgreSQL 과 대화하십시오.

웹용 CL 사용에 대해 제가 정말 좋아하는 점은 실행되는 동안 모든 것을 조정할 수 있다는 것입니다. 항상 REPL을 설정하고 서버 코드를 실행 한 다음 해당 REPL에 연결하여 코드가 작동하는 방식을 변경하거나 검사 할 수 있습니다.이 모든 작업을 중지 할 필요가 없습니다. 사이트가 실행되는 동안 함수를 재정의했습니다. 다음에 함수가 호출 될 때 새 코드를 선택하고 작동합니다.


LISP를 MongoDB와 상호 작용할 수있게 만드는 것이 무엇인지 알고 있습니까?
MadPhysicist

9

Lisp 웹 프레임 워크가 없다는 신화를 없애기 위해 아직 언급되지 않은 프레임 워크가 있습니다.

분명히 많은 사람들이 Lisp가 많은 웹 프레임 워크를 작성하기에 충분하다고 생각하는 것 같습니다.

저는 웹 프레임 워크를 사용하거나 보증하지 않습니다. 저는 여러분이 구축하는 애플리케이션에 실제로 적합한 방식으로 디자인 패턴을 사용하여 직교 도구 (David Lichteblau가 몇 가지 좋은 도구를 언급했습니다)를 결합하여 웹 애플리케이션을 구축하는 것을 선호하며 이것이 제가 권장하는 접근 방식입니다. Common Lisp는 이러한 도구의 풍부함과이를 결합하는 탁월한 기능을 모두 제공합니다.

Adam Petersen은 작년에이 스타일로 Lisp 웹 애플리케이션을 빌드하는 방법에 대한 훌륭한 입문 자습서를 게시했습니다.

http://www.adampetersen.se/articles/lispweb.htm


8

나는 많은 혼란없이 예라고 말할 수 있다고 생각합니다.

  1. 첫 번째 HTTP 서버 중 하나는 cl-http 였습니다.

  2. DrScheme 주변의 사람들은 그 계획 에 상당한 시간을 보냈습니다.

  3. www.franz.com은 자체 웹 서버 (AllegroServer) 및 웹 프레임 워크 (webactions)에서 실행됩니다.

  4. 확실하지 않은 경우 Edi Weitz의 common lisp 패키지를 확인하십시오. 그들은 일반적으로 작동합니다.

그렇기 때문에 Common Lisp로 "진지한"웹 프로그래밍을 할 수 있습니다. 나는 현재 Common Lisp 경로 또는 Ruby on Rails를 따르기로 결정하지 않았습니다. 나는 .NET보다 둘 다 선호한다 ....


4

Paul Graham의 회사 인 Viaweb Common Lisp에 제품작성했으며 이후 Yahoo Shops가되었습니다. 분명히 Yahoo는 이후에 C ++로 다시 작성했습니다. Lisp 프로그래밍을위한 웹 리소스가 꽤 많이 있습니다.


1
그것이 야후에 대해 사실이라면, 일부는 이것을 웹 언어로서의 CL의 실패로 볼 수 있습니다. 그러나 나는 그것을 웹 프로토 타이핑 언어로서 CL의 성공으로 볼 것입니다.
gcbenison 2012

3
Paul Graham은 Beating the Averages에 대한 메모에서 자신이 다음과 같이 말했습니다. "2003 년 1 월 Yahoo는 C ++ 및 Perl로 작성된 새 버전의 편집기를 출시했습니다.이 프로그램이 실패한 것인지 여부를 말하기는 어렵습니다. 그러나이 프로그램을 C ++로 번역하려면 문자 그대로 Lisp 인터프리터를 작성해야했기 때문에 Lisp로 더 오래 작성되었습니다. 모든 페이지 생성 템플릿의 소스 파일은 제가 아는 한 Lisp 코드입니다. "
protist 2013-04-01

viaweb은 다른 언어 인 C ++로 다시 작성하기 위해 common lisp에서 프로토 타입이 아닙니다. 그것은 제작자가 그에게 말한 다양한 명백한 이유, 언어 능력, 신속, 예 프로토 타이핑 및 신속한 생산으로 인해 lisp로 작성되고 실행되도록 의도되었습니다. 그는 lisp를 매우 잘 알고 있습니다. 그들은 버전으로 실행합니다. lisp로 작성했고, 일부는 실제로 lisp로 작성되었습니다. ahooacquired 후 그들은 소문에 따라 그것을 다시 작성했습니다. 인수자의 선택이며, vbasic 또는 pascal fortran으로도 쓸 수 있습니다.
sçuçu

2

이 질문 에서 Lisp 웹 응용 프로그램을위한 도구에 대한 몇 가지 정보를 찾을 수 있습니다 .

Reddit 사람들이 Lisp에서 웹 사이트를 실행 한 경험 (그리고 Python으로의 전환)에 대해 이야기하는 Stack Overflow Podcast 27을 들어 보는 것도 좋습니다.


2

의견은 다양합니다. 일반적인 지혜는 다음과 같습니다. 다른 언어를 사용하거나 LAMP, .NET, Ruby on Rails, Java와 같은 다른 웹 스택을 사용하는 것이 좋습니다. lisp에서 잘 알려진 성공적인 웹 프로젝트는 Paul Graham의 ViaWeb이었습니다 . Reddit 은 처음에는 lisp로 구현되었지만 python으로 전환되었습니다 . lisp를 사용하기로 결정했다면 Seibel의 책 : Practical Common Lisp를 사용해보십시오 .


1
게시물에 FUD를 조금 더 추가 할 수 있습니까?
jrockway

@Yuval이 맞습니다. 이것은 일반적인 지혜입니다. Reddit이 전환했습니다. 나는 게시물이 그 일반적인 지혜 뒤에 진실이 있는지 묻고 있다고 생각합니다.
Steve Rowe

1
@jrockway와 Steve Rowe-일반적인 지혜에는 이유가 있습니다. 나는 이것이 FUD라고 생각하지 않습니다. 나는 ViaWeb 이후 LISP로 작성된 성공적인 웹 사이트에 대해 들어 본 적이 없습니다. 내가 틀렸다면 나를 바로 잡으십시오. 프로그래밍 언어는 이데올로기보다는 장점에 따라 사용해야한다고 생각합니다.
Yuval F


0

Allegro Common Lisp를 살펴보십시오. 웹 개발을위한 웹 서버를 포함한 일부 라이브러리가 있습니다.

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