Bạn có sử dụng (một phương ngữ) LISP cho một ứng dụng trong thế giới thực không? Ở đâu và tại sao? [đóng cửa]


31

LISP (và các phương ngữ như Scheme, Common LISP và Clojure) đã không nhận được nhiều sự hỗ trợ của ngành mặc dù chúng là những ngôn ngữ lập trình khá tốt. (Hiện tại mặc dù có vẻ như họ đang đạt được một lực kéo).

Bây giờ, điều này không liên quan trực tiếp đến câu hỏi, mà bạn sẽ sử dụng phương ngữ LISP cho một chương trình sản xuất? Những loại chương trình và tại sao? Các cách sử dụng loại được tích hợp vào một số mã khác (ví dụ C) cũng được bao gồm, nhưng lưu ý rằng đó là những gì bạn muốn nói trong câu trả lời của bạn. Khái niệm rộng được ưa thích nhưng các ứng dụng cụ thể là okey.


6
Emacs có được tính là một ứng dụng "thế giới thực" không? gnu.org/software/emacs/emacs-lisp-intro
S. Lott

1
@ S.Lott: Vâng. Nếu bạn sử dụng elisp để tạo tiện ích mở rộng cho Emacs, thì đó là một ứng dụng của phương ngữ LISP
Anto

GNU Guile được dành cho mục đích chính xác này.

1
Mặc dù thú vị, tôi không nghĩ câu hỏi này phù hợp với trang web này nữa. Nhiều lý do: 1- quá rộng, 2- nó mời một danh sách các câu trả lời, 3- không có cách nào rõ ràng để quyết định đâu là câu trả lời "đúng", 4- quá cục bộ trong thời gian ("không nhận được nhiều sự hỗ trợ của ngành"), 5- nó mời thảo luận và tranh luận.
Andres F.

Câu trả lời:


18

Bạn có sử dụng phương ngữ LISP cho chương trình sản xuất không?

Chắc chắn rồi

Những loại chương trình và tại sao?

Lisp là một ngôn ngữ năng động mục đích chung. Ngày nay, nó có những khó khăn cơ bản giống như các ngôn ngữ động có mục đích chung khác không được Microsoft xuất bản: Chủ đề gốc, tích hợp GUI, hoạt động xác định của GC và dấu chân bộ nhớ nhỏ.

Chủ đề gốc được LispWorks và SBCL đạt được, tôi tin. Có thể là những người khác? Tôi chưa điều tra đầy đủ.

LispWorks và Franz Common Lisp - sản phẩm thương mại - tích hợp vào GUI để đạt được mức độ thành công. Không có $$ để mua chúng, tôi không biết nó hoạt động tốt như thế nào. Tôi nghi ngờ họ làm việc khá tốt ...

Một hoạt động GC xác định có thể được thực hiện (nó được thực hiện trong Java đến một mức độ thành công nào đó), nhưng tôi không biết liệu các hệ thống Lisp hiện tại (các hệ thống được duy trì) có bất kỳ mã nào để làm điều đó không.

Dấu chân bộ nhớ nhỏ tôi tin là đạt được bởi một số Lisps.

Quan điểm cơ bản của tôi là, Common Lisp đã sẵn sàng về mặt kỹ thuật để tạo ra các hệ thống sản xuất. Và nó làm .

Phần lớn các nhà phát triển bị bối rối bởi (chọn một) ngôn ngữ động, macro, dấu ngoặc đơn, thiếu IDE yêu thích, kinh nghiệm tồi ở trường đại học, không có nhiều công việc trong đó, và sau đó không sử dụng nó.

Cá nhân tôi sẽ nhảy vào xây dựng một hệ thống sản xuất chính thức ở Common Lisp từ cơ sở trong môi trường nhóm.

chỉnh sửa: Tôi đã không thực sự trả lời tại sao Lisp trái ngược với các ngôn ngữ khác.

