始めに
2019/11頃、github上にdotnet/runtimeというリポジトリが誕生した。
これは、それまで分かれていたdotnetのランタイムとクラスライブラリを統合する目的で作られたものとなる。
構成されるファイルについては、大半が既存のリポジトリからのインポートによるものとなるが、ここでどのようなディレクトリ構造になっているか、大雑把ではあるが書いておこうと思う。
ディレクトリ構造
おおまかに以下のようになる。
- docs
- クラスライブラリやランタイムに関するドキュメントをまとめたディレクトリ
- ソースそのものに興味がある場合を除いて、まずここから調べるのが良い
- 特にdocs/design/coreclr/botrはdotnetの動く仕組みについての解説等が載っているため、読み物として読むのも面白い
- 統合前のリポジトリにあったmdファイル等は大体この下
- eng
- dotnet/arcadeのファイル
- ビルド、パッケージング、インテグレーションのための共通ツール群
- dotnet/arcadeリポジトリから持ってきているものなので、通常見る必要は無い
- src
- ライブラリのソースコード等
- またここから分かれているが後述
- 移行に当たり、mono以外の元のリポジトリではデフォルトで表示されるブランチはほぼ空となっているが、tagを参照することにより以前の状態を参照することは可能
- tools-local
- dotnet/runtimeリポジトリ限定で使うスクリプト群
その他、リポジトリ構成に関するイシューを見ると、aspnet/Extensionsも取り込むようだが、現時点(2019/12)では確認できなかった。
src以下の構造
- src/coreclr
- 主にdotnet/coreclrにあったものをインポートしたもの
- JIT、GC、プラットフォーム別に実装が必要な部分等、ランタイム部分やネイティブ成分が多めだとこのディレクトリ以下にあると思っていい
- src/librariesに実装が見当たらない場合、大体 src/coreclr/src/System.Private.CoreLib 以下にあることが多い
- src/libraries
- 主にdotnet/corefxにあったものをインポートしたもの
- クラスライブラリの内、マネージドで済むものと、bait and switchに必要なリファレンス用ライブラリがここに含まれる
- netstandard時に参照されるライブラリも大体ここ
- src/coreclrとsrc/monoのSystem.Private.CoreLibの共通実装(CharとかStringの一部とか)がsrc/libraries/System.Private.CoreLib/srcに存在している
- src/installer(5.0以前)
- 主にcore-setupにあったものをインポートしたもの
- dotnetコマンドや、publish時に生成される実行可能ファイルのベースとなるcorehostのソースや、一部パッケージングに関わる部分のソースがここに含まれている
- src/installer(6.0pre以降)
- 主にcore-setupにあったものをインポートしたもの
- corehost部分はsrc/nativeに移動したので、インストーラー作成に関わる部分のみになった
- src/mono
- src/native(6.0pre以降)
- 以下のようなものがある
- corehost
- 以前src/installerに入っていたcorehostの移動
- publishした時に実行可能ファイルのベースとなる部分
- eventpipe(6.0pre以降)
- Diagnostics(実行時の診断用情報の収集)のための、EventPipeのランタイム側実装の部分
- EventPipeについては、 EventPipeについての公式ドキュメント を参照
- corehost
- 以下のようなものがある
終りに
来たるべき.NET 5に向けてリポジトリの統合をしたわけだが、一緒のリポジトリになることでこれまで散在していた記述等もまとめられることになったので、個人的には良かったと思う。特にdocs以下が一つにまとめられたのは良かったと思う。
また、これまでクラスライブラリレベルの修正は複数リポジトリにまたがって行われることが多かった(特にcorefxとcoreclr)が、この統合により、一つのPRに纏められるようになり、追跡もしやすくなる。
リポジトリ統合関連のイシューを見ると、まだ変更点はありそう(aspnet/AspNetCoreがdotnet/aspnetcoreとか、dotnet/sdkとか)だが、一番大きなdotnet/runtimeの統合を完了したので、今後更に何らかの動きがあるかもしれない。