Dart (język programowania) - Dart (programming language)

Strzałka
Język programowania Dart logo.svg
Paradygmat Wieloparadygmat : funkcjonalny , imperatywny , obiektowy , refleksyjny
Zaprojektowany przez Lars Bak i Kasper Lund
Deweloper Google
Po raz pierwszy pojawiły się 10 października 2012 ; 8 lat temu ( 2012-10-10 )
Wersja stabilna
2.14.1  Edytuj to na Wikidanych / 8 września 2021 r .; 30 dni temu ( 8 września 2021 )
Wersja zapoznawcza
2.14.1 / 8 września 2021 ; 30 dni temu ( 2021-09-08 )
Dyscyplina pisania 1.x: Opcjonalne
2.x: Wnioskowane ( statyczne , silne )
Platforma Wieloplatformowy
OS Wieloplatformowy
Licencja BSD
Rozszerzenia nazw plików .strzałka
Strona internetowa rzutka .dev
Główne wdrożenia
Dart VM, dart2native, dart2js, DDC, Flutter
Wpływem
C , C++ , C# , Erlang , Java , JavaScript , Kotlin , Ruby , Smalltalk , Strongtalk , TypeScript

Dart to język programowania przeznaczony do tworzenia aplikacji dla klientów, takich jak aplikacje internetowe i mobilne . Jest rozwijany przez Google i może być również używany do tworzenia aplikacji serwerowych i desktopowych.

Dart jest zorientowany obiektowo , oparty na klasach , śmieci zgromadzone język z C -Style składni . Dart może skompilować do kodu natywnego lub JavaScript . Obsługuje interfejsy , domieszki , klasy abstrakcyjne , zreifikowane typy generyczne i wnioskowanie o typie .

Historia

Dart został zaprezentowany na konferencji GOTO w Aarhus w Danii w dniach 10-12 października 2012 r. Projekt został założony przez Larsa Baka i Kaspera Lunda. Dart 1.0 został wydany 14 listopada 2013 roku.

Dart początkowo spotkał się z mieszanym przyjęciem, a inicjatywa Dart została skrytykowana przez niektórych za fragmentację sieci, ze względu na pierwotne plany włączenia maszyny wirtualnej Dart do Chrome. Plany te zostały porzucone w 2015 roku wraz z wydaniem 1.9 Darta, aby zamiast tego skupić się na kompilacji Darta do JavaScript.

W sierpniu 2018 r. wydano Dart 2.0 ze zmianami językowymi, w tym systemem typu dźwięku.

Dart 2.6 wprowadził nowe rozszerzenie, dart2native. Ta funkcja rozszerza natywną kompilację na platformy komputerowe Linux, macOS i Windows. Wcześniej programiści mogli tworzyć nowe narzędzia tylko przy użyciu urządzeń z systemem Android lub iOS. Co więcej, dzięki temu rozszerzeniu możliwe staje się komponowanie programu Dart w samodzielne pliki wykonywalne. W związku z tym, według przedstawicieli firmy, zainstalowanie Dart SDK nie jest teraz obowiązkowe, samodzielne pliki wykonywalne mogą teraz zacząć działać w ciągu kilku sekund. Nowe rozszerzenie jest również zintegrowane z zestawem narzędzi Flutter , dzięki czemu można używać kompilatora na małych usługach (np. wspierających backend).

Normalizacja

Firma Ecma International utworzyła komitet techniczny TC52 do pracy nad standaryzacją Darta, a ponieważ Dart można skompilować do standardowego JavaScript, działa skutecznie w każdej nowoczesnej przeglądarce. Ecma International zatwierdziła pierwszą edycję specyfikacji języka Dart w lipcu 2014 r. na 107. Walnym Zgromadzeniu, a drugą edycję w grudniu 2014 r. Najnowsza specyfikacja jest dostępna w specyfikacji języka Dart .

Stosowanie

Istnieją cztery sposoby uruchomienia kodu Dart:

Sieć
Aby działać w popularnych przeglądarkach internetowych , Dart opiera się na kompilatorze źródłowym do kodu źródłowego JavaScript . Według strony projektu Dart został „zaprojektowany jako łatwe do pisania narzędzia programistyczne, dobrze nadające się do tworzenia nowoczesnych aplikacji i zdolne do implementacji o wysokiej wydajności”. Podczas uruchamiania kodu Dart w przeglądarce internetowej kod jest prekompilowany do JavaScript za pomocą kompilatora dart2js. Skompilowany jako JavaScript, kod Dart jest kompatybilny ze wszystkimi głównymi przeglądarkami bez potrzeby, aby przeglądarki adoptowały Dart. Dzięki optymalizacji skompilowanych danych wyjściowych JavaScript w celu uniknięcia kosztownych kontroli i operacji, kod napisany w Dart może w niektórych przypadkach działać szybciej niż odpowiednik napisany ręcznie przy użyciu idiomów JavaScript.
Samodzielny
Zestaw programistyczny (SDK) Dart jest dostarczany z samodzielną maszyną wirtualną Dart, umożliwiającą uruchamianie kodu Dart w środowisku interfejsu wiersza poleceń . Ponieważ narzędzia językowe zawarte w Dart SDK są napisane głównie w Dart, samodzielna maszyna wirtualna Dart jest krytyczną częścią SDK. Narzędzia te obejmują kompilator dart2js i menedżera pakietów o nazwie pub. Dart jest dostarczany z kompletną standardową biblioteką umożliwiającą użytkownikom pisanie w pełni działających aplikacji systemowych, takich jak niestandardowe serwery internetowe.
Skompilowany z wyprzedzeniem
Kod darta można skompilować AOT do kodu maszynowego (natywne zestawy instrukcji). Aplikacje utworzone za pomocą Flutter , zestawu SDK aplikacji mobilnej utworzonego za pomocą Dart, są wdrażane w sklepach z aplikacjami jako kod Dart skompilowany przez AOT.
Rodzinny
Dart 2.6 z kompilatorem dart2native do kompilacji do samodzielnego, natywnego kodu wykonywalnego. Przed Dart 2.6 ta funkcja ujawniała tę możliwość tylko na urządzeniach mobilnych z systemem iOS i Android za pośrednictwem Fluttera .

