Dart

Dart（ダートまたはダーツ。当初はDashと呼ばれていた）は、ウェブアプリやモバイルアプリのクライアント開発向けに設計されたプログラミング言語である。Googleによって開発された言語で、サーバーやデスクトップ向けアプリケーションの開発にも使用できる。
Dartはオブジェクト指向、クラスベース、ガベージコレクションを備えた、Cスタイルのを持つ言語である。DartはネイティブコードまたはJavaScriptにコンパイルでき、、Mixin、抽象クラス、、ジェネリクス、型推論をサポートしている。
2011年10月10日 - 12日に開催された デンマークのオーフスで開催された「GOTOカンファレンス」で公開された。この言語は、ウェブブラウザ組み込みのスクリプト言語であるJavaScriptの代替となることを目的に作られた。
歴史.
Dart言語はJavaScript言語にある解決できない言語上の問題点を解決し、なおかつ、より優れたパフォーマンスを発揮し、大規模なプロジェクト用途にも耐え得る特徴を備え、セキュリティ面でもより優れた言語として、設計された。Googleの技術者は「」というクラウド用統合開発環境を開発している。恐らくこれが最初のDart言語のアプリケーションだと思われる。GoogleはDart言語をサポートしないウェブブラウザのために、Dart言語で作られたプログラムをECMAScript 3に必要に応じて変換するクロスコンパイラを提供すると告知している。また、型付のコードをDart言語に変換するツールも提供されることになっている。GoogleはDartの仮想機械をChromeブラウザに統合するとしており、他のブラウザがこれに追従することを期待しているようであった。仮想機械とクロスコンパイラは2011年の末までには利用できる予定となっていた。
しかし普及は進まず、2015年には仮想機械のChrome統合を断念。また2017年には、DartはGoogleにおいて重要な言語であるとしながらも、競合するTypeScriptがGoogle社内の標準プログラミング言語として承認されたことが発表された。
2018年2月にはDart 2が発表された。Dart 2.6より、ネイティブコードにコンパイルできるdart2nativeが開発されたほか、強力な型システムなどの言語機能の強化が行われている。
用途.
Dartのコードを実行する方法は4つある。
isolate.
並行性（concurrency）を実現するために、Dartではisolateと呼ばれる、メモリを共有せずにメッセージパッシングを使用する独立したワーカーを利用する。これはErlangのprocessに似ている（詳しくはアクターモデルを参照）。すべてのDartプログラムは少なくとも1つのisolate、main isolateを使用している。Dart 2からは、Dartウェブプラットフォームはisolateをサポートしなくなり、開発者は代わりにWeb Workerを使用することが推奨されている。
スナップショット.
スナップショットはDart VMのコアパーツである。スナップショットには、オブジェクトとその他のランタイムデータがファイルとして保存される。
ネイティブモバイルアプリ.
GoogleはAndroidとiOSのネイティブモバイルアプリ開発のためにFlutterを発表した。Flutterはモバイルアプリのフレームワーク、ウィジェット、ツールをすべて含んだSDKであり、開発者はDartで書かれたモバイルアプリのビルドとデプロイができる。FlutterはFirebaseや、他のモバイルアプリSDKと連携でき、オープンソースである。
JavaScriptへのコンパイル.
Dart SDKにはDartからJavaScriptへ変換するコンパイラが含まれる。開発中には、dartdevcが高速なリフレッシュサイクルをサポートする。最終バージョンのアプリでは、dart2jsがデプロイ可能なJavaScriptを生成する。
最初のコンパイラはDartコードからJavaScriptを生成するdartcだったが、廃止された。2番目のDartからJavaScriptへのコンパイラはFrogだった。FrogはDartで書かれていたが、言語の完全なセマンティクスは実装されなかった。3番目のDartからJavaScriptへのコンパイラはdart2jsだった。以前のコンパイラの進化形であるdart2jsはDartで記述されており、完全なDart言語仕様とセマンティクスを実装することを目的としている。
2013年3月28日、Dartチームは、dart2jsコンパイラを使用してJavaScriptにコンパイルされたDartコードに対応する更新をブログに投稿した。DeltaBlueベンチマーク用のChromeのV8 JavaScriptエンジンで、手書きのJavaScriptよりも高速に実行されるようになったと述べている。
例.
Hello worldプログラム。
main() {
 print('Hello World!');
フィボナッチ数を計算する関数の例
int fib(int n) {
 if (n <= 1) return n;
 return fib(n - 1) + fib(n - 2);
main() {
 print('fib(20) = ${fib(20)}');
単純なクラスの例
// sqrt関数を呼び出すためにmathライブラリをインポート
import 'dart:math' as math;
// Pointクラスを定義
class Point {
 // 2つのインスタンス変数を定義
 final num x, y;
 // コンストラクター関数
 Point(this.x, this.y);
 // 初期化リストを含む名前付きコンストラクター関数
 Point.origin()
 : x = 0,
 y = 0;
 //メソッド定義の例
 num distanceTo(Point other) {
 var dx = x - other.x;
 var dy = y - other.y;
 return math.sqrt(dx * dx + dy * dy);
 // 演算子のオーバーローディングの例
 Point operator +(Point other) => Point(x + other.x, y + other.y);
// すべてのDart言語のプログラムは main()関数から始まる
void main() {
 // point オブジェクトの生成.
 var p1 = Point(10, 10);
 var p2 = Point.origin();
 var distance = p1.distanceTo(p2);
 print(distance);