힙도 GC도 수명 표기도 없는 시스템 언어 Goose, 자체 벤치마크서 C++보다 3.3배 빠르다고 주장
- 힙 할당자도 GC도 수명 표기도 없이 컴파일러가 정한 여러 개의 데이터 스택만으로 동작하는 시스템 언어 Goose를 Wouter van Oortmerssen이 공개함. 스택마다 크기가 변하는 값은 항상 맨 위 하나뿐이라 증가는 포인터 증가이고, 해제는 스택 top에 한 번 저장하는 것으로 끝남
- 16개 벤치마크에서 관용적 C++ 대비 3.3배, 손으로 최적화한 C++보다 1.16배, 안전한 Rust 최고 기록보다 1.12배 빠르고 메모리는 각각 1.9배, 1.3배, 1.2배 덜 쓴다고 저장소가 밝힘. 패배한 항목도 결과 페이지에 함께 공개함
- 참조는 배열이 자라도 계속 유효하고, 문자열·문자열 배열·가변 크기 필드를 가진 레코드가 포인터 없이 하나의 연속 블록으로 인라인됨. C++에서 160바이트에 별도 할당이던 레코드가 Goose에서는 29바이트에 할당 없음
- 1·2·4바이트 상대 오프셋인 링크로 만든 구조체는 위치 독립적이라 저장이 쓰기, 로딩이 읽기와 검증 패스가 되고, 워커는 메모리를 따로 가진 별도 프로그램으로 컴파일돼 락·아토믹·메모리 오더링이 언어에 없음
- C 파일 하나로 컴파일돼 C 컴파일러가 있는 곳이면 어디서나 돌고, TinyCC 백엔드로 빌드 단계 없이 실행되며, John Carmack이 해커뉴스에서 데이터 구조를 그대로 메모리 매핑해 네트워크 데이터를 바로 쓰는 점을 들어 호평함
Hacker News 의견들
자동 분석으로 데이터 스택을 여러 개 쓰고 크기 변하는 필드를 다루는 걸 보면 '이걸로 많은 게 된다'가 아니라 '거의 다 된다'가 됨. 상대 참조에 바이너리 검증까지 내장돼 있어서 데이터 구조를 그대로 메모리 매핑하고 네트워크 데이터를 바로 쓸 수 있음. 파일이나 네트워크 파싱이 필요 이상으로 100배 느린 경우가 많거든
저 트윗 로그인 없이도 읽을 수 있었음. 사이트는 goose programming language로 검색하면 바로 나옴
직접 IO 제로리드로 데이터 구조에 매핑하는 라이브러리를 만들어보던 중인데, 같은 방향으로 혼자 가고 있는 사람을 발견하면 반갑더라. 이건 훨씬 덜 야매로 보임
언어 만든 사람임, AMA. 저장소는 github.com/aardappel/goose임
할당 순서와 다르게 해제하면 어떻게 되나? 언어가 그걸 금지하나, 아니면 허용은 되는데 스택이 못 줄어드는 건가? 그리고 스택 개수는 어떻게 정하는지 궁금함
AI가 코드베이스 상당 부분을 썼다고 했는데, 새 개념을 그 규모로 굴리면서 정신줄 잡는 프로세스가 있나?
문서는 다 버리고 본인 말로 처음부터 다시 썼으면 좋겠음. 기계가 코드를 쓰는 시대인 건 받아들이는데, 뭐가 본인 설계고 뭐가 Claude가 만든 사고인지 알아야 쓸 생각이라도 하지. Claudese만 읽어서는 그걸 못 알아먹겠음
이거 쓸 이유를 못 찾겠음, C++ 대신에. 슬롭 텍스트 같기도 하고. 아니면 Why Goose 섹션이라도 봐야 하나
첫 화면에 TL;DR이 필요함. 목적이 뭐고 어떤 구멍을 메우는지, 유즈케이스가 뭔지가 먼저 보여야 계속 읽지
트리나 레코드, 직접 직렬화에 특히 잘 맞는 범용 시스템 언어 같음. 트리를 펼쳐서 그대로 다시 집어드는 쪽은 FlatBuffers 만든 사람답다고 느낌
JSON 읽어서 출력하고 끝나는 프로그램은 어떻게 만드나? JSON 메모리는 스택에 어떻게 잡히나? 파일에 따라 1K에서 1M까지 갈 텐데
아토믹 없이 memcpy로 큐를 건넌다는 게 어떻게 되는 건가? 워커가 스레드인지 프로세스인지 궁금하고, Rust나 C++보다 항상 빠른 건 아니지 않나
존 카맥이 이 프로젝트를 지지하는 것처럼 쓰는 건 왜임?
나도 비공개로 언어 만드는 중인데 region 기반 메모리 결론이 같아서 반갑다. HandmadeHero 커뮤니티에서 7년 전에 배워서 처음부터 목표로 잡았고, 호출 스택 여러 단계를 넘어 return하는 문법도 좋네. Odin 같은 선행 사례는 찾아봤나?
이건 컴파일러 escape analysis를 언어 차원에서 명시적으로 완벽하게 강제하는 건가? 그러면 프로그래머가 어떤 구조적 구석으로 몰리는지, 실제로 겪은 게 있나
Goose가 Lobster 대체인가, 아니면 서로 다른 니치인가?
Goose가 뭔지보다, Treesheets 만들어줘서 고맙다고 말하고 싶었음. 짧은 아웃라인과 무거운 Markdown 사이 어딘가에 쓰기 좋더라