Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Draft Version 0.71}} | 8 {\large Draft Version 0.71}} |
| 9 \author{The Dart Team} | 9 \author{The Dart Team} |
| 10 \begin{document} | 10 \begin{document} |
| (...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 504 \ref{return}: Added warning if \RETURN{} without expression mixed with \RETURN{} with an expression. | 504 \ref{return}: Added warning if \RETURN{} without expression mixed with \RETURN{} with an expression. |
| 505 | 505 |
| 506 \ref{exports}: Ensure that exports treat \code{dart:} libs specially, like impor ts do. | 506 \ref{exports}: Ensure that exports treat \code{dart:} libs specially, like impor ts do. |
| 507 | 507 |
| 508 \ref{typePromotion}: Added notion of type promotion. | 508 \ref{typePromotion}: Added notion of type promotion. |
| 509 | 509 |
| 510 \ref{typedef}: Banned all recursion in typedefs. | 510 \ref{typedef}: Banned all recursion in typedefs. |
| 511 | 511 |
| 512 \subsubsection{Changes Since Version 0.7} | 512 \subsubsection{Changes Since Version 0.7} |
| 513 | 513 |
| 514 \ref{new}: Instantiating subclasses of malbounded types is a dynamic error. | |
| 515 | |
| 514 \ref{leastUpperBounds}: Extended LUBs to all types. | 516 \ref{leastUpperBounds}: Extended LUBs to all types. |
| 515 | 517 |
| 516 | 518 |
| 517 | 519 |
| 518 \section{Notation} | 520 \section{Notation} |
| 519 \label{notation} | 521 \label{notation} |
| 520 | 522 |
| 521 We distinguish between normative and non-normative text. Normative text defines the rules of Dart. It is given in this font. At this time, non-normative text in cludes: | 523 We distinguish between normative and non-normative text. Normative text defines the rules of Dart. It is given in this font. At this time, non-normative text in cludes: |
| 522 \begin{itemize} | 524 \begin{itemize} |
| 523 \item[Rationale] Discussion of the motivation for language design decisions appe ars in italics. \rationale{Distinguishing normative from non-normative helps cla rify what part of the text is binding and what part is merely expository.} | 525 \item[Rationale] Discussion of the motivation for language design decisions appe ars in italics. \rationale{Distinguishing normative from non-normative helps cla rify what part of the text is binding and what part is merely expository.} |
| (...skipping 2639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3163 \end{itemize} | 3165 \end{itemize} |
| 3164 | 3166 |
| 3165 If $R$ is a generic with $l \ne m$ type parameters then for $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$. In any other case, let $V_i = U_i$ for $ i \in 1 .. m$. | 3167 If $R$ is a generic with $l \ne m$ type parameters then for $ i \in 1 .. l$, let $V_i = \DYNAMIC{}$. In any other case, let $V_i = U_i$ for $ i \in 1 .. m$. |
| 3166 | 3168 |
| 3167 Evaluation of $e$ proceeds as follows: | 3169 Evaluation of $e$ proceeds as follows: |
| 3168 | 3170 |
| 3169 First, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k} : a_{n+k})$ is evaluated. | 3171 First, the argument list $(a_1, \ldots , a_n, x_{n+1}: a_{n+1}, \ldots , x_{n+k} : a_{n+k})$ is evaluated. |
| 3170 | 3172 |
| 3171 Then, if $q$ is a non-factory constructor of an abstract class then an \code{Abs tractClassInstantiationError} is thrown. | 3173 Then, if $q$ is a non-factory constructor of an abstract class then an \code{Abs tractClassInstantiationError} is thrown. |
| 3172 | 3174 |
| 3173 If $T$ is malformed a dynamic error occurs. In checked mode, if $T$ is malbound ed a dynamic error occurs. | 3175 If $T$ is malformed or if $T$ is type variable a dynamic error occurs. In check ed mode, if $T$ or any of its superclasses is malbounded a dynamic error occurs. |
|
regis
2013/10/16 00:48:34
is *a* type variable
Can a class be malbounded? W
gbracha
2013/10/16 00:54:40
Done.
| |
| 3174 Otherwise, if $q$ is not defined or not accessible, a \code{NoSuchMethodError} is thrown. If $q$ has less than $n$ positional parameters or more than $n$ req uired parameters, or if $q$ lacks any of the keyword parameters $\{ x_{n+1}, \ld ots, x_{n+k}\}$ a \code{NoSuchMethodError} is thrown. | 3176 Otherwise, if $q$ is not defined or not accessible, a \code{NoSuchMethodError} is thrown. If $q$ has less than $n$ positional parameters or more than $n$ req uired parameters, or if $q$ lacks any of the keyword parameters $\{ x_{n+1}, \ld ots, x_{n+k}\}$ a \code{NoSuchMethodError} is thrown. |
| 3175 | 3177 |
| 3176 Otherwise, if $q$ is a generative constructor (\ref{generativeConstructors}), th en: | 3178 Otherwise, if $q$ is a generative constructor (\ref{generativeConstructors}), th en: |
| 3177 | 3179 |
| 3178 %Let $T_i$ be the type parameters of $R$ (if any) and let $B_i$ be the bound of $T_i, 1 \le i \le l$. | 3180 %Let $T_i$ be the type parameters of $R$ (if any) and let $B_i$ be the bound of $T_i, 1 \le i \le l$. |
| 3179 %In checked mode, it is a dynamic type error if $V_i$ is not a subtype of $[V_ 1, \ldots, V_l/T_1, \ldots, T_l]B_i, i \in 1.. l$. | 3181 %In checked mode, it is a dynamic type error if $V_i$ is not a subtype of $[V_ 1, \ldots, V_l/T_1, \ldots, T_l]B_i, i \in 1.. l$. |
| 3180 | 3182 |
| 3181 \commentary{Note that it this point we are assured that the number of actual typ e arguments match the number of formal type parameters.} | 3183 \commentary{Note that it this point we are assured that the number of actual typ e arguments match the number of formal type parameters.} |
| 3182 | 3184 |
| 3183 A fresh instance (\ref{generativeConstructors}), $i$, of class $R$ is allocated . For each instance variable $f$ of $i$, if the variable declaration of $f$ has an initializer expression $e_f$, then $e_f$ is evaluated to an object $o_f$ and $f$ is bound to $o_f$. Otherwise $f$ is bound to \NULL{}. | 3185 A fresh instance (\ref{generativeConstructors}), $i$, of class $R$ is allocated . For each instance variable $f$ of $i$, if the variable declaration of $f$ has an initializer expression $e_f$, then $e_f$ is evaluated to an object $o_f$ and $f$ is bound to $o_f$. Otherwise $f$ is bound to \NULL{}. |
| (...skipping 2428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5612 %Likewise, we could opt to ignore malformed types entirely in checked mode. | 5614 %Likewise, we could opt to ignore malformed types entirely in checked mode. |
| 5613 | 5615 |
| 5614 %For now, we have opted to treat a malformed type as an error type that has no s ubtypes or supertypes, and which causes a runtime error when tested against any other type. | 5616 %For now, we have opted to treat a malformed type as an error type that has no s ubtypes or supertypes, and which causes a runtime error when tested against any other type. |
| 5615 } | 5617 } |
| 5616 | 5618 |
| 5617 \commentary{ | 5619 \commentary{ |
| 5618 Here is an example involving malbounded types: | 5620 Here is an example involving malbounded types: |
| 5619 } | 5621 } |
| 5620 | 5622 |
| 5621 \begin{dartCode} | 5623 \begin{dartCode} |
| 5622 \INTERFACE{} I$<$T \EXTENDS{} num$>$ \{\} | 5624 \CLASS{} I$<$T \EXTENDS{} num$>$ \{\} |
| 5623 \INTERFACE{} J \{\} | 5625 \CLASS{} J \{\} |
| 5624 | 5626 |
| 5625 \CLASS{} A$<$T$>$ \IMPLEMENTS{} J, I$<$T$>$ // type warning: T is not a subtype of num | 5627 \CLASS{} A$<$T$>$ \IMPLEMENTS{} J, I$<$T$>$ // type warning: T is not a subtype of num |
| 5626 \{ ... | 5628 \{ ... |
| 5627 \} | 5629 \} |
| 5628 \end{dartCode} | 5630 \end{dartCode} |
| 5629 | 5631 |
| 5630 \commentary{Given the declarations above, the following} | 5632 \commentary{Given the declarations above, the following} |
| 5631 | 5633 |
| 5632 \begin{dartCode} | 5634 \begin{dartCode} |
| 5633 I x = \NEW{} A$<$String$>$(); | 5635 I x = \NEW{} A$<$String$>$(); |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6123 \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. | 6125 \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. |
| 6124 \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 | 6126 \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 |
| 6125 \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. | 6127 \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. |
| 6126 \item The names of type variables are short (preferably single letter). Examples : T, S, K, V , E. | 6128 \item The names of type variables are short (preferably single letter). Examples : T, S, K, V , E. |
| 6127 \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. | 6129 \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. |
| 6128 \end{itemize} | 6130 \end{itemize} |
| 6129 } | 6131 } |
| 6130 | 6132 |
| 6131 | 6133 |
| 6132 \end{document} | 6134 \end{document} |
| OLD | NEW |