
Go가 좋긴 한데, C가 필요한 순간이 있잖아요
시스템 프로그래밍 세계에는 오래된 딜레마가 있어요. C는 성능과 이식성(portability) 면에서 여전히 최강인데, 쓰기가 너무 고통스럽다는 거예요. 메모리를 직접 관리해야 하고, 문자열 다루기가 불편하고, 빌드 시스템도 복잡하죠. 반면 Go는 문법이 깔끔하고 동시성(concurrency) 처리가 편하고 빌드가 간단한데, 런타임과 가비지 컬렉터(GC)가 포함되어 있어서 임베디드나 커널 수준의 저수준 프로그래밍에는 쓰기 어려워요.
Solod는 이 두 세계를 연결하려는 시도예요. Go 문법의 부분집합(subset)으로 코드를 작성하면, 그걸 순수 C 코드로 변환(트랜스파일)해주는 도구거든요. 트랜스파일러가 뭐냐면, 한 프로그래밍 언어의 소스 코드를 다른 프로그래밍 언어의 소스 코드로 변환해주는 도구예요. TypeScript가 JavaScript로 변환되는 것처럼, Solod는 Go(의 부분집합)를 C로 변환해주는 거죠.
어떤 식으로 동작하나요?
Solod의 기본 아이디어는 꽤 직관적이에요. Go 스타일의 문법으로 코드를 작성하되, Go의 모든 기능을 지원하는 게 아니라 C로 자연스럽게 매핑될 수 있는 기능들만 사용할 수 있게 제한한 거예요. 이게 "subset(부분집합)"이라고 부르는 이유인데, 말하자면 Go에서 C와 호환 가능한 부분만 뽑아낸 언어라고 보면 돼요.
예를 들어 Go의 가비지 컬렉터나 고루틴(goroutine) 같은 런타임 의존적인 기능은 빠져 있어요. 대신 기본 타입, 구조체(struct), 함수, 제어문, 배열 같은 핵심 문법은 그대로 쓸 수 있고, 이런 것들이 대응되는 C 코드로 변환되는 거죠. Go에서 func add(a int, b int) int라고 쓰면 C에서는 int add(int a, int b)로 바뀌는 식이에요.
이렇게 생성된 C 코드는 표준 C 컴파일러(gcc, clang 등)로 컴파일할 수 있어요. 즉, Solod로 작성한 코드는 C가 돌아가는 곳이면 어디서든 실행할 수 있다는 뜻이에요. 마이크로컨트롤러, 임베디드 시스템, 운영체제 커널 같은 환경에서도요.
왜 이런 프로젝트가 나왔을까요?
"그냥 C를 배우면 되는 거 아니야?"라고 생각할 수 있는데, 현실은 좀 더 복잡해요. C를 잘 쓰는 개발자를 찾기가 점점 어려워지고 있고, Go에 익숙한 개발자 풀은 계속 늘어나고 있거든요. 어떤 팀에서 임베디드 프로젝트를 해야 하는데 팀원 대부분이 Go 경험자라면, Solod 같은 도구가 의미가 있을 수 있어요.
또 하나의 관점은 코드 안전성이에요. C에서 가장 흔한 보안 취약점들 — 버퍼 오버플로우, 널 포인터 역참조, 메모리 누수 — 이런 것들의 상당 부분은 C의 유연한(사실은 위험한) 문법에서 비롯되거든요. Go 스타일의 더 엄격한 문법으로 코드를 작성하면, 이런 실수를 컴파일 전에 잡아낼 수 있다는 논리예요.
비슷한 시도들이 있었나요?
"X 언어로 쓰면 C로 변환"이라는 아이디어는 사실 꽤 오래된 거예요. 가장 유명한 사례 중 하나가 Cython인데, Python의 부분집합을 C로 변환해서 성능을 높이는 도구예요. 과학 계산이나 데이터 처리 분야에서 많이 쓰이죠.
Rust 진영에서는 C 대체를 아예 언어 차원에서 시도하고 있어요. Rust는 C 수준의 성능을 제공하면서도 메모리 안전성을 컴파일러가 보장해주거든요. 사실 Solod가 풀려는 문제의 상당 부분을 Rust가 이미 해결하고 있다고 볼 수도 있어요. 다만 Rust는 학습 곡선이 상당히 가파르다는 게 단점이고, Go에 이미 익숙한 개발자에게는 Solod의 접근법이 더 낮은 진입 장벽을 제공할 수 있어요.
Zig 역시 "더 나은 C"를 표방하는 언어인데, C와의 상호운용성(interoperability)이 뛰어나고 문법도 비교적 깔끔해요. 하지만 새로운 언어를 배워야 한다는 점은 동일하죠.
Solod의 독특한 포지션은 "새 언어를 배우지 않아도 된다"는 점이에요. Go를 이미 알고 있으면 바로 쓸 수 있다는 것, 그게 가장 큰 셀링 포인트예요.
현실적인 한계도 있어요
솔직히 말하면, 프로젝트가 아직 초기 단계라 실무에 바로 투입하기에는 무리가 있어요. Go의 핵심 기능 중 상당수(고루틴, 채널, 인터페이스, 가비지 컬렉션)가 빠져 있기 때문에, "Go로 코딩한다"기보다는 "Go 문법을 빌린 C"에 더 가깝거든요. 기존 Go 프로젝트의 코드를 그대로 가져다 쓸 수는 없고, Solod의 제약 조건 안에서 새로 작성해야 해요.
에러 처리, 표준 라이브러리 지원, 디버깅 도구 등도 아직 갖춰져야 할 부분이 많아요. 생성된 C 코드의 품질(가독성, 최적화 수준)도 프로젝트의 성숙도에 따라 달라질 거고요.
한국 개발자에게 어떤 의미가 있을까요?
국내에서도 임베디드, IoT, 자동차 소프트웨어 같은 분야에서 C 개발 수요가 꾸준히 있어요. 특히 삼성, LG, 현대 같은 대기업의 하드웨어 관련 부서에서는 C가 여전히 주력 언어죠. 이런 환경에서 Go 경험을 가진 개발자가 점점 늘어나고 있으니, Solod 같은 도구의 잠재적 수요는 분명 있어요.
당장 프로덕션에 쓰기보다는, 프로그래밍 언어론에 관심 있는 분들이 트랜스파일러가 어떻게 동작하는지 공부하는 교육용 프로젝트로 살펴보면 좋을 것 같아요. 소스 코드가 공개되어 있으니, 파서(parser)와 코드 제너레이터(code generator)의 구현을 직접 읽어보는 것도 좋은 학습이 될 거예요.
정리하자면
Solod는 "Go의 편리한 문법 + C의 성능과 이식성"이라는 꽤 매력적인 조합을 시도하는 프로젝트예요. 아직 초기 단계라 지켜봐야 하지만, 언어 간 트랜스파일링이라는 접근법 자체는 계속 주목할 가치가 있어요.
여러분은 시스템 프로그래밍을 할 때 어떤 언어를 선호하시나요? C를 직접 쓰시는 편인지, Rust나 Zig 같은 대안 언어를 시도해보셨는지, 경험을 공유해주시면 좋겠어요.
🔗 출처: Hacker News
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공