Izoluje

Aby osiągnąć współbieżność, Dart używa izolatów, które są niezależnymi pracownikami, które nie współdzielą pamięci, ale zamiast tego używają przekazywania wiadomości. Jest to podobne do procesów Erlanga (zobacz także Model aktora ). Każdy program Dart używa co najmniej jednego izolatu, który jest głównym izolatem. Od Dart 2 platforma internetowa Dart nie obsługuje już izolatów i sugeruje, że programiści zamiast tego używają Web Workers .

Migawki

Migawki są podstawową częścią maszyny wirtualnej Dart. Migawki to pliki, które przechowują obiekty i inne dane środowiska wykonawczego.

Migawki skryptów
Programy Dart można kompilować w pliki migawek. Pliki te zawierają cały kod programu i zależności przygotowane i gotowe do wykonania. Pozwala to na szybkie starty.
Pełne migawki
Biblioteki rdzenia Darta można skompilować w plik migawki, który umożliwia szybkie ładowanie bibliotek. Większość standardowych dystrybucji głównej maszyny wirtualnej Dart ma wstępnie zbudowaną migawkę dla podstawowych bibliotek, która jest ładowana w czasie wykonywania.
Migawki obiektów
Dart to bardzo asynchroniczny język. Dzięki temu używa izolatów do współbieżności . Ponieważ są to procesy robocze, które przekazują wiadomości, potrzebny jest sposób na serializację wiadomości. Odbywa się to za pomocą migawki , która jest generowana z danego obiektu, a następnie jest przenoszona do innego izolatu w celu deserializacji.

Natywne aplikacje mobilne

Firma Google wprowadziła Flutter do tworzenia natywnych aplikacji mobilnych zarówno na Androida, jak i iOS . Flutter to pakiet SDK aplikacji mobilnej, wraz z frameworkiem, widżetami i narzędziami, który daje programistom możliwość tworzenia i wdrażania aplikacji mobilnych napisanych w Dart. Flutter współpracuje z Firebase i innymi pakietami SDK aplikacji mobilnych i jest oprogramowaniem typu open source.

Kompilacja do JavaScript

Dart SDK zawiera dwa kompilatory Dart-to-JavaScript. Podczas rozwoju dartdevc obsługuje szybkie cykle odświeżania. W przypadku ostatecznej wersji aplikacji dart2js tworzy możliwy do wdrożenia JavaScript.

Pierwszym kompilatorem, który generował JavaScript z kodu Dart był dartc, ale był on przestarzały. Drugim kompilatorem Dart-to-JavaScript był Frog. Został napisany w Dart, ale nigdy nie zaimplementował pełnej semantyki języka. Trzecim kompilatorem Dart-to-JavaScript był dart2js. Ewolucja wcześniejszych kompilatorów, dart2js jest napisana w Dart i ma na celu zaimplementowanie pełnej specyfikacji i semantyki języka Dart.

28 marca 2013 r. zespół Darta opublikował aktualizację na swoim blogu dotyczącą kodu Darta skompilowanego do JavaScript za pomocą kompilatora dart2js, stwierdzając, że teraz działa szybciej niż ręcznie napisany JavaScript w silniku JavaScript Chrome V8 dla testu DeltaBlue.

Redakcja

W dniu 18 listopada 2011 roku Google wydało Dart Editor, program open-source w oparciu o Eclipse składników, na MacOS , w systemie Windows i Linux -na systemów operacyjnych . Edytor obsługuje podświetlanie składni , uzupełnianie kodu , kompilację JavaScript , uruchamianie aplikacji internetowych i serwerowych Dart oraz debugowanie .

13 sierpnia 2012 r. Google ogłosił wydanie wtyczki Eclipse do programowania Dart.

