- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Thu, 18 Jun 2015 16:49:36 -0400
- To: Harald Alvestrand <harald@alvestrand.no>, public-webrtc@w3.org
On 6/9/15 7:18 AM, Harald Alvestrand wrote: > Den 09. juni 2015 03:24, skrev Jan-Ivar Bruaroey: >> On 6/8/15 7:01 PM, Peter Thatcher wrote: >>> ... setting them individually just doesn't make sense because the time >>> between setting them would cause the RtpSender to be in an invalid, >>> broken, or awkward state. >> Sorry to disagree, but the "time between setting them" will /*not*/ do that. >> >> It isn't possible, because RtpSender is *not allowed* to observably >> progress in that time, /because JS is a single-threaded model/. >> >> Like it or not, this is why we queue a task for everything: to keep JS >> in the dark about anything happening in parallel to its execution. >> RtpSender is not above this law, and must queue a task before altering >> any of its properties in response to time. > Actually I agree with Jan-Ivar about the model, but I think Jan-Ivar is > still wrong about his conclusion. > > consider 2 properties x and y with possible values "a" and "b", where > the combination "aa" is illegal. This is the discussion I wanted to get to, now that we see concurrency is not an issue. > In the code: > > (precondition: x=b, y=a) > t.x = a > t.y = b > > the first assignment will lead us to an illegal state. This does not > matter to the underlying subsystem (says Javascript), because we're > going to get to a legal state on the next line. No error occurs. > > But in the code > > (precondition: x=b, y=a) > t.x =a > > we WILL be in an illegal state at the end of this piece of Javascript. > But where does the error occur? This is a good observation, that we can't generally throw on assignment in this model. We would need an error event on the sender. Whether t.onerror is a good idea or not may depend on whether a sender can fail for reasons unrelated to a request from JS. If a sender may fail at any time due to e.g. a network error, then maybe this makes sense. If it can only fail from JS modification, then maybe not so much. > When does it make sense to report an error? > > Not when setting x - we don't know that it's going to cause trouble yet. > Not at the end of execution - there is no handler there. > The only possible way I can see is an out-of-the-blue event that occurs > after the end of execution, saying "You goofed at some previous point in > time". It would be a synchronous event fired when the attributes are collectively read on the next cycle. > I like the model > > p = t.args() // returns ba > p.x = a > p.y = b > t.set(p) > > because it makes it obvious to the programmer when his parameters are > going to be checked, and exactly which statement is going to error out > (or, if checking has to occur asynchronously, which statement returns a > promise that might be rejected). > > Clearer for the programmer. He's high in our hierarchy of constituencies. Compare to: t.x = a t.y = b t.onerror(e => { throw e }) Not everything has to be an attribute of course. Methods are better for some things. .: Jan-Ivar :.
Received on Thursday, 18 June 2015 20:50:09 UTC