Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: docs/language/dartLangSpec.tex

Issue 1299283002: Unnamed libraries do not cause warnings. Also minor correction wrt privacy. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: No warnings on exports either. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 \documentclass{article} 1 \documentclass{article}
2 \usepackage{epsfig} 2 \usepackage{epsfig}
3 \usepackage{color} 3 \usepackage{color}
4 \usepackage{dart} 4 \usepackage{dart}
5 \usepackage{bnf} 5 \usepackage{bnf}
6 \usepackage{hyperref} 6 \usepackage{hyperref}
7 \usepackage{lmodern} 7 \usepackage{lmodern}
8 \newcommand{\code}[1]{{\sf #1}} 8 \newcommand{\code}[1]{{\sf #1}}
9 \title{Dart Programming Language Specification \\ 9 \title{Dart Programming Language Specification \\
10 (4th edition draft)\\ 10 (4th edition draft)\\
(...skipping 2029 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 \LMHash{} 2040 \LMHash{}
2041 A mixin application of the form \code{$S$ \WITH{} $M$;} defines a class $C$ w ith superclass $S$. 2041 A mixin application of the form \code{$S$ \WITH{} $M$;} defines a class $C$ w ith superclass $S$.
2042 2042
2043 \LMHash{} 2043 \LMHash{}
2044 A mixin application of the form \code{$S$ \WITH{} $M_1, \ldots, M_k$;} defines a class $C$ whose superclass is the application of the mixin composition (\ref {mixinComposition}) $M_{k-1} * \ldots * M_1$ to $S$. 2044 A mixin application of the form \code{$S$ \WITH{} $M_1, \ldots, M_k$;} defines a class $C$ whose superclass is the application of the mixin composition (\ref {mixinComposition}) $M_{k-1} * \ldots * M_1$ to $S$.
2045 2045
2046 \LMHash{} 2046 \LMHash{}
2047 In both cases above, $C$ declares the same instance members as $M$ (respectively , $M_k$). If any of the instance fields of $M$ (respectively, $M_k$) have initia lizers, they are executed in the scope of $M$ (respectively, $M_k$) to initializ e the corresponding fields of $C$. 2047 In both cases above, $C$ declares the same instance members as $M$ (respectively , $M_k$). If any of the instance fields of $M$ (respectively, $M_k$) have initia lizers, they are executed in the scope of $M$ (respectively, $M_k$) to initializ e the corresponding fields of $C$.
2048 2048
2049 \LMHash{} 2049 \LMHash{}
2050 For each generative constructor named $q_i(T_{i1}$ $ a_{i1}, \ldots , T_{ik_i}$ $ a_{ik_i}), i \in 1..n$ of $S$, $C$ has an implicitly declared constructor name d 2050 Let $L_M$ be the library in which $M$ is declared.
2051 For each generative constructor named $q_i(T_{i1}$ $ a_{i1}, \ldots , T_{ik_i}$ $ a_{ik_i}), i \in 1..n$ of $S$ that is accessible to $L_M$, $C$ has an implicit ly declared constructor named
2051 $q'_i = [C/S]q_i$ of the form 2052 $q'_i = [C/S]q_i$ of the form
2052 2053
2053 $q'_i(a_{i1}, \ldots , a_{ik_i}):\SUPER(a_{i1}, \ldots , a_{ik_i});$. 2054 $q'_i(a_{i1}, \ldots , a_{ik_i}):\SUPER(a_{i1}, \ldots , a_{ik_i});$.
2054 2055
2055 %super.id 2056 %super.id
2056 2057
2057 \LMHash{} 2058 \LMHash{}
2058 If the mixin application declares support for interfaces, the resulting class im plements those interfaces. 2059 If the mixin application declares support for interfaces, the resulting class im plements those interfaces.
2059 2060
2060 \LMHash{} 2061 \LMHash{}
(...skipping 4720 matching lines...) Expand 10 before | Expand all | Expand 10 after
6781 The policy above makes libraries more robust in the face of additions made to th eir imports. 6782 The policy above makes libraries more robust in the face of additions made to th eir imports.
6782 6783
6783 A clear distinction needs to be made between this approach, and seemingly simila r policies with respect to classes or interfaces. The use of a class or interfa ce, and of its members, is separate from its declaration. The usage and declarat ion may occur in widely separated places in the code, and may in fact be authore d by different people or organizations. It is important that errors are given a t the offending declaration so that the party that receives the error can respon d to it a meaningful way. 6784 A clear distinction needs to be made between this approach, and seemingly simila r policies with respect to classes or interfaces. The use of a class or interfa ce, and of its members, is separate from its declaration. The usage and declarat ion may occur in widely separated places in the code, and may in fact be authore d by different people or organizations. It is important that errors are given a t the offending declaration so that the party that receives the error can respon d to it a meaningful way.
6784 6785
6785 In contrast a library comprises both imports and their usage; the library is und er the control of a single party and so any problem stemming from the import can be resolved even if it is reported at the use site. 6786 In contrast a library comprises both imports and their usage; the library is und er the control of a single party and so any problem stemming from the import can be resolved even if it is reported at the use site.
6786 6787
6787 %On a related note, the provenance of the conflicting elements is not considered . An element that is imported via distinct paths may conflict with itself. This avoids variants of the well known "diamond" problem. 6788 %On a related note, the provenance of the conflicting elements is not considered . An element that is imported via distinct paths may conflict with itself. This avoids variants of the well known "diamond" problem.
6788 } 6789 }
6789 6790
6790 \LMHash{} 6791 \LMHash{}
6791 It is a static warning to import two different libraries with the same name. 6792 It is a static warning to import two different libraries with the same name unle ss their name is the empty string.
6792 6793
6793 \commentary{ 6794 \commentary{
6794 A widely disseminated library should be given a name that will not conflict with other such libraries. The preferred mechanism for this is using pub, the Dart p ackage manager, which provides a global namespace for libraries, and conventions that leverage that namespace. 6795 A widely disseminated library should be given a name that will not conflict with other such libraries. The preferred mechanism for this is using pub, the Dart p ackage manager, which provides a global namespace for libraries, and conventions that leverage that namespace.
6795 } 6796 }
6796 6797
6797 \commentary{Note that no errors or warnings are given if one hides or shows a na me that is not in a namespace.} 6798 \commentary{Note that no errors or warnings are given if one hides or shows a na me that is not in a namespace.}
6798 \rationale{ 6799 \rationale{
6799 This prevents situations where removing a name from a library would cause breaka ge of a client library. 6800 This prevents situations where removing a name from a library would cause breaka ge of a client library.
6800 } 6801 }
6801 6802
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
6872 \end{itemize} 6873 \end{itemize}
6873 6874
6874 \rationale{ 6875 \rationale{
6875 See the discussion in section \ref{imports} for the reasoning behind this rule. 6876 See the discussion in section \ref{imports} for the reasoning behind this rule.
6876 } 6877 }
6877 6878
6878 \LMHash{} 6879 \LMHash{}
6879 We say that $L$ {\em re-exports library } $B$, and also that $L$ {\em re-exports namespace } $NS_n$. When no confusion can arise, we may simply state that $L$ { \em re-exports }$B$, or that $L$ {\em re-exports }$NS_n$. 6880 We say that $L$ {\em re-exports library } $B$, and also that $L$ {\em re-exports namespace } $NS_n$. When no confusion can arise, we may simply state that $L$ { \em re-exports }$B$, or that $L$ {\em re-exports }$NS_n$.
6880 6881
6881 \LMHash{} 6882 \LMHash{}
6882 It is a compile-time error if a name $N$ is re-exported by a library $L$ and $N$ is introduced into the export namespace of $L$ by more than one export, unless all exports refer to same declaration for the name $N$. It is a static warnin g to export two different libraries with the same name. 6883 It is a compile-time error if a name $N$ is re-exported by a library $L$ and $N$ is introduced into the export namespace of $L$ by more than one export, unless all exports refer to same declaration for the name $N$. It is a static warnin g to export two different libraries with the same name unless their name is the empty string.
6883 6884
6884 6885
6885 6886
6886 \subsection{Parts} 6887 \subsection{Parts}
6887 \LMLabel{parts} 6888 \LMLabel{parts}
6888 6889
6889 \LMHash{} 6890 \LMHash{}
6890 A library may be divided into {\em parts}, each of which can be stored in a sepa rate location. A library identifies its parts by listing them via \PART{} direct ives. 6891 A library may be divided into {\em parts}, each of which can be stored in a sepa rate location. A library identifies its parts by listing them via \PART{} direct ives.
6891 6892
6892 \LMHash{} 6893 \LMHash{}
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
7045 Any use of a malformed type gives rise to a static warning. A malformed type i s then interpreted as \DYNAMIC{} by the static type checker and the runtime unle ss explicitly specified otherwise. 7046 Any use of a malformed type gives rise to a static warning. A malformed type i s then interpreted as \DYNAMIC{} by the static type checker and the runtime unle ss explicitly specified otherwise.
7046 7047
7047 \rationale{ 7048 \rationale{
7048 This ensures that the developer is spared a series of cascading warnings as the malformed type interacts with other types. 7049 This ensures that the developer is spared a series of cascading warnings as the malformed type interacts with other types.
7049 } 7050 }
7050 7051
7051 \LMHash{} 7052 \LMHash{}
7052 A type $T$ is {\em deferred} iff it is of the form $p.T$ where $p$ is a deferred prefix. 7053 A type $T$ is {\em deferred} iff it is of the form $p.T$ where $p$ is a deferred prefix.
7053 It is a static warning to use a deferred type in a type annotation, type test, t ype cast or as a type parameter. However, all other static warnings must be issu ed under the assumption that all deferred libraries have successfully been loade d. 7054 It is a static warning to use a deferred type in a type annotation, type test, t ype cast or as a type parameter. However, all other static warnings must be issu ed under the assumption that all deferred libraries have successfully been loade d.
7054 7055
7056 % Now, when passed to a generic, p.T also has to be treated as dynamic - otherwi se we have to fail immediately. Where do we say that? And how does this fit with idea that as a type object it fails? Should we say that the accessor on p retur ns dynamic instead of failing? Do we distinguish its use in a constructor vs its use in an annotation? It's not that we evaluate type objects in constructor arg s - these cannot represent parameterized types.
7057
7055 7058
7056 \subsubsection{Type Promotion} 7059 \subsubsection{Type Promotion}
7057 \LMLabel{typePromotion} 7060 \LMLabel{typePromotion}
7058 7061
7059 \LMHash{} 7062 \LMHash{}
7060 The static type system ascribes a static type to every expression. In some case s, the types of local variables and formal parameters may be promoted from their declared types based on control flow. 7063 The static type system ascribes a static type to every expression. In some case s, the types of local variables and formal parameters may be promoted from their declared types based on control flow.
7061 7064
7062 \LMHash{} 7065 \LMHash{}
7063 We say that a variable $v$ is known to have type $T$ whenever we allow the type of $v$ to be promoted. The exact circumstances when type promotion is allowed ar e given in the relevant sections of the specification (\ref{logicalBooleanExpres sions}, \ref{conditional} and \ref{if}). 7066 We say that a variable $v$ is known to have type $T$ whenever we allow the type of $v$ to be promoted. The exact circumstances when type promotion is allowed ar e given in the relevant sections of the specification (\ref{logicalBooleanExpres sions}, \ref{conditional} and \ref{if}).
7064 7067
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
7864 7867
7865 The invariant that each normative paragraph is associated with a line 7868 The invariant that each normative paragraph is associated with a line
7866 containing the text \LMHash{} should be maintained. Extra occurrences 7869 containing the text \LMHash{} should be maintained. Extra occurrences
7867 of \LMHash{} can be added if needed, e.g., in order to make 7870 of \LMHash{} can be added if needed, e.g., in order to make
7868 individual \item{}s in itemized lists addressable. Each \LM.. command 7871 individual \item{}s in itemized lists addressable. Each \LM.. command
7869 must occur on a separate line. \LMHash{} must occur immediately 7872 must occur on a separate line. \LMHash{} must occur immediately
7870 before the associated paragraph, and \LMLabel must occur immediately 7873 before the associated paragraph, and \LMLabel must occur immediately
7871 after the associated \section{}, \subsection{} etc. 7874 after the associated \section{}, \subsection{} etc.
7872 7875
7873 ---------------------------------------------------------------------- 7876 ----------------------------------------------------------------------
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698