Index: docs/language/dartLangSpec.tex |
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex |
index 158a10f177ce7bf2b8baa9cd3241ba394372cecb..252e070957479024c9b743ebeff8caecfd4bb18b 100644 |
--- a/docs/language/dartLangSpec.tex |
+++ b/docs/language/dartLangSpec.tex |
@@ -27,6 +27,7 @@ |
% - An await-for loop only pauses the subscription if it does something async. |
% - Assert statements may now also include a "message" operand. |
% - The Null type is now considered a subtype of all types in most cases. |
+% - Specified the FutureOf type. |
eernst
2017/02/01 16:54:30
`FutureOr`. Also, it seems to be the standard styl
|
% |
% 1.14 |
% - The call "C()" where "C" is a class name, is a now compile-time error. |
@@ -7226,11 +7227,11 @@ Static type annotations are used in variable declarations (\ref{variables}) (inc |
. |
{\bf typeArguments:} |
- '<' typeList '>' |
+ `<' typeList `>' |
. |
{\bf typeList:} |
- type (',' type)* |
+ type (`,' type)* |
. |
\end{grammar} |
@@ -7651,6 +7652,28 @@ What of static checking? Surely we would want to flag (2) when users have explic |
\LMHash{} |
The name \DYNAMIC{} denotes a \cd{Type} object even though \DYNAMIC{} is not a class. |
+\LMHash{} |
+The built-in type declaration \code{FutureOr}, |
+which is declared in the library \code{dart:async}, |
+defines a generic type with one type parameter (\ref{generics}). |
+If the \code{FutureOr} type, optionally followed by type arguments, |
+is used as a type, it denotes the \DYNAMIC{} type. |
+As such, the \code{FutureOr} type cannot be used where \DYNAMIC{} cannot be |
+used as a type. |
+If the type arguments applied to \code{FutureOr} would issue static warnings |
+if applied to a normal generic class with one type parameter, |
+the same warnings are issued for \code{FutureOr}, |
+even though the type arguments are otherwise ignored. |
+The name \code{FutureOr} denotes the same \cd{Type} object as \DYNAMIC{}. |
eernst
2017/02/01 16:54:30
This raises the question: So what's the semantics
Lasse Reichstein Nielsen
2017/02/02 06:45:47
I'm not sure what this is suggesting.
You can't ev
|
+ |
+\rationale{ |
+The \code{FutureOr} type is reserved for future use, |
+for cases where a value can be either an instance of the type \metavar{type} |
+or the type \code{Future<\metavar{type}>}. Such cases occur naturally |
+in asynchronous code. |
+Using \code{FutureOr} instead of \DYNAMIC{} will allow some tools |
+to provide a more precise type analysis. |
+} |
%\rationale { |
%Type objects reify the runtime types of instances. No instance ever has type \DYNAMIC{}. |
%} |