GNU Guile 3.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ผ์–ด๋‚ฌ๋‹ค ์„๋ฐฉํ•˜๋‹ค GNU ์†์ž„์ˆ˜ 3.0, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌด๋ฃŒ ๊ตฌํ˜„ ๊ณ„ํš, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Guile์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™•์žฅ์„ ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ์„ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Guile์€ GNU ์šด์˜ ์ฒด์ œ์˜ ๊ณต์‹ ํ™•์žฅ ๊ฐœ๋ฐœ ์–ธ์–ด์ž…๋‹ˆ๋‹ค.

Guile์˜ ์ค‘์‹ฌ์—๋Š” ํŠน๋ณ„ํ•œ ์ตœ์ ํ™” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ด์‹ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด ์„ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํšจ์œจ์ ์ธ ๊ฐ€์ƒ ๋จธ์‹ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Guile ๊ฐ€์ƒ ๋จธ์‹ ์€ C ๋ฐ C++์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์™€ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. Scheme ์–ธ์–ด ์™ธ์— ์‚ฌ์–‘ ์ง€์›์ด ๊ตฌํ˜„๋œ ์–ธ์–ด R5RS, R6RS ะธ R7RS, Guile ํ”„๋กœ์ ํŠธ๋Š” ECMAScript, Emacs Lisp ๋ฐ Lua(๊ฐœ๋ฐœ ์ค‘)์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์–ธ์–ด์šฉ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์—๋Š” HTTP ํ”„๋กœํ† ์ฝœ ์ž‘์—…, XML ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ๊ณผ ๊ฐ™์€ ํ‘œ์ค€ ์„œ๋น„์Šค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ชจ๋“ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

GNU Guile 3.0์˜ ์ฃผ์š” ํ˜์‹ ์€ ์ด์ „์— ์ œ๊ณต๋˜์—ˆ๋˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋”ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์—ฐ๊ฒฐ๋œ ํŠน์ˆ˜ ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰๋˜๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋„์ž…์ด์—ˆ์Šต๋‹ˆ๋‹ค. JIT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฆ‰์‹œ ๊ธฐ๊ณ„ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Guile ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์†๋„๋ฅผ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์ตœ๋Œ€ 4๋ฐฐ์˜ ์†๋„ ํ–ฅ์ƒ์ด ๋‚˜ํƒ€๋‚จ). JIT ์ปดํŒŒ์ผ๋Ÿฌ๋Š” x86-64, i686, ARMv7 ๋ฐ AArch64 ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

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

  • ์ƒˆ๋กœ์šด Scheme ์–ธ์–ด ์‚ฌ์–‘ ์ง€์› R7RS ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์— ์ •์˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“ˆ;
  • Guile ๊ฐ€์ƒ ๋จธ์‹ ์€ ํ•˜์œ„ ์ˆ˜์ค€ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜์—ฌ ๊ณ ๊ธ‰ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ์ •์˜ ๋ฐ ํ‘œํ˜„์‹ ๊ฒฐํ•ฉ ์ง€์›(์˜ˆ: "(define _ (begin (foo) #f))")
  • ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ์œ ํ˜•(โ€œ๊ธฐ๋กโ€)์˜ ํ†ตํ•ฉ ๊ตฌํ˜„์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ๋ณธ ์š”์†Œ(throw ๋ฐ catch)๊ฐ€ ์žฌ์ž‘์—…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ™•์žฅ ๊ตฌ๋ฌธ "else", "=>", "..." ๋ฐ "_"์— ๋Œ€ํ•ด ์ •์˜๋œ ๋ฐ”์ธ๋”ฉ์ž…๋‹ˆ๋‹ค.
  • http-request, http-get ๋ฐ ์›น ํด๋ผ์ด์–ธํŠธ์™€ ๊ด€๋ จ๋œ ๊ธฐํƒ€ ์ ˆ์ฐจ์— ์˜ฌ๋ฐ”๋ฅธ ์ธ์ฆ์„œ ํ™•์ธ๊ณผ ํ•จ๊ป˜ TLS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ํ†ต์‹  ์ฑ„๋„์„ ํ†ตํ•ด ์ฝ˜ํ…์ธ ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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