<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Brendan Eich</title>
	<atom:link href="http://brendaneich.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://brendaneich.com</link>
	<description></description>
	<lastBuildDate>Mon, 16 Apr 2012 05:50:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The infernal semicolon</title>
		<link>http://brendaneich.com/2012/04/the-infernal-semicolon/</link>
		<comments>http://brendaneich.com/2012/04/the-infernal-semicolon/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 18:39:40 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1992</guid>
		<description><![CDATA[Most of the comments in this semicolons in JS exchange make me sad. The code in question: clearMenus() !isActive &#038;&#038; $parent.toggleClass('open') relies on Automatic Semicolon Insertion (ASI) and so cannot be minified except by parsing fully (including ASI), observing the significance of the newline after clearMenus(), and inserting a semicolon when stripping that newline. Some [...]]]></description>
			<content:encoded><![CDATA[<p>Most of the comments in this <a href="https://github.com/twitter/bootstrap/issues/3057">semicolons in JS</a> exchange make me sad. The code in question:</p>
<pre>
  clearMenus()
  !isActive &#038;&#038; $parent.toggleClass('open')
</pre>
<p>relies on <a href="http://ecma262-5.com/ELS5_Section_7.htm#Section_7.9">Automatic Semicolon Insertion (ASI)</a> and so cannot be <a href="http://en.wikipedia.org/wiki/Minification_%28programming%29">minified</a> except by parsing fully (including ASI), observing the significance of the newline after <code>clearMenus()</code>, and inserting a semicolon when stripping that newline.</p>
<p>
Some argue that <a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a> has a bug. <a href="http://crockford.com/">Doug Crockford</a> <a href="https://github.com/twitter/bootstrap/issues/3057#issuecomment-5135512">does not want</a> to change JSMin, and that&#8217;s his choice.</p>
<p>
FWIW, I agree with Doug&#8217;s canonically grumpy tone if not his substance; more below on the substance.</p>
<p>
I also agree with <a href="https://twitter.com/#!/cramforce/status/191560711565086720">@cramforce</a> and <a href="https://twitter.com/#!/jedschmidt/status/191559562069946370">@jedschmidt</a> that the <code>&amp;&amp;</code> line is an <a href="http://en.wiktionary.org/wiki/abusage">abusage</a>, allowed due to JS&#8217;s C heritage by way of Java, but frowned upon by most JS hackers; and that an <code>if</code> statement would be much better style (and, I take it, help JSMin do right). But this particular criticism is too <i>ad hoc</i> to help resolve the general &#8220;Let me have my ASI freedom and still minify, dammit!&#8221; debate.</p>
<p>
Doug goes on to <a href="https://github.com/twitter/bootstrap/issues/3057#issuecomment-5135562">say</a>:</p>
<blockquote cite="https://github.com/twitter/bootstrap/issues/3057#issuecomment-5135562"><p>
TC39 is considering the use of ! as an infix operator. This code will break in the future. Fix it now. Learn to use semicolons properly. ! is not intended to be a statement separator. ; is.
</p></blockquote>
<p>The <code>!</code>-as-infix-operator idea is proposed as <a href="http://wiki.ecmascript.org/doku.php?id=strawman:concurrency#syntactic_sugar">syntactic sugar</a> for <a href="http://wiki.ecmascript.org/doku.php?id=strawman:concurrency">promises</a>, which may or may not make it into <a href="http://wiki.ecmascript.org/doku.php?id=harmony:harmony">Harmony</a> with that exact syntax, or with any syntactic sugar at all.</p>
<p>
Doug&#8217;s right that <code>!</code> is not a statement terminator or &#8220;initiator&#8221;. And (my point here), neither is newline.</p>
<p>
But search for <code>[nlth]</code> in <a href="http://wiki.ecmascript.org/doku.php?id=strawman:concurrency#eventual_operations">the proposed promises grammar</a> and you&#8217;ll see something surprising about ASI and infix operators: we can add new infix operators in the future, whether new contextual keyword-operators (e.g., <a href="http://wiki.ecmascript.org/doku.php?id=harmony:egal"><code>is</code></a> and <a href="http://wiki.ecmascript.org/doku.php?id=harmony:egal"><code>isnt</code></a> &#8212; BTW these are in doubt) or retasked, existing unary-prefix operators, provided that we insist on <code>[no </code><i>LineTerminator</i><code> here]</code> immediately to the left of any such infix operator.</p>
<p>
(In <a href="http://www.ecma-international.org/publications/standards/Ecma-262-arch.htm">ECMA-262</a>, <code>[no </code><i>LineTerminator</i><code> here]</code> is used in so-called &#8220;restricted productions&#8221; to make contextually-significant newlines, e.g., after <code>return</code> without any expression of the return value on the same line.)</p>
<p>
This future-friendliness to new infix operators comes directly from ASI as a newline-sensitive error correction procedure, as the example at top demonstrates. Try other examples using a leading identifier on a well-formed second line and you&#8217;ll see the same effect. Removing the newline introduces an early error, which creates homesteading space for new infix operators in a later edition of ECMA-262. Examples:</p>
<pre>
let flag = x is y;  // no \n before 'is'!
x ! p = v;          // Q(x).put(’p’, v)
</pre>
<p>An aside on coding style: if we add new infix operators used in restricted productions, this gives weight to the JS coding style that puts infix operators in multiline expressions at the end of continued lines, rather than at the beginning of continuation lines.</p>
<p>
So while I agree with Doug on those two lines of code from <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> (an excellent JS library, BTW) exhibiting poor style, it is not the case that such code <em>as written</em> could break in the future, even if we were to adopt the <code>!</code>-as-infix-operator strawman. The first line terminator in that example is indeed significant.</p>
<p>
The moral of this story: ASI is (formally speaking) a syntactic error correction procedure. If you start to code as if it were a universal significant-newline rule, you will get into trouble. A classic example from ECMA-262:</p>
<pre>
a = b + c
(d + e).print()
</pre>
<p>
Similar hazards arise with <code>[</code>, <code>/</code>, and unary <code>+</code> and <code>-</code>. Remember, if there wasn&#8217;t an error, ASI does not apply.</p>
<p>
This problem may seem minor, but JS file concatenation ups the ante. For this reason some style guides (Dojo, IIRC) advocate starting your reusable JS file with <code>;</code>, but people don&#8217;t know and it&#8217;s easy to forget.</p>
<p>
I wish I had made newlines <em>more</em> significant in JS back in those ten days in May, 1995. Then instead of ASI, we would be cursing the need to use infix operators at the ends of continued lines, or perhaps <code>\</code> or brute-force parentheses, to force continuation onto a successive line. But that ship sailed almost 17 years ago.</p>
<p>
The way systematic newline significance could come to JS is via an evolution of <a href="/2010/11/paren-free/">paren-free</a> that makes it to Harmony status. I intend to work on this in the <a href="http://wiki.ecmascript.org/doku.php?id=strawman:paren_free">strawman</a>, but not for ES6.</p>
<p>
Some of the github issue comments are naive or idealistic to the point of being silly. Since when does any programming language <em>not</em> have syntax arguments? All living, practical languages that I know of, even those with indentation-based block structure and similar restrictions, have degrees of freedom of expression that allow abusage as well as good usage. Language designers can <a href="http://robert.ocallahan.org/2010/07/coding-style-as-failure-of-language_21.html">try to reduce degrees of freedom</a>, but not eliminate them completely.</p>
<p>
My two cents: be careful not to use ASI as if it gave JS significant newlines. And please don&#8217;t abuse <code>&amp;&amp;</code> and <code>||</code> where the mighty <code>if</code> statement serves better.</p>
<p>
I&#8217;ll also say that if it were up to me, in view of JS&#8217;s subtle and long history, I&#8217;d fix JSMin. But I would still log a grumpy comment or two first!</p>
<p>
/be</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2012/04/the-infernal-semicolon/feed/</wfw:commentRss>
		<slash:comments>41</slash:comments>
		</item>
		<item>
		<title>Community and Diversity</title>
		<link>http://brendaneich.com/2012/04/community-and-diversity/</link>
		<comments>http://brendaneich.com/2012/04/community-and-diversity/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 06:59:13 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Opinion]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1971</guid>
		<description><![CDATA[[I hope that it's obvious from what follows that this is a statement of personal opinion, not an official Mozilla document.] Summary Mitchell Baker recently wrote: If we start to try to make &#8220;Mozilla&#8221; mean &#8220;those people who share not only the Mozilla mission but also my general political / social / religious / environmental [...]]]></description>
			<content:encoded><![CDATA[<p>[I hope that it's obvious from what follows that this is a statement of personal opinion, not an official Mozilla document.]</p>
<h3>Summary</h3>
<p><a href="http://blog.lizardwrangler.com/">Mitchell Baker</a> recently <a href="http://groups.google.com/group/mozilla.governance/msg/952101e4dd0bd0c7">wrote</a>:</p>
<blockquote cite="http://groups.google.com/group/mozilla.governance/msg/952101e4dd0bd0c7"><p>
  If we start to try to make &#8220;Mozilla&#8221; mean &#8220;those people who share not only the Mozilla mission but also my general political / social / religious / environmental view&#8221; we will fail. If we focus Mozilla on our shared consensus regarding the Mozilla mission and manifesto then the opportunities before us are enormous. </p>
<p>
  Mozilla&#8217;s diversity is a success condition. Our mission and our goal is truly global. Our mission taps into a shared desire for respect and control and user sovereignty that runs across cultures and across many other worldviews. We may even offend each other in some of our other views. Despite this, we share a commitment to the Mozilla mission. This is a remarkable achievement and important to our continued success.
</p></blockquote>
<p>I agree with every word of this, and I believe it applies to other communities of which I&#8217;m a member. If not, these communities will tend to splinter, and that is likely to be a net loss for everyone.</p>
<p><h3>Background</h3>
<p>A donation that I made in support of California <a href="http://voterguide.sos.ca.gov/past/2008/general/argu-rebut/argu-rebutt8.htm">Proposition 8</a> four years ago became <a href="http://projects.latimes.com/prop8/results/?position=both&#038;name=&#038;employer=mozilla&#038;search=Search">public</a> <a href="http://projects.latimes.com/prop8/results/?position=both&#038;name=&#038;employer=google&#038;search=Search">knowledge</a> and sparked a firestorm of comments in the last few days, mostly on <a href="http://twitter.com/">Twitter</a>.</p>
<p>
People in other countries or other U.S. states do not know why &#8220;Mozilla&#8221; was listed in the donation data. Donors above a certain amount are <a href="http://www.fppc.ca.gov/index.php?id=51">required</a> by the State of California to disclose their employer. Mozilla had nothing to do with the donation.</p>
<p>
I&#8217;m not going to discuss Prop 8 here or on Twitter. There is no point in talking with the people who are baiting, ranting, and hurling four-letter abuse.<!-- http://pastebin.com/wDCeC53A --> Personal hatred conveyed through curse words is neither rational nor charitable, and strong feelings on any side of an issue do not justify it.</p>
<p>
In contrast, people expressing non-abusive anger, sadness, or disagreement, I understand, grieve, and humbly accept.</p>
<h3>No Hate</h3>
<p>Ignoring the abusive comments, I&#8217;m left with charges that I hate and I&#8217;m a bigot, based solely on the donation. Now <a href="http://www.merriam-webster.com/dictionary/hate">&#8220;hate&#8221;</a> and <a href="http://www.merriam-webster.com/dictionary/bigot">&#8220;bigot&#8221;</a> are well-defined words. I say these charges are false and unjust.</p>
<p>
First, I have been online for almost 30 years. I&#8217;ve led an open source project for 14 years. I speak regularly at conferences around the world, and socialize with members of the Mozilla, JavaScript, and other web developer communities. I challenge anyone to cite an incident where I displayed hatred, or ever treated someone less than respectfully because of group affinity or individual identity.</p>
<p>
Second, the donation does not in itself constitute evidence of animosity. Those asserting this are not providing a reasoned argument, rather they are labeling dissenters to cast them out of polite society. To such assertions, I can only respond: &#8220;no&#8221;.</p>
<p>
If we are acquainted, have good-faith assumptions, and circumstances allow it, we can discuss 1:1 in person. Online communication doesn&#8217;t seem to work very well for potentially divisive issues. Getting to know each other works better in my experience.</p>
<h3>The Larger Point</h3>
<p>There&#8217;s a larger point here, the one Mitchell made: people in any group or project of significant size and diversity will not agree on many crucial issues unrelated to the group or project.</p>
<p>
I know people doing a startup who testify that even at fewer than 20 employees, they have to face this fact. It&#8217;s obviously true for much larger communities such as JS and Mozilla. Not only is insisting on ideological uniformity impractical, it is counter-productive.</p>
<p>
So I do not insist that anyone agree with me on a great many things, including political issues, and I refrain from putting my personal beliefs in others&#8217; way in all matters Mozilla, JS, and Web. I hope for the same in return.</p>
<p>
/be</p>
<p>
(Comments disabled on this one.)</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2012/04/community-and-diversity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video, Mobile, and the Open Web</title>
		<link>http://brendaneich.com/2012/03/video-mobile-and-the-open-web/</link>
		<comments>http://brendaneich.com/2012/03/video-mobile-and-the-open-web/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 06:47:58 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1917</guid>
		<description><![CDATA[[Also posted at hacks.mozilla.org.] I wrote The Open Web and Its Adversaries just over five years ago, based on the first SXSW Browser Wars panel (we just had our fifth, it was great &#8212; thanks to all who came). Some history The little slideshow I presented is in part quaint. WPF/E and Adobe Apollo, remember [...]]]></description>
			<content:encoded><![CDATA[<style>
  .hilite {
    color: orangered;
  }
  .lolite {
    color: seagreen;
  }
</style>
<p>[Also <a href="http://hacks.mozilla.org/2012/03/video-mobile-and-the-open-web/">posted</a> at <a href="http://hacks.mozilla.org/">hacks.mozilla.org</a>.]</p>
<p>
I wrote <a href="http://brendaneich.com/2007/03/the-open-web-and-its-adversaries/">The Open Web and Its Adversaries</a> just over <strong>five years ago</strong>, based on the first <a href="http://sxsw.com/">SXSW</a> <a href="http://www.pcmag.com/slideshow_viewer/0,3253,l%253D202844%2526a%253D202844%2526po%253D34,00.asp?p=n">Browser Wars</a> panel (we just had our <a href="http://schedule.sxsw.com/2012/events/event_IAP12185">fifth</a>, it was great &#8212; thanks to all who came).</p>
<h3>Some history</h3>
<p>The <a href="https://developer.mozilla.org/presentations/sxsw2007/the_open_web/">little slideshow</a> I presented is in part quaint. WPF/E and Adobe Apollo, remember those? (Either the code names, or the extant renamed products?) The Web has come a long way since 2007.</p>
<p>
But other parts of my slideshow are still relevant, in particular the part where Mozilla and Opera committed to an unencumbered &lt;video&gt; element for <a href="http://dev.w3.org/html5/spec/Overview.html">HTML5</a>:</p>
<ul>
<li>Working with Opera via <a href="http://whatwg.org/">WHATWG</a> on &lt;video&gt;
<ul>
<li>Unencumbered Ogg Theora decoder in all browsers
<li>Ogg Vorbis for &lt;audio&gt;
<li>Other formats possible
<li>DHTML player controls
  </ul>
</ul>
<p>
We <a href="http://brendaneich.com/2007/08/video-tag-progress/">did</a> what we said we would. We fought against the odds. We carried the unencumbered HTML5 &lt;video&gt; torch even when it burned our hands.</p>
<p>
We were called naive (no) idealists (yes). We were told that we were rolling a large stone up a tall hill (and how!). We were told that we could never overcome the momentum behind <a href="http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC">H.264</a> (possibly true, but Mozilla was not about to give up and pay off the patent <i>rentiers</i>).</p>
<p>
Then in <strong>2009</strong> Google <a href="http://www.google.com/intl/en/press/pressrel/ir_20090805.html">announced</a> that it would acquire On2 (<a href="http://investor.google.com/releases/2010/0219.html">completed</a> in 2010), and Opera and Mozilla had a <a href="http://www.answers.com/main/ntquery?gwp=13&#038;s=white%20knight">White Knight</a>.</p>
<p>
At Google I/O in <strong>May 2010</strong>, Adobe <a href="http://blogs.adobe.com/flashplatform/2010/05/adobe_support_for_vp8.html">announced</a> that it would include VP8 (but not all of WebM?) support in an upcoming Flash release.</p>
<p>
On <strong>January 11, 2011</strong>, Mike Jazayeri of Google <a href="http://blog.chromium.org/2011/01/html-video-codec-support-in-chrome.html">blogged</a>:</p>
<blockquote cite="http://blog.chromium.org/2011/01/html-video-codec-support-in-chrome.html"><p>&#8230; we are changing Chrome&#8217;s HTML5 &lt;video&gt; support to make it consistent with the codecs already supported by the open Chromium project. Specifically, we are supporting the WebM (VP8) and Theora video codecs, and will consider adding support for other high-quality open codecs in the future. Though H.264 plays an important role in video, as our goal is to enable open innovation, support for the codec will be removed and our resources directed towards completely open codec technologies.</p>
<p>These changes will occur in the next couple months&#8230;.</p></blockquote>
<p>A <a href="http://blog.chromium.org/2011/01/more-about-chrome-html-video-codec.html">followup post</a> three days later confirmed that Chrome would rely on Flash fallback to play H.264 video.</p>
<h3>Where we are today</h3>
<p>It is now <strong>March 2012</strong> and the changes promised by Google and Adobe have not been made.</p>
<p>
What&#8217;s more, any such changes are irrelevant if made only on desktop Chrome &#8212; not on Google&#8217;s mobile browsers for Android &#8212; because authors typically do not encode twice (once in H.264, once in WebM), they instead write Flash fallback in an &lt;object&gt; tag nested inside the &lt;video&gt; tag. Here&#8217;s an example adapted from an <a href="http://dev.opera.com/articles/view/simple-html5-video-flash-fallback-custom-controls/">Opera developer document</a>:</p>
<pre>
&lt;<span class="lolite">video</span> controls poster="video.jpg" width="854" height="480"&gt;
 &lt;<span class="lolite">source</span> src=<span class="hilite">"video.mp4"</span> type="video/mp4"&gt;
 &lt;<span class="lolite">object</span> type="application/x-shockwave-flash" data="player.swf"
         width="854" height="504"&gt;
  &lt;param name="allowfullscreen" value="true"&gt;
  &lt;param name="allowscriptaccess" value="always"&gt;
  &lt;param name="flashvars" value=<span class="hilite">"file=video.mp4"</span>&gt;
  &lt;!--[if IE]>&lt;param name="movie" value="player.swf"&gt;&lt;![endif]--&gt;
  &lt;img src="video.jpg" width="854" height="480" alt="Video"&gt;
  &lt;p>Your browser can't play HTML5 video.
 &lt;<span class="lolite">/object</span>&gt;
&lt;<span class="lolite">/video</span>&gt;
</pre>
<p>The Opera doc nicely carried the unencumbered video torch by including</p>
<pre>
 &lt;<span class="lolite">source</span> src=<span class="hilite">"video.webm"</span> type="video/webm"&gt;
</pre>
<p>after the first &lt;source&gt; child in the &lt;video&gt; container (after the first, because of an iOS WebKit bug, the Opera doc said), but most authors do not encode twice and host two versions of their video (yes, you who do are to be commended; please don&#8217;t spam my blog with comments, you&#8217;re not typical &#8212; and YouTube is neither typical nor yet completely transcoded <a href="#fn1" id="r1">[1]</a>).</p>
<p>
Of course the ultimate fallback content could be a link to a video to download and view in a helper app, but that&#8217;s not &#8220;HTML5 video&#8221; and it is user-hostile (profoundly so on mobile). Flash fallback does manage to blend in with HTML5, modulo the loss of expressiveness afforded by DHTML playback controls.</p>
<p>
Now, consider carefully where we are today.</p>
<p>
Firefox supports only unencumbered formats from Gecko&#8217;s &lt;video&gt; implementation. We rely on Flash fallback that authors invariably write, as shown above. Let that sink in: <em>we, Mozilla, rely on Flash to implement H.264 for Firefox users</em>.</p>
<p>
Adobe has <a href="http://blogs.adobe.com/conversations/2011/11/flash-focus.html">announced</a> that it will not develop Flash on mobile devices.</p>
<p>
In spite of the early 2011 Google blog post, desktop Chrome still supports H.264 from &lt;video&gt;. Even if it were to drop that support, desktop Chrome has a <a href="http://www.pcworld.com/businesscenter/article/250455/for_flash_on_linux_chrome_will_be_users_only_choice.html">custom</a> <a href="http://www.pcworld.com/article/250114/google_chrome_update_fixes_highseverity_vulnerabilities_patches_flash_player.html">patched</a> Flash embedding, so the fallback shown above will work well for almost all users.</p>
<h3>Mobile matters most</h3>
<p>Android stock browsers (all Android versions), and Chrome on Android 4, all support H.264 from &lt;video&gt;. Given the devices that Android has targeted over its existence, where H.264 hardware decoding is by far the most power-efficient way to decode, how could this be otherwise? Google has to compete with Apple on mobile.</p>
<p>
Steve Jobs may have dealt the <a href="http://www.apple.com/hotnews/thoughts-on-flash/">death-blow</a> to Flash on mobile, but he also <a href="http://www.youtube.com/watch?v=904GQGkK84w">championed</a> and invested in H.264, and <a href="http://blogs.fsfe.org/hugo/2010/04/open-letter-to-steve-jobs/">asserted</a> that &#8220;[a]ll video codecs are covered by patents&#8221;. Apple sells a lot of H.264-supporting hardware. That hardware in general, and specifically in video playback quality, is the gold standard.</p>
<p>
Google is in my opinion not going to ship mobile browsers this year or next that fail to play H.264 content that Apple plays perfectly. Whatever happens in the very long run, Mozilla can&#8217;t wait for such an event. Don&#8217;t ask Google why they bought On2 but failed to push WebM to the exclusion of H.264 on Android. The question answers itself.</p>
<p>
So even if desktop Chrome drops H.264 support, Chrome users almost to a person won&#8217;t notice, thanks to Flash fallback. And Apple and Google, along with Microsoft and whomever else might try to gain <em>mobile</em> market share, will continue to ship H.264 support on all their mobile OSes and devices &#8212; hardware-implemented H.264, because that uses far less battery than alternative decoders.</p>
<p>
Here is a chart of H.264 video in HTML5 content on the Web from <a href="http://blog.mefeedia.com/html5-dec-2011">MeFeedia</a>:</p>
<p>
<a href="http://asset2.cbsistatic.com/cnwk.1d/i/tim/2012/03/14/h264-dec-2011.png" target="_blank"><img src="/brendaneich_content/uploads/H264-Dec-2011.png" alt="MeFeedia.com, December 2011"></a></p>
<p>
And here are some charts showing the rise of mobile over desktop from <a href="http://www.economist.com/node/21531109">The Economist</a>:</p>
<p>
<a href="http://media.economist.com/sites/default/files/imagecache/full-width/20111008_SRM111.gif" target="_blank"><img src="/brendaneich_content/uploads/EconomistGrowthOfTheGadgetTrimmed.png" alt="The Economist, October 2011"></a></p>
<p>
These charts show <a href="http://en.wikipedia.org/wiki/Bell%27s_Law_of_Computer_Classes">Bell&#8217;s Law of Computer Classes</a> in action. Bell&#8217;s Law predicts that the new class of computing devices will replace older ones.</p>
<p>
In the face of this shift, Mozilla must advance its <a href="http://www.mozilla.org/about/mission.html">mission</a> to serve users above all other agendas, and to keep the Web &#8212; including the &#8220;Mobile Web&#8221; &#8212; open, interoperable, and evolving.</p>
<h3>What Mozilla is doing</h3>
<p>We have successfully launched <a href="http://www.mozilla.org/b2g/">Boot to Gecko</a> (<a href="http://joshcarpenter.ca/Boot-to-Gecko">B2G)</a> and we&#8217;re preparing to release a <a href="http://starkravingfinkle.org/blog/2012/01/firefox-for-android-after-the-reboot/">new</a> and improved Firefox for Android, to carry our mission to mobile users.</p>
<p>
What should we do about H.264?</p>
<p>
<a href="http://andreasgal.com/">Andreas Gal</a> <a href="https://groups.google.com/group/mozilla.dev.platform/msg/d234e486003d430e?hl=en">proposes</a> to use OS- and hardware-based H.264 decoding capabilities on Android and B2G. That <a href="https://groups.google.com/group/mozilla.dev.platform/browse_frm/thread/fb14de8b9ad84e15?hl=en&#038;scoring=d&#038;">thread</a> has run to over 240 messages, and spawned some online media coverage.</p>
<p>
Some say we should hold out longer for someone (Google? Adobe?) to change something to advance WebM over H.264.</p>
<p>
<a href="http://mozillamemes.tumblr.com/post/19415247873/surely-chrome-will-drop-h-264-lets-just-wait" target="_blank"><img src="/brendaneich_content/uploads/LetsJustWaitMozillaMeme.jpg" alt="MozillaMemes.tumblr.com/post/19415247873"></a></p>
<p>
Remember, dropping H.264 from &lt;video&gt; only on desktop and not on mobile doesn&#8217;t matter, because of Flash fallback.</p>
<p>
Others say we should hold out indefinitely and by ourselves, rather than integrate OS decoders for encumbered video.</p>
<p>
I&#8217;ve heard people blame software patents. I hate software patents too, but software isn&#8217;t even the issue on mobile. Fairly dedicated DSP hardware takes in bits and puts out pixels. H.264 decoding lives completely in hardware now.</p>
<p>
Yes, some hardware also supports WebM decoding, or will soon. Too little, too late for HTML5 &lt;video&gt; as deployed and consumed this year or (for shipping devices) next.</p>
<p>
As I <a href="https://groups.google.com/group/mozilla.dev.platform/msg/8b6711a1418dd813?hl=en">wrote</a> in the newsgroup thread, Mozilla has never ignored users or market share. We do not care <i>only</i> about market share, but ignoring usability and market share can easily lead to extinction. Without users our mission is meaningless and our ability to affect the evolution of open standards goes to zero.</p>
<p>
Clearly we have principles that prohibit us from abusing users for any end (e.g., by putting ads in Firefox&#8217;s user interface to make money to sustain ourselves). But we have never rejected encumbered formats handled by plugins, and OS-dependent H.264 decoding is not different in kind from Flash-dependent H.264 decoding in my view.</p>
<p>
<strong>We will not require anyone to pay for Firefox</strong>. We will not burden our downstream source redistributors with royalty fees. We may have to continue to fall back on Flash on some desktop OSes. I&#8217;ll write more when I know more about desktop H.264, specifically on Windows XP.</p>
<p>
What I do know for certain is this: H.264 is absolutely required right now to compete on mobile. I do not believe that we can reject H.264 content in Firefox on Android or in B2G and survive the shift to mobile.</p>
<p>
Losing a battle is a bitter experience. I won&#8217;t sugar-coat this pill. But we must swallow it if we are to succeed in our mobile initiatives. Failure on mobile is too likely to consign Mozilla to decline and irrelevance. So I am fully in favor of Andreas&#8217;s proposal.</p>
<h3>Our mission continues</h3>
<p>Our <a href="http://www.mozilla.org/about/mission.html">mission</a>, to promote openness, innovation, and opportunity on the Web, matters more than ever. As I said at SXSW in 2007, it obligates us to develop and promote unencumbered video. We lost one battle, but the war goes on. We will always push for open, unencumbered standards first and foremost.</p>
<p>
In particular we must fight to keep <a href="http://www.webrtc.org/">WebRTC</a> unencumbered. Mozilla and Opera also lost the earlier skirmish to mandate an unencumbered default format for HTML5 &lt;video&gt;, but WebRTC is a new front in the long war for an open and unencumbered Web.</p>
<p>
We are researching downloadable JS decoders via <a href="http://github.com/mbebenita/Broadway">Broadway.js</a>, but fully utilizing parallel and dedicated hardware from JS for battery-friendly decoding is a ways off.</p>
<p>
Can we win the long war? I don&#8217;t know if we&#8217;ll see a final victory, but we must fight on. Patents expire (remember the <a href="http://en.wikipedia.org/wiki/Graphics_Interchange_Format#Unisys_and_LZW_patent_enforcement">LZW</a> patent?). They can be invalidated. (Netscape paid to do this to certain obnoxious patents, based on prior art.) They can be worked around. And patent law can be reformed.</p>
<p>
Mozilla is here for the long haul. <strong>We will never give up, never surrender</strong>.</p>
<p>
/be</p>
<section>
<p id="fn1"><a href="#r1">[1]</a> Some points about WebM on YouTube vs. H.264:</p>
<ul>
<li>Google has at best transcoded only about half the videos into WebM. E.g., <a href="http://www.youtube.com/results?search_query=cat&#038;oq=cat&#038;aq=f&#038;aqi=g10&#038;aql=&#038;gs_sm=3&#038;gs_upl=63375l63797l0l64594l3l3l0l0l0l0l169l380l1.2l3l0">this YouTube search</a> for &#8220;cat&#8221; gives ~1.8M results, while the same one <a href="http://www.youtube.com/results?search_query=cat&#038;oq=cat&#038;aq=f&#038;aqi=g10&#038;aql=&#038;gs_sm=3&#038;gs_upl=63375l63797l0l64594l3l3l0l0l0l0l169l380l1.2l3l0&#038;webm=1">for WebM videos</a> gives 704K results.
<li>WebM on YouTube is presented only for videos that lack ads, which is a shrinking number on YouTube. Anything monetizable (i.e., popular) has ads and therefore is served as H.264.
<li>All this is moot when you consider mobile, since there is no Flash on mobile, and as of yet no WebM hardware, and Apple&#8217;s market-leading position.
</ul>
</p>
</section>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2012/03/video-mobile-and-the-open-web/feed/</wfw:commentRss>
		<slash:comments>72</slash:comments>
		</item>
		<item>
		<title>Community-Prioritized Web Standards</title>
		<link>http://brendaneich.com/2012/02/community-prioritized-web-standards/</link>
		<comments>http://brendaneich.com/2012/02/community-prioritized-web-standards/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 13:14:17 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1875</guid>
		<description><![CDATA[Mozilla is happy to support Facebook in forming a Core Mobile Web Platform W3C Community Group in which to curate prioritized, tiered lists of emerging and de facto standards that browsers should support in order for the Web to compete with native application stacks on mobile devices. The W3C Community Groups do not create normative [...]]]></description>
			<content:encoded><![CDATA[<p>Mozilla is happy to support <a href="http://www.facebook.com/">Facebook</a> in <a href="http://developers.facebook.com/blog/post/2012/02/27/helping-improve-the-mobile-web/">forming</a> a <a href="http://www.w3.org/community/coremob/">Core Mobile Web Platform</a> <a href="http://www.w3.org/community/about/#cg">W3C Community Group</a> in which to curate <i>prioritized</i>, <i>tiered</i> lists of emerging and <i>de facto</i> standards that browsers should support in order for the Web to compete with native application stacks on mobile devices.</p>
<p>The W3C Community Groups do not create normative specifications; their work is informative at most [UPDATED per Ian Jacob's comment]. However I believe they can add significant value, especially by helping developers make their priorities clear to the implementors who tend to control the normative specs (W3C Recommendations).</p>
<p>Standards-making like law-making is definitely <a href="http://en.wikiquote.org/wiki/John_Godfrey_Saxe">sausage-making</a>. How could it be otherwise, with intensely competitive companies trying to work together?</p>
<p>On top of this, consider how conflicted many standards bodies are by pay-to-play, however muted and tamed by &#8220;process&#8221;. Anyone can join with enough money, and inject a divergent agenda or random noise into the process.</p>
<p>One inevitable outcome of these conflicts is too many proposed and even finalized standards for all browsers possibly to implement correctly and completely. <a href="http://www.quotationspage.com/quote/473.html">The nice thing about standards is&#8230;</a>.</p>
<p>Who is best situated to advise implementors (mainly browser vendors) on which standards to prototype and finalize first? In my view, developers. But of course you can&#8217;t ask developers questions to answer with one voice. Developer communities must acclaim their own leaders, who then speak to standards bodies.</p>
<p>Last year, Facebook <a href="http://www.cmswire.com/cms/web-cms/w3c-adds-facebook-sony-netflix-as-members-011213.php">joined the W3C</a>. I thought at the time &#8220;there is a company with skin in the Web content game, not only for pages but especially for apps.&#8221; Facebook relies heavily on HTML5, CSS, and JS. Facebook has no browser in the market to pull focus or inject asymmetric browser/service integration agendas.</p>
<p>And Facebook has hired long-time Open Web developers who have risen to be leaders in their communities: <a href="https://twitter.com/#!/jamespearce">James Pearce</a> and <a href="https://twitter.com/#!/tobie">Tobie Langel</a>.</p>
<p>So I encourage everyone interested in helping to join with James, Tobie and others in the new <a href="http://www.w3.org/community/coremob/">Core Mobile Web Platform community group</a>. Together we can get the specs that Web developers deserve, completed in the right order with multiple interoperating implementations.</p>
<p>/be</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2012/02/community-prioritized-web-standards/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Mobile Web API Evolution</title>
		<link>http://brendaneich.com/2012/02/mobile-web-api-evolution/</link>
		<comments>http://brendaneich.com/2012/02/mobile-web-api-evolution/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 05:11:27 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1819</guid>
		<description><![CDATA[Ragavan Srinivasan&#8217;s post about the forthcoming Mozilla Marketplace for Open Web Apps inspired me to write about Mozilla&#8217;s surging Web and Device API standards work. A bit of background. Mozilla has always contributed to web standards, going back to the start of the project. We co-founded the WHAT-WG to kick off HTML5. As readers of [...]]]></description>
			<content:encoded><![CDATA[<p>Ragavan Srinivasan&#8217;s <a href="http://blog.mozilla.com/blog/2012/02/22/mozilla-marketplace-opening-for-app-submissions-soon/">post about the forthcoming Mozilla Marketplace</a> for <a href="https://apps.mozillalabs.com/">Open Web Apps</a> inspired me to write about Mozilla&#8217;s surging Web and Device API standards work.</p>
<p>A bit of background. Mozilla has always contributed to web standards, going back to the start of the project. We <a href="http://brendaneich.com/2004/06/the-non-world-non-wide-non-web/">co-founded</a> the <a href="http://www.whatwg.org/">WHAT-WG</a> to kick off <a href="http://dev.w3.org/html5/spec/Overview.html">HTML5</a>. As readers of this blog know, we are a leader in <a href="http://ecmascript.org/">JS standardization</a>. We have some of the top <a href="http://dbaron.org/">CSS</a> and <a href="http://robert.ocallahan.org/">layout</a> experts in the world.</p>
<p>In the last eight months, our efforts to extend the web standards to include new APIs needed to build compelling apps and OS components on mobile devices have really caught fire. <a href="http://wiki.mozilla.org/B2G">B2G</a> and <a href="https://wiki.mozilla.org/Apps/Roadmap">Open Web Apps</a> are the fuel for this fire.</p>
<p>So I thought I would compile a list of emerging APIs to which we&#8217;ve contributed. In citing Mozillans I do not mean to minimize the efforts of standardization colleagues at Google, Microsoft, Nokia, Opera, the W3C and elsewhere. Standards are a multi-vendor effort (although excluding WebGL [see UPDATE below] one shiny name is conspicuously absent from this list).</p>
<p>The Mozilla contributions are worth noting both to acknowledge the individuals involved, and to highlight how Mozilla is championing device APIs for the web without having a native application stack blessed with such APIs on offer. We see the Web as quickly evolving to match native stacks. We have no other agenda than improving the Web to improve its users&#8217; lives, including Web developers&#8217; lives &#8212; especially mobile users and developers.</p>
<p>As always, standards in progress are subject to change, yet require prototype implementation and user-testing. Mozilla remains committed to playing fairly by not forging de-facto standards out of prototypes, rather proposing before disposing and in the end tracking whatever is standardized.</p>
<p>Here is the list, starting with some 2011-era work:</p>
<ul>
<li><a href="http://dev.w3.org/geo/api/spec-source.html">Geolocation</a>, with Google contributing the editor and Firefox (thanks to <a href="http://www.mozilla.org/en-US/press/bios/#bio-sullivan">Jay Sullivan</a> leading the charge) implementing early.
<li><a href="https://www.khronos.org/registry/webgl/specs/1.0/">WebGL</a> (UPDATE: Chris Marrin of Apple edited) and <a href="http://www.khronos.org/registry/typedarray/specs/latest/">typed arrays</a>.
<li><a href="https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html">Gamepad API</a>. Co-editor: Ted Mielczarek. Mozillans are also contributing to <a href="http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html">Pointer Lock</a>.
<li><a href="http://dvcs.w3.org/hg/screen-orientation/raw-file/tip/Overview.html">Screen Orientation</a>. Editor: Mounir Lamouri.
<li><a href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html">navigator.getUserMedia</a>. Co-editor: Anant Narayanan
<li><a href="http://www.w3.org/TR/2011/WD-battery-status-20111129/">Battery Status</a> (in Last Call). From the Acknowledgements:<br />
<blockquote><p>Big thanks to the Mozilla WebAPI team for their invaluable feedback based on prototype implementations.</p></blockquote>
<li><a href="http://www.w3.org/TR/2011/WD-html-media-capture-20110414/">Media Capture</a>. Fabrice Desré prototype-implemented in Gecko.
<li><a href="http://dev.w3.org/2009/dap/netinfo/">Network API</a>. Editor: Mounir Lamouri.
<li><a href="https://wiki.mozilla.org/WebAPI/WebTelephony">Web Telephony</a>. Ben Turner, Jonas Sicking, Philipp von Weitershausen.
<li><a href="https://wiki.mozilla.org/WebAPI/WebSMS">Web SMS</a>. Mounir Lamouri, Jonas Sicking.
<li><a href="http://www.w3.org/TR/2012/WD-vibration-20120202/">Vibration</a>. From the Acknowledgements:<br />
<blockquote><p>The group is deeply indebted to Mounir Lamouri, Jonas Sicking, and the Mozilla WebAPI team in general for providing the WebVibrator prototype as an initial input.</p></blockquote>
<li><a href="http://www.w3.org/TR/FileAPI/">File API</a>. Editors: Arun Ranganathan, Jonas Sicking.
<li><a href="http://www.w3.org/TR/IndexedDB/">IndexedDB</a>. Editors includes Jonas Sicking.
</ul>
<p>I did not list most of the HTML5 and Web API work aimed at Desktop Firefox, to focus on the new mobile-oriented additions. There&#8217;s more to say, including about <a href="http://www.cs.berkeley.edu/~afelt/">bundled-permission follies</a> and how to <a href="http://robert.ocallahan.org/2011/06/permissions-for-web-applications_30.html">weave</a> permission-granting (with memorization) into interactions, but not here.</p>
<p>One last note. The <a href="http://www.alistapart.com/articles/the-vendor-prefix-predicament-alas-eric-meyer-interviews-tantek-celik/">CSS vendor prefix brouhaha</a> had, among many salutary effects, the benefit of shining light on an important requirement of competitive mobile web development: CSS style properties such as <code>-webkit-animation-*</code>, however you spell them, must have fast and beautiful implementations across devices for developers to find them usable: 60Hz, artifact-free rendering under touch control. This requires such work as <a href="https://wiki.mozilla.org/Platform/GFX/OffMainThreadCompositing">off-main-thread compositing</a> and <a href="https://wiki.mozilla.org/Gecko:Layers">GL layers</a>.</p>
<p>This is a high technical bar, but we are in the process of meeting it in the latest Firefox for Android and B2G builds, thanks to hard work from many people, especially <a href="http://pcwalton.blogspot.com/">Patrick Walton</a>, <a href="http://robert.ocallahan.org/">Robert O&#8217;Callahan</a>, <a href="http://blog.mozilla.com/cjones/">Chris Jones</a>, and <a href="http://andreasgal.com/">Andreas Gal</a>. Onward!</p>
<p>/be</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2012/02/mobile-web-api-evolution/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>JSConf.eu</title>
		<link>http://brendaneich.com/2011/10/jsconf-eu/</link>
		<comments>http://brendaneich.com/2011/10/jsconf-eu/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 00:33:47 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1660</guid>
		<description><![CDATA[JSConf.eu 2011 was terrific, bigger and juicier than last year, with a strong sense of community felt from reject.js pre-conf: to start: to finish: Chris Williams makes a moving plea for an end to negativity, meaning trolling, flaming, mocking, and hating in online media. This sounds utopian, like &#8220;an end to history&#8221;. But it is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jsconf.eu/2011/">JSConf.eu 2011</a> was terrific, bigger and juicier than last year, with a strong sense of community felt from <a href="http://vimeo.com/29809448">reject.js pre-conf</a>:</p>
<p><iframe src="http://player.vimeo.com/video/29809448?title=0&amp;byline=0&amp;portrait=0" width="480" height="270" frameborder="0" allowFullScreen></iframe></p>
<p>to <a href="http://vimeo.com/29873668?utm_source=javascriptweekly&#038;utm_medium=email">start</a>:</p>
<p><iframe src="http://player.vimeo.com/video/29873668?title=0&amp;byline=0&amp;portrait=0" width="480" height="270" frameborder="0" allowFullScreen></iframe></p>
<p>to <a href="http://jsconf.eu/2011/an_end_to_negativity.html">finish</a>:</p>
<p><iframe src="http://blip.tv/play/hq0Kgtf%2BcAI.html" width="480" height="300" frameborder="0" allowfullscreen></iframe></p>
<p><a href="https://twitter.com/#!/voodootikigod">Chris Williams</a> makes a moving plea for an end to negativity, meaning trolling, flaming, mocking, and hating in online media.</p>
<p>This sounds utopian, like &#8220;an end to history&#8221;. But it is good as an aspiration, a constant reminder, since we&#8217;ve all seen how many people tend to be more negative online than they are in person. This isn&#8217;t just a matter of isolated individual behavior, free of cultural feedback loops. The <a href="http://en.wikipedia.org/wiki/Marshall_McLuhan">new media</a> reinforce <a href="http://en.wikipedia.org/wiki/Global_Village_%28term%29">tribalism</a>.</p>
<p>However, it is hard to be positive about <a href="http://www.toyota.com/itsacar/">some</a> <a href="http://www.toyota.com/itsacar/getchrome/">things</a>. I will persevere&#8230;.</p>
<p>JSConf.eu had too many <a href="https://docs.google.com/spreadsheet/pub?hl=en_US&#038;hl=en_US&#038;key=0AhO5JVicsAJOdDgzSHhCNVZscGpQcHE2LWpnaGhyUXc&#038;output=html">awesome talks</a> to cover without bi-locating. Mozillans were well-represented, including <a href="https://twitter.com/#!/dmandelin">dmandelin</a> and <a href="https://twitter.com/#!/iamdvander">dvander</a> on <a href="http://jsconf.eu/2011/javascript_jits.html">JavaScript</a> <a href="http://www.slideshare.net/iamdvander/js-math-jiting-jsconfeu">JITs</a>, <a href="https://twitter.com/#!/marijnjh">Marijn Haverbeke</a> on <a href="http://jsconf.eu/2011/dom_implementation_techniques.html">DOM implementation techniques</a>, <a href="https://twitter.com/#!/codepo8">Chris Heilmann</a> on <a href="http://www.wait-till-i.com/2011/10/05/jsconf-eu-community-js-reloaded-how-to-rock-as-a-movement/">Community JS reloaded &#8211; how to rock as a movement</a>, and <a href="https://twitter.com/andreasgal">Andreas Gal</a> on <a href="https://github.com/andreasgal/pdf.js">PDF.js</a>. <a href="https://twitter.com/#!/jmswisher">Janet Swisher</a> led the <a href="http://jsconf.eu/2011/mozilla_the_jsconf_eu_hacker_l.html">MDC doc sprint</a> in the Hacker Lounge.</p>
<p>I would like to single out <a href="http://syntensity.blogspot.com/">Alon Zakai</a>&#8216;s <a href="http://syntensity.com/static/jsconf_eu_Emscripten_lo.pdf">Emscripten talk</a>. <a href="https://github.com/kripken/emscripten">Emscripten</a> is an <a href="http://llvm.org/">LLVM</a>-to-JS compiler, which means it enables compiling C, C++, and Objective-C (and other languages with LLVM front ends) to JS. What&#8217;s more, interpreters written in C for Python, Ruby, and Lua have been compiled and <a href="http://repl.it">hosted</a> on the web.</p>
<p>Alon&#8217;s results are impressive, with lots of room for more wins. At JSConf.eu, jaws dropped and eyes were opened.</p>
<p>For my talk, I reprised some <a href="/2011/09/capitoljs-rivertrail/">CapitolJS</a> material, including the <a href="http://www.youtube.com/watch?v=QzOIydC2Has&#038;eurl=http%3A%2F%2Fbrendaneich.com%2F2011%2F09%2Fcapitoljs-rivertrail%2F&#038;feature=player_embedded">RiverTrail</a> demo, which won loud and enthusiastic applause when I clicked on the &#8220;Parallel&#8221; button.</p>
<p>(A few people asked afterward about whether the graphics was running on one of four cores. I&#8217;ll repeat the answer here: the <a href="https://github.com/RiverTrail/RiverTrail/tree/master/examples/idf-demo">particle system demo</a> uses <a href="http://www.khronos.org/webgl/">WebGL</a> targeting the GPU for rendering, and the four CPUs&#8217; <a href="http://en.wikipedia.org/wiki/SSE4">vector units</a> for n-body solving. All from deadlock-free, data-race-free, seemingly single-threaded JS.)</p>
<p>Here&#8217;s the video of my talk:</p>
<p><iframe src="http://blip.tv/play/hq0KgtmjAgI.html" width="480" height="300" frameborder="0" allowfullscreen></iframe><embed type="application/x-shockwave-flash" src="http://a.blip.tv/api.swf#hq0KgtmjAgI" style="display:none"></embed></p>
<p>The amazing <a href="https://twitter.com/#!/annalena">Anna Lena Schiller</a> created infographics for all the talks, on the spot &#8212; a truly impressive display of concentration and stamina. Here&#8217;s the one she did for my talk:</p>
<p><img src="/brendaneich_content/uploads/JSConf.eu-2011-InfoGraphic.jpg" height="304" width="500"></p>
<p>And here are the updated and new slides I presented, showing ES6 work-in-progress (none of it final, so don&#8217;t panic) and covering some current controversies.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.007.png" height="432" width="576"></p>
<p>From <a href="https://mail.mozilla.org/pipermail/es-discuss/2011-October/016997.html">recent</a> <a href="https://mail.mozilla.org/pipermail/es-discuss/2011-October/017001.html">es-discuss</a> <a href="https://mail.mozilla.org/pipermail/es-discuss/2011-October/017014.html">messages</a>, I&#8217;m afraid that classes are on their way out of ES6. This seems a shame, and avoidable. In hindsight, we did not have all class advocates working in concert on the hard issues last year and earlier this year. But we also do not agree on what&#8217;s required for ES6, and some on TC39 view <a href="https://mail.mozilla.org/pipermail/es-discuss/2011-June/015559.html">minimizing</a> as future-hostile.</p>
<p>To be blunt, we lost some &#8220;classes&#8221; advocates who work for Google to <a href="http://dartlang.org/">Dart</a>. Others at Google on TC39 seem to want more out of ES6 classes than even Dart guarantees (see the future-hostile point above).</p>
<p>I&#8217;m not slamming Google as a company here, since it does still support people working on JS in TC39. I respect the people involved and believe they&#8217;re for the most part making their own choices. But Dart and other unrelated Google agenda items do impose clear and significant opportunity costs on Google&#8217;s standards actiivities.</p>
<p>To remain positive per &#8220;An End to Negativity&#8221;, I&#8217;ll simply conclude that we TC39ers should pay attention to Dart now that it is out, even though we&#8217;ve lost time and potential contributions.</p>
<p>The famous Tony Hoare quote that <a href="https://mail.mozilla.org/pipermail/es-discuss/2011-October/016966.html">Bill Frantz</a> cited, which argues for deferring classes, is this:</p>
<blockquote><p>When any new language design project is nearing completion, there is always a mad rush to get new features added before standardization. The rush is mad indeed, because it leads into a trap from which there is no escape. A feature which is omitted can always be added later, when its design and its implications are well understood. A feature which is included before it is fully understood can never be removed later.<br />
<cite> From C.A.R.Hoare&#8217;s 1980 ACM Turing Award Lecture</cite></p></blockquote>
<p>I agree with <a href="https://mail.mozilla.org/pipermail/es-discuss/2011-October/017007.html">Erik Arvidsson</a> that &#8220;[b]y not providing [class] syntax we are continuing to encourage a million incompatible &#8216;class&#8217; libraries.&#8221; I&#8217;m with Erik: I would still like to see TC39 agree on minimal classes. But not at any cost.</p>
<p>Onward to new proposals with sometimes-tentative syntax. I&#8217;m continuing to &#8220;live in a fishbowl&#8221; by showing these proposals, even though doing so risks drive-by misinterpretation that we have finalized the sum of all proposals.</p>
<p>So, please don&#8217;t freak out. Not all of this will make it as proposed. We may also make cuts. But it&#8217;s important to address the use-cases motivating these proposals, take in the fullness of the problem space and potential solutions, and do the <a href="/brendaneich_content/uploads/TXJS-Talk.008.png">hermeneutic spiral</a>.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.008.png" height="432" width="576"></p>
<p>Apart from font issues that make <code>&lt;|</code> look lopsided or non-triangular, this proposal looks good. It replaces the main legitimate use-case for assigning to <code>__proto__</code>: presetting the prototype link in an object literal.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.009.png" height="432" width="576"></p>
<p>Unlike <code>Object.extend</code>, <code>.{</code> copies only &#8220;own&#8221; properties from its right-hand-side object literal, and (this is a crucial difference) it also copies properties with <a href="wiki.ecmascript.org/doku.php?id=harmony:private_name_objects">private name object</a> keys (which are non-enumerable by definition). For example, <code>base.{[privateName]: value, publicName: value2}</code> given a private name object reference denoted <code>privateName</code> in scope.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.010.png" height="432" width="576"></p>
<p><a href="http://www.norvig.com/design-patterns/">Design patterns</a> point to programming language bugs. Nevertheless, this class pattern shows clever work by <a href="http://www.wirfs-brock.com/allen/">Allen Wirfs-Brock</a>, decomposing classes-as-sugar into chained operator expressions. It&#8217;s still a bit verbose and error-prone in my opinion, and cries out for the ultimate sugar of minimal class syntax (if only we could agree on that).</p>
<p><img src="/brendaneich_content/uploads/JSLOL.011.png" height="432" width="576"></p>
<p>Much of the <a href="http://dartlang.org/">Dart</a> class syntax design looks good to me. Possibly TC39 can agree to adopt it, with necessary adjustments. It would still be sugar for constructors and prototypes.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.012.png" height="432" width="576"></p>
<p><a href="wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax">Arrow function syntax</a> faces an uphill battle due to the combination of TC39&#8242;s agreement to <a href="https://mail.mozilla.org/pipermail/es-discuss/2008-October/007888.html">future-proof</a> by having an unambiguous <a href="http://en.wikipedia.org/wiki/LR%281%29">LR(1)</a> grammar (after ASI and with lookahead restrictions); mixed with the comma expression, <code>(a, b, c)</code>, which I copied into JS&#8217;s grammar straight from C (not from Java, which left it out, instead providing comma-separated special forms in a few contexts, e.g. <code>for(;;)</code> loop heads). You can&#8217;t have both, and we do not want to remove the comma expression in Harmony.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.013.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/JSLOL.014.png" height="432" width="576"></p>
<p>I&#8217;m quite in favor of <a href="wiki.ecmascript.org/doku.php?id=strawman:block_lambda_revival">block-lambdas</a>, and they meet formal approval from TC39&#8242;s strictest grammarian. Some still object to them as an alien DNA injection from Ruby and Smalltalk, both syntactically and (with <a href="http://gafter.blogspot.com/2006/08/tennents-correspondence-principle-and.html">Tennent Correspondence Principle</a> conformance regarding <code>return</code>, <code>break</code>, <code>continue</code>, and <code>this</code>) semantically.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.015.png" height="432" width="576"></p>
<p>At this point, ES6 has no shorter function syntax. This seems like a loss, and fixable, to me. Your comments welcome, especially if they make novel distinctions that help forge consensus.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.016.png" height="432" width="576"></p>
<p>During the talk and Q&#038;A, I recounted how the <a href="http://www.whatwg.org/">WHAT-WG</a> was <a href="/2004/06/the-non-world-non-wide-non-web/">created</a> to counteract a standards body gone wrong (the 2004-era W3C). I then raised the idea of a community-based group, a &#8220;JS-WG&#8221;, to augment the much healthier but still under-staffed <a href="/2011/08/my-txjs-talk-twitter-remix/">Ecma TC39 committee</a>.</p>
<p>Besides floating more ideas (really, the point is not to bikeshed endlessly or take in too many proposals to digest), a JS-WG worth organizing might actually develop draft specs and prototype implementation patches for JavaScriptCore, SpiderMonkey, and V8. The maintainers of those engines could use the help, and with patches and patched builds, we could scale up user testing beyond what&#8217;s in the cards now.</p>
<p><img src="/brendaneich_content/uploads/JSLOL.017.png" height="432" width="576"></p>
<p>I know it&#8217;s hard to believe, but people are finally realizing that with V8 prototyping alongside SpiderMonkey, ES6 is happening. It&#8217;ll be prototyped in pieces. I hope many will be &#8220;on by default&#8221; (e.g., not under a flag in Chrome) well before the new edition is standardized (end of 2013). That&#8217;s how we roll in Firefox with SpiderMonkey.</p>
<p>/be</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2011/10/jsconf-eu/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>CapitolJS, RiverTrail</title>
		<link>http://brendaneich.com/2011/09/capitoljs-rivertrail/</link>
		<comments>http://brendaneich.com/2011/09/capitoljs-rivertrail/#comments</comments>
		<pubDate>Sat, 24 Sep 2011 02:11:54 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1546</guid>
		<description><![CDATA[I took time away from the Mozilla all-hands last week to help out on-stage at the Intel Developer Forum with the introduction of RiverTrail, Intel&#8217;s technology demonstrator for Parallel JS &#8212; JavaScript utilizing multicore (CPU) and ultimately graphics (GPU) parallel processing power, without shared memory threads (which suck). Then over the weekend, I spoke at [...]]]></description>
			<content:encoded><![CDATA[<p>I took time away from the Mozilla all-hands last week to help out on-stage at the <a href="http://www.intel.com/idf/">Intel Developer Forum</a> with the introduction of <a href="http://blogs.intel.com/research/2011/09/pjs.php">RiverTrail</a>, Intel&#8217;s technology demonstrator for Parallel JS &#8212; JavaScript utilizing multicore (CPU) and ultimately graphics (GPU) parallel processing power, without shared memory <a href="/2007/02/threads-suck/">threads (which suck)</a>.</p>
<p>Then over the weekend, I spoke at <a href="http://capitoljs.com/schedule.html">CapitolJS</a>, talking about ES6 and Dart, and demo&#8217;ing RiverTrail to the JS faithful. As usual, I&#8217;ll narrate <a href="http://www.slideshare.net/BrendanEich/capitol-js">my slides</a>, but look out for something new at the end: a screencast showing the RiverTrail IDF demo.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.001.png" height="432" width="576"></p>
<p>I had a lot to cover in a half-hour (a good talk-time in my view &#8212; we&#8217;ll see how the video comes out, but I found it invigorating). CapitolJS had a higher-than-<a href="http://jsconf.us/">JSConf</a> level of newcomers to JS in attendance, so I ran through material that should be familiar to readers of this blog, presented here without much commentary:</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.002.png" height="432" width="576"></p>
<p>The meaning of my color-coding should be intuitively obvious <img src='http://brendaneich.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.003.png" height="432" width="576"></p>
<p>BTW, <a href="http://github.com/andreasgal/dom.js">dom.js</a>, with its <a href="/2010/11/proxy-inception/">Proxy</a> usage under the hood, is going great, with <a href="https://twitter.com/#!/__DavidFlanagan">David Flanagan</a> and <a href="https://twitter.com/#!/donovanpreston">Donovan Preston</a> among others hacking away on it, and (this is important) providing <a href="http://lists.w3.org/Archives/Public/public-script-coord/">feedback</a> to <a href="http://www.w3.org/TR/WebIDL/">WebIDL</a>&#8216;s editor, <a href="https://twitter.com/#!/heycam/">Cameron McCormack</a>.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.004.png" height="432" width="576"></p>
<p>Here I must add the usual caveat that &#8220;ES6&#8243; might be renumbered. Were I more prudent, I&#8217;d call it &#8220;ES.next&#8221;, but it&#8217;s highly likely to be the 6th edition, and you&#8217;re all sophisticated close readers of the spec and its colorful history, right?</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.005.png" height="432" width="576"></p>
<p>The SpiderMonkey bug tracking <a href="http://wiki.ecmascript.org/doku.php?id=harmony:binary_data">binary data</a> prototype implementation is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=578700">bug 578700</a>.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.006.png" height="432" width="576"></p>
<p>The SpiderMonkey bug tracking <a href="http://wiki.ecmascript.org/doku.php?id=harmony:quasis">quasi-literal</a> prototype implementation is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=688857">bug 688857</a>.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.007.png" height="432" width="576"></p>
<p>The <code>@</code> notation is actually &#8220;out&#8221; for ES6, per the July meeting (see <a href="https://mail.mozilla.org/pipermail/es-discuss/2011-August/016188.html">notes</a>). Thanks to <a href="http://wiki.ecmascript.org/doku.php?id=harmony:private_name_objects">private name objects</a> and <a href="http://wiki.ecmascript.org/lib/exe/fetch.php?id=harmony%3Aprivate_name_objects&#038;cache=cache&#038;media=harmony:private-name-alternatives.pdf">object literal extensions</a> (see middle column), private access syntax is factored out of classes. Just use <code>this[x]</code> or <code>p[x]</code>, or (in an object literal for the computed property name, which need not be a private name) <code>[x]: </code><i>value</i>.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.008.png" height="432" width="576"></p>
<p>As close to CoffeeScript as I can get them, given JS&#8217;s grammar and curly-brace (not indentation-based) block structure.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.009.png" height="432" width="576"></p>
<p>Ruby-esque, Smalltalk is the grandfather.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.010.png" height="432" width="576"></p>
<p>You know you want it.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.011.png" height="432" width="576"></p>
<p>I&#8217;ve been clear about preferring <a href="http://wiki.ecmascript.org/doku.php?id=strawman:block_lambda_revival">block-lambdas</a> over <a href="http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax">arrows</a> for their added semantic value and compelling syntax mimicking control statements. It&#8217;s good to hear <a href="https://twitter.com/#!/jashkenas">@jashkenas</a> agree in effect.</p>
<p><a href="https://twitter.com/#!/mikeal">@mikeal</a> is right that JS syntax is not a problem for some (perhaps many) users. For others, it&#8217;s a hardship. Adding block-lambdas helps that cohort, adds value for code generators (see Harmony Goals above), and on balance improves the language in my view. It won my straw show-of-hands poll at CapitolJS against all of arrows, vaguer alternatives, and doing nothing.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.012.png" height="432" width="576"></p>
<p>The epic <a href="http://news.ycombinator.com/item?id=2982256">Hacker News</a> thread on my last blog post in relation to Dart needs its own <a href="http://en.wikipedia.org/wiki/Baedeker">Baedeker</a>. For now I&#8217;ll just note that Dart and the politics evident in the memo are not making some of my standards pals who work for other browser vendors happy. Google may fancy itself the new Netscape, but it doesn&#8217;t have the market share to pull off proprietary power-move <i>de facto</i> standards.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.013.png" height="432" width="576"></p>
<p>The <a href="http://markmail.org/message/uro3jtoitlmq6x7t">leaked memo</a> makes some observations I agree with, some unbacked assertions about unfixable JS problems that TC39 work in progress may falsify this year, and a few implicit arguments that are just silly on their face.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.014.png" height="432" width="576"></p>
<p>Still, I think we should react to valid complaints about JS, whatever the source. The <code>number</code> type has well-known <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=5856">usability</a> and (in practice, in spite of aggressively optimizing JIT-compiling VMs) <a href="http://blog.mozilla.com/dmandelin/2011/06/16/know-your-engines-at-oreilly-velocity-2011/">performance</a> problems.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.015.png" height="432" width="576"></p>
<p>The last bullet shows pragmas for switching default numeric type and arithmetic evaluation regime. This would have to affect <code>Number</code> and <code>Math</code>, but lexically &#8212; no dynamic scope. Still a bit hairy, and not yet on the boards for Harmony. But perhaps it ought to be.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.016.png" height="432" width="576"></p>
<p>Links: [<a href="http://blog.mozilla.com/dmandelin/2011/06/16/know-your-engines-at-oreilly-velocity-2011/">it's true</a>], [<a href="https://wiki.mozilla.org/TypeInference">SpiderMonkey Type Inference</a>].</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.017.png" height="432" width="576"></p>
<p>Coordinated strawman prototyping in SpiderMonkey and V8 is a tall order. Perhaps we need a separate <a href="http://jswg.org/">jswg.org</a>, as whatwg.org is to the w3c, to run ahead? I&#8217;ve been told I should be BDFL of such an org. Would this work? Comments welcome.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.018.png" height="432" width="576"></p>
<p>Remember, <a href="http://en.wikipedia.org/wiki/GPU">ridiculously</a> <a href="http://en.wikipedia.org/wiki/Multi-core_processor">parallel</a> processing power is coming, if not already present, on your portable devices. It&#8217;s here on your laptops and desktops. The good news is that JS can exploit it without your having to deal with data races and deadlocks.</p>
<p><a href="http://github.com/RiverTrail/RiverTrail">RiverTrail</a> is a <a href="http://github.com/mozilla/narcissus">Narcissus</a>-based JS to <a href="http://en.wikipedia.org/wiki/OpenCL">OpenCL</a> compiler, packaged as a Firefox add-on. It demonstrates the utility of a new <code>ParallelArray</code> built-in, based on <a href="http://www.khronos.org/registry/typedarray/specs/latest/">typed arrays</a>. The JS-to-OpenCL compiler automatically multicore-short-vectorizes your JS for you.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.019.png" height="432" width="576"></p>
<p>As noted in the previous slide, because the <code>ParallelArray</code> methods compile to parallelized folds (see <a href="http://en.wikipedia.org/wiki/Guy_L._Steele,_Jr.">Guy Steele&#8217;s</a> excellent <a href="http://vimeo.com/6624203">ICFP 2009 keynote</a>), associative operations will be reordered, resulting in small non-deterministic floating point imprecision errors. This won&#8217;t matter for graphics code in general, and it&#8217;s an inevitable cost of business using parallel floating point hardware.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.020.png" height="432" width="576"></p>
<p>The code looks like typical JS, with no hairy callbacks, workers, or threads. It requires thinking in terms of immutable trees and reductions or other folds, but that is not a huge burden. As Guy&#8217;s talk makes plain, learning to program this way is the key to parallel speedups.</p>
<p>Here is my screencast of the demo. Alas, since RiverTrail currently targets the <a href="http://en.wikipedia.org/wiki/Intel_Core_i7">CPU</a> and its short vector unit (<a href="http://en.wikipedia.org/wiki/SSE4">SSE4</a>), and my screencast software uses the same parallel hardware, the frame rate is not what it should be. But not to worry, we&#8217;re working on GPU targeting too.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/QzOIydC2Has" allowfullscreen></iframe></p>
<p>At CapitolJS and without <a href="http://www.telestream.net/screen-flow/">ScreenFlow</a> running, I saw frame rates above 35 for the Parallel demo, compared to 3 or 2 for Sequential.</p>
<p>The point of a technology demonstrator is to show where real JS engines can go. Automatic parallelization of <code>ParallelArray</code>-based code can be done by next year&#8217;s JS engines, based on this year&#8217;s Firefox add-on. We&#8217;re very close to exploiting massively parallel hardware from JS, without having to write <a href="http://webcl.nokiaresearch.com/">WebCL</a> and risk terrible safety and DoS bugs.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.021.png" height="432" width="576"></p>
<p>To close, I sought inspiration from Wesley Snipes in <a href="http://www.imdb.com/title/tt0105104/">Passenger 57</a>. Ok, not his best movie, but I miss the &#8217;90s action movie era.</p>
<p><img src="/brendaneich_content/uploads/CapitolJS.022.png" height="432" width="576"></p>
<p>Seriously, the shortest path on the Web usually is the winning play. JS is demonstrably able to grow new capabilities with less effort than a &#8220;replacement&#8221; entails. Always bet on JS!</p>
<p>/be</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2011/09/capitoljs-rivertrail/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>My TXJS talk (Twitter remix)</title>
		<link>http://brendaneich.com/2011/08/my-txjs-talk-twitter-remix/</link>
		<comments>http://brendaneich.com/2011/08/my-txjs-talk-twitter-remix/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 01:58:08 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1446</guid>
		<description><![CDATA[TXJS 2011 A6 &#8211; Brendan Eich &#8211; Ecma TC39: The Good, The Bad, and The Ugly. [Main slides] [Paren-free] I spoke at TXJS, a really excellent regional JS conference, in June. Thanks to @SlexAxton, rmurphey, and everyone else involved. My talk was concerned with the good, bad, and ugly of Ecma TC39 (and I mean [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/27911873?title=0&#038;byline=0&#038;portrait=0" width="600" height="360" frameborder="0"></iframe></p>
<p><a href="http://vimeo.com/27911873">TXJS 2011 A6 &#8211; Brendan Eich &#8211; Ecma TC39: The Good, The Bad, and The Ugly.</a></p>
<p>[<a href="http://www.slideshare.net/slideshow/embed_code/8281947">Main slides</a>] [<a href="http://www.slideshare.net/slideshow/embed_code/8281964">Paren-free</a>]</p>
<p>I spoke at <a href="http://2011.texasjavascript.com/">TXJS</a>, a really excellent regional JS conference, in June. Thanks to <a href="https://twitter.com/#!/slexaxton">@SlexAxton</a>, <a href="https://twitter.com/#!/rmurphey">rmurphey</a>, and everyone else involved. My talk was concerned with the good, bad, and ugly of Ecma TC39 (and I mean those words in the best possible way!), mixing philosophy with historical events from the last 14 years.</p>
<p>After describing the standards process and its history in Ecma, I presented the <a href="http://wiki.ecmascript.org/doku.php?id=harmony:proposals">good stuff</a> that&#8217;s going into <a href="http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts">ES6</a> (I gave a remixed version of this part of the talk at an <a href="http://sftechtalks.com/irisheich.html">SFTechTalk</a> hosted by Twitter last month &#8212; thanks to <a href="https://twitter.com/#!/valueof">@valueof</a> and <a href="https://twitter.com/#!/chanian">@chanian</a> for hosting). As a bonus, I closed with a <a href="/2010/11/paren-free/">paren-free</a> update, whose punchline slide is included at the bottom.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.001.png" height="432" width="576"></p>
<p>I am not Tuco.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.002.png" height="432" width="576"></p>
<p>We don&#8217;t smoke, but the rest is pretty much right.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.003.png" height="432" width="576"></p>
<p>Here I praised Jan van den Beld, former S-G, Ecma &#8212; a <i>raconteur</i> and polymath, for his stewardship of Ecma.</p>
<p>Yes, Netscape picked ECMA (now Ecma, pay attention <img src='http://brendaneich.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ) as standards body to which to submit JS mainly to give Microsoft grief, since ECMA had bravely standardized some part of the Windows API. But Jan and the entire TC39 TG1 group played fair on ES1, the first ECMA-262 Edition. Microsoft was so happy they standardized early <a href="http://www.ecma-international.org/publications/standards/Ecma-334.htm">C#</a> and <a href="http://www.ecma-international.org/publications/standards/Ecma-335.htm">CLI</a> metadata specs at Ecma.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.004.png" height="432" width="576"></p>
<p>Not Bruce Campbell, so not me. That means I&#8217;m the Bad.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.005.png" height="432" width="576"></p>
<p>Here is something that the Google <a href="http://markmail.org/message/uro3jtoitlmq6x7t">leak about Dart</a> (née Dash) telegraphs: many Googlers, especially V8 principals, do not like JS and don&#8217;t believe it can evolve &#8220;in time&#8221; (whatever that might mean &#8212; and Google of course influences JS&#8217;s evolution directly, so they can put a finger on the scale here).</p>
<p>They&#8217;re wrong, and I&#8217;m glad that at least some of the folks at Google working in TC39 actually believe in JS &#8212; specifically its ability to evolve soon enough and well enough to enable both more predictable performance and programming in the large.</p>
<p>There&#8217;s a better-is-better bias among Googlers, but the Web is a brutal, shortest-path, <a href="http://www.dreamsongs.com/WorseIsBetter.html">Worse-is-Better</a> evolving system.</p>
<p>I&#8217;ve spent the last 16 years betting on the Web. Evolving systems can face collapses, die-offs, exigent circumstances. I don&#8217;t see JS under imminent threat of death due to such factors, though. Ironic that Google would put a death mark on it.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.006.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.007.png" height="432" width="576"></p>
<p>Here I propose that <a href="http://crockford.com/">Crock</a> is Plato and I am Aristotle, and that while we need to &#8220;keep it real&#8221;, we must also hew to high ideals.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.008.png" height="432" width="576"></p>
<p>The ideas I cite here, represented by the <a href="http://en.wikipedia.org/wiki/Hermeneutic_circle">Hermenuetic Circle</a>, definitely apply to TC39&#8242;s understanding of the text of ECMA-262, as well as various canonical texts in Computer Science. The committee works best when it spirals in on a solid design, avoiding local and premature optimizations and pessimizations.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.009.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.010.png" height="432" width="576"></p>
<p>Every one of these &#8220;Bad Parts&#8221; has been on parade in TC39 in recent years, including 2011. I&#8217;ve been tempted by the second one, horse-trading, so I&#8217;m not innocent (no one is).</p>
<p>The &#8220;Scenario Solving&#8221; one is particularly subtle in that the Scenario proposed to be solved is quite often a very real developer problem. But a complex, ad-hoc solution to it, especially when rushed, too often is unsound. We would do better to take the <a href="http://schemers.org/Documents/Standards/R5RS/r5rs.pdf">Scheme</a> lesson to heart, and develop sound and valid orthogonal primitives. Higher-level libraries built on them can be standardized <i>post hoc</i>.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.011.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.012.png" height="432" width="576"></p>
<p>These meta-discussions are sometimes quite funny in light of the vendor whose representative is making them. I note that C# can now be written to <a href="http://www.weirdlover.com/2010/07/26/prototypal-c-making-c-look-and-work-like-javascript/">look like JS</a>. Why shouldn&#8217;t any particular extension to C# be <i>at least</i> considered (not rubber-stamped of course) for JS standardization?</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.013.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.014.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.015.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.016.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.017.png" height="432" width="576"></p>
<p>These slides provide a glimpse of <a href="http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts">ES6</a>, still under construction but already full of good stuff.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.018.png" height="432" width="576"></p>
<p>The <a href="http://wiki.ecmascript.org/doku.php?id=harmony:harmony">Harmony Goals</a> are not just lofty abstractions.</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.019.png" height="432" width="576"></p>
<p>I hope the way JS is developed and standardized, as much in the open as the existing standards process permits, and with developer feedback via <a href="https://mail.mozilla.org/listinfo/es-discuss">es-discuss</a>, <a href="https://twitter.com/#!/brendaneich">twitter</a>, and the various conference talks, helps. If not, we may as well <a href="https://twitter.com/#!/Gilad_Bracha/status/112181374332579840">wait</a> for some single-source solution to descend from the mountain. And then hold our breaths waiting for Firefox, IE and Safari to implement!</p>
<p><img src="/brendaneich_content/uploads/TXJS-Talk.020.png" height="432" width="576"></p>
<p><img src="/brendaneich_content/uploads/paren-free.009.png" height="432" width="576"></p>
<p>While <a href="/2010/11/paren-free/">paren-free</a> in all likelihood won&#8217;t make ES6, the <code>for-of</code> loop will, and comprehensions and generator expressions in ES6 will be paren-free. Yay!</p>
<p>/be</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2011/08/my-txjs-talk-twitter-remix/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>New JavaScript Engine Module Owner</title>
		<link>http://brendaneich.com/2011/06/new-javascript-engine-module-owner/</link>
		<comments>http://brendaneich.com/2011/06/new-javascript-engine-module-owner/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 02:30:03 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1400</guid>
		<description><![CDATA[As you may know, I wrote JavaScript in ten days. JS was born under the shadow of Java, and in spite of support by marca and Bill Joy, JS in 1995 was essentially a one-man show. I had a bit of help, even at the start, that I&#8217;d like to acknowledge again. Ken Smith, a [...]]]></description>
			<content:encoded><![CDATA[<p>As you may know, I wrote <a href="http://brendaneich.com/2008/04/popularity/">JavaScript in ten days</a>. JS was born under the shadow of Java, and in spite of support by <a href="http://blog.pmarca.com/">marca</a> and <a href="http://en.wikipedia.org/wiki/Bill_Joy">Bill Joy</a>, JS in 1995 was essentially a one-man show.</p>
<p>I had a bit of help, even at the start, that I&#8217;d like to acknowledge again. Ken Smith, a Netscape acquiree from Borland, ported <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html">JDK 1.0-era java.util.Date</a> (we both just <a href="http://movieclips.com/yXM8-breaking-away-movie-chasing-a-truck/">drafted</a> off of the Java truck, per management orders; we did not demur from the <a href="http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1048">Y2K bugs</a> in that Java class). My thanks also to Netscape 2&#8242;s front-end hackers, <a href="https://twitter.com/#!/knobchouck">chouck</a>, <a href="http://totic.org/">atotic</a>, and <a href="https://twitter.com/#!/gorpheus">garrett</a> for their support. EDIT: can&#8217;t forget <a href="http://www.linkedin.com/in/smurray">spence</a> on the X front end!</p>
<p>That was 1995. Engine prototype took ten days in May. Bytecode compiler and interpreter from the start, because Netscape had a <a href="http://www.datacraft.com/livewire.html">server-side JS product</a> in the works. The rest of the year was browser integration, mainly what became known as &#8220;DOM level 0&#8243;. Only now standardized in <a href="http://developers.whatwg.org/">HTML 5</a> and <a href="http://www.w3.org/TR/2011/WD-domcore-20110531/">Anne&#8217;s wg</a>. Sentence fragments here show my PTSD from that sprint :-/.</p>
<p>In 1996 I finally received some needed assistance from <a href="http://www.linkedin.com/profile/view?id=28112&#038;authType=name&#038;authToken=fiRT&#038;goback=.con">RRJ</a>, who helped port David M. Gay and Guy Steele&#8217;s <a href="http://www.netlib.org/fp/dtoa.c">dtoa.c</a> and fix date/time bugs.</p>
<p>Also in summer 1996, <a href="http://nixweb.com/">nix</a> interned at Netscape while a grad student at CMU, and wrote the first <a href="http://apps.ycombinator.com/item?id=1894374">LiveConnect</a>. I am still grateful for his generous contributions in wide-ranging design discussions and code-level interactions.</p>
<p>At some point in late summer or early fall 1996, it became clear to me that JS was going to be standardized. Bill Gates was bitching about us changing JS all the time (some truth to it; but hello! Pot meet Kettle&#8230;). We had a standards guru, <a href="http://www.linkedin.com/pub/carl-cargill/10/495/404">Carl Cargill</a>, who knew <a href="http://www.ecma-international.org/memento/history.htm">Jan van den Beld</a>, then the Secretary-General of ECMA (now Ecma). Carl steered our standardization of JS to ECMA.</p>
<p>Joining ECMA and participating in the first JS standards meeting was an eye-opener. Microsoft sent a B-team, and Borland and a company called NOMBAS also attended. &#8220;Success has many fathers&#8221; was the theme. The NOMBAS founder greeted me by saying &#8220;oh, we&#8217;ve been doing JavaScript for *years*&#8221;. I did not see how that could be the case, unless JS meant any scripting language with C-based syntax. I had not heard of <a href="http://www.quora.com/How-did-ScriptEase-influence-the-design-of-JavaScript">NOMBAS</a> before then.</p>
<p>At that first meeting, I think I did well enough in meta-debate against the Microsoft team that they sent their A-team to the next meeting. This was all to the good, and Microsoft in full-blooded compete mode, but also with individual initiative beyond the call of corporate duty by <a href="http://www.linkedin.com/pub/shon-katzenberger/17/681/516">Shon Katzenberger</a>, materially helped create <a href="http://www.mozilla.org/js/language/E262.pdf">ES1</a>. Sun contributed <a href="http://en.wikipedia.org/wiki/Guy_L._Steele,_Jr.">Guy Steele</a>, who is composed of pure awesome. Guy even brought <a href="http://www.dreamsongs.com/RPG.html">RPG</a> for fun to a few meetings (Richard contributed ES1 Clause 4).</p>
<p>Meanwhile, in fall 1996, I was under some pressure from Netscape management to write a proto-spec for JS, but that was not something I could do while also maintaining the &#8220;Mocha&#8221; engine all by myself in both shipping and future Netscape releases, along with all of the DOM code.</p>
<p>This was a ton of work, and on top of it I had to pay off substantial technical debt that I had willingly taken on in the first year. So I actually stayed home for two weeks to rewrite Mocha as the codebase that <a href="http://blog.cdleary.com/2011/06/mapping-the-monkeysphere/#comment-222163115">became known as</a> <a href="https://developer.mozilla.org/en/spidermonkey">SpiderMonkey</a>, mainly to get it done (no other way), also to go on a bit of a strike against the Netscape management team that was still underinvesting in JS. This entailed garbage collection and tagged values instead of slower reference-counting and fat discriminated union values.</p>
<p>Also in fall 1996, chouck decided to join me as the second full-time JS team-mate. He and I did some work targeting the (ultimately ill-fated) Netscape 4 release. This work was ahead of its time. We put the JS engine in a separate thread from the &#8220;main thread&#8221; in Netscape (still in Mozilla). This allowed us to better overlap JS and HTML/CSS/image computations, years ahead of multicore. You could run an iloop in JS and the &#8220;slow script dialog&#8221; seamlessly floated above it, allowing you to stop the loop or permit it to continue.</p>
<p>After summer 1996 and the start of ECMA-262 standardization, Netscape finally invested more in JS. <a href="http://argostravels.blogspot.com/">Clayton Lewis</a> joined as manager, and hired <a href="http://www.norrisboyd.com/">Norris Boyd</a>, who ended up creating Rhino from SpiderMonkey&#8217;s DNA transcoded to Java. This was ostensibly because Netscape was investing in Java on the server, in particular in an AppServer that wanted JS scripting.</p>
<p>I met <a href="http://shaver.off.net/diary/">shaver</a> for the first time in October 1996 at Netscape&#8217;s NY-based <a href="https://groups.google.com/forum/#!topic/comp.lang.tcl/qFm-YEQEbHw">Developer Conference</a>, where he nimbly nerd-blocked some Netscape plugin API fanboys and saved me from having to digress from the main thing, which was increasingly JS.</p>
<p>Some time in 1997, shaver contributed &#8220;LiveConnect 2&#8243;, based on more mature Java reflection APIs not available to nix in 1996. Clayton hired shaver and the JS team grew large by end of 1997, when I decided to take a break from JavaScript (having delivered ES1 and ES2) and join the nascent mozilla.org.</p>
<p>I handed the keys to the JS kingdom to <a href="http://www.linkedin.com/pub/waldemar-horwat/1/25/333">Waldemar Horwat</a>, now of Google, in late 1997. Waldemar did much of the work on ES3, and threw his <a href="http://en.wikipedia.org/wiki/William_Lowell_Putnam_Mathematical_Competition">considerable intellect</a> into JS2/ES4 afterwards, but without overcoming the market power and stalling tactics of Microsoft.</p>
<p>True story: Waldemar&#8217;s Microsoft nemesis on TC39 back then, at the time a static language fan who hated JS, has come around and now endorses JS and dynamic languages.</p>
<p>Throughout all of this, I maintained module ownership of SpiderMonkey.</p>
<p>Fast-forward to 2008. After a great (at the time) Firefox 3 release where <a href="https://twitter.com/#!/shaver">@shaver</a> and I donned the aging super-hero suits one more time to compete successfully on interpreter performance against JavaScriptCore in WebKit, <a href="http://andreasgal.com/">Andreas Gal</a> joined us for the summer in which we hacked TraceMonkey, which we <a href="http://brendaneich.com/2008/08/tracemonkey-javascript-lightspeed/">launched</a> ahead of Chrome and V8.</p>
<p>A note on V8: I&#8217;d learned of it in 2006, when I believe it was just starting. At that point there was talk about open-sourcing it, and I welcomed the idea, encouraging any of: hosting on code.google.com, hosting without any pressure to integrate into Firefox on mozilla.org (just like Rhino), or hosting with an integration plan to replace SpiderMonkey in Firefox. I had to disclose that another company was about to release their derived-from-JS <a href="http://www.mozilla.org/projects/tamarin/">engine</a> to Mozilla, but my words included &#8220;the more the merrier&#8221;. It was early days as far as JS JITs were concerned.</p>
<p>V8 never open-sourced in 2006, and stealthed its way to release in September 2008. This may have been a prudent move by Google to avoid exciting Microsoft. Clearly, in 1995, the &#8220;Netscape + Java kills Windows&#8221; talk from Netscape antagonized Microsoft. I have it on good authority that a Microsoft board member wrote marca at the end of 1995 warning &#8220;you&#8217;ve waved the cape in the bull&#8217;s face &#8212; prepare to get the horns!&#8221; One could argue that Chrome in 2008 was the new red cape in the bull&#8217;s face, which begot IE9 and Chakra.</p>
<p>Whatever Google&#8217;s reasoning, keeping V8 closed-source for over two years hurt JS in this sense: it meant Apple and Mozilla had to climb the JIT learning curves on their own (at first; then finally with the benefit of being able to inspect V8 sources). Sure, the Anamorphic work on Self and Smalltalk was somewhat documented, and I had learned it in the &#8217;90s, in part with a stint on loan from Netscape to Sun when they were doing due dliigence in preparation for acquiring Anamorphic. But the opportunity to build on a common engine codebase was lost to path dependence.</p>
<p>On the upside, different competing open source engines have demonstrably explored a larger design space than one engine codebase could under consolidated management.</p>
<p>In any event, the roads not taken in JS&#8217;s past still give me pause, because similar roads lie ahead. But the past is done, and once we had launched TraceMonkey, and Apple had launched SquirrelFish Extreme, the world had multiple proofs along with the V8 release that JS was no longer consigned to be &#8220;slow&#8221; or &#8220;a toy&#8221;, as one referee dismissed it in rejecting a PLDI submission from Andreas in 2006.</p>
<p>You know the rest: JS performance has grown <a href="http://blog.mozilla.com/dmandelin/2011/06/16/know-your-engines-at-oreilly-velocity-2011/">an order of magnitude</a> over the last several years. Indeed, JS still has upside undreamed of in the Java world where 1% performance win is remarkable. And, we are still at an early stage in studying web workloads, in order to synthesize credible benchmarks. On top of all this, the web is still evolving rapidly, so there are no stable workloads as far as I can tell.</p>
<p>Around the time TraceMonkey launched, Mozilla was lucky enough to hire <a href="http://blog.mozilla.com/dmandelin/">Dave Mandelin</a>, fresh from PhD work at UCB under <a href="http://www.cs.berkeley.edu/~bodik/">Ras Bodik</a>.</p>
<p>The distributed, open source Mozilla JS team delivered <a href="http://arewefastyet.com/">the goods</a> in Firefox 4, and credit goes to all the contributors. I single Dave out here because of his technical and personal leadership skills. Dave  is even-tempered, super-smart, and a true empirical/skeptical  scientist in the spirit of my hero, <a href="http://en.wikipedia.org/wiki/Richard_Feynman">Richard  Feynman</a>.</p>
<p>So it is with gratitude and more than a bit of relief, after a very long 16 years in full, 13 years open source, that I&#8217;m announcing the transfer of <a href="https://wiki.mozilla.org/Modules/Core#JavaScript">SpiderMonkey&#8217;s module ownership</a> to <a href="https://twitter.com/#!/dmandelin">@dmandelin</a>.</p>
<p><a href="http://www.youtube.com/watch?v=SAqq11HYMsk">Hail to the king, baby!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2011/06/new-javascript-engine-module-owner/feed/</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Mozilla&#8217;s NodeConf Presentation</title>
		<link>http://brendaneich.com/2011/05/mozillas-nodeconf-presentation/</link>
		<comments>http://brendaneich.com/2011/05/mozillas-nodeconf-presentation/#comments</comments>
		<pubDate>Thu, 05 May 2011 23:29:32 +0000</pubDate>
		<dc:creator>Brendan Eich</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[javascript ecmascript harmony spidermonkey spidernode v8 v8monkey nodejs nodeconf]]></category>

		<guid isPermaLink="false">http://brendaneich.com/?p=1248</guid>
		<description><![CDATA[NodeConf is a blast, and Mozilla had a 30 minute slot. Here&#8217;s the slideshare.net link. SpiderNode and V8Monkey are on github, of course. Paul O&#8217;Shannessy already blogged a few weeks ago. To avoid confusion, here&#8217;s the cheat-sheet: V8Monkey is SpiderMonkey with V8&#8242;s API around it. We are not done emulating the full V8 API. Because [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nodeconf.com/">NodeConf</a> is a blast, and Mozilla had a <a href="http://nodeconf.com/schedule.html">30 minute slot</a>. Here&#8217;s the <a href="http://www.slideshare.net/BrendanEich/mozillas-nodeconf-talk">slideshare.net link</a>.</p>
<p><a href="/brendaneich_content/uploads/Node.001.png"><img src="/brendaneich_content/uploads/Node.001.png" height="432" width="576"></a></p>
<p><a href="https://github.com/zpao/spidernode">SpiderNode</a> and <a href="https://github.com/zpao/v8monkey">V8Monkey</a> are on <a href="https://github.com/">github</a>, of course. <a href="https://twitter.com/#!/zpao">Paul O&#8217;Shannessy</a> already <a href="http://blog.zpao.com/post/4620873765">blogged</a> a few weeks ago.</p>
<p><a href="/brendaneich_content/uploads/Node.002.png"><img src="/brendaneich_content/uploads/Node.002.png" height="432" width="576"></a></p>
<p>To avoid confusion, here&#8217;s the cheat-sheet:</p>
<ul>
<li>V8Monkey is <a href="https://developer.mozilla.org/spidermonkey">SpiderMonkey</a> with V8&#8242;s API around it. We are not done emulating the full V8 API.
<li>Because we haven&#8217;t managed to perfectly emulate the full V8 API, the few language-level extensions (e.g., <a href="http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi"><code>Error.captureStackTrace</code></a>), and the V8 build system, SpiderNode is a clone of <a href="https://github.com/joyent/node">Node</a> with V8Monkey integrated and (in a few cases we want to get rid of) hacked in place of V8.
</ul>
<p><a href="/brendaneich_content/uploads/Node.003.png"><img src="/brendaneich_content/uploads/Node.003.png" height="432" width="576"></a></p>
<p>This slide should speak for itself.</p>
<p>We are not out to make a maintained, competing fork of Node, just a friendly downstream that should go away as soon as possible. We aren&#8217;t selling anything to Node users.</p>
<p>We <i>are</i> trying to improve SpiderMonkey&#8217;s API, test Harmony JS language features in the Node setting, and have fun learning about the new JS server side.</p>
<p><a href="/brendaneich_content/uploads/Node.004.png"><img src="/brendaneich_content/uploads/Node.004.png" height="432" width="576"></a></p>
<p><a href="/brendaneich_content/uploads/Node.005.png"><img src="/brendaneich_content/uploads/Node.005.png" height="432" width="576"></a></p>
<p><a href="/brendaneich_content/uploads/Node.006.png"><img src="/brendaneich_content/uploads/Node.006.png" height="432" width="576"></a></p>
<p><a href="/brendaneich_content/uploads/Node.007.png"><img src="/brendaneich_content/uploads/Node.007.png" height="432" width="576"></a></p>
<p>These four slides are straight from my <a href="http://brendaneich.com/2011/05/my-jsconf-us-presentation/">JSConf.us 2011 talk</a>. I went fast since a lot of NodeConf attendees were at JSConf, but a good number of hands did not go up when I asked who attended both conferences.</p>
<p><a href="/brendaneich_content/uploads/Node.008.png"><img src="/brendaneich_content/uploads/Node.008.png" height="432" width="576"></a></p>
<p><a href="/brendaneich_content/uploads/Node.009.png"><img src="/brendaneich_content/uploads/Node.009.png" height="432" width="576"></a></p>
<p><a href="http://wiki.ecmascript.org/doku.php?id=harmony:generators"><code>yield</code></a> conquers the <a href="http://www.slideshare.net/sh1mmer/how-to-stop-writing-spaghetti-code">nested function spaghetti monster</a>.</p>
<p>Generators are winning, and they are worth playing with and investigating in SpiderNode and of course Firefox and other SpiderMonkey embeddings (also in Rhino). They are not the last word on the &#8220;anti-function-nesting&#8221; topic, for sure. I&#8217;m pretty sure there is no &#8220;last word&#8221;.</p>
<p>Thanks to <a href="https://twitter.com/#!/robarnold">Rob Arnold</a> for this demo and the next one, and of course to <a href="https://twitter.com/#!/@littlecalculist">Dave Herman</a> for <a href="https://github.com/dherman/taskjs">TaskJS</a>. Thanks too to <a href="https://twitter.com/#!/mehdisdwilsh">Shawn Wilsher</a> for the <a href="https://twitter.com/#!/mehdisdwilsh/status/66227670593179648">encouragement at the last minute <img src='http://brendaneich.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </a>.</p>
<p><a href="/brendaneich_content/uploads/Node.010.png"><img src="/brendaneich_content/uploads/Node.010.png" height="432" width="576"></a></p>
<p>This is an even shorter demo. I switched to a terminal window, fired up <code>$ ./node helloworld.js</code>, loaded <code>http://127.0.0.1:10337/</code> into a fresh Firefox window, and pressed reload repeatedly to show the counter incrementing.</p>
<p>Node really did break the mold when it comes to ease of writing server code that you can get running super-fast, using JS and lots of the client-side knowledge you may already have.</p>
<p><a href="/brendaneich_content/uploads/Node.011.png"><img src="/brendaneich_content/uploads/Node.011.png" height="432" width="576"></a></p>
<p>One more time: thanks to <a href="https://twitter.com/#!/robarnold">@robarnold</a>, <a href="https://twitter.com/#!/sdwilsh">@sdwilsh</a>, <a href="https://twitter.com/#!/zpao">@zpao</a>, the awesome <a href="https://twitter.com/#!/john_h_ford">@john_h_ford</a> who did our build automation, and of course my partner in crime for much mad science at Mozilla, <a href="https://twitter.com/#!/andreasgal">@andreasgal</a>.</p>
<p>Join us on IRC and the mailing list, we have a lot of work still to do, and we&#8217;re having a ton of fun.</p>
<p>/be</p>
]]></content:encoded>
			<wfw:commentRss>http://brendaneich.com/2011/05/mozillas-nodeconf-presentation/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

