| ros-dump(1) | ros-dump(1) |
نام (NAME)
ros-dump - ایجاد یک ایمیج دامپشده از اسکریپت roswell
خلاصه دستور (SYNOPSIS)
ros [OPTIONS1...] dump [OPTIONS2...] MODE args...
OPTIONS1 گزینههای استاندارد roswell مانند -L یا -m LISP را مشخص میکند. OPTIONS2 گزینههای کاهش اندازهٔ ایمیج را مشخص میکند که در ادامه شرح داده میشوند. MODE یکی از مقادیر output یا executable است.
توضیحات (DESCRIPTION)
ros-dump یک ایمیج لیسپ دامپشده از وضعیت جاری پس از پردازش تمام گزینههای OPTIONS1 ایجاد میکند.
این دستور دارای دو حالت output و executable است. در هر دو حالت، محیط سراسری (بهعنوان مثال مقیدسازی سراسری به متغیرهای ویژه مانند *package*) در وضعیتی که بلافاصله پس از راهاندازی مجدد وجود دارد، همان محیطی است که هنگام دامپ شدن اسکریپت فعال بوده است.
ایمیج دامپشده معمولاً بین پیادهسازیهای مختلف و همچنین بین نسخههای مختلف آنها سازگار نیست.
حالتهای دامپ (DUMP MODES)
output [-f] [-o OUTPUT] NAME
اسکریپت roswell با نام NAME را بارگذاری کرده و وضعیت جاری لیسپ را در یک ایمیج ذخیره میکند.
فایل ایمیج بهطور پیشفرض به شکلی سازمانیافته در یک دایرکتوری داخلی از roswell ذخیره میشود؛ یعنی مکانی در $ROSWELL_INSTALL_DIR که بر اساس پیادهسازی فعلی، نسخهٔ آن و NAME دادهشده تعیین میگردد.
هنگامی که فایل خروجی از قبل وجود داشته باشد، دستور با یک کد خطا ناموفق میشود.
این ایمیج را میتوان با دستور ros -m IMAGE بارگذاری کرد. هنگام راهاندازی مجدد از روی ایمیج، زیردستورهای استاندارد roswell و آرگومانهای اضافی اسکریپت نیز در دسترس هستند؛ به عنوان مثال ros run برای ادامه با یک repl، یا --restart FUNC برای فراخوانی یک تابع خاص، که انعطافپذیری لازم را فراهم میآورد.
- -o OUTPUT
- ایمیج به جای مکان پیشفرض، در OUTPUT ذخیره میشود.
- -f
- در صورتی که فایل خروجی از قبل وجود داشته باشد، بازنویسی آن را تحمیل میکند.
executable NAME [-o OUTPUT]
هنگامی که یک اسکریپت با حالت executable دامپ میشود، ایمیج دامپشده به یک فایل باینری اجرایی مستقل تبدیل میشود که بهطور خودکار --restart main را اعمال میکند.
اگر OUTPUT مشخص شده باشد، فایل باینری حاصل در آن ذخیره میشود. در غیر این صورت، نام فایل خروجی از روی NAME تعیین شده و در همان دایرکتوری ذخیره میگردد. در ویندوز و در صورتی که SCRIPT دارای پسوند .ros باشد، نام فایل SCRIPT.exe خواهد بود. در سایر سیستمها، نتیجه SCRIPT (بدون پسوند) خواهد بود.
این قابلیت در SBCL، CCL، CMUCL، CLISP و ECL پشتیبانی میشود.
گزینههای کاهش اندازهٔ ایمیج (IMAGE REDUCTION OPTIONS)
این گزینهها پیوند برخی ارجاعات به اشیاء زمان اجرا را حذف میکنند و به 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) تخریب میکند.
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
تیم پروژهٔ Roswell.