1. 22
  1. 1

    This is a comprehensive exploration.

    The reason we need to care about address and data widths is that, as soon as one programs in a language higher-level than assembly language, one sometimes wants to treat pointers as integers and vice versa.

    I feel like this is exactly backwards. I would like to forget that some values are immediate and others are composite, as well as the difference between register and memory operands.

    However, as far as I know, the only language which is sufficiently flexible is C — at least, C as of the C99 version.

    Forth comes to mind. It is unsafe, but with different unsafety tradeoffs than C. In the typical Forth environment, the static integer types are usually only as strong and distinct as the host CPU’s (in)ability to tell apart pointers and data.