홈으로 돌아가기

Solod: GC 없이 C로 컴파일하는 Go

Solod는 오픈 언어로, C11로 트랜스컴파일되고 수동 메모리 관리를 가진 Go의 부분 집합입니다. GC, channels, goroutines 없이 주요 Go 구성을 지원합니다. 메모리 및 문자열 작업에서 Go보다 높은 성능.

오픈 Solod: C 개발을 위한 Go 부분 집합
Advertisement 728x90

Solod: 수동 메모리 관리와 C 컴파일을 지원하는 Go 서브셋

Solod (So)는 C11로 트랜스컴파일할 수 있는 Go의 부분 집합을 제공하는 오픈소스 프로젝트입니다. 코드는 런타임이나 가비지 컬렉터 없이 GCC, Clang, 또는 zig cc로 컴파일됩니다. 트랜스파일러는 BSD 라이선스 하에 Go로 작성되었으며 Linux, macOS, Windows를 지원합니다.

수동 메모리 관리는 GC, 자동 할당, 참조 카운팅을 제거합니다. 메모리는 기본적으로 스택에 배치되며, 표준 라이브러리의 Alloc/Free를 통해 힙을 사용할 수 있습니다. 타입 검사와 배열 오버런에 대한 경계 검사는 내장되어 있지만, 덴글링 포인터와 메모리 누수는 추적되지 않습니다. 디버깅을 위해 AddressSanitizer를 권장합니다 (-fsanitize=address).

지원되는 구성 요소

Solod는 편의성을 위해 Go의 주요 기능을 유지합니다:

Google AdInline article slot
  • 구조체와 메서드.
  • 인터페이스.
  • 슬라이스.
  • 다중 값 반환 (결과 + 오류).
  • 제네릭.
  • Defer.

채널, 고루틴, 클로저는 없습니다—결정적성(determinism)과 성능에 초점을 맞췄습니다.

기존 Go 도구와의 통합: LSP 서버, 린터, IDE, go test. Solod 코드는 런타임 없이 C에서 호출할 수 있고 그 반대도 가능합니다.

라이브러리와 사용 사례

C로 포팅된 Go 패키지:

Google AdInline article slot
  • strings
  • io
  • bytes
  • mem
  • slices

libc 래퍼가 제공됩니다. 주요 사용 사례:

  • Go 문법과 C 수준 타이핑을 사용한 시스템 프로그래밍.
  • Go 라이브러리를 C 프로젝트로 포팅.
  • GC 오버헤드 없는 고성능 애플리케이션.

성능

벤치마크에서 Go 대비 우위를 보입니다:

| 작업 | Go 대비 속도 향상 | 메모리 사용량 |

Google AdInline article slot

|----------------------------|-------------------|-------------------|

| 바이트 함수 | 1.5배 | 동일 |

| 바이트 버퍼 (읽기) | 1.3배 | - |

| 바이트 버퍼 (쓰기) | 2–4배 | - |

| 맵 (int 키 조회) | 3.4배 | - |

| 맵 (int 키 수정) | 0.6배 (느림) | - |

| 맵 (string 키 조회) | 비슷 | - |

| 맵 (string 키 수정) | 0.67배 | - |

| int 파싱/포매팅 | 2배 | - |

| float | 1.5/1.2배 | - |

| 문자열 함수 | 1.3배 | - |

| 문자열 생성 | 2–4배 | -10~20% |

Solod는 Go의 표현력과 C의 저수준 제어를 균형 있게 추구하는 중급 및 고급 개발자에게 적합합니다.

주요 특징

  • GC 없음: 예측 가능한 성능을 위한 수동 메모리 관리.
  • C 상호 운용성: 런타임 없는 직접 호출.
  • Go 도구: 에코시스템 호환성.
  • 성능: 주요 작업에서 Go보다 1.3–4배 빠름.
  • 검사: 런타임 오버헤드 없는 경계 검사와 타입 안전성.

— Editorial Team

Advertisement 728x90

다음 읽기