PM-GAWK(1) دستورات کاربر PM-GAWK(1)

pm-gawk - حافظه پایدار برای دادهها و توابع gawk

truncate -s size heap.pma
export GAWK_PERSIST_FILE=heap.pma
gawk ...

truncate -s size heap.pma
GAWK_PERSIST_FILE=heap.pma gawk ...

truncate -s size heap.pma
alias pm='GAWK_PERSIST_FILE=heap.pma'
pm gawk ...                       # مختصر

unset GAWK_PERSIST_FILE               # غیرفعال کردن پایداری

export GAWK_PERSIST_FILE=other_heap.pma  # تغییر فایل هیپ

rm heap.pma                           # حذف فایل هیپ

دستور gawk نسخه 5.2 و بالاتر از قابلیت حافظه پایدار پشتیبانی می‌کند که می‌تواند متغیرها و توابع تعریف‌شده در اسکریپت را برای استفاده‌های بعدی در یک فایل ذخیره کند. این ویژگی که pm-gawk نامیده می‌شود، در GAWK: Effective AWK Programming و در Persistent Memory gawk User Manual شرح داده شده است.

ویژگی pm-gawk با فرستادن نام یک فایل هیپ که در ابتدا خالی است (تمام بایت‌های آن صفر است) از طریق متغیر محیطی GAWK_PERSIST_FILE به gawk فعال می‌شود. pm-gawk متغیرها و توابع تعریف‌شده توسط اسکریپت را برای استفاده در اجراهای بعدی gawk در فایل هیپ نگه‌داری می‌کند.

ویژگی pm-gawk حداقل دو مزیت در مقایسه با افزونه موجود rwarray دارد: امکان دسترسی در زمان ثابت (“زمان O(1)”) به عناصر مجزای آرایه‌های انجمنی پایدار را فراهم می‌سازد، و علاوه بر متغیرها می‌تواند توابع تعریف‌شده توسط اسکریپت را نیز ذخیره کند.

نمایش متغیرهای پایدار:

$ truncate -s 1G heap.pma            # ایجاد فایل هیپ
$ export GAWK_PERSIST_FILE=heap.pma  # متغیر محیطی عمومی
$ gawk 'BEGIN { print ++i }'
1
$ gawk 'BEGIN { print ++i }'
2
$ gawk 'BEGIN { print ++i }'
3

برای فرستادن متغیر محیطی بر اساس هر دستور به طور مجزا:

$ unset GAWK_PERSIST_FILE
$ GAWK_PERSIST_FILE=heap.pma gawk 'BEGIN { print ++i }'
4
$ GAWK_PERSIST_FILE=heap.pma gawk 'BEGIN { print ++i }'
5
$ GAWK_PERSIST_FILE=heap.pma gawk 'BEGIN { print ++i }'
6

برای کاهش شلوغی بصریِ فرستادن متغیر محیطی در هر دستور:

$ alias pm='GAWK_PERSIST_FILE=heap.pma'
$ pm gawk 'BEGIN { print ++i }'
7
$ pm gawk 'BEGIN { print ++i }'
8

برای خودداری از فعال‌سازی پایداری:

$ unset GAWK_PERSIST_FILE
$ gawk 'BEGIN { print ++i }'
1
$ gawk 'BEGIN { print ++i }'
1

برای فراموش کردن و پاک کردن همیشگی محتوای فایل هیپ:

$ rm heap.pma

متغیر محیطی GAWK_PERSIST_FILE حاوی نام یک فایل هیپ است که متغیرها و توابع تعریف‌شده توسط اسکریپت در آن ذخیره می‌شوند. اگر این متغیر محیطی برای gawk قابل مشاهده نباشد، قابلیت پایداری فعال نمی‌شود و gawk به روش سنتی و پیشین خود رفتار می‌کند.

حافظه پایدار gawk نخستین بار در gawk نسخه 5.2 ارائه شد.

آرنولد رابینز (Arnold Robbins)، نگه‌دارنده gawk، ویژگی pm-gawk را با استفاده از یک تخصیص‌دهنده حافظه پایدار (pma) که توسط ترنس کلی (Terence Kelly) ارائه شده بود، پیاده‌سازی کرد. یک پیش‌نمونه اثبات مفهوم اولیه از gawk پایدار پیش‌تر توسط Haris Volos، Zi Fan Tan و Jianan Li با استفاده از انشعابی از کدهای منبع رسمی gawk توسعه یافته بود.

شناخته شده است که سیستم‌فایل CIFS گنو/لینوکس موجب بروز مشکلاتی برای تخصیص‌دهنده حافظه پایدار می‌شود. از فایلی روی چنین سیستم‌فایلی همراه با pm-gawk استفاده نکنید.

در صورتی که نسخه فعلی gawk با نسخه‌ای که نخستین بار با یک فایل ذخیره‌سازی پشتیبان مشخص استفاده شده بود مطابقت نداشته باشد، pm-gawk یک پیام هشدار تولید می‌کند.

دستورالعمل‌های موجود در GAWK: Effective AWK Programming و Persistent Memory gawk User Manual را دنبال کنید. برای اشکالات احتمالی مربوط به پایداری (در مقابل سایر باگ‌های gawk که به پایداری مربوط نیستند)، لطفاً یک رایانامه به یک یا چند نشانی زیر برای Terence Kelly ارسال نمایید:

tpkelly@acm.org
tpkelly@eecs.umich.edu
tpkelly@cs.princeton.edu

gawk(1)، GAWK: Effective AWK Programming، و Persistent Memory gawk User Manual. در صورتی که سامانه Info روی سیستم شما نصب باشد، هر دو کتابچه راهنما باید در آن در دسترس باشند.

برای آخرین کدهای منبع و راهنما پیوند زیر را ببینید:

<https://web.eecs.umich.edu/~tpkelly/pma>

حق نشر © 2022 متعلق به Terence Kelly است.

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

اجازه داده می‌شود نسخه‌های اصلاح‌شده این صفحه راهنما تحت شرایط نسخه‌های عین به عین کپی و توزیع شوند، به شرطی که کل کار حاصل تحت شرایط اعلامیه مجوزی دقیقاً یکسان با این اعلامیه توزیع شود.

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

2025-06-01 Free Software Foundation