it-swarm-vi.com

LISP vẫn còn hữu ích trong thế giới ngày nay? Phiên bản nào được sử dụng nhiều nhất?

Tôi cố gắng dạy cho mình một ngôn ngữ lập trình mới trong khoảng thời gian đều đặn. Gần đây, tôi đã đọc cách LISP và các phương ngữ của nó ở phía đối diện hoàn toàn của quang phổ từ các ngôn ngữ như C/C++, khiến tôi đủ tò mò để biết thêm về nó. Tuy nhiên, có hai điều không rõ ràng với tôi và tôi đang tìm hướng dẫn về chúng:

  1. LISP vẫn được thực hành/sử dụng trong thế giới ngày nay, hay nó là một ngôn ngữ kế thừa như FORTRAN/COBOL? Ý tôi là, ngoài việc duy trì mã hiện có, nó có được sử dụng cho các dự án mới không?

  2. Phương ngữ được sử dụng rộng rãi nhất là gì? Tôi đã xem qua Scheme và Common LISP với tư cách là hai phương ngữ phổ biến nhất và muốn ý kiến ​​của bạn về cái nào được ưa chuộng/hữu ích nhất để học - và sẽ vô cùng hài lòng nếu bạn có thể đề xuất bất kỳ tài nguyên nào cho người mới bắt đầu xếp hạng.

Mặc dù mong muốn học một ngôn ngữ khác về cơ bản với các ngôn ngữ thủ tục mà tôi đã từng sử dụng, tôi không muốn đầu tư công sức quá mức vào thứ gì đó nếu nó hoàn toàn lỗi thời - tôi vẫn học nó nếu nó "chết" một cách chuyên nghiệp, nhưng chỉ với một quan điểm học thuật ...

116
TCSGrad

Tôi khá thích Scheme, nếu bạn muốn làm việc với JVM, bạn nên kiểm tra Clojure, đây là một LISP được thiết kế để hoạt động trong JVM. Và vâng, LISP vẫn đáng để tìm hiểu xem thiết kế tối thiểu như vậy có thể mạnh đến mức nào! Những người tạo ra LISP có một số điều thực sự đúng. Thật đáng ngạc nhiên khi có nhiều tính năng mới thú vị của các ngôn ngữ hiện đại mà LISP đã có trong những năm 1960!

Đối với sơ đồ nhúng, hãy thử guile: http://www.gnu.org/s/guile/

59
Zachary K

Trả lời cho câu hỏi 2, "Phương ngữ được sử dụng rộng rãi nhất":

Phụ thuộc vào cách bạn diễn giải "Được sử dụng rộng rãi nhất." Dưới đây là một số phép toán khăn ăn cho giới hạn dưới về mức độ sử dụng của mỗi một số phương ngữ được chọn.

Hầu hết các mã thô được viết

  • Có thể Scheme (tất cả các phương ngữ) vì giáo dục ứng dụng [.__.]
    • 270 trường ... Hãy đoán 50 sinh viên/năm, 500 dòng mã/sinh viên, 10 năm hoạt động. 1.000.000+ dòng dựa trên toán học khăn ăn.
    • 500.000 dòng vợt trong chính vợt và các công cụ của nó.
  • Có thể LISP phổ biến vì AI và toàn bộ rất nhiều mã nguồn mở và mã sản xuất (Xem mã sản xuất). [.__.]
  • Có thể Emacs LISP vì ... [.__.]
    • Bản thân Emacs: hơn 1.000.000 dòng
    • Số lượng emacs LISP được viết công khai - 237 mô-đun, khoảng 200 dòng/mô-đun là 40.000 dòng chỉ trên EmacsWiki, có thể nhiều hơn trong ELPA
    • Cộng với các ứng dụng được viết bằng emacs LISP, tệp .emacs, v.v.
  • Clojure [.__.]
    • Khó ước tính. Chủ yếu là các dotcom nhỏ hơn. Có thể là rất nhiều.

Người chiến thắng: Lược đồ hoặc LISP chung. Quá nhiều ẩn số.

Mã 'sản xuất' nhất

Người chiến thắng: Tôi đoán LISP chung . Tôi nghĩ rằng chúng ta có thể trả lời "Có" cho câu hỏi 1 dựa trên việc sử dụng LISP và Clojure chung.

