거의 모든 프로그래밍 언어, 특히 Lisp (Scheme 또는 Common Lisp)와 같은 강력한 언어로 거의 모든 종류의 응용 프로그램을 작성할 수 있습니다. 그러나 웹 개발에 사용하는 것이 실용적입니까? 그렇다면 좋은 출발점은 무엇입니까? 이러한 성격의 프로젝트에 적합한 리소스 (도구, 라이브러리, 문서, 모범 사례, 예제 등)는 어디에서 찾을 수 있습니까?
거의 모든 프로그래밍 언어, 특히 Lisp (Scheme 또는 Common Lisp)와 같은 강력한 언어로 거의 모든 종류의 응용 프로그램을 작성할 수 있습니다. 그러나 웹 개발에 사용하는 것이 실용적입니까? 그렇다면 좋은 출발점은 무엇입니까? 이러한 성격의 프로젝트에 적합한 리소스 (도구, 라이브러리, 문서, 모범 사례, 예제 등)는 어디에서 찾을 수 있습니까?
답변:
예, 웹 개발은 오늘날 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로 작성된 것을 아무도 모릅니다. :-)
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 오픈 소스 프로젝트는 우수한 커뮤니티 지원을 제공합니다.
웹 개발을위한 웹 프레임 워크가 있습니다. 보세요 :
잘 지원되는 lisp 도구를 원한다면 비용을 지불해야합니다. 오픈 소스 도구 주변에는 큰 커뮤니티가 없기 때문에 Python의 Django와 같은 수준의 문서화 / 채택이 없습니다.
다음은 몇 가지 상업용 lisp 제품입니다.
또한 Reddit이 처음에는 Lisp로 빌드되었지만 작성자는 나중에 잘 사용되고 문서화 된 라이브러리가 부족하다는 이유로 Python으로 마이그레이션했다는 점도 주목할 가치가 있습니다. ( 링크 )
다른 프레임 워크에 대해서는 말할 수 없지만 웹 서버에 Hunchentoot 를 사용하는 것은 매우 행운입니다 (자체적으로 잘 작동하거나 Apache 뒤에 둘 수 있음 ). 실제로 그것을 빛나게 만드는 것은 (아마도 일부에게는 충격으로 올 것입니다) 도서관입니다!
웹용 CL 사용에 대해 제가 정말 좋아하는 점은 실행되는 동안 모든 것을 조정할 수 있다는 것입니다. 항상 REPL을 설정하고 서버 코드를 실행 한 다음 해당 REPL에 연결하여 코드가 작동하는 방식을 변경하거나 검사 할 수 있습니다.이 모든 작업을 중지 할 필요가 없습니다. 사이트가 실행되는 동안 함수를 재정의했습니다. 다음에 함수가 호출 될 때 새 코드를 선택하고 작동합니다.
Lisp 웹 프레임 워크가 없다는 신화를 없애기 위해 아직 언급되지 않은 프레임 워크가 있습니다.
분명히 많은 사람들이 Lisp가 많은 웹 프레임 워크를 작성하기에 충분하다고 생각하는 것 같습니다.
저는 웹 프레임 워크를 사용하거나 보증하지 않습니다. 저는 여러분이 구축하는 애플리케이션에 실제로 적합한 방식으로 디자인 패턴을 사용하여 직교 도구 (David Lichteblau가 몇 가지 좋은 도구를 언급했습니다)를 결합하여 웹 애플리케이션을 구축하는 것을 선호하며 이것이 제가 권장하는 접근 방식입니다. Common Lisp는 이러한 도구의 풍부함과이를 결합하는 탁월한 기능을 모두 제공합니다.
Adam Petersen은 작년에이 스타일로 Lisp 웹 애플리케이션을 빌드하는 방법에 대한 훌륭한 입문 자습서를 게시했습니다.
나는 많은 혼란없이 예라고 말할 수 있다고 생각합니다.
첫 번째 HTTP 서버 중 하나는 cl-http 였습니다.
DrScheme 주변의 사람들은 그 계획 에 상당한 시간을 보냈습니다.
www.franz.com은 자체 웹 서버 (AllegroServer) 및 웹 프레임 워크 (webactions)에서 실행됩니다.
확실하지 않은 경우 Edi Weitz의 common lisp 패키지를 확인하십시오. 그들은 일반적으로 작동합니다.
그렇기 때문에 Common Lisp로 "진지한"웹 프로그래밍을 할 수 있습니다. 나는 현재 Common Lisp 경로 또는 Ruby on Rails를 따르기로 결정하지 않았습니다. 나는 .NET보다 둘 다 선호한다 ....
Paul Graham의 회사 인 Viaweb 은 Common Lisp에 제품 을 작성했으며 이후 Yahoo Shops가되었습니다. 분명히 Yahoo는 이후에 C ++로 다시 작성했습니다. Lisp 프로그래밍을위한 웹 리소스가 꽤 많이 있습니다.
이 질문 에서 Lisp 웹 응용 프로그램을위한 도구에 대한 몇 가지 정보를 찾을 수 있습니다 .
Reddit 사람들이 Lisp에서 웹 사이트를 실행 한 경험 (그리고 Python으로의 전환)에 대해 이야기하는 Stack Overflow Podcast 27을 들어 보는 것도 좋습니다.
의견은 다양합니다. 일반적인 지혜는 다음과 같습니다. 다른 언어를 사용하거나 LAMP, .NET, Ruby on Rails, Java와 같은 다른 웹 스택을 사용하는 것이 좋습니다. lisp에서 잘 알려진 성공적인 웹 프로젝트는 Paul Graham의 ViaWeb이었습니다 . Reddit 은 처음에는 lisp로 구현되었지만 python으로 전환되었습니다 . lisp를 사용하기로 결정했다면 Seibel의 책 : Practical Common Lisp를 사용해보십시오 .
많은 Orbitz 가 LISP로 작성되었거나 작성된 것 같습니다 .
Allegro Common Lisp를 살펴보십시오. 웹 개발을위한 웹 서버를 포함한 일부 라이브러리가 있습니다.