18 kwietnia 2015 r. Google ogłosił, że edytor Dart zostanie wycofany na rzecz zintegrowanego środowiska programistycznego (IDE) JetBrains , które jest obecnie zalecanym IDE dla języka. Wtyczka Dart jest dostępna dla IntelliJ IDEA , PyCharm , PhpStorm i WebStorm . Ta wtyczka obsługuje wiele funkcji, takich jak podświetlanie składni, uzupełnianie kodu, analiza, refaktoryzacja, debugowanie i inne. Inne wtyczki są dostępne dla edytorów, takich jak Sublime Text , Atom , Emacs , Vim i Visual Studio Code .

Edytor Chrome dla deweloperów

W 2013 roku zespół Chromium rozpoczął prace nad środowiskiem programistycznym typu open source opartym na aplikacji Chrome z biblioteką wielokrotnego użytku widżetów GUI o nazwie kodowej Spark. Projekt został później przemianowany na Chrome Dev Editor. Został zbudowany w Dart i zawierał Spark, który jest zasilany przez Polymer.

W czerwcu 2015 r. Google przeniósł projekt CDE do GitHub jako projekt wolnego oprogramowania i zaprzestał aktywnej inwestycji w CDE. Od kwietnia 2019 r. Chrome Dev Editor nie jest już w fazie rozwoju.

DartPad

Zespół Dart stworzył DartPad na początku 2015 roku, aby zapewnić łatwiejszy sposób na rozpoczęcie korzystania z Darta. Jest to w pełni internetowy edytor, z którego użytkownicy mogą eksperymentować z interfejsami programowania aplikacji Dart (API) i uruchamiać kod Dart. Zapewnia podświetlanie składni, analizę kodu, uzupełnianie kodu, dokumentację oraz edycję HTML i CSS.

SIMD

W 2013 roku John McCutchan ogłosił, że stworzył wydajny interfejs do zestawów instrukcji dla pojedynczej instrukcji, wielu danych ( SIMD ) dla Darta.

Interfejs składa się z dwóch typów:

  • Float32×4, 4× wartości zmiennoprzecinkowe pojedynczej precyzji
  • Uint32×4, 4× 32-bitowe liczby całkowite bez znaku

Instancje tego typu są niezmienne iw zoptymalizowanym kodzie są mapowane bezpośrednio do rejestrów SIMD. Operacje wyrażone w Dart zazwyczaj są kompilowane w jedną instrukcję bez dodatkowych kosztów. Jest to podobne do C i C ++ intrinsics . Testy porównawcze dla mnożenia macierzy 4×4 , transformacji wierzchołków 3D i wizualizacji zbioru Mandelbrota wykazują prawie 400% przyspieszenie w porównaniu z kodem skalarnym napisanym w Dart.

Przykład

Hello, World! przykład:

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

Funkcja do obliczenia n-tej liczby Fibonacciego :

int fib(int n) => (n > 2) ? (fib(n - 1) + fib(n - 2)) : 1;
// A Fibonacci function implementation with a conditional operator in Dart
// This code is read as:
//  given an integer n,
//  if n > 2, return fib(n - 1) + fib(n - 2); 
//  otherwise, return the integer 1 as result

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

Prosta klasa:

// Import the math library to get access to the sqrt function.
// Imported with `math` as name, so accesses need to use `math.` as prefix.
import 'dart:math' as math;

// Create a class for Point.
class Point {

  // Final variables cannot be changed once they are assigned.
  // Declare two instance variables.
  final num x, y;

  // A constructor, with syntactic sugar for setting instance variables.
  // The constructor has two mandatory parameters.
  Point(this.x, this.y);

  // A named constructor with an initializer list.
  Point.origin()
      : x = 0,
        y = 0;

  // A method.
  num distanceTo(Point other) {
    var dx = x - other.x;
    var dy = y - other.y;
    return math.sqrt(dx * dx + dy * dy);
  }
  
  // Example of a "getter".
  // Acts the same as a final variable, but is computed on each access.
  num get magnitude => math.sqrt(x * x + y * y);

  // Example of operator overloading
  Point operator +(Point other) => Point(x + other.x, y + other.y);
  // When you instantiate a class such as Point in Dart 2+, new is 
  // an optional word
}

// All Dart programs start with main().
void main() {
  // Instantiate point objects.
  var p1 = Point(10, 10);
  print(p1.magnitude);
  var p2 = Point.origin();
  var distance = p1.distanceTo(p2);
  print(distance);
}

Wpływy z innych języków

Dart jest potomkiem rodziny języków ALGOL , obok C, Java, C#, JavaScript i innych.

Sposób kaskadowy składni, który zapewnia składniowej skrót wywoływania kilku metod jeden po drugim w tym samym obiekcie jest adaptacja Smalltalku.

DART wstawek pod wpływem Strongtalk i Ruby .

Dart wykorzystuje izolaty jako jednostkę współbieżności i bezpieczeństwa podczas strukturyzacji aplikacji. Koncepcja Izoluj opiera się na modelu Aktora , który jest najbardziej znany w Erlangu.

Mirror API do wykonywania kontrolowanego i bezpiecznego odbicia został po raz pierwszy zaproponowany w artykule Gilada Bracha (który był członkiem zespołu Dart) i Davida Ungara i pierwotnie zaimplementowany w Self .

Zobacz też

Bibliografia

Bibliografia

Zewnętrzne linki