Hầu hết người dùng cuối

  • LISP thường gặp [.__.]
    • Khách hàng của ITA Software, bao gồm Orbitz, Bing Travel và kay.com - Có thể là hàng triệu người.
  • Clojure [.__.]
    • Citigroup (không có chi tiết), Akamai (không có chi tiết), Simple.com, nhiều người khác. Có lẽ là hàng triệu.
  • Kế hoạch
    • Sinh viên CS, nhà nghiên cứu và người có sở thích. Ít hơn một bazillion.
    • Chuỗi Uncharted - Hơn 5 triệ
  • Emacs LISP - Chủ yếu là các lập trình viên, chủ yếu trên các nền tảng unix. Có thể là một triệu.

Người chiến thắng: Lược đồ có giới hạn dưới tốt nhất ở đây, vì có số lượng bán hàng trên Uncharted, nhưng nó khá gây tranh cãi.

Phần kết luận

Tóm lại, tôi thấy quả táo lớn đó.

68
Jesse Millikan

LISP vẫn được thực hành/sử dụng trong thế giới ngày nay, hay nó là một ngôn ngữ kế thừa

Vâng, nó là, nhưng bạn phải biết nơi để tìm. Những người sử dụng LISP không có xu hướng hét quá to về điều đó nhưng có một số ví dụ về một vài công ty khởi nghiệp cao cấp đã sử dụng nó để đạt hiệu quả cao trong 20 năm qua. Nó cũng rất phổ biến với các công ty nhỏ ở châu Âu.

Phương ngữ được sử dụng rộng rãi nhất là gì?

Đây là một câu hỏi hợp lệ, nhưng nó không phải là một câu hỏi dễ trả lời. Nó cũng có thể không phải là một câu trả lời đặc biệt hữu ích: nhiều triển khai có trọng tâm cụ thể vì vậy được lựa chọn tốt nhất nếu chúng phù hợp với vấn đề cụ thể của bạn thay vì dựa trên mức độ được sử dụng rộng rãi. Thay vào đó, tôi sẽ cho bạn biết một chút về các lựa chọn của bạn và bạn có thể tự quyết định.

LISP là một họ ngôn ngữ và mỗi ngôn ngữ đó có một họ phương ngữ và cách triển khai. Phương ngữ rộng rơi vào hai phe "LISP" và "Scheme".

LISP: Cho đến gần đây, LISP chung là vua. Đó là một nỗ lực để thống nhất tất cả các LISP khác nhau và, mà không có ích gì, là "C++" của LISP. Điều đó có nghĩa là, đó là một ngôn ngữ KHỔNG LỒ . Nó có mọi thứ. Trong vài năm qua, Clojure đã xuất hiện. Clojure là một LISP chạy trên Java Máy ảo và cố gắng bắt nguồn từ triết lý lập trình chức năng. Theo truyền thống, các LISP khác rất đa mô hình. Clojure rất thú vị vì nó có cả rất tốt và rất tệ nhất của cả LISP và JVM. Vẫn còn rất nhiều tính dài dòng của các ngôn ngữ dựa trên Java và chúng khá tự do và dễ dàng với cú pháp nên có nhiều nút và nút cho những thứ khác nhau, nhưng chúng 'đã có một số thực sự những ý tưởng thú vị xung quanh các kiểu dữ liệu, đặc biệt là một số cách thực tế mà họ đã đưa ra để áp dụng các ý tưởng từ lập trình chức năng.

Các lược đồ: Các lược đồ là một tập hợp con nghiêm ngặt của LISP. Lược đồ được phát minh bởi Steele và Sussman và trong giai đoạn đầu đời đáng chú ý vì đã được sử dụng trong MIT Computing 101 Bài giảng. Đề án được định nghĩa trong "Báo cáo sửa đổi ^ n về Đề án ngôn ngữ thuật toán (RnRS ) "Có: họ có một trò đùa toán học ở đó. Lược đồ là ngôn ngữ được tiêu chuẩn hóa theo cách mà các LISP khác không có. Điều này giúp ích rất nhiều cho tính di động giữa các triển khai, nhưng nó không phải là viên đạn bạc. Những nỗ lực tiêu chuẩn hóa có xu hướng bảo thủ và những đổi mới trong việc triển khai, đặc biệt là xung quanh những thứ như mô-đun, có xu hướng khác nhau. Ngoài ra còn có một loạt SRFI (Yêu cầu thực hiện Đề án) tương tự như quy trình RFC của IETF. Mọi người sử dụng nó để chuẩn hóa những điều nhỏ khi cần.

