World Library  
Flag as Inappropriate
Email this Article
 

Dart (programming language)


Dart is an open-source programming language developed by Google.[1] Dart is used for building web, server, and mobile apps.

Dart is a class-based, single-inheritance, object-oriented language with C-style syntax. It supports interfaces, abstract classes, reified generics, and optional typing. Static type annotations do not affect the runtime semantics of the code. Instead, the type annotations can provide documentation for tools like static checkers and dynamic runtime checks.

Contents

  • History 1
  • Usage 2
  • Runtime modes 3
  • Isolates 4
  • Snapshots 5
  • Native mobile apps 6
  • Compiling to JavaScript 7
  • Editors 8
    • Chrome Dev Editor 8.1
    • DartPad 8.2
  • SIMD on the web 9
  • Example 10
  • Influences from other languages 11
  • Criticism 12
  • See also 13
  • References 14
  • Bibliography 15
  • External links 16

History

Dart was unveiled at the GOTO conference in Aarhus, Denmark, October 10–12, 2011.[2] The project was founded by Lars Bak and Kasper Lund.[3]

Standardization

Ecma International has formed technical committee TC52[4] to work on standardization of Dart, and, inasmuch as Dart can be compiled to standard JavaScript, it works effectively in any modern browser. Ecma International approved the first edition of Dart language specification at its 107th General Assembly on July 2014.[5] Since then, a second edition has been approved by Ecma.[6]

Usage

There are three primary ways to run Dart code:

Compiled as JavaScript
In order to run in mainstream [8]
In the Dartium Browser
The Dart SDK ships with a version of the Chromium web browser modified to include a Dart virtual machine (VM). This browser can run Dart code directly without compilation to JavaScript, while the original plan for Chrome to do this was cancelled.[9] It is intended as a development tool for Dart applications, rather than as a general purpose web browser.[10]
Stand-alone
The Dart SDK also ships with a stand-alone Dart VM, allowing dart code to run in a command-line environment. As the language tools included in the Dart SDK are written primarily in Dart, the stand-alone Dart VM is a critical part of the SDK. These tools include not only the dart2js compiler, but also a package management suite called pub. Dart ships with a complete standard library allowing users to write fully functional system apps, such as custom web servers.[11]

Runtime modes

Dart programs run in one of two modes. In "checked mode", which is not the default mode and must be turned on, dynamic type assertions are enabled. These type assertions can turn on if static types are provided in the code, and can catch some errors when types do not match. For example, if a method is annotated to return a String, but instead returns an integer, the dynamic type assertion will catch this and throw an exception. Running in "checked mode" is recommended for development and testing.

Dart programs run by default in "production mode", which runs with all dynamic type assertions turned off. This is the default mode because it is the fastest way to run a Dart program.

Isolates

To achieve concurrency, Dart uses isolates, which are independent workers that do not share memory, but instead use message passing. This is similar to Erlang actors. Every Dart program uses at least one isolate, which is the main isolate. When compiled to JavaScript, isolates are transformed into Web Workers.

Snapshots

Snapshots are a core part of the Dart VM. Snapshots are files which store objects and other runtime data.

Script snapshots

Dart programs can be compiled into snapshot files. These files contain all of the program code and dependencies pre-parsed and ready to execute. This allows super-fast startup times.

Full snapshots

The Dart core libraries can be compiled into a snapshot file which allows super-fast loading of the libraries. Most standard distributions of the main Dart VM have a pre-built snapshot for the core libraries which is loaded at runtime.

Object snapshots

Dart is a very asynchronous language. With this, it uses isolates for concurrency. Since these are workers which pass messages, it needs a way to 'serialize' a message. This is done using a snapshot, which is generated from a given object, and then this is transferred to another isolate for deserialization.

Native mobile apps

Dart has a virtual machine called Fletch which explores different models of concurrency. Along with this, is a simple API for embedding Dart code in any application. Google is working on full Dart stacks for native mobile app development on both Android and iOS, see Flutter.

Compiling to JavaScript

dart2js is the current Dart-to-JavaScript compiler from Google, as of 2015, and is written in Dart. dart2js is intended to implement the full Dart language specification and semantics. It is an evolution of earlier compilers: dartc was the first compiler to generate JavaScript from Dart code but has since been deprecated. Frog was the second Dart-to-JavaScript compiler and was written in Dart. Frog never implemented the full semantics of the language, leading to the development of the dart2js compiler.

On March 28, 2013, the Dart team posted an update on their blog[12] addressing Dart code compiled to JavaScript with the dart2js compiler, stating that it now runs faster than handwritten JavaScript on Chrome's V8 JavaScript engine for the DeltaBlue benchmark.[13]

