連載
» 2018年02月13日 05時00分 公開

Dev Basics/Keyword:SharpLab

SharpLabでは、自分が書いたC#コードをコンパイラがどんなコードとして扱い、それをどんなILコードへコンパイルするかを手軽に確認できる。

[かわさきしんじ,Insider.NET編集部]
「Dev Basics/Keyword」のインデックス

連載目次

 SharpLabは、プログラマーが記述したC#コードをコンパイラが実際にはどのようなコードとして扱い、それをどんなILコード(Intermediate Language Code:中間言語コード)へとコンパイルするかを確認できるWebサイト。

SharpLab SharpLab

SharpLabでできること

 例えば、以下のようなコードがあったとしよう。

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));
  }
}

タプル構文を使って、値を交換するSwapメソッド

 これがどういうC#コードとして扱われるかを試したのが、以下だ。

System.ValueTuple構造体が明確にコードに現れるようになった System.ValueTuple構造体が明確にコードに現れるようになった

 ラムダ式を使って記述されたメソッドは通常のメソッドとなり、タプル構文がSystem.ValueTuple構造体を使ったコードへと変換されている。

 これらはシンプルな例だが、自分が書いたコードが実際にはどのようなコードとして取り扱われるかをSharpLabは教えてくれるということだ。

 SharpLabで扱えるのはC#だけではない。[Code]ペーンでは使用する言語としてC#/Visual Basic/F#を選択可能だ。一方、[Results]ペーンでは出力結果としてC#/Visual Basic/IL/JIT asmを選択できる。

言語選択を行う2つのドロップダウン 言語選択を行う2つのドロップダウン

 出力結果に表示するものとしては、上に述べた言語だけではなく、構文木([Syntax Tree])やコンパイルできるかの確認([Verify Only])、コードの実行結果([Run])も選択できる。例えば、以下は先ほどのタプルを使用したコードがどんなILコードになるかを示したところだ。

ILへのコンパイル結果 ILへのコンパイル結果

 自分が書いたC#コードがどんなILコードにコンパイルされるかを確認したければ、コードをコンパイルしてildasmコマンドやILSpyなどのツールを使ってILコードを参照するか、LINQPadなどのツールで対話的にコードを参照するのがよくあるやり方だ。しかし、SharpLabならWebブラウザでコードを入力するだけで、C#コードの展開結果やコンパイル結果がどうなるかをお手軽に確認できる。


 WebブラウザでSharpLabを開いて、そこにC#などのコードを入力すると、そのコードをコンパイラが実際にはどのようなコードとして扱い、それをどんなILコードへとコンパイルするかを確認できる。自分が書いたコードが実際にはどのように挙動し、どんなコードにコンパイルされ、さらにはどのようにJITコンパイルされるかを理解することは、C#プログラマーとしての実力を増すことにもつながる。そのためのお手軽な手段として、SharpLabはオススメだ。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。