Demoting i686-PC-windows-gnu to Tier 2
blog.rust-lang.org
blog.rust-lang.org
For context, that platform had 76K downloads. x86_64-unknown-linux-gnu had 135M, or about 1800x more.
There are other use-cases, though not exactly popular or mainstream, but supposing you need dozens, hundreds, maybe even over a thousand currently-supported Windows VMs running off a single VM host box: you'll achieve a higher VM density with an x86 build of an OS compared to the x64 build; right now the only option is some cut-down custom build of Windows 10 Embedded x86[1]
...though I'm sure no-one outside of a DEFCON or CCC meetup's drinking-game will ever find themselves doing this - just so long as I get to see it in a youtube video.
[1] EDIT: Turns out they renamed the (non-CE) NT-based Windows Embedded to "Windows IoT" - which annoys me because it's perfectly allowed to make a Windows IoT build without any networking features enabled - so it'd be like calling Apple's iPod Touch as Apple's "iPod iPhone".
----
I'll admit I'm surprised that "x32" (i.e. AMD64 ISA, but with 32-bit pointers) was never supported on Windows, nor exactly popular on Linux, because (at least before Electon Apps existed) plenty of software really has no business using 64-bit pointers, so it makes sense to keep 32-bit pointers; another benefit-of-sorts is that if your program has a memory-leak then it'll crash once the leak hits 4GB - but with 64-bit pointers your process might end-up gobbling hundreds of gigs of RAM before the next malloc call fails.
While we're at it, let's also bring back Intel's 21-bit NEAR/FAR pointers ("segmented memory") if only to keep Rust programmers (and their compiler team) on their toes.
Maintaining the support for a different architecture only for that doesn't make a lot of sense, probably the reason it was never supported. RAM is cheap these days so...
Pointers are everywhere. In real world applications we see an increase between a quarter to a third. For example in 2016 Mozilla reported 25% increase from 32-bit Firefox to 64-bit [1]. Google deemed it necessary to implement pointer compression in Chrome to counter the effect. Java also has pointer compression.
[1] https://blog.mozilla.org/nnethercote/2016/07/22/firefox-64-b...
And that’s just thinking in terms of logical RAM. You then have translation tables which pointers need to index into - having them larger makes indexing even more slower, compounding the issue
If you want that, you can enable ulimits without changing your ABI.
Interestingly, Windows on ARM hasn't made it up to Tier 1 yet.
Windows on ARM is irelevant. Surface is Microsoft's offering to keep execs away from Apple. And just like Apple, they are toys. All relevant Windows software is x86(-64).
Windows on ARM couldn't be tier 1 until recently as there weren't Windows ARM github runners. Now that there are I think it likely that it'll be promoted to tier 1.
An RFC for that has been submitted recently: https://github.com/rust-lang/rfcs/pull/3817
This is looking to go for it though https://github.com/dpaoliello/rfcs/blob/aarch64tier1/text/38... but we'll see if there is enough interest.
Using smaller pointers also allows for better data locality and better cache efficiency depending on your data layout. If you're not close to hitting 4GiB of RAM, a few free percentage points in performance aren't a bad deal.
Microsoft isn't going to deprecate 32 bit application support any time soon, so you may as well take advantage. That said, so few people have need for it that the deprecation into tier 2 support is probably the right choice. Whatever the 32 bit ABI can do, a custom allocator can probably do just as well on x64.
Oh, and Office stll comes in 32 bit mode for some reason. If you're building an Office plugin, you may need 32 bit code.
Damn, I'd love to take that on, if only I had the time...
Well I guess this will cause OpenBSD to drop more packages that depend upon rust for i386:
https://marc.info/?l=openbsd-misc&m=174696055709421&w=2
FWIW, OpenBSD i386 seems to be on its way to tier 2 anyway:
https://www.openbsd.org/i386.html
I wonder if this could cause NetBSD to start dropping packages that need rust on some ports. Right now, due to NetBSD's assume Cross-Compiling, I do not think rust is an issue for NetBSD (yet).