Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | BGB <cr88192@hotmail.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: "i = i|0" |
| Date | 2014-06-11 22:59 -0500 |
| Organization | albasani.net |
| Message-ID | <lnb8ld$or0$1@news.albasani.net> (permalink) |
| References | <emscripten-20140611221102@ram.dialup.fu-berlin.de> <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> |
On 6/11/2014 4:37 PM, James Kuyper wrote: > On 06/11/2014 05:09 PM, Ike Naar wrote: >> On 2014-06-11, Stefan Ram <ram@zedat.fu-berlin.de> wrote: >>> When they then call the function with non-integer arguments >>> its their fault. (Or they can write a |0 wrapper instead >>> of requiring each and every function to do |0 and thereby >>> possibly slowing down execution and enlarging code size.) >> >> With a decent optimizing compiler, do you think that |0 would >> slow down execution or enlarge code size? > > I'm no JS experts, but so far I haven't seen any responses from those > who are, so I'll throw in my guesses. > no JS expert either... but, I had been working on writing a VM which can run C and supports JS as a target... but, yeah, "|0" if anything, makes code faster, by offering a useful hint (and being trivial to optimize away). besides this, it also helps enforce integer semantics. > 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, ...). different JS engines generally implement numbers internally in different ways: NaN-tagged values (pretty much all numbers are double but NaN encodes special cases, such as object-pointers/references); tagged-reference types (where we have a value and a few tag bits indicate what it is, ex: pointer/integer/double/...); inferred basic types (untagged integer or double values, ...); ... or such...
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll 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