On 25 August 2018 at 09:28, Carl Boettiger wrote: | I always thought it meant "Long" (I'm assuming R's integers are long | integers in C sense (iirrc one can declare 'long x', and it being common to | refer to integers as "longs" in the same way we use "doubles" to mean | double precision floating point). But pure speculation on my part, so I'm | curious! It does per my copy (dated 1990 !!) of the 2nd ed of Kernighan & Ritchie. It explicitly mentions (sec 2.2) that 'int' may be 16 or 32 bits, and 'long' is 32 bit; and (in sec 2.3) introduces the I, U, and L labels for constants. So "back then when" 32 bit was indeed long. And as R uses 32 bit integers ... (It is all murky because the size is an implementation detail and later "essentially everybody" moved to 32 bit integers and 64 bit longs as the 64 bit architectures became prevalent. Which is why when it matters one should really use more explicit types like int32_t or int64_t.) Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
The choice of the L suffix in R to mean "R integer type", which is mapped to the "int" type at the C level, and NOT to the "long int" type, is really unfortunate as it seems to be misleading and confusing a lot of people. The fact that nowadays "int" and "long int" have the same size on most platforms is only anecdotal here. Just my 2 cents. H. On 08/25/2018 10:01 AM, Dirk Eddelbuettel wrote:> > On 25 August 2018 at 09:28, Carl Boettiger wrote: > | I always thought it meant "Long" (I'm assuming R's integers are long > | integers in C sense (iirrc one can declare 'long x', and it being common to > | refer to integers as "longs" in the same way we use "doubles" to mean > | double precision floating point). But pure speculation on my part, so I'm > | curious! > > It does per my copy (dated 1990 !!) of the 2nd ed of Kernighan & Ritchie. It > explicitly mentions (sec 2.2) that 'int' may be 16 or 32 bits, and 'long' is > 32 bit; and (in sec 2.3) introduces the I, U, and L labels for constants. So > "back then when" 32 bit was indeed long. And as R uses 32 bit integers ... > > (It is all murky because the size is an implementation detail and later > "essentially everybody" moved to 32 bit integers and 64 bit longs as the 64 > bit architectures became prevalent. Which is why when it matters one should > really use more explicit types like int32_t or int64_t.) > > Dirk >-- Herv? Pag?s Program in Computational Biology Division of Public Health Sciences Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N, M1-B514 P.O. Box 19024 Seattle, WA 98109-1024 E-mail: hpages at fredhutch.org Phone: (206) 667-5791 Fax: (206) 667-1319
On 25 August 2018 at 13:49, Herv? Pag?s wrote: | The choice of the L suffix in R to mean "R integer type", which | is mapped to the "int" type at the C level, and NOT to the "long int" | type, is really unfortunate as it seems to be misleading and confusing | a lot of people. The point I was trying to make in what you quote below is that the L may come from a time when int and long int were in fact the same on most relevant architectures. And it is hardly R's fault that C was allowed to change. Also, it hardly matters given that R has precisely one integer type so I am unsure where you see the confusion between long int and int. | The fact that nowadays "int" and "long int" have the same size on most | platforms is only anecdotal here. | | Just my 2 cents. Are you sure? R> Rcpp::evalCpp("sizeof(long int)") [1] 8 R> Rcpp::evalCpp("sizeof(int)") [1] 4 R> Dirk | H. | | On 08/25/2018 10:01 AM, Dirk Eddelbuettel wrote: | > | > On 25 August 2018 at 09:28, Carl Boettiger wrote: | > | I always thought it meant "Long" (I'm assuming R's integers are long | > | integers in C sense (iirrc one can declare 'long x', and it being common to | > | refer to integers as "longs" in the same way we use "doubles" to mean | > | double precision floating point). But pure speculation on my part, so I'm | > | curious! | > | > It does per my copy (dated 1990 !!) of the 2nd ed of Kernighan & Ritchie. It | > explicitly mentions (sec 2.2) that 'int' may be 16 or 32 bits, and 'long' is | > 32 bit; and (in sec 2.3) introduces the I, U, and L labels for constants. So | > "back then when" 32 bit was indeed long. And as R uses 32 bit integers ... | > | > (It is all murky because the size is an implementation detail and later | > "essentially everybody" moved to 32 bit integers and 64 bit longs as the 64 | > bit architectures became prevalent. Which is why when it matters one should | > really use more explicit types like int32_t or int64_t.) | > | > Dirk | > | | -- | Herv? Pag?s | | Program in Computational Biology | Division of Public Health Sciences | Fred Hutchinson Cancer Research Center | 1100 Fairview Ave. N, M1-B514 | P.O. Box 19024 | Seattle, WA 98109-1024 | | E-mail: hpages at fredhutch.org | Phone: (206) 667-5791 | Fax: (206) 667-1319 -- http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
On 25/08/2018 4:49 PM, Herv? Pag?s wrote:> The choice of the L suffix in R to mean "R integer type", which > is mapped to the "int" type at the C level, and NOT to the "long int" > type, is really unfortunate as it seems to be misleading and confusing > a lot of people.Can you provide any evidence of that (e.g. a link to a message from one of these people)? I think a lot of people don't really know about the L suffix, but that's different from being confused or misleaded by it. And if you make a criticism like that, it would really be fair to suggest what R should have done instead. I can't think of anything better, given that "i" was already taken, and that the lack of a decimal place had historically not been significant. Using "I" *would* have been confusing (3i versus 3I being very different). Deciding that 3 suddenly became an integer value different from 3. would have led to lots of inefficient conversions (since stats mainly deals with floating point values). Duncan Murdoch> > The fact that nowadays "int" and "long int" have the same size on most > platforms is only anecdotal here. > > Just my 2 cents. > > H. > > On 08/25/2018 10:01 AM, Dirk Eddelbuettel wrote: >> >> On 25 August 2018 at 09:28, Carl Boettiger wrote: >> | I always thought it meant "Long" (I'm assuming R's integers are long >> | integers in C sense (iirrc one can declare 'long x', and it being common to >> | refer to integers as "longs" in the same way we use "doubles" to mean >> | double precision floating point). But pure speculation on my part, so I'm >> | curious! >> >> It does per my copy (dated 1990 !!) of the 2nd ed of Kernighan & Ritchie. It >> explicitly mentions (sec 2.2) that 'int' may be 16 or 32 bits, and 'long' is >> 32 bit; and (in sec 2.3) introduces the I, U, and L labels for constants. So >> "back then when" 32 bit was indeed long. And as R uses 32 bit integers ... >> >> (It is all murky because the size is an implementation detail and later >> "essentially everybody" moved to 32 bit integers and 64 bit longs as the 64 >> bit architectures became prevalent. Which is why when it matters one should >> really use more explicit types like int32_t or int64_t.) >> >> Dirk >> >