coreclr関係もろもろ

Open .NET technology explained at COSCUP 2015

これは告知してもしょうがないのですが、8/16に台北で行われるCOSCUP(オープンソース技術系カンファレンス)で、オープンソース化した.NET関係の技術について、40分ばかり雑談してきます。

Schedule 議程 | 2015 COSCUP

今 年でセッションは3年目なのですが、monodevelop -> mono -> .NET と、だんだん話が大きくなって希薄化している感はありますね…個人的には細かい部分を掘り下げるほうが楽しいのですが、まあ正直台湾のOSS方面では現 状.NETネタを受け入れてもらうのも一苦労だと思うので、エントリーレベルの話から始めたほうがいいのかもしれません。(あれ、エントリーレベルの話な んてする気あったっけ…?)

参加申し込みももう締め切られているので(というか公開後ほどなく満員御礼になっちゃうんですよね)、万が一興味があるという方は、後日の資料公開などを期待していて下さい。

coreclr Book of the Runtime日本語訳プロジェクト

そんなわけで、coreclrやらcorefxやらroslynやらの調べ物をしようと思って日々過ごしているわけですが、最近気付いたもので、coreclrのリポジトリの中に、"Book of the Runtime" (BotR) と呼ばれるドキュメント集があって、.NETランタイムの内部設計についていろいろ解説してあるのです。これはなかなか興味深い。ランタイムの各コンポーネントの担当者がまとめた文章を集めたものであるらしく、コードの詳細までは踏み込まないけど、内部実装の理解がそれなりに得られるものだと思います。

 

というわけで、少しずつ読み解きながら翻訳してみたいと思っています。翻訳したドキュメントは、このリポジトリに置いておきたいと思います。翻訳を手伝っていただける方は随時募集しています(既にわたしだけのプロジェクトではないです)。

github.com

 

このBotR、FAQを見てもらえれば分かるかと思いますが、基本的には文書作成時からほとんど加筆修正されていないものであるようです。なので、古い内容のものもけっこうあります。とはいえ、ランタイムの基本的な構成要素、たとえば型システムなどはそうそうリニューアルされないので、それで困ることは多分あまり無いでしょう。一方でRyuJITみたいな、新し目のコンポーネントについての文書もあります。翻訳しながらじっくり読むと、勉強になるかもしれません。

coreclrをUbuntu 14.04だけでビルドする

で、調べ物をするにあたって、やっぱりcoreclrもcorefxもビルドして動かしたいと思ったわけですが、わたしの作業環境はLinuxで、どうやらcoreclrのビルドにはWindowsが必要なんだそうです。

 

blog.shibayan.jp

www.atmarkit.co.jp

えー。Windows機、ありますけど、いちいち起動してビルド環境をセットアップしてビルドするのは、ちょっとめんどくさいですね。 しかも、もしmscorlibの実装をちょっとだけ修正してビルドしたいと思っても、毎回これをやることになるわけですね。めんどくさい。

mscorlib.dllはマネージドコードだからビルドする環境が無い、というのは確かに分か…あれ? でもcorefxはLinuxでもビルドしますよね。何でcoreclrのmscorlibで同じことをしないんでしょうか? もしかして単に手が回ってないだけなんでは?

…というわけで、corefxのビルドスクリプト(主にMSBuildの大盛りtargetsスパゲッティ…)を見ながら、半ばコピペでmscorlibもビルドできるようにしてみました。

https://github.com/dotnet/coreclr/pull/1275

実際に完成させるところまでやって気付いたわけですが、けっこう大変ですね。他のcorefxのライブラリのビルドと違って、mscorlibはrc.exeの呼び出しとか、色々なバイナリ書き換えとか、チマチマとWindows依存のビルドステップが入ってきます。主にそれらを取り除く作業となりました。roslynを使ったビルドでも、デバッグシンボルを生成しようとするとpdb生成はCOM依存なので落ちるとか、割と厳しい感じです。

実のところ、何とかビルドできたmscorlib.dllでhello world的なコードを動かせて、パッチをコミットしてpull requestを送った後も、実はビルドの一部(crossgen)がクラッシュしていたとか、バイナリ書き換え(BclRewrite)がかからないと何処でエラーが出て落ちるか分からんみたいな事情があるようで、取り込んでもらえるかどうかは、雲行きが怪しいところです。BclRewriteは何でクローズドソースなんじゃあ、とか、コミュニティからも改善要望が出ていて、Microsoftも方針を決めかねている状態であるようです(ということは、よっぽどWindows依存なんだろうなあ)。とりあえずクロスプラットフォームまわりの深淵を覗きこんだような感じでした。

…とまあ、その辺の話を(盛り込む余裕があれば)COSCUPでしてこようかなあと思っています(そのための調べ物だった)。