Dart (Programmiersprache)

Pfeil
Dart programming language logo.svg
Paradigma Multi-Paradigma: funktional, Imperativ, objektorientierter, reflektierend[1]
Entworfen von Lars Bak und Kasper Lund
Entwickler Google
Erstmals erschienen 10. Oktober 2011; vor 10 Jahren[2]
Stabile Version
2.17.6[3] Edit this on Wikidata / 13. Juli 2022; Vor 24 Tagen
Disziplin tippen 1.x: Optional
2.x: Gefolgert[4] (statisch, stark)
Plattform Plattformübergreifend
OS Plattformübergreifend
Lizenz BSD
Dateiname -Erweiterungen .Pfeil
Webseite Pfeil.dev
Haupt Implementierungen
Dart VM, Dart2native, DART2JS, DDC, DDC, Flattern
Beeinflusst von
C, C ++, C#, Erlang, Java, JavaScript, Rubin, Smalltalk, StrongTalk,[5] Typoskript[6]

Pfeil ist eine Programmiersprache für die Kundenentwicklung,[8][9] wie für das Web und Mobile Apps. Es wurde von entwickelt von Google und kann auch zum Erstellen von Server- und Desktop -Anwendungen verwendet werden.

Es ist ein objektorientierter, Klassenbasierte, garbage gesammelt Sprache mit C-Stil Syntax.[10] Es kann kompilieren entweder nativen Code oder JavaScriptund unterstützt Schnittstellen, Mischungen, Abstrakte Klassen, umgewaltet Generika und Geben Sie Inferenz ein.[11]

Geschichte

Dart wurde auf der GOTO -Konferenz in enthüllt Aarhus, Dänemark, 10. bis 12. Oktober 2011.[12] Das Projekt wurde von gegründet von Lars Bak und Kasper Lund.[13] Dart 1.0 wurde am 14. November 2013 veröffentlicht.[14]

Dart hatte zunächst einen gemischten Empfang und die Dart -Initiative wurde von einigen kritisiert Diese Pläne wurden 2015 mit der 1,9 -Veröffentlichung von DART fallen, um sich stattdessen auf das Zusammenstellen von Dart zu JavaScript zu konzentrieren.[15]

Dart 2.0 wurde im August 2018 mit Sprachänderungen einschließlich eines Sound -Typ -Systems veröffentlicht.[16]

DART 2.6 führte eine neue Erweiterung, DART2Native, ein, die die native Zusammenstellung auf Linux-, MacOS- und Windows -Desktop -Plattformen ausdehnt. Frühere Entwickler könnten neue Tools mit nur Android- oder iOS -Geräten erstellen. Mit dieser Erweiterung ist es auch möglich, ein Programm in in sich geschlossene ausführbare Ausführbarungen zu komponieren. Laut Unternehmensvertretern ist es nicht mehr erforderlich, dass der Dart SDK installiert wird, da die in sich geschlossenen ausführbaren Ausführungen jetzt in wenigen Sekunden ausgeführt werden können. Die neue Erweiterung ist auch in die integriert in die Flattern Toolkit, damit der Compiler für kleine Dienste verwendet wird (z. B. Backend -Unterstützung).[17][18]

Standardisierung

ECMA International hat technisches Komitee TC52 gebildet[19] Um an Dart zu standardisieren, und insofern als Dart zu Standard -JavaScript zusammengestellt werden kann, funktioniert es in jedem modernen Browser effektiv. EI genehmigte die erste Version der Dart -Sprachspezifikation im Juli 2014 in ihrer 107. Generalversammlung,[20] und eine zweite Ausgabe im Dezember 2014.[21] Die neueste Spezifikation ist hier verfügbar.

Verwendungszweck

Es gibt vier Möglichkeiten, Dart -Code auszuführen:

Netz
Im Mainstream laufen Internetbrowser, Dart verlässt sich auf a Source-to-Source-Compiler zu JavaScript. Laut der Projektseite war DART "so konzipiert, dass sie für die moderne App-Entwicklung gut zu entwickeln und in der Lage sind, implementiert zu werden."[22] In einem Webbrowser wird der Code mit dem DART2JS -Compiler in JavaScript vorkompiliert, wodurch er mit allen wichtigen Browsern kompatibel ist, ohne dass Browser erforderlich sind, um ihn zu übernehmen. Durch die Optimierung der kompilierten JavaScript -Ausgabe, um teure Schecks und Vorgänge zu vermeiden, kann der in Dart geschriebene Code in einigen Fällen schneller als äquivalente Code in JavaScript -Idioms ausführen.[23]
Eigenständige
Der Pfeil Softwareentwicklungskit (SDK) Schiffe mit einem eigenständigen Dart-VM, sodass Dart-Code in a ausgeführt werden kann Befehlszeilenschnittstelle Umgebung. Da die im SDK enthaltenen Sprachwerkzeuge hauptsächlich in Dart geschrieben sind, ist der Dart VM ein kritischer Teil davon. Diese Tools umfassen die DART2JS Compiler und a Paket-Manager genannt Pub. Dartschiffe mit einem kompletten Versand Standardbibliothek Ermöglicht Benutzern, vollständig funktionierende System -Apps wie benutzerdefinierte Webserver zu schreiben.[24]
Präsentiert kompiliert
Dartcode kann sein Aot-kompiliert in den Maschinencode (native Befehlssätze). Apps erstellt mit FlatternEine mit DART erstellte mobile App-SDK wird in App Stores als AOT-kompilierter Dartcode bereitgestellt.[25]
Einheimisch
Dart 2.6 enthält die dart2nativ Compiler zum kompilierten nativen ausführbaren, ausführbaren Code. Vor DART 2.6 hat diese Funktion diese Fähigkeit nur auf iOS und Android Mobile Geräte über Flattern.[26]

Isolate

Um die Parallelität zu erreichen, verwendet Dart Isolate, unabhängige Arbeitnehmer, die keinen Speicher teilen, sondern verwenden, sondern verwenden Nachrichtenübergang,[27] ähnlich zu Erlang Prozesse (auch siehe Schauspielermodell). Jedes DART -Programm verwendet mindestens ein Isolat, was das Hauptisolat ist. Seit Dart 2 unterstützt die Dart -Webplattform Isolate nicht mehr und schlägt Entwickler vor Webarbeiter stattdessen.[28]

Schnappschüsse

Snapshots, ein zentraler Bestandteil des DART VM, sind Dateien, die Objekte und andere Laufzeitdaten speichern.[27]

Skript -Schnappschüsse
DART -Programme können in Snapshot -Dateien zusammengestellt werden, die alle Programmcode und Abhängigkeiten enthalten, die vorbereitet und ausgeführt werden können, um schnelle Startups zu ermöglichen.
Vollständige Schnappschüsse
Die DART -Kernbibliotheken können in eine Snapshot -Datei zusammengestellt werden, mit der die Bibliotheken schnell geladen werden können. Die meisten Standardverteilungen des Hauptdart -VM haben einen vorgebauten Schnappschuss für die Kernbibliotheken, die zur Laufzeit geladen werden.
Objekt -Schnappschüsse
Dart ist sehr asynchron Sprache mit Isolaten für Parallelität. Da dies Arbeiter sind, die Nachrichten übergeben, benötigt es einen Weg dazu Serialisieren Mitteilungen. Dies geschieht mit a Schnappschuss, das aus einem bestimmten Objekt erzeugt und dann zum Deserialisieren auf ein anderes Isolat übertragen wird.

Native mobile Apps

Google hat eingeführt Flattern Für native Entwicklung mobiler Apps auf Android, iOS und Fenster.[29] Flutter ist eine mobile App SDK mit Framework, Widgets und Tools, mit der Entwickler mobile Apps erstellen und bereitstellen können, die in Dart geschrieben wurden.[30] Flattern funktioniert mit Firebase[31] und andere mobile App -SDKs und ist Open Source.

