I spent just shy of three decades, implementing, rearchitecting, designing new features, for a language / database heavily used in healthcare IT. (Over half the EHR (electronic health records) in the US are stored using this system - and that’s just counting the ones stored by one of the users of the language / database - it is also used by the VA and the DOD, and many other large healthcare companies - and not just in the US)
I know precisely what it means to have to have code that must be as well tested as possible, or else people could die.
My $0.02:
It does not make sense to try to override the meaning of Int/Int64 for the entire system, as others have pointed out, that would break many things that depend on the correct modulo arithmetic, and would make other things to slow to be usable.
Being able to change the meaning of integer (and floating point) literals on a per module or file basis, or via a macro, would be a very good thing to have in Julia.
There is one issue that would need to be addressed to achieve that - currently the parser is lossy - in that it converts floating point literals immediately into Float64, instead of leaving the original form available so it could be picked up by a macro, and say, converted to BigFloat, or Dec64 / Dec128, without any digits being lost before the macro sees the literal. The value returned would need to be some new Literal type, that could hold both the value as currently parsed, as well as the actual string (possibly a SubString) with the original literal characters - for example:
Literal(0.12345678901234568, "0.123456789012345678901234567890123")
This would need to be done in such a way that it was optional for Meta.parse (so as not to break existing programs), and have some way to be able to enable it for particular macros.
Another issue that hasn’t been discussed here, that is a problem with R, Matlab, Python, etc., as well as Julia (if you end up using Float64), is that binary floating point often has many issues, just as important as overflow (from my experience, more so, for healthcare applications when dealing with things like doses, or measurements, that are often with different decimal units (kg, g, mg, microgram, etc.).
Something simple like adding up a bunch of decimal values such as this:
julia> 0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1
0.9999999999999999
can easily lead to problems in a program if one isn’t very careful (and it’s trickier, IMO, than making sure you check for and handle integer overflow).
However, Julia does have a very good solution to those issues.
Instead of using either Int or Float64, use the IEEE 754-2008 Decimal Floating Point formats, in particular, Dec64 or Dec128 (which gives you 34 digits).
If you load the DecFP.jl package, you can benchmark those, and see that 1) they take much less space than either BigInt or BigFloat, and 2) are faster than either of those.
I do realize that for some cases, performance requirements might mean that Int or Float64 will need to be used, and those will need to be reviewed for the issues above (as they would need to be in any language).
@viraltux I do hope you take a look at using DecFP.jl.