๐Ÿซ ridiculosly Perl

๋ช‡๋…„์งธ ํŽ„์„ ๊ทธ๋ƒฅ ์“ฐ๊ณ  ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•ด

๊ฐœ์ธ์ ์œผ๋กœ ๋ช‡๋…„์งธ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค. ์กฐ๊ธˆ ๋กœ์ง์ด ๋ณต์žกํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๊ณ„์†ํ•ด์„œ ๋ถ™์—ฌ๊ฐ€๋ฉฐ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์ฒ˜์Œ์—” ๋‹จ์ˆœํ•˜๊ฒŒ Tcl-์œผ๋กœ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ ์–ด๋А ์ƒŒ๊ฐ€, Python, Ruby, Perl์œผ๋กœ ์‹ฌ์ง€์–ด ์ปค๋จผ๋ฆฌ์Šต์œผ๋กœ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์žฌ์ž‘์„ฑํ•˜๋ฉฐ ๋งˆ์Œ์— ๋“œ๋Š”๊ฑธ ๊ณ„์† ์จ์˜ค๊ณ  ์žˆ๋‹ค.

๊ฐ ์–ธ์–ด๋ณ„ ๊ตฌํ˜„์˜ ํŠน์ง•์€

(โ€ฆ์–ด์ฐจํ”ผ ์™„์ „ํžˆ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๊ฑฐ์ง€๋งŒ)

์ปค๋จผ๋ฆฌ์Šต
Sly์œผ๋กœ ์ž‘์—…ํ•˜๋ฉด์„œ ์žฌ๋ฐŒ๊ธด ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์†”์งํžˆ ์‰˜ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ CLI์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•ด ๋‚˜๊ฐ€๊ธฐ์—”, ASDF/SBCL์œผ๋กœ ๋นŒ๋“œํ•˜๋Š”๊ฒŒ ๋” ๊ท€์ฐฎ์„๋•Œ๊ฐ€ ์žˆ๋‹ค.
Python
LOC์ด ๊ฐ€์žฅ ์งง๋‹ค. ์‹ฌ์ง€์–ด ํŽ„๋ฒ„์ „์ด๋ž‘ ๋น„๊ตํ•˜๋ฉด 1/2 ๋ฐ–์—” ๋˜์ง€ ์•Š๋Š”๋‹ค. Generators ๊ฐ™์€๊ฑธ ๊ทธ๋ƒฅ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์‹ฌ์ง€์–ด ๋ฉ”๋ชจ๋ฆฌ๋ณต์žก๋„๋ฉด์—์„œ๋„ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค. (์ด๋ก ์ ์œผ๋กœ๋Š”, ์–ด์ฐจํ”ผ ๋ช‡๋ฐฑ์ค„ ๋˜์ง€๋„ ์•Š๋Š” ์ž…๋ ฅํŒŒ์ผ์„ ์ฝ๋Š” ๋ถ€๋ถ„์ด์ง€๋งŒ) โ€ฆPython ๋‚ด์žฅ โ€œBatteriesโ€๋งŒ์œผ๋กœ CLIํŒŒ์‹ฑ, shlex, ํ•˜์œ„ํ”„๋กœ์„ธ์Šค๊ด€๋ฆฌ, Pathname ์ฒ˜๋ฆฌ ๋“ฑ๋“ฑ ๊ฐ•๋ ฅํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๋‹ค. ใ…Žใ…Ž ordered-dict ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ์ง์ ‘๊ตฌํ˜„ํ•ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํŒŒ์ด์ฌ๋‹ต๊ฒŒ for..in์„ ์ง€์›ํ•˜๋Š” iterator์„ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค.
Ruby
์ฝ”๋“œ๊ฐ€ ์˜ˆ์˜๋‹ค. ์‹œ๊ฐ์ ์œผ๋กœ๋Š” ๊ฐ€์žฅ sparseํ•ด๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ ์˜๋ฏธ๋ก ์ ์œผ๋กœ๋Š” ๊ฐ€์žฅ density์ด ๋†’์•„์„œ ๊ทธ๋Ÿด๊ฑฐ ๊ฐ™๋‹ค. ํŒŒ์ด์ฌ์ฒ˜๋Ÿผ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ์œผ๋กœ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์“ธ๋งŒํ•˜๋‹ค. Block/Yield์„ ํ†ตํ•ด์„œ ๋‚ด์žฅํ•˜์ง€ ์•Š๋Š” ordered-map ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ ๊ฑธ ์ˆœํšŒํ•˜๊ธฐ ์ˆ˜์›”ํ–ˆ๋‹ค. Perl์Šค๋Ÿฌ์šด ํ‘œํ˜„์ด๋‚˜ C์–ธ์–ด์˜ ํŠน์ง•์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์“ฐ๋Š” ๊ฒƒ๋„ ํŽธํ•˜๋‹ค. (์˜ˆ: strftime)
Tcl
๋ญ”๊ฐ€ ์“ฐ๊ธด ํ–ˆ๋Š”๋ฐ ๋ฌ˜ํ•˜๊ฒŒ ๋ˆˆ์— ์ž˜ ์•ˆ๋“ค์–ด์˜จ๋‹ค. ์•„๋งˆ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•ด์˜ค์ง€ ์•Š์€ ํƒ“ ๊ฐ™๋‹ค. ๋งˆ์Œ๋จน์œผ๋ฉด ๋” ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ •์ œํ•ด ๋‚˜๊ฐˆ ๋ถ€๋ถ„์ด ๋งŽ์ง€๋งŒ, ํŽ„๋กœ ์žฌ์ž‘์„ฑํ•œ ์ดํ›„๋กœ ๋”์ด์ƒ ๊ฐœ์„ ํ•ด์˜ค์ง€ ์•Š์•˜๋‹ค. Tcllib ๋“ฑ โ€œBatteryโ€์ด ์žˆ๊ณ  ๋ฌธ์„œํ™”๋„ ์—„์ฒญ๋‚˜๊ฒŒ ์ž˜๋˜์–ด ์žˆ์ง€๋งŒ ๋ฌ˜ํ•˜๊ฒŒ ์š”์ฆ˜์—” ์†์ด ์ž˜ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค.
Perl
๊ตฌํ˜„์ค‘ ๋ผ์ธ์ˆ˜๋„ ๊ธธ๊ณ , ์กฐ๊ธˆ ์–ด์ƒ‰ํ•œ ๋ถ€๋ถ„๋„ ์—ฌ์ „ํžˆ ์žˆ๋‹ค(์˜ˆ: package vs. class), ๊ทธ๋ฆฌ๊ณ  ๋‚ด์žฅ๋ชจ๋“ˆ๋งŒ์œผ๋กœ ์ข€ ๋ถ€์กฑํ•ด์„œ ์™ธ๋ถ€ CPAN๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๋ถ€๋ถ„๋„ ์žˆ๋‹ค. (String::ShellQuote) โ€ฆ๊ทธ ์ด์™ธ์—” ๊ฐ€์žฅ ์ด์ƒํ•œ๋ฐ ๋งˆ์Œ์— ๋“ ๋‹ค. ใ…Žใ…Ž

๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์žฌ์ž‘์„ฑํ•œ๊ฑด ์ˆœ์ „ํžˆ ํฅ๋ฏธ๋กœ ๊ทธ๋ƒฅ ์žฌ์ž‘์„ฑ์„ ํ–ˆ์—ˆ์—ˆ๋‹ค. Tcl๋ฒ„์ „์„ ๊ณ„์† ์จ๋„ ๊ดœ์ฐฎ์•˜๊ฒ ์ง€๋งŒ. โ€“์ง€๊ธˆ์€ ๊ทธ๋ƒฅ Perl ๋ฒ„์ „๋งŒ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ๊ณ ์น˜๊ณ  ๊ธฐ๋Šฅ์„ ๋”ํ•ด๊ฐ€๊ณ  ์žˆ๋Š”๊ฑฐ ๊ฐ™๋‹ค.

๊ธฐ๋™ latency / ์„ฑ๋Šฅ / ์ฒด๊ฐ์ƒ ๋น ๋ฆฟํ•จ

๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ์ฒ˜๋Ÿผ ์‹คํ–‰์„ฑ๋Šฅ๋งŒ์ด ์•„๋‹ˆ๋ผ ๋‹จ์ˆœ ์‹œ์ž‘์‹œ๊ฐ„๋งŒ์„ ์ธก์ •ํ•ด๋ณด๋ฉด ํฅ๋ฏธ๋กญ๋‹ค:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
  $ time perl -e'1'
  real	0m0.007s
  user	0m0.004s
  sys	0m0.008s

  # Bash
  $ time tclsh <<< "puts 1"
  real	0m0.016s
  user	0m0.016s
  sys	0m0.000s

  $ time python3 -c '1'
  real	0m0.039s
  user	0m0.031s
  sys	0m0.008s

  $ time ruby -e ''
  real	0m0.132s
  user	0m0.117s
  sys	0m0.015s

โ€ฆํŽ„๊ณผ Tcl์ด ๊ฐ€์žฅ ๊ฐ€๋ณ๋‹ค. 1 2

์˜ˆ์ƒํ•˜๋Š”๊ฑด ๋ณ„๋‹ค๋ฅธ ๋ฐ”์ดํŠธ์ปดํŒŒ์ผ์ด๋‚˜ JIT์ดˆ๊ธฐํ™”, ํ˜น์€ ๊ณผ๋„ํ•˜๊ฒŒ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด๋ ค๊ณ  Builtins๋งŒ์„ ์œ„ํ•œ ๊ตฌ์กฐ์ฒด ๋“ฑ์„ ํ• ๋‹น/์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ๋ถ€๋‹ด์ด ์ ์„๊ฑฐ ๊ฐ™๊ธดํ•˜๋‹ค. (โ€ฆ์ •๋ง ๊ทธ๋Ÿด๊นŒ ์‹ถ๊ธดํ•˜๋‹ค๋งŒ)

strace/ltrace ๋“ฑ์œผ๋กœ ๋” ๋œฏ์–ด๋ด๋„ ํฅ๋ฏธ๋กœ์šธ๊ฑฐ ๊ฐ™๋‹ค.

๊ฐ„๋‹จํžˆ๋Š”, strict + warnings ๋ชจ๋“œ๋ฅผ ์ผœ๋ณด๋ฉด ํ™•์‹คํžˆ ์ข€ ๋” ๋ฌด๊ฑฐ์›Œ์ง„๋‹ค(๊ทธ๋ž˜๋„ ์—ฌ์ „ํžˆ ํŒŒ์ด์ฌ์ด๋‚˜ ๋ฃจ๋น„๋ณด๋‹ค ๊ฐ€๋ณ๋‹ค):

1
2
3
4
  $ time perl -Mstrict -Mwarnings -e'1'
  real	0m0.020s
  user	0m0.006s
  sys	0m0.014s

Subprocess + Pipe ์„ฑ๋Šฅ / ๋ฏธ์Šคํ…Œ๋ฆฌํ•˜๊ฒŒ ๋น ๋ฆ„

๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ๋ˆ…์Šค/freebsd ํ™˜๊ฒฝ์—์„œ๋Š” Gnome/KDE ๋“ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ Icewm + ์Šคํฌ๋ฆฝํŒ…ํ•ด์„œ ๋ช‡๋…„์งธ ํŽธํ•˜๊ฒŒ ์ž˜ ์“ฐ๊ณ  ์žˆ๋‹ค.

๊ฑฐ๊ธฐ์—์„œ ์“ฐ๋ ค๊ณ , ๋‹จ์ˆœํžˆ โ€˜์˜ˆ/์•„๋‹ˆ์˜คโ€™๋ฅผ ๋ฌป๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ Rofi-์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋ฌ˜ํ•˜๊ฒŒ ํŽ„๋ฒ„์ „์ด ๊ฐ€์žฅ ์ฒด๊ฐ์„ฑ๋Šฅ์ด ์ข‹๋‹ค. โ€ฆRofi์ด ์‹œ์ž‘๋œ ์ดํ›„์— Yes/No์ด ํ‘œ์‹œ๋˜๋Š”๋ฐ๊นŒ์ง€ ์ •๋ง ๋А๋ฆฐ ํ™˜๊ฒฝ(์˜ˆ: Raspberry Pi 3)์—์„œ ์‹คํ–‰ํ•  ๋•Œ์— ๋”œ๋ ˆ์ด๊ฐ€ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์„ ์ •๋„๋‹ค.

