Có khả thi để phát triển web (nghiêm túc) trong Lisp không? [đóng cửa]


99

Rõ ràng là có thể viết hầu hết mọi loại ứng dụng trong hầu hết mọi ngôn ngữ lập trình, đặc biệt là trong một ngôn ngữ mạnh mẽ như Lisp (có thể là Scheme hoặc Common Lisp). Nhưng nó có thực tế để sử dụng nó để phát triển web không? Nếu vậy, đâu nên là một điểm khởi đầu tốt? Có thể tìm thấy các tài nguyên thích hợp (công cụ, thư viện, tài liệu, phương pháp hay nhất, ví dụ, v.v.) cho một dự án có tính chất này ở đâu?


2
Phụ thuộc vào những gì bạn có nghĩa là "thực tế." Có thể, có. Thực tế, có lẽ không phải cho hầu hết. Bạn có dự định lưu trữ trang web của mình không? Bạn sẽ vận hành hộp chuyên dụng của riêng mình, nơi bạn sẽ có quyền kiểm soát root? Bạn sẵn sàng bỏ ra bao nhiêu công sức?
cốt lõi

Leonardo, tôi đang tập hợp một cuốn sách về chủ đề này và muốn nhận phản hồi từ các nhà phát triển web quan tâm đến Lisp. Nếu bạn muốn, bạn có thể vui lòng cho tôi biết bạn đã nảy ra ý tưởng sử dụng Lisp như thế nào và bạn muốn thấy gì trong một cuốn sách như vậy? vsedach@gmail.com
vsedach

@chris - Gần đây tôi đã thiết lập lưu trữ Đề án cho một số dự án phụ của mình; nó dễ dàng hơn tôi nghĩ - gcbhacks.dreamhosters.com/scheme-web-apps
gcbenison

2
Hãy đọc các bài luận của Paul Graham. Tôi nghi ngờ có điều gì anh ấy đã bỏ qua trong cuộc thảo luận về việc sử dụng LISP cho các ứng dụng web, ngoài ra anh ấy còn là một nhà văn tuyệt vời. paulgraham.com/avg.html trang chủ của anh ấy là: paulgraham.com/index.html
Kelly S. French

Các bạn googlers: có nhiều câu trả lời hơn và cập nhật trong danh sách CL tuyệt vời .
Ehvince

Câu trả lời:


82

Vâng, phát triển web là một trong những thế mạnh của Common Lisp ngày nay.

  • Là một máy chủ web, hãy sử dụng Hunchentoot , trước đây được gọi là tbnl, của Tiến sĩ Edmund Weitz.

    Bạn có thể chạy nó như một back-end cho Apache bằng cách sử dụng mod_proxy làm proxy ngược hoặc như một máy chủ độc lập.

  • Có nhiều giải pháp tạo HTML khác nhau, từ các mẫu kiểu PHP đến hack macro Lisp đến XSLT. Chỉ cần chọn của bạn.

    HTML-TEMPLATE là một ví dụ.

  • C Close XML có sẵn để phân tích cú pháp XML, tuần tự hóa, XPath 1.0, XSLT 1.0. Ngoài ra còn có HTML đóng để phân tích cú pháp súp thẻ HTML.

    (Tiết lộ đầy đủ: Tôi là người duy trì C Close XML và C Close HTML.)

  • Nếu bạn muốn, Parenscript có thể làm cho trải nghiệm JavaScript của bạn trở nên khó hiểu hơn, nhưng tất nhiên, bạn cũng có thể tự viết JavaScript cũ thuần túy.

    Một giải pháp nâng cao JavaScript thú vị khác trong jwacs , được viết bằng Common Lisp và chuyển đổi JavaScript để thêm hỗ trợ tiếp tục.

  • Các dự án dịch vụ web có thể yêu cầu một máy khách HTTP ngoài máy chủ.

    Drakma là thư viện để sử dụng ngày nay.

    PURI hữu ích cho thao tác URI.

    Và còn nhiều hơn thế nữa! Một điểm khởi đầu là cliki, ví dụ cliki.net/web .

Trên web, không ai biết máy chủ của bạn được viết bằng Common Lisp :-)


1
và điều này chỉ dành cho lisp phổ biến và chỉ có một bộ công cụ ...
Attila Lendvai


1
@MattBall gâu gâu. yap. hú.
không đồng bộ hóa

Trên internet, không ai có thể nghe thấy tiếng máy chủ lisp của bạn.
kd4ttc

31

Phát triển web trong Common Lisp vừa hiệu quả vừa thú vị.

Vài ví dụ:

CL-WHO cho phép bạn viết HTML mà không quên thẻ đóng.

