Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #20031
| Message-ID | <10880935.qUOYKYk0ac@PointedEars.de> (permalink) |
|---|---|
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
| Organization | PointedEars Software (PES) |
| Date | 2013-05-29 13:20 +0200 |
| Subject | Re: !0 versus true |
| Newsgroups | comp.lang.javascript |
| References | (9 earlier) <eba22a46-75ad-4d8f-8cf3-e1dfbaa28743@c7g2000vbv.googlegroups.com> <uaf9q855bh9uri9q6o10oa2oqi7n6lp3r7@4ax.com> <025995e5-77c4-42e0-9c2d-60607ed970e9@2g2000yqr.googlegroups.com> <3158186.8TiyjIphOr@PointedEars.de> <682ad042-58a6-47da-9540-76d8b09f5592@l5g2000vbn.googlegroups.com> |
[Cancel & Supersedes]
Scott Sauyet wrote:
> Thomas 'PointedEars' Lahn wrote:
>> Scott Sauyet wrote:
>>> John Harris wrote:
>>>> Scott Sauyet wrote:
>>>> <snip>
>>>>> <http://scott.sauyet.com/Javascript/Demo/2013-05-27a/>
>>>>> <http://scott.sauyet.com/Javascript/Demo/2013-05-27b/>
>>>>>
>>>>> In all browsers I tested, the programs displayed different behavior,
>>>>> even though the two programs are identical except that one expression
>>>>> has been replaced by an equivalent one in the second.
>>>> <snip>
>>>>
>>>> Name the functions in the two examples f and g to lessen the
>>>> confusion.
>>>
>>> That would only confuse the point. The point is that the only
>>> difference between the two programs is the substitution of `0` in the
>>> second for the equivalent `+!1` in the first. Nonetheless the two
>>> programs have different behavior. Making an additional change by
>>> changing the name of the function would muddy the waters.
>>
>> You are the one who is muddying the waters here.
>>
>> The point is that you continue to fail to differentiate between
>>
>> A) an expression
>>
>> and
>>
>> B) the string representation of the function that contains it.
>
> No, as I've demonstrated repeatedly, I understand the difference.
>
> However, even though the two programs I supplied differ only in one
> equivalent expression, they have different behavior.
>
> Stipulating the definition of equivalent expressions as you've
> presented it, if we define Document A as the one residing at
>
> <http://scott.sauyet.com/Javascript/Demo/2013-05-27a/>
>
> and Document B as the one residing at
>
> http://scott.sauyet.com/Javascript/Demo/2013-05-27b/>
How typical of you that you would make this a personal issue.
> The argument, in excruciating detail, proceeds as follows:
>
> 1. Document A and Document B differ only on line 9.
> 2. The difference on line 9 starts at column 29.
> 3. That difference falls inside a client-side program spanning lines
> 7 - 18. These two distinct programs we will label Program A
> and Program B, respectively.
> 4. The difference from Program A to Program B can be described as
> the deletion of the characters "+!1" and the insertion of the
> character "0".
> 5. At character 29 of line 9, an expression is allowable.
> 6. "+!1" is a legal expression.
> 7. "0" is a legal expression.
> 8. "+!1" and "0" are equivalent expressions.
> 9. Hence Program A and Program B differ only in the substitution of
> equivalent expressions.
> 10. Loading Document A and Document B into Chrome 27.0.1453.94 (*)
> yield differing output.
> 11. That differing output is the result of the differences between
> Program A and Program B.
> 12. Therefore, two programs that differ only in the substitution of
> equivalent expressions can yield differing output.
>
> (*) Feel free to substitute another modern browser.
>
> Can you accept this argument
No (but that is not the reason why I also reject your later interpretation).
> If not, which is the first step you reject?
10.
> And why do you reject it?
There is no guarantee for that. AISB:
| An implementation-dependent representation of the function is returned.
^^^^^^^^^^^^^^^^^^^^^^^^
Several other browsers than Chrome (27.0.1453.94) do support a different
ECMAScript implementation than Google V8 JavaScript.
The ECMAScript Language Specification allows that the return value does not
contain the contents of the original /FunctionBody/, and it allows that it
contains other expressions not found in the original. The only requirement
is:
| This representation has the syntax of a /FunctionDeclaration/.
As I indicated before, a conforming ECMAScript implementation is allowed to
return
"function () {}"
both for
(function a (b) { return !+1; }).toString()
and for
(function c (d, e) { return 0; }).toString()
because
| 13 Function Definition
|
| Syntax
|
| […]
| FunctionExpression :
| function Identifier_opt ( FormalParameterList_opt ) { FunctionBody }
|
| […]
| FunctionBody :
| SourceElements_opt
or, in reduced ABNF:
FunctionExpression = "function" [Identifier] "(" [FormalParameterList] ")"
"{" [SourceElements] "}"
This means that as for their string representation those two functions might
or might not be value-equivalent. But they would still be (weakly)
functional equivalent, because the expressions leading to their return
values are (value-)equivalent. (In this case there would also be strong
functional equivalence because the function calls cannot have side-effects.)
> From here, it's my *interpretation* that the definition supplied is
> not particularly useful, especially in the context specified by the OP
> of minifiers. […]
And precisely *that* is your fallacy. To break it down for you:
You are falsely assuming that equivalence must be transitive, even
universal. That is, you are assuming that if two expressions in a program
are equivalent, all functions and all programs containing those expressions
must be equivalent as well.
You find a corner case (string representation of functions in ECMAScript
implementations) in which this assumption of yours *might not* be fulfilled,
and therefore you doubt the usefulness of the *original* definition of
expression/value-equivalence, in the context of ECMAScript implementations.
Can you see your mistake now?
> [tl;dr]
--
PointedEars
Twitter: @PointedEars2
Please do not Cc: me. / Bitte keine Kopien per E-Mail.
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
!0 versus true Andrew Poulos <ap_prog@hotmail.com> - 2013-05-23 23:31 +1000
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-23 07:58 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-23 17:53 +0200
Re: !0 versus true Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-05-24 12:17 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-24 21:56 +0200
Re: !0 versus true Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2013-05-24 13:13 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-24 22:23 +0200
Re: !0 versus true Denis McMahon <denismfmcmahon@gmail.com> - 2013-05-24 22:08 +0000
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-25 07:00 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-25 20:04 -0700
Re: !0 versus true "Evertjan." <exxjxw.hannivoort@inter.nl.net> - 2013-05-26 11:07 +0200
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-26 13:11 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-26 13:28 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-27 12:07 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-27 11:27 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-27 23:30 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-27 17:12 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-28 02:40 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-27 20:29 -0700
Re: !0 versus true John Harris <niam@jghnorth.org.uk.invalid> - 2013-05-28 15:38 +0100
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-28 08:32 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-28 21:14 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-28 15:38 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-29 13:20 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-29 06:37 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-29 16:28 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-29 13:32 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-29 23:34 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-30 06:30 -0700
Re: !0 versus true John Harris <niam@jghnorth.org.uk.invalid> - 2013-05-29 17:33 +0100
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-29 11:34 -0700
Re: !0 versus true John Harris <niam@jghnorth.org.uk.invalid> - 2013-05-31 10:22 +0100
Re: !0 versus true Christoph Becker <cmbecker69@gmx.de> - 2013-05-31 13:04 +0200
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-31 18:13 +0200
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-31 18:16 +0200
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-05-31 07:25 -0700
Re: !0 versus true imma harper <immaterial_uk@yahoo.co.uk> - 2013-05-31 09:46 -0700
Re: !0 versus true Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2013-05-31 21:38 +0200
Re: !0 versus true John Harris <niam@jghnorth.org.uk.invalid> - 2013-06-01 17:37 +0100
Re: !0 versus true Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-06-02 21:03 +0100
Re: !0 versus true Scott Sauyet <scott.sauyet@gmail.com> - 2013-06-03 04:45 -0700
Re: !0 versus true Dr J R Stockton <reply1300@merlyn.demon.co.uk.invalid> - 2013-06-04 17:23 +0100
csiph-web