language agnostic - Pretending that a 64-bit integer has unlimited range -
i implementing compiler proprietary language.
the language has 1 built-in integer type, unlimited range. variables represented using smaller types, example if a , b integer variables b ever assigned value of expression a % 100000 or a & 0xffffff, b can represented int32 instead.
i considering implementing following optimization. suppose sees equivalent of c# method:
public static void main(string[] args) { bigint = 0; while (true) { dostuff(i++); } } mathematically speaking, transforming following not valid:
public static void main(string[] args) { int64 = 0; while (true) { dostuff(i++); } } because have replaced bigint int64, overflow if loop runs forever. suspect can ignore possibility because:
iinitialized 0 , modified repeatedly adding 1 it, means take 263 iterations of loop make overflow- if
dostuffuseful work, take centuries (extrapolated crude tests)ioverflow. machine program runs on not last long. not architecture won't last long either, don't need worry running on vm migrated new hardware. - if
dostuffnot useful work, operator notice wasting cpu cycles , kill process
so scenarios do need worry about?
compilers use hack?
well.. seems me answered question.
but doubt question has useful outcome.
if built-in integer has unlimited range default should not inefficient typical usage such loop counter.
i think expanding value range (and allocate more memory variable) after actual overflow occur won't hard such language.
Comments
Post a Comment