iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Swift Standard Library とは?

Swift Standard Library は、モジュールのインポートが何もない状態でも動作する、Swift プログラムを作成するためにの基本的なシンボルの集まりです。また、Swift Standard Library は Swift で記述されていますが、他の Swift コードを構築するためのコアとなるデータ型の実装をしているため、通常の Swift コードとは少し異なります。

github.com

実装内容

Standard library core:

全てのデータ型、プロトコル、関数などを含む Standard Library のコア。(stdlib/public/core)

Runtime:

コンパイラと core standard library の間に階層化された言語サポートランタイム。(stdlib/public/runtime)。キャスト(as!、as? など)、タイプメタデータ(ジェネリックスとリフレクションをサポートするため)、メモリ管理(参照カウントなど)など、言語の動的な機能のための役割があります。また、これらは高レベルのライブラリとは異なり、ランタイムは主に C++ または Objecttive-C で記述されています。

リフレクションって何?

Swift reflectionについて - Qiita

SDK Overlays:

Apple プラットフォームに固有の SDK overlays は、Swift へのマッピングを改善するために、既存の Objective-C フレームワークに Swift 固有の追加と変更を提供します。(stdlib/public/Darwin)

通常の Swift との違い

Compiler builtins へのアクセス

Builtin モジュールへのアクセスは Standard Library のみアクセスできます。Builtin モジュールは、Swift プログラミングの基本となるデータ型を実装するために必要な compiler builtin 関数(e.g SIL命令を直接作成)とデータ型(e.g プリミティブの LLVM整数型)を提供します。

アクセス制限

standard library の宣言は、standard library のコンパイルと最適化の方法により、より高いアクセス制限を設ける必要があります。そのため、standard library では private 修飾子は使用されません。そのため、public interface にプライベートの宣言をする必要がある場合は、慣例により先頭に下線をつけます。standard library のアクセス制限のポリシーの詳細については下記を参照してください。

swift/AccessControlInStdlib.rst at main · apple/swift · GitHub

反復コードに gyb を使用する

gyb は、standard library で頻繁に使用されるテンプレートから繰り返しコードを生成するためのツールです。これらは、一つのソースから様々な整数型の定義を作成するためなどに使用されています。(Int8, Int16, Int32, Int64)

テストはコンパイラーと結合されている

standard library とコンパイラーを密接に結合されているので、一緒に進化していきます。つまり、コアとなるデータ型の変更にはコンパイラの変更が必要になったり、逆にコンパイラの変更により、standard library の変更が必要になったりします。

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com