ベストアンサー
Swift 1、2、3では間違いなく「いいえ」ですが、Swift4ではおそらく「はい」です。とにかく、私はまだあまり前向きではありません。
Rustのターゲット市場はC / C ++プログラマーだと思います。
Rustの主な機能はオーバーヘッドのない非常に安全。今まで、Swiftはここで失敗します。 Swiftは、ref-typesを使用する場合、常に空間と時間の両方で一種のオーバーヘッドを伴います。これは必須であり、避けられません。
「安全」だけがすでに多くの言語で提供されているため、オーバーヘッドは重要です。たとえば、C#。私の意見では、これはスイフトの実際の真の競争相手です。 C#はすでに一定レベルの安全性を提供しています。また、市場の一部のセグメントではすでにC / C ++に置き換えられていますが、大量のオーバーヘッドが発生するため、完全には置き換えられていません。空間と時間の両方で。 SwiftコンパイラはRCオーバーヘッドの一部を取り除くことができますが、それは最適化の運次第です。不運な状況では、オーバーヘッドが大きくなります。
そして安全性のレベルも異なります。どちらの言語も、安全なコンテキストでダングリングポインタがないことを保証できるのと同じです。しかし、Swiftが提供できるのはそれだけであり、Rustが提供するものと比較すると、これは非常に弱い保証です。リソースレベルでは、Swift ref-typeはいつでもリークする可能性があり、常に人間のケアが必要です。コンパイラは循環参照を検出できません。 Swiftでは、スレッド間で可変メモリを無制限に共有することもできます(言語のネイティブ同時実行性がないため)。これは、データ競合の安全性がないことを意味します。
対照的に、Rustの一意の所有権は、リソースリークがないことを完全に静的に保証します。静的に保証されるデータ競合もありません。
ここ数年Swiftを使用しているときに感じたのは、リソース管理とデータ競合に関しては言語が実際には安全ではないということです。また、必須のRCオーバーヘッドは、パフォーマンスが重要なコードでは本当に大きな懸念事項です。 Swiftは値型のパフォーマンスをアドバタイズしますが、実際には、ヒープに安全に割り当てるには、常にいくつかのref型を使用する必要があります。 SwiftはコンパイラのスマートRCエリジオンを宣伝していますが、それは運に基づいているため、Rustのゼロコストが保証されています。
なぜ安全性が重要なのですか?地雷原で生産的になることはできないからです。生産性を高めるには、気にする必要のある作業を減らす必要があります。 Swiftでは、誰もあなたのことを気にかけていないので、殺されないように、常にサイクルとデータの競合とオーバーヘッドを気にする必要があります。 Rustでは、コンパイラーはこれを処理できます。あなたは(多くの)安全性を忘れて、それが文句を言うものは何でもコンパイラーに従うだけで、あなたは安全です。 GC言語のユーザーがダングリングポインタを気にしないのと同じように。
また、決定論も重要です。オブジェクトの存続期間の追跡が必要になることはめったにありませんが、非常に重要な場合があります。 SwiftRCは `deinit`タイミングを提供しますが、所有権が共有されているため、通常、死亡のタイミングは非常にあいまいです。一意の所有権のこのようなタイミングは、RCよりもはるかに明確です。
一意の所有権は、責任のある所有者に注釈を付けることでメンテナンスにも役立ちます。私の意見では、一意の所有者を管理することは、複数の所有者を管理するよりもはるかに簡単です。実際、私がSwiftでいつも行っているのは、暗黙の一意の所有者を指定し、何らかの規則に従って手動で追跡することです。コンパイラがこれを行ってくれるといいと思いませんか?
Swift 4は、一意の所有権、移動セマンティクス、アクターモデル、C ++相互運用サポートなどのいくつかの新機能の導入を計画しています。しかし、現在の言語セマンティクスの機能を使用して、Rustレベルの安全性をどのように保証できるかはわかりません。だから私はまだスイフトの安全レベルについてあまり前向きではありません。 C ++の相互運用は大きなセールスポイントになる可能性があります。とにかく、これがSwift4がC / C ++市場でRustの潜在的な競争相手になる可能性があると私が考える唯一の理由です。
Swiftにも長所があります。 …