I've picked up an older project for using D on barebones Win32 as a "better C".

Thanks to recent advances in DMD (-betterC and -m32mscoff), I could get a "Hello, world" program on Win32 down to just 438 bytes when compiled. This is without assembly, linker scripts, custom Phobos/Druntime, or manual post-build tweaks.

-betterC allows stripping things like ModuleInfo, and as of recently it also strips file/module names used for asserts/range check errors (which were emitted even in -release mode). A better alternative would be a DMD equivalent to -fdata-sections, though, so unneeded variables, constants, and data generated by the compiler could be garbage-collected by the linker.

-m32mscoff allows using more linkers. Specifically, the Microsoft Linker and Crinkler, which only understand COFF, can both generate executables which are much smaller than those created by OPTLINK.

The 438-byte "Hello, world" program is achieved using Crinkler, which is a COFF linker with aggressive compression and header optimization. It was created for compressing 4K demos.

Without compression on header optimization, you can reach 630 bytes using Unilink, a freeware linker which is compatible with both COFF and OMF.

The source code is not much to look at, most of the "magic" is in the makefiles:


See samples/01-msgbox for more commentary. The figures above are for samples/02-console.

The motivation for this project is mostly hack value and aesthetical (a 500 KB EXE with 5 KB worth of actual functionality is not pretty).

Reply via email to