Theo kinh nghiệm Lisp của tôi - không đáng kể, nhưng đáng kể hơn 'xin chào thế giới' - tôi đã tìm thấy ngôn ngữ cực kỳ có thể sử dụng được sau cơn đau "ngôn ngữ mới Argh" đầu tiên. Phần lớn ngôn ngữ khớp với nhau theo một cách rất đều đặn và khá rõ ràng mà tôi không thực sự tìm thấy các ngôn ngữ khác để vận hành như thế nào. Một phần của việc này là sự hợp nhất của các biểu thức và tuyên bố. Một phần của đây là kiểu dữ liệu danh sách cốt lõi. Một phần của hệ thống này là hệ thống. Một phần của hệ thống này là hệ thống vĩ mô. Đừng hiểu lầm tôi, mặc dù, có những điểm đau. Nhưng họ không đá vào mặt tôi nhiều như những điểm đau của các ngôn ngữ khác.

Một ví dụ đơn giản là thói quen danh sách dài của Python. Cách tiếp cận Python là gọi len(mysequence). Nhưng, nếu chúng ta nghĩ về nó, độ dài là một thuộc tính của một chuỗi. Vì vậy, mysequence.len()là một ý tưởng phù hợp hơn. Lisp về cơ bản loại bỏ sự phân biệt cú pháp đó. (length thing)là cả cú pháp gọi hàm và cú pháp phương thức. Tất nhiên, một số người thấy rằng bực bội và muốn sự khác biệt cú pháp. Tôi thà có sự đều đặn.

edit2: Tôi đã chuyển đổi một phần của luận án MS chạy trên máy tính để bàn thành Common Lisp và thật vui khi làm việc cho đến nay.


2
Từ những gì tôi nghe được, LISP được sử dụng trong các hệ thống sản xuất chính thức, nhưng thường chỉ để xử lý logic nhất định, dễ viết mã trong LISP hơn các ngôn ngữ khác. Trò chơi video AI và tiền xử lý dữ liệu thống kê là những ví dụ từng được trích dẫn cho tôi. Tôi đã từng có một người quản lý có câu nói "Bất kỳ hệ thống nào đủ phức tạp đều có triển khai LISP nửa khẳng định tích hợp". Một câu nói tương tự là "Bất kỳ hệ thống đầy đủ nào cũng có trình đọc email tích hợp".
Thất vọngWithFormsDesigner

4
@Frustrated: Yea, đó là Luật thứ n của Greensasta và Luật của jwz.
Paul Nathan

2
Rất nhiều trong số này được giải quyết bằng Clojure, đơn giản là nhờ được thiết kế đặc biệt để tương thích và thay thế cho Java. Nhưng tất nhiên, cũng có các triển khai Scheme và CL cho JVM (ví dụ: Kawa, ABCL).
Jörg W Mittag

4
Clojure mơ hồ gây khó chịu cho tôi vì nó là một phân mảnh khác.
Paul Nathan

phân mảnh không phải là một điều xấu. Điều thực sự khó chịu ở Clojure là thiếu các cặp chấm. Nó có thể được tính là một ngôn ngữ giống như Lisp mà không có một điều cơ bản như vậy không?
SK-logic

11

