# Swift는 더 편리한 Rust입니다

> Clean Markdown view of GeekNews topic #16646. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16646](https://news.hada.io/topic?id=16646)
- GeekNews Markdown: [https://news.hada.io/topic/16646.md](https://news.hada.io/topic/16646.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-09-07T09:50:08+09:00
- Updated: 2024-09-07T09:50:08+09:00
- Original source: [blog.namangoel.com](http://blog.namangoel.com/swift-is-the-more-convenient-rust)
- Points: 4
- Comments: 1

## Topic Body

### Rust  
- Rust는 매우 사랑받는 언어로, 빠르고 훌륭한 커뮤니티를 가지고 있음  
- Rust는 소유권 개념을 도입하여 메모리 관리 문제를 해결함  
- `Rc`, `Arc`, `Cow`와 같은 유틸리티를 제공하여 참조 카운팅 및 "clone-on-write"를 지원함  
- 더 낮은 수준의 작업이 필요할 때는 `unsafe` 시스템을 사용하여 raw C 포인터에 접근할 수 있음  
- Rust는 태그된 열거형, 매치 표현식, 일급 함수, 강력한 타입 시스템 등 여러 기능적 언어의 특징을 가지고 있음  
- LLVM 기반 컴파일러를 사용하여 네이티브 코드와 WASM으로 컴파일 가능  
### Swift  
- Swift도 몇 년간 사용해왔으며, Rust를 배우면서 Swift와의 유사성을 발견함  
- Swift도 태그된 열거형, 매치 표현식, 일급 함수 등 기능적 언어의 특징을 가지고 있음  
- Swift는 기본적으로 값 타입을 사용하며 "copy-on-write" 의미론을 가짐  
- 더 빠른 성능이 필요할 때 소유권 시스템을 선택하여 값을 "move"할 수 있음  
- 더 낮은 수준의 작업이 필요할 때 `unsafe` 시스템을 사용하여 raw C 포인터에 접근할 수 있음  
- Swift도 LLVM 기반 컴파일러를 사용하여 네이티브 코드와 WASM으로 컴파일 가능  
  
#### 데자뷰?  
  
- Swift와 Rust는 매우 유사한 기능 세트를 가지고 있음  
- 큰 차이점은 **관점**에 있음  
- 기본 메모리 모델을 고려하면 차이점이 명확해짐  
  
#### Rust는 하향식, Swift는 상향식  
  
- Rust는 저수준 시스템 언어로 시작하여 고수준으로 올라갈 수 있는 도구를 제공함  
- Swift는 고수준 언어로 시작하여 저수준으로 내려갈 수 있는 도구를 제공함  
- 메모리 관리 모델이 가장 명확한 예시임  
- Swift는 기본적으로 값 타입을 사용하며 "copy-on-write" 의미론을 가짐  
- Rust는 "moved"와 "borrowed" 값을 쉽게 사용하게 하지만 `Cow` 값을 사용하려면 추가 작업이 필요함  
- Swift는 "copy-on-write" 값을 쉽게 사용하게 하고, 대신 차용과 이동을 사용할 때 추가 작업이 필요함  
- Rust는 기본적으로 더 빠르고, Swift는 기본적으로 더 간단하고 쉬움  
  
#### Swift는 Rust의 아이디어를 C-유사한 문법에 숨김  
  
- Swift의 문법은 기능적 언어의 개념을 C-유사한 문법에 숨겨 개발자들이 쉽게 받아들이게 함  
- Rust의 `match` 문과 Swift의 `switch` 문 비교  
- Swift의 `switch` 문은 사실 `match` 표현식과 동일하지만 다른 이름과 문법을 가짐  
- Swift는 `enum`에 메서드를 직접 추가할 수 있음  
  
#### 선택적 타입  
  
- Rust는 `null`이 없지만 `None`이 있음  
- Swift는 `nil`이 있지만 사실 `None`과 동일함  
- Swift는 `Option` 대신 `T?`를 사용하며, 컴파일러가 `nil`이 아닌지 확인하도록 강제함  
- Swift에서는 선택적 타입을 쉽게 사용할 수 있음  
  
#### 에러 처리  
  
- Rust는 `try-catch`가 없지만 `Result` 타입을 사용함  
- Swift는 `try-catch` 대신 `do-catch`를 사용하며, 함수 호출 전에 `try`를 사용해야 함  
- Swift의 에러 처리는 Rust와 비슷하지만 더 친숙한 문법으로 숨겨져 있음  
  
#### Rust의 컴파일러는 문제를 잡고, Swift의 컴파일러는 일부 문제를 해결함  
  
- Rust의 컴파일러는 많은 일반적인 문제를 컴파일 시간에 잡아내고 해결책을 제안함  
- 자기 참조 열거형 예시  
- Swift는 `indirect` 키워드를 사용하여 재귀 타입을 표시하고, 컴파일러가 나머지를 처리함  
  
#### Swift는 덜 "순수함"  
  
- Swift는 Objective-C를 대체하기 위해 설계되었으며, 기존 코드와 인터페이스할 수 있어야 했음  
- Swift는 많은 실용적인 선택을 했으며, Rust보다 더 큰 언어임  
- Swift는 "점진적 공개"를 염두에 두고 설계되어, 언어를 더 배울수록 더 많은 기능이 드러남  
- Swift의 일부 언어 기능:  
  - 클래스 / 상속  
  - async-await  
  - async-sequences  
  - actors  
  - getter와 setter  
  - lazy properties  
  - property wrappers  
  - Result Builders (예: HTML / SwiftUI)  
  
#### 편리함의 대가  
  
- Swift는 시작하고 생산성을 높이기 더 쉬운 언어임  
- 문법이 더 친숙하고 많은 작업이 자동으로 처리됨  
- Swift는 더 고수준 언어이며, 이는 동일한 트레이드오프를 가짐  
- 기본적으로 Rust 프로그램은 Swift 프로그램보다 훨씬 빠름  
- Rust는 기본적으로 빠르고, 느리게 할 수 있게 해주며, Swift는 기본적으로 쉽고, 빠르게 할 수 있게 해줌  
- 두 언어는 각각의 용도가 있음  
  - Rust는 시스템 및 임베디드 프로그래밍에 더 적합함  
  - Swift는 UI 및 서버 작성에 더 적합함  
- 시간이 지나면서 두 언어의 겹치는 부분이 더 커질 것으로 예상됨  
  
#### GN⁺의 정리  
  
- 이 글은 Swift와 Rust의 유사성과 차이점을 비교하여 설명함  
- Swift는 Rust의 많은 아이디어를 차용하여 더 친숙한 문법으로 제공함  
- 두 언어는 각각의 강점과 용도가 있으며, 시간이 지나면서 더 많은 겹치는 부분이 생길 것으로 예상됨  
- Swift와 Rust의 메모리 관리 모델, 에러 처리, 선택적 타입 등 다양한 측면에서의 차이점을 이해하는 데 도움이 됨  
- 비슷한 기능을 가진 언어로는 Kotlin, TypeScript 등이 있음

## Comments



### Comment 28675

- Author: neo
- Created: 2024-09-07T09:50:08+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41464371) 
- Rust를 처음 사용하는 사람들이 Rust를 좋아하는 이유는 ML 계열 언어를 처음 접했기 때문임
  - Rust는 Unix 해커들에게 친숙한 커뮤니티를 제공함
- Rust는 비-GC 자동 메모리 관리를 주류로 가져온 첫 언어임
  - Swift, OCaml, Scala 같은 대안들도 존재함
- Smalltalk의 시대는 끝났고, 이제는 ML의 시대임
  - 2000년대의 언어들은 Smalltalk에서 파생됨
  - 새로운 언어들은 ML 계열 언어임
  - Scala를 배우면 Rust나 Swift도 쉽게 배울 수 있음

- Rust를 iOS Swift 앱에 통합하는 작업을 하면서 Swift를 더 사용하고 싶어짐
  - Swift는 크로스 플랫폼으로 사용할 수 있지만, 주로 Apple 플랫폼을 목표로 함
  - Rust는 다양한 패키지 시스템을 가지고 있음
  - Swift 패키지는 OS API에 의존하는 경우가 많아 Linux나 WASM에서 작동하지 않음
  - IBM이 서버에서 Swift를 포기한 사례가 있음

- Rust는 메모리 관리 문제를 해결하기 위해 소유권 개념을 도입했지만, 이를 발명한 것은 아님
  - Cyclone 같은 언어들이 영향을 줌

- Rust와 Swift는 각각의 강점을 가지고 있음
  - Swift는 더 간결한 문법을 가지고 있지만, 일부 영역은 컴파일러 전용임
  - Swift는 Apple 생태계 밖에서는 두 번째 또는 세 번째로 중요한 언어임
  - 이 문제가 해결되지 않으면 Swift는 주로 Apple 전용 언어로 남을 것임

- Swift의 도구는 Rust보다 불편함
  - macOS 12를 사용하는 2018 MacBook Air에서 Xcode가 지원되지 않음
  - SourceKit-LSP는 두 번째로 중요한 도구로 취급됨
  - Rust 1.81과 rust-analyzer는 잘 작동함

- Rust를 배우려고 시도했지만 예제가 너무 복잡해서 어려움을 겪음
  - Rust 웹사이트의 예제 코드가 복잡함

- Swift는 열거형에 메서드를 직접 추가할 수 있음
  - Rust에서도 동일한 작업을 할 수 있음

- Swift는 기본적으로 값 타입을 사용하며, 복사-쓰기 시멘틱스를 사용함
  - 이는 배열, 딕셔너리, 문자열에만 적용됨
  - Swift 값 타입은 즉시 복사됨

- Swift를 칭찬하는 글을 읽을 때마다 Apple/MacOS 생태계를 사용하지 않는 개발자들의 경험이 궁금함
  - MacOS를 사용하지 않는 Swift 개발자를 만나본 적이 없음
  - 표준 라이브러리뿐만 아니라 도구, LSP, 라이브러리, 튜토리얼 등도 중요함
  - Swift가 좋은 언어라는 것은 믿지만, MacOS에서만 좋은 것 같음

- Zig와 Swift의 점 문법을 싫어하는 유일한 사람인지 궁금함
  - `.variant` vs `Type::Variant`
  - 충분히 길거나 복잡한 코드에서는 타입 이름이 가까이 있지 않으면 불편할 것임
  - IDE 같은 기능이 없는 에디터에서는 특히 그렇겠음
