1+1 이진 트리 과제로 시작해 C로 함수형 언어 만든 개발자, 아레나 할당자와 GC까지 구현
- 데이터 구조 과제로 받은 1+1+1 이진 트리 평가 문제에서 출발해 C로 함수형 언어 graphLang을 만듦. 며칠 만에 클로저, 가비지 컬렉터, 자체 메모리 할당자, REPL, FFI까지 붙임.
- 평가기가 Add, Sub, Mul, Div를 구분할 필요가 없다고 보고 표현식을 Func Expr Expr | Val | Var로 줄임. 평가기는 함수가 무엇을 하는지 모른 채 적용 방법만 알면 됨.
- 노드 하나가 32바이트인데 malloc 헤더 16바이트가 붙어 노드당 48바이트가 되고, 1+1 평가에 144바이트가 필요해지자 아레나 할당자를 직접 작성함. 큰 블록을 한 번 잡고 노드를 쌓은 뒤 통째로 해제하는 방식.
- 변수를 넣으려고 C 해시 테이블을 직접 구현했고, Ben Hoyt의 How to implement a hash table (in C) 글을 참고했다고 밝힘. C 구현은 LITERAL, VAR, FUNC를 담는 태그된 공용체 구조체 하나로 정리됨.
Hacker News opinions
Ben Hoyt 해시 테이블 글 진짜 좋더라. 나도 C로 해시 테이블은 만들 수 없는 건 줄 알았는데 그 글 보고 생각이 바뀜.
배열도 따지고 보면 해시 테이블임. 튜토리얼 수준 구현은 쉽지만 동시성 해시 테이블은 또 다른 문제고.
CPython 해시 테이블 구현도 한번 봐봐. 실전 코드인데 의외로 읽을 만함.
근데 왜 C로 해시 테이블이 불가능하다고 생각한 거임? 그게 더 궁금함.
1999년 perl.plover.com/yak/lambda 글도 참고해봐. 163줄짜리 프로그램으로 1+1 계산하는 얘기고 90분 분량임.
tomstu.art/programming-with-nothing도 람다 계산법 입문으로 재밌음. fizzbuzz까지 감.
이런 설명 방식 좋음. '이거 하나만 하자, 아 망했네, (반복)' 흐름이라. 그래프 리덕션, 즉 텀 리라이팅이 평가라는 얘기도 맞고.
블로그 페이지 404 뜨는데?
아 젠장. /로 리다이렉트 걸어야겠음. 사이트는 바이브코딩한 거라 자바스크립트 쓰기 싫었음.