Kompilien zu JavaScript

Der Dart SDK enthält zwei Dart-zu-JavaScript-Compiler. Während der Entwicklung, Dartdevc Unterstützt schnelle Aktualisierungszyklen. Für die endgültige Version einer App, DART2JS Erzeugt einsatzbares JavaScript.[32]

Der erste Compiler, der JavaScript aus dem DART -Code generierte, war DARTC, wurde jedoch veraltet. Der zweite Dart-zu-JavaScript-Compiler war Frosch. Es wurde in Dart geschrieben, aber nie die vollständige Semantik der Sprache implementiert. Der dritte Dart-to-JavaScript-Compiler war DART2JS. DART2JS früherer Compiler, DART2JS, ist in Dart geschrieben und soll die vollständige Dart -Sprachspezifikation und Semantik implementieren.

Am 28. März 2013 hat das DART -Team ein Update in seinem Blog -Adressierungs -Dart -Code veröffentlicht, das mit dem DART2JS -Compiler mit JavaScript zusammengestellt wurde.[33] Es wird angegeben, dass es jetzt schneller als handgeschriebener JavaScript auf Chrome's V8 JavaScript -Engine für den Deltablue -Benchmark läuft.[34]

Redakteure

Am 18. November 2011 veröffentlichte Google DART Editor, ein Open-Source-Programm basierend auf Finsternis Komponenten, für Mac OS, Fenster, und Linux-basierend Betriebssysteme.[35] Der Herausgeber unterstützt Satzstellung markieren, Code -Abschluss, JavaScript -Kompilieren, Ausführen von Web- und Server -DART -Anwendungen und Debuggen.

Am 13. August 2012 kündigte Google die Veröffentlichung eines Eclipse -Plugins für die Dart -Entwicklung an.[36]

Am 18. April 2015 gab Google bekannt, dass der DART -Editor zugunsten des Ruhestands in den Ruhestand gehen würde Jetbrains integrierte Entwicklungsumgebung (Ide),[37] Dies ist jetzt die empfohlene IDE für die Sprache. Das Dart -Plugin[38] ist für Intellij Idee, Pycharm, Phpstorming und Webstorm. Dieses Plugin unterstützt viele Funktionen wie Syntax -Hervorhebung, Codebetastung, Analyse, Refactoring, Debugging und vieles mehr. Andere Plugins sind für Redakteure wie möglich verfügbar Erhabener Text, Atom, EMACs, Vim und Visual Studio -Code.[39]

Chrome Dev Editor

2013 begann das Chromium -Team mit der Arbeit an einer Open Source, Chrome App-basierte Entwicklungsumgebung mit einer wiederverwendbaren Bibliothek von GUI -Widgets, Codenamen Spark.[40] Das Projekt wurde später in Chrome Dev Editor umbenannt.[41] Es wurde in Dart eingebaut und enthielt Funken, der von Polymer angetrieben wird.[42]

Im Juni 2015 überwies Google das CDE -Projekt als kostenloses Softwareprojekt an GitHub und stellte aktive Investitionen in CDE ein.[43] Ab April 2019 befindet sich Chrome Dev Editor nicht mehr in aktiver Entwicklung.[44]

Dartpad

Das DART -Team hat zu Beginn 2015 Dartpad erstellt, um eine einfachere Möglichkeit zu bieten, DART zu verwenden. Es ist ein vollständig Online -Editor, aus dem Benutzer mit Dart experimentieren können Anwendungsprogrammierschnittstellen (APIS) und führen Sie den Dart -Code aus. Es bietet Syntax -Hervorhebung, Codeanalyse, Code -Abschluss, Dokumentation sowie HTML- und CSS -Bearbeitung.[45]

Simd

2013 kündigte John McCutchan an[46] dass er eine Performant -Schnittstelle zum einzelnen Anweisungen erstellt hatte, mehrere Daten (Simd) Anweisungssätze für Dart.

