Dart (programming language): Difference between revisions
m replaced: {{Google Inc.|corporate=yes|products=yes}} → {{Google LLC}} |
Restored revision 1257921660 by Y.P.Y (talk): Rv + WP:NONSENSE |
||
(39 intermediate revisions by 26 users not shown) | |||
Line 8: | Line 8: | ||
| screenshot=<!-- Image name is enough --> |
| screenshot=<!-- Image name is enough --> |
||
| screenshot caption= |
| screenshot caption= |
||
| paradigm=[[Multi-paradigm]]: [[Functional programming|functional]], [[Imperative programming|imperative]], [[Object-oriented programming|object-oriented]], [[Reflective programming|reflective]]<ref>{{cite book|last1=Kopec|first1=David|title=Dart for Absolute Beginners|date=30 June 2014|isbn=9781430264828|page=56|url=https://books.google.com/books?id=EcvjAwAAQBAJ&q=dart%20multi-paradigm&pg=PA56|access-date=24 November 2015}}</ref> |
| paradigm=[[Multi-paradigm]]: [[Functional programming|functional]], [[Imperative programming|imperative]], [[Object-oriented programming|object-oriented]], [[Reflective programming|reflective]]<ref>{{cite book|last1=Kopec|first1=David|title=Dart for Absolute Beginners|date=30 June 2014|isbn=9781430264828|page=56|publisher=Apress |url=https://books.google.com/books?id=EcvjAwAAQBAJ&q=dart%20multi-paradigm&pg=PA56|access-date=24 November 2015}}</ref> |
||
| family= |
| family= |
||
| released={{Start date and age|2011|10|10}}<ref>{{cite web|last1=Bak|first1=Lars|title=Dart: a language for structured web programming|url=http://googlecode.blogspot.com/2011/10/dart-language-for-structured-web.html|website=Google Code Blog|date=10 October 2011|access-date=31 January 2016}}</ref> |
| released={{Start date and age|2011|10|10}}<ref>{{cite web|last1=Bak|first1=Lars|title=Dart: a language for structured web programming|url=http://googlecode.blogspot.com/2011/10/dart-language-for-structured-web.html|website=Google Code Blog|date=10 October 2011|access-date=31 January 2016}}</ref> |
||
Line 14: | Line 14: | ||
| developer=[[Google]] |
| developer=[[Google]] |
||
| latest release version={{Wikidata|property|reference|edit|Q406009|P348}} |
| latest release version={{Wikidata|property|reference|edit|Q406009|P348}} |
||
| latest release date={{start date and age|{{ |
| latest release date={{start date and age| |
||
{{wikidata|qualifier|single|P548=Q2804309|P348|P577}}}} |
|||
| latest preview date={{Start date and age|2021|12|14}}<ref name="auto">{{Cite web|url=https://github.com/dart-lang/sdk/tags|title=Dart SDK Tags|website=[[GitHub]] }}</ref> |
| latest preview date={{Start date and age|2021|12|14}}<ref name="auto">{{Cite web|url=https://github.com/dart-lang/sdk/tags|title=Dart SDK Tags|website=[[GitHub]] }}</ref> |
||
| typing=1.x: [[Optional typing|Optional]]<br>2.x: [[Type inference|Inferred]]<ref name="The Dart type system">{{Cite web|url=https://dart.dev/guides/language/sound-dart|title=The Dart type system|website=dart.dev}}</ref> ([[static typing|static]], [[strong typing|strong]]) |
| typing=1.x: [[Optional typing|Optional]]<br>2.x: [[Type inference|Inferred]]<ref name="The Dart type system">{{Cite web|url=https://dart.dev/guides/language/sound-dart|title=The Dart type system|website=dart.dev}}</ref> ([[static typing|static]], [[strong typing|strong]]) |
||
Line 20: | Line 21: | ||
| implementations=Dart VM, dart2native, dart2js, DDC, [[Flutter (software)|Flutter]] |
| implementations=Dart VM, dart2native, dart2js, DDC, [[Flutter (software)|Flutter]] |
||
| dialects= |
| dialects= |
||
| influenced by=[[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[Erlang (programming language)|Erlang]], [[Java (programming language)|Java]], [[JavaScript]], [[Ruby (programming language)|Ruby]], [[Smalltalk]], [[Strongtalk]],<ref>{{cite web|title=Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013|website=[[YouTube]]|url=https://www.youtube.com/watch?v=huawCRlo9H4&t=30m10s|access-date=22 December 2013}}</ref> [[TypeScript]]<ref>{{cite web|title=The Dart Team Welcomes TypeScript|url=https://news.dartlang.org/2012/10/the-dart-team-welcomes-typescript.html|access-date=22 February 2020}}</ref> |
| influenced by=[[C (programming language)|C]], [[C++]], [[C Sharp (programming language)|C#]], [[Erlang (programming language)|Erlang]], [[Java (programming language)|Java]], [[JavaScript]], [[Ruby (programming language)|Ruby]], [[Smalltalk]], [[Strongtalk]],<ref>{{cite web|title=Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013|website=[[YouTube]]|date=16 May 2013 |url=https://www.youtube.com/watch?v=huawCRlo9H4&t=30m10s|access-date=22 December 2013}}</ref> [[TypeScript]]<ref>{{cite web|title=The Dart Team Welcomes TypeScript|date=10 September 2019 |url=https://news.dartlang.org/2012/10/the-dart-team-welcomes-typescript.html|access-date=22 February 2020}}</ref> |
||
| influenced= |
| influenced= |
||
| programming language= |
| programming language= |
||
Line 31: | Line 32: | ||
}} |
}} |
||
'''Dart''' is a [[programming language]] designed by [[Lars Bak (computer programmer)|Lars Bak]] and Kasper Lund and developed by [[Google]].<ref>{{Cite web |title=A Bit About Dart - Learn Dart: First Step to Flutter |url=https://www.educative.io/courses/learn-dart-first-step-to-flutter/g7kmn5r74ok |access-date=2023-06-20 |website=Educative: Interactive Courses for Software Developers |language=en}}</ref> |
'''Dart''' is a [[programming language]] designed by [[Lars Bak (computer programmer)|Lars Bak]] and Kasper Lund and developed by [[Google]].<ref>{{Cite web |title=A Bit About Dart - Learn Dart: First Step to Flutter |url=https://www.educative.io/courses/learn-dart-first-step-to-flutter/g7kmn5r74ok |access-date=2023-06-20 |website=Educative: Interactive Courses for Software Developers |language=en}}</ref> It can be used to develop [[Web application|web]] and [[mobile app]]s as well as [[Server (computing)|server]] and [[Application software|desktop applications]]. |
||
Dart is an [[Object-oriented programming|object-oriented]], [[Class-based programming|class-based]], [[Garbage collection (computer science)|garbage-collected]] language with [[C (programming language)|C]]-style [[Syntax (programming languages)|syntax]].<ref>{{Cite web|url=https://dart.dev/guides/language/language-tour#important-concepts|title=A Tour of the Dart Language|website=dart.dev|access-date=2018-08-09}}</ref> It can [[compiler|compile]] to [[machine code]], [[JavaScript]], or [[WebAssembly]]. It supports [[Interface (object-oriented programming)|interfaces]], [[mixin]]s, [[abstract class]]es, [[Reification (computer science)|reified]] [[Generic programming|generics]] and [[type inference]].<ref name="The Dart type system">{{Cite web|url=https://dart.dev/guides/language/sound-dart|title=The Dart type system|website=dart.dev}}</ref> |
|||
==History== |
==History== |
||
Dart was unveiled at the GOTO conference in [[Aarhus]], Denmark, October 10–12, 2011.<ref>{{Citation |contribution-url=http://gotocon.com/aarhus-2011/presentation/Opening%20Keynote:%20Dart,%20a%20new%20programming%20language%20for%20structured%20web%20programming |format=presentation |type=opening keynote |contribution=Dart, a new programming language for structured web programming |title=GOTO conference |url=http://gotocon.com/aarhus-2011/ |place=Århus conference |date=2011-10-10}}</ref> [[Lars Bak (computer programmer)|Lars Bak]] and Kasper Lund founded the project.<ref>{{cite web|url=http://radar.oreilly.com/2012/03/what-is-dart.html|title=What is Dart |website=What is Dart? |last=Ladd |first=Seth |publisher=O'Reilly |access-date=August 16, 2014}}</ref> Dart 1.0 was released on November 14, 2013.<ref>{{Cite web|url=https://news.dartlang.org/2013/11/dart-10-stable-sdk-for-structured-web.html|title=Dart 1.0: A stable SDK for structured web apps|website=news.dartlang.org|access-date=2018-08-08}}</ref> |
Dart was unveiled at the GOTO conference in [[Aarhus]], Denmark, October 10–12, 2011.<ref>{{Citation |contribution-url=http://gotocon.com/aarhus-2011/presentation/Opening%20Keynote:%20Dart,%20a%20new%20programming%20language%20for%20structured%20web%20programming |format=presentation |type=opening keynote |contribution=Dart, a new programming language for structured web programming |title=GOTO conference |url=http://gotocon.com/aarhus-2011/ |place=Århus conference |date=2011-10-10}}</ref> [[Lars Bak (computer programmer)|Lars Bak]] and Kasper Lund founded the project.<ref>{{cite web|url=http://radar.oreilly.com/2012/03/what-is-dart.html|title=What is Dart |website=What is Dart? |last=Ladd |first=Seth |publisher=O'Reilly |access-date=August 16, 2014}}</ref> Dart 1.0 was released on November 14, 2013.<ref>{{Cite web|url=https://news.dartlang.org/2013/11/dart-10-stable-sdk-for-structured-web.html|title=Dart 1.0: A stable SDK for structured web apps|website=news.dartlang.org|access-date=2018-08-08}}</ref> |
||
Dart had a mixed reception at first. Some criticized the Dart initiative for fragmenting the web because of plans to include a Dart [[Virtual machine|VM]] in [[Google Chrome|Chrome]]. Those plans were dropped in 2015 with the Dart 1.9 release. Focus changed to compiling Dart code to JavaScript.<ref name="VM cancelled">{{cite web|url=http://news.dartlang.org/2015/03/dart-for-entire-web.html|title=Dart News & Updates|author=Seth Ladd|work=dartlang.org}}</ref> |
Dart had a mixed reception at first. Some criticized the Dart initiative for fragmenting the web because of plans to include a Dart [[Virtual machine|VM]] in [[Google Chrome|Chrome]]. Those plans were dropped in 2015 with the Dart 1.9 release. Focus changed to compiling Dart code to JavaScript.<ref name="VM cancelled">{{cite web|url=http://news.dartlang.org/2015/03/dart-for-entire-web.html|title=Dart News & Updates|author=Seth Ladd|work=dartlang.org|date=10 September 2019 }}</ref> |
||
Dart 2.0 was released in August 2018 with language changes including a type system.<ref>{{Cite web|url=https://medium.com/dartlang/dart-2-stable-and-the-dart-web-platform-3775d5f8eac7|title=Announcing Dart 2 Stable and the Dart Web Platform|last=Moore|first=Kevin|date=2018-08-07|website=Dart|access-date=2018-08-08}}</ref> |
Dart 2.0 was released in August 2018 with language changes including a type system.<ref>{{Cite web|url=https://medium.com/dartlang/dart-2-stable-and-the-dart-web-platform-3775d5f8eac7|title=Announcing Dart 2 Stable and the Dart Web Platform|last=Moore|first=Kevin|date=2018-08-07|website=Dart|access-date=2018-08-08}}</ref> |
||
Dart 2.6 introduced a new extension, <code>dart2native</code>. This extended native compilation to the Linux, macOS, and Windows desktop platforms.<ref>{{Cite web |title=Dart language evolution |url=https://dart.dev/guides/language/evolution |access-date=2023-06-20 |website=dart.dev |language=en}}</ref> 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.<ref>{{Cite web |title=Dart overview |url=https://dart.dev/overview.html |access-date=2023-05-12 |website=dart.dev |language=en}}</ref> The [[Flutter (software)|Flutter]] toolkit integrates Dart, so it can compile on small services like backend support.<ref>{{Cite web|url=https://www.infoworld.com/article/3454623/dart-26-brings-native-compilation-to-the-desktop.html|title=Dart 2.5 brings native compilation to the desktop|website=Infoworld|date=20 November 2019|access-date=2019-11-28}}</ref><ref>{{Cite web|url=https://sdtimes.com/goog/dart-2-6-released-with-dart2native/|title=Dart 2.6 released with dart2native|website=SDtimes|date=7 November 2019|access-date=2019-11-28}}</ref> |
Dart 2.6 introduced a new extension, <code>dart2native</code>. This extended native compilation to the Linux, macOS, and Windows desktop platforms.<ref>{{Cite web |title=Dart language evolution |url=https://dart.dev/guides/language/evolution |access-date=2023-06-20 |website=dart.dev |language=en}}</ref> 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.<ref>{{Cite web |title=Dart overview |url=https://dart.dev/overview.html |access-date=2023-05-12 |website=dart.dev |language=en }}{{Dead link|date=March 2024 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> The [[Flutter (software)|Flutter]] toolkit integrates Dart, so it can compile on small services like backend support.<ref>{{Cite web|url=https://www.infoworld.com/article/3454623/dart-26-brings-native-compilation-to-the-desktop.html|title=Dart 2.5 brings native compilation to the desktop|website=Infoworld|date=20 November 2019|access-date=2019-11-28}}</ref><ref>{{Cite web|url=https://sdtimes.com/goog/dart-2-6-released-with-dart2native/|title=Dart 2.6 released with dart2native|website=SDtimes|date=7 November 2019|access-date=2019-11-28}}</ref> |
||
Dart 3.0 |
Dart 3.0 was released in May 2023<ref>{{Cite web |title=Dart language evolution |url=https://dart.dev/guides/language/evolution |access-date=2024-01-09 |website=dart.dev |language=en}}</ref> with changes to the type system to require sound null safety. This release included new features like records, patterns,<ref>{{Cite web |title=Patterns |url=https://dart.dev/language/patterns.html |access-date=2023-05-12 |website=dart.dev |language=en }}{{Dead link|date=March 2024 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> and class modifiers.<ref>{{Cite web |title=Class modifiers |url=https://dart.dev/language/class-modifiers}}</ref> |
||
Dart can compile to [[WebAssembly]] since version 3.4.<ref name=":3">{{Cite web |last=Thomsen |first=Michael |date=2024-05-14 |title=Landing Flutter 3.22 and Dart 3.4 at Google I/O 2024 |url=https://medium.com/flutter/io24-5e211f708a37 |access-date=2024-05-17 |website=Flutter |language=en}}</ref> |
|||
== Specification == |
== Specification == |
||
Dart released the 5th edition of its language specification on April 9, 2021.<ref>{{Cite web |title=Dart Programming Language Specification, 5th edition |url=https://dart.dev/guides/language/specifications/DartLangSpec-v2.10.pdf}}</ref> This covers all syntax through Dart 2.10. A draft of the 6th edition includes all syntax through 2.13.<ref>{{Cite web |title=Dart Programming Language Specification, 6th edition draft |url=https://spec.dart.dev/DartLangSpecDraft.pdf}}</ref> [https://github.com/dart-lang/language/tree/main/accepted Accepted proposals] for the specification and [https://github.com/dart-lang/language/tree/main/working drafts of potential features] can be found in the Dart language repository on GitHub.<ref>{{Cite web |title=Dart language GitHub repository |url=https://github.com/dart-lang/language}}</ref> |
Dart released the 5th edition of its language specification on April 9, 2021.<ref>{{Cite web |title=Dart Programming Language Specification, 5th edition |url=https://dart.dev/guides/language/specifications/DartLangSpec-v2.10.pdf}}</ref> This covers all syntax through Dart 2.10. A draft of the 6th edition includes all syntax through 2.13.<ref>{{Cite web |title=Dart Programming Language Specification, 6th edition draft |url=https://spec.dart.dev/DartLangSpecDraft.pdf}}</ref> [https://github.com/dart-lang/language/tree/main/accepted Accepted proposals] for the specification and [https://github.com/dart-lang/language/tree/main/working drafts of potential features] can be found in the Dart language repository on GitHub.<ref>{{Cite web |title=Dart language GitHub repository |website=[[GitHub]] |url=https://github.com/dart-lang/language}}</ref> |
||
[[Ecma International|ECMA International]] formed technical committee, TC52,<ref>{{cite web |url=http://www.ecma-international.org/memento/TC52.htm |title=TC52 - Dart |access-date=2013-12-16 |archive-url=https://web.archive.org/web/20160802100651/http://www.ecma-international.org/memento/TC52.htm |archive-date=2016-08-02 |url-status=dead }}</ref> to standardize Dart. |
[[Ecma International|ECMA International]] formed technical committee, TC52,<ref>{{cite web |url=http://www.ecma-international.org/memento/TC52.htm |title=TC52 - Dart |access-date=2013-12-16 |archive-url=https://web.archive.org/web/20160802100651/http://www.ecma-international.org/memento/TC52.htm |archive-date=2016-08-02 |url-status=dead }}</ref> to standardize Dart. ECMA approved the first edition of the Dart language specification as ECMA-408<ref name=":1">{{Cite web |title=ECMA-408 |url=https://www.ecma-international.org/publications-and-standards/standards/ecma-408/ |access-date=2023-05-12 |website=Ecma International |language=en-US}}</ref> in July 2014 at its 107th General Assembly.<ref>{{cite web|url=http://news.dartlang.org/2014/07/ecma-approves-1st-edition-of-dart.html|title=Dart News & Updates|author=Anders Thorhauge Sandholm|work=dartlang.org|date=10 September 2019 }}</ref> Subsequent editions were approved in December 2014,<ref>{{cite web|url=http://news.dartlang.org/2014/12/enums-and-async-primitives-in-dart.html|title=Dart News & Updates|author=Anders Thorhauge Sandholm|work=dartlang.org|date=10 September 2019 }}</ref> June 2015, and December 2015.<ref name=":1" /> |
||
==Deploying apps== |
==Deploying apps== |
||
Line 55: | Line 58: | ||
Developers can deploy Dart apps in six ways: |
Developers can deploy Dart apps in six ways: |
||
{| class="wikitable" |
{| class="wikitable sortable" |
||
|+Dart |
|+Dart deployment methods |
||
!Deployment |
!Deployment type |
||
!Target |
!Target platform |
||
!Platform |
!Platform-<br/>specific |
||
!Requires Dart VM |
!Requires<br/> Dart VM |
||
!Compile |
!Compile<br/> speed |
||
!Execution |
!Execution<br/> speed |
||
|- |
|- |
||
|JavaScript |
|JavaScript |
||
Line 71: | Line 74: | ||
|Fast |
|Fast |
||
|- |
|- |
||
|WebAssembly |
|WebAssembly<ref name=":3" /><ref name=":2">{{Cite web |last=Thomsen |first=Michael |date=2023-05-10 |title=Announcing Dart 3 |url=https://medium.com/dartlang/announcing-dart-3-53f065a10635 |access-date=2023-05-13 |website=Dart |language=en}}</ref> |
||
|Browser |
|Browser |
||
|No |
|No |
||
Line 108: | Line 111: | ||
=== Deploying to the web === |
=== Deploying to the web === |
||
Dart 3 can deploy apps to the web as either JavaScript or WebAssembly apps. |
Dart 3 can deploy apps to the web as either JavaScript or WebAssembly apps. Dart supports compiling to WebAssembly {{as of|2024|May|lc=y}}. |
||
==== JavaScript ==== |
==== JavaScript ==== |
||
: To run in mainstream [[web browser]]s, Dart relies on a [[source-to-source compiler]] to [[JavaScript]]. 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 |
: To run in mainstream [[web browser]]s, Dart relies on a [[source-to-source compiler]] to [[JavaScript]]. 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.<ref name="dartlang.org">{{cite web |url=http://www.dartlang.org/slides/2012/10/jsconfeu/javascript-as-compilation-target-florian-loitsch.pdf |title=JavaScript as a compilation target: Making it fast |publisher=Dartlang.org |access-date=2013-08-18 |archive-url=https://web.archive.org/web/20160702204820/http://www.dartlang.org/slides/2012/10/jsconfeu/javascript-as-compilation-target-florian-loitsch.pdf |archive-date=2016-07-02}}</ref> |
||
: The first Dart-to-JavaScript compiler was <code>dartc</code>. It was deprecated in Dart 2.0. |
|||
:The second Dart-to-JavaScript compiler was frog.<ref>{{Cite web |title=Towards a single Dart to JavaScript compiler |url=https://news.dartlang.org/2012/02/towards-single-dart-to-javascript.html |access-date=2023-05-13 |language=en}}</ref> Written in Dart, it was introduced in 2013 and deprecated in 2020. This should not be confused with Dart Frog,<ref>{{Cite web |title=Dart Frog |url=https://dartfrog.vgv.dev/ |access-date=2023-05-13 |website=dartfrog.vgv.dev |language=en}}</ref> an open-source Dart framework for building backend systems from [[Very Good Ventures]]. |
:The second Dart-to-JavaScript compiler was frog.<ref>{{Cite web |title=Towards a single Dart to JavaScript compiler |date=10 September 2019 |url=https://news.dartlang.org/2012/02/towards-single-dart-to-javascript.html |access-date=2023-05-13 |language=en}}</ref> Written in Dart, it was introduced in 2013 and deprecated in 2020. This should not be confused with Dart Frog,<ref>{{Cite web |title=Dart Frog |url=https://dartfrog.vgv.dev/ |access-date=2023-05-13 |website=dartfrog.vgv.dev |language=en}}</ref> an open-source Dart framework for building backend systems from [[Very Good Ventures]]. |
||
:The third Dart-to-JavaScript compiler is <code>dart2js</code>. Introduced in Dart 2.0,<ref>{{Cite web |last=Moore |first=Kevin |date=2018-08-08 |title=Announcing Dart 2 Stable and the Dart Web Platform |url=https://medium.com/dartlang/dart-2-stable-and-the-dart-web-platform-3775d5f8eac7 |access-date=2023-05-13 |website=Dart |language=en}}</ref> the Dart-based <code>dart2js</code> 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 [[Minification (programming)|minified JavaScript]]. |
:The third Dart-to-JavaScript compiler is <code>dart2js</code>. Introduced in Dart 2.0,<ref>{{Cite web |last=Moore |first=Kevin |date=2018-08-08 |title=Announcing Dart 2 Stable and the Dart Web Platform |url=https://medium.com/dartlang/dart-2-stable-and-the-dart-web-platform-3775d5f8eac7 |access-date=2023-05-13 |website=Dart |language=en}}</ref> the Dart-based <code>dart2js</code> 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 [[Minification (programming)|minified JavaScript]]. |
||
:The fourth Dart-to-JavaScript compiler is <code>dartdevc</code>.<ref>{{Cite web |title=dartdevc: The Dart development compiler |url=https://dart.dev/tools/dartdevc.html |access-date=2023-05-13 |website=dart.dev |language=en}}</ref> 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 <code>dart2js</code> compiler,<ref>{{cite web |last=Ladd |first=Seth |date=2013-03-28 |title=Dart News & Updates: Why dart2js produces faster JavaScript code from Dart |url=http://news.dartlang.org/2013/03/why-dart2js-produces-faster-javascript.html |access-date=2013-07-21 |website=News.dartlang.org.}}</ref> stating that it now runs faster than handwritten JavaScript on [[V8 (JavaScript engine)|Chrome's V8 JavaScript engine]] for the DeltaBlue benchmark.<ref>{{cite web |title=Dart Performance |url=http://www.dartlang.org/performance/ |url-status=dead |archive-url=https://web.archive.org/web/20170103041945/http://www.dartlang.org/performance/ |archive-date=2017-01-03 |access-date=2013-07-21 |website=Dartlang.org.}}</ref> |
:The fourth Dart-to-JavaScript compiler is <code>dartdevc</code>.<ref>{{Cite web |title=dartdevc: The Dart development compiler |url=https://dart.dev/tools/dartdevc.html |access-date=2023-05-13 |website=dart.dev |language=en }}{{Dead link|date=April 2024 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> 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 <code>dart2js</code> compiler,<ref>{{cite web |last=Ladd |first=Seth |date=2013-03-28 |title=Dart News & Updates: Why dart2js produces faster JavaScript code from Dart |url=http://news.dartlang.org/2013/03/why-dart2js-produces-faster-javascript.html |access-date=2013-07-21 |website=News.dartlang.org.}}</ref> stating that it now runs faster than handwritten JavaScript on [[V8 (JavaScript engine)|Chrome's V8 JavaScript engine]] for the DeltaBlue benchmark.<ref>{{cite web |title=Dart Performance |url=http://www.dartlang.org/performance/ |url-status=dead |archive-url=https://web.archive.org/web/20170103041945/http://www.dartlang.org/performance/ |archive-date=2017-01-03 |access-date=2013-07-21 |website=Dartlang.org.}}</ref> |
||
:Prior to Dart 2.18, both <code>dart2js</code> and <code>dartdevc</code> 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 <code>webdev serve</code> command calls the <code>dartdevc</code> compiler. The <code>webdev build</code> command calls the <code>dart2js</code> compiler. |
:Prior to Dart 2.18, both <code>dart2js</code> and <code>dartdevc</code> 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 <code>webdev serve</code> command calls the <code>dartdevc</code> compiler. The <code>webdev build</code> command calls the <code>dart2js</code> compiler. |
||
:The Dart SDK compiles to JavaScript in two ways. |
:The Dart SDK compiles to JavaScript in two ways. |
||
Line 128: | Line 132: | ||
==== WebAssembly ==== |
==== WebAssembly ==== |
||
:With the Dart 3 release, Google announced |
:With the Dart 3.22 release, Google announced support for compiling Dart code to [[WebAssembly]].<ref name=":3" /> Full support for [[WebAssembly|Wasm]] requires adoption of the WasmGC<ref>{{Citation |title=GC Proposal for WebAssembly |date=2023-05-12 |url=https://github.com/WebAssembly/gc/blob/5431d631547c8af09a6377e29fee5126219f33c5/proposals/gc/Overview.md |access-date=2023-05-13 |publisher=WebAssembly}}</ref> feature into the Wasm standard. Chrome 119<ref>{{Cite web |title=WebAssembly Garbage Collection (WasmGC) now enabled by default in Chrome {{!}} Blog |url=https://developer.chrome.com/blog/wasmgc |access-date=2024-05-17 |website=Chrome for Developers |language=en}}</ref> supports WasmGC. [[Firefox]]<ref>{{Cite web |date=2023-02-16 |title=SpiderMonkey Newsletter (Firefox 110-111) |url=https://spidermonkey.dev/blog/2023/02/16/newsletter-firefox-110-111.html |access-date=2023-05-13 |website=SpiderMonkey JavaScript/WebAssembly Engine |language=en-US}}</ref> 120 and later could support WasmGC, but a current bug is blocking compatibility.<ref>{{Cite web |title=1788206 - OffscreenCanvas.transferToImageBitmap incurs a copy |url=https://bugzilla.mozilla.org/show_bug.cgi?id=1788206 |access-date=2024-05-17 |website=bugzilla.mozilla.org |language=en}}</ref> [[Safari (web browser)|Safari]]<ref>{{Cite web |title=Safari Technology Preview 167 Release Notes |url=https://docs.developer.apple.com/documentation/safari-technology-preview-release-notes/stp-release-167 |access-date=2023-05-13 |website=Apple Developer Documentation |language=en}}</ref> and [[Microsoft Edge]] are integrating WasmGC support. |
||
=== Deploying to native platforms === |
=== Deploying to native platforms === |
||
Line 141: | Line 145: | ||
==== Ahead-of-time module ==== |
==== Ahead-of-time module ==== |
||
:When [[AOT compilation|compiled ahead of time]],<ref>{{Cite web |last=Obinna |first=Onuoha |date=2020-04-07 |title=How does JIT and AOT work in Dart? |url=https://onuoha.medium.com/how-does-jit-and-aot-work-in-dart-cab2f31d9cb5 |access-date=2023-06-20 |website=Medium |language=en}}</ref> Dart code produces |
:When [[AOT compilation|compiled ahead of time]],<ref>{{Cite web |last=Obinna |first=Onuoha |date=2020-04-07 |title=How does JIT and AOT work in Dart? |url=https://onuoha.medium.com/how-does-jit-and-aot-work-in-dart-cab2f31d9cb5 |access-date=2023-06-20 |website=Medium |language=en}}</ref> 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.<syntaxhighlight lang="shell"> |
||
$ dart compile aot-snapshot <source.dart> |
$ dart compile aot-snapshot <source.dart> |
||
Generated <target_app.aot> |
Generated <target_app.aot> |
||
Line 166: | Line 170: | ||
To achieve [[Concurrency (computer science)|concurrency]], Dart uses isolated, independent workers that do not share memory, but use [[message passing]],<ref name=":0">{{Cite web|title=The Essence of Google Dart: Building Applications, Snapshots, Isolates|url=https://www.infoq.com/articles/google-dart/|access-date=2021-08-29|website=InfoQ|language=en}}</ref> similarly to [[Erlang (programming language)|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 worker|Web Workers]] instead.<ref>{{Cite web|url=https://groups.google.com/a/dartlang.org/d/msg/misc/djfFMNCWmkE/F7WE8a0JAwAJ|title=Dart2 Breaking Change: Removing web support for dart:mirrors and dart:isolate|last=Moore|first=Kevin|date=February 23, 2018|website=Google Groups}}</ref> |
To achieve [[Concurrency (computer science)|concurrency]], Dart uses isolated, independent workers that do not share memory, but use [[message passing]],<ref name=":0">{{Cite web|title=The Essence of Google Dart: Building Applications, Snapshots, Isolates|url=https://www.infoq.com/articles/google-dart/|access-date=2021-08-29|website=InfoQ|language=en}}</ref> similarly to [[Erlang (programming language)|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 worker|Web Workers]] instead.<ref>{{Cite web|url=https://groups.google.com/a/dartlang.org/d/msg/misc/djfFMNCWmkE/F7WE8a0JAwAJ|title=Dart2 Breaking Change: Removing web support for dart:mirrors and dart:isolate|last=Moore|first=Kevin|date=February 23, 2018|website=Google Groups}}</ref> |
||
== Null |
== Null safety == |
||
Starting with Dart 2.12, Dart introduced sound [[Void safety|null safety]].<ref>{{Cite web |last=Hracek |first=Filip |date=2020-06-10 |title=Announcing sound null safety |url=https://medium.com/dartlang/announcing-sound-null-safety-defd2216a6f3 |access-date=2023-05-12 |website=Dart |language=en}}</ref> 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 |
Starting with Dart 2.12, Dart introduced sound [[Void safety|null safety]].<ref>{{Cite web |last=Hracek |first=Filip |date=2020-06-10 |title=Announcing sound null safety |url=https://medium.com/dartlang/announcing-sound-null-safety-defd2216a6f3 |access-date=2023-05-12 |website=Dart |language=en}}</ref> 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 |
==Data storage== |
||
Snapshot files, a core part of the Dart VM, store objects and other runtime data.<ref name=":0" /> |
Snapshot files, a core part of the Dart VM, store objects and other runtime data.<ref name=":0" /> |
||
Line 184: | Line 188: | ||
On November 18, 2011, Google released ''Dart Editor'', an open-source program based on [[Eclipse (software)|Eclipse]] components, for [[macOS]], [[Microsoft Windows|Windows]], and [[Linux]]-based [[operating system]]s.<ref>{{cite web |url=http://dartr.com/google-releases-dart-editor/ |title=Google Releases Dart Editor for Windows, Mac OS X, and Linux |access-date=2011-11-29 |archive-url=https://web.archive.org/web/20131203024218/http://dartr.com/google-releases-dart-editor/ |archive-date=2013-12-03 |url-status=dead }}</ref> The editor supports [[syntax highlighting]], [[autocomplete|code completion]], JavaScript compiling, running web and server Dart applications, and [[debugging]]. |
On November 18, 2011, Google released ''Dart Editor'', an open-source program based on [[Eclipse (software)|Eclipse]] components, for [[macOS]], [[Microsoft Windows|Windows]], and [[Linux]]-based [[operating system]]s.<ref>{{cite web |url=http://dartr.com/google-releases-dart-editor/ |title=Google Releases Dart Editor for Windows, Mac OS X, and Linux |access-date=2011-11-29 |archive-url=https://web.archive.org/web/20131203024218/http://dartr.com/google-releases-dart-editor/ |archive-date=2013-12-03 |url-status=dead }}</ref> The editor supports [[syntax highlighting]], [[autocomplete|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.<ref>{{Cite web|url=https://news.dartlang.org/2012/08/dart-plugin-for-eclipse-is-ready-for.html|title=Dart plugin for Eclipse is Ready for Preview}}</ref> |
On August 13, 2012, Google announced the release of an Eclipse plugin for Dart development.<ref>{{Cite web|url=https://news.dartlang.org/2012/08/dart-plugin-for-eclipse-is-ready-for.html|title=Dart plugin for Eclipse is Ready for Preview|date=10 September 2019 }}</ref> |
||
On April 18, 2015, Google retired the Dart Editor in favor of the [[JetBrains]] [[integrated development environment]] (IDE).<ref>{{Cite web|url=http://news.dartlang.org/2015/04/the-present-and-future-of-editors-and.html|title=The present and future of editors and IDEs for Dart|date=2015-04-30|access-date=2015-05-18|website=Dart News & Updates|last=Ladd|first=Seth}}</ref> [[Android Studio]], [[IntelliJ IDEA]], [[PyCharm]], [[PhpStorm]] and [[WebStorm]] support a Dart plugin.<ref>{{cite web |title=JetBrains Plugin Repository : Dart |url=http://plugins.intellij.net/plugin/?idea&id=6351 |access-date=2013-07-21 |website=Plugins.intellij.net}}</ref> This plugin supports many features such as syntax highlighting, code completion, analysis, refactoring, debugging, and more. Other editors include plugins for Dart<ref>{{Cite web |title=Dart Tools |url=https://dart.dev/tools |access-date=2016-11-15 |website=dart.dev}}</ref> including [[Sublime Text]],<ref>{{Cite web |title=Dart - Packages - Package Control |url=https://packagecontrol.io/packages/Dart |access-date=2023-05-13 |website=packagecontrol.io}}</ref> [[Atom (text editor)|Atom]],<ref>{{Cite web |title=dart - Dart plugin for Atom |url=https://dart-atom.github.io/dart/ |access-date=2023-05-13 |website=dart-atom.github.io}}</ref> [[Emacs]],<ref>{{Citation |last=Trainor |first=Brady |title=bradyt/dart-mode |date=2023-04-15 |url=https://github.com/bradyt/dart-mode |access-date=2023-05-13}}</ref> [[Vim (text editor)|Vim]]<ref>{{Citation |title=Dart Support for Vim |date=2023-05-09 |url=https://github.com/dart-lang/dart-vim-plugin |access-date=2023-05-13 |publisher=Dart}}</ref> and [[Visual Studio Code]].<ref>{{Cite web |title=Dart - Visual Studio Marketplace |url=https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code |access-date=2023-05-13 |website=marketplace.visualstudio.com |language=en-us}}</ref> |
On April 18, 2015, Google retired the Dart Editor in favor of the [[JetBrains]] [[integrated development environment]] (IDE).<ref>{{Cite web|url=http://news.dartlang.org/2015/04/the-present-and-future-of-editors-and.html|title=The present and future of editors and IDEs for Dart|date=2015-04-30|access-date=2015-05-18|website=Dart News & Updates|last=Ladd|first=Seth}}</ref> [[Android Studio]], [[IntelliJ IDEA]], [[PyCharm]], [[PhpStorm]] and [[WebStorm]] support a Dart plugin.<ref>{{cite web |title=JetBrains Plugin Repository : Dart |url=http://plugins.intellij.net/plugin/?idea&id=6351 |access-date=2013-07-21 |website=Plugins.intellij.net}}</ref> This plugin supports many features such as syntax highlighting, code completion, analysis, refactoring, debugging, and more. Other editors include plugins for Dart<ref>{{Cite web |title=Dart Tools |url=https://dart.dev/tools |access-date=2016-11-15 |website=dart.dev}}</ref> including [[Sublime Text]],<ref>{{Cite web |title=Dart - Packages - Package Control |url=https://packagecontrol.io/packages/Dart |access-date=2023-05-13 |website=packagecontrol.io}}</ref> [[Atom (text editor)|Atom]],<ref>{{Cite web |title=dart - Dart plugin for Atom |url=https://dart-atom.github.io/dart/ |access-date=2023-05-13 |website=dart-atom.github.io}}</ref> [[Emacs]],<ref>{{Citation |last=Trainor |first=Brady |title=bradyt/dart-mode |date=2023-04-15 |url=https://github.com/bradyt/dart-mode |access-date=2023-05-13}}</ref> [[Vim (text editor)|Vim]]<ref>{{Citation |title=Dart Support for Vim |date=2023-05-09 |url=https://github.com/dart-lang/dart-vim-plugin |access-date=2023-05-13 |publisher=Dart}}</ref> and [[Visual Studio Code]].<ref>{{Cite web |title=Dart - Visual Studio Marketplace |url=https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code |access-date=2023-05-13 |website=marketplace.visualstudio.com |language=en-us}}</ref> |
||
Line 196: | Line 200: | ||
To provide an easier way to start using Dart, the Dart team created [https://dartpad.dev DartPad] at the start of 2015. This online editor allows developers to experiment with Dart [[application programming interface]]s (APIs) and run Dart code. It provides syntax highlighting, code analysis, code completion, documentation, and HTML and CSS editing.<ref>{{Cite web|url=http://news.dartlang.org/2015/05/announcing-dartpad-friction-free-way-to.html|title=Announcing DartPad: A friction-free way to explore Dart code|last=Ladd|first=Seth|date=2015-05-06|website=Dart News & Updates|access-date=2015-05-18}}</ref> |
To provide an easier way to start using Dart, the Dart team created [https://dartpad.dev DartPad] at the start of 2015. This online editor allows developers to experiment with Dart [[application programming interface]]s (APIs) and run Dart code. It provides syntax highlighting, code analysis, code completion, documentation, and HTML and CSS editing.<ref>{{Cite web|url=http://news.dartlang.org/2015/05/announcing-dartpad-friction-free-way-to.html|title=Announcing DartPad: A friction-free way to explore Dart code|last=Ladd|first=Seth|date=2015-05-06|website=Dart News & Updates|access-date=2015-05-18}}</ref> |
||
== Development |
== Development tools == |
||
The Dart DevTools, written in Dart,<ref>{{Citation |title=Dart & Flutter DevTools |date=2023-05-12 |url=https://github.com/flutter/devtools |access-date=2023-05-12 |publisher=Flutter}}</ref> include debugging and performance tools. |
The Dart DevTools, written in Dart,<ref>{{Citation |title=Dart & Flutter DevTools |date=2023-05-12 |url=https://github.com/flutter/devtools |access-date=2023-05-12 |publisher=Flutter}}</ref> include debugging and performance tools. |
||
== Flutter == |
== Flutter == |
||
Google introduced [[Flutter (software)|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 (operating system)|Android]], [[iOS]] and the web. Flutter 2.0 released support for macOS, Linux, and Windows as a beta feature.<ref>{{Cite web |last=Sells |first=Chris |date=2021-03-03 |title= |
Google introduced [[Flutter (software)|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 (operating system)|Android]], [[iOS]] and the web. Flutter 2.0 released support for macOS, Linux, and Windows as a beta feature.<ref>{{Cite web |last=Sells |first=Chris |date=2021-03-03 |title=What's New in Flutter 2.0 |url=https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65 |access-date=2023-05-12 |website=Flutter |language=en}}</ref> Flutter 2.10 released with production support for [[Windows]]<ref>{{Cite web |last=Sneath |first=Tim |date=February 3, 2022 |title=Announcing Flutter for Windows |url=https://medium.com/flutter/announcing-flutter-for-windows-6979d0d01fed |website=}}</ref> and Flutter 3 released production support for all desktop platforms.<ref>{{Cite web |last=Chisholm |first=Kevin |date=2022-05-12 |title=What's new in Flutter 3 |url=https://medium.com/flutter/whats-new-in-flutter-3-8c74a5bc32d0 |access-date=2023-05-12 |website=Flutter |language=en}}</ref> It provides a framework, widgets, and tools. This framework gives developers a way to build and deploy mobile, desktop, and web apps.<ref>{{Cite web |title=FAQ |url=https://flutter.dev/docs/resources/faq |access-date=2021-08-29 |website=flutter.dev |language=en}}</ref> Flutter works with [[Firebase]]<ref>{{Cite web |title=Firebase |url=https://flutter.dev/docs/development/data-and-backend/firebase |access-date=2021-08-29 |website=flutter.dev |language=en}}</ref> and supports extending the framework through add-ons called packages. These can be found on their package repository, pub.dev.<ref>{{Cite web |title=Dart packages |url=https://pub.dev/ |access-date=2023-05-12 |website=Dart packages |language=en-us}}</ref> JetBrains also supports a Flutter plugin.<ref>{{Cite web |title=Flutter - IntelliJ IDEs Plugin {{!}} Marketplace |url=https://plugins.jetbrains.com/plugin/9212-flutter |access-date=2023-05-13 |website=JetBrains Marketplace}}</ref> |
||
==Example== |
==Example== |
||
Line 208: | Line 212: | ||
void main() { |
void main() { |
||
print('Hello, World!'); |
print('Hello, World!'); |
||
} |
|||
</syntaxhighlight> |
|||
A simple [[for-loop]]:<ref>{{Cite web | title=Loops in Dart {{!}} Fluter World {{!}} Dart and Flutter Tutorials | url=https://www.flutterworld.tech/tutorials/dart-tutorials/dart-basics/loops-in-dart/#for-loop}}</ref> |
|||
<syntaxhighlight lang="dart"> |
|||
void main() { |
|||
for (var i = 1; i <= 10; i++) { |
|||
print(i); |
|||
} |
|||
} |
} |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
Line 262: | Line 276: | ||
// Example of operator overloading |
// Example of operator overloading |
||
Point operator +(Point other) => Point(x + other.x, y + other.y); |
Point operator +(Point other) => Point(x + other.x, y + other.y); |
||
// When |
// When instantiating a class such as Point in Dart 2+, new is |
||
// an optional word |
// an optional word |
||
} |
} |
||
Line 278: | Line 292: | ||
==Influences from other languages== |
==Influences from other languages== |
||
Dart |
Dart belongs to the [[ALGOL]] language family.<ref>{{cite web|url=http://c2.com/cgi/wiki?AlgolFamily|title=Algol Family|work=c2.com}}</ref>{{Not in ref|date=September 2023}} Its members include C, Java, C#, JavaScript, and others. |
||
The [[Method cascading|method cascade]] syntax was adopted from Smalltalk.<ref>{{Cite web |title=Method Cascades in Dart |url=https://news.dartlang.org/2012/02/method-cascades-in-dart-posted-by-gilad.html |access-date=2023-05-13 |language=en}}</ref> This syntax provides a shortcut for invoking several methods one after another on the same object. |
The [[Method cascading|method cascade]] syntax was adopted from Smalltalk.<ref>{{Cite web |title=Method Cascades in Dart |date=10 September 2019 |url=https://news.dartlang.org/2012/02/method-cascades-in-dart-posted-by-gilad.html |access-date=2023-05-13 |language=en}}</ref> This syntax provides a shortcut for invoking several methods one after another on the same object. |
||
Dart's [[mixin]]s were influenced by [[Strongtalk]]{{Citation needed|reason=Just seeing a citation implies it is true, the paper on Smalltalk/Strongtalk predates Dart so does not say for sure. Maybe someone know it is based on Strongtalk mixins. Strongtalk wasn't first to introduce mixins. No expert on mixins – are there different variants and for sure Strongtalk the first to use this variant? Even then would someone have to say that it is based on that language?|date=March 2014}}<ref>{{cite journal |
Dart's [[mixin]]s were influenced by [[Strongtalk]]{{Citation needed|reason=Just seeing a citation implies it is true, the paper on Smalltalk/Strongtalk predates Dart so does not say for sure. Maybe someone know it is based on Strongtalk mixins. Strongtalk wasn't first to introduce mixins. No expert on mixins – are there different variants and for sure Strongtalk the first to use this variant? Even then would someone have to say that it is based on that language?|date=March 2014}}<ref>{{cite journal |
||
Line 294: | Line 308: | ||
}}</ref><ref>{{Cite web |last=Ladd |first=Seth |date=November 13, 2011 |title=Transcription of A Quick Tour of Dart by Gilad Bracha |url=http://blog.sethladd.com/2011/11/transcription-of-quick-tour-of-dart-by.html |access-date=2023-05-13 |language=en}}</ref> and [[Ruby (programming language)|Ruby]]. |
}}</ref><ref>{{Cite web |last=Ladd |first=Seth |date=November 13, 2011 |title=Transcription of A Quick Tour of Dart by Gilad Bracha |url=http://blog.sethladd.com/2011/11/transcription-of-quick-tour-of-dart-by.html |access-date=2023-05-13 |language=en}}</ref> and [[Ruby (programming language)|Ruby]]. |
||
Dart makes use of isolates as a concurrency and security unit when structuring applications.<ref>{{cite web|url=http://www.infoq.com/articles/google-dart/|title=The Essence of Google Dart: Building Applications, Snapshots, Isolates|work=InfoQ}}</ref> The Isolate concept builds upon the [[Actor model]] implemented in Erlang.<ref>{{Cite web |title=Fearless concurrency: how Clojure, Rust, Pony, Erlang and Dart let you achieve that. - Renato Athaydes |url=https://sites.google.com/a/athaydes.com/renato-athaydes/posts/fearlessconcurrencyhowclojurerustponyerlanganddartletyouachievethat#TOC-The-Actor-Model-Erlang-Dart- |access-date=2023-05-13 |website=sites.google.com}}</ref> |
Dart makes use of isolates as a concurrency and security unit when structuring applications.<ref>{{cite web|url=http://www.infoq.com/articles/google-dart/|title=The Essence of Google Dart: Building Applications, Snapshots, Isolates|work=InfoQ}}</ref> The Isolate concept builds upon the [[Actor model]] implemented in Erlang.<ref>{{Cite web |title=Fearless concurrency: how Clojure, Rust, Pony, Erlang and Dart let you achieve that. - Renato Athaydes |url=https://sites.google.com/a/athaydes.com/renato-athaydes/posts/fearlessconcurrencyhowclojurerustponyerlanganddartletyouachievethat#TOC-The-Actor-Model-Erlang-Dart- |access-date=2023-05-13 |website=sites.google.com |archive-date=2023-05-13 |archive-url=https://web.archive.org/web/20230513052456/https://sites.google.com/a/athaydes.com/renato-athaydes/posts/fearlessconcurrencyhowclojurerustponyerlanganddartletyouachievethat#TOC-The-Actor-Model-Erlang-Dart- |url-status=dead }}</ref> |
||
In 2004, [[Gilad Bracha]] (who was a member of the Dart team) and [[David Ungar]] first proposed Mirror API for performing controlled and secure [[Reflective programming|reflection]] in a paper.<ref>{{cite journal |
In 2004, [[Gilad Bracha]] (who was a member of the Dart team) and [[David Ungar]] first proposed Mirror API for performing controlled and secure [[Reflective programming|reflection]] in a paper.<ref>{{cite journal |
Latest revision as of 13:24, 24 November 2024
Paradigm | Multi-paradigm: functional, imperative, object-oriented, reflective[1] |
---|---|
Designed by | Lars Bak, Kasper Lund |
Developer | |
First appeared | October 10, 2011[2] |
Stable release | 3.6.0[3]
/ 11 December 2024 |
Typing discipline | 1.x: Optional 2.x: Inferred[4] (static, strong) |
Platform | Cross-platform |
OS | Cross-platform |
License | BSD |
Filename extensions | .dart |
Website | dart |
Major implementations | |
Dart VM, dart2native, dart2js, DDC, Flutter | |
Influenced by | |
C, C++, C#, Erlang, Java, JavaScript, Ruby, Smalltalk, Strongtalk,[5] TypeScript[6] |
Dart is a programming language designed by Lars Bak and Kasper Lund and developed by Google.[8] It can be used to develop web and mobile apps as well as server and desktop applications.
Dart is an object-oriented, class-based, garbage-collected language with C-style syntax.[9] It can compile to machine code, JavaScript, or WebAssembly. It supports interfaces, mixins, abstract classes, reified generics and type inference.[4]
History
[edit]Dart was unveiled at the GOTO conference in Aarhus, Denmark, October 10–12, 2011.[10] Lars Bak and Kasper Lund founded the project.[11] Dart 1.0 was released on November 14, 2013.[12]
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.[13]
Dart 2.0 was released in August 2018 with language changes including a type system.[14]
Dart 2.6 introduced a new extension, dart2native
. This extended native compilation to the Linux, macOS, and Windows desktop platforms.[15] 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.[16] The Flutter toolkit integrates Dart, so it can compile on small services like backend support.[17][18]
Dart 3.0 was released in May 2023[19] with changes to the type system to require sound null safety. This release included new features like records, patterns,[20] and class modifiers.[21]
Dart can compile to WebAssembly since version 3.4.[22]
Specification
[edit]Dart released the 5th edition of its language specification on April 9, 2021.[23] This covers all syntax through Dart 2.10. A draft of the 6th edition includes all syntax through 2.13.[24] Accepted proposals for the specification and drafts of potential features can be found in the Dart language repository on GitHub.[25]
ECMA International formed technical committee, TC52,[26] to standardize Dart. ECMA approved the first edition of the Dart language specification as ECMA-408[27] in July 2014 at its 107th General Assembly.[28] Subsequent editions were approved in December 2014,[29] June 2015, and December 2015.[27]
Deploying apps
[edit]The Dart software development kit (SDK) ships with a standalone Dart runtime. This allows Dart code to run in a command-line interface environment. The SDK includes tools to compile and package Dart apps.[30] Dart ships with a complete standard library allowing users to write fully working system apps like custom web servers.[31]
Developers can deploy Dart apps in six ways:
Deployment type | Target platform | Platform- specific |
Requires Dart VM |
Compile speed |
Execution speed |
---|---|---|---|---|---|
JavaScript | Browser | No | No | Slow | Fast |
WebAssembly[22][32] | Browser | No | No | Slow | Fast |
Self-contained executable | macOS, Windows, Linux | Yes | No | Slow | Fast |
Ahead-of-time module | macOS, Windows, Linux | Yes | No | Slow | Fast |
Just-in-time module | macOS, Windows, Linux | Yes | Yes | Fast | Slow |
Portable module | macOS, Windows, Linux | No | Yes | Fast | Slow |
Deploying to the web
[edit]Dart 3 can deploy apps to the web as either JavaScript or WebAssembly apps. Dart supports compiling to WebAssembly as of May 2024[update].
JavaScript
[edit]- To run in mainstream web browsers, Dart relies on a source-to-source compiler to JavaScript. 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.[33]
- The first Dart-to-JavaScript compiler was
dartc
. It was deprecated in Dart 2.0. - The second Dart-to-JavaScript compiler was frog.[34] Written in Dart, it was introduced in 2013 and deprecated in 2020. This should not be confused with Dart Frog,[35] 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,[36] the Dart-baseddart2js
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
.[37] 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 thedart2js
compiler,[38] stating that it now runs faster than handwritten JavaScript on Chrome's V8 JavaScript engine for the DeltaBlue benchmark.[39] - Prior to Dart 2.18, both
dart2js
anddartdevc
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. Thewebdev serve
command calls thedartdevc
compiler. Thewebdev build
command calls thedart2js
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.To create production apps, run$ cd <dart_app_directory> $ webdev serve [--debug] [-o <target.js>]
webdev build
to compile a minified JavaScript file.$ cd <dart_app_directory> $ webdev build [-o <target.js>]
WebAssembly
[edit]- With the Dart 3.22 release, Google announced support for compiling Dart code to WebAssembly.[22] Full support for Wasm requires adoption of the WasmGC[40] feature into the Wasm standard. Chrome 119[41] supports WasmGC. Firefox[42] 120 and later could support WasmGC, but a current bug is blocking compatibility.[43] Safari[44] and Microsoft Edge are integrating WasmGC support.
Deploying to native platforms
[edit]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
[edit]- 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> $ ./<target_app>
Ahead-of-time module
[edit]- When compiled ahead of time,[45] 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 <target_app.aot> $ dartaotruntime <target_app.aot>
Just-in-time module
[edit]- 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 <source.dart> to jit-snapshot file <target_app.jit> Hello world! $ dart run <target_app.jit> Hello world!
Dart kernel module
[edit]- 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 <source.dart> to kernel file <target_app>.dill. $ dart run <target_app>.dill
Concurrency
[edit]To achieve concurrency, Dart uses isolated, independent workers that do not share memory, but use message passing,[46] 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.[47]
Null safety
[edit]Starting with Dart 2.12, Dart introduced sound null safety.[48] 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
[edit]Snapshot files, a core part of the Dart VM, store objects and other runtime data.[46]
- 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.[49] An object generates a snapshot, transfers it to another isolate, then the isolate deserializes it.
Editors
[edit]On November 18, 2011, Google released Dart Editor, an open-source program based on Eclipse components, for macOS, Windows, and Linux-based operating systems.[50] 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.[51]
On April 18, 2015, Google retired the Dart Editor in favor of the JetBrains integrated development environment (IDE).[52] Android Studio, IntelliJ IDEA, PyCharm, PhpStorm and WebStorm support a Dart plugin.[53] This plugin supports many features such as syntax highlighting, code completion, analysis, refactoring, debugging, and more. Other editors include plugins for Dart[54] including Sublime Text,[55] Atom,[56] Emacs,[57] Vim[58] and Visual Studio Code.[59]
Chrome Dev Editor
[edit]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.[60] The project was later renamed as Chrome Dev Editor.[61] Built in Dart, it contained Spark which is powered by Polymer.[62]
In June 2015, Google transferred the CDE project to GitHub as a free software project and ceased active investment in CDE.[63] The Chrome Dev Editor project was archived on April 24, 2021.[64]
DartPad
[edit]To provide an easier way to start using Dart, the Dart team created DartPad at the start of 2015. This online editor allows developers to experiment with Dart application programming interfaces (APIs) and run Dart code. It provides syntax highlighting, code analysis, code completion, documentation, and HTML and CSS editing.[65]
Development tools
[edit]The Dart DevTools, written in Dart,[66] include debugging and performance tools.
Flutter
[edit]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.[67] Flutter 2.10 released with production support for Windows[68] and Flutter 3 released production support for all desktop platforms.[69] It provides a framework, widgets, and tools. This framework gives developers a way to build and deploy mobile, desktop, and web apps.[70] Flutter works with Firebase[71] and supports extending the framework through add-ons called packages. These can be found on their package repository, pub.dev.[72] JetBrains also supports a Flutter plugin.[73]
Example
[edit]A Hello, World! example:
void main() {
print('Hello, World!');
}
void main() {
for (var i = 1; i <= 10; i++) {
print(i);
}
}
A function to calculate the nth Fibonacci number:
void main() {
var i = 20;
print('fibonacci($i) = ${fibonacci(i)}');
}
/// Computes the nth Fibonacci number.
int fibonacci(int n) {
return n < 2 ? n : (fibonacci(n - 1) + fibonacci(n - 2));
}
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 {
// 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 instantiating 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);
}
Influences from other languages
[edit]Dart belongs to the ALGOL language family.[75][failed verification] Its members include C, Java, C#, JavaScript, and others.
The method cascade syntax was adopted from Smalltalk.[76] This syntax provides a shortcut for invoking several methods one after another on the same object.
Dart's mixins were influenced by Strongtalk[citation needed][77][78] and Ruby.
Dart makes use of isolates as a concurrency and security unit when structuring applications.[79] The Isolate concept builds upon the Actor model implemented in Erlang.[80]
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.[81] The concept was first implemented in Self.
See also
[edit]- 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
[edit]- ^ Kopec, David (30 June 2014). Dart for Absolute Beginners. Apress. p. 56. ISBN 9781430264828. Retrieved 24 November 2015.
- ^ Bak, Lars (10 October 2011). "Dart: a language for structured web programming". Google Code Blog. Retrieved 31 January 2016.
- ^ "Release 3.6.0".
- ^ a b "The Dart type system". dart.dev.
- ^ "Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013". YouTube. 16 May 2013. Retrieved 22 December 2013.
- ^ "The Dart Team Welcomes TypeScript". 10 September 2019. Retrieved 22 February 2020.
- ^ "Dart SDK Tags". GitHub.
- ^ "A Bit About Dart - Learn Dart: First Step to Flutter". Educative: Interactive Courses for Software Developers. Retrieved 2023-06-20.
- ^ "A Tour of the Dart Language". dart.dev. Retrieved 2018-08-09.
- ^ "Dart, a new programming language for structured web programming", GOTO conference (presentation) (opening keynote), Århus conference, 2011-10-10
{{citation}}
: CS1 maint: location missing publisher (link) - ^ Ladd, Seth. "What is Dart". What is Dart?. O'Reilly. Retrieved August 16, 2014.
- ^ "Dart 1.0: A stable SDK for structured web apps". news.dartlang.org. Retrieved 2018-08-08.
- ^ Seth Ladd (10 September 2019). "Dart News & Updates". dartlang.org.
- ^ Moore, Kevin (2018-08-07). "Announcing Dart 2 Stable and the Dart Web Platform". Dart. Retrieved 2018-08-08.
- ^ "Dart language evolution". dart.dev. Retrieved 2023-06-20.
- ^ "Dart overview". dart.dev. Retrieved 2023-05-12.[permanent dead link ]
- ^ "Dart 2.5 brings native compilation to the desktop". Infoworld. 20 November 2019. Retrieved 2019-11-28.
- ^ "Dart 2.6 released with dart2native". SDtimes. 7 November 2019. Retrieved 2019-11-28.
- ^ "Dart language evolution". dart.dev. Retrieved 2024-01-09.
- ^ "Patterns". dart.dev. Retrieved 2023-05-12.[permanent dead link ]
- ^ "Class modifiers".
- ^ a b c Thomsen, Michael (2024-05-14). "Landing Flutter 3.22 and Dart 3.4 at Google I/O 2024". Flutter. Retrieved 2024-05-17.
- ^ "Dart Programming Language Specification, 5th edition" (PDF).
- ^ "Dart Programming Language Specification, 6th edition draft" (PDF).
- ^ "Dart language GitHub repository". GitHub.
- ^ "TC52 - Dart". Archived from the original on 2016-08-02. Retrieved 2013-12-16.
- ^ a b "ECMA-408". Ecma International. Retrieved 2023-05-12.
- ^ Anders Thorhauge Sandholm (10 September 2019). "Dart News & Updates". dartlang.org.
- ^ Anders Thorhauge Sandholm (10 September 2019). "Dart News & Updates". dartlang.org.
- ^ "Packages of publisher tools.dart.dev". Dart packages. Retrieved 2023-05-12.
- ^ "An Introduction to the dart:io Library". dart.dev. Retrieved 2013-07-21.
- ^ Thomsen, Michael (2023-05-10). "Announcing Dart 3". Dart. Retrieved 2023-05-13.
- ^ "JavaScript as a compilation target: Making it fast" (PDF). Dartlang.org. Archived from the original (PDF) on 2016-07-02. Retrieved 2013-08-18.
- ^ "Towards a single Dart to JavaScript compiler". 10 September 2019. Retrieved 2023-05-13.
- ^ "Dart Frog". dartfrog.vgv.dev. Retrieved 2023-05-13.
- ^ Moore, Kevin (2018-08-08). "Announcing Dart 2 Stable and the Dart Web Platform". Dart. Retrieved 2023-05-13.
- ^ "dartdevc: The Dart development compiler". dart.dev. Retrieved 2023-05-13.[permanent dead link ]
- ^ Ladd, Seth (2013-03-28). "Dart News & Updates: Why dart2js produces faster JavaScript code from Dart". News.dartlang.org. Retrieved 2013-07-21.
- ^ "Dart Performance". Dartlang.org. Archived from the original on 2017-01-03. Retrieved 2013-07-21.
- ^ GC Proposal for WebAssembly, WebAssembly, 2023-05-12, retrieved 2023-05-13
- ^ "WebAssembly Garbage Collection (WasmGC) now enabled by default in Chrome | Blog". Chrome for Developers. Retrieved 2024-05-17.
- ^ "SpiderMonkey Newsletter (Firefox 110-111)". SpiderMonkey JavaScript/WebAssembly Engine. 2023-02-16. Retrieved 2023-05-13.
- ^ "1788206 - OffscreenCanvas.transferToImageBitmap incurs a copy". bugzilla.mozilla.org. Retrieved 2024-05-17.
- ^ "Safari Technology Preview 167 Release Notes". Apple Developer Documentation. Retrieved 2023-05-13.
- ^ Obinna, Onuoha (2020-04-07). "How does JIT and AOT work in Dart?". Medium. Retrieved 2023-06-20.
- ^ a b "The Essence of Google Dart: Building Applications, Snapshots, Isolates". InfoQ. Retrieved 2021-08-29.
- ^ Moore, Kevin (February 23, 2018). "Dart2 Breaking Change: Removing web support for dart:mirrors and dart:isolate". Google Groups.
- ^ Hracek, Filip (2020-06-10). "Announcing sound null safety". Dart. Retrieved 2023-05-12.
- ^ "Concurrency in Dart". dart.dev. Retrieved 2023-05-12.
- ^ "Google Releases Dart Editor for Windows, Mac OS X, and Linux". Archived from the original on 2013-12-03. Retrieved 2011-11-29.
- ^ "Dart plugin for Eclipse is Ready for Preview". 10 September 2019.
- ^ Ladd, Seth (2015-04-30). "The present and future of editors and IDEs for Dart". Dart News & Updates. Retrieved 2015-05-18.
- ^ "JetBrains Plugin Repository : Dart". Plugins.intellij.net. Retrieved 2013-07-21.
- ^ "Dart Tools". dart.dev. Retrieved 2016-11-15.
- ^ "Dart - Packages - Package Control". packagecontrol.io. Retrieved 2023-05-13.
- ^ "dart - Dart plugin for Atom". dart-atom.github.io. Retrieved 2023-05-13.
- ^ Trainor, Brady (2023-04-15), bradyt/dart-mode, retrieved 2023-05-13
- ^ Dart Support for Vim, Dart, 2023-05-09, retrieved 2023-05-13
- ^ "Dart - Visual Studio Marketplace". marketplace.visualstudio.com. Retrieved 2023-05-13.
- ^ Beaufort, François. "The chromium team is currently actively working".
- ^ "A Chrome app based development environment". GitHub. 26 October 2021.
- ^ "Spark, A Chrome App from Google is an IDE for Your Chromebook". November 22, 2013.
- ^ Saroop, Sri. "Chrome Dev Editor: Announcements".
- ^ "Chrome Dev Editor is a developer tool for building apps on the Chrome platform: Chrome Apps and Web Apps, in JavaScript or Dart. (NO LONGER IN ACTIVE DEVELOPMENT) - googlearchive/chromedeveditor". July 29, 2019 – via GitHub.
- ^ Ladd, Seth (2015-05-06). "Announcing DartPad: A friction-free way to explore Dart code". Dart News & Updates. Retrieved 2015-05-18.
- ^ Dart & Flutter DevTools, Flutter, 2023-05-12, retrieved 2023-05-12
- ^ Sells, Chris (2021-03-03). "What's New in Flutter 2.0". Flutter. Retrieved 2023-05-12.
- ^ Sneath, Tim (February 3, 2022). "Announcing Flutter for Windows".
- ^ Chisholm, Kevin (2022-05-12). "What's new in Flutter 3". Flutter. Retrieved 2023-05-12.
- ^ "FAQ". flutter.dev. Retrieved 2021-08-29.
- ^ "Firebase". flutter.dev. Retrieved 2021-08-29.
- ^ "Dart packages". Dart packages. Retrieved 2023-05-12.
- ^ "Flutter - IntelliJ IDEs Plugin | Marketplace". JetBrains Marketplace. Retrieved 2023-05-13.
- ^ "Loops in Dart | Fluter World | Dart and Flutter Tutorials".
- ^ "Algol Family". c2.com.
- ^ "Method Cascades in Dart". 10 September 2019. Retrieved 2023-05-13.
- ^ Bracha, Gilad; Griswold, David (September 1996). "Extending the Smalltalk Language with Mixins" (PDF). OOPSLA Workshop. OOPSLA.
- ^ Ladd, Seth (November 13, 2011). "Transcription of A Quick Tour of Dart by Gilad Bracha". Retrieved 2023-05-13.
- ^ "The Essence of Google Dart: Building Applications, Snapshots, Isolates". InfoQ.
- ^ "Fearless concurrency: how Clojure, Rust, Pony, Erlang and Dart let you achieve that. - Renato Athaydes". sites.google.com. Archived from the original on 2023-05-13. Retrieved 2023-05-13.
- ^ Bracha, Gilad; Ungar, David (2004). "Mirrors: design principles for meta-level facilities of object-oriented programming languages" (PDF). ACM SIGPLAN Notices. 39 (10). ACM: 331–344. doi:10.1145/1035292.1029004. Retrieved 15 February 2014.
Bibliography
[edit]- Walrath, Kathy; Ladd, Seth (March 7, 2012). What is Dart? (1st ed.). O'Reilly Media. p. 20. ISBN 978-14493-32327.
- Walrath, Kathy; Ladd, Seth (November 7, 2012). Dart: Up and Running (1st ed.). O'Reilly Media. p. 144. ISBN 978-1449330897.
- Buckett, Chris (December 28, 2012). Dart in Action (1st ed.). Manning Publications. p. 475. ISBN 978-1617290862.
External links
[edit]- 2011 software
- 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