16P by xguru 11일전 | favorite | 댓글 8개
  • 수억 명의 사용자를 대상으로 서비스를 제공하는 회사(비공개)로, 핵심 시스템에 C와 C++ 사용 중
  • 2023년 한해 동안 Rust와 Zig 중 어떤 언어를 채택할지에 대한 논의 진행
  • 주요 고려 사항:
    1. C 언어와의 상호 운용성
    2. 엔지니어 확장성 (채용, 유지보수 등)
  • 최종 선택: Zig
  • 이 선택 과정은 대규모 회사에서 "코드가 다양한 대상에서 실행되고 수억 명의 사용자에게 영향을 미칠 때 고려하는 요소"들을 잘 보여준다고 생각해서 공유함

C 상호 운용성의 중요성

  • 재작성하려는 라이브러리는 모든 플랫폼(웹, 모바일, VR 헤드셋, 게임 콘솔, 데스크톱 등)에서 사용될 가능성이 있음
  • 따라서 C API 제공과 FFI를 통한 사용이 모든 플랫폼에서의 실행을 보장하는 유일한 방법

주요 토론 이슈

Rust

  1. 당시 Zig보다 25배 이상 인기 있음 (설문 조사 및 서브레딧 기준)
  2. 더 오랜 기간 안정적인 상태 유지
  3. Rust Foundation의 산업계 후원이 안정적으로 보임
  4. 우수한 LSP와 개발자 경험
  5. Cargo: 업계 최고 수준의 패키지 관리자
  6. 메모리 안전성과 "정의되지 않은 동작 없음" (완전히 사실은 아니지만 논의 중 언급됨)
  7. C++에서 벗어나려면 메모리 오류와 정의되지 않은 동작 가능성이 없는 Rust가 더 적합
  8. nightly 버전에서 SIMD 지원
  9. WASM 지원이 Zig만큼 원활
  10. 성능면에서 Zig와 대등하거나 일부 경우 "상당히 빠름"
Rust의 C 상호 운용성:
  • Rust는 자체 생태계가 풍부하여 C 상호 운용성의 중요성이 상대적으로 낮음
  • Python 바인딩 등 고수준 언어와의 연동 가능성 우수
  • Rust 사용의 이점이 C 바인딩 제공의 단점을 상쇄한다는 주장

Zig

  1. C/C++ 또는 TypeScript 배경 개발자가 쉽게 학습 가능
  2. C 배경 개발자에게 즐거운 코딩 경험 제공
  3. Zig 컴파일러가 C와 C++ 컴파일도 가능하여 의존성 관리와 C ABI 라이브러리 구축에 유리
  4. 다양한 대상 플랫폼 지원이 매우 용이 (zig targets 명령어 호평)
  5. 빠른 소프트웨어 작성이 쉬움 (네이티브 Vector 지원, SIMD 활용 등)
  6. 기존 디버거와 호환
  7. 우수한 빌드 시스템 (기존 Makefile보다 100배 개선)
  8. Zig Software Foundation의 높은 재정 투명성
  9. 기존 C++ 코드의 점진적 포팅 및 "Zig화" 가능
  10. 모든 대상 플랫폼에 대한 링킹/컴파일 문제 해결 확실

결론

  • Zig가 기존 코드베이스 포팅 및 모든 플랫폼 호환성 보장에 필요한 시간과 노력을 크게 감소시킴
  • 예상 외 결정 요인들:
    1. 학습 용이성과 채용이 예상보다 큰 영향을 미침 (Zig에 유리)
    2. 툴체인 관련 개발자 경험이 중요한 역할
    3. Zig 컴파일러와 빌드 시스템이 기존 코드베이스와의 호환성으로 인해 크게 도움됨
    4. Rust의 생태계, 커뮤니티, 메모리 안전성 보장은 예상보다 영향력이 적음

고려사항과 토론 이슈, 결론 등을 읽어보니 애초에 Rust가 필요한 환경이 아니었던 것 같네요. 음식 배달하는데 오프로더 몰고 다니는 배달원 본 적 있나요?
네이티브 언어로 개발을 해야하긴 하지만 memory-critical한 작업이 아닌거면 개발하기 편한 쪽을 고르는게 맞죠. 이걸 뭐 한 해 동안 토론할 것 까지야...

한국에서는 다 의미없는 얘기라는 점이 슬프지만 흥미롭습니다...

수억 명의 사용자를 대상....

어느회사인지 궁금하네요. 인증이라는 형식적인 절차에 구애받지 않는 회사인것 같은데... 부럽...

일년에 한번씩은 zig를 둘러보곤 하는데, 거의 매년 breaking change가 있었던 것 같습니다;;
게다가 언어 자체적으로는 큐나 쓰레드간 메시지 전달 라이브러리가 준비되어 있지 않아서, 러스트의 성숙도에 비하면 아직은 갈길이 먼것 같습니다.
물론 사용자가 OS API들에 빠삭하면 큰 문제가 아닐 수 있겠습니다만…

Rust가 Zig보다 25배 이상 인기 있는데 채용은 Zig가 유리하군요.

1번 항목인 C/C++ 또는 TypeScript 배경 개발자가 쉽게 학습 가능 때문인 것 같아요

C 배경 개발자에게 즐거운 코딩 경험 제공
빠른 소프트웨어 작성이 쉬움 (네이티브 Vector 지원, SIMD 활용 등)

파이썬을 처음 배울 때의 느낌이네요

Bun을 Zig언어로 개발하는 걸 보면서 왜 하필 Zig 였을까 궁금했었는데 Rust와의 좋은 비교글 덕분에 이해가 되네요. 그나저나 C언어는 정말 영원불멸할 것 같습니다.