Dart(プログラミング言語)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
ダート
Dartプログラミング言語logo.svg
パラダイムマルチパラダイム機能的命令的オブジェクト指向反射的[1]
によって設計されたラース・バクとカスパー・ルンド
デベロッパーグーグル
初登場2011年10月10日; 10年前[2] (2011-10-10
安定リリース
2.14.1 [3] ウィキデータでこれを編集する / 2021年9月8日; 59日前 (20219月8日
プレビューリリース
2.14.1 / 2021年9月8日; 59日前[4] (2021-09-08)
規律の入力1.x:オプション
2.x:推定[5]静的強い
プラットホームクロスプラットフォーム
OSクロスプラットフォーム
ライセンスBSD
ファイル名拡張子.dart
Webサイトdart .dev
主要な実装
Dart VM、dart2native、dart2js、DDC、Flutter
に影響を受けた
CC ++C#ErlangJavaJavaScriptKotlin[6] RubySmalltalkStrongtalk[7] TypeScript [8]

Dart、Webアプリモバイルアプリなどのクライアント開発用に設計されたプログラミング言語です[9] [10]Googleによって開発されおり、サーバーやデスクトップアプリケーションの構築にも使用できます。

ダーツは、オブジェクト指向クラスベースガベージコレクションと言語Cスタイルの構文[11] DartはネイティブコードまたはJavaScriptのいずれかにコンパイルできますインターフェイスミックスイン抽象クラス洗練されたジェネリック型推論をサポートします[12]

歴史

Dartは、2012年10月10〜12日にデンマークのオーフス開催されたGOTO会議で発表されました[13] このプロジェクトは、LarsBakとKasperLundによって設立されました[14] Dart1.0は2013年11月14日にリリースされました。[15]

Dartは当初、さまざまな評判を持っていましたが、ChromeにDart VMを含めるという当初の計画により、DartイニシアチブはWebの断片化について一部の人から批判されてきました。これらの計画は、DartをJavaScriptにコンパイルする代わりに、Dartの1.9リリースで2015年に取り下げられました。[16]

2018年8月にDart2.0がリリースされ、サウンドタイプシステムなどの言語が変更されました。[17]

Dart 2.6では、新しい拡張機能dart2nativeが導入されました。この機能は、ネイティブコンパイルをLinux、macOS、およびWindowsデスクトッププラットフォームに拡張します。以前の開発者は、AndroidまたはiOSデバイスのみを使用して新しいツールを作成できました。さらに、この拡張機能を使用すると、Dartプログラムを自己完結型の実行可能ファイルに構成することが可能になります。したがって、会社の代表者によると、Dart SDKをインストールする必要はなく、自己完結型の実行可能ファイルを数秒で実行できるようになりました。新しい拡張機能はFlutterツールキットとも統合されているため、小規模なサービス(バックエンドサポートなど)でコンパイラーを使用できます。[18] [19]

標準化

Ecma International、Dartの標準化に取り組むための技術委員会TC52 [20]設立しました。また、Dartは標準のJavaScriptにコンパイルできるため、最新のブラウザーで効果的に機能します。Ecma Internationalは、2014年7月の第107回総会でダート言語仕様の第1版を承認し[21]、2014年12月に第2版を承認しました[22]最新の仕様はダート言語仕様で入手できます

使用法

Dartコードを実行する方法は4つあります。

ウェブ
Dartは、主流のWebブラウザー実行するために、JavaScriptへのソース間コンパイラー依存していますプロジェクトサイトによると、Dartは「開発ツールを簡単に作成でき、最新のアプリ開発に最適で、高性能な実装が可能なように設計されています」とのことです。[23] WebブラウザーでDartコードを実行する場合、コードはdart2jsコンパイラーを使用してJavaScriptにプリコンパイルされます。JavaScriptとしてコンパイルされたDartコードは、すべての主要なブラウザーと互換性があり、ブラウザーがDartを採用する必要はありません。コンパイルされたJavaScript出力を最適化してコストのかかるチェックや操作を回避することで、Dartで記述されたコードは、JavaScriptイディオムを使用して手書きされた同等のコードよりも高速に実行できる場合があります。[24]
スタンドアロン
Dartソフトウェア開発キット(SDK)には、スタンドアロンのDart VMが付属しており、Dartコードをコマンドラインインターフェイス環境で実行できます。Dart SDKに含まれている言語ツールは主にDartで記述されているため、スタンドアロンのDartVMはSDKの重要な部分です。これらのツールには、dart2jsコンパイラとpubと呼ばれるパッケージマネージャーが含まれます。Dartには完全な標準ライブラリ付属しており、ユーザーはカスタムWebサーバーなどの完全に機能するシステムアプリを作成できます。[25]
事前コンパイル
Dartコードは、マシンコード(ネイティブ命令セット)にAOTコンパイルできますDartで構築されたモバイルアプリSDKであるFlutterで構築されたアプリは、AOTでコンパイルされたDartコードとしてアプリストアにデプロイされます。[26]
ネイティブ
自己完結型のネイティブ実行可能コードにコンパイルするためのdart2nativeコンパイラを備えたDart2.6。Dart 2.6より前は、この機能はFlutterを介しiOSおよびAndroidモバイルデバイスでのみこの機能を公開していました[27]

分離

並行性を実現するために、Dartは、メモリを共有せず、代わりにメッセージパッシングを使用する独立したワーカーである分離を使用します。[28]これはErlangプロセスに似ています(アクターモデルも参照)。すべてのDartプログラムは、メインの分離株である少なくとも1つの分離株を使用します。Dart 2以降、Dart Webプラットフォームは分離をサポートしなくなり、開発者は代わりにWebワーカー使用することをお勧めします[29]

スナップショット

スナップショットはDartVMのコア部分です。スナップショットは、オブジェクトやその他のランタイムデータを格納するファイルです。[28]

スクリプトのスナップショット
Dartプログラムはスナップショットファイルにコンパイルできます。これらのファイルには、事前に解析されて実行できる状態になっているすべてのプログラムコードと依存関係が含まれています。これにより、高速起動が可能になります。
完全なスナップショット
Dartコアライブラリは、ライブラリの高速ロードを可能にするスナップショットファイルにコンパイルできます。メインのDartVMのほとんどの標準ディストリビューションには、実行時にロードされるコアライブラリのスナップショットが事前に作成されています。
オブジェクトのスナップショット
Dartは非常に非同期の言語です。これにより、並行性のために分離を使用ます。これらはメッセージを渡すワーカーであるため、メッセージシリアル化する方法が必要です。これは、特定のオブジェクトから生成されスナップショットを使用して実行され、その後、逆シリアル化のために別の分離に転送されます。

ネイティブモバイルアプリ

GoogleはAndroidiOSの両方でネイティブモバイルアプリを開発するためにFlutter導入しました[30] Flutterは、フレームワーク、ウィジェット、ツールを備えたモバイルアプリSDKであり、開発者がDartで記述されたモバイルアプリを構築およびデプロイする方法を提供します。[31] FlutterはFirebase [32]やその他のモバイルアプリSDKで動作し、オープンソースです。

JavaScriptへのコンパイル

Dart SDKには、2つのDart-to-JavaScriptコンパイラが含まれています。開発中、dartdevcはクイックリフレッシュサイクルをサポートします。アプリの最終バージョンの場合、dart2jsはデプロイ可能なJavaScriptを生成します。[33]

DartコードからJavaScriptを生成した最初のコンパイラはdartcでしたが、非推奨になりました。2番目のDart-to-JavaScriptコンパイラはFrogでした。Dartで書かれましたが、言語の完全なセマンティクスを実装することはありませんでした。3番目のDart-to-JavaScriptコンパイラはdart2jsでした。以前のコンパイラの進化形であるdart2jsはDartで記述されており、完全なDart言語仕様とセマンティクスを実装することを目的としています。

2013年3月28日、Dartチームは、dart2jsコンパイラを使用してJavaScriptにコンパイルされたDartコードに対応する更新をブログに投稿し[34]、DeltaBlueベンチマーク用のChromeのV8JavaScriptエンジンで手書きのJavaScriptよりも高速に実行されるようになりました。[35]

編集者

2011年11月18日、Googleは、macOSWindows、およびLinuxベースのオペレーティングシステム向けにEclipseコンポーネントに基づくオープンソースプログラムであるDartEditorリリースしました[36]エディターは、構文の強調表示コード補完、JavaScriptのコンパイル、WebおよびサーバーのDartアプリケーションの実行、およびデバッグをサポートします

2012年8月13日、GoogleはDart開発用のEclipseプラグインのリリースを発表しました。[37]

2015年4月18日、GoogleはDart Editorを廃止し、JetBrains 統合開発環境(IDE)[38]を採用することを発表しましたこれは、現在この言語で推奨されているIDEです。 Dartプラグイン[39]は、IntelliJ IDEAPyCharmPhpStorm、およびWebStormで使用できます。このプラグインは、構文の強調表示、コード補完、分析、リファクタリング、デバッグなどの多くの機能をサポートしています。Sublime TextAtomEmacsVimVisual StudioCodeなどの他のプラグインもエディターで利用できます[40]

Chrome Dev Editor

2013年、Chromiumチームは、コード名がSparkであるGUIウィジェットの再利用可能なライブラリを備えたオープンソースのChromeアプリベースの開発環境での作業を開始しました[41]プロジェクトは後にChromeDevEditorに名前が変更されました。[42] Dartに組み込まれ、Polymerを搭載したSparkが含まれていました。[43]

2015年6月、GoogleはCDEプロジェクトをフリーソフトウェアプロジェクトとしてGitHubに移管し、CDEへの積極的な投資を停止しました。[44] 2019年4月の時点で、Chrome DevEditorは現在活発に開発されていません。[45]

DartPad

Dartチームは、Dartの使用を開始するためのより簡単な方法を提供するために、2015年の初めにDartPadを作成しました。これは完全にオンラインのエディターであり、ユーザーはDartアプリケーションプログラミングインターフェイス(API)を試して、Dartコードを実行できます。構文の強調表示、コード分析、コード補完、ドキュメント、およびHTMLとCSSの編集を提供します。[46]

SIMD

2013年、John McCutchanは、ダーツの単一命令、複数データ(SIMD)命令セットへのパフォーマンスの高いインターフェイスを作成したことを発表しました[47] [非一次情報源が必要]

インターフェイスは2つのタイプで構成されています。

  • Float32×4、4×単精度浮動小数点値
  • Uint32×4、4×32ビットの符号なし整数値

これらのタイプのインスタンスは不変であり、最適化されたコードではSIMDレジスタに直接マップされます。Dartで表現された操作は、通常、オーバーヘッドなしで1つの命令にコンパイルされます。これは、CおよびC ++ 組み込み関数に似ています。4×4行列乗算3D頂点変換、およびマンデルブロ集合の視覚化のベンチマークは、Dartで記述されたスカラーコードと比較して400%近く高速化されていることを示しています。

Aこんにちは、世界!例:

void  main () { 
  print 'Hello、World!' ); 
}

n番目のフィボナッチ数を計算する関数

int  fib int  n  =>  n  >  2   fib n  -  1  +  fib n  -  2 ))  1 ; 
// Dartの条件演算子を使用したフィボナッチ関数の実装
//このコードは次のように読み取られます:
//整数nが与えられた場合、
// n> 2の場合、fib(n-1)+ fib(n-2);を返します。
//それ以外の場合は、結果として整数1を返します

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

