Rust๋กœ ์ž‘์„ฑ๋œ POSIX ์œ ํ‹ธ๋ฆฌํ‹ฐ ์„ธํŠธ์™€ AV1 ๋””์ฝ”๋”

posixutils-rs 0.2.1 ํ”„๋กœ์ ํŠธ๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” POSIX ํ‘œ์ค€์— ๋ช…์‹œ๋˜์–ด ์žˆ๊ณ  ํ•ด๋‹น ํ‘œ์ค€์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” Rust ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ชจ์Œ(cp, mv, awk, make, vi, find, sort, wc, xargs, sh, m4, sed ๋“ฑ)์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ์—๋Š” ๊ธฐ์กด ํฌ๋ ˆ์ดํŠธ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. posixutils-rs ์ฝ”๋“œ๋Š” MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ์ฃผ๋กœ POSIX.2024 ์‚ฌ์–‘์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ค€์ˆ˜ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ์œผ๋ฉฐ ์ž‘์„ฑ์ž๊ฐ€ ๊ทธ ๊ธฐ๋Šฅ์ด ์ง€๋‚˜์น˜๊ฒŒ ๋ถ€ํ’€๋ ค์ง„ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๋Š” GNU ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ posixutils-rs๋Š” ๊ธฐ์กด ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ๊ธ‰ GNU ์œ ํ‹ธ๋ฆฌํ‹ฐ ์˜ต์…˜์„ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

Rust๋กœ GNU Coreutils ๊ตฌํ˜„์„ ๊ฐœ๋ฐœํ•˜๋Š” uutils ํ”„๋กœ์ ํŠธ์™€์˜ ์ฐจ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ๋ฒ”์œ„๊ฐ€ ๋” ๋„“๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” vi, awk, bc, m4, cron, c99 ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ฐ™์€ POSIX ์ง€์ • ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋˜๋ฉฐ, 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 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ๊ณต ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, Rust ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ AV1 ๋น„๋””์˜ค ์ธ์ฝ”๋”ฉ ํ˜•์‹์šฉ ๊ณ ์„ฑ๋Šฅ ๋””์ฝ”๋”๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” rav1d ํ”„๋กœ์ ํŠธ ๋ฐœํ‘œ๋„ ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ณ ์„ฑ๋Šฅ์œผ๋กœ ์œ ๋ช…ํ•œ dav1d ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋””์ฝ”๋” ์ฝ”๋“œ๋ฅผ Rust๋กœ ํฌํŒ…ํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ค€๋น„๋œ ํฌํŒ…์€ dav1d ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ API์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ์ž์ฒด ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋Œ€์‹  ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํŒ…ํ•˜๊ธฐ๋กœ ํ•œ ์ด์œ ๋Š”, ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  AV1 ํ˜•์‹ ์ž‘์—…์˜ ๋ชจ๋“  ๋ณต์žก์„ฑ์„ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ๊ฒ€์ฆ๋˜๊ณ  ํ…Œ์ŠคํŠธ๋œ ๋””์ฝ”๋”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ rav1d์˜ ๊ตฌํ˜„์€ dav6d๋ณด๋‹ค ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ 1% ๋А๋ฆฌ์ง€๋งŒ, ํ–ฅํ›„ ์ฝ”๋“œ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋™๋“ฑํ•œ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ณ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ ๊ฐ’ ๋””์ฝ”๋”ฉ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ํ•จ์ˆ˜๋“ค์„ ์–ด์…ˆ๋ธ”๋Ÿฌ์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ธ”๋ก ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค(dav1d์˜ ์–ด์…ˆ๋ธ”๋Ÿฌ ์ฝ”๋“œ ์‚ฌ์šฉ). ์ด ๋ธ”๋ก์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” Rust๋กœ ์ž‘์„ฑ๋œ ์ŠคํŠธ๋ฆผ ํŒŒ์‹ฑ ํ•จ์ˆ˜์˜ ๊ฒ€์ฆ์„ ๊ฑฐ์นœ ํ›„ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค(๊ณผ๊ฑฐ ๋น„๋””์˜ค ๋””์ฝ”๋”์˜ ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•œ ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด, ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ๊ณ ์ˆ˜์ค€ ํฌ๋งท ํŒŒ์‹ฑ ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ ์ €์ˆ˜์ค€ ๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€