1024바이트 C 코드로 만든 Python 인터프리터

Making a Python interpreter in 1024 bytes

1024바이트 C 코드로 만든 Python 인터프리터

Austin Z. Henley가 주말 취미로 C 코드 1024바이트 안에 Python 인터프리터를 구현하는 데 도전했습니다. 전체 Python을 지원할 수는 없지만, 들여쓰기, if/else, for/while 루프, 함수 정의와 호출(재귀 포함), print, 주석 등 핵심 기능을 갖춘 미니 인터프리터를 만들었습니다. 파서는 재귀 하강 방식이며, 루프는 소스를 다시 파싱하는 방식으로 동작합니다. 코드 골프 기법을 활용해 최종적으로 1024바이트를 달성했고, 원본은 4800바이트가 넘습니다. 전체 소스는 GitHub에서 공개했습니다.

중간 표현 없이도 이렇게 멋진 일을 할 수 있다니, 정말 아름답습니다!
  1. jrdres

    코드를 보면 웃음이 나요, 정말 지저분하거든요. 이건 C4처럼 작지만 완전한 C 컴파일러가 아니라, 자신의 부분집합에 대해 오류 검사를 하는 그런 게 아니에요. 대신 이건 모든 지름길을 취하고 소스의 모든 것이 옳다고 그냥 가정하는 Sector C보다 더 나빠요.

    이 "Python"은 키워드에 대해 그냥 가정합니다:

    어떤 "f"는 "for [x] in range[y]"입니다 (정확히 그 형태만, 다른 for는 없음).

    어떤 "w"는 "while"입니다.

    어떤 "i"는 "if"입니다.

    어떤 "d"는 "def"입니다.

    어떤 "p"는 "print("입니다.

    지저분하고, 지저분해요.

    (또한 지저분한 것은 기사의 코드 조각이 github에 있는 "읽을 수 있는" 버전보다 주석이 더 많다는 점입니다. 무슨 일이 일어나고 있는지 이해하려면 기사가 필요해요.)

    이건 "Tiny Python"이라고 하기에는 너무 단순해요. 누군가 몇 KB 더 허용할 의향이 있다면, 적어도 리스트와 딕셔너리를 보고 싶어요—Lisp는 그것들을 할 수 있어요!

  2. teddyh

    실제로 이런 것이 필요한 사람들을 위해, Snek이 있습니다: <https://sneklang.org/> "Snek은 플래시와 RAM이 몇 KB밖에 안 되는 프로세서를 대상으로 하는 아주 작은 내장형 언어입니다."

  3. marcelo-earth

    기사를 읽으면서, Code Golf가 있다는 것을 방금 알게 되었다는 것이 믿기지 않아요. 저는 프로그래머로 10년 넘게 일했는데요.

    네, 놀라운 프로젝트입니다! 인간이 만든 것이라는 점이 좋아요 :)

  4. userbinator

    정확히 말하면 이것은 1024바이트의 C 코드이며, 컴파일하면 훨씬 더 큰 바이너리가 되고, Python의 아주 작은 부분집합을 구현합니다.

    루프는 뒤로 점프하고 각 반복마다 소스를 다시 파싱하여 작동합니다.

    이것은 DOS .bat 처리 방식입니다. Unix 스타일 셸도 같은지 확실하지 않아요. 그 "기능"을 악용할 필요가 없었거든요.

    여기 다른 댓글이 C4를 언급했지만, 또 다른 매우 밀도 높은(그리고 약간 더 큰, 실제로 의도적으로(!) "코드 골프"를 하지 않았기 때문에) 인터프리터로 J Incunabulum을 살펴보는 것이 좋을 수 있습니다:

    https://www.jsoftware.com/ioj/iojATW.htm

    더 일반적으로, 배열 프로그래밍 문화는 이러한 수준의 밀도를 표준으로 간주하는 것 같습니다:

    https://news.ycombinator.com/item?id=45800777

  5. stevefan1999

    솔직히 말해서, 가장 작은 해석 가능하고 실용적인 튜링 완전 VM이 무엇인지 궁금합니다. Python 인터프리터를 낮추는 brainfuck을 구현하거나, 심지어 타입 없는 람다 계산법이나 SKI 콤비네이터 인터프리터를 구현하는 것이 특히 하드웨어 부트스트래핑에 매우 유용할 것이라고 생각합니다.

    저는 SectorLisp https://justine.lol/sectorlisp/ 같은 것들을 말하는 것입니다.

  6. jeanmichelselli

    흥미롭네요. 특히 과거에 32KB 미만으로 완전한 BASIC 인터프리터를 제공했다는 것을 알 때 더욱 그렇습니다.

  7. shmoil

    저자는 바로 나를 놓쳤습니다.

    >> 가장 기본적인 코드인 1 + 2부터 시작했습니다.

    좋아요, 그걸 512/1024바이트에 어떻게 맞췄나요??? print(3 * * 1000)을 시도해 보셨나요?

  8. andai

    작성자의 다른 글:

    초소형 컴파일러를 만들어 봅시다

    https://news.ycombinator.com/item?id=36102460

이 날의 다른 글

2026-09-06