OLD | NEW |
1 ## 1.24.0 | 1 ## 1.24.0 |
2 | 2 |
3 ### Language | 3 ### Language |
4 | 4 |
| 5 #### Strong Mode |
| 6 |
5 ### Core library changes | 7 ### Core library changes |
6 | 8 |
7 ### Dart VM | 9 ### Dart VM |
8 | 10 |
9 ### Strong Mode | |
10 | |
11 ### Tool Changes | 11 ### Tool Changes |
12 | 12 |
13 ## 1.23.0 | 13 ## 1.23.0 |
14 | 14 |
15 ### Language | 15 ### Language |
16 * Allow using URI strings in `part of` declarations to refer to the | 16 * Allow using URI strings in `part of` declarations to refer to the |
17 importing library. | 17 importing library. |
18 A library part now can declare its library either as: | 18 A library part now can declare its library either as: |
19 `part of name.of.library;` or as `part of "uriReferenceOfLibrary.dart";`. | 19 `part of name.of.library;` or as `part of "uriReferenceOfLibrary.dart";`. |
20 This allows libraries with no library declarations (and therefore no name) | 20 This allows libraries with no library declarations (and therefore no name) |
21 to have parts, and it allows tools to easily find the library of a part file. | 21 to have parts, and it allows tools to easily find the library of a part file. |
22 | 22 |
23 ### Core library changes | 23 #### Strong Mode |
24 | 24 |
25 * `dart:core` | 25 * Breaking change - it is now a strong mode error if a mixin causes a name |
26 * Added `Uri.isScheme` function to check the scheme of a URI. | 26 conflict between two private members (field/getter/setter/method) from a |
27 Example: `uri.isScheme("http")`. Ignores case when comparing. | 27 different library. (SDK |
28 * Make `UriData.parse` validate its input better. | 28 issue [28809](https://github.com/dart-lang/sdk/issues/28809)). |
29 If the data is base-64 encoded, the data is normalized wrt. | |
30 alphabet and padding, and it contains invalid base-64 data, | |
31 parsing fails. Also normalizes non-base-64 data. | |
32 * `dart:io` | |
33 * Added functions `File.lastAccessed`, `File.lastAccessedSync`, | |
34 `File.setLastModified`, `File.setLastModifiedSync`, `File.setLastAccessed`, | |
35 and `File.setLastAccessedSync`. | |
36 * Added `{Stdin,Stdout}.supportsAnsiEscapes`. | |
37 | 29 |
38 ### Dart VM | 30 lib1.dart: |
39 | 31 |
40 * Calls to `print()` and `Stdout.write*()` now correctly print unicode | |
41 characters to the console on Windows. Calls to `Stdout.add*()` behave as | |
42 before. | |
43 | 32 |
44 ### Strong Mode | 33 ```dart |
| 34 class A { |
| 35 int _x; |
| 36 } |
45 | 37 |
46 * Strong mode will prefer the expected type to infer generic types, | 38 class B { |
47 functions, and methods | 39 int _x; |
48 (SDK issue [27586](https://github.com/dart-lang/sdk/issues/27586)). | 40 } |
| 41 ``` |
| 42 |
| 43 lib2.dart: |
| 44 |
| 45 |
| 46 ```dart |
| 47 import 'lib1.dart'; |
| 48 |
| 49 class C extends A with B {} |
| 50 ``` |
| 51 |
| 52 ``` |
| 53 error • The private name _x, defined by B, conflicts with the same name defi
ned by A at tmp/lib2.dart:3:24 • private_collision_in_mixin_application |
| 54 ``` |
| 55 |
| 56 |
| 57 * Breaking change - strong mode will prefer the expected type to infer generic |
| 58 types, functions, and methods (SDK |
| 59 issue [27586](https://github.com/dart-lang/sdk/issues/27586)). |
49 | 60 |
50 ```dart | 61 ```dart |
51 main() { | 62 main() { |
52 List<Object> foo = /*infers: <Object>*/['hello', 'world']; | 63 List<Object> foo = /*infers: <Object>*/['hello', 'world']; |
53 var bar = /*infers: <String>*/['hello', 'world']; | 64 var bar = /*infers: <String>*/['hello', 'world']; |
54 } | 65 } |
55 ``` | 66 ``` |
56 | 67 |
57 * Strong mode inference error messages are improved | 68 * Strong mode inference error messages are improved |
58 (SDK issue [29108](https://github.com/dart-lang/sdk/issues/29108)). | 69 (SDK issue [29108](https://github.com/dart-lang/sdk/issues/29108)). |
(...skipping 25 matching lines...) Expand all Loading... |
84 class D extends C { | 95 class D extends C { |
85 int x = 123; | 96 int x = 123; |
86 get y => super.x; | 97 get y => super.x; |
87 } | 98 } |
88 main() { | 99 main() { |
89 print(new D().x); | 100 print(new D().x); |
90 print(new D().y); | 101 print(new D().y); |
91 } | 102 } |
92 ``` | 103 ``` |
93 | 104 |
| 105 * Strong mode down cast composite warnings are no longer issued by default. |
| 106 (SDK issue [28588](https://github.com/dart-lang/sdk/issues/28588)). |
| 107 |
| 108 ```dart |
| 109 void test() { |
| 110 List untyped = []; |
| 111 List<int> typed = untyped; // No down cast composite warning |
| 112 } |
| 113 ``` |
| 114 |
| 115 To opt back into the warnings, add the following to |
| 116 the |
| 117 [.analysis_options](https://www.dartlang.org/guides/language/analysis-options) |
| 118 file for your project. |
| 119 |
| 120 ``` |
| 121 analyzer: |
| 122 errors: |
| 123 strong_mode_down_cast_composite: warning |
| 124 ``` |
| 125 |
| 126 |
| 127 ### Core library changes |
| 128 |
| 129 * `dart:core` |
| 130 * Added `Uri.isScheme` function to check the scheme of a URI. |
| 131 Example: `uri.isScheme("http")`. Ignores case when comparing. |
| 132 * Make `UriData.parse` validate its input better. |
| 133 If the data is base-64 encoded, the data is normalized wrt. |
| 134 alphabet and padding, and it contains invalid base-64 data, |
| 135 parsing fails. Also normalizes non-base-64 data. |
| 136 * `dart:io` |
| 137 * Added functions `File.lastAccessed`, `File.lastAccessedSync`, |
| 138 `File.setLastModified`, `File.setLastModifiedSync`, `File.setLastAccessed`, |
| 139 and `File.setLastAccessedSync`. |
| 140 * Added `{Stdin,Stdout}.supportsAnsiEscapes`. |
| 141 |
| 142 ### Dart VM |
| 143 |
| 144 * Calls to `print()` and `Stdout.write*()` now correctly print unicode |
| 145 characters to the console on Windows. Calls to `Stdout.add*()` behave as |
| 146 before. |
| 147 |
94 ### Tool changes | 148 ### Tool changes |
95 | 149 |
96 * Analysis | 150 * Analysis |
97 * `dartanalyzer` now follows the same rules as the analysis server to find | 151 * `dartanalyzer` now follows the same rules as the analysis server to find |
98 an analysis options file, stopping when an analysis options file is found: | 152 an analysis options file, stopping when an analysis options file is found: |
99 * Search up the directory hierarchy looking for an analysis options file. | 153 * Search up the directory hierarchy looking for an analysis options file. |
100 * If analyzing a project referencing the [Flutter](https://flutter.io/) | 154 * If analyzing a project referencing the [Flutter](https://flutter.io/) |
101 package, then use the | 155 package, then use the |
102 [default Flutter analysis options](https://github.com/flutter/flutter/blob
/master/packages/flutter/lib/analysis_options_user.yaml) | 156 [default Flutter analysis options](https://github.com/flutter/flutter/blob
/master/packages/flutter/lib/analysis_options_user.yaml) |
103 found in `package:flutter`. | 157 found in `package:flutter`. |
(...skipping 1710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1814 they will keep the Dart process alive until they time out. This fixes the | 1868 they will keep the Dart process alive until they time out. This fixes the |
1815 handling of persistent connections. Previously, the client would shut down | 1869 handling of persistent connections. Previously, the client would shut down |
1816 immediately after a request. | 1870 immediately after a request. |
1817 | 1871 |
1818 * **Breaking change:** `HttpServer` no longer compresses all traffic by | 1872 * **Breaking change:** `HttpServer` no longer compresses all traffic by |
1819 default. The new `autoCompress` property can be set to `true` to re-enable | 1873 default. The new `autoCompress` property can be set to `true` to re-enable |
1820 compression. | 1874 compression. |
1821 | 1875 |
1822 * `dart:isolate`: `Isolate.spawnUri` added the optional `packageRoot` argument, | 1876 * `dart:isolate`: `Isolate.spawnUri` added the optional `packageRoot` argument, |
1823 which controls how it resolves `package:` URIs. | 1877 which controls how it resolves `package:` URIs. |
OLD | NEW |