2008-11-21 19 views
9

Tôi đã quyết định quay trở lại LISP (chưa sử dụng nó từ lớp AI của tôi) để có được sự thoải mái hơn với lập trình hàm nói chung, vì vậy tôi đã tải xuống Lisp In A Box (mà chúng tôi đã sử dụng trong một lớp trước) đi kèm với CLISP và Emacs.Lisp In A Box - Tại sao nó bắt đầu một máy chủ?

Khi tôi chạy nó, nó nói:

kết nối trên cổng 1617. Hãy REPL này, anh trai, và nó có thể phục vụ bạn tốt.

Cái gì? Vì vậy, tôi đã xem trang web Lisp In A Box chặt chẽ hơn và tìm thấy điều này:

SLIME là môi trường phát triển tích hợp cho Emacs giao diện với triển khai Lisp thông thường qua ổ cắm mạng. Rất nhiều thông tin về SLIME có thể được tìm thấy tại nút SLIME trên CLiki. Hướng dẫn sử dụng cho SLIME có sẵn ở định dạng PDF trực tuyến.

Tôi phần nào hiểu SLIME là gì (một số loại mở rộng cho emacs, đúng không?) Nhưng tại sao thế giới lại là trình soạn thảo văn bản bắt đầu máy chủ của riêng mình và kết nối với nó?

Trả lời

10

Ổ cắm linh hoạt hơn đường ống. Đối với một, SLIME cho phép bạn kết nối với các máy chủ Swank trên mạng, rất hữu ích cho việc thực hiện các bản sửa lỗi trực tiếp trên các máy từ xa với các quy trình chạy dài (chẳng hạn như các máy chủ web). Với điều này, tại sao bạn sẽ thêm một lớp phức tạp khác bằng cách trừu tượng hóa giao tiếp theo cách để hỗ trợ cả đường ống và ổ cắm? Nó không giống như đường ống là bất kỳ đơn giản để chương trình hơn so với ổ cắm, anyway.

+0

Slime có nghĩa là để giao tiếp với một máy chủ Swank, cho phép gỡ lỗi và vá một quá trình trực tiếp, chạy dài một cách nhanh chóng, đúng không? Điều này không nguy hiểm sao?Tôi chắc chắn sẽ không muốn chỉ viết và thực thi mã on-the-fly, trên một máy chủ web sản xuất, có khả năng gây ra tất cả để sụp đổ. – Cybis

+1

Hơn nữa, đây không phải là vấn đề bảo mật phải không? Bất kỳ ai cũng có thể kết nối với quy trình và thực thi mã LISP tùy ý. Tại sao lại không có một cơ chế xác thực/ủy quyền nào đó cho điều này, nếu đó là những gì swank có nghĩa là gì? – Cybis

+1

Tất nhiên, việc thay đổi thứ gì đó trên bay là nguy hiểm, nhưng giết chết quá trình và khởi động lại nó không phải là tốt hơn, phải không? Trong cả hai trường hợp, bạn hy vọng rằng bạn đã thử nghiệm thay đổi ở một nơi khác trước khi cam kết. :) –

11

Mục đích là để Lisp chạy song song.

Chất nhờn kết nối với phiên và sau đó bạn có thể có cùng một môi trường, định nghĩa, v.v. từ nhiều cửa sổ khác nhau (hoặc thậm chí là máy). Điều này có nghĩa là bạn có thể khởi động ứng dụng của mình và gỡ lỗi nó ngay lập tức.

Để biết thêm thông tin, hãy xem this blog.

+0

Thông thường một IDE sẽ chạy trình biên dịch/trình thông dịch bên ngoài hoặc chụp stdin và stdout để cung cấp REPL. Những gì SLIME đang làm dường như vô lý. Tại sao bất cứ ai muốn kết nối với một thông dịch viên LISP qua mạng? – Cybis

+1

Tại sao không? Tôi có thể nghĩ ra một số lý do tại sao tôi muốn kết nối với một quá trình từ xa Lisp. –

1

Bạn nhận được một REPL (đọc-đánh giá-in vòng lặp) chạy song song, để bạn có thể biên dịch và kiểm tra đoạn mã ngay lập tức từ trình soạn thảo của bạn. "Thực tế thường gặp Lisp" (tự do có sẵn trên web) có một lời giải thích tốt cho điều này, và nó là một cuốn sách rất tốt cho việc học Lisp.

2

Vâng, Slime bắt đầu quá trình Lisp để cung cấp cho bạn môi trường phát triển tích hợp. Vì vậy, bạn có thể kiểm tra và gỡ lỗi mã của bạn trên bay và cũng có thể kiểm tra các đối tượng. Tôi nghĩ kiến ​​trúc với các ổ cắm được chọn cho tính di động tốt hơn giữa các lisps khác nhau (Btw, Slime cũng hỗ trợ ClojureMIT Scheme) và OS-es (Slime cũng hoạt động trên Windows). Ngoài ra nó cho phép phát triển đa nền tảng - bạn có thể kiểm tra phần mềm của bạn trên kiến ​​trúc đích từ Emacs của bạn.

Vì vậy, tôi nghĩ rằng, quyết định này là rất tốt, bạn không nên đặt swank (Slime back-end) trên máy chủ sản xuất.

Các vấn đề liên quan