ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด Perl 5.30.0 ์ถœ์‹œ

11๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ์ผ์–ด๋‚ฌ๋‹ค Perl ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ƒˆ๋กœ์šด ์•ˆ์ • ๋ฒ„์ „ ์ถœ์‹œ - 5.30. ์ƒˆ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ค€๋น„ํ•˜๋ฉด์„œ ์•ฝ 620๋งŒ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉฐ, ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ 1300๊ฐœ์˜ ํŒŒ์ผ์— ์˜ํ–ฅ์„ ๋ฏธ์ณค์œผ๋ฉฐ 58๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Branch 5.30์€ 5.30.1๋…„ ์ „์— ์Šน์ธ๋œ ๊ณ ์ • ๊ฐœ๋ฐœ ์ผ์ •์— ๋”ฐ๋ผ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” 5.30.0๋…„์— ํ•œ ๋ฒˆ์”ฉ ์ƒˆ๋กœ์šด ์•ˆ์ •์ ์ธ ๋ถ„๊ธฐ๋ฅผ ์ถœ์‹œํ•˜๊ณ  5.30๊ฐœ์›”๋งˆ๋‹ค ์ˆ˜์ • ์ถœ์‹œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•ฝ ํ•œ ๋‹ฌ ํ›„์—๋Š” Perl 5.26 ๊ตฌํ˜„ ์ค‘์— ํ™•์ธ๋œ ๊ฐ€์žฅ ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” Perl 5.31์˜ ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค๋ฅผ ์ถœ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. Perl 2020 ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ 5.32 ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์œผ๋ฉฐ, ์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋Š” ํ–ฅํ›„ ์ค‘์š”ํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ํ™•์ธ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋ฆด๋ฆฌ์Šค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ—˜์ ์ธ ๋ธŒ๋žœ์น˜ XNUMX์˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋„ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ XNUMX๋…„ XNUMX์›”์— Perl XNUMX์˜ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ตฌ์„ฑ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์—ด์‡  ๋ณ€๊ฒฝ:

  • "" ์ž‘์—…์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ •๊ทœ์‹์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.(?<!๋ฌด๋Šฌ)"๊ทธ๋ฆฌ๊ณ "(?<=ํŒจํ„ด)ยป ์ด์ „์— ์ฒ˜๋ฆฌ๋œ ๋ช…๋ช…๋œ ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ํŒจํ„ด ์ •์˜๋Š” ์ฐธ์กฐ์ ์œผ๋กœ๋ถ€ํ„ฐ 255์ž ์ด๋‚ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • "{m,n}" ์ •๊ทœ์‹ ๋ธ”๋ก์˜ ํฌ๊ธฐ ์ง€์ •์ž("n")์˜ ์ตœ๋Œ€๊ฐ’์ด 65534๋กœ ์ฆ๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•œ์ • ์ถ”๊ฐ€ ์ง€์› ๋‹ค์–‘ํ•œ ์œ ๋‹ˆ์ฝ”๋“œ ์„ธํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ •๊ทœ์‹์—์„œ ํŠน์ • ๋ฌธ์ž ๋ฒ”์ฃผ๋ฅผ ๊ฐ•์กฐ ํ‘œ์‹œํ•˜๋Š” ๋งˆ์Šคํฌ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, โ€œqr! \p{nv= /(?x) \A [0-5] \z / }!โ€ ํƒœ๊ตญ์–ด ๋˜๋Š” ๋ฒต๊ณจ์–ด ์ˆซ์ž ์ฒ ์ž๋ฅผ ํฌํ•จํ•˜์—ฌ 0์—์„œ 5๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ์ •์˜ํ•˜๋Š” ๋ชจ๋“  ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ •๊ทœ์‹์— ๋ช…๋ช…๋œ ๋ฌธ์ž์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋‚ด๋ถ€ ํŒจํ„ด(qr'\N{name}');

  • ์œ ๋‹ˆ์ฝ”๋“œ ์‚ฌ์–‘ ์ง€์›์ด ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 12.1. ์‹คํ—˜์  ๊ฐœ๋ฐœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ˜ธ์ถœ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. sv_utf8_downgrade ๋ฐ sv_utf8_decode, C ์–ธ์–ด ํ™•์žฅ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ž‘์—…(-Accflags='-DUSE_THREAD_SAFE_LOCALE')์„ ์ง€์›ํ•˜๋Š” ๋กœ์ผ€์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜์—ฌ Perl์„ ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์ด๋Ÿฌํ•œ ๊ตฌํ˜„์ด Perl์˜ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ๋ฒ„์ „์„ ๋นŒ๋“œํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ ์ด์ œ๋Š” ๋ชจ๋“  ๋นŒ๋“œ์—์„œ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ "-Dv"(ํ–ฅ์ƒ๋œ ๋””๋ฒ„๊น… ์ถœ๋ ฅ) ๋ฐ "-Dr"(์ •๊ทœ์‹ ๋””๋ฒ„๊น…) ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ •๊ทœ์‹ ๋””๋ฒ„๊น… ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • ์ด์ „์— ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์ด์ œ ์ค„ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ ๋ฐ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ—ˆ์šฉ ๋งŒ ์‚ฌ์šฉ ๋ฌธ์ž์†Œ (๋ณตํ•ฉ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).
    • ๋‹จ์ข… ์ •๊ทœ์‹์—์„œ "{" ๋ฌธ์ž๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๊ฒƒ์€ ๊ธˆ์ง€ ":utf8" ํ•ธ๋“ค๋Ÿฌ์™€ ํ•จ๊ป˜ sysread(), syswrite(), recv() ๋ฐ send() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณธ์งˆ์ ์œผ๋กœ ์ž˜๋ชป๋œ ์กฐ๊ฑด๋ฌธ(์˜ˆ: "my $x if 0")์— "my" ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ธˆ์ง€๋ฉ๋‹ˆ๋‹ค.
    • ํŠน์ˆ˜ ๋ณ€์ˆ˜ โ€œ$*โ€ ๋ฐ โ€œ$#โ€์— ๋Œ€ํ•œ ์ง€์›์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
      dump() ํ•จ์ˆ˜์˜ ์•”์‹œ์  ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ œ CORE::dump()๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ•จ).

    • File::Glob::glob ํ•จ์ˆ˜๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(File::Glob::bsd_glob์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ).
    • ์ž˜๋ชป๋œ ์œ ๋‹ˆ์ฝ”๋“œ ์‹œํ€€์Šค ๋ฐ˜ํ™˜์— ๋Œ€ํ•œ pack() ๋ณดํ˜ธ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • XS ์ฝ”๋“œ(C ๋ธ”๋ก)์—์„œ UTF-8๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋งคํฌ๋กœ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ง€์› ์ข…๋ฃŒ๊ฐ€ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๊นŒ์ง€ ์—ฐ๊ธฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์„ฑ๋Šฅ ์ตœ์ ํ™”:
    • UTF-8์—์„œ ๋ฌธ์ž ๋ ˆ์ด์•„์›ƒ์œผ๋กœ์˜ ๋ณ€ํ™˜ ์ž‘์—…์ด ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ฝ”๋“œ ํฌ์ธํŠธ), ์˜ˆ๋ฅผ ๋“ค์–ด ord(โ€œ\x7fffโ€) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ด์ œ 12% ๋” ์ ์€ ๋ช…๋ น์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. UTF-8 ๋ฌธ์ž ์‹œํ€€์Šค์˜ ์ •ํ™•์„ฑ์„ ํ™•์ธํ•˜๋Š” ์ž‘์—… ์„ฑ๋Šฅ๋„ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • finalize_op() ํ•จ์ˆ˜์˜ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๋™์ผํ•œ ๋ฌธ์ž๋ฅผ ์ถ•์†Œํ•˜๊ณ  ์ •๊ทœ์‹์—์„œ ๋ฌธ์ž ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์•ฝ๊ฐ„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ตœ์ ํ™”๋จ ๋ถ€ํ˜ธ ์žˆ๋Š” ์œ ํ˜• ์ •์˜๋ฅผ ๋ถ€ํ˜ธ ์—†๋Š” ์ •์˜๋กœ ๋ณ€ํ™˜(IV์—์„œ UV๋กœ)
    • ์ •์ˆ˜๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•œ ์ž๋ฆฌ ๋Œ€์‹  ๋‘ ์ž๋ฆฌ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ํ›ˆ๋ จ๋œ LGTM์˜ ๋ถ„์„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
    • regcomp.c, regcomp.h ๋ฐ regexec.c ํŒŒ์ผ์˜ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ
    • ์ •๊ทœ์‹์—์„œ ASCII ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ "qr/[^a]/"์™€ ๊ฐ™์€ ํŒจํ„ด ์ฒ˜๋ฆฌ๊ฐ€ ํฌ๊ฒŒ ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Minix3 ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ง€์›์ด ๋ณต์›๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Microsoft Visual Studio 2019 ์ปดํŒŒ์ผ๋Ÿฌ(Visual C++ 14.2)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ํŒจํ‚ค์ง€์— ํฌํ•จ๋œ ๋ชจ๋“ˆ์˜ ์—…๋ฐ์ดํŠธ๋œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ๊ธฐ๋ณธ ๊ตฌ์„ฑ์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. B::๋””๋ฒ„๊ทธ ะธ ๋กœ์ผ€์ผ::์ฝ”๋“œ.

์ถœ์ฒ˜ : opennet.ru

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