[M3devel] what to do about file sizes being 32bits?
Tony Hosking
hosking at cs.purdue.edu
Thu Jan 7 16:13:58 CET 2010
On 7 Jan 2010, at 04:47, Jay K wrote:
> I think I can fix everything in the cm3 tree if size is changed to LONGINT.
> Including Index(), Length(), Seek().
> It involves *many* uses of VAL and ORD, and indeed, it would help if:
>
>
> INC(longint, integer) was legal, which seems perfectly ok.
> longint := integer ditto
I discourage both of these, just to emphasize that INTEGER and LONGINT are independent types.
> Most of the toplevel users will end up throwing in ORD, as they
> require files to fit in memory/addressspace.
Right.
> There is still the matter of this will break too much code out there.
>
> - Jay
>
> From: jay.krell at cornell.edu
> To: m3devel at elegosoft.com
> Date: Thu, 7 Jan 2010 06:59:31 +0000
> Subject: [M3devel] what to do about file sizes being 32bits?
>
> File.i3:
>
>
> Status = RECORD
> type: Type;
> modificationTime: Time.T;
> size: CARDINAL (* oops... *)
> END;
>
>
> What to do?
> [0.. higher than 7FFFFFFF] doesn't "just work".
> higher than 7FFFFFFFF is not legal on 32bit, unless you put "L" on the end,
> which presumably has some relationship to turning it into a LONGINT, which
> causes users to fail to compile
>
>
> LONGINT doesn't "just work"
> causes users to fail to compile
>
>
> stale imports -> compiling ProcessPosixCommon.i3
> stale imports -> compiling ProcessPosixCommon.m3
> stale imports -> compiling ProcessPosix.m3
> stale imports -> compiling FileRd.i3
> missing version stamps -> compiling FileRd.m3
> "../src/rw/FileRd.m3", line 73: incompatible argument types: MIN
> "../src/rw/FileRd.m3", line 140: types are not assignable
> 2 errors encountered
> stale imports -> compiling FileWr.i3
> missing version stamps -> compiling FileWr.m3
> "../src/rw/FileWr.m3", line 92: incompatible argument types: MIN
> "../src/rw/FileWr.m3", line 108: incompatible argument types: MAX
> 2 errors encountered
> st
>
>
> Change it to LONGINT, fix all the callers, and hope the damage isn't too great outside the cm3 tree?
>
>
> Change it to LONGINT only for 32bit platforms, somehow author the cm3 tree to work either way,
> hope the damage isn't too great outside the cm3 tree?
>
>
> Change it to LONGREAL so that it works immediately on NT386.
> Same issues as above, breaks existing users.
>
>
> Maybe relax the language some, so that e.g.
> a:INTEGER;
> b:LONGINT;
>
> b := a;
>
> just works, see if it helps make more code compile with the change?
>
> a := b is problematic of course, but what is wrong with b := a?
>
> - Jay
>
More information about the M3devel
mailing list