๊ตฌ๊ธ์ด ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌ๋ก ๊ฐ๋ฐํ Go ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ 1.26๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์ XNUMX ๋ฒ์ ์ผ๋ก ์ถ์๋์์ต๋๋ค. ์ด ์ธ์ด๋ ์ปดํ์ผ ์ธ์ด์ ๋์ ์ฑ๋ฅ๊ณผ ์คํฌ๋ฆฝํ ์ธ์ด์ ์ฅ์ (์ฝ๋ ์์ฑ์ ์ฉ์ด์ฑ, ๋น ๋ฅธ ๊ฐ๋ฐ ์๋, ์ค๋ฅ ๋ณดํธ ๋ฑ)์ ๊ฒฐํฉํ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ BSD ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
Go์ ๊ตฌ๋ฌธ์ Oberon ์ธ์ด์์ ์ผ๋ถ ์ฐจ์ฉํ C ์ธ์ด์ ์น์ํ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ธ์ด๋ ๋งค์ฐ ๊ฐ๊ฒฐํ์ง๋ง ์ฝ๋๋ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. Go ์ฝ๋๋ ๊ฐ์ ๋จธ์ ์ ์ฌ์ฉํ์ง ์๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ๋๋ ๋ณ๋์ ๋ฐ์ด๋๋ฆฌ ์คํ ํ์ผ๋ก ์ปดํ์ผ๋์ด(ํ๋กํ์ผ๋ง, ๋๋ฒ๊น ๋ชจ๋ ๋ฐ ๊ธฐํ ๋ฐํ์ ๋ฌธ์ ๊ฐ์ง ํ์ ์์คํ ์ด ๋ฐํ์ ๊ตฌ์ฑ ์์๋ก ํตํฉ๋จ) C ํ๋ก๊ทธ๋จ๊ณผ ๋น์ทํ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ ์ฒ์์๋ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ฉํฐ์ฝ์ด ์์คํ ์์์ ํจ์จ์ ์ธ ์๋์ ์ผ๋์ ๋๊ณ ๊ฐ๋ฐ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด์์ ์์ค์์๋ ๋ณ๋ ฌ ๊ณ์ฐ๊ณผ ๋ณ๋ ฌ ๋ฉ์๋ ๊ฐ์ ์ํธ์์ฉ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ๋๊ตฌ๊ฐ ๊ตฌํ๋ฉ๋๋ค. ์ด ์ธ์ด๋ ๋ํ ๋ฒํผ ์ค๋ฒ๋ฐ ๋ณดํธ ๋ฐ ๊ฐ๋น์ง ์์ง ๊ธฐ๋ฅ์ ๋ด์ฅํ๊ณ ์์ต๋๋ค.
์ ๋ฆด๋ฆฌ์ค์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์ ๊ฐ์ฒด์ ์์ฑ ๋ฐ ์ค์บ ์ฑ๋ฅ์ ํฅ์์ํค๋๋ก ์ค๊ณ๋ "greenteagc" ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ง์ด ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ "greenteagc"๋ฅผ ์ฌ์ฉํ์ ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋ฒํค๋๊ฐ 10~40% ๊ฐ์ํ๋ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
- ์๋ก์ด ๋ณ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ด์ฅ ํจ์ `new()`๋ฅผ ์ด์ ํผ์ฐ์ฐ์๋ก ์ง์ ํ์ฌ ๋ณ์์ ์ด๊ธฐ๊ฐ์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, `x := int64(300) ptr := &x` ๋์ `ptr := new(int64(300))`์ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
- ์ ๋ค๋ฆญ ํ์ ์ ์์ ์ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์์ ์๊ธฐ ์์ ์ ์ธ์๋ก ์ฐธ์กฐํ ์ ์์ต๋๋ค(ํ์ ์ ์๊ธฐ ์์ ์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ ์ ์์ต๋๋ค). ์๋ ์์ ์ ์ฒซ ๋ฒ์งธ ์ค์์ Adder๊ฐ ์๊ธฐ ์์ ์ ์ฐธ์กฐํ๋ ๊ฒ์ ๋ ์ด์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค. type Adder[A Adder[A]] interface { Add(A) A } func algo[A Adder[A]](x, y A) A { return x.Add(y) }
- cgo๋ฅผ ์ฌ์ฉํ์ฌ Go ์ฝ๋์์ C ํจ์๋ฅผ ํธ์ถํ ๋ ๋ฐ์ํ๋ ์ค๋ฒํค๋๊ฐ ์ฝ 30% ๊ฐ์ํฉ๋๋ค.
- 64๋นํธ ํ๋ซํผ์ ๋ฐํ์์ ์์ ์ ์ฃผ์ ๊ณต๊ฐ ๋ฌด์์ํ๋ฅผ ๊ตฌํํ๋ฏ๋ก, cgo๋ฅผ ํตํด ์ ๊ทผํ๋ C ์ฝ๋์ ์ทจ์ฝ์ ์ ์ ์ฉํ๋ ค๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์์ธก์ด ์ด๋ ค์์ง๋๋ค. "GOEXPERIMENT=norandomizedheapbase64" ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋ฌด์์ํ๋ฅผ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ๊ฐ ์ฌ๋ผ์ด์ค์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ด ์๋ ์คํ์ ํ ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ๋์ด๋ฌ์ผ๋ฉฐ, ์ด๋ ์ฑ๋ฅ ํฅ์์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- "go fix" ๋ช ๋ น์ด๋ ํต๊ณ์ ์ฝ๋ ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ analysis ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ์ฌ์์ฑ๋์์ต๋๋ค. modernize ํจํค์ง์์ ์ ๊ณตํ๋ ๋ถ์๊ธฐ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ผ๋ฉฐ, ์ด ๋ถ์๊ธฐ๋ ์๋ก์ด ์ธ์ด ๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋ ๊ฐ์ํ๋ฅผ ์ ์ํฉ๋๋ค. ๋ํ "//go:fix inline" ์ง์๋ฌธ์ผ๋ก ํ์๋ ๋ชจ๋ ํจ์ ํธ์ถ์ ์ธ๋ผ์ธ์ผ๋ก ํ์ฅํ๋ "inline" ๋ถ์๊ธฐ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- ์๋ก์ด ํจํค์ง์ธ crypto/hpke(HPKE - ํ์ด๋ธ๋ฆฌ๋ ๊ณต๊ฐ ํค ์ํธํ ๊ตฌํ), crypto/mlkem/mlkemtest ๋ฐ testing/cryptotest๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- AMD64 ์์คํ ์์ SIMD ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒกํฐ ์ฐ์ฐ์ ์คํํ ์ ์๋ ์ ์์ค ์ก์ธ์ค๋ฅผ ์ ๊ณตํ๋ ์คํ์ ์ธ simd/archsimd ํจํค์ง๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
- ์ง์ ๋ ํจ์ ์คํ ์ค์ ํ ๋น๋ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ ํ๊ฒ ์ด๊ธฐํ(0์ผ๋ก ์ค์ )ํ๊ธฐ ์ํ ์คํ์ ์ธ ํจํค์ง runtime/secret์ ์ถ๊ฐํ์ต๋๋ค.
- ๊ณ ๋ฃจํด ๋์ถ์ ๊ฐ์งํ๊ธฐ ์ํ ์คํ์ ์ธ ํ๋กํ์ผ์ธ goroutineleak๊ฐ runtime/pprof ํจํค์ง์ ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru
