出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/05/17 13:54 UTC 版)
DART
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/12/04 21:13 UTC 版)
| パラダイム | マルチパラダイムプログラミング、オブジェクト指向プログラミング、関数型プログラミング、命令型プログラミング、リフレクション |
|---|---|
| 登場時期 | 2011年10月10日 |
| 開発者 | Google |
| 最新リリース | 3.10.3 / 2025年12月2日[1] |
| 型付け | ver. 1.x:(動的または静的) ver. 2.x: 型推論(強い静的型付け) |
| 主な処理系 | Dart VM、dart2native、dart2js、Flutter |
| 影響を受けた言語 | Strongtalk、Java、JavaScript、Smalltalk、Erlang、C Sharp |
| ライセンス | BSDライセンス |
| ウェブサイト | dart |
| 拡張子 | dart |
Dart(ダートまたはダーツ。当初はDashと呼ばれていた)は、ウェブアプリやモバイルアプリのクライアント開発向けに設計されたプログラミング言語である[2][3]。Googleによって開発された言語で、サーバーやデスクトップ向けアプリケーションの開発にも使用できる。
Dartはオブジェクト指向、クラスベース、ガベージコレクションを備えた、Cスタイルの構文を持つ言語である[4]。DartはネイティブコードまたはJavaScriptにコンパイルでき、インターフェイス、Mixin、抽象クラス、reification、ジェネリクス、型推論をサポートしている[5]。
2011年10月10日 - 12日に開催された デンマークのオーフスで開催された「GOTOカンファレンス」[6]で公開された[7]。この言語は、ウェブブラウザ組み込みのスクリプト言語であるJavaScriptの代替となることを目的に作られた。
Dart言語はJavaScript言語にある解決できない言語上の問題点を解決し[8]、なおかつ、より優れたパフォーマンスを発揮し、大規模なプロジェクト用途にも耐え得る特徴を備え、セキュリティ面でもより優れた言語[9]として、設計された。Googleの技術者は「Brightly」というクラウド用統合開発環境を開発している。恐らくこれが最初のDart言語のアプリケーションだと思われる。GoogleはDart言語をサポートしないウェブブラウザのために、Dart言語で作られたプログラムをECMAScript 3に必要に応じて変換するクロスコンパイラを提供すると告知している。また、型付のClosureコードをDart言語に変換するツールも提供されることになっている[10]。GoogleはDartの仮想マシンをChromeブラウザに統合するとしており、他のブラウザがこれに追従することを期待しているようであった。仮想マシンとクロスコンパイラは2011年の末までには利用できる予定となっていた[9]。
しかし普及は進まず、2015年には仮想マシンのChrome統合を断念。また2017年には、DartはGoogleにおいて重要な言語であるとしながらも、競合するTypeScriptがGoogle社内の標準プログラミング言語として承認されたことが発表された[11]。
2018年2月にはDart 2が発表された[12]。Dart 2.6より、ネイティブコードにコンパイルできるdart2nativeが開発されたほか、強力な型システムなどの言語機能の強化が行われている。
2023年5月にはDart 3が発表された[13]。デフォルト状態においてnull値を不許容にする仕組み (Sound null safety) が導入された。
Dartのコードを実行する方法は4つある。
並行性(concurrency)を実現するために、Dartではisolateと呼ばれる、メモリを共有せずにメッセージパッシングを使用する独立したワーカーを利用する[19]。これはErlangのprocessに似ている(詳しくはアクターモデルを参照)。すべてのDartプログラムは少なくとも1つのisolate、main isolateを使用している。Dart 2からは、Dartウェブプラットフォームはisolateをサポートしなくなり、開発者は代わりにWeb Workerを使用することが推奨されている[20]。
スナップショットはDart VMのコアパーツである。スナップショットには、オブジェクトとその他のランタイムデータがファイルとして保存される[21]。
GoogleはAndroidとiOSのネイティブモバイルアプリ開発のためにFlutterを発表した[22]。Flutterはモバイルアプリのフレームワーク、ウィジェット、ツールをすべて含んだSDKであり、開発者はDartで書かれたモバイルアプリのビルドとデプロイができる[23]。FlutterはFirebase[24]や、他のモバイルアプリSDKと連携でき、オープンソースである。
Dart SDKにはDartからJavaScriptへ変換するコンパイラが含まれる。開発中には、dartdevcが高速なリフレッシュサイクルをサポートする。最終バージョンのアプリでは、dart2jsがデプロイ可能なJavaScriptを生成する[25]。
最初のコンパイラはDartコードからJavaScriptを生成するdartcだったが、廃止された。2番目のDartからJavaScriptへのコンパイラはFrogだった。FrogはDartで書かれていたが、言語の完全なセマンティクスは実装されなかった。3番目のDartからJavaScriptへのコンパイラはdart2jsだった。以前のコンパイラの進化形であるdart2jsはDartで記述されており、完全なDart言語仕様とセマンティクスを実装することを目的としている。
2013年3月28日、Dartチームは、dart2jsコンパイラを使用してJavaScriptにコンパイルされたDartコードに対応する更新をブログに投稿した[26]。DeltaBlueベンチマーク用のChromeのV8 JavaScriptエンジンで、手書きのJavaScriptよりも高速に実行されるようになったと述べている[27]。
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);
}
ウィキメディア・コモンズには、Dartに関するメディアがあります。
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/18 05:13 UTC 版)
DART+(DART+)の一環として、2019年5月にCIÉ8100/8300系を置き換える最大600両の電車および蓄電池電車の車両を導入する計画を明らかにした。新型車両は2024年から運用を開始する予定である。また、2027年までにメイヌース駅、M3パークウェイ駅、ヘーゼルハッチ&セルブリッジ駅、ドロヘダ・マクブライド駅への路線の電化工事を予定しており、現在のコミューター(ダブリン通勤列車)をDARTに置き換えることが検討されている。
※この「DART」の解説は、「アイルランド国鉄」の解説の一部です。
「DART」を含む「アイルランド国鉄」の記事については、「アイルランド国鉄」の概要を参照ください。