Vladimir Panteleev





Permalink Reply

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: https:// github.com/ CyberShadow/ SlimD 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).