.\" .\" man page introduction to SBCL .\" .\" SBCL, including this man page, is derived from CMU Common Lisp, of .\" which it was said (ca. 1991) .\" ********************************************************************** .\" This code was written as part of the CMU Common Lisp project at .\" Carnegie Mellon University, and has been placed in the public domain. .\" If you want to use this code or any part of CMU Common Lisp, please .\" contact Scott Fahlman or slisp-group@cs.cmu.edu. .\" ********************************************************************** .\" Most of SBCL, including this man page, is in the public domain. See .\" COPYING in the distribution for more information. .\" .TH SBCL 1 "$Date$" .AT 3 .SH "نام (NAME)" sbcl \- پیاده‌سازی Steel Bank Common Lisp .SH "توضیحات (DESCRIPTION)" ‫SBCL یک پیاده‌سازی از ANSI Common Lisp است که دارای یک کامپایلر محلی با کارایی بالا، ریسه‌های (threads) محلی روی چندین بستر، رابط سوکت، اشکال‌زدای در سطح کد منبع، تحلیل‌گر آماری کارایی و بسیاری امکانات دیگر است. این یک نرم‌افزار آزاد است که بخش عمدهٔ آن در مالکیت عمومی (public domain) قرار دارد، اما برخی از زیرسیستم‌های آن تحت مجوزهای سبک BSD هستند که تغییر و استفادهٔ مجدد را تا زمانی که ارجاع و اعتبار حفظ شود مجاز می‌دانند. این نرم‌افزار «همان‌گونه که هست»، بدون هرگونه ضمانت از هر نوع ارائه می‌شود. برای کسب اطلاعات بیشتر دربارهٔ مسائل مربوط به مجوز، فایل COPYING در توزیع را ببینید. برای اطلاعات بیشتر پیرامون تاریخچه، فایل CREDITS در توزیع را بررسی کنید. .SH "اجرای SBCL (RUNNING SBCL)" برای اجرای SBCL، عبارت «sbcl» را وارد کنید. پس از پیام‌های راه‌اندازی اولیه، اعلان («\f(CR*\fR») ظاهر می‌شود. یک عبارت Lisp وارد کنید تا SBCL آن را بخواند و اجرا کند، مقادیر بازگردانده شده را چاپ کند، اعلان دیگری در اختیارتان قرار دهد و منتظر ورودی بعدی شما بماند. \f(CR $ sbcl ...[startup messages elided]... * (+ 1 2 3) 6 * (exit) \fR بسیاری از افراد ترجیح می‌دهند SBCL را به‌صورت یک زیرفرایند تحت Emacs اجرا کنند. حالت «Slime» در Emacs امکانات مناسب فراوانی مانند ویرایش خط فرمان، تکمیل خودکار با کلید تب (tab completion) و انواع پیوندها میان فایل‌های منبع Common Lisp و زیرفرایند تعاملی SBCL فراهم می‌آورد. برای کسب اطلاعات پیرامون ایجاد «فایل‌های اجرایی مستقل» با استفاده از SBCL، بخش \f(CRSB\-EXT:SAVE\-LISP\-AND\-DIE\fR را در دفترچه راهنمای کاربر ببینید. .SH "ساختار خط فرمان (COMMAND LINE SYNTAX)" برای استفادهٔ تعاملی معمول، نیازی به هیچ آرگومان خط فرمانی نیست. برای درک ساختار خط فرمان SBCL، دانستن این نکته مفید است که این سامانه از دو بخش تشکیل شده است: یک محیط زمان اجرا (runtime environment)، و سامانهٔ Common Lisp که توسط آن پشتیبانی می‌شود. برخی از آرگومان‌های خط فرمان هنگام مقداردهی اولیهٔ محیط زمان اجرا پردازش می‌شوند، و برخی در طول مقداردهی اولیهٔ سامانهٔ Lisp -- هر آرگومان باقی‌ماندهٔ خط فرمان نیز به کد کاربر منتقل می‌شود. ساختار کلی خط فرمان به شرح زیر است: .IP .B sbcl [runtime options] \-\-end\-runtime\-options [toplevel options] \-\-end\-toplevel\-options [user options] .PP هر دو گزینهٔ \-\-end\-runtime\-options و \-\-end\-toplevel\-options اختیاری هستند و می‌توان از آن‌ها صرف‌نظر کرد. هدف از وجود آن‌ها، استفاده در شرایطی است که گزینه‌های خط فرمان تحت کنترل کاربر هستند (\fIمثلاً\fR در فایل‌های دسته‌ای): با استفاده از آن‌ها می‌توانید از پردازش تصادفی گزینه‌های در نظر گرفته شده برای برنامه‌تان توسط SBCL جلوگیری کنید. گزینه‌های زمان اجرای پشتیبانی‌شده عبارتند از: .TP 3 .B \-\-core استفاده از فایل هستهٔ (core) مشخص‌شدهٔ Lisp به‌جای پیش‌فرض. (برای هستهٔ استاندارد بخش FILES و برای دریافت اطلاعات پیرامون چگونگی ایجاد هستهٔ سفارشی، مستندات سامانه برای \f(CRSB\-EXT:SAVE\-LISP\-AND\-DIE\fR را ببینید.) توجه داشته باشید که اگر فایل هستهٔ Lisp توسط کاربر ایجاد شده باشد، ممکن است سطح بالایی (toplevel) غیر استاندارد را اجرا کند که گزینه‌های استاندارد toplevel را شناسایی نمی‌کند. .TP 3 .B \-\-dynamic-space-size اندازهٔ فضای پویای (dynamic space) رزرو شده در زمان راه‌اندازی بر حسب مگابایت. مقدار پیش‌فرض وابسته به بستر است. .TP 3 .B \-\-control-stack-size اندازهٔ پشتهٔ کنترلی (control stack) رزرو شده برای هر ریسه بر حسب مگابایت. مقدار پیش‌فرض 2 است. .TP 3 .B \-\-tls-limit حداکثر تعداد نمادهای محلی ریسه (thread-local symbols) در نسخه‌های چندریسه‌ای. مقدار پیش‌فرض 4096 است. .TP 3 .B \-\-noinform جلوگیری از چاپ بنر معرفی یا هر پیام اطلاع‌رسانی دیگر هنگام راه‌اندازی. (این کار نوشتن برنامه‌های Lisp را که به‌خوبی در خط‌لوله‌های یونیکس کار می‌کنند آسان‌تر می‌سازد. همچنین گزینه‌های «\-\-noprint» و «\-\-disable\-debugger» را ببینید.) .TP 3 .B \-\-disable\-ldb غیرفعال کردن اشکال‌زدای سطح پایین (low-level debugger). تنها در صورتی مؤثر است که SBCL با LDB کامپایل شده باشد. .TP 3 .B \-\-lose\-on\-corruption برخی خطاهای خطرناک سطح پایین وجود دارند (برای نمونه، اتمام پشتهٔ کنترلی، خطای حافظه) که خودشان (یا گرداننده‌هایشان) می‌توانند ایمیج را تخریب کنند. به‌طور پیش‌فرض SBCL هشداری چاپ می‌کند، سپس تلاش می‌کند ادامه دهد و خطا را در Lisp مدیریت کند، اما این عمل همیشه موفقیت‌آمیز نیست و ممکن است SBCL دچار اختلال در عملکرد یا حتی قفل شدن شود. با این گزینه، در صورت مواجهه با چنین خطایی، SBCL اشکال‌زدای ldb را فراخوانی می‌کند (اگر موجود و فعال باشد) یا در غیر این صورت خارج می‌شود. .TP 3 .B \-\-script به‌عنوان یک گزینهٔ زمان اجرا، معادل با \-\-noinform \-\-disable\-ldb \-\-lose\-on\-corruption \-\-end\-runtime\-options \-\-script است. توضیحات مربوط به \-\-script به‌عنوان گزینهٔ toplevel را در ادامه ببینید. .TP 3 .B \-\-merge\-core\-pages در صورت وجود پشتیبانی بستر، نکاتی (hints) را به سیستم‌عامل ارائه می‌دهد مبنی بر این‌که صفحات یکسان می‌توانند تا زمان نوشته شدن روی آن‌ها، میان فرایندها به اشتراک گذاشته شوند. این ویژگی می‌تواند برای کاهش مصرف حافظه در سیستم‌هایی با چندین فرایند SBCL که از فایل‌های هستهٔ مشابه اما با نام‌های متفاوت، یا از هسته‌های فشرده آغاز شده‌اند، مفید باشد. بدون پشتیبانی بستر، هیچ کاری انجام نمی‌دهد. به‌طور پیش‌فرض تنها هسته‌های فشرده‌شده این راهنمایی را فعال می‌کنند. .TP 3 .B \-\-no-merge\-core\-pages تضمین می‌کند که هیچ راهنمای اشتراک‌گذاری به سیستم‌عامل ارائه نشود. .TP 3 .B \-\-help چاپ اطلاعات پایه‌ای دربارهٔ SBCL، و سپس خروج. .TP 3 .B \-\-version چاپ اطلاعات نسخهٔ SBCL، و سپس خروج. .PP در آینده، ممکن است گزینه‌های زمان اجرایی برای کنترل رفتارهایی مانند تخصیص تنبل (lazy allocation) حافظه اضافه شود. گزینه‌های زمان اجرا، از جمله هرگونه گزینهٔ \-\-end\-runtime\-options، پیش از آن‌که منطق toplevel زبان Lisp فرصت دیدن آن را پیدا کند، از خط فرمان حذف می‌شوند. گزینه‌های toplevel پشتیبانی‌شده توسط هستهٔ استاندارد SBCL عبارتند از: .TP 3 .B \-\-sysinit بارگذاری filename به‌جای فایل پیش‌فرض راه‌اندازی سراسری سیستم. (بخش FILES را ببینید.) .TP 3 .B \-\-no\-sysinit فایل راه‌اندازی سراسری سیستم بارگذاری نشود. در صورت ارائه این گزینه، گزینهٔ \-\-sysinit نادیده گرفته می‌شود. .TP 3 .B \-\-userinit بارگذاری filename به‌جای فایل پیش‌فرض راه‌اندازی کاربر. (بخش FILES را ببینید.) .TP 3 .B \-\-no\-userinit فایل راه‌اندازی کاربر بارگذاری نشود. در صورت ارائه این گزینه، گزینهٔ \-\-userinit نادیده گرفته می‌شود. .TP 3 .B \-\-eval پس از اجرای هرگونه فایل راه‌اندازی، اما پیش از آغاز حلقهٔ خواندن-ارزیابی-چاپ (REPL) روی ورودی استاندارد، دستور داده‌شده را خوانده و ارزیابی می‌کند. می‌توان بیش از یک گزینهٔ \-\-eval را استفاده کرد، و همگی به ترتیبی که در خط فرمان ظاهر می‌شوند خوانده و اجرا خواهند شد. .TP 3 .B \-\-load این گزینه معادل \-\-eval \(aq(load "")\(aq است. این نحو ویژه به منظور کاهش دردسرهای نقل‌قول (quoting) هنگام فراخوانی SBCL از اسکریپت‌های شل در نظر گرفته شده است..TP 3 .B \-\-noprint هنگامی که به‌طور معمول «حلقه خواندن-ارزیابی-چاپ» (read-eval-print loop) در سطح بالا اجرا می‌شود، به‌جای آن یک «حلقه خواندن-ارزیابی» را اجرا می‌کند، \fIi.e.\fR اعلانی چاپ نمی‌کند و نتایج را منعکس نمی‌سازد. ترکیب این گزینه با گزینه زمان اجرای \-\-noinform، نوشتن «اسکریپت‌های» Lisp را که به‌خوبی در خط‌لوله‌های (pipelines) یونیکس کار می‌کنند، آسان‌تر می‌سازد. .TP 3 .B \-\-disable\-debugger به‌طور پیش‌فرض زمانی که SBCL با خطایی مواجه می‌شود، وارد دیباگر توکار می‌شود که امکان عیب‌یابی تعاملی و مداخله احتمالی را فراهم می‌کند. این گزینه دیباگر را غیرفعال کرده و باعث می‌شود خطاها به‌جای آن یک ردگیری به عقب (backtrace) چاپ کنند و با وضعیت ۱ خارج شوند \-\- حالتی از عملکرد که برای پردازش دسته‌ای (batch processing) مناسب‌تر است. برای جزئیات، راهنمای کاربر را درباره \f(CRSB\-EXT:DISABLE\-DEBUGGER\fR ببینید. .TP 3 .B \-\-quit در پایان پردازش گزینه‌های سطح بالا، از SBCL با کد موفقیت صفر خارج می‌شود. توجه داشته باشید که تأثیر این گزینه تا پس از گزینه‌های سطح بالای پس از آن به تعویق می‌افتد. .TP 3 .B \-\-non-interactive این گزینه حلقه read-eval-print را برای هر دو دلایل استثنایی و غیراستثنایی غیرفعال می‌کند. این گزینه کوتاه‌شدهٔ ترکیب \-\-disable\-debugger و \-\-quit است و برای کاربردهای دسته‌ای که پردازش گزینه‌های ویژه در نظر گرفته شده توسط \-\-script مد نظر نیست، مفید است. .TP 3 .B \-\-script مستلزم \-\-no-sysinit \-\-no-userinit \-\-disable-debugger \-\-end\-toplevel\-options است. باعث می‌شود سیستم فایل مشخص‌شده را بارگذاری کرده و بلافاصله پس از آن خارج شود، به‌جای اینکه وارد حلقه read-eval-print گردد. اگر فایل با یک خط shebang شروع شود، نادیده گرفته می‌شود. .PP صرف‌نظر از ترتیبی که گزینه‌های سطح بالا در خط فرمان ظاهر می‌شوند، ترتیب اقدامات بدین شرح است: .nr step 1 1 .IP \n[step]. 3 دیباگر در صورت درخواست غیرفعال می‌شود. .IP \n+[step]. هرگونه فایل مقداردهی اولیه سیستم بارگذاری می‌شود، مگر اینکه منع شده باشد. .IP \n+[step]. هرگونه فایل مقداردهی اولیه کاربر بارگذاری می‌شود، مگر اینکه منع شده باشد. .IP \n+[step]. گزینه‌های \-\-eval و \-\-load به ترتیبی که ارائه شده‌اند پردازش می‌شوند. .PP در نهایت، یا وارد حلقه read-eval-print می‌شود یا فایل مشخص‌شده با گزینه \-\-script بارگذاری می‌گردد. هنگام اجرا در حلقه read-eval-print، سیستم با رسیدن به انتهای فایل (end of file) خارج می‌شود. به‌طور مشابه، سیستم بلافاصله پس از پردازش فایل مشخص‌شده با \-\-script خارج می‌شود. توجه داشته باشید که هنگام اجرای SBCL با گزینه \-\-core با استفاده از یک فایل core ایجادشده توسط فراخوانی کاربر به \f(CRSB\-EXT:SAVE\-LISP\-AND\-DIE\fR، ممکن است گزینه‌های سطح بالا تحت کنترل کد کاربری باشند که به‌عنوان آرگومان به \f(CRSB\-EXT:SAVE\-LISP\-AND\-DIE\fR ارسال شده است. برای این منظور، خود گزینه \-\-end\-toplevel\-options نیز می‌تواند یک گزینه سطح بالا تلقی شود، \fIi.e.\fR core کاربر، به صلاحدید خود، ممکن است از آن پشتیبانی نکند. در توالی راه‌اندازی استاندارد SBCL (\fIi.e.\fR بدون دخالت هیچ core کاربری)، گزینه‌های سطح بالا و هر گزینه \-\-end\-toplevel\-options پیش از اینکه کد کاربر فرصتی برای مشاهده آن داشته باشد، از فهرست آرگومان‌های خط فرمان حذف می‌شوند. .SH "نمای کلی (OVERVIEW)" پروژه SBCL از CMU CL مشتق شده است. (هدف از این نام‌گذاری، اذعان به این ارتباط است: فولاد و بانکداری صنایعی هستند که کارنگی و ملون ثروت هنگفت خود را از آن‌ها به دست آوردند.) ‫SBCL به‌طور پیش‌فرض کامپایل می‌کند: حتی توابعی که در حلقه read-eval-print وارد می‌شوند به کد بومی (native code) کامپایل می‌شوند، مگر اینکه ارزیاب به‌طور صریح فعال شده باشد. (حتی امروز، حدود ۴۰ سال پس از کامپایلر MacLisp، افرادی به شما خواهند گفت که Lisp یک زبان تفسیری است. آن‌ها را نادیده بگیرید.) پروژه SBCL انطباق کامل با استاندارد ANSI برای Common Lisp را هدف خود قرار داده اما هنوز به‌طور کامل به آن دست نیافته است. اطلاعات بیشتر در این باره در بخش BUGS در زیر در دسترس است. همچنین SBCL شامل افزونه‌های غیر ANSI مختلفی است که به‌طور کامل‌تر در User Manual شرح داده شده‌اند. برخی از این‌ها در سیستم پایه قرار دارند و برخی دیگر ماژول‌های «contrib» هستند که بر حسب درخواست با استفاده از \f(CRREQUIRE\fR بارگذاری می‌شوند. برای مثال، جهت بارگذاری ماژول \f(CRSB\-BSD\-SOCKETS\fR که اتصال TCP/IP را فراهم می‌کند: \f(CR * (require \(aqasdf) * (require \(aqsb\-bsd\-sockets) \fR برای اطلاعات بیشتر، User Manual را ببینید. .PP.SH "کامپایلر (THE COMPILER)" SBCL کامپایلر کد محلی «Python» را از CMU CL به ارث می‌برد. (اگرچه ما اغلب از این نام خودداری می‌کنیم تا از سردرگمی با زبان اسکریپت‌نویسی که آن هم Python نامیده می‌شود جلوگیری شود.) این کامپایلر در درک سیستم نوع داده (type system) زبان Common Lisp و استفاده از آن برای بهینه‌سازی کد، و نیز در تولید یادداشت‌هایی به منظور آگاه ساختن کاربر از این‌که کامپایلر اطلاعات نوع کافی برای تولید کد کارآمد در اختیار ندارد، بسیار هوشمندانه عمل می‌کند. همچنین تلاش می‌کند (تقریباً همیشه با موفقیت) از اصل غیرمعمول اما بسیار کاربردی «اعلان‌ها همان گزاره‌ها هستند» پیروی کند، \fIi.e.\fR اعلان‌های نوع داده باید در زمان اجرا بررسی شوند، مگر اینکه کاربر صریحاً به سیستم اعلام کند که سرعت مهم‌تر از ایمنی است. کد کامپایل‌شده برای مدیریت خودکار حافظه از جمع‌آوری زباله (garbage collection) استفاده می‌کند. پیاده‌سازی جمع‌آورندهٔ زباله از یک CPU به CPU دیگر تفاوت چشمگیری دارد. به‌ویژه، در برخی CPUها GC تقریباً دقیق (exact) است، در حالی که در برخی دیگر محافظه‌کارانه‌تر عمل می‌کند، و در برخی CPUها GC از نوع نسلی (generational) است، در حالی که در برخی دیگر از راهبردهای ساده‌ترِ توقف و کپی (stop and copy) استفاده می‌شود. برای اطلاعات بیشتر دربارهٔ کامپایلر، به راهنمای کاربر مراجعه کنید. .SH "نیازمندی‌های سیستم (SYSTEM REQUIREMENTS)" در حال حاضر SBCL روی سامانه‌های X86 (شامل Linux، FreeBSD، OpenBSD و NetBSD)، ‏X86-64 (سیستم Linux)، PPC (سیستم Linux)، ‏SPARC (سیستم‌های Linux و Solaris 2.x) و MIPS (سیستم Linux) اجرا می‌شود. برای کسب اطلاعات دربارهٔ سایر پورت‌های در حال انجام و ممکن، به لیست پستی sbcl\-devel و/یا وب‌سایت مراجعه کنید. ‏SBCL برای اجرا در سیستم‌های X86 به حدود 16Mb حافظهٔ RAM نیاز دارد، اگرچه به‌جز کوچک‌ترین برنامه‌ها، بقیه با 32Mb یا بیشتر عملکرد بسیار بهتری خواهند داشت. .SH "باگ‌های شناخته‌شده (KNOWN BUGS)" این بخش تلاش دارد تا جدی‌ترین و دیرینه‌ترین باگ‌ها را فهرست کند. برای اطلاعات دقیق‌تر و به‌روزتر دربارهٔ باگ‌ها، فایل BUGS را در توزیع ببینید. ممکن است با اتمام حافظهٔ heap (توده) به دردسر بسیار جدی بیفتید. سیستم SBCL هنگام راه‌اندازی بیش از حد حافظه تخصیص می‌دهد (overcommit)، بنابراین در سیستم‌های شبه‌یونیکس معمولی مانند Linux و FreeBSD، این بدین معناست که اگر مشخص شود سیستم SBCL از حافظهٔ مجازی بیشتری نسبت به آنچه سیستم در دسترس دارد استفاده می‌کند، تمایل بر این خواهد بود که سایر فرایندها به‌طور تصادفی کشته (kill) شوند (!). نحوهٔ برخورد کامپایلر با مقادیر بازگشتی توابع، بی‌جهت اصل «اعلان‌ها همان گزاره‌ها هستند» را که در سایر موارد از آن تبعیت می‌کند، نقض می‌نماید. استفاده از \f(CRPROCLAIM\fR یا \f(CRDECLAIM\fR برای مشخص کردن نوع بازگشتی یک تابع، باعث می‌شود کامپایلر بدون بررسی، ادعای شما را بپذیرد. بنابراین کامپایل فایلی شامل \f(CR (DECLAIM (FTYPE (FUNCTION (T) NULL) SOMETIMES)) (DEFUN SOMETIMES (X) (ODDP X)) (DEFUN FOO (X) (IF (SOMETIMES X) \(aqTHIS\-TIME \(aqNOT\-THIS\-TIME))\fR .br و سپس اجرای \f(CR(FOO 1)\fR مقدار \f(CRNOT\-THIS\-TIME\fR را حاصل می‌دهد، زیرا کامپایلر بدون اعتبارسنجی به درستیِ \f(CRDECLAIM\fR اعتماد کرده است. برخی موارد بسیار ناکارآمد پیاده‌سازی شده‌اند. .TP 3 -- آرایه‌های چندبُعدی ناکارآمد هستند، به‌ویژه آرایه‌های چندبُعدی از اعداد ممیز شناور (floating point). .TP 3 -- ‏SBCL، همانند اکثر (شاید تمام؟) پیاده‌سازی‌های Common Lisp بر روی سخت‌افزارهای تجاری استاندارد (stock hardware)، در تبادل و جابه‌جایی کارآمد اعداد ممیز شناور مشکل دارد، زیرا یک عدد ممیز شناور، به‌علاوهٔ چند بیت اضافی برای تشخیص نوع آن، بزرگ‌تر از یک کلمهٔ ماشین (machine word) است. (بنابراین، آن‌ها در حافظهٔ اختصاص‌یافته در heap بسته‌بندی یا «boxed» می‌شوند که موجب سربار GC می‌گردد.) درون یک واحد کامپایل منفرد، یا هنگام انجام عملیات پیش‌ساخته مانند \f(CRSQRT\fR و \f(CRAREF\fR، یا برخی عملیات ویژه مانند دسترسی به اسلات‌های ساختار، این موضوع قابل پیشگیری است: برای نکاتی دربارهٔ بهینه‌سازی و کارایی به راهنمای کاربر رجوع کنید. اما برای فراخوانی‌های عمومی توابع در فراتر از مرزهای واحدهای کامپایل، ارسال نتیجهٔ یک محاسبهٔ ممیز شناور به عنوان آرگومان تابع (یا بازگرداندن نتیجهٔ ممیز شناور به عنوان مقدار تابع) اساساً عملیاتی کند است. .PP .SH "گزارش باگ‌ها (REPORTING BUGS)" برای گزارش یک باگ، لطفاً نامه‌ای به لیست‌های پستی sbcl\-help یا sbcl\-devel ارسال فرمایید. می‌توانید نشانی‌های کامل این لیست‌های پستی را در صفحات وب در <\f(CRhttp://sbcl.sourceforge.net\fR> پیدا کنید؛ توجه داشته باشید که به منظور اقدامی جهت کاهش هرزنامه (اسپم)، باید پیش از ارسال پیام در لیست‌ها عضو شوید. (همچنین ممکن است سازوکار پرزرق‌وبرق ردیابی باگ SourceForge را در آنجا ببینید، اما فریب نخورید. دست‌کم از تاریخ 2002-07-25 به بعد، ما این سامانه را به‌طور فعال پایش نمی‌کنیم و وجود آن تنها به این دلیل است که هنوز نتوانسته‌ایم راهی برای خاموش کردن آن بیابیم.) همانند هر گزارش باگ نرم‌افزاری، بسیار سودمند خواهد بود اگر اطلاعات کافی برای بازتولید مطمئن نشانه‌های خطا ارائه دهید و به‌روشنی شرح دهید که نشانه‌ها چه هستند. برای نمونه، «به نظر می‌رسد مشکلی در TAN برای آرگومان‌های منفی بسیار کوچک وجود دارد. هنگامی که من \f(CR(TAN LEAST\-NEGATIVE\-SINGLE\-FLOAT)\fR را به‌صورت تعاملی روی sbcl\-1.2.3 در سیستم Linux 4.5 X86 خود اجرا می‌کنم، خطای \f(CRUNBOUND\-VARIABLE\fR دریافت می‌کنم.».SH "تفاوت‌ها با CMU CL (DIFFERENCES FROM CMU CL)" SBCL را می‌توان از ابتدا با استفاده از یک سیستم استاندارد ANSI Common Lisp و یک کامپایلر C ساخت، و تمامی ویژگی‌های آن توسط نسخه‌ای از کد منبع که از آن ایجاد شده تعیین می‌شود. این قابلیت راه‌اندازی اولیه (bootstrappability) تمیز، انگیزه اصلی برای ایجاد انشعاب (fork) از درخت توسعه CMU CL بود. تنوعی از تفاوت‌های پیاده‌سازی نیز ناشی از همین هدف طراحی است. روند نگهداری و توسعه SBCL پس از این انشعاب تا حدودی از نگهداری CMU CL فاصله گرفته است. بسیاری از رفع باگ‌ها و بهبودها (نه همگی آن‌ها) بین دو پروژه به اشتراک گذاشته شده‌اند، و گاهی دو پروژه درباره این که چه چیزی یک بهبود محسوب می‌شود، هم‌نظر نیستند. بیشتر افزونه‌های پشتیبانی‌شده توسط CMU CL از SBCL تفکیک شده‌اند، از جمله پشتیبانی از Motif، ویرایشگر Hemlock، مسیرهای جستجو، پروتکل WIRE، و ماکروها و توابع مختلف در سطح کاربر (\fIبرای نمونه\fR \f(CRLETF\fR، \f(CRITERATE\fR، \f(CRMEMQ\fR، \f(CRREQUIRED\-ARGUMENT\fR)، و بسیاری موارد دیگر. (چرا SBCL به صورت بومی از افزونه‌های بیشتری پشتیبانی نمی‌کند؟ چرا با وجود در دسترس بودن کدها، تمام آن افزونه‌های خوب CMU CL کنار گذاشته شدند؟ این یک پرسش متداول در فهرست پستی است. دو دلیل عمده وجود دارد: نخست، مسئله فلسفه طراحی است؛ می‌توان استدلال کرد که SBCL با ارائه یک FFI پایدار وظیفه خود را انجام داده و تصمیم درست در طراحی این است که عملکردهای مشتق‌شده از آن، مانند پشتیبانی از سوکت، به کتابخانه‌های جداگانه منتقل شوند. برخی از این‌ها همراه با SBCL به عنوان ماژول‌های "contrib" عرضه می‌شوند و برخی دیگر به عنوان بسته‌های نرم‌افزاری مستقل توسط نگه‌دارندگان مجزا توزیع می‌گردند. دوم، این یک تصمیم عمل‌گرایانه است — امیدواریم تمرکز بر روی تعداد کمتری از قابلیت‌ها، به ما امکان دهد که کار بهتری روی آن‌ها انجام دهیم.) .SH "پشتیبانی (SUPPORT)" اطلاعات گوناگون درباره SBCL در <\f(CRhttp://www.sbcl.org\fR> در دسترس است. فهرست‌های پستی موجود در آنجا، محل پیشنهادی برای درخواست پشتیبانی هستند. .SH "نویسندگان (AUTHORS)" در طول سال‌ها ده‌ها نفر مشارکت‌های اساسی در SBCL و زیرسیستم‌های آن، و همچنین در سیستم CMU CL که SBCL بر پایه آن ساخته شد، داشته‌اند. برای اطلاعات بیشتر، فایل CREDITS موجود در توزیع را ببینید. .SH "محیط (ENVIRONMENT)" .TP 10n .BR SBCL_HOME این متغیر مشخص می‌کند فایل‌هایی مانند "sbclrc"، "sbcl.core" و سیستم‌های الحاقی "contrib" در کجا جستجو شوند. اگر مقداردهی نشده باشد، sbcl مسیر \fB../lib/sbcl/\fR را نسبت به مکان فایل اجرایی، یا دایرکتوری جاری بررسی می‌کند. اگر فایل اجرایی شما در مکان پیش‌فرض \fB/usr/local/bin/\fR باشد، در \fB/usr/local/lib/sbcl/\fR جستجو خواهد کرد. .SH "فایل‌ها (FILES)" .TP .I sbcl برنامه اجرایی حاوی برخی پشتیبانی‌های سطح پایین زمان اجرا و یک بارگذار (loader)، که برای خواندن sbcl.core استفاده می‌شود. .TP .I sbcl.core تصویر تخلیه‌شده حافظه (dumped memory image) حاوی بیشتر بخش‌های SBCL، که توسط فایل اجرایی `sbcl' بارگذاری می‌شود. در \fB$SBCL_HOME\fR جستجو می‌شود، مگر اینکه با گزینهٔ \f(CR\-\-core\fR نادیده گرفته شود. .TP .I sbclrc اسکریپت راه‌اندازی اختیاری سراسری سیستم، که ابتدا در \fB$SBCL_HOME\fR و سپس در \fB/etc\fR جستجو می‌شود، مگر اینکه توسط گزینه خط فرمان \f(CR\-\-sysinit\fR نادیده گرفته شود. .TP .I .sbclrc اسکریپت راه‌اندازی اختیاری و قابل شخصی‌سازی به ازای هر کاربر (در دایرکتوری خانگی کاربر، یا طبق آنچه توسط \f(CR\-\-userinit\fR مشخص شده است). .SH "همچنین ببینید (SEE ALSO)" مستندات کامل SBCL به عنوان یک راهنمای Texinfo نگهداری می‌شود. در صورت نصب بودن، دستور .IP .B info sbcl .PP دسترسی به کتابچه راهنمای کامل را برای شما فراهم می‌کند. بسته به روش نصب شما، ممکن است این مستندات در قالب‌های HTML و PDF نیز در \fIبرای نمونه\fR .IP .B /usr/local/share/doc/sbcl/ .PP موجود باشد. وب‌گاه اصلی SBCL را در .IP <\f(CRhttp://www.sbcl.org\fR> .PP برای دریافت اطلاعات بیشتر، از جمله دستورالعمل‌های عضویت در فهرست‌های پستی sbcl\-devel و sbcl\-help ببینید.