単純なクラス:

//数学ライブラリをインポートして、sqrt関数にアクセスします。
//名前として `math`を使用してインポートされるため、アクセスではプレフィックスとして` math.`を使用する必要があります。
'dart:math'mathとしてインポートし ます;  

// Pointのクラスを作成します。
クラス ポイント {

  //最終変数は、一度割り当てられると変更できません。
  // 2つのインスタンス変数を宣言します。
  最終的な 数値 x  y ;

  //インスタンス変数を設定するためのシンタックスシュガーを備えたコンストラクター。
  //コンストラクターには2つの必須パラメーターがあります。
  これX  このY )。

  //イニシャライザリストを持つ名前付きコンストラクタ。
  ポイント原点()
       x  =  0 
        y  =  0 ;

  // 方法。
  num  distanceTo Point  other  { 
    var  dx  =  x  -  other x ;
    するvar  DY  =  Y  - y ;
    数学を返し ます。sqrt dx * dx + dy * dy ); }      
  
  
  //「ゲッター」の例。
  //最終変数と同じように機能しますが、アクセスごとに計算されます。
  num  get  Magnitude  =>  math sqrt x  *  x  +  y  *  y );

  オーバーロードオペレータの//例
  ポイント オペレータ + ポイント  => ポイントX  + その他X  Y  + その他yと
  // Point in Dart 2+などのクラスをインスタンス化する場合、newは
  //オプションの単語です
}

//すべてのDartプログラムはmain()で始まります。
void  main () { 
  //ポイントオブジェクトをインスタンス化します。
  VaRの P1  = ポイント10  10 )。
  印刷p1 大きさ); 
  var  p2  = ポイント起源(); 
  var  distance  =  p1 distanceTo p2 ); 
  印刷距離); 
}

他の言語からの影響

Dartは、C、Java、C#、JavaScriptなどと並んALGOL言語族の子孫です[48]

方法カスケードのいくつかの方法を同じオブジェクトに次々に呼び出すための構文的ショートカットを提供する構文は、Smalltalkのに採用されています。

DartのミックスインStrongtalk [要出典] [49]Rubyの影響を受けました

Dartは、アプリケーションを構築するときに、同時実行およびセキュリティユニットとして分離を利用します。[50] Isolateの概念は、Erlangで最も有名に実装されているActorモデル基づいています。

制御された安全なリフレクションを実行するためのMirrorAPIは、Gilad Bracha(Dartチームのメンバー)とDavid Ungarによる論文[51]で最初に提案され、当初はSelfに実装されていました

も参照してください

参考文献

  1. ^ Kopec、David(2014年6月30日)。絶対初心者のためのダーツNS。56. ISBN 9781430264828取得した24年11月2015
  2. ^ Bak、Lars(2011年10月10日)。「ダート:構造化されたWebプログラミングのための言語」Google CodeBlog 取り出さ年1月31 2016
  3. ^ https://github.com/dart-lang/sdk/releases/tag/2.14.1
  4. ^ 「DartSDKアーカイブ」
  5. ^ 「ダート型システム」dart.dev
  6. ^ 「Dart2.7の発表:より安全で表現力豊かなDart-Dart-Medium」マイケルトムセン2019年12月12日2020年1月24日取得
  7. ^ 「Web言語とVM:高速コードは常に流行しています。(V8、Dart)-Google I / O2013」YouTube取得した22年12月2013
  8. ^ 「ダーツチームはTypeScriptを歓迎します」2020年2月22日取得
  9. ^ 「ダーツの概要」dart.dev 2021-04-06を取得
  10. ^ 「Dartプログラミング言語」dart.dev 2021-04-06を取得コレクションを拡張するためのspread演算子や、各プラットフォームのUIをカスタマイズするためのコレクションなどの機能を備えたユーザーインターフェイスを構築するために最適化されたプログラミング言語
  11. ^ 「ダーツ言語のツアー」dart.dev 201889日取得
  12. ^ 「ダート型システム」dart.dev
  13. ^ 「ダート、構造化されたWebプログラミングのための新しいプログラミング言語」GOTO会議(プレゼンテーション)(開会基調講演)、オーフス会議、2011-10-10
  14. ^ ラッド、セス。「ダーツとは」ダートとは何ですか?オライリー2014年8月16日取得
  15. ^ 「Dart1.0:構造化されたWebアプリ用の安定したSDK」news.dartlang.org 201888日取得
  16. ^ セス・ラッド。「ダーツニュース&アップデート」dartlang.org
  17. ^ ムーア、ケビン(2018-08-07)。「Dart2StableとDartWebプラットフォームの発表」ダーツ201888日取得
  18. ^ 「Dart2.5はデスクトップにネイティブコンパイルをもたらします」Infoworld2019年11月20日2019-11-28を取得
  19. ^ 「dart2nativeでリリースされたDart2.6」SDtimes2019年11月7日2019-11-28を取得
  20. ^ 「TC52-ダート」2016年8月2日にオリジナルからアーカイブされまし2013年1216日取得
  21. ^ アンダースソーハウジサンドホルム。「ダーツニュース&アップデート」dartlang.org
  22. ^ アンダースソーハウジサンドホルム。「ダーツニュース&アップデート」dartlang.org
  23. ^ 「Why?」、Dart lang(FAQ)、Dartは、開発ツールを簡単に作成でき、最新のアプリ開発に最適で、高性能な実装が可能なように設計されています。
  24. ^ 「コンパイルターゲットとしてのJavaScript:高速化」(PDF)Dartlang.org。アーカイブ(PDF) 2016年7月2日に2013年818日取得
  25. ^ 「dart:ioライブラリの紹介」Dartlang.org 2013年721日取得
  26. ^ 「フラッターFAQ」flutter.ioFlutterはiOSでコードをどのように実行しますか?取得した2016年10月2日に
  27. ^ 「dart2nativeを使用したDart2.6の発表:Dartを自己完結型のネイティブ実行可能ファイルにコンパイルします」2019年11月8日2019126日取得
  28. ^ a b 「GoogleDartの本質:アプリケーション、スナップショット、分離の構築」InfoQ 2021-08-29を取得
  29. ^ ムーア、ケビン(2018年2月23日)。「Dart2の重大な変更:dart:mirrorsおよびdart:isolateのWebサポートの削除」Googleグループ
  30. ^ 「Flutter-記録的な速さで美しいネイティブアプリ」flutter.dev
  31. ^ 「FAQ」flutter.dev 2021-08-29を取得
  32. ^ 「Firebase」flutter.dev 2021-08-29を取得
  33. ^ 「展開」angledart.dev
  34. ^ ラッド、セス(2013-03-28)。「DartNews&Updates:dart2jsがDartからより高速なJavaScriptコードを生成する理由」News.dartlang.org 2013年721日取得
  35. ^ 「ダーツパフォーマンス」Dartlang.org2017-01-03にオリジナルからアーカイブされました2013年721日取得
  36. ^ 「GoogleはWindows、Mac OS X、およびLinux用のDartエディターをリリースします」アーカイブされたオリジナルの2013年12月3日に2011年11月29日取得
  37. ^ 「Eclipse用のDartプラグインはプレビューの準備ができています」
  38. ^ ラッド、セス(2015-04-30)。「ダーツのためのエディターとIDEの現在と未来」ダーツニュース&アップデート2015年5月18日取得
  39. ^ 「JetBrainsプラグインリポジトリ:ダート」Plugins.intellij.net 2013年721日取得
  40. ^ 「ダーツツール」dart.dev 201611月15日取得
  41. ^ Beaufort、François。「クロムチームは現在積極的に活動しています」
  42. ^ 「Chromeアプリベースの開発環境」GitHub2021年10月26日。
  43. ^ 「Spark、GoogleのChromeアプリはChromebookのIDEです」2013年11月22日。
  44. ^ Saroop、Sri。「ChromeDevEditor:お知らせ」
  45. ^ 「ChromeDevEditorは、Chromeプラットフォームでアプリを構築するための開発者ツールです。JavaScriptまたはDartでChromeアプリとウェブアプリを使用します。(アクティブな開発ではなくなりました)-googlearchive / chromedeveditor」2019年7月29日–GitHub経由。
  46. ^ ラッド、セス(2015-05-06)。「DartPadの発表:Dartコードを探索するための摩擦のない方法」ダーツニュース&アップデート2015年5月18日取得
  47. ^ 「Dartを介してSIMDをWebに持ち込む」(PDF)2016年7月2日にオリジナル(PDF)からアーカイブされまし
  48. ^ 「Algolファミリー」c2.com
  49. ^ ブラチャ、ギラッド; Griswold、David(1996年9月)。「ミックスインによるSmalltalk言語の拡張」(PDF)OOPSLAワークショップOOPSLA。
  50. ^ 「GoogleDartの本質:アプリケーション、スナップショット、分離の構築」InfoQ
  51. ^ ブラチャ、ギラッド; Ungar、David(2004)。「ミラー:オブジェクト指向プログラミング言語のメタレベル機能の設計原則」(PDF)ACMSIGPLANの通知ACM。39(10):331–344。土井10.1145 /1035292.1029004 取得した15年2月2014

参考文献

外部リンク