| OLD | NEW |
| 1 --- | 1 --- |
| 2 layout: default | 2 layout: default |
| 3 title: "FAQ" | 3 title: "FAQ" |
| 4 rel: | 4 rel: |
| 5 author: eli-brandt | 5 author: eli-brandt |
| 6 --- | 6 --- |
| 7 | 7 |
| 8 <h1>Frequently Asked Questions (FAQ)</h1> | 8 <h1>Frequently Asked Questions (FAQ)</h1> |
| 9 <em>Collected by Eli Brandt | 9 <em>Collected by Eli Brandt |
| 10 <br> | 10 <br> |
| 11 Version 0.02, February 2012</em> | 11 Version 0.02, February 2012</em> |
| 12 | 12 |
| 13 <section> | |
| 14 <p> | 13 <p> |
| 15 This FAQ answers many of the questions we've been asked about Dart. However, b
ecause we released Dart | 14 This FAQ answers many of the questions we've been asked about Dart. However, b
ecause we released Dart |
| 16 as an early technology preview rather than keeping it under wraps until versio
n 1.0, some important | 15 as an early technology preview rather than keeping it under wraps until versio
n 1.0, some important |
| 17 open questions remain. We hope to address them with upcoming work and experime
ntation, inside and | 16 open questions remain. We hope to address them with upcoming work and experime
ntation, inside and |
| 18 outside of Google. | 17 outside of Google. |
| 19 </p> | 18 </p> |
| 20 | 19 |
| 20 <section id="contents"> |
| 21 |
| 21 <h3>Contents</h3> | 22 <h3>Contents</h3> |
| 22 <ol id="faq-toc" class="toc"> | 23 <ol id="faq-toc" class="toc"> |
| 23 <li><a href="#strategy" class="faq-topic">Strategy</a> | 24 <li><a href="#strategy" class="faq-topic">Strategy</a> |
| 24 <ol> | 25 <ol> |
| 25 <li><a href="#why-dart">Why Dart?</a></li> | 26 <li><a href="#why-dart">Why Dart?</a></li> |
| 26 <li><a href="#why-fix-the-language">Is the language really what needs to be
fixed in web development?</a></li> | 27 <li><a href="#why-fix-the-language">Is the language really what needs to be
fixed in web development?</a></li> |
| 27 <li><a href="#does-dart-divert-effort">Is Dart going to divert community eff
ort from JavaScript-based web development?</a></li> | 28 <li><a href="#does-dart-divert-effort">Is Dart going to divert community eff
ort from JavaScript-based web development?</a></li> |
| 28 <li><a href="#will-dart-be-standardized">Is Google planning to put Dart unde
r the control of a standards body?</a></li> | 29 <li><a href="#will-dart-be-standardized">Is Google planning to put Dart unde
r the control of a standards body?</a></li> |
| 29 <li><a href="#how-will-dart-take-input">Until that point, how will you be ta
king input on changes to Dart?</a></li> | 30 <li><a href="#how-will-dart-take-input">Until that point, how will you be ta
king input on changes to Dart?</a></li> |
| 30 <li><a href="#why-not-designed-by-standards-body">Why didn't Google make Dar
t an open standard right from the start?</a></li> | 31 <li><a href="#why-not-designed-by-standards-body">Why didn't Google make Dar
t an open standard right from the start?</a></li> |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 <li><a href="#what-browsers-have-dart">What browsers support Dart now?</a></
li> | 66 <li><a href="#what-browsers-have-dart">What browsers support Dart now?</a></
li> |
| 66 <li><a href="#hello-world-js-size">Why was the JavaScript output for "Hello
world" so big?</a></li> | 67 <li><a href="#hello-world-js-size">Why was the JavaScript output for "Hello
world" so big?</a></li> |
| 67 <li><a href="#debugging-output-js">How do I debug Dart code after it's been
compiled to JavaScript?</a></li> | 68 <li><a href="#debugging-output-js">How do I debug Dart code after it's been
compiled to JavaScript?</a></li> |
| 68 <li><a href="#what-input-compiles">Will any valid Dart code compile to JavaS
cript, or are there limitations?</a></li> | 69 <li><a href="#what-input-compiles">Will any valid Dart code compile to JavaS
cript, or are there limitations?</a></li> |
| 69 <li><a href="#json-support">Does Dart support JSON?</a></li> | 70 <li><a href="#json-support">Does Dart support JSON?</a></li> |
| 70 <li><a href="#server-support">Will Dart run on the server?</a></li> | 71 <li><a href="#server-support">Will Dart run on the server?</a></li> |
| 71 </ol> </li> | 72 </ol> </li> |
| 72 | 73 |
| 73 <li><a href="#acknowledgments" class="faq-topic">Acknowledgments</a></li> | 74 <li><a href="#acknowledgments" class="faq-topic">Acknowledgments</a></li> |
| 74 </ol> | 75 </ol> |
| 75 </section> | 76 </section> <!-- /#contents --> |
| 76 | 77 |
| 77 {% comment %} | 78 {% comment %} |
| 78 <!-- | 79 <!-- |
| 79 TODO: do we have a standard trick to add some scrollable whitespace at the botto
m so people can click on the bottom TOC entries (like #server-support) and go to
the right place? | 80 TODO: do we have a standard trick to add some scrollable whitespace at the botto
m so people can click on the bottom TOC entries (like #server-support) and go to
the right place? |
| 80 | 81 |
| 81 ANSWER: no. :( It's a common problem but not one I'd thought about fixing. If we
add space above the footer, people won't see the footer. If we add space below,
it'll just look weird... but maybe that'd be OK. --> | 82 ANSWER: no. :( It's a common problem but not one I'd thought about fixing. If we
add space above the footer, people won't see the footer. If we add space below,
it'll just look weird... but maybe that'd be OK. --> |
| 82 {% endcomment %} | 83 {% endcomment %} |
| 83 | 84 |
| 84 <section> | 85 <section id="strategy"> |
| 85 <h2 id="strategy">Strategy</h2> | 86 <h2>Strategy</h2> |
| 86 | 87 |
| 87 <h3 id="why-dart">Q. Why Dart?</h3> | 88 <h3 id="why-dart">Q. Why Dart?</h3> |
| 88 | 89 |
| 89 <p>At Google we've written our share of web apps, and we've tried in many ways t
o make improvements to that development process, short of introducing a new lang
uage. Now we think it's time to take that leap. We designed Dart to be easy to
write development tools for, well-suited to modern app development, and capable
of high-performance implementations.</p> | 90 <p>At Google we've written our share of web apps, and we've tried in many ways t
o make improvements to that development process, short of introducing a new lang
uage. Now we think it's time to take that leap. We designed Dart to be easy to
write development tools for, well-suited to modern app development, and capable
of high-performance implementations.</p> |
| 90 | 91 |
| 91 <h3 id="why-fix-the-language">Q. Is the language really what needs to be fixed i
n web development?</h3> | 92 <h3 id="why-fix-the-language">Q. Is the language really what needs to be fixed i
n web development?</h3> |
| 92 | 93 |
| 93 <p>We want to <a href="http://hyperboleandahalf.blogspot.com/2010/06/this-is-why
-ill-never-be-adult.html">fix ALL the things</a>. There's "Dart" the language,
and then there's "Dart" the overall project. The Dart <em>project</em> is betti
ng that the language needs some changes, but we also want to <a href="http://www
.dartlang.org/articles/improving-the-dom/">improve the DOM</a> and other librari
es, and to improve the tools we use.</p> | 94 <p>We want to <a href="http://hyperboleandahalf.blogspot.com/2010/06/this-is-why
-ill-never-be-adult.html">fix ALL the things</a>. There's "Dart" the language,
and then there's "Dart" the overall project. The Dart <em>project</em> is betti
ng that the language needs some changes, but we also want to <a href="http://www
.dartlang.org/articles/improving-the-dom/">improve the DOM</a> and other librari
es, and to improve the tools we use.</p> |
| 94 | 95 |
| 95 <p>At the same time, Google is also placing bets that JavaScript <em>can</em> be
evolved as needed, and contributing to that work. Google wants web development
to be great, and if that happens with JavaScript, we're happy.</p> | 96 <p>At the same time, Google is also placing bets that JavaScript <em>can</em> be
evolved as needed, and contributing to that work. Google wants web development
to be great, and if that happens with JavaScript, we're happy.</p> |
| (...skipping 27 matching lines...) Expand all Loading... |
| 123 <h3 id="why-not-multi-language-VM">Q. Why didn't Google build a bytecode VM targ
etable by multiple languages including Dart?</h3> | 124 <h3 id="why-not-multi-language-VM">Q. Why didn't Google build a bytecode VM targ
etable by multiple languages including Dart?</h3> |
| 124 | 125 |
| 125 <p>Each approach has advantages and disadvantages, but we feel that in the conte
xt of Dart it made sense to build a language-specific VM for the following reaso
ns: | 126 <p>Each approach has advantages and disadvantages, but we feel that in the conte
xt of Dart it made sense to build a language-specific VM for the following reaso
ns: |
| 126 <ul> | 127 <ul> |
| 127 <li>Google already works on a multi-language bytecode: <a href="https://develope
rs.google.com/native-client/overview#distributing-an-application">LLVM bitcode i
n PNaCl</a>.</li> | 128 <li>Google already works on a multi-language bytecode: <a href="https://develope
rs.google.com/native-client/overview#distributing-an-application">LLVM bitcode i
n PNaCl</a>.</li> |
| 128 <li>Even if a bytecode VM is specialized for Dart, a language VM will be simpler
and faster because it can work under stronger assumptions—for instance, a
structured control flow. These assumptions make the implementation cleaner and
optimizations easier.</li> | 129 <li>Even if a bytecode VM is specialized for Dart, a language VM will be simpler
and faster because it can work under stronger assumptions—for instance, a
structured control flow. These assumptions make the implementation cleaner and
optimizations easier.</li> |
| 129 <li>A general-purpose bytecode VM would be even larger and slower, as it general
izes assumptions and adds functionality that for Dart is dead code: for example,
multithreading with a shared heap.</li> | 130 <li>A general-purpose bytecode VM would be even larger and slower, as it general
izes assumptions and adds functionality that for Dart is dead code: for example,
multithreading with a shared heap.</li> |
| 130 <li>No bytecode VM is truly general-purpose; they all make assumptions that priv
ilege some class of languages. A language VM leaves more room to improve the VM
and make deep changes to optimization of the language. Some Dart engineers wrot
e <a href="/articles/why-not-bytecode/">an article</a> talking about the VM ques
tion in more detail.</li> | 131 <li>No bytecode VM is truly general-purpose; they all make assumptions that priv
ilege some class of languages. A language VM leaves more room to improve the VM
and make deep changes to optimization of the language. Some Dart engineers wrot
e <a href="/articles/why-not-bytecode/">an article</a> talking about the VM ques
tion in more detail.</li> |
| 131 </ul> | 132 </ul> |
| 132 </p> | 133 </p> |
| 133 </section> | 134 </section> <!-- /#strategy --> |
| 134 | 135 |
| 135 <section> | 136 <section id="language"> |
| 136 <h2 id="language">Language</h2> | 137 <h2>Language</h2> |
| 137 | 138 |
| 138 <h3 id="compare-to-javascript">Q. Isn't Dart a lot like JavaScript?</h3> | 139 <h3 id="compare-to-javascript">Q. Isn't Dart a lot like JavaScript?</h3> |
| 139 | 140 |
| 140 <p>Yes and no. The Dart project thinks that JavaScript can use some changes for
more productive software engineering, smarter editors and development environme
nts, and web apps that are as beautiful and pleasing as the best client apps can
be. On the other hand, we don't think everything needs to change, and why chan
ge what isn't broken?</p> | 141 <p>Yes and no. The Dart project thinks that JavaScript can use some changes for
more productive software engineering, smarter editors and development environme
nts, and web apps that are as beautiful and pleasing as the best client apps can
be. On the other hand, we don't think everything needs to change, and why chan
ge what isn't broken?</p> |
| 141 | 142 |
| 142 <p>Dart, like JavaScript, is a dynamically typed language. It adds optional com
pile-time type annotations to help you catch errors earlier. It takes out a few
features of JavaScript, such as prototypes and the global object: this should s
treamline the VM, enable faster execution, and make it easier to do code complet
ion and refactoring. And Dart adds some goodies. To name a few: | 143 <p>Dart, like JavaScript, is a dynamically typed language. It adds optional com
pile-time type annotations to help you catch errors earlier. It takes out a few
features of JavaScript, such as prototypes and the global object: this should s
treamline the VM, enable faster execution, and make it easier to do code complet
ion and refactoring. And Dart adds some goodies. To name a few: |
| 143 <ul> | 144 <ul> |
| 144 <li>User-defined operator methods. We like the lightweight, readable code these
give for <a href="http://www.dartlang.org/articles/improving-the-dom/">our DOM
interface</a>.</li> | 145 <li>User-defined operator methods. We like the lightweight, readable code these
give for <a href="http://www.dartlang.org/articles/improving-the-dom/">our DOM
interface</a>.</li> |
| 145 <li>Lightweight syntax for anonymous functions. You use them a lot in web progr
amming; now they look great. And they come with correct binding of <code>this</
code> and full block-level lexical scoping, no gotchas.</li> | 146 <li>Lightweight syntax for anonymous functions. You use them a lot in web progr
amming; now they look great. And they come with correct binding of <code>this</
code> and full block-level lexical scoping, no gotchas.</li> |
| 146 </ul> | 147 </ul> |
| (...skipping 26 matching lines...) Expand all Loading... |
| 173 return greeting; | 174 return greeting; |
| 174 } | 175 } |
| 175 {% endhighlight %} | 176 {% endhighlight %} |
| 176 | 177 |
| 177 <p>With the following Dart code:</p> | 178 <p>With the following Dart code:</p> |
| 178 | 179 |
| 179 {% highlight dart %} | 180 {% highlight dart %} |
| 180 // Dart code | 181 // Dart code |
| 181 | 182 |
| 182 String MakeGreeting(String name) { | 183 String MakeGreeting(String name) { |
| 183 String greeting = 'hello ' + name; | 184 String greeting = 'hello $name'; |
| 184 return greeting; | 185 return greeting; |
| 185 } | 186 } |
| 186 {% endhighlight %} | 187 {% endhighlight %} |
| 187 | 188 |
| 188 <p>If you are using Closure and can switch to Dart, you will probably enjoy the
change.</p> | 189 <p>If you are using Closure and can switch to Dart, you will probably enjoy the
change.</p> |
| 189 | 190 |
| 190 <h3 id="compare-to-coffeescript">Q. How does Dart compare with CoffeeScript?</h3
> | 191 <h3 id="compare-to-coffeescript">Q. How does Dart compare with CoffeeScript?</h3
> |
| 191 | 192 |
| 192 <p>Both Dart and CoffeeScript are inspired by JavaScript, and both can be transl
ated back to it. They make different choices, particularly in the flavor of the
ir syntax. As a language we think it's fair to say that Dart differs semantical
ly from JavaScript more than CoffeeScript does; that may result in a less line-f
or-line translation, but we believe Dart-generated JavaScript can have excellent
size and speed.</p> | 193 <p>Both Dart and CoffeeScript are inspired by JavaScript, and both can be transl
ated back to it. They make different choices, particularly in the flavor of the
ir syntax. As a language we think it's fair to say that Dart differs semantical
ly from JavaScript more than CoffeeScript does; that may result in a less line-f
or-line translation, but we believe Dart-generated JavaScript can have excellent
size and speed.</p> |
| 193 | 194 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 | 226 |
| 226 <p>Yes.</p> | 227 <p>Yes.</p> |
| 227 | 228 |
| 228 <h3 id="can-add-everything">Q. Can Dart add tuples, pattern matching, non-nullab
le types, interface duck typing, partial evaluation, optional semicolons, ...?</
h3> | 229 <h3 id="can-add-everything">Q. Can Dart add tuples, pattern matching, non-nullab
le types, interface duck typing, partial evaluation, optional semicolons, ...?</
h3> |
| 229 | 230 |
| 230 <p>The language is not finished yet. It might be able to include your feature,
although it can't include everything. Some features don't fit the basic nature
of the language, and some don't play well with other features. Simplicity is th
e single most important gift we all can give to future programmers.</p> | 231 <p>The language is not finished yet. It might be able to include your feature,
although it can't include everything. Some features don't fit the basic nature
of the language, and some don't play well with other features. Simplicity is th
e single most important gift we all can give to future programmers.</p> |
| 231 | 232 |
| 232 <p>Please look at the <a href="http://code.google.com/p/dart/issues/list">list o
f Dart issues</a> to see if your request is already there, and add a new issue i
f not. Make a thoughtful argument for your feature. Sample code with and witho
ut your feature is good evidence; a sizeable codebase that shows the need is eve
n better evidence.</p> | 233 <p>Please look at the <a href="http://code.google.com/p/dart/issues/list">list o
f Dart issues</a> to see if your request is already there, and add a new issue i
f not. Make a thoughtful argument for your feature. Sample code with and witho
ut your feature is good evidence; a sizeable codebase that shows the need is eve
n better evidence.</p> |
| 233 | 234 |
| 234 <p>Please don't be surprised if the Dart designers say "no" by default, especial
ly for now. It's far more painful to remove a language feature than to add it,
so Dart is likely to add the most obvious features first, and then revisit the n
ext tier later. And there simply are more possible language features in the wor
ld that can fit into any single language without making a total hash of it. Bu
t we do very much appreciate suggestions and evidence. We hope you'll see our a
ppreciation through careful design choices and fair communication about them.</p
> | 235 <p>Please don't be surprised if the Dart designers say "no" by default, especial
ly for now. It's far more painful to remove a language feature than to add it,
so Dart is likely to add the most obvious features first, and then revisit the n
ext tier later. And there simply are more possible language features in the wor
ld that can fit into any single language without making a total hash of it. Bu
t we do very much appreciate suggestions and evidence. We hope you'll see our a
ppreciation through careful design choices and fair communication about them.</p
> |
| 235 </section> | 236 </section> <!-- /#language --> |
| 236 | 237 |
| 237 <section> | 238 <section id="types"> |
| 238 <h2 id="types">Types</h2> | 239 <h2>Types</h2> |
| 239 | 240 |
| 240 <h3 id="type-inference">Q. Does Dart have type inference?</h3> | 241 <h3 id="type-inference">Q. Does Dart have type inference?</h3> |
| 241 | 242 |
| 242 <p>That's not specified by the language, and it's left up to the compiler or edi
tor that wants to do it. Type inference could certainly be useful.</p> | 243 <p>That's not specified by the language, and it's left up to the compiler or edi
tor that wants to do it. Type inference could certainly be useful.</p> |
| 243 | 244 |
| 244 <h3 id="why-types-optional">Q. Why are type annotations optional?</h3> | 245 <h3 id="why-types-optional">Q. Why are type annotations optional?</h3> |
| 245 | 246 |
| 246 <p>We want to maintain the feel of a dynamically typed language, which is famili
ar to web developers. Mandatory types don't fit with that goal.</p> | 247 <p>We want to maintain the feel of a dynamically typed language, which is famili
ar to web developers. Mandatory types don't fit with that goal.</p> |
| 247 | 248 |
| 248 <h3 id="why-types-unsound">Q. Why is the type system designed to be unsound?</h3
> | 249 <h3 id="why-types-unsound">Q. Why is the type system designed to be unsound?</h3
> |
| (...skipping 14 matching lines...) Expand all Loading... |
| 263 | 264 |
| 264 <h3 id="why-covariant-generics">Q. Why are generics covariant?</h3> | 265 <h3 id="why-covariant-generics">Q. Why are generics covariant?</h3> |
| 265 | 266 |
| 266 <p>Covariant generics fit a common intuition that programmers have, and very oft
en this intuition is correct, such as in the common "read-only" use of a generic
. Although this intuition isn't always correct, Dart doesn't need it to be. Da
rt has already chosen optimistic static checking, so why not continue down that
path and allow covariant uses of generics to pass static type checking?</p> | 267 <p>Covariant generics fit a common intuition that programmers have, and very oft
en this intuition is correct, such as in the common "read-only" use of a generic
. Although this intuition isn't always correct, Dart doesn't need it to be. Da
rt has already chosen optimistic static checking, so why not continue down that
path and allow covariant uses of generics to pass static type checking?</p> |
| 267 | 268 |
| 268 <p>Where covariant generics are too optimistic, Dart's type-safe execution allow
s the static warnings to be optimistic without being dangerous. Although covari
ance can be pessimistic too, we think it will be rare that people run into that,
and and there's a simple workaround for any pessimism.</p> | 269 <p>Where covariant generics are too optimistic, Dart's type-safe execution allow
s the static warnings to be optimistic without being dangerous. Although covari
ance can be pessimistic too, we think it will be rare that people run into that,
and and there's a simple workaround for any pessimism.</p> |
| 269 | 270 |
| 270 <p>We are familiar with a variety of ways that languages try to mark or infer va
riance. We don't think any of them are suitable for Dart, where we want type an
notations to be optional and unobtrusive: it wouldn't fit to <em>require</em> ma
rking, and we feel that variance inference systems add too much complexity for t
heir benefit in Dart.</p> | 271 <p>We are familiar with a variety of ways that languages try to mark or infer va
riance. We don't think any of them are suitable for Dart, where we want type an
notations to be optional and unobtrusive: it wouldn't fit to <em>require</em> ma
rking, and we feel that variance inference systems add too much complexity for t
heir benefit in Dart.</p> |
| 271 | 272 |
| 272 <p>Again, we're trying to be pragmatic, and we think the outcome is reasonable.<
/p> | 273 <p>Again, we're trying to be pragmatic, and we think the outcome is reasonable.<
/p> |
| 273 </section> | 274 </section> <!-- /#types --> |
| 274 | 275 |
| 275 <section> | 276 <section id="tools"> |
| 276 <h2 id="tools">Usage and tools</h2> | 277 <h2>Usage and tools</h2> |
| 277 | 278 |
| 278 <h3 id="should-i-use-dart-yet">Q. Should I write my web app in Dart?</h3> | 279 <h3 id="should-i-use-dart-yet">Q. Should I write my web app in Dart?</h3> |
| 279 | 280 |
| 280 <p>If you want to experiment, we'd love for you to try Dart and give us feedback
. If your web app is something that needs to be reliable, we really recommend w
aiting until Dart is more mature. We've released Dart at a very early stage, an
d we're likely to make breaking changes to the language.</p> | 281 <p>If you want to experiment, we'd love for you to try Dart and give us feedback
. If your web app is something that needs to be reliable, we really recommend w
aiting until Dart is more mature. We've released Dart at a very early stage, an
d we're likely to make breaking changes to the language.</p> |
| 281 | 282 |
| 282 <h3 id="interop-with-js-libs">Q. How does Dart code interoperate with JavaScript
libraries?</h3> | 283 <h3 id="interop-with-js-libs">Q. How does Dart code interoperate with JavaScript
libraries?</h3> |
| 283 | 284 |
| 284 <p>Right now, the supported way is to port the library to Dart. We're trying an
approach using isolates: Dart code calls across an isolate boundary to JavaScri
pt, using RPC stub code that we hope to autogenerate. This approach has the goo
d property that you never have multiple heaps trying to share data, and that you
're not locking yourself out from running on a Dart VM. We'll see how it works.
</p> | 285 <p>Right now, the supported way is to port the library to Dart. We're trying an
approach using isolates: Dart code calls across an isolate boundary to JavaScri
pt, using RPC stub code that we hope to autogenerate. This approach has the goo
d property that you never have multiple heaps trying to share data, and that you
're not locking yourself out from running on a Dart VM. We'll see how it works.
</p> |
| 285 | 286 |
| 286 <h3 id="js-codebase-integration">Q. I have a large JavaScript codebase. How wou
ld I migrate it to Dart?</h3> | 287 <h3 id="js-codebase-integration">Q. I have a large JavaScript codebase. How wou
ld I migrate it to Dart?</h3> |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 | 326 |
| 326 <p>Yes, we intend for any valid Dart code to compile to JavaScript. If some sup
port is missing from one of our compilers, that's a bug (in either the compiler
or the spec).</p> | 327 <p>Yes, we intend for any valid Dart code to compile to JavaScript. If some sup
port is missing from one of our compilers, that's a bug (in either the compiler
or the spec).</p> |
| 327 | 328 |
| 328 <h3 id="json-support">Q. Does Dart support JSON?</h3> | 329 <h3 id="json-support">Q. Does Dart support JSON?</h3> |
| 329 | 330 |
| 330 <p>Yes, Dart libraries can parse from and stringify to JSON. You can find such
a library at <a href="http://code.google.com/p/dart/source/browse/#svn%2Fbranche
s%2Fbleeding_edge%2Fdart%2Flib%2Fjson"><code>dart/lib/json/</code></a>.</p> | 331 <p>Yes, Dart libraries can parse from and stringify to JSON. You can find such
a library at <a href="http://code.google.com/p/dart/source/browse/#svn%2Fbranche
s%2Fbleeding_edge%2Fdart%2Flib%2Fjson"><code>dart/lib/json/</code></a>.</p> |
| 331 | 332 |
| 332 <h3 id="server-support">Q. Will Dart run on the server?</h3> | 333 <h3 id="server-support">Q. Will Dart run on the server?</h3> |
| 333 | 334 |
| 334 <p>We have some server code now, such as our test suites. Have a look at the fi
le, socket, and process APIs in <a href="http://code.google.com/p/dart/source/br
owse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Fruntime%2Fbin"><code>dart/runtime/
bin/</code></a>. </p> | 335 <p>We have some server code now, such as our test suites. Have a look at the fi
le, socket, and process APIs in <a href="http://code.google.com/p/dart/source/br
owse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Fruntime%2Fbin"><code>dart/runtime/
bin/</code></a>. </p> |
| 335 </section> | |
| 336 | 336 |
| 337 <section> | 337 </section> <!-- /#tools --> |
| 338 <h2 id="acknowledgments">Acknowledgments</h2> | 338 |
| 339 <section id="acknowledgements"> |
| 340 <h2>Acknowledgments</h2> |
| 339 | 341 |
| 340 <p>Thanks to users who asked questions, and to many Googlers who contributed que
stions, answers, and improvements: Mukesh Agrawal, Lars Bak, Adam Barth, Gilad B
racha, Paul Brauner, David Carlson, Patrick Doyle, Matthias Ernst, Nicolas Geoff
ray, Dan Grove, William Hesse, Bruce Johnson, Seth Ladd, Patrick Linehan, Floria
n Loitsch, John Messerly, Srdjan Mitrovic, Anton Muhin, Bob Nystrom, Jack Palevi
ch, David Rochberg, Matt Shulman, Joel Webber, Brian Wilkerson.</p> | 342 <p>Thanks to users who asked questions, and to many Googlers who contributed que
stions, answers, and improvements: Mukesh Agrawal, Lars Bak, Adam Barth, Gilad B
racha, Paul Brauner, David Carlson, Patrick Doyle, Matthias Ernst, Nicolas Geoff
ray, Dan Grove, William Hesse, Bruce Johnson, Seth Ladd, Patrick Linehan, Floria
n Loitsch, John Messerly, Srdjan Mitrovic, Anton Muhin, Bob Nystrom, Jack Palevi
ch, David Rochberg, Matt Shulman, Joel Webber, Brian Wilkerson.</p> |
| 341 | 343 |
| 342 </section> | 344 </section> |
| 343 | |
| 344 | |
| 345 | |
| OLD | NEW |