Ini adalah perintah sbcl yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
SBCL - Lisp Umum Bank Baja
DESKRIPSI
SBCL adalah implementasi dari ANSI Common Lisp, menampilkan native berkinerja tinggi
compiler, utas asli pada beberapa platform, antarmuka soket, tingkat sumber
debugger, profiler statistik, dan banyak lagi.
Ini adalah perangkat lunak gratis, sebagian besar dalam domain publik, tetapi dengan beberapa subsistem di bawah gaya BSD
lisensi yang memungkinkan modifikasi dan penggunaan kembali selama kredit diberikan. Ini disediakan "sebagai
adalah", tanpa jaminan apapun.
Untuk informasi selengkapnya tentang masalah lisensi, lihat file MENYALIN dalam distribusi. Untuk
informasi lebih lanjut tentang sejarah, lihat file KREDIT di distribusi.
RUNNING SBC
Untuk menjalankan SBCL, ketik "sbcl". Setelah pesan startup, prompt ("*") muncul. Masukkan Lisp
ekspresi, dan SBCL akan membaca dan menjalankannya, mencetak nilai apa pun yang dikembalikan, memberi Anda yang lain
prompt, dan menunggu masukan Anda berikutnya.
$sbcl
...[pesan startup dihilangkan]...
*(+1 2 3)
6
* (keluar)
Kebanyakan orang suka menjalankan SBCL sebagai subproses di bawah Emacs. Mode "Slime" Emacs menyediakan
banyak fitur yang mudah digunakan, seperti pengeditan baris perintah, penyelesaian tab, dan berbagai jenis
kopling antara file sumber Common Lisp dan subproses SBCL interaktif.
Untuk informasi tentang membuat "executable mandiri" menggunakan SBCL, lihat
SB-EXT:SAVE-LISP-AND-DIE dalam Panduan Pengguna.
COMMAND GARIS SINTAKSIS
Untuk penggunaan interaktif biasa, argumen baris perintah tidak diperlukan.
Untuk memahami sintaks baris perintah SBCL, akan sangat membantu untuk memahami bahwa:
sistem terdiri dari dua bagian: lingkungan runtime, dan sistem Common Lisp itu
mendukung. Beberapa argumen baris perintah diproses selama inisialisasi
runtime, dan beberapa selama inisialisasi sistem Lisp -- perintah yang tersisa
argumen baris diteruskan ke kode pengguna.
Sintaks baris perintah keseluruhan adalah:
kecil [waktu tayang pilihan] --akhir-runtime-opsi [tingkat terbaik pilihan] --end-toplevel-opsi
[pengguna pilihan]
Baik --end-runtime-options dan --end-toplevel-options adalah opsional, dan dapat dihilangkan.
Mereka dimaksudkan untuk digunakan dalam situasi di mana opsi baris perintah apa pun berada di bawah pengguna
kontrol (mis. dalam file batch): dengan menggunakannya, Anda dapat mencegah opsi yang ditujukan untuk
program yang tidak sengaja diproses oleh SBCL.
Opsi runtime yang didukung adalah
--inti
Gunakan file inti Lisp yang ditentukan alih-alih default. (Lihat bagian FILES untuk
inti standar, atau dokumentasi sistem untuk SB-EXT:SAVE-LISP-AND-DIE untuk informasi
tentang cara membuat inti khusus.) Perhatikan bahwa jika file inti Lisp adalah buatan pengguna
file inti, mungkin menjalankan tingkat atas tidak standar yang tidak mengenali standar
pilihan tingkat atas.
--dinamis-ruang-ukuran
Ukuran ruang dinamis yang dicadangkan saat startup dalam megabyte. Nilai default adalah platform
tergantung.
--kontrol-ukuran tumpukan
Ukuran tumpukan kontrol yang dicadangkan untuk setiap utas dalam megabita. Nilai defaultnya adalah 2.
--tidak memberi tahu
Menekan pencetakan spanduk atau pesan informasi lainnya saat startup. (Ini
membuatnya lebih mudah untuk menulis program Lisp yang bekerja dengan rapi di saluran pipa Unix. Lihat juga
opsi "--noprint" dan "--disable-debugger".)
--nonaktifkan-ldb
Nonaktifkan debugger tingkat rendah. Hanya efektif jika SBCL dikompilasi dengan LDB.
--kalah dari korupsi
Ada beberapa kesalahan tingkat rendah yang berbahaya (misalnya, tumpukan kontrol habis,
kesalahan memori) yang (atau yang penangannya) dapat merusak gambar. Secara default SBCL mencetak a
peringatan, lalu mencoba melanjutkan dan menangani kesalahan di Lisp, tetapi ini tidak akan selalu
bekerja dan SBCL mungkin tidak berfungsi atau bahkan hang. Dengan opsi ini, setelah menghadapi masalah seperti itu
kesalahan SBCL akan memanggil ldb (jika ada dan diaktifkan) atau keluar.
--naskah
Sebagai opsi runtime yang setara dengan --noinform --disable-ldb --lose-on-corruption
--end-runtime-options --script . Lihat deskripsi --script sebagai
opsi tingkat atas di bawah.
--gabung-inti-halaman
Saat dukungan platform hadir, berikan petunjuk ke sistem operasi yang identik
halaman dapat dibagi antara proses sampai mereka ditulis. Ini bisa berguna untuk
kurangi penggunaan memori pada sistem dengan beberapa proses SBCL dimulai dari yang serupa
tetapi file inti dengan nama berbeda, atau dari inti terkompresi. Tanpa dukungan platform,
tidak melakukan apapun.
--tidak-menggabung-halaman-inti
Memastikan bahwa tidak ada petunjuk berbagi yang diberikan ke sistem operasi.
--default-gabung-halaman inti
Mengembalikan kebijakan petunjuk berbagi ke default: hanya inti terkompresi yang memicu petunjuk.
Inti yang tidak dikompresi dipetakan langsung dari file inti, yang biasanya cukup untuk
memastikan berbagi.
--membantu
Cetak beberapa informasi dasar tentang SBCL, lalu keluar.
--Versi: kapan
Cetak informasi versi SBCL, lalu keluar.
Di masa mendatang, opsi runtime dapat ditambahkan untuk mengontrol perilaku seperti alokasi malas dari
ingatan.
Opsi runtime, termasuk opsi --end-runtime-options, dihilangkan dari
baris perintah sebelum logika tingkat atas Lisp mendapat kesempatan untuk melihatnya.
Opsi tingkat atas yang didukung oleh inti SBCL standar adalah
--sysinit
Muat nama file alih-alih file inisialisasi seluruh sistem default. (Lihat FILES
bagian.)
--tidak-sysinit
Jangan memuat file inisialisasi seluruh sistem. Jika opsi ini diberikan, --sysinit
pilihan diabaikan.
--penggunainit
Muat nama file alih-alih file inisialisasi pengguna default. (Lihat bagian FILE.)
--tidak ada pengguna init
Jangan memuat file inisialisasi pengguna. Jika opsi ini diberikan, opsi --userinit
diabaikan.
--eval
Setelah menjalankan file inisialisasi apa pun, tetapi sebelum memulai loop baca-eval-cetak
pada input standar, baca dan evaluasi perintah yang diberikan. Lebih dari satu opsi --eval dapat
digunakan, dan semua akan dibaca dan dieksekusi, sesuai urutan yang muncul pada perintah
line.
--memuat
Ini setara dengan --eval '(memuat " ")'. Sintaks khusus dimaksudkan untuk
kurangi mengutip sakit kepala saat menjalankan SBCL dari skrip shell.
--tidak mencetak
Ketika biasanya "read-eval-print loop" tingkat atas akan dieksekusi, jalankan "read-eval-print loop"
eval loop" sebagai gantinya, yaitu jangan cetak Prompt dan jangan gema hasil. Dikombinasikan dengan
--noinform opsi runtime, ini membuatnya lebih mudah untuk menulis "skrip" Lisp yang berfungsi
bersih di saluran pipa Unix.
--nonaktifkan-debugger
Secara default ketika SBCL menemukan kesalahan, ia memasuki debugger bawaan, memungkinkan
diagnosis interaktif dan kemungkinan syafaat. Opsi ini menonaktifkan debugger,
menyebabkan kesalahan untuk mencetak backtrace dan keluar dengan status 1 sebagai gantinya -- yang merupakan mode
operasi lebih cocok untuk pemrosesan batch. Lihat Panduan Pengguna di
SB-EXT:DISABLE-DEBUGGER untuk detailnya.
--berhenti
Di akhir pemrosesan opsi tingkat atas, keluar dari SBCL dengan kode nol yang berhasil.
Perhatikan bahwa efek dari opsi ini tertunda hingga setelah opsi tingkat atas mengikuti
yang ini.
--non-interaktif
Opsi ini menonaktifkan loop baca-eval-cetak untuk luar biasa dan tidak luar biasa
alasan. Ini adalah kependekan dari --disable-debugger dan --quit dalam kombinasi dan berguna
untuk penggunaan batch di mana pemrosesan opsi khusus yang tersirat oleh --script tidak diinginkan.
--naskah
Menyiratkan --no-sysinit --no-userinit --disable-debugger --end-toplevel-options.
Menyebabkan sistem memuat file yang ditentukan dan segera keluar setelahnya
memasuki loop read-eval-print. Jika file dimulai dengan baris Shebang, itu adalah
diabaikan.
Terlepas dari urutan opsi tingkat atas yang muncul di baris perintah, urutan
tindakan adalah:
1. Debugger dinonaktifkan, jika diminta.
2. Setiap file inisialisasi sistem dimuat, kecuali dilarang.
3. Setiap file inisialisasi pengguna dimuat, kecuali dilarang.
4. Opsi --eval dan --load diproses dalam urutan yang diberikan.
Akhirnya, loop read-eval-print dimasukkan atau file yang ditentukan dengan --script
opsi dimuat.
Saat berjalan di loop baca-eval-cetak, sistem keluar di akhir file. Demikian pula,
sistem keluar segera setelah memproses file yang ditentukan dengan --script.
Perhatikan bahwa saat menjalankan SBCL dengan opsi --core, menggunakan file inti yang dibuat oleh pengguna
panggilan ke SB-EXT:SAVE-LISP-AND-DIE, opsi tingkat atas mungkin berada di bawah kendali
kode pengguna diteruskan sebagai argumen ke SB-EXT:SAVE-LISP-AND-DIE. Untuk tujuan ini,
--end-toplevel-options itu sendiri dapat dianggap sebagai opsi toplevel, yaitu pengguna
inti, atas pilihannya, mungkin tidak mendukungnya.
Dalam urutan startup SBCL standar (yaitu tanpa inti pengguna yang terlibat) opsi tingkat atas
dan opsi --end-toplevel-options apa pun dihapus dari daftar argumen baris perintah
sebelum kode pengguna mendapat kesempatan untuk melihatnya.
GAMBARAN
SBCL diturunkan dari CMU CL. (Nama ini dimaksudkan untuk mengakui koneksi:
baja dan perbankan adalah industri di mana Carnegie dan Mellon menghasilkan banyak uang.)
SBCL mengkompilasi secara default: bahkan fungsi yang dimasukkan dalam loop read-eval-print dikompilasi
ke kode asli, kecuali evaluator telah diaktifkan secara eksplisit. (Bahkan hari ini, sekitar 30
bertahun-tahun setelah kompiler MacLisp, orang akan memberi tahu Anda bahwa Lisp adalah interpretasi
bahasa. Abaikan mereka.)
SBCL bertujuan untuk tetapi belum sepenuhnya memenuhi standar ANSI untuk Common
Pelat. Informasi lebih lanjut tentang ini tersedia di bagian BUGS di bawah ini.
SBCL juga mencakup berbagai ekstensi non-ANSI, yang dijelaskan lebih lengkap dalam Panduan Pengguna.
Beberapa di antaranya ada di sistem dasar dan yang lainnya adalah modul "contrib" yang dimuat berdasarkan permintaan
menggunakan REQUIRE. Misalnya, untuk memuat modul SB-BSD-SOCKETS yang menyediakan TCP/IP
konektivitas,
* (memerlukan 'asdf)
* (memerlukan 'sb-bsd-socket)
Untuk informasi lebih lanjut, lihat Panduan Pengguna.
THE PENYUSUN
SBCL mewarisi dari CMU CL kompiler kode asli "Python". (Meskipun kita sering menghindarinya
nama untuk menghindari kebingungan dengan bahasa scripting juga disebut Python.) Ini
compiler sangat pintar dalam memahami sistem tipe Common Lisp dan menggunakannya untuk
mengoptimalkan kode, dan tentang membuat catatan untuk memberi tahu pengguna saat kompilator tidak melakukannya
memiliki informasi tipe yang cukup untuk menghasilkan kode yang efisien. Itu juga mencoba (hampir selalu
berhasil) untuk mengikuti prinsip yang tidak biasa tetapi sangat berguna bahwa "deklarasi adalah
pernyataan", yaitu deklarasi tipe harus diperiksa saat runtime kecuali pengguna
secara eksplisit memberi tahu sistem bahwa kecepatan lebih penting daripada keselamatan.
Kode yang dikompilasi menggunakan pengumpulan sampah untuk mengelola memori secara otomatis. Sampah
implementasi kolektor sangat bervariasi dari CPU ke CPU. Secara khusus, pada beberapa CPU
GC hampir tepat, sementara pada yang lain lebih konservatif, dan pada beberapa CPU GC adalah
generasi, sementara di lain strategi berhenti dan menyalin yang lebih sederhana digunakan.
Untuk informasi lebih lanjut tentang kompiler, lihat panduan pengguna.
PELACAKAN PENGIRIMAN PERSYARATAN
SBCL saat ini berjalan pada X86 (Linux, FreeBSD, OpenBSD, dan NetBSD), X86-64 (Linux), Alpha
(Linux, Tru64), PPC (Linux, Darwin/MacOS X), SPARC (Linux dan Solaris 2.x), dan MIPS
(Linux). Untuk informasi tentang port lain yang sedang berlangsung dan mungkin, lihat sbcl-devel mailing
daftar, dan/atau situs web.
SBCL membutuhkan RAM sebesar 16Mb untuk berjalan pada sistem X86, meskipun semuanya kecuali yang terkecil
program akan lebih bahagia dengan 32Mb atau lebih.
DIKETAHUI BUG
Bagian ini mencoba membuat daftar bug yang paling serius dan bertahan lama. Untuk lebih jelasnya
dan informasi terkini tentang bug, lihat file BUGS di distribusi.
Dimungkinkan untuk mendapatkan masalah besar dengan menghabiskan memori tumpukan. Sistem SBCL
overcommits memori saat startup, jadi, pada Unix-alikes seperti Linux dan FreeBSD, ini
berarti jika sistem SBCL ternyata menggunakan lebih banyak memori virtual daripada yang dimiliki sistem
tersedia untuk itu, proses lain cenderung dimatikan secara acak (!).
Penanganan kompiler terhadap nilai pengembalian fungsi yang tidak perlu melanggar "deklarasi
adalah asersi" prinsip yang dianutnya. Menggunakan PROCLAIM atau DECLAIM untuk
tentukan tipe pengembalian suatu fungsi menyebabkan kompiler mempercayai Anda tanpa memeriksa.
Jadi kompilasi file yang berisi
(MENOLAK (FTYPE (FUNGSI (T) NULL) KADANG-KADANG))
(KADANG-KADANG DEFUN (X) (ODDP X))
(DEFUN FOO (X) (JIKA (KADANG-KADANG X) 'KALI INI' BUKAN-KALI INI))
kemudian menjalankan (FOO 1) memberikan NOT-THIS-TIME, karena kompiler mengandalkan kebenaran dari
DECLAIM tanpa memeriksanya.
Beberapa hal diimplementasikan dengan sangat tidak efisien.
-- Array multidimensi tidak efisien, terutama array multidimensi mengambang
nomor poin.
-- SBCL, seperti kebanyakan (mungkin semua?) implementasi Common Lisp pada perangkat keras, memiliki
kesulitan melewati angka floating point secara efisien, karena floating point
number, ditambah beberapa bit tambahan untuk mengidentifikasi tipenya, lebih besar dari kata mesin.
(Dengan demikian, mereka mendapatkan "kotak" di penyimpanan yang dialokasikan di tumpukan, menyebabkan overhead GC.) Dalam a
unit kompilasi tunggal, atau saat melakukan operasi bawaan seperti SQRT dan AREF, atau lainnya
operasi khusus seperti akses slot struktur, ini dapat dihindari: lihat panduan pengguna
untuk beberapa petunjuk efisiensi. Tetapi untuk panggilan fungsi umum melintasi batas
unit kompilasi, meneruskan hasil perhitungan floating point sebagai fungsi
argumen (atau mengembalikan hasil floating point sebagai nilai fungsi) pada dasarnya adalah
operasi lambat.
PELAPORAN BUG
Untuk melaporkan bug, silakan kirim email ke milis sbcl-help atau sbcl-devel. Kamu bisa
temukan alamat milis lengkap di halaman web di
<http://sbcl.sourceforge.net/>; perhatikan bahwa sebagai tindakan pengurangan spam, Anda harus berlangganan
ke daftar sebelum Anda dapat memposting. (Anda juga dapat menemukan pelacakan bug SourceForge yang mewah
mesin di sana, tapi jangan tertipu. Pada 2002-07-25, kami tidak memantau secara aktif
mesin itu, dan itu ada hanya karena kita belum bisa menemukan cara untuk mengubahnya
itu mati.)
Seperti halnya laporan bug perangkat lunak, akan sangat membantu jika Anda dapat memberikan informasi yang cukup
untuk mereproduksi gejala dengan andal, dan jika Anda mengatakan dengan jelas apa gejalanya. Untuk
contoh, "Sepertinya ada yang salah dengan TAN dari argumen negatif yang sangat kecil.
Ketika saya mengeksekusi (TAN LEAST-NEGATIVE-SINGLE-FLOAT) secara interaktif di sbcl-1.2.3 di Linux saya
4.5 X86 kotak, saya mendapatkan kesalahan UNBOUND-VARIABLE."
PERBEDAAN DARI CMU CL
SBCL dapat dibuat dari awal menggunakan sistem ANSI Common Lisp vanilla polos dan C
compiler, dan semua propertinya ditentukan oleh versi kode sumber yang
itu diciptakan dari. Bootstrappability yang bersih ini adalah motivasi langsung untuk forking
dari pohon pengembangan CMU CL. Berbagai perbedaan implementasi dimotivasi
oleh tujuan desain ini.
Pekerjaan pemeliharaan di SBCL karena garpu agak menyimpang dari pekerjaan pemeliharaan di
CMU CL. Banyak tetapi tidak semua perbaikan bug dan peningkatan telah dibagikan di antara keduanya
proyek, dan terkadang kedua proyek tidak setuju tentang apa yang akan menjadi perbaikan.
Sebagian besar ekstensi yang didukung oleh CMU CL telah dipisahkan dari SBCL, termasuk Motif
dukungan, editor Hemlock, jalur pencarian, protokol WIRE, berbagai makro tingkat pengguna
dan fungsi (misalnya LETF, ITERATE, MEMQ, REQUIRED-ARGUMENT), dan banyak lainnya.
(Mengapa SBCL tidak mendukung lebih banyak ekstensi secara asli? Mengapa membuang semua ekstensi yang bagus itu?
dari CMU CL padahal kodenya sudah ada? Ini adalah pertanyaan yang sering diajukan di
milis. Ada dua alasan utama. Pertama, ini adalah masalah filosofi desain:
bisa dibilang SBCL telah melakukan tugasnya dengan menyediakan FFI yang stabil, dan keputusan desain yang tepat adalah
untuk memindahkan fungsionalitas yang berasal dari itu, seperti dukungan soket, ke pustaka terpisah.
Beberapa di antaranya didistribusikan dengan SBCL sebagai modul "contrib", yang lain didistribusikan sebagai
paket perangkat lunak terpisah oleh pengelola terpisah. Kedua, ini adalah keputusan praktis -
berfokus pada sejumlah kecil hal akan, kami berharap, mari kita melakukan pekerjaan yang lebih baik pada mereka.)
TEKNIS
Berbagai informasi tentang SBCL tersedia dihttp://www.sbcl.org/>. Milis
ada tempat yang direkomendasikan untuk mencari dukungan.
PENULIS
Lusinan orang telah memberikan kontribusi besar untuk SBCL dan subsistemnya, dan untuk
sistem CMU CL yang menjadi dasarnya, selama bertahun-tahun. Lihat file KREDIT di
distribusi untuk informasi lebih lanjut.
LINGKUNGAN
SBCL_HOME Variabel ini mengontrol di mana file seperti "sbclrc", "sbcl.core", dan add-on
sistem "contrib" dicari. Jika tidak disetel, maka sbcl menyetelnya dari a
lokasi default waktu kompilasi yang biasanya /usr/local/lib/sbcl/ tetapi mungkin memiliki
telah diubah misalnya oleh pembuat paket pihak ketiga.
Gunakan sbcl online menggunakan layanan onworks.net