<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div><span class="Apple-style-span" style="border-collapse: separate; font-family: arial; font-size: small; "><div>
These two statements are true...</div><div>* "<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">We can't change the API"</span></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; ">* It is seriously flawed</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; ">... and therein lies the problem.</span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; "><br>
</span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; ">I'm sad to have to say it... but I hope this withers and dies an early death. Putting this in the web platform for perpetuity is a mistake. I don't support the adoption of this into the platform.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Time to go read the SimpleDatabase proposal.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div></span></div>> On Wed, 9 Sep 2009, Darin Fisher wrote:<br>>> By the way, you can already pretty much create my acquireLock /<br>
>> releaseLock API on top of SharedWorkers today, but in a slightly<br>>> crappier way.<br>><br>> How? Since the API is completely async, you can't make a spinlock.</span><br><br><div>You must not have read Darin's proposal. It wasn't a 'lock' at all. It's a completely async, well-factored primitive. </div>
<div><div><div>  void acqureFlag('name', callback);   // returns immediately in all cases</div><div>  void releaseFlag('name');  // returns immediately in all cases</div><div>The callback is called upon 'flag' acquisition. Its all yours until you call release. Completely async. I think its self-evident that this can be composed with a SharedWorker.</div>
<div><br></div><div>Darin's was an example of a good proposal... simple on all dimensions, yet powerful and broadly applicable... what is not to like? Marry the 'flag' with a unlocked storage repository and viola, you have something... the whole is greater than the sum of the parts.</div>
<div><br></div><div>Another lesson to be learned from the LocalStorage debacle is to decompose things, hashmaps+(implicit)locks+events... it slices and dices (and there's more)... it was a bad idea to jumble all that together... individually, minus the implicit, those would make for nice features.</div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><span class="Apple-style-span" style="border-collapse: separate;"><br></span></span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Also, regarding "we can't change the API"... well it did get changed... the application of additional implicit locking semantics to IE's API... that is a material change.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><br><div class="gmail_quote">On Thu, Sep 17, 2009 at 5:13 PM, Robert O'Callahan <span dir="ltr"><<a href="mailto:robert@ocallahan.org">robert@ocallahan.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Thu, Sep 17, 2009 at 8:32 PM, Ian Hickson <span dir="ltr"><<a href="mailto:ian@hixie.ch" target="_blank">ian@hixie.ch</a>></span> wrote:<br>
</div><div class="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">
LESSONS LEARNT<br>
<br>
If we ever define a new API that needs a lock of some kind, the way to do<br>
it is to use a callback, so that the UA can wait for the lock<br>
asynchronously, and then run the callback once it has it. (This is what<br>
the Web Database spec does, for instance.)<br></blockquote></div><div><br>When we add more of these features, I think we will need a way to acquire multiple locks simultaneously before running a callback. (So if we had localStorage.runTransaction(function(storage) { ... }) and 
otherLockingThing.runTransaction(function(thing) { ... }), we could also
 have, for example, window.runTransaction(localStorage, 
otherLockingThing, function(storage, thing) { ... }).) So it may be worth thinking about what that API should be and what we will need to add to each feature spec to support it.<br><br></div></div>Rob<br><font color="#888888">-- <br>
"He was pierced for our transgressions, he was crushed for our iniquities; the punishment that brought us peace was upon him, and by his wounds we are healed. We all, like sheep, have gone astray, each of us has turned to his own way; and the LORD has laid on him the iniquity of us all." [Isaiah 53:5-6]<br>


</font></blockquote></div><br></div></div></div>