Acorn ARX and Modula-2
Heh. IMHO one of the reasons ARX failed to be anything like ready in time, was Modula-2.
"Extra-linguistical objects" - the M2 world and the compiler folk rejected the idea that a program was going to run on actual hardware.
I was writing the hard disc file system, so I needed to lay out the on-disk structures in memory, then issue a read or write to actual hardware.
There was real dogma about finding out, programatically, the address in memory of an object, or the offset into it. New compilers would change the size of my nicely-organised disk-block object from 256 bytes to 257. They even said things like "you don't need to know the units of sizeof() because you only ever feed it back into other routines that know the units". Eventually we got the academic idiots to understand that this was actual physical hardware, and the compiler doesn't get to change the block size from 256 to 257 bytes (or even 2048 to 2056 if sized in bits!) and they came up with the label "extra-linguistical objects" and a separate set of built-in functions that used units of bytes. Like every sane environment has. Sigh.
I mean, if a program cannot change in any way external objects, then you can optimise it away to "main() {return;}" can't you.
Separately, opaque types. This was because there was no initialised static data at all, IIRC. I mean you could not even set a static int to zero, nor assume anything about its value at all. So every module that held state had a "opaque FooData Foo::init()" member and you pass the opaque back to every single function call. When it came to making an efficient OS executable they were talking about ideas of running it up to a certain point where all the init()s had been called, then snapshotting the memory state and building that into the image, into the BSS section, outside of anything the language could do. FFS.
Such bodges required to make a sensible executable image.
Anyway, you'll have gathered that we hated it.