پس از شش ماه توسعه، کتابخانه سیستمی GNU C Library (glibc) 2.36 منتشر شد که به طور کامل با الزامات استانداردهای ISO C11 و POSIX.1-2017 مطابقت دارد. نسخه جدید شامل اصلاحاتی از 59 توسعه دهنده است.
برخی از بهبودهای اجرا شده در Glibc 2.36 عبارتند از:
- پشتیبانی از فرمت جابجایی آدرس جدید DT_RELR (جابجایی نسبی) که به شما امکان می دهد اندازه جابجایی های نسبی را در اشیاء به اشتراک گذاشته شده و فایل های اجرایی پیوند داده شده در حالت PIE (قابل اجرا مستقل از موقعیت) کاهش دهید. استفاده از فیلد DT_RELR در فایلهای ELF نیاز به پشتیبانی از گزینه "-z pack-relative-relocs" در لینکر دارد که در نسخه binutils 2.38 معرفی شد.
- برای پلتفرم لینوکس، توابع pidfd_open، pidfd_getfd و pidfd_send_signal پیادهسازی شدهاند که دسترسی به عملکرد pidfd را فراهم میکنند که به مدیریت موقعیتهای استفاده مجدد از PID برای شناسایی دقیقتر فرآیندهای دسترسی به فایلهای نظارت شده کمک میکند (pidfd با یک فرآیند خاص مرتبط است و تغییر نمیکند، در حالی که PID میتواند پس از پایان فرآیند فعلی مرتبط با آن PID به فرآیند دیگری متصل شود.
- برای پلتفرم لینوکس، تابع process_madvise() اضافه شده است تا به یک فرآیند اجازه دهد فراخوانی سیستم madvise() را از طرف یک فرآیند دیگر صادر کند و فرآیند هدف را با استفاده از pidfd شناسایی کند. از طریق madvise()، میتوانید کرنل را در مورد ویژگیهای کار با حافظه برای بهینهسازی مدیریت حافظه پردازش آگاه کنید؛ به عنوان مثال، بر اساس اطلاعات ارسال شده، هسته میتواند شروع به انتشار حافظه رایگان اضافی کند. فراخوانی madvise() توسط فرآیند دیگری ممکن است در شرایطی مورد نیاز باشد که اطلاعات مورد نیاز برای بهینهسازی برای فرآیند فعلی ناشناخته است، اما توسط یک فرآیند کنترل پسزمینه جداگانه هماهنگ میشود، که میتواند به طور مستقل حذف حافظه بلااستفاده را از فرآیندها آغاز کند.
- برای پلتفرم لینوکس، تابع process_mrelease() اضافه شده است که به شما امکان می دهد سرعت انتشار حافظه را برای فرآیندی که اجرای آن را تکمیل می کند، افزایش دهید. در شرایط عادی، انتشار منبع و خاتمه فرآیند آنی نیستند و ممکن است به دلایل مختلف به تعویق بیفتند و در سیستمهای پاسخ اولیه حافظه فضای کاربر مانند oomd (ارائه شده توسط systemd) تداخل ایجاد کنند. با فراخوانی process_mrelease، چنین سیستم هایی می توانند به طور قابل پیش بینی بیشتری بازیابی حافظه را از فرآیندهای اجباری آغاز کنند.
- پشتیبانی از گزینه "no-aaaa" به پیاده سازی داخلی حل کننده DNS اضافه شده است، که به شما امکان می دهد ارسال درخواست های DNS برای سوابق AAAA (تعیین آدرس IPv6 با نام میزبان)، از جمله هنگام اجرای NSS را غیرفعال کنید. توابعی مانند getaddrinfo()، برای ساده کردن تشخیص مشکل. این گزینه بر پردازش پیوندهای آدرس IPv6 تعریف شده در /etc/hosts و فراخوانی getaddrinfo() با پرچم AI_PASSIVE تأثیری ندارد.
- برای پلتفرم لینوکس، توابع fsopen، fsmount، move_mount، fsconfig، fspick، open_tree و mount_setattr اضافه شدهاند که دسترسی به API هسته جدیدی را برای مدیریت نصب فایل بر اساس فضاهای نام mount فراهم میکند. توابع پیشنهادی به شما این امکان را می دهند که مراحل مختلف نصب را به طور جداگانه پردازش کنید (پردازش یک سوپر بلوک، به دست آوردن اطلاعات مربوط به سیستم فایل، سوار کردن، اتصال به یک نقطه مونت) که قبلاً با استفاده از تابع مشترک mount() انجام می شد. توابع جداگانه توانایی اجرای سناریوهای نصب پیچیده تر و انجام عملیات جداگانه مانند پیکربندی مجدد superblock، فعال کردن گزینه ها، تغییر نقطه نصب و انتقال به فضای نام دیگر را فراهم می کند. علاوه بر این، پردازش جداگانه به شما امکان می دهد دلایل خروجی کدهای خطا را دقیقاً تعیین کنید و چندین منبع را برای سیستم های فایل چند لایه مانند overlayf ها تنظیم کنید.
- localedef از پردازش فایل های تعریف محلی ارائه شده در کدگذاری UTF-8 به جای ASCII پشتیبانی می کند.
- توابع اضافه شده برای تبدیل کدهای چند بایتی mbrtoc8 و c8rtomb به مشخصات ISO C2X N2653 و C++20 P0482R6.
- پشتیبانی از نوع char8_t تعریف شده در پیش نویس استاندارد ISO C2X N2653 اضافه شده است.
- توابع arc4random، arc4random_buf، و arc4random_uniform اضافه شد که پوششهایی را روی فراخوانی سیستم getrandom و رابط /dev/urandom ارائه میدهند که اعداد شبه تصادفی با کیفیت بالا را برمیگرداند.
- هنگام اجرا بر روی پلت فرم لینوکس، از معماری مجموعه دستورات LoongArch استفاده شده در پردازنده های Loongson 3 5000 پشتیبانی می کند و RISC ISA جدید، مشابه MIPS و RISC-V را پیاده سازی می کند. در شکل فعلی، فقط از نسخه 64 بیتی LoongArch (LA64) پشتیبانی می شود. برای کار، به حداقل نسخه های binutils 2.38، GCC 12 و Linux kernel 5.19 نیاز دارید.
- مکانیسم پیش پیوند، و همچنین متغیرهای محیطی LD_TRACE_PRELINKING و LD_USE_LOAD_BIAS و قابلیتهای پیونددهنده مرتبط با آن، منسوخ شدهاند و در نسخههای بعدی حذف خواهند شد.
- کد برای بررسی نسخه هسته لینوکس و مدیریت متغیر محیطی LD_ASSUME_KERNEL حذف شد. حداقل نسخه هسته پشتیبانی شده هنگام ساخت Glibc از طریق فیلد ELF NT_GNU_ABI_TAG تعیین می شود.
- متغیر محیطی LD_LIBRARY_VERSION در پلتفرم لینوکس متوقف شده است.
منبع: opennet.ru