Nim ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฆด๋ฆฌ์Šค 1.6.0

1.6๋…„์˜ ๊ฐœ๋ฐœ ๋์— ์ •์  ํƒ€์ดํ•‘์„ ์‚ฌ์šฉํ•˜๊ณ  Pascal, C++, Python ๋ฐ Lisp๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๋งŒ๋“ค์–ด์ง„ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด Nim XNUMX์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Nim ์†Œ์Šค ์ฝ”๋“œ๋Š” C, C++ ๋˜๋Š” JavaScript ํ‘œํ˜„์œผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„, ๊ฒฐ๊ณผ C/C++ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํŒŒ์ผ๋Ÿฌ(clang, gcc, icc, Visual C++)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ๋น„์šฉ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉด C์— ๊ฐ€๊นŒ์šด ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ. Python๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ Nim์€ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ๋ธ”๋ก ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ๋ณ„ ์–ธ์–ด(DSL) ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„๊ตฌ ๋ฐ ๊ธฐ๋Šฅ์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์˜ ์ฃผ๋ชฉํ• ๋งŒํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฐ˜๋ณต๊ธฐ์— ๋Œ€ํ•œ ์œ ํ˜• ๊ตฌํ˜„์ด ํฌํ•จ๋œ iterable[T] ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai resultassert sum(iota(3)) == 0 + 1 + 2 # ๋˜๋Š” 'iota( 3).ํ•ฉ'
  • ์„ ํƒ์ ์œผ๋กœ ํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ". EffectsOf" ์ฃผ์„์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ •์˜๋œ ๊ฒฝ์šฐ(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {. effectsOf: cmp. }
  • ์ƒˆ๋กœ์šด ๊ฐ€์ ธ์˜ค๊ธฐ ๊ตฌ๋ฌธ "import foo {.all.}"์ด ์ œ์•ˆ๋˜์–ด ๊ณต๊ฐœ ๊ธฐํ˜ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„๊ณต๊ฐœ ๊ธฐํ˜ธ๋„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด์˜ ๋น„๊ณต๊ฐœ ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด std/importutils ๋ชจ๋“ˆ๊ณผ privateAccess API๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ {.all.}์—์„œ system2 import nil echo system2.ThisIsSystem import os {.all.} echo ์ด์ƒํ•œ ํƒ€๊ฒŸ
  • ๋™์  ํ•„๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„ํŠธ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{โ€œa1โ€: {โ€œa2โ€: 10}} ์–ด์„ค์…˜ j.?a1.?a2.getInt == 10
  • ๋ธ”๋ก ์ธ์ˆ˜์— ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ fn(a = 1, b = 2, body1, body2) = fn(a = 1) ํ๊ธฐ: bar1 do: bar2
  • ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌํ„ฐ๋Ÿด์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} ์ฃผ์žฅ 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ช…๋ น์ค„์—์„œ Nim ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด "โ€”eval:cmd" ๋ช…๋ น์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 'nim โ€”eval:"echo 1โ€ณ').
  • nimscript ๋ฐฑ์—”๋“œ์— ๋Œ€ํ•œ ์ž์‹ ๋งŒ์˜ ํ™•์žฅ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ค๋ฅ˜์™€ ๊ด€๋ จ๋œ ์ปจํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌ๊ฒŒ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "--gc:arc" ๋ฐ "--gc:orc" ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋ฐฑ์—”๋“œ์—์„œ ์ •์ˆ˜ ๋ฐ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ์ฝ”๋“œ์˜ ์ •ํ™•์„ฑ๊ณผ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „์—๋Š” C ๋ฐฑ์—”๋“œ์—์„œ๋งŒ ์ž‘๋™ํ–ˆ๋˜ ๋ชจ๋“ˆ(์˜ˆ: std/prelude ๋ชจ๋“ˆ)๊ณผ JS, VM ๋ฐ nimscript ๋ฐฑ์—”๋“œ์˜ ํ˜ธํ™˜์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. C, JS ๋ฐ VM ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•œ stdlib ๋ชจ๋“ˆ ํ…Œ์ŠคํŠธ๊ฐ€ ํ™•๋ฆฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Apple Silicon/M1 ์นฉ, 32๋น„ํŠธ RISC-V, armv8l ๋ฐ CROSSOS ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • std/jsbigints, std/tempfiles ๋ฐ std/sysrand ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ, ์ˆ˜ํ•™, ๋ฌด์ž‘์œ„, json, jsonutils, os, typetraits, Wrapnils, ๋ชฉ๋ก ๋ฐ ํ•ด์‹œ ๋ชจ๋“ˆ์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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