Swift는 더 편리한 Rust (2023)

1 day ago 3

  • Rust와 Swift는 모두 강력한 타입 시스템과 함수형 언어의 특징을 공유하며, LLVM 기반 컴파일러를 통해 네이티브 코드와 WASM으로 컴파일 가능
  • Rust는 하위 수준 시스템 언어로 시작해 상위 수준 기능을 제공하고, Swift는 상위 수준 언어로 시작해 하위 수준 접근을 허용
  • Swift는 값 타입과 Copy-on-Write를 기본으로 하며, Rust의 소유권 모델과 유사한 개념을 더 단순한 문법으로 구현
  • 옵셔널 타입, 에러 처리, 재귀 enum 등에서 Swift는 Rust의 개념을 C 계열 친숙한 문법으로 감췄으며, 개발자에게 더 높은 편의성 제공
  • Swift는 크로스플랫폼 언어로 발전 중이며, Windows·Linux·임베디드 환경에서도 사용 가능해 Rust의 대안으로 부상

Rust와 Swift의 유사성과 차이

  • 두 언어 모두 함수형 언어의 특징(태그된 enum, match/switch 표현식, 제네릭, 1급 함수)을 포함
    • Rust는 Rc, Arc, Cow를 통해 참조 카운팅과 복제 제어를 제공
    • Swift는 기본적으로 값 타입과 Copy-on-Write를 사용하며, 필요 시 소유권 이동(move)unsafe 포인터 접근 지원
  • 두 언어 모두 LLVM 기반 컴파일러를 사용해 네이티브 코드와 WASM으로 컴파일 가능

메모리 모델: Rust는 하향식, Swift는 상향식

  • Rust는 저수준 시스템 언어로 시작해 상위 수준 기능을 제공
  • Swift는 상위 수준 언어로 시작해 필요 시 저수준 접근을 허용
  • Swift의 기본 메모리 모델은 Copy-on-Write 값 타입, Rust의 Cow<>와 유사
    • Rust는 기본적으로 빠르지만 사용 시 Cow<>를 명시적으로 처리해야 함
    • Swift는 기본적으로 단순하며, 복사 대신 이동을 선택할 수 있음

Swift의 문법적 접근: Rust 개념을 C 스타일로 감춤

  • Swift의 switch 문은 사실상 Rust의 match 표현식과 동일한 기능을 수행
    • 패턴 매칭을 지원하며, fallthrough가 없음
  • Swift의 enum은 메서드를 직접 포함할 수 있어 Rust보다 객체지향적 사용 가능
  • 옵셔널 타입(T?) 은 Rust의 Option<T>와 동일한 개념으로, nil은 None에 해당
    • Swift에서는 if let val 구문으로 안전하게 언래핑 가능
  • 에러 처리는 Rust의 Result 타입과 유사하며, Swift의 do-catch와 try는 익숙한 문법으로 감싼 동일한 구조

컴파일러 동작의 차이

  • Rust 컴파일러는 문제 탐지와 경고에 중점을 두며, 예를 들어 재귀 enum 정의 시 Box<> 사용을 강제
  • Swift는 indirect 키워드만으로 재귀 enum을 처리하며, 컴파일러가 내부 포인터 관리 자동화
  • Swift는 Rust보다 자동화된 처리가 많아 개발자가 직접 메모리 구조를 다룰 필요가 적음

Swift의 실용성과 언어 확장성

  • Swift는 Objective-C 대체를 목표로 설계되어 더 크고 실용적인 언어
    • 클래스/상속, async-await, actors, lazy 속성, property wrappers, Result Builders 등 다양한 기능 내장
  • 점진적 공개(progressive disclosure) ” 설계로, 학습이 진행될수록 더 많은 기능이 드러남

편의성과 성능의 균형

  • Swift는 시작과 생산성이 쉬운 언어, Rust는 기본적으로 빠른 언어
    • Rust는 “빠름이 기본”, Swift는 “편의가 기본”
  • Rust는 시스템·임베디드·컴파일러·브라우저 엔진에 적합
  • Swift는 UI·서버·운영체제 일부 구성요소에 적합하며, 두 언어의 활용 영역이 점차 겹침

Swift의 크로스플랫폼 확장

  • Swift는 더 이상 Apple 전용 언어가 아님
    • Windows: The Browser Company가 Arc 브라우저 코드 공유에 사용
    • Linux: Apple이 Swift on Server를 지원하며 컨퍼런스 후원
    • Embedded Swift: Panic Playdate 같은 소형 기기에서 사용
  • Swift 공식 블로그는 Windows, Embedded, Linux(Gnome), Playdate 프로젝트를 소개
  • Swift는 VSCode 확장, LSP 오픈소스화 등으로 Xcode 외 환경에서도 개발 경험 개선 중

Swift의 한계와 현재 위치

  • 컴파일 시간은 Rust와 마찬가지로 느림
  • 기능 확장(feature creep) 으로 언어가 커졌으며, 일부 문법은 익숙하지 않음
  • 패키지 생태계는 Rust보다 미성숙
  • 그러나 Swift는 이미 ABI 안정성, 자동 참조 카운팅(ARC) , 소유권 선택 기능, Linux 호환 패키지를 갖춘 크로스플랫폼 언어
  • Swift는 Rust보다 편리한 대안으로 자리 잡고 있으며, 기다릴 미래가 아닌 현재의 선택지로 존재

Read Entire Article