SharpLabでは、自分が書いたC#コードをコンパイラがどんなコードとして扱い、それをどんなILコードへコンパイルするかを手軽に確認できる。
SharpLabは、プログラマーが記述したC#コードをコンパイラが実際にはどのようなコードとして扱い、それをどんなILコード(Intermediate Language Code:中間言語コード)へとコンパイルするかを確認できるWebサイト。
例えば、以下のようなコードがあったとしよう。
using System;
using System.Collections.Generic;
public class C {
public static void Main() {
var list = new List<int> { 1, 2, 3, 4, 5 };
foreach (var item in list)
{
Console.WriteLine(item);
}
}
}
このコードをSharpLabの左側のペーン([Code]ペーン)に入力してみよう。すると、そのコードをコンパイラが実際にはどのように扱うか、展開後のコードが右側のペーン([Results]ペーン)に表示される。
foreachループが列挙子を利用したwhileループとなり、そのループがtry〜finally文で囲まれるように変換されているか分かる(こうした挙動をご存じの方も多いはずだ)。
もう1つ簡単な例を示そう。C# 7ではタプル(System.ValueTuple型)を使えるようになった。このタプルは「(x, y)」のような構文で使えるように、糖衣構文が使われている。そこで以下のようなコードが実際にはどんなコードに展開されるかを見てみよう。
using System;
public class C {
public static (int, int) Swap(int x, int y) => (y, x);
public static void Main() {
Console.WriteLine(Swap(10, 20));
}
}
これがどういうC#コードとして扱われるかを試したのが、以下だ。
ラムダ式を使って記述されたメソッドは通常のメソッドとなり、タプル構文がSystem.ValueTuple構造体を使ったコードへと変換されている。
これらはシンプルな例だが、自分が書いたコードが実際にはどのようなコードとして取り扱われるかをSharpLabは教えてくれるということだ。
SharpLabで扱えるのはC#だけではない。[Code]ペーンでは使用する言語としてC#/Visual Basic/F#を選択可能だ。一方、[Results]ペーンでは出力結果としてC#/Visual Basic/IL/JIT asmを選択できる。
出力結果に表示するものとしては、上に述べた言語だけではなく、構文木([Syntax Tree])やコンパイルできるかの確認([Verify Only])、コードの実行結果([Run])も選択できる。例えば、以下は先ほどのタプルを使用したコードがどんなILコードになるかを示したところだ。
自分が書いたC#コードがどんなILコードにコンパイルされるかを確認したければ、コードをコンパイルしてildasmコマンドやILSpyなどのツールを使ってILコードを参照するか、LINQPadなどのツールで対話的にコードを参照するのがよくあるやり方だ。しかし、SharpLabならWebブラウザでコードを入力するだけで、C#コードの展開結果やコンパイル結果がどうなるかをお手軽に確認できる。
WebブラウザでSharpLabを開いて、そこにC#などのコードを入力すると、そのコードをコンパイラが実際にはどのようなコードとして扱い、それをどんなILコードへとコンパイルするかを確認できる。自分が書いたコードが実際にはどのように挙動し、どんなコードにコンパイルされ、さらにはどのようにJITコンパイルされるかを理解することは、C#プログラマーとしての実力を増すことにもつながる。そのためのお手軽な手段として、SharpLabはオススメだ。
Copyright© Digital Advantage Corp. All Rights Reserved.