Cá nhân tôi biết những người sử dụng Lisp dưới dạng Clojure trong một vài ngân hàng đầu tư và khởi nghiệp ở London. 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: -)

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

  • Nó có một sự nhấn mạnh khá lớn vào lập trình chức năng (nhiều hơn so với 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 vĩ mô - triết lý "mã là dữ liệu" của Lisp rất 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 rất biểu cảm và hiệu quả. Về cơ bản, bạn có khả năng mở rộng ngôn ngữ để phù hợp với miền vấn đề của bạn.
  • Hỗ trợ tuyệt vời cho đồng thời đa lõi - Tôi thực sự nghĩ rằng Clojure là ngôn ngữ tốt nhất để lập trình đồng thời ngay bây giờ. Xem http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey để có một bài thuyết trình khai sáng về điều này
  • Phát triển tương tác tại REPL là một cách tuyệt vời, hiệu quả để xây dựng các ứng dụng. Nó mang đến cho bạn cảm giác thực sự về sức mạnh để tự động sửa đổi mã ứng dụng đang chạy của bạn và kiểm tra theo cấu trúc dữ liệu trực tiếp .....

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 với khả năng tương tác Java rất dễ dàng 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
  • Bạn đang chạy trên JVM, một nền tảng đã được thử nghiệm và thử nghiệm cho các ứng dụng doanh nghiệp. Clojure được hưởng lợi từ tất cả các tính năng JVM tốt đẹp như trình biên dịch GC và JIT tuyệt vời miễn phí.
  • Theo mặc định, đây là một ngôn ngữ động , giúp nó rất 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.
  • Đó là một cộng đồng thực dụng và hữu ích - loại văn hóa nơi mọi người hoàn thành công việc và trọng tâm là các giải pháp được thiết kế tốt để giải quyết các vấn đề thực sự
  • công cụ hỗ trợ trong nhiều IDE . Cá nhân tôi sử dụng Eclipse với plugin Ngược chiều kim đồng hồ (vì tôi cần tích hợp Java) nhưng có nhiều tùy chọn khác.

8

Tôi sẽ sử dụng LISP nếu đó là lựa chọn tốt nhất cho công việc. Chỉ một số điều có ảnh hưởng đến "sự lựa chọn tốt nhất":

  • hỗ trợ nhà cung cấp. Việc triển khai LISP mà chúng tôi sử dụng - nếu có sự cố xảy ra và cản trở sự phát triển của chúng tôi và do đó thời hạn của chúng tôi, nhà cung cấp có làm việc hướng tới một giải pháp với chúng tôi không?
  • hỗ trợ thư viện. Những thư viện nào có sẵn? Thao tác chuỗi, toán học, truy cập dữ liệu, dịch vụ web (hoặc tương đương LISP), bộ công cụ cửa sổ, v.v ... Tôi không muốn phải viết nội dung này từ đầu.
  • công cụ hỗ trợ - IDE tốt như thế nào? Rắn / ổn định hay bong tróc? Hỗ trợ biên tập viên tốt? Trình gỡ lỗi tích hợp? Nếu tôi cần làm GUI dev trong LISP, có IDE trực quan hay tôi phải mã hóa bố cục GUI bằng tay (tôi ghét làm điều đó).
  • nhà phát triển mua vào (tôi thực sự không muốn mất quá nhiều thời gian để dạy cho các đồng đội của mình một ngôn ngữ hoàn toàn mới)

Tất cả các yếu tố này sẽ được xem xét khi quyết định xem LISP có phù hợp với dự án hay không. Trong thế giới doanh nghiệp, tôi chưa bao giờ trải nghiệm nó.


Tôi đồng ý với bạn rằng năng suất thường bị ảnh hưởng nhiều hơn bởi các công cụ và thư viện có sẵn hơn là chính ngôn ngữ (với điều kiện ngôn ngữ cung cấp một số chức năng cơ bản).
Giorgio

6

Chắc chắn rồi. Paul Graham giải thích nó tốt .

... Quay trở lại năm 1995, chúng tôi đã biết một điều mà tôi không nghĩ rằng các đối thủ cạnh tranh của chúng tôi đã hiểu và thậm chí bây giờ ít người hiểu: khi bạn viết phần mềm chỉ phải chạy trên máy chủ của riêng bạn, bạn có thể sử dụng bất kỳ ngôn ngữ nào bạn muốn. ..

Chúng tôi đã chọn Lisp. Đối với một điều, rõ ràng là sự phát triển nhanh chóng sẽ quan trọng trong thị trường này. Tất cả chúng ta đều bắt đầu từ đầu, vì vậy một công ty có thể hoàn thành các tính năng mới trước các đối thủ cạnh tranh sẽ có lợi thế lớn. Chúng tôi biết Lisp là một ngôn ngữ thực sự tốt để viết phần mềm một cách nhanh chóng và các ứng dụng dựa trên máy chủ đã phóng to hiệu quả của sự phát triển nhanh chóng, bởi vì bạn có thể phát hành phần mềm ngay khi hoàn thành.

Nếu các công ty khác không muốn sử dụng Lisp, thì càng tốt. Nó có thể mang lại cho chúng ta một lợi thế công nghệ và chúng ta cần tất cả sự giúp đỡ để có thể ...

Vì vậy, bạn có thể nói rằng sử dụng Lisp là một thử nghiệm. Giả thuyết của chúng tôi là nếu chúng tôi viết phần mềm của mình ở Lisp, chúng tôi sẽ có thể hoàn thành các tính năng nhanh hơn so với đối thủ cạnh tranh và cũng có thể thực hiện những điều trong phần mềm mà họ không thể làm. Và vì Lisp rất cao cấp, chúng tôi sẽ không cần một đội ngũ phát triển lớn, vì vậy chi phí của chúng tôi sẽ thấp hơn. Nếu điều này là như vậy, chúng tôi có thể cung cấp một sản phẩm tốt hơn với ít tiền hơn, và vẫn kiếm được lợi nhuận. Chúng tôi cuối cùng sẽ có được tất cả người dùng, và các đối thủ của chúng tôi sẽ không nhận được ai, và cuối cùng sẽ phá sản. Dù sao đó cũng là điều chúng tôi hy vọng sẽ xảy ra.

Kết quả của thí nghiệm này là gì? Thật đáng ngạc nhiên, nó đã làm việc. Cuối cùng chúng tôi đã có nhiều đối thủ cạnh tranh, theo thứ tự từ hai mươi đến ba mươi trong số họ, nhưng không phần mềm nào của họ có thể cạnh tranh với chúng tôi. Chúng tôi đã có một người xây dựng cửa hàng trực tuyến wysiwyg chạy trên máy chủ và cảm thấy giống như một ứng dụng máy tính để bàn. Đối thủ của chúng tôi đã có kịch bản cgi. Và chúng tôi luôn đi trước họ về các tính năng. Đôi khi, trong tuyệt vọng, các đối thủ cạnh tranh sẽ cố gắng giới thiệu các tính năng mà chúng tôi không có. Nhưng với Lisp, chu kỳ phát triển của chúng tôi nhanh đến mức đôi khi chúng tôi có thể sao chép một tính năng mới trong vòng một hoặc hai ngày của một đối thủ cạnh tranh thông báo nó trong một thông cáo báo chí. Vào thời điểm các nhà báo đưa tin về thông cáo báo chí đã gọi chúng tôi, chúng tôi cũng sẽ có tính năng mới.

Dường như đối với các đối thủ của chúng ta rằng chúng ta có một loại vũ khí bí mật nào đó - rằng chúng ta đang giải mã lưu lượng Enigma của họ hoặc thứ gì đó. Thực tế chúng tôi đã có một vũ khí bí mật, nhưng nó đơn giản hơn họ tưởng. Không ai bị rò rỉ tin tức về các tính năng của họ cho chúng tôi. Chúng tôi chỉ có thể phát triển phần mềm nhanh hơn bất kỳ ai nghĩ là có thể ...


8
"... Paul Graham ban đầu viết reddit, ở mặt sau của một chiếc khăn ăn trong khi anh ta đang chờ uống cà phê. Nó mạnh đến nỗi nó phải được viết lại bằng trăn chỉ để các máy tính thông thường có thể hiểu được. Bởi vì nó được viết bằng lisp, hầu như không có nỗ lực để viết lại toàn bộ, và việc viết lại đã được hoàn thành ở giữa hai chu kỳ của bộ xử lý. Bản thân Paul Graham đã hoàn toàn viết bằng lisp, bởi một phiên bản trước đó của chính ông, cũng được viết bằng lisp, bởi phiên bản trước của lisp. Đó là lisp, paul graham, lisp, paul graham, tất cả đều đi xuống. "
John Cartwright

5

Trong đó: Emacs là một ứng dụng trong thế giới thực sử dụng LISP.

Tại sao: Đó là một cách tuyệt vời để thể hiện ánh xạ giữa tổ hợp phím và hành động. Nó được giải thích và nó nhanh và được xác định rõ và nó đơn giản.


Tôi sẽ mở rộng câu trả lời này bằng cách nói tại sao nó tốt cho việc thể hiện ánh xạ giữa ketstrokes và hành động
Anto

@Anto: Theo kinh nghiệm của tôi, Lisp thực sự dễ dàng tạo ra các bản tóm tắt mạnh mẽ có thể thể hiện rõ ràng mọi hành động bạn có thể làm trong trình chỉnh sửa theo cách rất nhất quán - sau khi sử dụng Emacs một chút, bạn có thể đoán gần như mọi thứ được thực hiện . Điều này cho phép ánh xạ bất cứ điều gì bạn có thể làm trong trình chỉnh sửa thành một nét chính, với mỗi ràng buộc trông thực sự giống với ràng buộc khác làm cho nó dễ viết hơn và dễ bảo trì hơn.
Tikhon Jelvis

4

Cả MacsymaAutocad đều dựa trên một phương ngữ của Lisp. Tôi sẽ phân loại chúng là "thế giới thực" cũng như Emacs.


Mathematica không dựa trên Lisp.
Rainer Joswig

2
AutoCAD cung cấp AutoLISP dưới dạng API nhưng nó được viết bằng mã được quản lý C ++ & .NET.
CAD bloke

1
@RainerJoswig Macsyma có lẽ có nghĩa là thay vì Mathicala.
dùng40989

2

Hoàn toàn tôi sẽ xem xét nó. Đặc biệt là đối với công việc phát triển mới có tiềm năng tính toán song song. Đó dường như là một điểm ngọt ngào cho các loại ngôn ngữ chức năng.


2

Lisp là một trong những lựa chọn tốt nhất để thực hiện trình biên dịch. Và, khi việc sử dụng DSL và eDSL ngày càng tăng, Lisp ngày càng trở nên có giá trị. Tôi đang sử dụng một phương ngữ Lisp cho tất cả các nhiệm vụ liên quan đến DSL của tôi.


0

Hiện tại tôi đang cố gắng sử dụng newLisp để thay thế cho Php trên trang web cá nhân của mình thông qua khung Dragonfly . Nếu tôi có thể tìm ra cách để Apache chơi tốt, tôi sẽ sử dụng nó (máy chủ web tích hợp hoạt động rất tốt, nhưng tôi sẽ làm việc nhiều hơn thông qua Apache). Và một khi điều đó xảy ra, tôi sẽ sử dụng newLisp bất cứ nơi nào tôi sẽ sử dụng Php, vì tôi không thích Php và tôi thích newLisp.

Ngay bây giờ, Clojure không phải là một lựa chọn tốt cho các ứng dụng Android, nhưng tôi biết mọi người đang làm việc trên đó. Vì vậy, nếu điều đó được tìm ra, đó sẽ là một nơi khác để tôi sử dụng một phương ngữ của Lisp cho các ứng dụng trong thế giới thực ... nhưng một lần nữa, điều này là do tôi không thích Java.

Nhưng thành thật mà nói, tôi thích Ruby hơn Lisp ... nhưng đây chủ yếu là vấn đề của cộng đồng và tài liệu.


0

Tôi đã triển khai một ứng dụng thương mại, độc quyền trong Common Lisp có tên Tankan chạy trên Microsoft Windows dưới dạng thực thi riêng.

Đây là một chương trình để rèn luyện bản thân để ghi nhớ các ký tự kanji Nhật Bản.

Chương trình chạy như một máy chủ HTTP nền. Việc thực thi máy chủ này và điều hướng đến các trang của nó, được điều phối bởi một ứng dụng biểu tượng khu vực thông báo hệ thống nhỏ (hay còn gọi là "Khay") mà tôi đã phát triển bằng Visual C ++.

Ứng dụng biểu tượng khay nhỏ bắt đầu, theo dõi và dừng máy chủ dựa trên Lisp và liên lạc với nó bằng các ống Win32 được gắn với đầu vào và đầu ra tiêu chuẩn của nó. Thông qua một đường ống, máy chủ Lisp thông báo cho ứng dụng biểu tượng khay của URL chính xác với số cổng bên phải và ứng dụng biểu tượng khay đó có thể khởi chạy trình duyệt thông qua API Shell để duyệt URL đó. Người dùng chỉ cần nhấp đúp vào biểu tượng để hiển thị UI.

Chương trình Lisp duy trì trong bộ nhớ của nó một trạng thái phiên khá phức tạp chứa lịch sử đầu vào của người dùng và các mối quan hệ khác nhau giữa các đối tượng khác nhau. Ký hiệu đối tượng tròn của Lisp (được bật bởi *print-circle*biến) và cách nó hoạt động trên các print-objectphương thức CLOS tùy chỉnh giúp ích rất nhiều trong việc thực hiện tính bền bỉ: người dùng có thể lưu trạng thái vào đĩa và tiếp tục nơi họ rời đi. Mọi thứ đều được lưu, bao gồm cả trạng thái của UI. Có rất nhiều cấu trúc con được chia sẻ trong biểu đồ đối tượng, cũng như các chu kỳ. Thêm vào đó, rất nhiều hành trình tĩnh không cần phải tồn tại, như nội dung của các đối tượng nhập từ điển. Với các phương thức đối tượng in tùy chỉnh ANSI Common Lisp, bạn có thể tạo các biểu diễn in cô đọng cho các đối tượng mà máy vẫn có thể đọc được,

Hầu như không có JavaScript được sử dụng trong giao diện người dùng web. Ngay cả các điều khiển để ẩn và hiển thị các phần của giao diện người dùng cũng được thực hiện bằng cách gửi biểu mẫu và hiển thị lại HTML. Do đó, mọi chi tiết của trạng thái UI đều nằm trong máy chủ và tồn tại khi người dùng lưu. Việc tạo lại HTML rất nhanh. Nó được thực hiện bởi một biểu thức backquote Lisp khổng lồ cung cấp macro tạo HTML. Mã được biên dịch bởi Clozure Common Lisp (CCL) làm cho điều này xảy ra nhanh đến mức bạn khó nhận ra rằng khi bạn nhấp vào nút [+] trên UI để mở một cái gì đó, bạn đang gửi yêu cầu đến máy chủ để tạo lại toàn bộ trang darn và không chỉ đơn giản là chạy một số JavaScript cục bộ để thay đổi mức độ hiển thị của một thành phần tài liệu cục bộ.

Chương trình ban đầu được phát triển với CLISP. Nhờ ANSI CL là ngôn ngữ chuẩn, với các triển khai tuân thủ tốt và không có quá nhiều cạm bẫy lén lút trong ngôn ngữ (hành vi "không xác định" hoặc "xác định thực hiện"), nó khá dễ dàng được chuyển sang CCL.

CLISP đã không bị bỏ rơi; nó vẫn được sử dụng để cung cấp năng lượng cho phần cuối cấp phép, sử dụng nhiều cơ sở mã chung.

Tôi đã phát triển một hệ thống cấp phép ban đầu cho chương trình, sử dụng tiền điện tử đường cong elip do thư viện IronClad cung cấp, được máy chủ cấp phép sử dụng để ký giấy phép để chứng nhận chúng. (Tôi dường như nhớ rằng mình có thể đã sử dụng chương trình dòng lệnh của OpenSSL để tạo các tham số EC cho khóa máy chủ.)

Giấy phép được đại diện như các đối tượng Lisp. Thật vinh dự cho tính di động của Lisp rằng một chương trình Windows được biên soạn bởi Clozure Common Lisp có thể tạo ra một giấy phép dựa trên biểu thức S, một chương trình CLISP chạy trên máy chủ Debian có thể điền vào trường chữ ký số bị thiếu trong đối tượng đó và gửi lại cho chương trình Windows có thể xác nhận chữ ký.

Trên máy chủ, ngoài dịch vụ cấp phép dựa trên CGI, API dòng lệnh đơn giản để quản lý giấy phép. Bạn có thể liệt kê các giấy phép, tìm các giấy phép cụ thể và chỉnh sửa các thuộc tính của chúng: chẳng hạn như chỉnh sửa ngày hết hạn của giấy phép tạm thời để cấp cho người dùng một ngoại lệ. Back-end cấp phép cũng tạo ra e-mail. Tôi đã không sử dụng bất kỳ thư viện nào để xử lý CGI ở phía máy chủ: chỉ sử dụng mã Lisp bằng tay để xử lý các biến môi trường Apache và các đối số dòng lệnh. (Mặc dù mã thư viện được sử dụng để xử lý mã hóa URL và tạo HTML.) Không có cơ sở dữ liệu nào được sử dụng để lưu trữ; các giấy phép được chuyển thành một tệp có tên licenses.lispvà đó là.


-1

Nếu ai đó trả tiền cho tôi, chắc chắn.

Có lẽ họ sẽ quan tâm nhiều hơn đến việc trả tiền cho một người biết ngôn ngữ này. Tôi chỉ chơi với elisp và lập kế hoạch một vài lần.

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.