- From: Brian Kardell <bkardell@gmail.com>
- Date: Wed, 19 Dec 2012 11:09:49 -0500
- To: "public-nextweb@w3.org" <public-nextweb@w3.org>
- Message-ID: <CADC=+jeVUiRnGwQdUGQujrnCoLfu+W1s9Fdf2CGutd81zO5WnA@mail.gmail.com>
Hey everyone... Clint and I have a lot of in-depth discussions online via skype and I always feel like they are lost and then only later realize that others weren't included in the details of them. Clint and I decided to post the transcript of this one and invite other comments re: forward compatibility of prollyfills and author prefixing: [12/18/12 12:45:30 PM] bkardell: prollyfills... you agree that they should be forward compat via prefix? [12/18/12 12:56:27 PM] Clint Hill: i'm not sure [12/18/12 12:57:29 PM] Clint Hill: to be more clear: Yes. But I have reservations about yet-another-prefix [12/18/12 1:00:54 PM] bkardell: oh boy [12/18/12 1:01:21 PM] bkardell: but dude... the rationale of all of this was that the problem with prefixes are that they are tied to a browser implentation [12/18/12 1:01:41 PM] bkardell: how can you prollyfill something that is so early as if it were native - you just cant [12/18/12 1:02:11 PM] bkardell: dude - marcos tweeted that article, did you make any adjustments to it after our convo? [12/18/12 1:02:42 PM] Clint Hill: no .... I was going to write something about the lifecycle in a different post. [12/18/12 1:03:01 PM] Clint Hill: the prefix question feels like the guns question. The answer to the problem of guns is not "more guns" [12/18/12 1:03:51 PM] Clint Hill: if we come up with "x-" that certainly fixes the browser coupling. But it does nothing to change the problem of "prollyfill -> native" transition. [12/18/12 1:04:18 PM] bkardell: I dont know why that is a problem per-se [12/18/12 1:04:42 PM] bkardell: if you write with a prollyfill and it works for you your biggest concern should be that it doesn't break out from underneath you [12/18/12 1:04:59 PM] bkardell: given browser improvements, it will generally speaking, only get better over time [12/18/12 1:05:28 PM] bkardell: when a stable API is available and a prollyfill emerges, you could port it to a pollyfill if you desired [12/18/12 1:05:36 PM] bkardell: and the pollyfill should be reasonably easy to write [12/18/12 1:05:52 PM] bkardell: since it is basically just an unprefixing of the last known good prollyfill [12/18/12 1:06:06 PM] Clint Hill: that code change I guess is what I call the "problem" [12/18/12 1:07:38 PM] bkardell: I totally disagree with that assessment unless you can come up with a magic way to guarantee that the native API will match your original - which you can't [12/18/12 1:08:03 PM] Clint Hill: wait ... [12/18/12 1:08:10 PM] bkardell: you also cant guarantee that there are no surface changes between version 1.0.0 and version 1.1.0 of your prollyfill [12/18/12 1:08:17 PM] Clint Hill: "native API will match your <prollyfill>" ???? [12/18/12 1:08:20 PM] bkardell: that's why prollyfills rock [12/18/12 1:08:32 PM] bkardell: ok, let's take an example from history [12/18/12 1:08:42 PM] bkardell: "matches" in css selectors level 4 [12/18/12 1:09:08 PM] bkardell: this has been implemented in almost every browser now as a prefixed thing called 'any' [12/18/12 1:09:21 PM] bkardell: so msAny, webkitAny, etc [12/18/12 1:09:55 PM] bkardell: and the surface might not ultimately match the signature of the draft either [12/18/12 1:10:08 PM] bkardell: a draft was more or less available in 2000 [12/18/12 1:10:20 PM] bkardell: what we ultimately get in 2014 or beyond won't match that [12/18/12 1:10:58 PM] bkardell: but we could have had a prollyfill in 2000 and that would have been great - it could have evolved names, signatures, versions, etc - all without problem and without risk of it breaking [12/18/12 1:12:59 PM] bkardell: prollyfills let us help evolve standards by: a) seperating them from the browser b) making them author-opt'in and versioned c) keeping our code working into the future without risk of it breaking -- all of these d) widen the audience and potential use-cases where we can use them way beyond what can be done in the traditional model [12/18/12 1:24:40 PM] bkardell: no? [12/18/12 2:22:19 PM] Clint Hill: sorry - stepped away to a meeting [12/18/12 2:27:58 PM] bkardell: np... you can respond whenever :) [12/18/12 2:32:00 PM] Clint Hill: so agreed on all your points. none of your points however presume the need for a prefix. the matches/any example is a historical artifact to point out as issue that prefixes bring - but does not insinuate the need for prefixing now. prollyfill can use "desired to be" syntax without the need of a prefix. the prollyfill can introduce the syntax as it will be and a library to assure that syntax works (parser plays this role). upon native implementation it's a matter of "dropping the parse & script". [12/18/12 2:37:18 PM] bkardell: wait ... huh? [12/18/12 2:37:38 PM] bkardell: there can be only one :any() or :has() signature - right? [12/18/12 2:37:49 PM] Clint Hill: yes [12/18/12 2:38:01 PM] bkardell: you agree that you cannot guarantee what that will be until it arrives? [12/18/12 2:38:03 PM] Clint Hill: 1 that is drafted and desired to be prollyfilled [12/18/12 2:38:20 PM] Clint Hill: today you cannot [12/18/12 2:38:24 PM] Clint Hill: but with a prollyfill you can [12/18/12 2:38:29 PM] Clint Hill: that's what we want to change [12/18/12 2:38:31 PM] bkardell: so what happens when you do :any() and then they actually implement a native :any with a different signature or even meaning? [12/18/12 2:38:44 PM] Clint Hill: you did so without a prollyfill framework. [12/18/12 2:38:52 PM] Clint Hill: that's what happens without nExt Web. [12/18/12 2:39:18 PM] Clint Hill: WITH a prollyfill framework you end up working towards a signature [12/18/12 2:39:26 PM] bkardell: yes, absolutely [12/18/12 2:39:38 PM] bkardell: towards being the key word there [12/18/12 2:39:46 PM] Clint Hill: so ... if that's agreeable ... what benefit does a prefix bring? [12/18/12 2:41:11 PM] bkardell: man I just dont get where you are getting this from suddenly - I so thought we were on the same page with this [12/18/12 2:41:50 PM] bkardell: "any" as an example... I could have two competing drafts of it [12/18/12 2:42:04 PM] bkardell: they have different signatures [12/18/12 2:42:23 PM] Clint Hill: ok - stop right ther [12/18/12 2:42:33 PM] bkardell: one of them (or maybe even none of them) will eventually get a native impl [12/18/12 2:42:41 PM] Clint Hill: yah - but stop [12/18/12 2:42:42 PM] bkardell: you cant know which [12/18/12 2:42:43 PM] bkardell: ok go [12/18/12 2:44:30 PM] Clint Hill: 2 prollyfills - built and delivered with nExt Web framework that provides devs tools to author and publish the work. Drafts/docs/standards lifecycle etc. What's important is not how to "prefix" these rather what's important is that the consuming author has a way to point to the prollyfill implementation/version they want. consuming authors would _always_ use the word "any". the only thing they opt-in with is to point to an implementation and version ---- just like Hitch. [12/18/12 2:44:59 PM] Clint Hill: IMO - we can do it all without a prefix. [12/18/12 2:45:04 PM] bkardell: ok so look [12/18/12 2:45:11 PM] bkardell: you have something that looks like this [12/18/12 2:45:30 PM] bkardell: :any(basicSelector...) [12/18/12 2:45:36 PM] bkardell: and another that looks like this [12/18/12 2:46:19 PM] bkardell: :any(state,basicSelector...) [12/18/12 2:46:46 PM] bkardell: they have different signature and different purpose [12/18/12 2:47:07 PM] Clint Hill: ok - 2 diff prollyfills - 2 diff signatures [12/18/12 2:47:09 PM] bkardell: now some day in the future we get an any [12/18/12 2:47:24 PM] bkardell: it may be one of those - or even a third thing [12/18/12 2:47:29 PM] Clint Hill: yes [12/18/12 2:47:45 PM] bkardell: how on earth do you automatically upgrade without breaking? [12/18/12 2:48:01 PM] Clint Hill: :) how does prefixing "fix" it? [12/18/12 2:48:07 PM] bkardell: serious? [12/18/12 2:48:34 PM] bkardell: if you wrote your code today prefixed, tomorrow it is still prefixed... if it worked yesterday, why would you assume it wouldn't work today? [12/18/12 2:48:56 PM] bkardell: if you used <object> for video yesterday - it still works eventhough we now have <video> [12/18/12 2:49:17 PM] bkardell: if you used jquery - it still works even though we have qsa/find [12/18/12 2:49:43 PM] bkardell: not only that, but in both of those cases - your code from a few years ago actually got more efficient underneath you [12/18/12 2:50:18 PM] bkardell: that's part of the problem with prefixes today -- prefixes are experimental and they _do_ break underneath u [12/18/12 2:50:36 PM] bkardell: how many css 3 tutorials have you looked at that are now borked [12/18/12 2:50:51 PM] Clint Hill: I write my code today: x-any(state, selector) tomorrow it's implemented. my code tomorrow still uses prollyfill due to x-any. it won't use native until I drop the "x-". right? [12/18/12 2:51:41 PM] bkardell: right [12/18/12 2:51:57 PM] bkardell: and potentially match the API deltas or implementation/draft deltas [12/18/12 2:52:13 PM] bkardell: x- is not standard [12/18/12 2:52:33 PM] bkardell: in most cases, it is not even close early on - it is a mistake to pretend otherwise [12/18/12 2:53:05 PM] bkardell: do you point to jquery latest or the version of jquery you used when you wrote your site? [12/18/12 2:53:37 PM] bkardell: most people use the version they actually tested with [12/18/12 2:54:10 PM] Clint Hill: counter idea ----- If I write my code today: any(state, selector) If I include a lib for: any-brian-prollyfill.js it uses 1 of the 2 competing prollyfills tomorrow it's implemented (I'm lucky I chose the good one). tomorrow I drop the lib: any-brian-prollyfill.js 1 code change in both cases but the implementation code is unchanged. [12/18/12 2:54:11 PM] bkardell: we need to post this log somewhere for others to read :) [12/18/12 2:54:48 PM] Clint Hill: if I happen to choose the loser - well that's a diff story right? changes everything anyways. prefixed or not [12/18/12 2:55:01 PM] bkardell: chances are you will pick the loser [12/18/12 2:55:45 PM] bkardell: because there will be competition and improvement... by sheer statistics it is impossible to assume that the vast majority of code will not choose the loser [12/18/12 2:58:25 PM] Clint Hill: right - so there's code change beyond prefixing right? [12/18/12 2:58:29 PM] Clint Hill: (in losing case) [12/18/12 2:59:01 PM] Clint Hill: So to argue that we want prefixing in order to save you from that kind of code change doesn't make sense to me. So again: What benefit does prefixing bring? [12/18/12 3:09:43 PM] bkardell: in the losing case, your code still works... in the winning case your code still works... even in the most winning case there might still be edge cases in the to-native shift that could cause your site to break [12/18/12 3:10:26 PM] bkardell: am I missing something? [12/18/12 3:11:30 PM] bkardell: :x-any is pointing to a prollyfill ... note, not a pollyfill which has a very reasonable chance of going pretty smoothly in an auto-upgrade [12/18/12 3:12:18 PM] bkardell: if we drop :x- and just use :any, then you have some magic saying "if it's there use that" ... the vast majority - and I mean the _vast_ majority will break as native comes along... am I wrong? [12/18/12 3:15:59 PM] Clint Hill: let me say so that you feel better - i totally agree and understand. I'm simply arguing that IMO we could do all this without a prefixing solution. I think Hitch was the right path with the ability to delcaratively point to an implemention for a hitch. (i know we used prefixes too). [12/18/12 3:16:54 PM] Clint Hill: in other words I think this would be ideal: use "any()" point to prollyfill when native drop pointer to prollyfill maybe point to polyfill [12/18/12 3:17:29 PM] Clint Hill: the risk is - I chose the really shitty one and need to change signatures etc. that's still opt-in. [12/18/12 3:18:26 PM] bkardell: hmmm... [12/18/12 3:18:50 PM] Clint Hill: IMO - prefixing adds complexity without a benefit. [12/18/12 3:19:23 PM] bkardell: ok, let's imagine a flow for a second in which :matches was there in 2000 as a prollyfill, unprefixed [12/18/12 3:19:45 PM] bkardell: so we have some import or something indicating that there is a prollyfill [12/18/12 3:20:35 PM] bkardell: 15 years go by and now we have a native :matches which either has the same signature and does something different - or has a different signature altogether [12/18/12 3:21:15 PM] bkardell: my import or whatever is still there... which one gets used? [12/18/12 3:21:26 PM] bkardell: native or the fill I wrote against? [12/18/12 3:24:19 PM] Clint Hill: well ... because I've painted myself into this corner .... the prollyfill [12/18/12 3:24:30 PM] Clint Hill: and the only way to get native is to "drop" the fill. [12/18/12 3:24:47 PM] bkardell: so fill overrides native..? that feels problematic to me [12/18/12 3:25:07 PM] bkardell: it will also cause headaches for anyone trying to read code in the future [12/18/12 3:25:16 PM] Clint Hill: only if you feel "opt-in" means until big brother browser bumps me out. [12/18/12 3:25:33 PM] Clint Hill: opt-in to me means "i declare it this way so do it this way" [12/18/12 3:25:51 PM] bkardell: hmm [12/18/12 3:26:08 PM] Clint Hill: we have said "opt-in" .... so maybe there is a confusion on my part [12/18/12 3:26:18 PM] bkardell: opt-in to me means "i declare it this way so do it this way" [12/18/12 3:26:24 PM] bkardell: I fully agree with that [12/18/12 3:26:30 PM] bkardell: that is my point actually [12/18/12 3:26:51 PM] Clint Hill: seems to me that prollyfill wins in the native vs. fill question. [12/18/12 3:26:52 PM] bkardell: and I think the implication the other way round is more convoluted [12/18/12 3:27:33 PM] bkardell: if I was reading something with :matches right now - I expect it to match the :matches I know - with all of the signature,rules and subtlety [12/18/12 3:27:43 PM] bkardell: I dont expect to have to go hunting for an import to find what it does [12/18/12 3:27:55 PM] bkardell: but if I see :x-matches ... I know what to do [12/18/12 3:28:29 PM] Clint Hill: hmm [12/18/12 3:28:34 PM] Clint Hill: i fully agree [12/18/12 3:28:45 PM] bkardell: i see easily that it is from a specific early fill - even which version [12/18/12 3:29:09 PM] bkardell: and figuring out an upgrade path (if I even care for one) should be totally documented - perhaps even scriptable [12/18/12 3:31:29 PM] Clint Hill: hmmm [12/18/12 3:31:33 PM] Clint Hill: really though? [12/18/12 3:31:53 PM] Clint Hill: the prefix gives you all that info? [12/18/12 3:32:05 PM] bkardell: the prefix tells you that it is imported [12/18/12 3:32:13 PM] bkardell: some kind of import has to tell you which version [12/18/12 3:32:43 PM] bkardell: given that, you should be able to pull up the draft and see the state of it [12/18/12 3:33:30 PM] bkardell: mapping that to what was really done should be doable... if you can do it once, there is at least a chance you can lay down rules to preprocess upgrade others [12/18/12 3:41:00 PM] bkardell: regardless of whether you can script it - the pattern gives you the information you would need to understand how it works in its current state - and if one of those became native it should include a link to the current draft which gives you everything you need to upgrade should you choose to do so [12/18/12 3:41:30 PM] bkardell: the other nice thing about that is that it doesn't prevent you from keeping your old code around while starting to introduce the native version [12/18/12 3:41:55 PM] bkardell: :x-matches and :matches can coexist in the interim, which is really helpful if you are upgrading -- Brian Kardell :: @briankardell :: hitchjs.com
Received on Wednesday, 19 December 2012 16:10:22 UTC