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 などがある
1件のコメント
Hacker Newsのコメント
Rustを初めて使う人たちがRustを好む理由は、ML系言語に初めて触れたからである
Rustは、GCなしの自動メモリ管理をメインストリームにもたらした最初の言語である
Smalltalkの時代は終わり、今はMLの時代である
RustをiOSのSwiftアプリに統合する作業をしながら、Swiftをもっと使いたくなった
Rustはメモリ管理の問題を解決するために所有権の概念を導入したが、それを発明したわけではない
RustとSwiftにはそれぞれの強みがある
SwiftのツールはRustより使いづらい
Rustを学ぼうとしたが、例が複雑すぎて苦労した
Swiftは列挙型にメソッドを直接追加できる
Swiftはデフォルトで値型を使い、copy-on-writeセマンティクスを使用する
Swiftを褒める文章を読むたびに、Apple/macOSエコシステムを使っていない開発者たちの経験が気になる
ZigとSwiftのドット構文を嫌うのは自分だけなのか気になる
.variantvsType::Variant