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

Unified Diff: lib/isolate/isolate_api.dart

Issue 9521007: isolates: remove Isolate2 interface, add top-level spawn functions, more comments (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 10 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 | « lib/isolate/frog/isolateimpl.dart ('k') | lib/isolate/isolate_compiler.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/isolate/isolate_api.dart
diff --git a/lib/isolate/isolate_api.dart b/lib/isolate/isolate_api.dart
index 8cc85e71f0e9f2bb4d8fdb1c64db7e830f30b27b..dbe600db8f52eb9e4ccca51a09b550ee86718044 100644
--- a/lib/isolate/isolate_api.dart
+++ b/lib/isolate/isolate_api.dart
@@ -3,6 +3,45 @@
// BSD-style license that can be found in the LICENSE file.
/**
+ * The initial [ReceivePort] available by default for this isolate. This
+ * [ReceivePort] is created automatically and it is commonly used to establish
+ * the first communication between isolates (see [spawnFunction] and
+ * [spawnUri]).
+ */
+ReceivePort get port() => _port;
+
+/**
+ * Creates and spawns an isolate that shares the same code as the current
+ * isolate, but that starts from [topLevelFunction]. The [topLevelFunction]
+ * argument must be a static top-level function or a static method that takes no
+ * arguments. It is illegal to pass a function closure.
+ *
+ * When any isolate starts (even the main script of the application), a default
+ * [ReceivePort] is created for it. This port is available from the top-level
+ * getter [port] defined in this library.
+ *
+ * [spawnFunction] returns a [SendPort] derived from the child isolate's default
+ * port.
+ *
+ * See comments at the top of this library for more details.
+ */
+// Note this feature is not yet available in the dartvm.
+SendPort spawnFunction(void topLevelFunction()) {
+ return _spawnFunction(topLevelFunction);
+}
+
+/**
+ * Creates and spawns an isolate whose code is available at [uri]. Like with
+ * [spawnFunction], the child isolate will have a default [ReceivePort], and a
+ * this function returns a [SendPort] derived from it.
+ *
+ * See comments at the top of this library for more details.
+ */
+SendPort spawnUri(String uri) {
+ return _spawnUri(uri);
+}
+
+/**
* [SendPort]s are created from [ReceivePort]s. Any message sent through
* a [SendPort] is delivered to its respective [ReceivePort]. There might be
* many [SendPort]s for the same [ReceivePort].
@@ -42,7 +81,6 @@ interface SendPort extends Hashable {
}
-
/**
* [ReceivePort]s, together with [SendPort]s, are the only means of
* communication between isolates. [ReceivePort]s have a [:toSendPort:] method
@@ -92,6 +130,8 @@ interface ReceivePort default _ReceivePortFactory {
}
/**
+ * NOTE: This API will be deprecated soon.
+ *
* The [Isolate] class serves two purposes: (1) as template for spawning a new
* isolate, and (2) as entry-point for the newly spawned isolate.
*
@@ -107,8 +147,14 @@ interface ReceivePort default _ReceivePortFactory {
* Isolates may be "heavy" or "light". Heavy isolates live in their own thread,
* whereas "light" isolates live in the same thread as the isolate which spawned
* them.
+ *
+ * NOTE: once [spawnFunction] and [spawnUri] are supported in both frog and the
+ * dartvm, this class will be removed. The distinction of heavy and light will
+ * be removed too. Thus far the main use for 'light' isolates is for running
+ * isolates that share access to the DOM. A special API will be added for this
+ * purpose soon. See the library top-level comments for more details.
*/
-// TODO(sigmund): delete once we implement the new isolates in the vm
+// TODO(sigmund): delete once we implement the new API in the vm
class Isolate {
/**
@@ -177,39 +223,3 @@ class Isolate {
final bool _isLight;
ReceivePort _port;
}
-
-/**
- * [Isolate2] provides APIs to spawn, communicate, and stop an isolate. An
- * isolate can be spawned by simply creating a new instance of [Isolate2]. The
- * [Isolate2] instance exposes a port to communicate with the isolate and
- * methods to control its behavior remotely.
- */
- // TODO(sigmund): rename to Isolate once we delete the old implementation
-interface Isolate2 default _IsolateFactory {
-
- /**
- * Create and spawn an isolate that shares the same code as the current
- * isolate, but that starts from [topLevelFunction]. The [topLevelFunction]
- * argument must be a static method closure that takes exactly one
- * argument of type [ReceivePort]. It is illegal to pass a function closure
- * that captures values in scope.
- *
- * When an child isolate is spawned, a new [ReceivePort] is created for it.
- * This port is passed to [topLevelFunction]. A [SendPort] derived from
- * such port is sent to the spawner isolate, which is accessible in
- * [Isolate2.sendPort] field of this instance.
- */
- Isolate2.fromCode(Function topLevelFunction);
-
- /**
- * Create and spawn an isolate whose code is available at [uri].
- * The code in [uri] must have an method called [: isolateMain :], which takes
- * exactly one argument of type [ReceivePort].
- * Like with [Isolate2.fromCode], a [ReceivePort] is created in the child
- * isolate, and a [SendPort] to it is stored in [Isolate2.sendPort].
- */
- Isolate2.fromUri(String uri);
-
- /** Port used to communicate with this isolate. */
- SendPort sendPort;
-}
« no previous file with comments | « lib/isolate/frog/isolateimpl.dart ('k') | lib/isolate/isolate_compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698