Weblocks cho phép bạn xác định biểu mẫu một cách khai báo với xác thực tích hợp sẵn:

(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))

Nó cũng hỗ trợ AJAX theo cách hoàn toàn tự động, trở lại liên kết bình thường nếu trình duyệt không hỗ trợ nó.

cl-prevalence là một sự thay thế cực kỳ đơn giản cho SQL.

Gần đây, khá nhiều người đang sử dụng những công nghệ này cho các ứng dụng quan trọng - với sự thành công.

Trên thực tế, hầu hết các dự án nguồn mở CL quan trọng đều có sự hỗ trợ của cộng đồng rất tốt.


19

Có một số web framework để phát triển web. Hãy xem:

Nếu bạn muốn có các công cụ lisp được hỗ trợ tốt thì bạn cần phải trả tiền cho chúng. Chỉ là không có một cộng đồng rất lớn xung quanh các công cụ nguồn mở, vì vậy họ không có cùng mức độ tài liệu / áp dụng như Django trên Python.

Dưới đây là một số sản phẩm lisp thương mại:

Cũng cần lưu ý rằng Reddit ban đầu được xây dựng bằng Lisp, nhưng các tác giả sau đó đã chuyển sang Python, với lý do là thiếu các thư viện tài liệu và được sử dụng tốt. ( liên kết )


Anh ấy nói rằng thư viện là "vấn đề lớn nhất", nhưng ngay trước đó anh ấy đã nói "reddit sẽ không chạy trên máy Mac của tôi"; vào thời điểm đó, chỉ có một CL luồng cho Mac, không thể chạy mã ổ cắm cấp thấp của chúng. Điều đó nghe có vẻ giống như ít nhất là một công cụ thỏa thuận.
Ken

3
Tôi là một người hâm mộ Lisp lớn, nó thay thế Python cho tôi. Nhưng tôi làm việc bằng C ++. Tôi có thể tìm thấy các lập trình viên Python khác, những người sẽ hiểu các nguyên mẫu Python, nhưng cho đến khi sự hồi sinh Lisp hiện tại có nhiều thành công hơn, tôi không thể sử dụng nó trong công việc nếu không có vô số câu hỏi "tại sao bạn không sử dụng Python hoặc Ruby?"
Aaron

10

Tôi không thể nói chuyện với các khung công tác khác, nhưng tôi đã rất may mắn khi sử dụng Hunchentoot cho một máy chủ web (nó hoạt động tốt tự nó hoặc bạn có thể đặt nó sau Apache ). Điều thực sự làm cho nó tỏa sáng (điều này có thể sẽ gây sốc cho một số người) là các thư viện!

  • Sử dụng CL-WHO để viết HTML dễ dàng theo cú pháp kiểu lisp
  • Parenscript cho phép bạn viết mã biên dịch sang javascript
  • Đối với kết nối cơ sở dữ liệu, sử dụng Postmodern để nói chuyện với PostgreSQL

Điều tôi thực sự thích khi sử dụng CL cho web là bạn có thể chỉnh sửa tất cả khi nó đang chạy. Bạn luôn có REPL và chạy mã máy chủ của mình, sau đó bạn có thể kết nối với REPL đó và thay đổi hoặc kiểm tra cách mã đang hoạt động, tất cả mà không cần phải dừng bất cứ điều gì. Tôi đã xác định lại các hàm trong khi trang web đang chạy, lần sau khi hàm được gọi, nó chỉ cần chọn mã mới và hoạt động.


Bạn có biết bất kỳ điều gì sẽ làm cho LISP có thể giao tiếp được với MongoDB không?
MadPhysicist 30/09/17

9

Để giúp xóa tan lầm tưởng rằng không có khung công tác web Lisp, đây là những khung công tác chưa được đề cập:

Rõ ràng là có nhiều người nghĩ rằng Lisp đủ tốt để viết nhiều khuôn khổ web.

Tôi không sử dụng hoặc xác nhận bất kỳ khuôn khổ web nào. Tôi thích xây dựng các ứng dụng web bằng cách kết hợp các công cụ trực giao với nhau (David Lichteblau đã đề cập đến một số công cụ tốt) sử dụng các mẫu thiết kế theo cách thực sự phù hợp với ứng dụng bạn đang xây dựng và đó là cách tiếp cận mà tôi khuyên dùng. Common Lisp cung cấp vô số các công cụ như vậy và khả năng kết hợp chúng chưa từng có.

Adam Petersen đã xuất bản một hướng dẫn giới thiệu tuyệt vời về cách bắt đầu xây dựng các ứng dụng web Lisp theo phong cách này vào năm ngoái:

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


8

