I think the Lisp way is nicer - it treats ints, floats, whatever, as objects, but you can make specific declarations to the compiler to treat them as ints. This way, you only do this when and only when you need to optimize (and are 100% sure that you'll be dealing with an int and not some other type of object - since Lisp has & allows dynamic typing)