๋‹ค๋ฅธ Tcl, Python, Ruby ๋ฒ„์ „์€ ๋ญ”๊ฐ€ Rofi์€ ๋œจ์ง€๋งŒ, Yes/No์ด ์ถœ๋ ฅ๋  ๋•Œ๊นŒ์ง€ ์•ฝ๊ฐ„ ๋” ๋”œ๋ ˆ์ด๊ฐ€ ๋ˆˆ์— ๋›ด๋‹ค.

๋ญ”๊ฐ€ Subprocess Pipe์ฒ˜๋ฆฌ์— ํŽ„์€ heuristicํ•œ hack/trick์ด ๋” ํฌํ•จ๋˜์–ด ์žˆ์„๊ฑฐ ๊ฐ™๋‹ค. (๊ทธ๋ƒฅ ํŽ„5 ๋‚ด์žฅ IPC::Open2-๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ ๊ฒƒ ๋ฟ์ด์ง€๋งŒ)

Perl + Claude

์ด ์—ด์‹ฌํžˆ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ , ๊ณ„์†ํ•ด์„œ ๋œฏ์–ด๊ณ ์น˜๋ฉฐ ์‚ด๊ณ  ์žˆ๋Š” ํŽ„์Šคํฌ๋ฆฝํŠธ์— ์ตœ๊ทผ์—” Claude์„ ์ด์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜, ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›์œผ๋ฉด์„œ ์ง€๋‚ด๊ณ  ์žˆ๋‹ค. ์žฌ๋ฐŒ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ์ฒ˜๋Ÿผ ํŽ„ ์ž์ฒด์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์žˆ๋Š”๊ฒƒ์ฒ˜๋Ÿผ, ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ํŽ„์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ๋ฆ„๊นŒ์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋ฆฌ๋ทฐ๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค:

  • โœ… What's Done Well
  • Structure & Organization

    • Clean separation of concerns: argument parsing, file reading, downloading, and formatting utilities are all in distinct subs.
    • Dnldr::OrderedDict package is a nice touch for maintaining insertion order (since Perl hashes don't guarantee it).
    • The POD changelog is a good habit.
  • Modern Perl Practices

    • use strict; use warnings โ€” good.
    • use feature qw(try) with no warnings qw(experimental::try) โ€” reasonable use of the modern try/catch syntax.
    • use utf8 and use open ':std', ':encoding(UTF-8)' โ€” proper Unicode handling.

์ข‹์€ ๋ถ€๋ถ„๋งŒ ๋ณต๋ถ™ํ–ˆ๊ณ , ๋ฒ„๊ทธ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์ค€๊ฑฐ๋‚˜ minor suggestions๋„ ํฅ๋ฏธ๋กญ๋‹ค.

LLM/AI ๋•๋ถ„์—๋ผ๋„ ์•„๋งˆ ๊ณ„์†ํ•ด์„œ ๋” ํŽ„์„ ์žฌ๋ฐŒ๊ฒŒ ์“ฐ๊ฒŒ ๋ ๊ฑฐ ๊ฐ™๋‹ค.

๊ทธ๋ƒฅ ๋งŒ์กฑ์Šค๋Ÿฝ๊ณ  ์•ž์œผ๋กœ๋„ ์•„๋งˆ๋„

์‚ฌ์‹ค ํŒŒ์ด์ฌ์œผ๋กœ ์งœ๊ณ  ๊ณ„์† ์จ์™€๋„ ๋ฌด๋‚œํ•˜๊ฒŒ ์ž˜ ์ผ์„๊ฑฐ ๊ฐ™๋‹ค. ์–ด๋А ๋ฆฌ๋ˆ…์Šค/freebsd ์ปดํ“จํ„ฐ๋“  ํŒŒ์ด์ฌ3 ์ •๋„ ์„ค์น˜ํ•˜๋Š”๊ฑด ๋ณ„๋กœ ์–ด๋ ต์ง€ ์•Š์œผ๋‹ˆ๊นŒ.

ํ•˜์ง€๋งŒ ๊ทธ๋ƒฅ ์ ๋‹นํžˆ ๊น”๋”ํ•˜๊ฒŒ ํŽ„์ด ์ž˜ ๋™์ž‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€์ €๋ถ„ํ•ด ๋ณด์ด์ง€๋งŒ, ๊ตฌ์กฐ๋ฅผ ๊น”๋”ํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์žก์•„๋†“๊ณ  ์ž‘์„ฑํ•ด์™€์„œ ๊ทธ๋Ÿญ์ €๋Ÿญ ๋‚˜์˜์ง€ ์•Š๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ผ์ธ์ˆ˜๊ฐ€ ์ ๋‹ค๊ฑฐ๋‚˜, ์ฝ”๋“œ๊ฐ€ ์˜ˆ๋ป๋ณด์ด๊ฑฐ๋‚˜ ํ•˜๋Š”๊ฑด ๋ณ„๋กœ ๊ด€์‹ฌ์ด ์—†๋‹ค. โ€“๊ทธ๋Ÿฐ ์ทจํ–ฅ๋†€์Œ / โ€˜์ฝ”๋“œ๋ฆฌ๋ทฐโ€™๋†€์ด๋ฅผ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ˆ๊นŒ. ใ…Žใ…Ž

ํŒŒ์ด์ฌ์ฒ˜๋Ÿผ ๋‚ด์žฅ ๋ฐฐํ„ฐ๋ฆฌ๊ฐ€ ํ›Œ๋ฅญํ•˜๊ฑฐ๋‚˜ asyncio์„ ๋‚ด์žฅ์ง€์›ํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , ๋ฃจ๋น„์ฒ˜๋Ÿผ โ€˜Poeticโ€™ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ํ•˜๋Š”๊ฒƒ๋„ ์•„๋‹ˆ์ง€๋งŒ ๊ทธ๋ƒฅ ๊ดœ์ฐฎ๋‹ค. ๊ทธ๋ฆฌ๊ณ  โ€˜๋‚จ๋“ค์ดโ€™ ๋งํ•˜๋“ฏ์ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„ค ํ•˜๋Š” ํ—›์†Œ๋ฆฌ๋„ ์•„๋‹Œ๊ฑฐ ๊ฐ™๋‹ค. ์ด์   ๊ทธ๋Ÿด ์ •๋„๋ฅผ ์ง€๋‚˜์ณ์˜จ๊ฑฐ ๊ฐ™๋‹ค. โ€“์˜คํžˆ๋ ค ChangeLog์„ perlpod์œผ๋กœ ๋ฌธ์„œํ™” ํ•ด๋†“๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•ด์˜ค๋ฉฐ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๊ฐ€ ๋œ๊ฑฐ ๊ฐ™๋‹ค.

Perl์€, Perl 5์€ ์ด์ƒํ•˜๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ๊ณ„์† ์“ฐ๋ฉด์„œ ์ฆ๊ฑฐ์šด๊ฑฐ ๊ฐ™๋‹ค. ๋ฌผ๋ก  ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๋„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฆ๊ฒ์ง€๋งŒ, ํŽ„์€ ์œ ๋… ๊ทธ๋ ‡์ง€ ๋ชปํ• ๊ฑฐ ๊ฐ™์ด ์ผ๊ฒฌ ๋ณด์ด์ง€๋งŒ ์ฆ๊ฒ๋‹ค๋Š”๊ฒŒ ์ด์ƒํ•˜๋‹ค.

Footnotes


1

๋ฌผ๋ก  Perl Moose ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์—„์ฒญ๋‚˜๊ฒŒ ๋А๋ ค์ง„๋‹ค.

2

์ปค๋จผ๋ฆฌ์Šต ๋ฒ„์ „์€ SBCL์œผ๋กœ ์ปดํŒŒ์ผ/๋นŒ๋“œํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ธก์ •ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ด ๊ฐ€์žฅ ์งง์€ ๋ฌธ์žฅ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ์‹œ๊ฐ„๋งŒ์ด ๊ถ๊ธˆํ–ˆ๋‹ค.