مجموعه ای از ابزارهای کاربردی POSIX و رمزگشای AV1 که به زبان Rust نوشته شده است

انتشار پروژه posixutils-rs 0.2.1 با هدف توسعه مجموعه ای از ابزارهای خط فرمان ذکر شده در استاندارد POSIX در زبان Rust منتشر شده است و نیازمندی های آن (cp, mv, awk, make, vi, find, مرتب سازی، wc، xargs، sh، m4، sed و غیره). در طول توسعه، تا حد امکان، از بسته های جعبه موجود استفاده می شود. کد posixutils-rs تحت مجوز MIT توزیع شده است.

این پروژه عمدتاً بر روی دستیابی به انطباق با الزامات مشخصات POSIX.2024 متمرکز شده است و برنامه‌ای برای ارائه سازگاری با ابزارهای GNU، که عملکرد آن توسط نویسندگان به‌طور غیرمنطقی متورم شده است، ارائه نمی‌کند. با این حال، posixutils-rs قصد دارد محبوب‌ترین گزینه‌های ابزار پیشرفته GNU را که در اسکریپت‌های موجود یافت می‌شود، پیاده‌سازی کند.

تفاوت‌های پروژه uutils که پیاده‌سازی Coreutils گنو را در Rust توسعه می‌دهد، شامل دامنه وسیع‌تری از ابزارها، از جمله، ایجاد اجزای سیستم POSIX مانند vi، awk، bc، m4، cron و کامپایلر c99 است. و همچنین یک رویکرد حداقلی، که مستلزم ارائه تنها حداقل مجموعه مورد نیاز از گزینه های تعریف شده در مشخصات POSIX یا بدون انجام آنها مشکل ساز است. برنامه های مجموعه posixutils-rs در ابتدا به عنوان کد مستقل ارائه می شوند که می توانند در پروژه های دیگر استفاده شوند.

در حال حاضر، 55 ابزار توسعه یافته توسط این پروژه با POSIX مطابقت دارند و در مرحله پوشش آزمایشی هستند، 22 ابزار کاربردی عملکرد لازم را ارائه می دهند (اما پوشش آزمایشی هنوز اجرا نشده است)، 20 مورد در مرحله پیش نویس هستند، و کار روی 44 ابزار کاربردی انجام نشده است. هنوز شروع شده است از جمله ابزارهای کاربردی با قابلیت پیاده سازی شده: awk، basename، bc، cp، cut، chown، date، diff، file، find، grep، ls، nice، ps، sort، strings، tail، tr، tty، wc، uniq. از جمله ابزارهایی که کار روی آنها شروع نشده است: crontab, c17, cflow, ctags, gettext, ed, ex, iconv, lex, locale, mailx, make, patch, pax, sed, sh, sccs, yacc, uucp, vi .

تغییرات در نسخه جدید شامل اضافه شدن پیاده‌سازی‌های awk، m4، ps، realpath، join، time، fuser و gencat و همچنین پشتیبانی اولیه برای کار در محیط‌های مبتنی بر کتابخانه musl C و ارائه ftw است. کتابخانه ای برای مسابقه پیمایش درخت دایرکتوری محافظت شده توسط دولت.

علاوه بر این، می‌توان به اعلام پروژه rav1d اشاره کرد که در حال توسعه یک رمزگشای با کارایی بالا برای فرمت کدگذاری ویدیویی AV1 است که به زبان Rust نوشته شده است. توسعه با انتقال کد رمزگشای کتابخانه dav1d، که با عملکرد بالا مشخص می شود، به Rust انجام می شود. پورت آماده شده کاملاً با API کتابخانه dav1d سازگار است. انتخاب انتقال یک کتابخانه موجود به جای نوشتن نسخه خودمان با تمایل به استفاده از رمزگشای قبلاً اثبات شده و آزمایش شده به عنوان مبنایی توضیح داده می شود تا از مشکلات احتمالی سازگاری جلوگیری شود و تمام پیچیدگی های کار با قالب AV1 در نظر گرفته شود.

در شکل فعلی، پیاده سازی آماده شده rav1d از نظر عملکرد 6 درصد از dav1d عقب تر است، اما در آینده پس از بهینه سازی کد، برای دستیابی به برابری در عملکرد برنامه ریزی شده است. برای دستیابی به عملکرد بالا، از رویکردی استفاده شد که در آن توابع اساسی برای رمزگشایی مقادیر اولیه در اسمبلر به شکل بلوک‌های ناامن پیاده‌سازی می‌شوند (کد اسمبلی از dav1d استفاده می‌شود)، که داده‌ها پس از بررسی با تجزیه جریان در آن دریافت می‌شوند. توابع نوشته شده در Rust (تجربه گذشته در شناسایی آسیب‌پذیری‌ها در رمزگشاهای ویدیویی نشان می‌دهد که مشکلات عمدتاً در کد تجزیه فرمت سطح بالا به جای عملیات داده‌های سطح پایین ایجاد می‌شوند).

منبع: opennet.ru

اضافه کردن نظر