<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
I understand "full range" is a problem, because, something like,<BR>
the set of operations isn't closed.<BR>
 <BR>
 <BR>
I believe you need to define multiple types and/or<BR>
multiple operations.<BR>
 <BR>
 <BR>
You need an ability to trap/fail on overflow.<BR>
You need an ability for silent wraparound on overflow.<BR>
You need perhaps a way to add precision as needed. Slow.<BR>
You need perhaps a way to specify arbitrarily high precision,<BR>
  and then, again, either trap/fail or silent wraparound.<BR>
 <BR>
 <BR>
Basically, in my opinion, having just "INTEGER" and just "+"<BR>
isn't nearly sufficient.<BR>
 <BR>
 <BR>
Not having operator overloading makes pretty much any solution painful to use.<BR>
 <BR>
 <BR>
We and C both have a compromise that covers most cases and<BR>
when people really need higher fixed or arbitrary precision, they<BR>
either give up the convenient "operator" syntax or use C++.<BR>
 <BR>
 <BR>
As I understand, in C, unsigned integers are defined to "silently wraparound"<BR>
and signed integers are implementation defined, could "trap" but in reality<BR>
all implementations "silently wraparound".<BR>
It is a point of unsafety though, beyond the more well known<BR>
buffer overflows, leaks, etc.<BR>
 <BR>
 <BR>
 - Jay<BR><BR> <BR>> Date: Thu, 7 Jan 2010 19:22:00 -0600<BR>> From: rodney_bates@lcwb.coop<BR>> To: m3devel@elegosoft.com<BR>> Subject: Re: [M3devel] what to do about file sizes being 32bits?<BR>> <BR>> Full-range unsigned integers are a language designer's headache, because<BR>> there are conflicts no matter what you do. The Modula-3 approach is to<BR>> use the operations in interface Word.i3 (and now Long.i3) on type<BR>> INTEGER (not CARDINAL, which has only half the range). These apply<BR>> unsigned interpretation to values of type INTEGER.<BR>> <BR>> hendrik@topoi.pooq.com wrote:<BR>> > On Thu, Jan 07, 2010 at 06:59:31AM +0000, Jay K wrote:<BR>> >> File.i3:<BR>> >><BR>> >><BR>> >> Status = RECORD<BR>> >> type: Type;<BR>> >> modificationTime: Time.T;<BR>> >> size: CARDINAL (* oops... *)<BR>> >> END;<BR>> >><BR>> >><BR>> >> What to do?<BR>> >> [0.. higher than 7FFFFFFF] doesn't "just work".<BR>> >> higher than 7FFFFFFFF is not legal on 32bit, unless you put "L" on the end,<BR>> >> which presumably has some relationship to turning it into a LONGINT, which<BR>> >> causes users to fail to compile<BR>> > <BR>> > In any case, is the proper type for file offsets [0..7fffffffffffffff] <BR>> > or [0..ffffffffffffffff]? I suspect the latter. It might take some <BR>> > effort to make that legal in Modula 3.<BR>> > <BR>> > -- hendrik<BR>> > <BR>                                     </body>
</html>