[stable] [analyzer] Clear watcher subscriptions to avoid leaking package:watcher data Analyzer adds watchers to all root folders it has opened. When editing, say, a pubspec.yaml file it ~starts over, cancels the old subscriptions and creates new ones. It keeps references to the old subscriptions too though. This in turn leaks data. On Linux internally in package:watcher it clears some stuff as it's cancelled, but it doesn't on Windows, nor on Mac. The means it can leak an infinite amount of `_Entry` classes, and for instance in https://github.com/dart-lang/sdk/issues/52447 a user has 40+ million of those classes. Reproducing this I got to 40+ million too, at which point the "Retained size" of all the `_Entry` objects was 7.39GB. This fixes the leak by clearing the list. Cherry-pick: https://dart-review.googlesource.com/c/sdk/+/308940 Change-Id: I8a4bdbc97259bd8e13209909769330ca6d81b2a5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/311466 Commit-Queue: Samuel Rawlins <srawlins@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Dart is:
Optimized for UI: Develop with a programming language specialized around the needs of user interface creation.
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app.
Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web.
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.