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 2122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2133 \item $m^\prime$ has the same name as $m$. | 2133 \item $m^\prime$ has the same name as $m$. |
2134 \item $m^\prime$ is accessible to $K$. | 2134 \item $m^\prime$ is accessible to $K$. |
2135 \item $A$ is a direct superinterface of $J$ and either | 2135 \item $A$ is a direct superinterface of $J$ and either |
2136 \begin{itemize} | 2136 \begin{itemize} |
2137 \item $m^\prime$ is a member of $A$ or | 2137 \item $m^\prime$ is a member of $A$ or |
2138 \item $m^\prime$ is a member of $inherited(A, K)$. | 2138 \item $m^\prime$ is a member of $inherited(A, K)$. |
2139 \end{itemize} | 2139 \end{itemize} |
2140 \end{itemize} | 2140 \end{itemize} |
2141 | 2141 |
2142 | 2142 |
2143 Let $I$ be the implicit interface of a class $C$ declared in library $L$. $I$ {
\em inherits} all members of $inherited(I, L)$ and $I$ {\em overrides} $m^\prime
$ if $m^\prime \in overrides(I, L)$. It is a static warning if $m$ is a method
and $m^\prime$ is a getter, or if $m$ is a getter and $m^\prime$ is a method. | 2143 Let $I$ be the implicit interface of a class $C$ declared in library $L$. $I$ {
\em inherits} all members of $inherited(I, L)$ and $I$ {\em overrides} $m^\prime
$ if $m^\prime \in overrides(I, L)$. |
| 2144 |
| 2145 All the static warnings pertaining to the overriding of instance members given i
n section \ref{classes} above hold for overriding between interfaces as well. |
| 2146 |
| 2147 It is a static warning if $m$ is a method and $m^\prime$ is a getter, or if $m$
is a getter and $m^\prime$ is a method. |
| 2148 |
2144 | 2149 |
2145 | 2150 |
2146 %Let $I = S_0$ be the implicit interface of a class $C$ declared in library $L$,
and let $\{S_1 \ldots S_k\}$ be the set of all superinterfaces of $I$. | 2151 %Let $I = S_0$ be the implicit interface of a class $C$ declared in library $L$,
and let $\{S_1 \ldots S_k\}$ be the set of all superinterfaces of $I$. |
2147 | 2152 |
2148 %Let $I$ be the implicit interface of a class $C$. $I$ inherits any instance me
mbers of its superinterfaces that are not overridden by members declared in $C$.
| 2153 %Let $I$ be the implicit interface of a class $C$. $I$ inherits any instance me
mbers of its superinterfaces that are not overridden by members declared in $C$.
|
2149 | 2154 |
2150 % tighten definition? do we need chain as for classes? Definition for interface
override? | 2155 % tighten definition? do we need chain as for classes? Definition for interface
override? |
2151 | 2156 |
2152 However, if the above rules would cause multiple members $m_1, \ldots, m_k$ wit
h the same name $n$ to be inherited (because identically named members existed i
n several superinterfaces) then at most one member is inherited. | 2157 However, if the above rules would cause multiple members $m_1, \ldots, m_k$ wit
h the same name $n$ to be inherited (because identically named members existed i
n several superinterfaces) then at most one member is inherited. |
2153 | 2158 |
(...skipping 3823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5977 Let $T$ be the declared type of a declaration $d$, as it appears in the program
source. The {\em actual type} of $d$ is | 5982 Let $T$ be the declared type of a declaration $d$, as it appears in the program
source. The {\em actual type} of $d$ is |
5978 | 5983 |
5979 \begin{itemize} | 5984 \begin{itemize} |
5980 \item $[A_1, \ldots, A_n/U_1, \ldots, U_n]T$ if $d$ depends on type parameters
$U_1, \ldots, U_n$, and $A_i$ is the value of $U_i, 1 \le i \le n$. | 5985 \item $[A_1, \ldots, A_n/U_1, \ldots, U_n]T$ if $d$ depends on type parameters
$U_1, \ldots, U_n$, and $A_i$ is the value of $U_i, 1 \le i \le n$. |
5981 \item $T$ otherwise. | 5986 \item $T$ otherwise. |
5982 \end{itemize} | 5987 \end{itemize} |
5983 | 5988 |
5984 \subsubsection{Least Upper Bounds} | 5989 \subsubsection{Least Upper Bounds} |
5985 \label{leastUpperBounds} | 5990 \label{leastUpperBounds} |
5986 | 5991 |
| 5992 % does this diverge in some cases? |
5987 Given two interfaces $I$ and $J$, let $S_I$ be the set of superinterfaces of $I$
, let $S_J$ be the set of superinterfaces of $J$ and let $S = (I \cup S_I) \ca
p (J \cup S_J)$. Furthermore, we define $S_n = \{T | T \in S \wedge depth(T) =
n\}$ for any finite $n$ %, and $k=max(depth(T_1), \ldots, depth(T_m)), T_i \in S
, i \in 1..m$, | 5993 Given two interfaces $I$ and $J$, let $S_I$ be the set of superinterfaces of $I$
, let $S_J$ be the set of superinterfaces of $J$ and let $S = (I \cup S_I) \ca
p (J \cup S_J)$. Furthermore, we define $S_n = \{T | T \in S \wedge depth(T) =
n\}$ for any finite $n$ %, and $k=max(depth(T_1), \ldots, depth(T_m)), T_i \in S
, i \in 1..m$, |
5988 where $depth(T)$ is the number of steps in the longest inheritance path from $T$
to \code{Object}. Let $q$ be the largest number such that $S_q$ has cardinality
one. The least upper bound of $I$ and $J$ is the sole element of $S_q$. | 5994 where $depth(T)$ is the number of steps in the longest inheritance path from $T$
to \code{Object}. Let $q$ be the largest number such that $S_q$ has cardinality
one. The least upper bound of $I$ and $J$ is the sole element of $S_q$. |
5989 | 5995 |
5990 The least upper bound of \DYNAMIC{} and any type $T$ is \DYNAMIC{}. | 5996 The least upper bound of \DYNAMIC{} and any type $T$ is \DYNAMIC{}. |
5991 The least upper bound of \VOID{} and any type $T \ne \DYNAMIC{}$ is \VOID{}. | 5997 The least upper bound of \VOID{} and any type $T \ne \DYNAMIC{}$ is \VOID{}. |
5992 Let $U$ be a type variable with upper bound $B$. The least upper bound of $U$ an
d a type $T$ is the least upper bound of $B$ and $T$. | 5998 Let $U$ be a type variable with upper bound $B$. The least upper bound of $U$ an
d a type $T$ is the least upper bound of $B$ and $T$. |
5993 | 5999 |
5994 The least upper bound relation is symmetric and reflexive. | 6000 The least upper bound relation is symmetric and reflexive. |
5995 | 6001 |
5996 % Function types | 6002 % Function types |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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. | 6131 \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. |
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 | 6132 \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 |
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. | 6133 \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. |
6128 \item The names of type variables are short (preferably single letter). Examples
: T, S, K, V , E. | 6134 \item The names of type variables are short (preferably single letter). Examples
: T, S, K, V , E. |
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. | 6135 \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. |
6130 \end{itemize} | 6136 \end{itemize} |
6131 } | 6137 } |
6132 | 6138 |
6133 | 6139 |
6134 \end{document} | 6140 \end{document} |
OLD | NEW |