ros-dump(1) ros-dump(1)

ros-dump - ایجاد یک ایمیج دامپ‌شده از اسکریپت roswell

ros [OPTIONS1...] dump [OPTIONS2...] MODE args...

OPTIONS1 گزینه‌های استاندارد roswell مانند -L یا -m LISP را مشخص می‌کند. OPTIONS2 گزینه‌های کاهش اندازهٔ ایمیج را مشخص می‌کند که در ادامه شرح داده می‌شوند. MODE یکی از مقادیر output یا executable است.

ros-dump یک ایمیج لیسپ دامپ‌شده از وضعیت جاری پس از پردازش تمام گزینه‌های OPTIONS1 ایجاد می‌کند.

این دستور دارای دو حالت output و executable است. در هر دو حالت، محیط سراسری (به‌عنوان مثال مقیدسازی سراسری به متغیرهای ویژه مانند *package*) در وضعیتی که بلافاصله پس از راه‌اندازی مجدد وجود دارد، همان محیطی است که هنگام دامپ شدن اسکریپت فعال بوده است.

ایمیج دامپ‌شده معمولاً بین پیاده‌سازی‌های مختلف و همچنین بین نسخه‌های مختلف آن‌ها سازگار نیست.

اسکریپت roswell با نام NAME را بارگذاری کرده و وضعیت جاری لیسپ را در یک ایمیج ذخیره می‌کند.

فایل ایمیج به‌طور پیش‌فرض به شکلی سازمان‌یافته در یک دایرکتوری داخلی از roswell ذخیره می‌شود؛ یعنی مکانی در $ROSWELL_INSTALL_DIR که بر اساس پیاده‌سازی فعلی، نسخهٔ آن و NAME داده‌شده تعیین می‌گردد.

هنگامی که فایل خروجی از قبل وجود داشته باشد، دستور با یک کد خطا ناموفق می‌شود.

این ایمیج را می‌توان با دستور ros -m IMAGE بارگذاری کرد. هنگام راه‌اندازی مجدد از روی ایمیج، زیردستورهای استاندارد roswell و آرگومان‌های اضافی اسکریپت نیز در دسترس هستند؛ به عنوان مثال ros run برای ادامه با یک repl، یا --restart FUNC برای فراخوانی یک تابع خاص، که انعطاف‌پذیری لازم را فراهم می‌آورد.

-o OUTPUT
ایمیج به جای مکان پیش‌فرض، در OUTPUT ذخیره می‌شود.
-f
در صورتی که فایل خروجی از قبل وجود داشته باشد، بازنویسی آن را تحمیل می‌کند.

هنگامی که یک اسکریپت با حالت executable دامپ می‌شود، ایمیج دامپ‌شده به یک فایل باینری اجرایی مستقل تبدیل می‌شود که به‌طور خودکار --restart main را اعمال می‌کند.

اگر OUTPUT مشخص شده باشد، فایل باینری حاصل در آن ذخیره می‌شود. در غیر این صورت، نام فایل خروجی از روی NAME تعیین شده و در همان دایرکتوری ذخیره می‌گردد. در ویندوز و در صورتی که SCRIPT دارای پسوند .ros باشد، نام فایل SCRIPT.exe خواهد بود. در سایر سیستم‌ها، نتیجه SCRIPT (بدون پسوند) خواهد بود.

این قابلیت در SBCL، CCL، CMUCL، CLISP و ECL پشتیبانی می‌شود.

این گزینه‌ها پیوند برخی ارجاعات به اشیاء زمان اجرا را حذف می‌کنند و به GC اجازه می‌دهند تا بخشی از حافظه را بازپس گیرد، که در نهایت حجم ایمیج دامپ‌شده را کاهش می‌دهد.

باید دقت شود که برنامهٔ حاصل طبق انتظار کار کند، زیرا برخی از این عملیات ممکن است مفروضات معمول برنامه‌های منطبق با استاندارد را از بین ببرند. به عنوان مثال، گزینه‌های کاهش اندازهٔ مرتبط با بسته‌ها ممکن است فراخوانی‌های زمان اجرا به READ را پس از راه‌اندازی مجدد مختل کنند.

گزینه‌های کاهش اندازه به ترتیب از چپ به راست پردازش می‌شوند.

