
#8299: Add richer data model address arithmetic: AddrDiff and AddrInt (ie d Int_ptr_diff and Int_ptr_size) ----------------------------+---------------------------------------------- Reporter: carter | Owner: Type: feature | Status: new request | Milestone: 7.10.1 Priority: high | Version: 7.6.3 Component: | Keywords: Compiler | Architecture: Unknown/Multiple Resolution: | Difficulty: Project (more than a week) Operating System: | Blocked By: Unknown/Multiple | Related Tickets: Type of failure: | None/Unknown | Test Case: | Blocking: 8287 | ----------------------------+---------------------------------------------- Comment (by rwbarton): On point 2: It seems to me that the current Foreign.Ptr API {{{ plusPtr :: Ptr a -> Int -> Ptr b minusPtr :: Ptr a -> Ptr b -> Int }}} pretty much forces `Int` to be the same size as a C pointer, on any architecture. For a real x32 executable, this would mean 32-bit `Int`, while for a "fake x32" mode which maintains a heap below 4G and stores heap pointers as 4 bytes, but otherwise is a normal x86_64 executable, this would mean 64-bit `Int`. There doesn't seem to be a good reason why the `Int` used for normal arithmetic, and used to count things in data structures like `Map`, should be tied to that C pointer size. As a matter of fact, an appropriate replacement for those `Int`s in Foreign.Ptr already exists in Foreign.C.Types: `CPtrdiff`, "Haskell type representing the C `ptrdiff_t` type". -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8299#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler