BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース SwiftチームのSwift Algorithmsをオープンソース化

SwiftチームのSwift Algorithmsをオープンソース化

原文(投稿日:2020/10/09)へのリンク

Swift Algorithmsは、Swift標準ライブラリのギャップを埋めるシーケンスアルゴリズムとコレクションアルゴリズムを多数含む新しいパッケージである。AppleのエンジニアであるNatCookは次のように記述している。

Algorithmsパッケージには、他の一般的なプログラミング言語でよく見られる強力で汎用的なアルゴリズムが多数含まれています。この新しいパッケージが、人々がアルゴリズムを採用し、彼らのコードの正確性とパフォーマンスを向上させるのに役立つことを願っています。

他の言語で利用できる同様のライブラリの例として、Cook氏はPython用のitertoolsとC++ アルゴリズムライブラリについて言及している。具体的には、Swift Algorithmsには、SequenceプロトコルとCollectionプロトコルの一般的なアルゴリズムが含まれる。並べ替えアルゴリズムや非線形データ構造のアルゴリズムなどの従来のアルゴリズムは含まれない。

適切なアルゴリズムとデータ構造を選択することの重要であることは大げさではない。これをサポートする標準ライブラリがないため、Swift開発者の注意が十分に向かない場合がある。Dave Abrahams氏は、WWDC2018で行った"Embrace Algorithms"の講演でそのことに言及した。

Algorithmsパッケージは、関連するアルゴリズムの新しいファミリーを構築するための敷居を低くする場として機能することにより、この目標の実現に役立つと考えています。問題空間を繰り返し探索し、さまざまなアルゴリズムがどのように接続して相互作用するかを学ぶ機会を与えてくれます。それは、標準ライブラリに組み込まれる前にです。

Swift Algorithmsはまだ初期段階にあり、含まれるアルゴリズムの数はまだかなり減少している。具体的には、Swift Algorithmsに含まれるもは次の通りである。コレクションの要素の組み合わせを計算するCombinationsジェネリック型。コレクションの要素またはそれらの要素のサブセットの順列を計算するためのPermutationsジェネリック型。2つのコレクション内の要素のすべてのペアを反復処理するproduct関数。コレクションをサブシーケンスに分割するためのchunkedメソッドの集合。同じ要素タイプの2つのコレクションを連結するchainメソッド。コレクションを反復処理するための一連のcycleメソッド。シーケンスまたはコレクションから繰り返される要素を取り除くuniquedメソッド。シーケンスまたはコレクションからk個の要素をランダムに選択するための操作を実行するためのrandomSampleメソッドの集合。2つのコレクションの要素をペアにするindexedメソッド。可変コレクションで安定したパーティションを実行し、すでにパーティション化されたコレクションでパーティション化インデックスを見つけるためのpartitionメソッド。コレクションの要素を新しい位置にローテートさせるrotatingメソッド。

Swift Algorithmsの使用を開始するには、Package.swiftファイルの実行可能ターゲットの依存関係として追加できる。

let package = Package(
    // name, platforms, products, etc.
    dependencies: [
        .package(url: "https://github.com/apple/swift-algorithms", from: "0.0.1"),
        // other dependencies
    ],
    targets: [
        .target(name: "<target>", dependencies: [
            .product(name: "Algorithms", package: "swift-algorithms"),
        ]),
        // other targets
    ]
)

ライブラリの使用については、Swift Algorithms Forumで議論でき、新しいアイデアをIssueとして提出できる。

Swift Algorithmsが登場する前は、Swift開発者はSwift Algorithm Clubライブラリを使用できました。これは、前者よりもはるかに成熟しており、シーケンスやコレクションに関連するだけでなく、並べ替え、非線形データ構造などを含む100を超えるアルゴリズムが含まれている。

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT