-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make superclass/interface for immutable Lists that doesn't have mutating methods instead of having throwing methods. #1869
Comments
We have been in this situation (GrowableArray vs Array) with the unfortunate result of not being able to assign immutable lists to parameters typed as List, which lead to unending confusion. The current situation is the resolution of that situation and I don't think we have enough evidence to restart that discussion. |
FWIW I think we made the right call and I agree with the WontFix. |
Ok, I see the point, and Dart is a pragmatic language :) And because types are already covariant, you can trust reading from something based on the declared type, but you can't really trust mutating anyway. This actually fits in. |
…g, mockito, package_config, shelf, string_scanner, test, webdev Revisions updated by `dart tools/rev_sdk_deps.dart`. async (https://github.com/dart-lang/async/compare/f700e9a..f700e9a): f700e9a 2023-01-27 Devon Carew blast_repo fixes (#231) characters (https://github.com/dart-lang/characters/compare/4526aa8..4526aa8): 4526aa8 2023-01-30 Lasse R.H. Nielsen Update tables to Unicode 15.0. (#71) collection (https://github.com/dart-lang/collection/compare/a566328..a566328): a566328 2023-01-26 Devon Carew add a publish script; prep to publish (#267) dartdoc (https://github.com/dart-lang/dartdoc/compare/bc7bdc4..bc7bdc4): bc7bdc44 2023-01-30 dependabot[bot] Bump js from 0.6.5 to 0.6.7 (#3310) json_rpc_2 (https://github.com/dart-lang/json_rpc_2/compare/e73c4ad..e73c4ad): e73c4ad 2023-01-26 Devon Carew blast_repo fixes (#89) logging (https://github.com/dart-lang/logging/compare/399100a..399100a): 399100a 2023-01-26 Devon Carew add a publish script; prep to publish 1.1.1 (#128) mockito (https://github.com/dart-lang/mockito/compare/d2a8df1..d2a8df1): d2a8df1 2023-01-30 Kevin Moore Latest build_web_compilers, move to pkg:lints, fix breaks (#605) 13340b5 2023-01-30 dependabot[bot] Bump dart-lang/setup-dart from 1.3 to 1.4 (#600) package_config (https://github.com/dart-lang/package_config/compare/3fe81c4..3fe81c4): 3fe81c4 2023-01-30 Kevin Moore Support latest pkg:build_web_compilers, lints. Update min SDK (#129) shelf (https://github.com/dart-lang/shelf/compare/8fca9d9..8fca9d9): 8fca9d9 2023-01-26 Devon Carew blast_repo fixes (#326) string_scanner (https://github.com/dart-lang/string_scanner/compare/29e471e..29e471e): 29e471e 2023-01-30 dependabot[bot] Bump dart-lang/setup-dart from 1.3 to 1.4 (#53) test (https://github.com/dart-lang/test/compare/cec47c1..cec47c1): cec47c1c 2023-01-27 Nate Bosch Add missing pub requirements (#1878) c99d455e 2023-01-27 Nate Bosch Prepare to publish (#1877) 0e7ec6a7 2023-01-27 Nate Bosch Rename `Check` to `Subject` (#1875) 78382731 2023-01-27 Nate Bosch Add String.matches condition (#1874) 26e0e87b 2023-01-27 Nate Bosch Add Iterable.containsInOrder condition (#1873) c9232d6b 2023-01-27 Nate Bosch Rename `that` to `which` (#1872) 457166b3 2023-01-26 Nate Bosch Add missing dependency on package:lints (#1876) 193f2a0b 2023-01-26 Nate Bosch Retry instead of extend timeout for flaky Node tests (#1871) 7ad9b2c3 2023-01-26 Nate Bosch Overhaul async matchers (#1868) ca254546 2023-01-26 Nate Bosch Add a withQueue utility (#1870) 6ae2e5e9 2023-01-26 Nate Bosch Refactor tests to a new isRejectedBy utility (#1867) 5aeba66d 2023-01-26 Nate Bosch Use pubspec_overrides.yaml files (#1869) webdev (https://github.com/dart-lang/webdev/compare/ce9c581..ce9c581): ce9c581 2023-01-29 Anna Gringauze Validate only needed summaries in expression_compiler_service (#1920) Change-Id: I3ddb0ddeb3b989f6f9e78cd8aa6327aba5899018 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280078 Commit-Queue: Devon Carew <[email protected]> Auto-Submit: Devon Carew <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
The current modelling of List uses the same supertype for "normal" lists and for immutable and fixed-length lists, just with, e.g., operator[]= and an add method that throws.
I think it would be better modelling to have a base type for indexable values without those methods, but with extended types that include the operator[]= and add methods. Something like:
Tuple // Immutable and fixed length, has no add/removeLast or operator[]=
MutableTuple // Fixed length, has operator[]= but not add/removeLast
List // The current list - does it all.
("Tuple" is just a suggestion, I'm sure there are better names).
This way, a const<int>[2,4] would be a Tuple<int>, but [2,4] is a List<int>.
Something similar could be done for maps, and you probably don't even want the case where you can mutate the values but not change the keys.
The text was updated successfully, but these errors were encountered: