Đây là lệnh sbcl có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
SBCL - Bảng liệt kê chung của Ngân hàng Thép
MÔ TẢ
SBCL là một triển khai của ANSI Common Lisp, có tính năng gốc hiệu suất cao
trình biên dịch, các luồng gốc trên một số nền tảng, giao diện socket, cấp nguồn
trình gỡ lỗi, trình biên dịch thống kê và hơn thế nữa.
Nó là phần mềm miễn phí, hầu hết trong miền công cộng, nhưng với một số hệ thống con theo kiểu BSD
giấy phép cho phép sửa đổi và sử dụng lại miễn là cấp tín dụng. Nó được cung cấp "dưới dạng
là ", không có bảo hành dưới bất kỳ hình thức nào.
Để biết thêm thông tin về các vấn đề giấy phép, hãy xem tệp SAO CHÉP trong bản phân phối. Vì
thêm thông tin về lịch sử, hãy xem tệp CREDITS trong bản phân phối.
ĐANG CHẠY SBCL
Để chạy SBCL, hãy nhập "sbcl". Sau khi thông báo khởi động, một lời nhắc ("*") sẽ xuất hiện. Nhập Lisp
biểu thức và SBCL sẽ đọc và thực thi nó, in bất kỳ giá trị nào được trả về, cung cấp cho bạn
và đợi thông tin đầu vào tiếp theo của bạn.
$ sbcl
... [thông báo khởi động được giải thích] ...
* (+ 1 2 3)
6
* (lối ra)
Hầu hết mọi người thích chạy SBCL như một quy trình con dưới Emacs. Chế độ Emacs "Slime" cung cấp
nhiều tính năng tiện lợi, như chỉnh sửa dòng lệnh, hoàn thành tab và nhiều loại
kết hợp giữa các tệp nguồn Lisp chung và quy trình con SBCL tương tác.
Để biết thông tin về cách tạo "tệp thực thi độc lập" bằng SBCL, hãy xem
SB-EXT: SAVE-LISP-AND-DIE trong Hướng dẫn sử dụng.
COMMAND ĐƯỜNG DÂY TỔNG HỢP
Đối với việc sử dụng tương tác thông thường, không cần đối số dòng lệnh.
Để hiểu cú pháp dòng lệnh SBCL, sẽ rất hữu ích khi hiểu rằng
hệ thống bao gồm hai phần: môi trường thời gian chạy và hệ thống Lisp chung nó
hỗ trợ. Một số đối số dòng lệnh được xử lý trong quá trình khởi tạo
thời gian chạy và một số trong quá trình khởi tạo hệ thống Lisp - bất kỳ lệnh nào còn lại
đối số dòng được chuyển cho mã người dùng.
Cú pháp dòng lệnh tổng thể là:
sbcl [thời gian chạy tùy chọn] --end-runtime-options [cấp cao nhất tùy chọn] --end-toplevel-tùy chọn
[người sử dụng tùy chọn]
Cả --end-runtime-options và --end-toplevel-options đều là tùy chọn và có thể bị bỏ qua.
Chúng được thiết kế để sử dụng trong các tình huống mà bất kỳ tùy chọn dòng lệnh nào nằm dưới quyền người dùng
kiểm soát (ví dụ: trong các tệp hàng loạt): bằng cách sử dụng chúng, bạn có thể ngăn chặn các tùy chọn dành cho
chương trình đang được SBCL vô tình xử lý.
Các tùy chọn thời gian chạy được hỗ trợ là
--cốt lõi
Sử dụng tệp lõi Lisp được chỉ định thay vì mặc định. (Xem phần FILES để biết
lõi tiêu chuẩn hoặc tài liệu hệ thống cho SB-EXT: SAVE-LISP-AND-DIE để biết thông tin
về cách tạo lõi tùy chỉnh.) Lưu ý rằng nếu tệp lõi Lisp là do người dùng tạo
tệp lõi, nó có thể chạy một cấp trên cùng không chuẩn, không nhận ra tiêu chuẩn
tùy chọn cấp trên.
--kích thước không gian động
Kích thước của không gian động dành riêng khi khởi động tính bằng megabyte. Giá trị mặc định là nền tảng
phụ thuộc.
--control-stack-size
Kích thước của ngăn xếp điều khiển dành riêng cho mỗi luồng tính bằng megabyte. Giá trị mặc định là 2.
--không thông báo
Ngăn chặn việc in bất kỳ biểu ngữ hoặc thông báo thông tin nào khác khi khởi động. (Cái này
làm cho việc viết các chương trình Lisp hoạt động rõ ràng trong các đường ống Unix trở nên dễ dàng hơn. Xem thêm
các tùy chọn "--noprint" và "--disable-debugger".)
--disable-ldb
Tắt trình gỡ lỗi cấp thấp. Chỉ có hiệu lực nếu SBCL được biên dịch với LDB.
- đóng cửa trên tham nhũng
Có một số lỗi cấp thấp nguy hiểm (ví dụ: ngăn xếp điều khiển hết,
lỗi bộ nhớ) mà (hoặc của người xử lý) có thể làm hỏng hình ảnh. Theo mặc định SBCL in một
cảnh báo, sau đó cố gắng tiếp tục và xử lý lỗi trong Lisp, nhưng điều này sẽ không luôn luôn
làm việc và SBCL có thể hoạt động sai hoặc thậm chí bị treo. Với tùy chọn này, khi gặp phải
lỗi SBCL sẽ gọi ldb (nếu có và được bật) hoặc nếu không sẽ thoát.
--kịch bản
Là một tùy chọn thời gian chạy tương đương với --noinform --disable-ldb --lose-on-dirty
--end-runtime-options --script . Xem mô tả của --script dưới dạng
tùy chọn toplevel bên dưới.
--merge-core-trang
Khi có hỗ trợ nền tảng, hãy cung cấp gợi ý cho hệ điều hành giống hệt
các trang có thể được chia sẻ giữa các quá trình cho đến khi chúng được ghi vào. Điều này có thể hữu ích cho
giảm mức sử dụng bộ nhớ trên các hệ thống có nhiều quy trình SBCL bắt đầu từ tương tự
nhưng các tệp lõi được đặt tên khác hoặc từ lõi nén. Không hỗ trợ nền tảng,
không làm gì cả.
--no-merge-core-page
Đảm bảo rằng không có gợi ý chia sẻ nào được cung cấp cho hệ điều hành.
--default-merge-core-page
Hoàn nguyên chính sách gợi ý chia sẻ về mặc định: chỉ các lõi nén mới kích hoạt gợi ý.
Các lõi không nén được ánh xạ trực tiếp từ tệp lõi, thường là đủ để
đảm bảo chia sẻ.
--Cứu giúp
In một số thông tin cơ bản về SBCL, sau đó thoát.
--phiên bản
In thông tin phiên bản của SBCL, sau đó thoát.
Trong tương lai, các tùy chọn thời gian chạy có thể được thêm vào để kiểm soát hành vi, chẳng hạn như phân bổ lười biếng
ký ức.
Các tùy chọn thời gian chạy, bao gồm bất kỳ tùy chọn --end-runtime-options nào, đều bị loại bỏ khỏi
dòng lệnh trước khi logic toplevel Lisp có cơ hội nhìn thấy nó.
Các tùy chọn cấp cao nhất được hỗ trợ bởi lõi SBCL tiêu chuẩn là
--sysinit
Tải tên tệp thay vì tệp khởi tạo toàn hệ thống mặc định. (Xem PHIM
phần.)
--no-sysinit
Không tải tệp khởi tạo trên toàn hệ thống. Nếu tùy chọn này được cung cấp, --sysinit
tùy chọn bị bỏ qua.
--userinit
Tải tên tệp thay vì tệp khởi tạo người dùng mặc định. (Xem phần FILES.)
--no-userinit
Không tải tệp khởi tạo người dùng. Nếu tùy chọn này được cung cấp, tùy chọn --userinit
bị bỏ qua.
- lễ hội
Sau khi thực thi bất kỳ tệp khởi tạo nào, nhưng trước khi bắt đầu vòng lặp read-eval-print
trên đầu vào tiêu chuẩn, đọc và đánh giá lệnh được đưa ra. Nhiều hơn một - tùy chọn giá trị có thể
được sử dụng và tất cả sẽ được đọc và thực thi, theo thứ tự chúng xuất hiện trên lệnh
hàng.
--trọng tải
Điều này tương đương với --eval '(tải " ") '. Cú pháp đặc biệt nhằm mục đích
giảm đau đầu về trích dẫn khi gọi SBCL từ các tập lệnh shell.
--noprint
Thông thường, khi "vòng lặp đọc-đánh giá-in" ở cấp độ cao nhất được thực thi, hãy thực thi "read-
vòng lặp eval "thay vào đó, tức là không in lời nhắc và không lặp lại kết quả. Kết hợp với
--noinform runtime tùy chọn, điều này giúp dễ dàng hơn để viết "script" Lisp hoạt động
sạch sẽ trong đường ống Unix.
--disable-debugger
Theo mặc định, khi SBCL gặp lỗi, nó sẽ đi vào trình gỡ lỗi tích hợp, cho phép
chẩn đoán tương tác và khả năng can thiệp. Tùy chọn này vô hiệu hóa trình gỡ lỗi,
gây ra lỗi in backtrace và thay vào đó thoát với trạng thái 1 - đó là một chế độ
hoạt động phù hợp hơn cho xử lý hàng loạt. Xem Hướng dẫn sử dụng trên
SB-EXT: DISABLE-DEBUGGER để biết chi tiết.
--từ bỏ
Khi kết thúc quá trình xử lý tùy chọn cấp cao nhất, hãy thoát SBCL với mã thành công bằng XNUMX.
Lưu ý rằng tác dụng của tùy chọn này bị trì hoãn cho đến sau các tùy chọn cấp cao nhất sau
cái này.
- không tương tác
Tùy chọn này vô hiệu hóa vòng lặp đọc-đánh giá-in cho cả đặc biệt và không đặc biệt
lý do. Nó là viết tắt của --disable-debugger và --quit kết hợp với nhau và rất hữu ích
cho các mục đích sử dụng hàng loạt trong đó xử lý tùy chọn đặc biệt được ngụ ý bởi --script không được mong muốn.
--kịch bản
Ngụ ý --no-sysinit --no-userinit --disable-debugger --end-toplevel-options.
Làm cho hệ thống tải tệp được chỉ định và thoát ngay sau đó, thay vào đó
nhập vòng lặp read-eval-print. Nếu tệp bắt đầu bằng một dòng shebang, nó là
mặc kệ.
Bất kể thứ tự mà các tùy chọn cấp cao nhất xuất hiện trên dòng lệnh, thứ tự của
hành động là:
1. Trình gỡ lỗi bị vô hiệu hóa, nếu được yêu cầu.
2. Bất kỳ tệp khởi tạo hệ thống nào cũng được tải, trừ khi bị cấm.
3. Bất kỳ tệp khởi tạo người dùng nào cũng được tải, trừ khi bị cấm.
4. Tùy chọn --eval và --load được xử lý theo thứ tự đã cho.
Cuối cùng, vòng lặp read-eval-print được nhập hoặc tệp được chỉ định bằng --script
tùy chọn được tải.
Khi chạy trong vòng lặp đọc-đánh giá-in, hệ thống sẽ thoát ở cuối tệp. Tương tự,
hệ thống thoát ngay sau khi xử lý tệp được chỉ định bằng --script.
Lưu ý rằng khi chạy SBCL với tùy chọn --core, sử dụng tệp lõi do người dùng tạo
gọi đến SB-EXT: SAVE-LISP-AND-DIE, các tùy chọn cấp trên có thể nằm dưới sự kiểm soát của
mã người dùng được chuyển làm đối số cho SB-EXT: SAVE-LISP-AND-DIE. Với mục đích này,
--end-toplevel-options option bản thân nó có thể được coi là một tùy chọn toplevel, tức là người dùng
lõi, theo tùy chọn của nó, có thể không hỗ trợ nó.
Trong trình tự khởi động SBCL tiêu chuẩn (tức là không liên quan đến lõi người dùng) tùy chọn cấp trên
và bất kỳ tùy chọn --end-toplevel-options nào đều bị loại bỏ khỏi danh sách đối số dòng lệnh
trước khi mã người dùng có cơ hội nhìn thấy nó.
TỔNG QUAN
SBCL có nguồn gốc từ CMU CL. (Tên nhằm xác nhận kết nối:
thép và ngân hàng là những ngành mà Carnegie và Mellon kiếm được nhiều tiền.)
Biên dịch SBCL theo mặc định: ngay cả các hàm được nhập trong vòng lặp đọc-đánh giá-in cũng được biên dịch
sang mã gốc, trừ khi trình đánh giá đã được bật rõ ràng. (Thậm chí ngày nay, khoảng 30
nhiều năm sau trình biên dịch MacLisp, mọi người sẽ nói với bạn rằng Lisp là một
ngôn ngữ. Bỏ qua chúng.)
SBCL hướng tới nhưng chưa hoàn toàn đạt được sự tuân thủ với tiêu chuẩn ANSI về Chung
Lisp. Thông tin thêm về điều này có sẵn trong phần BUGS bên dưới.
SBCL cũng bao gồm các phần mở rộng không phải ANSI khác nhau, được mô tả đầy đủ hơn trong Hướng dẫn sử dụng.
Một số trong số này nằm trong hệ thống cơ sở và những người khác là mô-đun "đóng góp" được tải theo yêu cầu
sử dụng YÊU CẦU. Ví dụ: để tải mô-đun SB-BSD-SOCKETS cung cấp TCP / IP
kết nối,
* (yêu cầu 'asdf)
* (request 'sb-bsd-sockets)
Để biết thêm thông tin, hãy xem Hướng dẫn sử dụng.
CÁC MÁY LỌC
SBCL kế thừa từ CMU CL trình biên dịch mã gốc "Python". (Mặc dù chúng tôi thường tránh điều đó
tên để tránh nhầm lẫn với ngôn ngữ kịch bản cũng được gọi là Python.)
trình biên dịch rất thông minh về việc hiểu hệ thống kiểu của Common Lisp và sử dụng nó để
tối ưu hóa mã và về việc tạo ghi chú để cho người dùng biết khi trình biên dịch không
có đủ thông tin về loại để tạo ra mã hiệu quả. Nó cũng cố gắng (hầu như luôn luôn
thành công) để tuân theo nguyên tắc bất thường nhưng rất hữu ích rằng "khai báo là
khẳng định ", tức là khai báo kiểu nên được kiểm tra trong thời gian chạy trừ khi người dùng
nói rõ ràng với hệ thống rằng tốc độ quan trọng hơn an toàn.
Mã đã biên dịch sử dụng bộ thu gom rác để tự động quản lý bộ nhớ. Rác
việc triển khai bộ thu khác nhau đáng kể từ CPU này sang CPU khác. Đặc biệt, trên một số CPU
GC gần như chính xác, trong khi trên những người khác, nó bảo thủ hơn và trên một số CPU, GC là
thế hệ, trong khi các chiến lược sao chép và dừng đơn giản hơn được sử dụng.
Để biết thêm thông tin về trình biên dịch, hãy xem hướng dẫn sử dụng.
WELFARE YÊU CẦU
SBCL hiện đang chạy trên X86 (Linux, FreeBSD, OpenBSD và NetBSD), X86-64 (Linux), Alpha
(Linux, Tru64), PPC (Linux, Darwin / MacOS X), SPARC (Linux và Solaris 2.x) và MIPS
(Linux). Để biết thông tin về các cổng khác đang diễn ra và khả thi, hãy xem thư sbcl-devel
danh sách và / hoặc trang web.
SBCL yêu cầu theo thứ tự RAM 16Mb để chạy trên các hệ thống X86, mặc dù tất cả, trừ loại nhỏ nhất
các chương trình sẽ hạnh phúc hơn với 32Mb trở lên.
Được biết đến GIỎI
Phần này cố gắng liệt kê các lỗi nghiêm trọng và lâu đời nhất. Để biết thêm chi tiết
và thông tin hiện tại về lỗi, hãy xem tệp BUGS trong bản phân phối.
Có thể gặp rắc rối sâu sắc do cạn kiệt bộ nhớ đống. Hệ thống SBCL
thừa bộ nhớ khi khởi động, do đó, trên các Unix-bí danh điển hình như Linux và FreeBSD, điều này
có nghĩa là nếu hệ thống SBCL sử dụng nhiều bộ nhớ ảo hơn hệ thống có
có sẵn cho nó, các quy trình khác có xu hướng bị giết một cách ngẫu nhiên (!).
Việc xử lý của trình biên dịch đối với các giá trị trả về của hàm vi phạm một cách không cần thiết "các khai báo
là khẳng định "nguyên tắc mà nó tuân thủ. Sử dụng PROCLAIM hoặc DECLAIM để
chỉ định kiểu trả về của một hàm khiến trình biên dịch tin bạn mà không cần kiểm tra.
Do đó, biên dịch một tệp có chứa
(KHAI BÁO (FTYPE (FUNCTION (T) NULL) SOMETIMES))
(DEFUN THÔI KHI (X) (ODDP X))
(DEFUN FOO (X) (NẾU (SOMETIMES X) 'LẦN NÀY' KHÔNG PHẢI LÚC NÀY))
sau đó chạy (FOO 1) cho ra KHÔNG PHẢI LÀ LÚC NÀY, bởi vì trình biên dịch dựa trên sự thật của
KHAI BÁO mà không cần kiểm tra nó.
Một số việc được thực hiện rất kém hiệu quả.
- Mảng nhiều chiều hoạt động kém hiệu quả, đặc biệt là mảng nhiều chiều nổi
số điểm.
- SBCL, giống như hầu hết (có thể là tất cả?) Triển khai Common Lisp trên phần cứng chứng khoán, có
khó chuyển các số dấu phẩy động xung quanh một cách hiệu quả, vì dấu phẩy động
số, cộng với một số bit phụ để xác định loại của nó, lớn hơn một từ máy.
(Do đó, chúng được "đóng hộp" trong bộ nhớ được phân bổ theo heap, gây ra chi phí GC.)
đơn vị biên dịch đơn lẻ hoặc khi thực hiện các hoạt động tích hợp như SQRT và AREF, hoặc một số
các thao tác đặc biệt như truy cập khe cấu trúc, điều này có thể tránh được: xem hướng dẫn sử dụng
để biết một số gợi ý về hiệu quả. Nhưng đối với các lệnh gọi hàm chung vượt qua ranh giới của
đơn vị biên dịch, chuyển kết quả của phép tính dấu phẩy động dưới dạng một hàm
đối số (hoặc trả về kết quả dấu phẩy động dưới dạng giá trị hàm) về cơ bản là
hoạt động chậm chạp.
BÁO CÁO GIỎI
Để báo cáo lỗi, vui lòng gửi thư đến danh sách gửi thư sbcl-help hoặc sbcl-devel. Bạn có thể
tìm địa chỉ danh sách gửi thư đầy đủ trên các trang web tại
<http://sbcl.sourceforge.net/>; lưu ý rằng như một biện pháp giảm thư rác, bạn phải đăng ký
vào danh sách trước khi bạn có thể đăng. (Bạn cũng có thể tìm thấy theo dõi lỗi SourceForge lạ mắt
máy móc ở đó, nhưng đừng để bị lừa. Kể từ năm 2002-07-25, chúng tôi không tích cực theo dõi
máy móc đó và nó chỉ tồn tại bởi vì chúng tôi không thể tìm ra cách biến
nó tắt.)
Như với bất kỳ báo cáo lỗi phần mềm nào, sẽ hữu ích nhất nếu bạn có thể cung cấp đủ thông tin
tái tạo các triệu chứng một cách đáng tin cậy và nếu bạn nói rõ ràng các triệu chứng là gì. Vì
ví dụ, "Dường như có điều gì đó không ổn với TAN của các đối số phủ định rất nhỏ.
Khi tôi thực thi (TAN LEAST-NEGATIVE-SINGLE-FLOAT) tương tác trên sbcl-1.2.3 trên Linux của tôi
4.5 Hộp X86, tôi gặp lỗi UNBOUND-VARIABLE. "
KHÁC BIỆT TỪ CMU CL
SBCL có thể được xây dựng từ đầu bằng cách sử dụng hệ thống ANSI Common Lisp đơn giản và một C
trình biên dịch và tất cả các thuộc tính của nó được chỉ định bởi phiên bản của mã nguồn
nó được tạo ra từ. Khả năng khởi động sạch này là động lực ngay lập tức để rèn
ra khỏi cây phát triển CMU CL. Một loạt các khác biệt về triển khai được thúc đẩy
bởi mục tiêu thiết kế này.
Công việc bảo trì trong SBCL kể từ khi ngã ba đã tách biệt phần nào với công việc bảo trì trong
CMU CL. Nhiều nhưng không phải tất cả các bản sửa lỗi và cải tiến đã được chia sẻ giữa hai
dự án, và đôi khi hai dự án không đồng ý về những gì sẽ là một cải tiến.
Hầu hết các tiện ích mở rộng được CMU CL hỗ trợ đã được tách khỏi SBCL, bao gồm cả Motif
hỗ trợ, trình chỉnh sửa Hemlock, đường dẫn tìm kiếm, giao thức WIRE, các macro cấp người dùng khác nhau
và các chức năng (ví dụ LETF, ITERATE, MEMQ, REQUIRED-ARGUMENT) và nhiều người khác.
(Tại sao SBCL không hỗ trợ nhiều tiện ích mở rộng hơn? Tại sao lại bỏ tất cả các tiện ích mở rộng tốt đẹp đó
từ CMU CL khi mã đã tồn tại? Đây là một câu hỏi thường gặp trên
danh sách gửi thư. Có hai lý do chính. Đầu tiên, đó là một vấn đề triết lý thiết kế:
được cho là SBCL đã hoàn thành công việc của mình bằng cách cung cấp một FFI ổn định, và quyết định thiết kế đúng đắn là
để di chuyển chức năng bắt nguồn từ đó, chẳng hạn như hỗ trợ socket, vào các thư viện riêng biệt.
Một số trong số này được phân phối với SBCL dưới dạng mô-đun "đóng góp", những người khác được phân phối dưới dạng
các gói phần mềm riêng biệt bởi những người bảo trì riêng biệt. Thứ hai, đó là một quyết định thực tế -
chúng tôi hy vọng sẽ tập trung vào một số lượng nhỏ hơn để chúng tôi làm tốt hơn chúng.)
HỖ TRỢ
Thông tin khác nhau về SBCL có sẵn tạihttp://www.sbcl.org/>. Danh sách gửi thư
có những nơi được đề xuất để tìm kiếm sự hỗ trợ.
TÁC GIẢ
Hàng chục người đã có những đóng góp đáng kể cho SBCL và các hệ thống con của nó, và
hệ thống CMU CL mà nó đã dựa trên đó, trong những năm qua. Xem tệp CREDITS trong
phân phối để biết thêm thông tin.
MÔI TRƯỜNG
SBCL_HOME Biến này kiểm soát nơi các tệp như "sbclrc", "sbcl.core" và tiện ích bổ sung
hệ thống "đóng góp" được tìm kiếm. Nếu nó không được đặt, thì sbcl sẽ đặt nó từ một
vị trí mặc định thời gian biên dịch thường là / usr / local / lib / sbcl / nhưng có thể có
Đã được thay đổi ví dụ bởi một trình đóng gói của bên thứ ba.
Sử dụng sbcl trực tuyến bằng các dịch vụ onworks.net