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

Go 1.18 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ถœ์‹œ๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์–ธ์–ด๋Š” ์ปดํŒŒ์ผ๋œ ์–ธ์–ด์˜ ๊ณ ์„ฑ๋Šฅ๊ณผ ์ฝ”๋“œ ์ž‘์„ฑ ์šฉ์ด์„ฑ ๋“ฑ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์†”๋ฃจ์…˜์œผ๋กœ Google์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ฐธ์—ฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. , ๊ฐœ๋ฐœ ์†๋„ ๋ฐ ์˜ค๋ฅ˜ ๋ฐฉ์ง€. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

Go์˜ ๊ตฌ๋ฌธ์€ Python ์–ธ์–ด์—์„œ ์ผ๋ถ€ ์ฐจ์šฉํ•œ C ์–ธ์–ด์˜ ์นœ์ˆ™ํ•œ ์š”์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์–ธ์–ด๋Š” ๋งค์šฐ ๊ฐ„๊ฒฐํ•˜์ง€๋งŒ ์ฝ”๋“œ๋Š” ์ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. Go ์ฝ”๋“œ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋…๋ฆฝํ˜• ๋ฐ”์ด๋„ˆ๋ฆฌ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ๋˜์–ด(ํ”„๋กœํŒŒ์ผ๋ง, ๋””๋ฒ„๊น… ๋ชจ๋“ˆ ๋ฐ ๊ธฐํƒ€ ๋Ÿฐํƒ€์ž„ ๋ฌธ์ œ ๊ฐ์ง€ ํ•˜์œ„ ์‹œ์Šคํ…œ์ด ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ํ†ตํ•ฉ๋จ) C ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋น„์Šทํ•œ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ์ฒ˜์Œ์—๋Š” ๋ณ‘๋ ฌ ์ปดํ“จํŒ…์„ ๊ตฌ์„ฑํ•˜๊ณ  ๋ณ‘๋ ฌ ์‹คํ–‰ ๋ฐฉ๋ฒ• ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•œ ์šด์˜์ž ์ˆ˜์ค€ ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ์˜ ํšจ์œจ์ ์ธ ์ž‘๋™์— ์ดˆ์ ์„ ๋งž์ถฐ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ์–ธ์–ด๋Š” ๊ณผ๋„ํ•˜๊ฒŒ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์—๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜ ๋ฐ ์œ ํ˜•(์ œ๋„ค๋ฆญ)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ๊ฑธ์ณ ๊ฒฐํ•ฉ๋œ ์œ ํ˜•์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•œ ์ง€์›์€ ๊ธฐ์กด ์ฝ”๋“œ์™€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. // ์„ค์ •๋œ ๊ฐ’ ํ•ฉ๊ณ„, int64 ๋ฐ float64 ์œ ํ˜•์— ์ž‘๋™ func SumIntsOrFloats[K Comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // ์ผ๋ฐ˜ ์œ ํ˜• ์ •์˜๊ฐ€ ํฌํ•จ๋œ ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜: type Number ์ธํ„ฐํŽ˜์ด์Šค { int64 | float64 } func SumNumbers[K ๋น„๊ต ๊ฐ€๋Šฅ, V ์ˆซ์ž](m map[K]V) V { var s V for _, v := ๋ฒ”์œ„ m { s += v } return s }

๊ธฐํƒ€ ๊ฐœ์„  ์‚ฌํ•ญ:

  • ํผ์ง• ์ฝ”๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ํ‘œ์ค€ ํˆดํ‚ท์— ํ†ตํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํผ์ง• ํ…Œ์ŠคํŠธ ์ค‘์— ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฌด์ž‘์œ„ ์กฐํ•ฉ ์ŠคํŠธ๋ฆผ์ด ์ƒ์„ฑ๋˜๊ณ  ์ฒ˜๋ฆฌ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ์‹œํ€€์Šค๊ฐ€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ƒ ์‘๋‹ต๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ด ๋™์ž‘์€ ๋ฒ„๊ทธ๋‚˜ ์ทจ์•ฝ์ ์„ ๋‚˜ํƒ€๋‚ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์ค‘ ๋ชจ๋“ˆ ์ž‘์—… ์˜์—ญ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์–ด ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ์ฝ”๋“œ๋ฅผ ๋™์‹œ์— ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Apple M1, ARM64 ๋ฐ PowerPC64 ํ”„๋กœ์„ธ์„œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์ด ๋Œ€ํญ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ ๋Œ€์‹  ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•œ ๋ฃจํ”„์˜ ์ธ๋ผ์ธ ์–ธ๋กค๋ง์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์œ ํ˜• ๊ฒ€์‚ฌ๊ฐ€ ์™„์ „ํžˆ ์žฌ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์ด์ „ ๋ฆด๋ฆฌ์Šค์— ๋น„ํ•ด ์ฝ”๋“œ ์„ฑ๋Šฅ์ด 20% ํ–ฅ์ƒ๋œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์ง€๋งŒ ์ปดํŒŒ์ผ ์ž์ฒด์—๋Š” ์•ฝ 15% ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์‹œ, ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šด์˜ ์ฒด์ œ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํšจ์œจ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์˜ ์ž‘๋™์ด ๊ฐœ์„ ๋˜์–ด ๋™์ž‘์„ ๋” ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€ net/netip ๋ฐ debug/buildinfo๊ฐ€ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. TLS 1.0 ๋ฐ 1.1์— ๋Œ€ํ•œ ์ง€์›์€ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. crypto/x509 ๋ชจ๋“ˆ์ด SHA-1 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ช…๋œ ์ธ์ฆ์„œ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Linux ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๋ ค๋ฉด ์ด์ œ ์ตœ์†Œ ๋ฒ„์ „ 2.6.32์˜ Linux ์ปค๋„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” FreeBSD์— ๋Œ€ํ•ด์„œ๋„ ์œ ์‚ฌํ•œ ๋ณ€๊ฒฝ์ด ์˜ˆ์ƒ๋˜๋ฉฐ(FreeBSD 11.x ๋ถ„๊ธฐ์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋จ) ์ž‘๋™ํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ FreeBSD 12.2๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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