–disable-compression, –enable-compression, -c
این گزینه‌ها قابلیت فشرده‌سازی هسته (core compression) را در SBCL غیرفعال/فعال/فعال می‌کنند. بنابراین این گزینه تنها در SBCL کاربرد دارد. فشرده‌سازی به‌طور پیش‌فرض فعال است.
–remove-docstrings
این گزینه تمام رشته‌های مستندات (docstrings) را از تمام نمادها در کل ایمیج لیسپ حذف می‌کند.
–delete-package PKG
این گزینه را می‌توان چندین بار مشخص کرد. این گزینه نمادها را از PACKAGE خارج (unintern) کرده، makeunbound و fmakeunbound را روی هر نماد فراخوانی می‌کند و سپس بسته را حذف می‌نماید. نام بسته‌ها به‌طور خودکار به حروف بزرگ (string-upcase) تبدیل می‌شوند.
–delete-all-packages
این گزینه –delete-package PKG را روی همهٔ بسته‌ها اعمال می‌کند، به جز چند بستهٔ موجود در لیست سیاه (keyword، roswell، ROS.SCRIPT.DUMP، و بستهٔ مربوط به نماد تابع main).
–delete-packages-except PACKAGE
این گزینه را می‌توان چندین بار مشخص کرد. این گزینه مشابه –delete-all-packages است با این تفاوت که PACKAGE را به لیست سیاه اضافه می‌کند. نام بسته‌ها به‌طور خودکار به حروف بزرگ (string-upcase) تبدیل می‌شوند.
–destroy-packages-sbcl
این یک گزینهٔ مخصوص SBCL است که از روش‌های فوق تهاجمی‌تر عمل می‌کند (بیش از ۱۰ مگابایت کاهش حجم). این گزینه سیستم بسته‌ها را با دستکاری جداول داخلی آن‌ها، پاکسازی کش‌های مربوط به package-use-list و موارد مشابه تخریب می‌کند. لیست سیاه بین –delete-all-packages و –destroy-packages-sbcl مشترک است. با این حال، این روش fmakunbound/makunbound را فراخوانی نمی‌کند، بنابراین ترکیب این دو روش می‌تواند منجر به کاهش حجم بسیار تهاجمی‌تری شود. با توجه به ماهیت این گزینه، بهتر است آن را به عنوان آخرین روش (یعنی سمت راست‌ترین گزینه) مشخص کنید.
–purify, –no-purify
این گزینه بین CCL، SBCL و CMUCL مشترک است. به منظور بهبود عملکرد بعدی GC، تمام اشیاء را به فضای ایستا (static space) که توسط GC پویش نمی‌شود منتقل می‌کند. خالص‌سازی (purification) به‌طور پیش‌فرض فعال است.
–impurify, –no-impurify
این یک گزینهٔ مخصوص CCL است (به‌طور پیش‌فرض فعال است). تمام اشیاء را پیش از ذخیرهٔ ایمیج به فضای پویا (dynamic space) منتقل می‌کند. این کار امکان جمع‌آوری اشیاء فضای ایستا توسط GC را فراهم می‌سازد. هنگامی که خالص‌سازی فعال باشد، پیش از اجرای GC خالص‌ساز، تمام اشیاء را ناخالص (impurify) می‌کند.
–delete-debug-info
اطلاعات اشکال‌زدایی توابع (مورداستفاده برای نمایش stack frame و غیره)، و همچنین موقعیت سورس‌کد و اطلاعات منسوخ‌شدگی نمادهای مختلف را حذف می‌کند. تنها مخصوص SBCL است. این گزینه تأثیر زیادی دارد (بیش از ۱۰ مگابایت کاهش).
–delete-macro-definitions, –delete-compiler-macro-definitions
با این فرض که در زمان اجرا هیچ کامپایل یا تفسیر کدی انجام نخواهد شد، تمام تعاریف مربوط به ماکروها و compiler-macroها را حذف می‌کند. این گزینه باید بین پیاده‌سازی‌های مختلف قابل حمل (portable) باشد. در SBCL حدود ۲ مگابایت کاهش حجم ایجاد می‌کند.
–delete-compiler-information-sbcl
این یک گزینهٔ مخصوص SBCL است که از روش‌های فوق تهاجمی‌تر است (حدود ۴ مگابایت کاهش). علاوه بر تعاریف ماکرو و compiler-macro، سیستم‌های کامپایلر داخلی SBCL را نیز با حذف اطلاعات inlining، مبدل IR1 و IR2 (یا VOP) تخریب می‌کند.

sbcl(1) ros(1) ros-init(1)

تیم پروژهٔ Roswell.