Editors

On November 18, 2011, Google released Dart Editor, an open-source Dart editor based on Eclipse components, for Mac OS X, Windows, and Linux-based operating systems.[14] The editor supports syntax highlighting, code completion, JavaScript compilation, running both web and server Dart applications, and debugging.

On August 13, 2012, Google announced the release of an Eclipse plugin for doing Dart development.[15]

On April 18, 2015, Google announced that the Dart Editor would be retired in favor of the JetBrains IDEs.[16]

JetBrains IDEs are the recommended IDE for the Dart language. The Dart plugin[17] is available for IntelliJ IDEA, PyCharm, PhpStorm and WebStorm. This plugin supports many features such as syntax highlighting, code completion, analysis, refactoring, debugging, and more. Other plugins are also available for editors like Sublime Text and Atom.

Chrome Dev Editor

It has been known since November 2013[18] that the Chromium team is working on an open source, Chrome App-based development environment with a reusable library of GUI widgets, codenamed Spark, later renamed as Chrome Dev Editor.[19] It is built in Dart, and contains Spark which is powered by Polymer.[20] Developer preview version is available in Chrome Web Store.

DartPad

The Dart team created DartPad at the beginning of 2015, to provide a frictionless way to get started with Dart. It is an entirely online editor from which you can experiment with Dart APIs, and run Dart code. It provides syntax highlighting, code analysis, code completion, documentation, and HTML and CSS editing.[21]

SIMD on the web

In 2013, John McCutchan announced[22] that he had created a performant interface to SIMD instruction sets for the Dart programming language, bringing the benefits of SIMD to web programs for the first time, for users running Google's experimental Dartium browser. The interface consists of two types:

  • Float32×4, 4× single precision floating point values
  • Uint32×4, 4× 32-bit unsigned integer values

Instances of these types are immutable and in optimized code are mapped directly to SIMD registers. Operations expressed in Dart typically are compiled into a single instruction with no overhead. This is similar to C and C++ intrinsics. Benchmarks for 4×4 matrix multiplication, 3D vertex transformation, and Mandelbrot set visualization show near 400% speedup compared to scalar code written in Dart.

Example

A Hello World example:

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

A function to calculate the nth Fibonacci number:

int fib(int n) => (n > 2) ? (fib(n - 1) + fib(n - 2)) : 1;

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

A simple class:

// Import the math library to get access to the sqrt function.
import 'dart:math' as math;

// Create a class for Point.
class Point {

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

  // A constructor, with syntactic sugar for setting instance variables.
  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 Operator Overloading
  Point operator +(Point other) => new Point(x + other.x, y + other.y);
}

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

Influences from other languages

Dart's is descendant in the ALGOL language family,[23] alongside C, Java, C#, JavaScript, and others.

The method cascade syntax, which provides a syntactic shortcut for invoking several methods one after another on the same object, is adopted from Smalltalk.

Dart's mixins were influenced by Strongtalk|}}[24] and Ruby.

Dart makes use of isolates as a concurrency and security unit when structuring applications.[25] The Isolate concept builds upon the Actor model, which is most famously implemented in Erlang.

The Mirror API for performing controlled and secure reflection was first proposed in a paper[26] by Gilad Bracha (who is a member of the Dart team) and David Ungar and originally implemented in Self.

Criticism

Dart initially had a mixed reception and the Dart initiative has been criticized by some for fragmenting the web. A lot of this was due to the original plans to include a Dart VM in Chrome. However, these plans were cancelled, in order to focus on compilation to JavaScript.[9]

See also

References

  1. ^ https://www.dartlang.org/
  2. ^
  3. ^
  4. ^
  5. ^
  6. ^
  7. ^
  8. ^
  9. ^ a b
  10. ^
  11. ^
  12. ^
  13. ^
  14. ^
  15. ^
  16. ^
  17. ^
  18. ^
  19. ^
  20. ^
  21. ^
  22. ^
  23. ^
  24. ^
  25. ^
  26. ^

Bibliography

External links

  • Official website
  • Bullseye:Your first Dart App by Seth Ladd and Jaime Wren
  • A Walk on the Dart Side: A Quick Tour of Dart (November 2011) — Lecture given at Stanford University by Google software engineer Gilad Bracha (video archive, YouTube, transcript)
  • Google Dart Language and Tools Announced
  • Google's Dart announced
  • The Dartosphere – Aggregation of Dart Language related blogs
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 



Copyright © World Library Foundation. All rights reserved. eBooks from World Library are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.