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

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

Issue 208293006: Clarify that dart system libs have lower priority regardless how imported. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 9 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 | Annotate | Revision Log
« 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{dart} 3 \usepackage{dart}
4 \usepackage{bnf} 4 \usepackage{bnf}
5 \usepackage{hyperref} 5 \usepackage{hyperref}
6 \newcommand{\code}[1]{{\sf #1}} 6 \newcommand{\code}[1]{{\sf #1}}
7 \title{Dart Programming Language Specification \\ 7 \title{Dart Programming Language Specification \\
8 {\large Version 1.3}} 8 {\large Version 1.3}}
9 %\author{The Dart Team} 9 %\author{The Dart Team}
10 \begin{document} 10 \begin{document}
(...skipping 1890 matching lines...) Expand 10 before | Expand all | Expand 10 after
1901 sort(List$<$T$>$ l) {... l[n] $<$ l[n+1] ...} 1901 sort(List$<$T$>$ l) {... l[n] $<$ l[n+1] ...}
1902 \} 1902 \}
1903 1903
1904 \end{dartCode} 1904 \end{dartCode}
1905 1905
1906 \commentary{ 1906 \commentary{
1907 Even where type parameters are in scope there are numerous restrictions at this time: 1907 Even where type parameters are in scope there are numerous restrictions at this time:
1908 \begin{itemize} 1908 \begin{itemize}
1909 \item A type parameter cannot be used to name a constructor in an instance creat ion expression (\ref{instanceCreation}). 1909 \item A type parameter cannot be used to name a constructor in an instance creat ion expression (\ref{instanceCreation}).
1910 \item A type parameter cannot be used as a superclass or superinterface (\ref{su perclasses}, \ref{superinterfaces}, \ref{interfaceSuperinterfaces}). 1910 \item A type parameter cannot be used as a superclass or superinterface (\ref{su perclasses}, \ref{superinterfaces}, \ref{interfaceSuperinterfaces}).
1911 \item A type parameter cannot be used as a generic. 1911 \item A type parameter cannot be used as a generic type.
1912 \end{itemize} 1912 \end{itemize}
1913 1913
1914 The normative versions of these are given in the appropriate sections of this s pecification. Some of these restrictions may be lifted in the future. 1914 The normative versions of these are given in the appropriate sections of this s pecification. Some of these restrictions may be lifted in the future.
1915 } 1915 }
1916 1916
1917
1917 %A generic has a type parameter scope. The enclosing scope of a type parameter s cope of a generic G is the enclosing scope of G. 1918 %A generic has a type parameter scope. The enclosing scope of a type parameter s cope of a generic G is the enclosing scope of G.
1918 1919
1919 1920
1920 %class T {...} 1921 %class T {...}
1921 1922
1922 %class G<T> extends T; 1923 %class G<T> extends T;
1923 1924
1924 %By current rules, this is illegal. Make sure we preserve this. 1925 %By current rules, this is illegal. Make sure we preserve this.
1925 1926
1926 1927
(...skipping 3097 matching lines...) Expand 10 before | Expand all | Expand 10 after
5024 5025
5025 Then, for each entry mapping key $k$ to declaration $d$ in $NS$, $d$ is made av ailable in the top level scope of $L$ under the name $k$ unless either: 5026 Then, for each entry mapping key $k$ to declaration $d$ in $NS$, $d$ is made av ailable in the top level scope of $L$ under the name $k$ unless either:
5026 \begin{itemize} 5027 \begin{itemize}
5027 \item 5028 \item
5028 a top-level declaration with the name $k$ exists in $L$, OR 5029 a top-level declaration with the name $k$ exists in $L$, OR
5029 \item a prefix clause of the form \AS{} $k$ is used in $L$. 5030 \item a prefix clause of the form \AS{} $k$ is used in $L$.
5030 \end{itemize} 5031 \end{itemize}
5031 5032
5032 \rationale{The greatly increases the chance that a member can be added to a libr ary without breaking its importers.} 5033 \rationale{The greatly increases the chance that a member can be added to a libr ary without breaking its importers.}
5033 5034
5034 If a name $N$ is referenced by a library $L$ and $N$ would be introduced into th e top level scope of $L$ by an import from a library whose URI begins with \code {dart:} and an import from a library whose URI does not begin with \code{dart:}: 5035 A {\em system library} is a library that is part of the Dart implementation. Any other library is a {\em non-system library}. If a name $N$ is referenced by a l ibrary $L$ and $N$ would be introduced into the top level scope of $L$ by
5036 imports of two libraries, $L_1$ and $L_2$, and the exported namespace of $L_1$ b inds $N$ to a declaration originating in a system library:
5037
5038 %an import of a system library and an import of a non-system library:
5035 \begin{itemize} 5039 \begin{itemize}
5036 \item The import from \code{dart:} is implicitly extended by a \code{\HIDE{} $N$ } clause. 5040 \item The import of $L_1$ is implicitly extended by a \code{\HIDE{} $N$} clause.
5037 \item A static warning is issued. 5041 \item A static warning is issued.
5038 \end{itemize} 5042 \end{itemize}
5039 5043
5040 \rationale { 5044 \rationale {
5041 Whereas normal conflicts are resolved at deployment time, the functionality of \ code{dart:} libraries is injected into an application at run time, and may vary over time as browsers are upgraded. Thus, conflicts with \code{dart:} libraries can arise at runtime, outside the developerÕs control. To avoid breaking deploy ed applications in this way, conflicts with the \code{dart:} libraries are treat ed specially. 5045 Whereas normal conflicts are resolved at deployment time, the functionality of \ code{dart:} libraries is injected into an application at run time, and may vary over time as browsers are upgraded. Thus, conflicts with \code{dart:} libraries can arise at runtime, outside the developerÕs control. To avoid breaking deploy ed applications in this way, conflicts with the \code{dart:} libraries are treat ed specially.
5042 5046
5043 It is recommended that tools that deploy Dart code produce output in which all i mports use show clauses to ensure that additions to the namespace of a library n ever impact deployed code. 5047 It is recommended that tools that deploy Dart code produce output in which all i mports use show clauses to ensure that additions to the namespace of a library n ever impact deployed code.
5044 } 5048 }
5045 5049
5046 If a name $N$ is referenced by a library $L$ and $N$ is introduced into the to p level scope of $L$ by more than one import, and not all the imports denote the same declaration, then: 5050 If a name $N$ is referenced by a library $L$ and $N$ is introduced into the to p level scope of $L$ by more than one import, and not all the imports denote the same declaration, then:
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
5126 5130
5127 $NS_i = \SHOW{}([id_1, \ldots, id_k], NS_{i-1}$). 5131 $NS_i = \SHOW{}([id_1, \ldots, id_k], NS_{i-1}$).
5128 \item If $C_i$ is of the form \code{\HIDE{} $id_1, \ldots, id_k$} 5132 \item If $C_i$ is of the form \code{\HIDE{} $id_1, \ldots, id_k$}
5129 5133
5130 then let $NS_i = \HIDE{}([id_1, \ldots, id_k], NS_{i-1}$). 5134 then let $NS_i = \HIDE{}([id_1, \ldots, id_k], NS_{i-1}$).
5131 \end{itemize} 5135 \end{itemize}
5132 5136
5133 For each 5137 For each
5134 entry mapping key $k$ to declaration $d$ in $NS_n$ an entry mapping $k$ to $d$ i s added to the exported namespace of $L$ unless a top-level declaration with th e name $k$ exists in $L$. 5138 entry mapping key $k$ to declaration $d$ in $NS_n$ an entry mapping $k$ to $d$ i s added to the exported namespace of $L$ unless a top-level declaration with th e name $k$ exists in $L$.
5135 5139
5136 If a name $N$ is referenced by a library $L$ and $N$ would be introduced into th e exported namespace of $L$ by an export from a library whose URI begins with \c ode{dart:} and an export from a library whose URI does not begin with \code{dart :}: 5140 If a name $N$ is referenced by a library $L$ and $N$ would be introduced into th e exported namespace of $L$ by exports of two libraries, $L_1$ and $L_2$, and th e exported namespace of $L_1$ binds $N$ to a declaration originating in a system library:
5141 %an export of a system library and an export of a non-system library:
5137 \begin{itemize} 5142 \begin{itemize}
5138 \item The export from \code{dart:} is implicitly extended by a \code{\HIDE{} $N$ } clause. 5143 \item The export of $L_1$ is implicitly extended by a \code{\HIDE{} $N$} clause.
5139 \item A static warning is issued. 5144 \item A static warning is issued.
5140 \end{itemize} 5145 \end{itemize}
5141 5146
5142 \rationale{ 5147 \rationale{
5143 See the discussion in section \ref{imports} for the reasoning behind this rule. 5148 See the discussion in section \ref{imports} for the reasoning behind this rule.
5144 } 5149 }
5145 5150
5146 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$. 5151 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$.
5147 5152
5148 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. 5153 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.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
5201 \end{grammar} 5206 \end{grammar}
5202 5207
5203 It is a compile-time error if the string literal $x$ that describes a URI is no t a compile-time constant, or if $x$ involves string interpolation. 5208 It is a compile-time error if the string literal $x$ that describes a URI is no t a compile-time constant, or if $x$ involves string interpolation.
5204 5209
5205 This specification does not discuss the interpretation of URIs, with the followi ng exceptions. 5210 This specification does not discuss the interpretation of URIs, with the followi ng exceptions.
5206 5211
5207 \rationale{ 5212 \rationale{
5208 The interpretation of URIs is mostly left to the surrounding computing environm ent. For example, if Dart is running in a web browser, that browser will likely interpret some URIs. While it might seem attractive to specify, say, that URIs a re interpreted with respect to a standard such as IETF RFC 3986, in practice thi s will usually depend on the browser and cannot be relied upon. 5213 The interpretation of URIs is mostly left to the surrounding computing environm ent. For example, if Dart is running in a web browser, that browser will likely interpret some URIs. While it might seem attractive to specify, say, that URIs a re interpreted with respect to a standard such as IETF RFC 3986, in practice thi s will usually depend on the browser and cannot be relied upon.
5209 } 5214 }
5210 5215
5211 A URI of the form \code{dart:$s$} is interpreted as a reference to a library $s$ that is part of the Dart implementation. 5216 A URI of the form \code{dart:$s$} is interpreted as a reference to a system libr ary (\ref{imports}) $s$.
5212 5217
5213 A URI of the form \code{package:$s$} is interpreted as a URI of the form \code{p ackages/s} relative to an implementation specified location. 5218 A URI of the form \code{package:$s$} is interpreted as a URI of the form \code{p ackages/s} relative to an implementation specified location.
5214 5219
5215 \commentary{ 5220 \commentary{
5216 This location will often be the location of the root library presented to the Da rt compiler. However, implementations may supply means to override or replace th is choice. 5221 This location will often be the location of the root library presented to the Da rt compiler. However, implementations may supply means to override or replace th is choice.
5217 } 5222 }
5218 5223
5219 \rationale{ 5224 \rationale{
5220 The intent is that, during development, Dart programmers can rely on a package m anager to find elements of their program. Such package managers may provide a di rectory structure starting at a local directory \code{packages} where they place the required dart code (or links thereto). 5225 The intent is that, during development, Dart programmers can rely on a package m anager to find elements of their program. Such package managers may provide a di rectory structure starting at a local directory \code{packages} where they place the required dart code (or links thereto).
5221 } 5226 }
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
5883 \item The names of compile time constant variables never use lower case letters. If they consist of multiple words, those words are separated by underscores. Ex amples: PI, I\_AM\_A\_CONSTANT. 5888 \item The names of compile time constant variables never use lower case letters. If they consist of multiple words, those words are separated by underscores. Ex amples: PI, I\_AM\_A\_CONSTANT.
5884 \item The names of functions (including getters, setters, methods and local or l ibrary functions) and non-constant variables begin with a lowercase letter. If t he name consists of multiple words, each word (except the first) begins with an uppercase letter. No other uppercase letters are used. Examples: camlCase, dar t4TheWorld 5889 \item The names of functions (including getters, setters, methods and local or l ibrary functions) and non-constant variables begin with a lowercase letter. If t he name consists of multiple words, each word (except the first) begins with an uppercase letter. No other uppercase letters are used. Examples: camlCase, dar t4TheWorld
5885 \item The names of types (including classes and type aliases) begin with an uppe r case letter. If the name consists of multiple words, each word begins with an uppercase letter. No other uppercase letters are used. Examples: CamlCase, D art4TheWorld. 5890 \item The names of types (including classes and type aliases) begin with an uppe r case letter. If the name consists of multiple words, each word begins with an uppercase letter. No other uppercase letters are used. Examples: CamlCase, D art4TheWorld.
5886 \item The names of type variables are short (preferably single letter). Examples : T, S, K, V , E. 5891 \item The names of type variables are short (preferably single letter). Examples : T, S, K, V , E.
5887 \item The names of libraries or library prefixes never use upper case letters. I f they consist of multiple words, those words are separated by underscores. Exam ple: my\_favorite\_library. 5892 \item The names of libraries or library prefixes never use upper case letters. I f they consist of multiple words, those words are separated by underscores. Exam ple: my\_favorite\_library.
5888 \end{itemize} 5893 \end{itemize}
5889 } 5894 }
5890 5895
5891 5896
5892 \end{document} 5897 \end{document}
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