Các lược đồ khác với LISP rằng chúng có một tập hợp các yêu cầu cứng mà chúng phải đáp ứng, một trong số đó là "tối ưu hóa cuộc gọi đuôi" giúp cho việc đệ quy hiệu quả. Do đó, các kiểu lập trình đệ quy phổ biến hơn nhiều trong Đề án so với LISP. Lược đồ là, cũng không phải là không tốt, như "C" của LISP. Điều đó có nghĩa là, đó là một ngôn ngữ nhỏ và bạn phải có khả năng giữ tất cả ngôn ngữ đó trong đầu.

Hiện tại có hai họ Scheme: Những người dựa trên phiên bản thứ 5 (R5RS) và những người dựa trên phiên bản thứ 6 (R6RS). Độ phức tạp của R6RS lớn hơn bất kỳ phiên bản tiền nhiệm nào và rất nhiều triển khai R5RS đã chọn bỏ qua nó, hy vọng rằng R7RS sẽ giống với R5RS hơn R6RS. Quá trình tiêu chuẩn hóa R7RS hiện đang diễn ra và đã cố gắng bao gồm cả mong muốn của người thực hiện R5RS cũng như của người dân R6RS bằng cách tiêu chuẩn hóa một ngôn ngữ cơ bản nhỏ trong nhóm làm việc đầu tiên của họ và sau đó đưa vào nhóm làm việc thứ hai để chuẩn hóa các tính năng lớn hơn. Điều này sẽ cho phép ngôn ngữ có các triển khai hiệu quả và hữu ích trên cả phần cứng nhúng nhỏ cũng như các máy có khả năng hơn.

Bây giờ tôi sẽ nói cụ thể hơn:

PicoLisp là một LISP thực sự, thực sự tuyệt vời. Thật nhỏ bé! Đó là tác giả đã viết nó cho chính mình và, theo tôi hiểu, anh ấy đã kiếm sống từ nó từ những năm 1980. Nếu bạn từng có cơ hội tham dự một buổi nói chuyện của anh ấy thì bạn nên làm điều đó: anh ấy thực sự thú vị và thực sự biết công cụ của anh ấy và bạn sẽ không nhận được dù là nhỏ nhất của bất cứ điều gì chính thống hay nhàm chán.

Tôi không quen với việc triển khai LISP thông thường nên tôi sẽ không bình luận gì thêm về chúng.

Guile là chính thức GNU Lược đồ.

Vợt là một sơ đồ R6RS nhưng gần đây nó dường như đã mở rộng mạng lưới và đang cố gắng "phục vụ như một nền tảng để tạo, thiết kế và triển khai ngôn ngữ.".

Gà nhằm mục đích trở thành một Đề án thực tế. Nó dựa trên R5RS và biên dịch xuống C. Điều này hóa ra là một lợi thế thực sự, thực sự, quan trọng vì nó khiến việc sử dụng các thư viện C hiện có trở nên tầm thường. Do đó, Chicken có lẽ là chương trình hữu ích nhất để thay thế Perl, Python, Ruby, v.v., như ngôn ngữ kịch bản hàng ngày của bạn. Có một số người đã sử dụng nó cho tất cả các nhu cầu của họ trong vài năm. Nó có tương tác REPL cũng như trình biên dịch. Cộng đồng (cả trong danh sách gửi thư và IRC) đều có kiến ​​thức, thân thiện và hữu ích.

Tìm kiếm một triển khai với nhiều mô-đun: điều này cho thấy rằng nó có thể sử dụng rộng rãi và có nghĩa là nó có khả năng sẽ có thứ gì đó giúp thực hiện nhiệm vụ trong tay.

Tìm kiếm một triển khai với trình biên dịch hoặc, ít nhất, một cái gì đó không nghiêm ngặt IDE hoặc REPL dựa. Rất nhiều triển khai được thiết kế cho giảng dạy rất khó sử dụng cho kịch bản mục đích chung.

Tôi muốn giới thiệu Gà vì đó là những gì tôi sử dụng. Tôi đã sử dụng nó trong các dự án cá nhân của mình và tôi đã sử dụng nó (và hiện đang sử dụng nó) một cách chuyên nghiệp.

Tôi không muốn đầu tư công sức quá mức vào thứ gì đó nếu nó hoàn toàn lỗi thời - tôi vẫn học nó nếu nó "chết" một cách chuyên nghiệp, nhưng chỉ với quan điểm học thuật ...

Lược đồ không chuyên nghiệp chết, nhưng bạn có thể phải đi một số thời gian để sử dụng nó trong bối cảnh đó. Một cái gì đó giống như Gà không chỉ là một mục đích học thuật và nó có thể dễ dàng bao gồm hầu hết tất cả các cơ sở của bất kỳ ngôn ngữ cấp cao nào bạn đang sử dụng.

43
andyjpb

Không thể thực sự nói cho tất cả Lisps nhưng Clojure chắc chắn là một ngôn ngữ nóng và phù hợp hiện nay. Một nhóm người dùng London Clojure tôi đã đến đầu tuần này có hơn 100 người tham dự ....

Tôi đã thấy đó là một trải nghiệm tuyệt vời khi học LISP dưới dạng Clojure trong năm qua (sau rất nhiều kinh nghiệm với Java và C #). Lý do chính cho điều này là:

  • Nó tập trung khá nhiều vào lập trình chức năng (nhiều hơn hầu hết các Lisps khác). Tác giả và BDFL Rich Hickey đã thường xuyên trích dẫn Haskell là một trong những nguồn cảm hứng của ông cho thiết kế ngôn ngữ, điều đó có nghĩa là bạn có được những thứ như cấu trúc dữ liệu hoàn toàn bất biến và chuỗi trình tự vô hạn lười biếng, v.v.
  • Lập trình siêu dữ liệu macro - triết lý "mã là dữ liệu" của LISP là khó hiểu trừ khi bạn thực sự trải nghiệm nó, nhưng đó là một trong những lý do Lisps là như vậy biểu cảm và năng suất
  • Hỗ trợ tuyệt vời cho đồng thời đa lõi - Tôi thực sự nghĩ Clojure là tốt nhất ngôn ngữ để lập trình đồng thời ngay bây giờ. Xem http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey để có bài thuyết trình khai sáng về điều này

Nó dường như cũng là một lựa chọn thực tế cho việc sử dụng sản xuất thực tế vì những lý do sau:

  • Chạy trên JVM rất dễ dàng Java interoperabilitiy cho phép bạn truy cập vào tất cả các thư viện và công cụ trong hệ sinh thái Java
  • Theo mặc định, đây là ngôn ngữ động , giúp thuận tiện cho việc phát triển và tạo mẫu nhanh mà hầu như không có bản soạn sẵn. Tuy nhiên, bạn có thể thêm gợi ý loại tĩnh để có hiệu suất khá tốt ở nơi bạn cần.

Cá nhân tôi biết những người sử dụng Clojure trong một vài ngân hàng đầu tư và khởi nghiệp. Tôi cũng đã chọn Clojure làm ngôn ngữ phát triển chính cho khởi nghiệp của riêng mình, vì vậy tôi sẵn sàng đặt tiền của mình vào nơi: -)

27
mikera

Tôi hiện đang học LISP (và tôi thích nó). Tôi sử dụng LISP chung nhưng tôi cũng đã gặp rắc rối với SBCL , Arc (lưu ý, đó là phiên bản LISP của Paul Graham, như được đề cập bởi Vitor Braga đã tạo ra Yahoo store/Viaweb) và Allegro CL tương tự như Visual Studio cho LISP (tuy nhiên, tôi chưa bao giờ sử dụng GUI).

Về việc sử dụng, LISP đã được sử dụng rất nhiều trong Trí tuệ nhân tạo nhưng tôi sẽ thành thật, tôi không chắc có bao nhiêu cách sử dụng "chung" khác cho LISP. Rất nhiều trang web được xây dựng trong LISP ban đầu đã được viết lại bằng các ngôn ngữ khác nên khó có thể nói rằng nó được sử dụng trong phát triển web (không nói là không, nhưng các trang web lớn hơn sử dụng nó không còn nữa ). Sau khi thực hiện tìm kiếm nhanh (rất nhanh), đây là danh sách các phần mềm được viết bằng Common LISP từ Wikipedia .

[EDIT] Đối với việc sử dụng LISP một cách chuyên nghiệp, có những công việc ngoài đó sẽ có bạn sử dụng LISP. Chúng không có nhiều như, nói Java hoặc C #, nhưng chúng tồn tại. Tôi nghĩ LISP là một trong những ngôn ngữ được sử dụng cho các ứng dụng nội bộ và có thể mang lại lợi thế cạnh tranh mà các công ty tặng Tôi không muốn từ bỏ bằng cách quảng cáo rằng họ sử dụng LISP. Tôi nhớ đã thấy một bài đăng trên P.SE nói rằng Smalltalk tương tự trong lĩnh vực tài chính.

Ngoài ra, việc có thể cho thấy bạn có thể học các mô hình khác nhau có thể mở ra nhiều cánh cửa hơn ngay cả khi bạn không sử dụng LISP trong công việc.

"LISP đáng để học hỏi về trải nghiệm Khai sáng sâu sắc mà bạn sẽ có khi cuối cùng bạn có được nó, trải nghiệm đó sẽ giúp bạn trở thành một lập trình viên tốt hơn trong những ngày còn lại, ngay cả khi bạn không bao giờ thực sự sử dụng chính LISP." - Eric Raymond, "Làm thế nào để trở thành một hacker"

[/BIÊN TẬP]

9
Jetti

Nếu bạn muốn học LISP ngay hôm nay, tôi sẽ xem một cây vợt, đó là một cách thực hiện sơ đồ nhanh (tốt, nó thực sự đã rời khỏi sơ đồ một chút, vì vậy bây giờ nó là phương ngữ riêng của nó) hoặc clojure, có lợi từ JVM nó chạy trên (vì vậy các thư viện có sẵn, ngoài ra bạn có thể làm cho nó tương tác với chính mình Java).

Ngay cả khi bạn không học nó để thực sự sử dụng nó, thì việc học nó vẫn luôn có lợi: bạn học những cách mới để suy nghĩ và xử lý vấn đề, ngay cả trong các ngôn ngữ khác, một khi bạn đã suy nghĩ về LISP một thời gian.

8
Fabien

Một phần quan trọng của phụ trợ Amazon đã từng có trong LISP nhưng bây giờ đã được viết lại bằng C++, hoặc tôi đã nghe (tôi phải thừa nhận rằng tôi không có nguồn đáng tin cậy cho việc này).

Yahoo! Cửa hàng là một trong những ví dụ kinh điển về ứng dụng web LISP. Từ Yahoo! Cửa hàng danh tiếng mà bạn có thể đã nghe nói về Paul Graham . Graham là một trong những người ủng hộ LISP nổi tiếng nhất và viết nhiều về chủ đề này. Bạn có thể muốn đọc trang web của anh ấy để biết điểm của anh ấy.

AutoCAD đã từng có phương ngữ LISP cho hệ thống macro của nó. Tôi không biết nếu nó vẫn còn.

Đề án là một ngôn ngữ sạch sẽ và rất thanh lịch. Có lẽ đó là ngôn ngữ lập trình yêu thích của tôi nên tôi có thể bị thiên vị. Nếu bây giờ tôi sẽ viết một ứng dụng chính thì có lẽ tôi sẽ viết một ứng dụng bộ xương bằng C, mở rộng và xác định các quy tắc kinh doanh trong Lược đồ. Điều này cho phép tôi sử dụng Scheme và tận dụng C - cho tốc độ và sự sẵn có của các thư viện cho hầu hết mọi thứ.

7
Vitor Py

LISP vẫn được thực hành/sử dụng trong thế giới ngày nay, hay nó là một ngôn ngữ kế thừa như FORTRAN/COBOL? Ý tôi là, ngoài việc duy trì mã hiện có, nó có được sử dụng cho các dự án mới không?

Tôi biết một vài người làm Lisps trong một số công ty mới khởi nghiệp ở Thung lũng Silicon và tôi biết rằng Amazon.com đã sử dụng LISP từ đầu (mặc dù tôi đã nghe nói họ thay thế nó bằng C++ vì một số lý do?)

Nhưng một công ty để mắt đến là Chó nghịch ngợm . Tất cả các trò chơi của họ được viết bằng một phương ngữ LISP. Ban đầu, họ tự lăn, nhưng họ sử dụng MZScheme trong loạt Uncharted.

Phương ngữ được sử dụng rộng rãi nhất là gì? Tôi đã xem qua Scheme và Common LISP với tư cách là hai phương ngữ phổ biến nhất và muốn ý kiến ​​của bạn về cái nào được ưa chuộng/hữu ích nhất để học - và sẽ vô cùng hài lòng nếu bạn có thể đề xuất bất kỳ tài nguyên nào cho người mới bắt đầu xếp hạng.

Tôi cá rằng LISP chung, Clojure, Scheme và Emacs LISP là bốn phương ngữ được sử dụng rộng rãi nhất và trong số đó, tôi nghi ngờ rằng Scheme là phương thức được triển khai phổ biến nhất. Tôi không có bất cứ điều gì để sao lưu điều này, tất nhiên. :)

Tôi khá thích SICP và Little Schemer, như được đề xuất bởi những người khác, nhưng tôi cũng đề nghị Vùng đất của LISP , đây là một bài đọc khá thú vị. :)

4
greyfade

Tôi nghĩ rằng nó một phần phụ thuộc vào những gì bạn muốn làm với nó - nếu bạn đang tìm hiểu sâu hơn về các khái niệm khác nhau của lập trình và biến mình thành một lập trình viên tốt hơn thì tôi sẽ nói rằng nó đáng để học ít nhất là một mô-đun LISP. Nếu bạn đang tìm kiếm một ngôn ngữ khác để thêm vào sơ yếu lý lịch của bạn để có được một công việc làm việc với ngôn ngữ này, bạn có thể muốn tìm nơi khác. Không có nhiều công việc LISP ngoài kia.

Cá nhân tôi đã thử sử dụng SBCL hoặc gần đây hơn, Clojure (và một số LISP của Emacs, nhưng htat là vì tôi là người dùng Emacs lâu dài - Tôi sẽ cố gắng học LISP của Emacs khi tôi thử học LISP). Bây giờ tất cả những gì tôi cần làm là tìm thời gian để thực sự chơi với những ngôn ngữ đó ...

2
Timo Geusch

Tôi không biết rằng có rất nhiều công việc trong LISP, tôi chắc chắn không thể nhìn thấy chúng. Nhưng tôi nhớ một thời gian dài đọc về một số thăm dò của NASA nơi họ đang chạy LISP và có thể chèn mã mới từ trái đất.

Ngoài ra ở New York, nhóm đáp ứng clojure là rất lớn. Tôi đoán rằng nếu bạn quan tâm và đến nhóm gặp gỡ clojure của bạn, bạn có thể tìm thấy cơ hội kết nối và tìm việc làm (không phải công việc clojure mà là những thứ như Java/C++/vv.). Nó dường như là rất lớn trong khu vực New York, các khu vực khác có thể thay đổi.

Ngoài ra LISP là một cách nghĩ khác. Ngoài ra, cả LISP và SQL đều dẫn đến việc sử dụng hàng tấn biểu thức lồng nhau. Tôi đã sử dụng SQL một tấn và sau đó nhận thấy LISP có ý nghĩa hơn. Nhưng nếu bạn gặp rắc rối với việc SQL quen với các dấu ngoặc đơn và biểu thức siêu lồng nhau trong khi sử dụng LISP có thể sẽ làm cho các biểu thức SQL dễ dàng hơn nhiều để tìm ra.

Một ví dụ kinh điển là cách triển khai MAX (a, b, c). Bạn có thể tạo một hàm phức tạp với một loạt các câu lệnh if. Hoặc bạn chỉ có thể nói

MAX (MAX (a, b), c)

và sử dụng hai cuộc gọi lồng nhau đơn giản của hai mục MAX, với tôi dễ đọc hơn. Mặc dù nếu hiệu suất là một vấn đề bạn cũng có thể muốn thực hiện theo cách khác, tôi không bận tâm đến việc đếm số lượng so sánh khi sử dụng mỗi phương pháp ... Ngoài ra nếu bạn đang triển khai MAX thông qua macro C hoặc phương pháp khác để đánh giá biểu thức nhiều lần bạn có thể không nhận được kết quả mong đợi vì biểu thức có thể được đánh giá nhiều lần, vì vậy hãy coi chừng các tác dụng phụ ...

2
Cervo

Hai điểm bổ sung:

Đầu tiên, LISP là một ngôn ngữ tuyệt vời để viết mã trong đó các tương tác giữa các chức năng hoặc dữ liệu thường phức tạp. Trong nhiều ngôn ngữ phổ biến, nếu bạn bối rối về lý do tại sao chương trình của bạn đang làm những gì nó đang làm, bạn phải viết các chức năng đặc biệt để cho phép bạn kiểm tra trạng thái nội bộ của chương trình khi nó diễn ra. Trong một số ngôn ngữ, sau đó bạn phải chờ mã của bạn biên dịch lại. Tất nhiên có thể có các công cụ như trình gỡ lỗi giúp với điều này. Tuy nhiên, trong LISP, tất cả những gì bạn cần là một cách để dừng chương trình, và sau đó, thông thường, bạn có quyền truy cập vào mọi thứ trong LISP. Trong Common LISP, đôi khi tôi chỉ cần gõ ^ C hoặc gọi một cuộc gọi tới error vào một chức năng duy nhất (đó là điều duy nhất phải được biên dịch lại và bạn không phải làm gì để biên dịch lại nó) . Khi tôi dừng chương trình, tôi ngay lập tức bị ném vào trình gỡ lỗi - nhưng trình gỡ lỗi cung cấp cho tôi tất cả sức mạnh của LISP và tôi có thể thoát khỏi trình gỡ lỗi, gọi các hàm cụ thể, v.v. Tôi có thể dễ dàng kiểm tra bất kỳ cấu trúc dữ liệu nào trong chương trình của tôi. Hầu hết các Đề án nên cho phép thực hành tương tự. LISP không phải là duy nhất về vấn đề này, nhưng những gì nó cung cấp vượt xa những gì nhiều ngôn ngữ phổ biến cung cấp.

Thứ hai: Nếu bạn sẽ thử nghiệm với bất kỳ phương ngữ nào của LISP, tôi sẽ không làm điều đó nếu không có (a) sử dụng trình soạn thảo khớp với dấu ngoặc đơn và (b) học cách thụt lề LISP thích hợp. Nó cũng là một ý tưởng tốt để sử dụng một trình soạn thảo sẽ gần đúng thụt lề cho bạn. Định dạng mã kiểu C/C++/Java được thiết kế cho các ngôn ngữ có ít dấu ngoặc đơn/dấu ngoặc/ngoặc hơn LISP. Phong cách in đẹp của LISP hoạt động tốt khi bạn đã quen với nó và cuối cùng bạn không bị nhầm lẫn bởi dấu ngoặc đơn hoặc lãng phí một nửa không gian của mình khi đặt một dấu ngoặc đơn đóng trên mỗi dòng.

2
Mars

Tôi muốn thêm một số quan điểm về LISP và Đề án chung. Tôi đã tránh được clojure do JVM, vì vậy tôi không có nhiều quan điểm về nó.

Scheme là một ngôn ngữ ngắn gọn súc tích, được xác định rõ. Phải mất rất nhiều quyết định mà CL phải đưa ra do di sản, và đưa ra cách tiếp cận thuần túy hơn. Chẳng hạn, các biến và hàm nằm trong cùng một không gian tên. Ngôn ngữ mặc định nhỏ hơn và ngắn gọn hơn, hoạt động tốt để dạy cho bạn các loại điều mà LISP giỏi, ví dụ, nó gây áp lực cho việc sử dụng đệ quy thay vì lặp, vì mặc định nó không có vòng lặp lặp và yêu cầu tối ưu hóa cuộc gọi đuôi . Đề án có một hệ thống vĩ mô vệ sinh rất thú vị, có nhiều giá trị để học tập. Nhưng IMO, trước tiên tôi khuyên bạn nên tìm hiểu các macro không vệ sinh kiểu CL, trong đó hầu hết các phương ngữ (?) Đề nghị cung cấp ít nhất một triển khai, ngay cả khi đó không phải là một phần của thông số kỹ thuật. Vì có vẻ như bạn rất muốn học một ngôn ngữ để học vì tôi muốn giới thiệu Scheme, vì vậy, nhiều khái niệm của nó dễ dàng được chuyển sang các ngôn ngữ khác và các ngôn ngữ động nói chung.

Phải nói rằng, cộng đồng của Scheme bị phân mảnh và ngoài một vài túi nhỏ, dường như chủ yếu dành riêng cho nghiên cứu về việc hoàn thành công việc thực sự ... Ví dụ, mọi phương ngữ đều có trình quản lý gói riêng và các gói thường không di động trên các phương ngữ, đó là một vấn đề lớn trong cộng đồng chương trình.

