Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #45846

Re: "i = i|0"

From James Kuyper <jameskuyper@verizon.net>
Newsgroups comp.lang.c
Subject Re: "i = i|0"
Date 2014-06-12 08:06 -0400
Organization A noiseless patient Spider
Message-ID <lnc54m$8he$1@dont-email.me> (permalink)
References (1 earlier) <44f393c9-8b85-4da8-8618-6b11dd3954b2@googlegroups.com> <or-0-20140611230027@ram.dialup.fu-berlin.de> <slrn3vfslphhbe.gfj.ike@iceland.freeshell.org> <5398CC30.9020706@verizon.net> <lnb8ld$or0$1@news.albasani.net>

Show all headers | View raw


On 06/11/2014 11:59 PM, BGB wrote:
> On 6/11/2014 4:37 PM, James Kuyper wrote:
...
>> It seems reasonable to me that it would - in javascript, |0 doesn't just
>> cause the integer value to be unchanged (something a smart compiler
>> could drop) - it also (and first) causes conversion to a 32-bit integer
>> type, if necessary. The compiler can't be expected to know that such a
>> conversion will not, in fact, be necessary. This is a substantial
>> difference from the original C code, where such conversions would occur,
>> if necessary, in the calling code, where the compiler can be sure. A JS
>> compiler would have to generate code to check the type of the argument,
>> and code to perform the conversion. The checking part, at least, will
>> have to be executed even though the conversion code will not.
>>
> 
> 
> AFAIK:
> 
> the numeric type in JS isn't really all that well-defined (in terms of 
> how it is implemented), but is generally implemented, essentially, as a 
> 64-bit double (nevermind if implementations may use integer-types 
> internally when they can get away with it, but this is mostly invisible 
> at the JS level).
> 
> "|0" basically then effectively means (besides "OR with 0") "truncate 
> value range to that of a 32-bit integer", but may indirectly serve as a 
> hint to the JS engine that it may safely use a 32-bit integer 
> representation internally (it may, but need not necessarily, imply a 
> type conversion, depending mostly on the "phase of the moon" and "the 
> current feelings of the JS engine at this particular moment in time", 
> and need not involve a runtime check, say, if the JS-engine already 
> knows that the caller calls this code with an integer value, ...).

With the javascript definition given by the OP, could f() be passed an
argument which is not of numeric type, but which can be converted? Your
argument seems to suggest that the compiler need not worry about
performing such a conversion.
-- 
James Kuyper

Back to comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: "i = i|0" Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-06-11 13:55 -0700
  Re: "i = i|0" Ike Naar <ike@iceland.freeshell.org> - 2014-06-11 21:09 +0000
    Re: "i = i|0" James Kuyper <jameskuyper@verizon.net> - 2014-06-11 17:37 -0400
      Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-12 00:56 +0200
        Re: "i = i|0" James Kuyper <jameskuyper@verizon.net> - 2014-06-12 08:19 -0400
          Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-12 14:45 +0200
            Re: "i = i|0" James Kuyper <jameskuyper@verizon.net> - 2014-06-12 09:25 -0400
              Re: "i = i|0" raltbos@xs4all.nl (Richard Bos) - 2014-06-12 14:50 +0000
                Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-12 16:55 +0200
                Re: "i = i|0" Keith Thompson <kst-u@mib.org> - 2014-06-12 11:28 -0700
                Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-12 20:46 +0200
                Re: "i = i|0" Christoph Michael Becker <cmbecker69@arcor.de> - 2014-06-12 20:58 +0200
                Re: "i = i|0" Kaz Kylheku <kaz@kylheku.com> - 2014-06-12 19:20 +0000
                Re: "i = i|0" Christoph Michael Becker <cmbecker69@arcor.de> - 2014-06-12 22:13 +0200
                Re: "i = i|0" Kaz Kylheku <kaz@kylheku.com> - 2014-06-12 21:15 +0000
                Re: "i = i|0" Christoph Michael Becker <cmbecker69@arcor.de> - 2014-06-12 23:59 +0200
                Re: "i = i|0" Christoph Michael Becker <cmbecker69@arcor.de> - 2014-06-13 01:10 +0200
                Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-13 01:52 +0200
                ECMAScript standards (was: "i = i|0") Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-15 12:53 +0200
                Re: ECMAScript standards (was: "i = i|0") Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-06-15 03:59 -0700
                Re: ECMAScript standards (was: "i = i|0") gazelle@shell.xmission.com (Kenny McCormack) - 2014-06-15 14:39 +0000
                Re: ECMAScript standards BGB <cr88192@hotmail.com> - 2014-06-15 11:41 -0500
                Re: "i = i|0" Stephen Sprunk <stephen@sprunk.org> - 2014-06-12 17:11 -0500
                Re: "i = i|0" Denis McMahon <denismfmcmahon@gmail.com> - 2014-06-12 22:40 +0000
                Re: "i = i|0" glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-06-12 22:44 +0000
                Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-13 01:16 +0200
                Re: "i = i|0" Thomas Richter <thor@math.tu-berlin.de> - 2014-06-13 19:16 +0200
                Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-13 19:21 +0200
                Re: "i = i|0" Malcolm McLean <malcolm.mclean5@btinternet.com> - 2014-06-13 10:59 -0700
                Re: "i = i|0" Tim Streater <timstreater@greenbee.net> - 2014-06-13 18:24 +0100
                Re: "i = i|0" Kaz Kylheku <kaz@kylheku.com> - 2014-06-13 21:25 +0000
              Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-12 17:13 +0200
                Re: "i = i|0" James Kuyper <jameskuyper@verizon.net> - 2014-06-12 12:17 -0400
                Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-12 20:01 +0200
                Re: "i = i|0" James Kuyper <jameskuyper@verizon.net> - 2014-06-12 16:13 -0400
                Re: "i = i|0" glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2014-06-12 20:44 +0000
                Re: "i = i|0" Kaz Kylheku <kaz@kylheku.com> - 2014-06-12 20:59 +0000
                Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-13 01:22 +0200
                Re: "i = i|0" Martin Shobe <martin.shobe@yahoo.com> - 2014-06-12 19:48 -0500
                Re: "i = i|0" John Harris <niam@jghnorth.org.uk.invalid> - 2014-06-13 10:16 +0100
                Re: "i = i|0" Tim Streater <timstreater@greenbee.net> - 2014-06-13 11:44 +0100
            Re: "i = i|0" "BartC" <bc@freeuk.com> - 2014-06-12 15:06 +0100
              Re: "i = i|0" Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-06-12 16:54 +0200
          Re: "i = i|0" Denis McMahon <denismfmcmahon@gmail.com> - 2014-06-12 14:11 +0000
            Re: "i = i|0" James Kuyper <jameskuyper@verizon.net> - 2014-06-12 12:20 -0400
      Re: "i = i|0" BGB <cr88192@hotmail.com> - 2014-06-11 22:59 -0500
        Re: "i = i|0" James Kuyper <jameskuyper@verizon.net> - 2014-06-12 08:06 -0400
          Re: "i = i|0" BGB <cr88192@hotmail.com> - 2014-06-12 08:39 -0500

csiph-web