ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
How I built my own Turing-complete programming language engine from scratch using Go ๐Ÿš€
Dev.toDev.to
Backend

Go ๊ธฐ๋ฐ˜ Zero Dependency Turing-complete ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ตฌํ˜„

How I built my own Turing-complete programming language engine from scratch using Go ๐Ÿš€

alejandrofinkelberg622026๋…„ 6์›” 23์ผ1๋ถ„advanced

Context

๊ณ ์ˆ˜์ค€ ํ”„๋ ˆ์ž„์›Œํฌ ์˜์กด์„ฑ์„ ๋ฐฐ์ œํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘์˜ ์ง์ ‘ ์ œ์–ด ํ•„์š”์„ฑ ๋Œ€๋‘. AST Evaluation ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ƒํƒœ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€์™€ ํšจ์œจ์ ์ธ ์Šค์ฝ”ํ”„ ๊ด€๋ฆฌ ์ฒด๊ณ„ ๊ตฌ์ถ• ๋ชฉ์ .

Technical Solution

  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐ์ œํ•œ Zero External Dependency ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ํ—ค๋“œ ์ตœ์†Œํ™”
  • Dynamic Node Evaluation ๋ฐฉ์‹์„ ์ ์šฉํ•˜์—ฌ ํ‰๊ฐ€ ๋กœ์ง๊ณผ ์‚ฌ์šฉ์ž ์Šคํฌ๋ฆฝํŠธ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ตฌ์กฐ ์„ค๊ณ„
  • Variable Binding ๋ฐ If Conditionals ๊ตฌํ˜„์„ ํ†ตํ•œ Turing-complete ์–ธ์–ด ๋ช…์„ธ ์ถฉ์กฑ
  • While ๋ฐ For ๋ฃจํ”„์˜ ์ค‘์ฒฉ ์‹คํ–‰ ์‹œ State Leak ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์Šค์ฝ”ํ”„ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋„์ž…
  • ๋‹จ์ผ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ๋ฐฐํฌ ํšจ์œจ์„ฑ ๋ฐ ์‹คํ–‰ ์†๋„ ์ตœ์ ํ™”

1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์„ค๊ณ„ ์‹œ Evaluation Logic๊ณผ Workspace๋ฅผ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒํƒœ ์˜ค์—ผ ๋ฐฉ์ง€

2. ์ค‘์ฒฉ ๋ฃจํ”„ ๊ตฌ์กฐ์—์„œ ๋ณ€์ˆ˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ Scope ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€ํ† 

3. ์™ธ๋ถ€ ์˜์กด์„ฑ ์ œ๊ฑฐ๋ฅผ ํ†ตํ•œ ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐฐํฌ ํ™˜๊ฒฝ์˜ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์ด์  ๋ถ„์„

์›๋ฌธ ์ฝ๊ธฐ