Mặt khác, LISP dường như là cách tiếp cận thực tế hơn nhiều để phát triển ngôn ngữ. Tiêu chuẩn là nhiều mã LISP có thể di chuyển giữa các lần triển khai, nhiều trình biên dịch nhanh và được tối ưu hóa tốt. Có một bộ lớn các gói, nhiều trong số đó là di động giữa các lần thực hiện. Và dường như một lượng lớn (tương đối) các sản phẩm thực sự đang được tạo ra bằng ngôn ngữ. Và với quicklisp, quản lý gói của nó cảm thấy hợp lý gần với những gì bạn có trong một cộng đồng hiện đại như nói Ruby, hoặc Node. CL, tuy nhiên không phải là không có sai sót, nó có một thông số rất lớn vào thời điểm này so với sơ đồ, và thậm chí đó là hệ thống đối tượng CLOS, một thứ được viết theo cách truyền thống là một thư viện trong Lisps, là một phần của IIRC spec. Và bạn có thể cảm thấy di sản cố thủ thông qua một lượng lớn hệ thống. Ví dụ, cách tiếp cận hệ thống xây dựng tiêu chuẩn của việc trích xuất một hình ảnh để biên dịch tạo cảm giác đặc biệt phức tạp.

Mặt khác, tôi đã nói rằng tôi không thể nói về clojure và Emacs LISP rõ ràng là lựa chọn phù hợp nếu mục tiêu của bạn là viết các phần mở rộng Emacs, và rõ ràng không phải là lựa chọn thích hợp cho các phần mềm khác.

TLDR; Nếu mục tiêu của bạn là học hỏi, tôi khuyên bạn nên sử dụng Đề án. Tuy nhiên, nếu bạn muốn tạo phần mềm, tôi khuyên dùng LISP chung của hai biến thể LISP chính.

1
Arelius

Ngay bây giờ tôi có ấn tượng rằng LISP chủ yếu được sử dụng trong các cửa hàng tư vấn (không phải các cửa hàng tư vấn sử dụng nó chủ yếu).

Nó được coi là một chút outre cho phần mềm thực tế. Chủ yếu là vì mọi người không quen với nó, tôi tin.

Theo truyền thống, Scheme là một phương ngữ khá hàn lâm của LISP và LISP chung là phương ngữ công nghiệp.

LISP đặc biệt hữu ích cho các thao tác tượng trưng và khả năng phản xạ-esque.

Ví dụ, mã tôi đã viết để học LISP là một chương trình xây dựng các hàm lambda ngẫu nhiên, đánh giá chúng và sau đó vận hành chúng, nhằm giảm thiểu sự khác biệt của hàm với hàm mục tiêu. Tất cả điều đó là thao túng trực tiếp. Trong một ngôn ngữ như C++ hoặc Java, tôi sẽ phải phát minh ra một đại diện cho các chức năng mà máy tính sẽ thao tác.

1
Paul Nathan

Một yếu tố khác để xem xét trong việc lựa chọn phương ngữ nào của LISP để tìm hiểu có thể là số lượng và chất lượng triển khai. Nếu một phương ngữ chỉ có một hoặc hai lần triển khai, thì bạn sẽ bị mắc kẹt với các lỗ hổng của chúng cho đến khi các lỗ hổng đó được sửa chữa và luôn có cơ hội mọi người sẽ ngừng tinh chỉnh việc thực hiện. Bản thân nó không phải là lý do để không sử dụng một phương ngữ thực hiện duy nhất của LISP, nhưng đó là điều cần tính đến. Một lợi thế của Đề án và LISP chung là có nhiều triển khai các phương ngữ này. Cả hai ngôn ngữ đều đã công bố các tiêu chuẩn, do đó, các triển khai tương đối gần đây có khả năng chạy cùng một mã, chủ yếu. Một số trong những triển khai này đã có từ lâu, nhưng vẫn đang được phát triển tích cực: Hiện tại chúng là các triển khai chất lượng cao và chúng vẫn đang được cải tiến. (Ví dụ, LISP chung của Ngân hàng thép - SBCL, được đề cập ở trên - cực kỳ nhanh. Tôi tự hỏi làm thế nào dễ dàng để tạo LISP dựa trên JVM nhanh như vậy.)

0
Mars

Tôi đã học được rất nhiều từ các câu trả lời. Cảm ơn tất cả những người đã đóng góp cho cuộc trò chuyện khai sáng này.

Tôi nên đề cập đến newLISP . Mặc dù nó khác một chút so với cả CL và Scheme, nhưng nó thực hiện rất nhiều chức năng rất hữu ích. Tôi thấy máy chủ http, chức năng đa xử lý (Cilk) và các chức năng đánh giá từ xa rất sạch sẽ và dễ sử dụng.

Việc thực thi duy nhất là nhỏ, nhanh và bao gồm rất nhiều pin mát mẻ.

0
CyberFonic