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

Side by Side Diff: src/site/support/faq.html

Issue 10788006: new site (Closed) Base URL: https://code.google.com/p/dartlang-site/@master
Patch Set: final patch Created 8 years, 5 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 unified diff | Download patch
OLDNEW
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
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
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&mdash;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&mdash;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
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
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
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
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
OLDNEW
« no previous file with comments | « src/site/slides/2012/03/bootstrap/images/sdk-directory-layout.png ('k') | twitter/Twitter-02.png » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698