HOME

TheInfoList



OR:

Dart is a
programming language A programming language is a system of notation for writing computer programs. Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
designed by Lars Bak and Kasper Lund and developed by
Google Google LLC (, ) is an American multinational corporation and technology company focusing on online advertising, search engine technology, cloud computing, computer software, quantum computing, e-commerce, consumer electronics, and artificial ...
. It can be used to develop web and
mobile app A mobile application or app is a computer program or software application designed to run on a mobile device such as a smartphone, phone, tablet computer, tablet, or smartwatch, watch. Mobile applications often stand in contrast to desktop appli ...
s as well as server and desktop applications. Dart is an object-oriented, class-based, garbage-collected language with C-style syntax. It can compile to machine code,
JavaScript JavaScript (), often abbreviated as JS, is a programming language and core technology of the World Wide Web, alongside HTML and CSS. Ninety-nine percent of websites use JavaScript on the client side for webpage behavior. Web browsers have ...
, or WebAssembly. It supports interfaces, mixins, abstract classes, reified generics and type inference. The latest version of Dart is .


History

Dart was unveiled at the GOTO conference in
Aarhus Aarhus (, , ; officially spelled Århus from 1948 until 1 January 2011) is the second-largest city in Denmark and the seat of Aarhus municipality, Aarhus Municipality. It is located on the eastern shore of Jutland in the Kattegat sea and app ...
, Denmark, October 10–12, 2011. Lars Bak and Kasper Lund founded the project. Dart 1.0 was released on November 14, 2013. Dart had a mixed reception at first. Some criticized the Dart initiative for fragmenting the web because of plans to include a Dart VM in Chrome. Those plans were dropped in 2015 with the Dart 1.9 release. Focus changed to compiling Dart code to JavaScript. Dart 2.0 was released in August 2018 with language changes including a type system. Dart 2.6 introduced a new extension, dart2native. This extended native compilation to the Linux, macOS, and Windows desktop platforms. Earlier developers could create new tools using only Android or iOS devices. With this extension, developers could deploy a program into self-contained executables. The Dart SDK doesn't need to be installed to run these self-contained executables. The Flutter toolkit integrates Dart, so it can compile on small services like backend support. Dart 3.0 was released in May 2023 with changes to the type system to require sound null safety. This release included new features like records, patterns, and class modifiers. Dart can compile to WebAssembly since version 3.4.


Specification

Dart released the 5th edition of its language specification on April 9, 2021. This covers all syntax through Dart 2.10. A draft of the 6th edition includes all syntax through 2.13
Accepted proposals
for the specification an
drafts of potential features
can be found in the Dart language repository on GitHub.
ECMA International Ecma International () is a Nonprofit organization, nonprofit standards organization for information and communication systems. It acquired its current name in 1994, when the European Computer Manufacturers Association (ECMA) changed its name to ...
formed technical committee, TC52, to standardize Dart. ECMA approved the first edition of the Dart language specification as ECMA-408 in July 2014 at its 107th General Assembly. Subsequent editions were approved in December 2014, June 2015, and December 2015.


Deploying apps

The Dart software development kit (SDK) ships with a standalone Dart runtime. This allows Dart code to run in a
command-line interface A command-line interface (CLI) is a means of interacting with software via command (computing), commands each formatted as a line of text. Command-line interfaces emerged in the mid-1960s, on computer terminals, as an interactive and more user ...
environment. The SDK includes tools to compile and package Dart apps. Dart ships with a complete standard library allowing users to write fully working system apps like custom web servers. Developers can deploy Dart apps in six ways:


Deploying to the web

Dart 3 can deploy apps to the web as either JavaScript or WebAssembly apps. Dart supports compiling to WebAssembly .


JavaScript

: To run in mainstream
web browser A web browser, often shortened to browser, is an application for accessing websites. When a user requests a web page from a particular website, the browser retrieves its files from a web server and then displays the page on the user's scr ...
s, Dart relies on a source-to-source compiler to
JavaScript JavaScript (), often abbreviated as JS, is a programming language and core technology of the World Wide Web, alongside HTML and CSS. Ninety-nine percent of websites use JavaScript on the client side for webpage behavior. Web browsers have ...
. This makes Dart apps compatible with all major browsers. Dart optimizes the compiled JavaScript output to avoid expensive checks and operations. This results in JavaScript code that can run faster than equivalent code handwritten in plain JavaScript. : The first Dart-to-JavaScript compiler was dartc. It was deprecated in Dart 2.0. :The second Dart-to-JavaScript compiler was frog. Written in Dart, it was introduced in 2013 and deprecated in 2020. This should not be confused with Dart Frog, an open-source Dart framework for building backend systems from Very Good Ventures. :The third Dart-to-JavaScript compiler is dart2js. Introduced in Dart 2.0, the Dart-based dart2js evolved from earlier compilers. It intended to implement the full Dart language specification and semantics. Developers use this compiler for production builds. It compiles to minified JavaScript. :The fourth Dart-to-JavaScript compiler is dartdevc. Developers could use this compiler for development builds. It compiles to human-readable JavaScript. On March 28, 2013, the Dart team posted an update on their blog 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. :Prior to Dart 2.18, both dart2js and dartdevc could be called from the command line. Dart 2.18 folded these functions into the Dart SDK. This removed the direct command line wrappers but kept the two compilers. The webdev serve command calls the dartdevc compiler. The webdev build command calls the dart2js compiler. :The Dart SDK compiles to JavaScript in two ways. :To debug code, run webdev serve to compile a larger JavaScript file with human-readable code. Dart-generated JavaScript can be debugged using Chrome only. $ cd $ webdev serve -debug o To create production apps, run webdev build to compile a minified JavaScript file. $ cd $ webdev build o


WebAssembly

:With the Dart 3.22 release, Google announced support for compiling Dart code to WebAssembly. Full support for Wasm requires adoption of the WasmGC feature into the Wasm standard. Chrome 119 supports WasmGC. Firefox 120 and later could support WasmGC, but a current bug is blocking compatibility.
Safari A safari (; originally ) is an overland journey to observe wildlife, wild animals, especially in East Africa. The so-called big five game, "Big Five" game animals of Africa – lion, African leopard, leopard, rhinoceros, African elephant, elep ...
and
Microsoft Edge Microsoft Edge is a Proprietary Software, proprietary cross-platform software, cross-platform web browser created by Microsoft and based on the Chromium (web browser), Chromium open-source project, superseding Edge Legacy. In Windows 11, Edge ...
are integrating WasmGC support.


Deploying to native platforms

Dart can compile to native machine code for macOS, Windows, and Linux as command line tools. Dart can compile apps with user interfaces to the web, iOS, Android, macOS, Windows, and Linux using the Flutter framework.


Self-contained executable

:Self-contained executables include native machine code compiled from the specified Dart code file, its dependencies, and a small Dart runtime. The runtime handles type checking and garbage collection. The compiler produces output specific to the architecture on which the developer compiled it. This file can be distributed as any other native executable. $ dart compile exe "source.dart" -o "target_app" Generated: $ ./target_app


Ahead-of-time module

:When compiled ahead of time, Dart code produces performant and platform-specific modules. It includes all dependent libraries and packages the app needs. This increases its compilation time. The compiler outputs an app specific to the architecture on which it was compiled. $ dart compile aot-snapshot "source.dart" Generated $ dartaotruntime "target_app.aot"


Just-in-time module

:When compiled just in time, Dart code produces performant modules that compile fast. This module needs the Dart VM included with the SDK to run. The compiler loads all parsed classes and compiled code into memory the first time the app runs. This speeds up any subsequent run of the app. The compiler outputs an app specific to the architecture on which it was compiled. $ dart compile jit-snapshot "source.dart" Compiling to jit-snapshot file Hello world! $ dart run "target_app.jit" Hello world!


Dart kernel module

:When compiled as a kernel module, Dart code produces a machine-independent format called the Dart Intermediate Representation (Dart IR). The Dart IR bytecode format can work on any architecture that has a Dart VM. This makes this format very portable and quick to compile, but less performant than other compilation outputs. $ dart compile kernel "source.dart" Compiling to kernel file . $ dart run "target_app.dill"


Concurrency

To achieve concurrency, Dart uses isolated, independent workers that do not share memory, but use message passing, similarly to Erlang processes (also see actor model). Every Dart program uses at least one isolate, which is the main isolate. Since Dart 2, the Dart web platform no longer supports isolates, and suggests developers use Web Workers instead.


Null safety

Starting with Dart 2.12, Dart introduced sound null safety. This serves as a guarantee that variables cannot return a null value unless it has explicit permission. Null safety prevents the developer from introducing null-pointer exceptions, a common, but difficult to debug, error. With Dart 3.0, all code must follow sound null safety.


Data storage

Snapshot files, a core part of the Dart VM, store objects and other runtime data. ;Script snapshots :Dart programs can be compiled into snapshot files containing all of the program code and dependencies preparsed and ready to execute, allowing fast startups. ;Full snapshots :The Dart core libraries can be compiled into a snapshot file that allows fast loading of the libraries. Most standard distributions of the main Dart VM have a prebuilt snapshot for the core libraries that is loaded at runtime. ;Object snapshots :Dart uses snapshots to '' serialize'' messages that it passes between isolates. As a very asynchronous language, Dart uses isolates for concurrency. An object generates a snapshot, transfers it to another isolate, then the isolate deserializes it.


Editors

On November 18, 2011, Google released ''Dart Editor'', an open-source program based on Eclipse components, for macOS, Windows, and
Linux Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
-based
operating system An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs. Time-sharing operating systems scheduler (computing), schedule tasks for ...
s. The editor supports syntax highlighting, code completion, JavaScript compiling, running web and server Dart applications, and debugging. On August 13, 2012, Google announced the release of an Eclipse plugin for Dart development. On April 18, 2015, Google retired the Dart Editor in favor of the JetBrains
integrated development environment An integrated development environment (IDE) is a Application software, software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, an ...
(IDE). Android Studio, IntelliJ IDEA, PyCharm, PhpStorm and WebStorm support a Dart plugin. This plugin supports many features such as syntax highlighting, code completion, analysis, refactoring, debugging, and more. Other editors include plugins for Dart including Sublime Text,
Atom Atoms are the basic particles of the chemical elements. An atom consists of a atomic nucleus, nucleus of protons and generally neutrons, surrounded by an electromagnetically bound swarm of electrons. The chemical elements are distinguished fr ...
, Emacs, Vim and Visual Studio Code.


Chrome Dev Editor

In 2013, the Chromium team began work on an open source, Chrome App-based development environment with a reusable library of GUI widgets, codenamed Spark. The project was later renamed as Chrome Dev Editor. Built in Dart, it contained Spark which is powered by Polymer. In June 2015, Google transferred the CDE project to GitHub as a free software project and ceased active investment in CDE. The Chrome Dev Editor project was archived on April 24, 2021.


DartPad

To provide an easier way to start using Dart, the Dart team create
DartPad
at the start of 2015. This online editor allows developers to experiment with Dart
application programming interface An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
s (APIs) and run Dart code. It provides syntax highlighting, code analysis, code completion, documentation, and HTML and CSS editing.


Development tools

The Dart DevTools, written in Dart, include debugging and performance tools.


Flutter

Google introduced Flutter for native app development. Built using Dart, C, C++ and Skia, Flutter is an open-source, multi-platform app UI framework. Prior to Flutter 2.0, developers could only target Android, iOS and the web. Flutter 2.0 released support for macOS, Linux, and Windows as a beta feature. Flutter 2.10 released with production support for Windows and Flutter 3 released production support for all desktop platforms. It provides a framework, widgets, and tools. This framework gives developers a way to build and deploy mobile, desktop, and web apps. Flutter works with Firebase and supports extending the framework through add-ons called packages. These can be found on their package repository, pub.dev. JetBrains also supports a Flutter plugin.


Example

A Hello, World! example: void main() A simple for-loop: void main() A function to calculate the nth
Fibonacci number In mathematics, the Fibonacci sequence is a Integer sequence, sequence in which each element is the sum of the two elements that precede it. Numbers that are part of the Fibonacci sequence are known as Fibonacci numbers, commonly denoted . Many w ...
: void main() /// Computes the nth Fibonacci number. int fibonacci(int n) A simple class: // 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 // All Dart programs start with main(). void main()


Influences from other languages

Dart belongs to the ALGOL language family. Its members include C, Java, C#, JavaScript, and others. The method cascade syntax was adopted from Smalltalk. This syntax provides a shortcut for invoking several methods one after another on the same object. Dart's mixins were influenced by Strongtalk and Ruby. Dart makes use of isolates as a concurrency and security unit when structuring applications. The Isolate concept builds upon the Actor model implemented in Erlang. In 2004, Gilad Bracha (who was a member of the Dart team) and David Ungar first proposed Mirror API for performing controlled and secure reflection in a paper. The concept was first implemented in Self.


See also

* Google Web Toolkit * TypeScript, a strongly-typed programming language that transpiles to JavaScript * Flutter, an open-source UI software development kit for cross-platform applications


References


Bibliography

* * *


External links

*
DartPad
{{Authority control 2011 software Articles with example code C programming language family Concurrent programming languages Dynamically typed programming languages Free software projects Google software JavaScript programming language family Object-oriented programming languages Programming languages created in 2011 Scripting languages Software using the BSD license Source-to-source compilers Web programming