Tôi nghĩ người ta có thể nói có mà không có nhiều rắc rối.

  1. một trong những máy chủ HTTP đầu tiên là cl-http

  2. Kế hoạch mà những người xung quanh DrScheme đã dành một khoảng thời gian đáng kể cho nó:

  3. www.franz.com chạy trên Webserver (AllegroServer) và webframework (giao dịch web) của riêng họ

  4. Nếu bạn nghi ngờ, hãy kiểm tra các gói nói ngọng phổ biến từ Edi Weitz. Chúng thường hoạt động.

Vì vậy, có một người có thể lập trình web "nghiêm túc" với Common Lisp. Về phần mình, tôi hiện chưa quyết định theo một số tuyến Common Lisp hoặc Ruby on Rails. Tôi thích cả hai hơn mọi thứ .NET ....


4

Công ty Viaweb của Paul Graham đã viết một sản phẩm trong Common Lisp mà sau đó trở thành Yahoo Shops. Rõ ràng Yahoo sau đó đã viết lại nó bằng C ++. Có khá nhiều tài nguyên web cho Lisp progamming.


1
Nếu điều đó đúng về Yahoo, một số người có thể coi đây là một thất bại của CL với tư cách là một ngôn ngữ web. Nhưng tôi sẽ coi đó là một thành công của CL với tư cách là một ngôn ngữ tạo mẫu web.
gcbenison

3
Tôi khó có thể coi việc viết lại là một thất bại, như Paul Graham đã tự nói trong phần ghi chú về Đánh bại mức trung bình: "Vào tháng 1 năm 2003, Yahoo đã phát hành một phiên bản mới của trình soạn thảo được viết bằng C ++ và Perl. Thật khó để nói liệu chương trình có phải không Tuy nhiên, còn được viết bằng Lisp, vì để dịch chương trình này sang C ++, họ thực sự phải viết một trình thông dịch Lisp: các tệp nguồn của tất cả các mẫu tạo trang, theo như tôi biết, vẫn là mã Lisp. "
protist

viaweb không được tạo nguyên mẫu bằng ngôn ngữ ngọng thông thường để viết lại bằng ngôn ngữ khác, c ++. nó được các nhà sản xuất dự định viết và chạy bằng ngôn ngữ ngọng do nhiều lý do rõ ràng khác nhau do anh ta nêu ra, ngôn ngữ mạnh mẽ, tạo mẫu nhanh, có, và sản xuất nhanh, anh ta biết ngọng rất rõ, v.v. họ chạy nó với phiên bản mà họ đã viết bằng ngọng, các phần của nó thực sự là ngọng. Sau khi tìm hiểu nó, họ có theo tin đồn đã viết lại nó, tôi không chắc. đó là sự lựa chọn của người mua lại, thậm chí có thể viết bằng chữ vbasic, hoặc pascal fortran.
sçuçu

2

Bạn có thể tìm thấy một số nội dung về công cụ cho các ứng dụng web Lisp trong câu hỏi này .

Cũng có thể đáng để nghe Stack Overflow Podcast 27 , nơi những người Reddit nói một chút về kinh nghiệm của họ khi chạy qua một trang web trên Lisp (và việc họ chuyển sang Python).


2

Ý kiến ​​khác nhau. Sự khôn ngoan chung là: Tốt hơn nên sử dụng một ngôn ngữ khác, hay đúng hơn là một ngăn xếp web khác, chẳng hạn như LAMP, .NET, Ruby on Rails, Java. Dự án web thành công nổi tiếng bằng tiếng ngọng là ViaWeb của Paul Graham . Reddit ban đầu được triển khai bằng lisp, nhưng sau đó chuyển sang python . Nếu bạn quyết định sử dụng ngọng, hãy thử cuốn sách của Seibel: Lisp thực tế .


1
Bất kỳ cơ hội nào bạn có thể thêm một ít FUD vào bài đăng của mình?
jrockway

@Yuval nói đúng. Đây là sự khôn ngoan thông thường. Reddit đã chuyển đổi. Tôi nghĩ rằng bài đăng đang hỏi liệu có sự thật nào đằng sau sự khôn ngoan thông thường đó không.
Steve Rowe

1
@jrockway và Steve Rowe - Sự khôn ngoan thông thường là có lý do. Tôi không nghĩ đây là FUD. Tôi đã không nghe nói về một trang web thành công được viết bằng LISP kể từ ViaWeb. Xin vui lòng sửa cho tôi nếu tôi sai. Tôi tin rằng ngôn ngữ lập trình nên được sử dụng theo giá trị của chúng, thay vì theo hệ tư tưởng.
Yuval F


0

Hãy xem Allegro Common Lisp. Nó có một số thư viện, bao gồm một máy chủ web, đặc biệt để phát triển web.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.