Die Schnittstelle besteht aus zwei Typen:

  • Float32 × 4, 4 × einzelne Präzisionsschwimmpunktwerte
  • Uint32 × 4, 4 × 32-Bit unsignierte Ganzzahlwerte

Instanzen dieser Typen sind unveränderlich und im optimierten Code werden direkt auf SIMD -Register abgebildet. Operationen, die in Dart ausgedrückt werden, werden typischerweise in eine Anweisung ohne Overhead zusammengestellt. Dies ist ähnlich wie C und C ++ Intrinsik. Benchmarks für 4 × 4 Matrix-Multiplikation, 3D -Vertex -Transformation, und Mandelbrot Set Die Visualisierung wird im Vergleich zum in Dart geschriebenen Skalarcode nahe 400% beschleunigt.

Beispiel

A Hallo Welt! Beispiel:

Leere hauptsächlich() {  drucken('Hallo Welt!'); } 

Eine Funktion zur Berechnung des N -ten Fibonacci -Nummer:

int Flunkerei(int n) => (n > 2) ? (Flunkerei(n - 1) + Flunkerei(n - 2)) : 1; // Eine Fibonacci -Funktionsinimposition mit einem bedingten Operator in Dart // Dieser Code wird als: // eine Ganzzahl n, // Wenn n> 2, fib (n - 1) + fib (n - 2);  // geben ansonsten die Ganzzahl 1 als Ergebnis zurück Leere hauptsächlich() {  drucken('fib (20) = $ {Flunkerei(20)}'); } 

Eine einfache Klasse:

// Importieren Sie die Mathematikbibliothek, um Zugriff auf die SQRT -Funktion zu erhalten. // Importiert mit `math` als Name, also muss zugreifen, um` math.` als Präfix zu verwenden. importieren 'Dart: Mathematik' wie Mathematik; // Erstellen Sie eine Klasse für Punkt. Klasse Punkt {  // Die endgültigen Variablen können nicht geändert werden, sobald sie zugewiesen sind.  // zwei Instanzvariablen deklarieren.  Finale num x, y;  // ein Konstruktor mit syntaktischer Zucker zum Einstellen von Instanzvariablen.  // Der Konstruktor hat zwei obligatorische Parameter.  Punkt(Dies.x, Dies.y);  // ein benannter Konstruktor mit einer Initialisiererliste.  Punkt.Ursprung()  : x = 0,  y = 0;  // Eine Methode.  num Distanceto(Punkt Sonstiges) {  var dx = x - Sonstiges.x;  var Dy = y - Sonstiges.y;  Rückkehr Mathematik.sqrt(dx * dx + Dy * Dy);  }     // Beispiel eines "Getters".  // wirkt genauso wie eine endgültige Variable, wird jedoch auf jedem Zugriff berechnet.  num erhalten Größe => Mathematik.sqrt(x * x + y * y);  // Beispiel für die Überlastung des Bedieners  Punkt Operator +(Punkt Sonstiges) => Punkt(x + Sonstiges.x, y + Sonstiges.y);  // Wenn Sie eine Klasse wie Punkt in Dart 2+ instanziieren, ist neu ist   // ein optionales Wort } // Alle DART -Programme beginnen mit Main (). Leere hauptsächlich() {  // Punktobjekte instanziieren.  var P1 = Punkt(10, 10);  drucken(P1.Größe);  var p2 = Punkt.Ursprung();  var Distanz = P1.Distanceto(p2);  drucken(Distanz); } 

Einflüsse aus anderen Sprachen

Dart ist ein Nachkomme der Algol Sprachfamilie,[47] neben C, Java, C#, JavaScript und anderen.

Das Methode Kaskade Syntax, die eine syntaktische Verknüpfung zum Aufrufen verschiedener Methoden nach demselben Objekt bietet, wird von SmallTalk übernommen.

Darts Mischungen wurden beeinflusst von StrongTalk[48] und Rubin.

DART nutzt Isolate als Parallelitäts- und Sicherheitseinheit bei der Strukturierung von Anwendungen.[49] Das Isolatkonzept baut auf dem auf Schauspielermodell, was in Erlang am berühmtesten implementiert ist.

Die Spiegel -API für die Durchführung von kontrolliert und sicher Betrachtung wurde zuerst in einem Papier vorgeschlagen[50] durch Gilad Bracha (wer war Mitglied des Dart -Teams) und David Ungar und ursprünglich implementiert in Selbst.

Siehe auch

Verweise

  1. ^ Kopec, David (30. Juni 2014). Dart für absolute Anfänger. p. 56. ISBN 9781430264828. Abgerufen 24. November 2015.
  2. ^ Bak, Lars (10. Oktober 2011). "Dart: Eine Sprache für strukturierte Webprogrammierung". Google Code Blog. Abgerufen 31. Januar 2016.
  3. ^ https://github.com/dart-lang/sdk/releases/tag/2.17.6.
  4. ^ "Das Dart -Typ -System". Dart.dev.
  5. ^ "Websprachen und VMs: Fast Code ist immer in Mode. (V8, Dart) - Google I/O 2013". Youtube. Abgerufen 22. Dezember 2013.
  6. ^ "Das DART -Team begrüßt TypeScript". Abgerufen 22. Februar 2020.
  7. ^ "Dart SDK -Tags". GitHub.
  8. ^ "Dartübersicht". Dart.dev. Abgerufen 2021-04-06.
  9. ^ "Dart -Programmiersprache". Dart.dev. Abgerufen 2021-04-06. Eine Programmiersprache, die zum Erstellen von Benutzeroberflächen mit Funktionen wie dem Spread -Operator für die Erweiterung von Sammlungen und Sammeln optimiert ist, und wenn Sie die Benutzeroberfläche für jede Plattform anpassen
  10. ^ "Eine Tour durch die Dartsprache". Dart.dev. Abgerufen 2018-08-09.
  11. ^ "Das Dart -Typ -System". Dart.dev.
  12. ^ "Dart, eine neue Programmiersprache für strukturierte Webprogrammierung", Goto -Konferenz (Präsentation) (Eröffnung Keynote), Århus Conference, 2011-10-10
  13. ^ Ladd, Seth. "Was ist Dart". Was ist Dart?. O'Reilly. Abgerufen 16. August, 2014.
  14. ^ "DART 1.0: Ein stabiler SDK für strukturierte Web -Apps". news.dartlang.org. Abgerufen 2018-08-08.
  15. ^ Seth Ladd. "Dart News & Updates". Dartlang.org.
  16. ^ Moore, Kevin (2018-08-07). "Ankündigung von Dart 2 Stable und der Dart -Webplattform". Pfeil. Abgerufen 2018-08-08.
  17. ^ "Dart 2.5 bringt native Zusammenstellung auf den Desktop". InfoWorld. 20. November 2019. Abgerufen 2019-11-28.
  18. ^ "Dart 2.6 mit DART2Native veröffentlicht". Sdtimes. 7. November 2019. Abgerufen 2019-11-28.
  19. ^ "TC52 - Dart". Archiviert von das Original am 2016-08-02. Abgerufen 2013-12-16.
  20. ^ Anders Thorhaige Sandholm. "Dart News & Updates". Dartlang.org.
  21. ^ Anders Thorhaige Sandholm. "Dart News & Updates". Dartlang.org.
  22. ^ "Warum?", Dart Lang (FAQ), Wir haben DART so konzipiert, dass es einfach zu Entwicklungstools für die moderne App-Entwicklung und in der Lage ist, Hochleistungsimplementierungen zu ermöglichen.
  23. ^ "JavaScript als Kompilierungsziel: Es schnell machen" (PDF). Dartlang.org. Archiviert von das Original (PDF) am 2016-07-02. Abgerufen 2013-08-18.
  24. ^ "Eine Einführung in die Dart: IO -Bibliothek". Dartlang.org. Abgerufen 2013-07-21.
  25. ^ "Flattern FAQ". docs.flutter.dev. Wie führt Flutter meinen Code auf iOS aus?. Abgerufen 2022-04-07.
  26. ^ "DART 2.6 mit DART2Native ankündigen: Dart zu in sich geschlossenen, nativen ausführbaren Ausführungsmitteln kompilieren". 8. November 2019. Abgerufen 2019-12-06.
  27. ^ a b "Die Essenz von Google Dart: Erstellen von Anwendungen, Schnappschüssen, Isolaten". Infoq. Abgerufen 2021-08-29.
  28. ^ Moore, Kevin (23. Februar 2018). "DART2 Breaking Change: Entfernen von Web -Unterstützung für Dart: Mirrors und Dart: Isolat". Google -Gruppen.
  29. ^ "Flattern - schöne native Apps in Rekordzeit". Flutter.dev.
  30. ^ "FAQ". Flutter.dev. Abgerufen 2021-08-29.
  31. ^ "Firebase". Flutter.dev. Abgerufen 2021-08-29.
  32. ^ "Einsatz". Angulardart.dev.
  33. ^ Ladd, Seth (2013-03-28). "Dart News & Updates: Warum DART2JS einen schnelleren JavaScript -Code von Dart produziert". News.dartlang.org. Abgerufen 2013-07-21.
  34. ^ "Dart Performance". Dartlang.org. Archiviert von das Original Am 2017-01-03. Abgerufen 2013-07-21.
  35. ^ "Google veröffentlicht den DART -Editor für Windows, Mac OS X und Linux". Archiviert von das Original Am 2013-12-03. Abgerufen 2011-11-29.
  36. ^ "Dart -Plugin für Eclipse ist für die Vorschau bereit".
  37. ^ Ladd, Seth (2015-04-30). "Die Gegenwart und Zukunft von Redakteuren und IDES für Dart". Dart News & Updates. Abgerufen 2015-05-18.
  38. ^ "JetBrains Plugin Repository: Dart". Plugins.intellij.net. Abgerufen 2013-07-21.
  39. ^ "Dart -Tools". Dart.dev. Abgerufen 2016-11-15.
  40. ^ Beaufort, François. "Das Chromium -Team arbeitet derzeit aktiv aktiv".
  41. ^ "Eine Chrome App -basierte Entwicklungsumgebung". GitHub. 26. Oktober 2021.
  42. ^ "Spark, eine Chrome -App von Google ist eine IDE für Ihr Chromebook". 22. November 2013.
  43. ^ Saroop, Sri. "Chrome Dev Editor: Ankündigungen".
  44. ^ "Chrome Dev Editor ist ein Entwickler -Tool zum Erstellen von Apps auf der Chrome -Plattform: Chrome -Apps und Web -Apps in JavaScript oder Dart (nicht mehr in aktiver Entwicklung) - Googlearchive/Chromedeveditor". 29. Juli 2019 - über Github.
  45. ^ Ladd, Seth (2015-05-06). "Ankündigung von Dartpad: Eine reibungsfreie Methode, um den Dart-Code zu erkunden". Dart News & Updates. Abgerufen 2015-05-18.
  46. ^ "SIMD über Dart ins Web bringen" (PDF). Archiviert von das Original (PDF) am 2016-07-02.
  47. ^ "Algol -Familie". C2.com.
  48. ^ Bracha, Gilad; Griswold, David (September 1996). "Erweitern Sie die SmallTalk -Sprache mit Mixins" (PDF). Oopsla Workshop. Oopsla.
  49. ^ "Die Essenz von Google Dart: Erstellen von Anwendungen, Schnappschüssen, Isolaten". Infoq.
  50. ^ Bracha, Gilad; Ungar, David (2004). "Spiegel: Designprinzipien für meta-Ebenen Einrichtungen objektorientierter Programmiersprachen" (PDF). ACM Sigplan nennt. ACM. 39 (10): 331–344. doi:10.1145/1035292.1029004. Abgerufen 15. Februar 2014.

Literaturverzeichnis

Externe Links