Dart: Structured web programming

Googleは10月10日(米国時間)、新しいプログラミング言語「Dart」を発表した。

DartはWebアプリケーションの開発を主眼においたプログラミング言語。クラスの機能を有するとともに、型付けが自由という特徴がある。型を付けずに利用することも、型を指定して利用することもできる。

int fib(int n) {
  if (n <= 1) return n;
  return fib(n - 1) + fib(n - 2);
}


main() {
  print('fib(20) = ${fib(20)}');
}

上記ソースコードはDartのサイトに掲載されているフィボナッチ数列を計算するサンプルコード。よく使われるプログラミング言語のシンタックスに似ていることがわかる。また、次のサンプルの様にクラスを定義しての利用も可能。

class Point {
  Point(this.x, this.y);
  distanceTo(Point other) {
    var dx = x - other.x;
    var dy = y - other.y;
    return Math.sqrt(dx * dx + dy * dy);
  }
  var x, y;
}


main() {
  Point p = new Point(2, 3);
  Point q = new Point(3, 4);
  print('distance from p to q = ${p.distanceTo(q)}');
}

Dartは専用の仮想マシンで実行させることができるほか、JavaScriptへコンパイルしてブラウザなどで動作させることも可能。ChromeではDartの仮想マシンそのものをブラウザに取り込むことも検討しており、将来的にはDartのバイトコードを直接実行できるようになる可能性がある。

DartはJavaScriptが解決できなかった問題を解決する取り組みとして興味深い。JavaScriptは歴史的な背景もあり、スニペットレベルでの利用には便利だが、大規模システムの開発には向いていないという特徴がある。オブジェクト指向の要素を取り入れて大規模システム開発向けの言語へ転換させる取り組みもあったが、最終的に現在のJavaScriptをベースに機能を拡張する路線で各ベンダは協調体制を取っている。

DartはこうしたJavaScriptが妥協した点の解決に乗り出しているところが興味深い。まず、言語がクラスベースになっている点。クラスベースシステムは大規模アプリケーション開発において扱いやすい。しかも、クラスなしでも開発できるようになっており、スニペットレベルの扱いやすさも残している。

さらに型の指定を自由にした点もポイントとなる。型はコンパイル時の最適化や実行時の最適化などで重要な役割を担う。セキュリティの観点からも型が指定されていた方が好ましいことが多い。型付けを自由にしたことで、スニペットレベルでの利用では使わないで、大規模アプリや、あとからアプリが大規模化してきた時に改めて指定できるようになっている。数行程度の小さい利用から大規模アプリケーションまで、双方ともにカバーする仕様になっている。

Googleはプログラミング言語「Go」を発表している。GoがC言語を置き換える目的を持っているとすれば、「Dart」はJavaScriptの置き換えを狙ったプログラミング言語といえる。「Go」がGoogleのプロダクトでサポートされたように、「Dart」もGoogleのプロダクトへ順次投入されていくものとみられる。