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

Unified Diff: docs/language/dartLangSpec.tex

Issue 2852533003: Change specification of main. (Closed)
Patch Set: Fix typo and phrasing. Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: docs/language/dartLangSpec.tex
diff --git a/docs/language/dartLangSpec.tex b/docs/language/dartLangSpec.tex
index f643ef1b4c525783671578723d7bb4eb0c3ac4ee..e616ecffbaf4c550d2d5fc1d9c4aeb662b467d1f 100644
--- a/docs/language/dartLangSpec.tex
+++ b/docs/language/dartLangSpec.tex
@@ -7159,36 +7159,47 @@ It's a compile-time error if the same library contains two part directives with
\LMLabel{scripts}
\LMHash{}
-A {\em script} is a library whose exported namespace (\ref{exports}) includes a top-level member named \code{main}. It is a static warning if the static type of \code{main} is not assignable to a function type or is a function type with more than two required parameters.
+A {\em script} is a library whose exported namespace (\ref{exports}) includes
+a top-level function declaration named \code{main}
+that can be called with zero, one or two positional arguments.
eernst 2017/05/10 09:30:34 So the situation before: A library containing `mai
Lasse Reichstein Nielsen 2017/05/30 05:45:38 As discussed, I disagree that we should impose con
eernst 2017/05/30 09:14:42 Unsurprisingly, I would still prefer to go from "s
-A script $S$ may be executed as follows:
+A script $S$ is executed as follows:
\LMHash{}
-First, $S$ is compiled as a library as specified above. Then, the top-level function \code{main} that is in the exported namespace of $S$ is invoked. If \code{main} has no positional parameters, it is invoked with no arguments. Otherwise if \code{main} has exactly one positional parameter, it is invoked with a single actual argument whose runtime type implements \code{List<String>}. Otherwise \code{main} is invoked with the following two actual arguments:
+First, $S$ is compiled as a library as specified above.
+Then, the top-level function defined by \code{main}
eernst 2017/05/10 09:30:34 An exported namespace is a mapping that binds name
Lasse Reichstein Nielsen 2017/05/30 05:45:38 Going for "top level function \code{main}".
eernst 2017/05/30 09:14:42 Acknowledged.
+in the exported namespace of $S$ is invoked (\ref{functionInvocation})
+with up to two arguments, depending on how many it will accept.
eernst 2017/05/10 09:30:34 The 'depending ..' is too imprecise. Just `up to t
Lasse Reichstein Nielsen 2017/05/30 05:45:38 Going for just "as follows:". The "up to two argum
eernst 2017/05/30 09:14:42 Acknowledged.
+If \code{main} can be be called with with two positional arguments,
+it is invoked with the following two actual arguments:
\begin{enumerate}
\item An object whose runtime type implements \code{List<String>}.
-\item The initial message of the current isolate $i$ as determined by the invocation of \code{Isolate.spawnUri} that spawned $i$.
+\item An object specified when the current isolate $i$ was created,
+for example through the invocation of \code{Isolate.spawnUri} that spawned $i$,
+or \NULL{} if no such object was supplied.
\end{enumerate}
-
-\LMHash{}
-It is a run time error if $S$ does not declare or export either:
-\begin{itemize}
-\item A top-level function named \code{main}, or
-\item A top-level getter named \code{main} that returns a function.
-\end{itemize}
+If \code{main} cannot be called with two positional arguments,
+but it can be called with one positional argument,
+it is invoked an object whose runtime type implements \code{List<String>}
eernst 2017/05/10 09:30:34 `invoked [with] an object`
Lasse Reichstein Nielsen 2017/05/30 05:45:37 Done.
+as the only argument.
+If \code{main} cannot be called with one or two positional arguments,
+it is invoked with no arguments.
\commentary {
-Note that if \code{main} requires more than two arguments, a run time error will occur.
-}
-
-\rationale{
-The names of scripts are optional, in the interests of interactive, informal use. However, any script of long term value should be given a name as a matter of good practice.
+Note that if \code{main} requires more than two positional arguments,
+the library is not considered a script.
eernst 2017/05/10 09:30:34 If we keep the approach where `main(a,b,c){}` is d
Lasse Reichstein Nielsen 2017/05/30 05:45:37 I don't plan to keep that approach, so retaining t
eernst 2017/05/30 09:14:42 Right, that's the consistent approach.
}
\commentary {
A Dart program will typically be executed by executing a script.
}
+\LMHASH{}
eernst 2017/05/10 09:30:34 `\LMHash{}`.
Lasse Reichstein Nielsen 2017/05/30 05:45:38 Done.
+If a non-script library is provided where a script is expected,
+it precludes execution.
+As such, it should be reported as a compile-time error,
+even if that library compiles successfully as a non-script library.
eernst 2017/05/10 09:30:34 If we keep the "`main(a,b,c){}` is detected at com
Lasse Reichstein Nielsen 2017/05/30 05:45:38 As discussed, I disagree on that. It is not a run
eernst 2017/05/30 09:14:42 At this point I'm trying really hard to find a way
+
\subsection{URIs}
\LMLabel{uris}
« 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