💭
Nim-lang hello worldの160Kbのバイナリを150バイトまで縮める(2015 https://hookrace.net/
やや古いネタだが、言及してる人が誰も居ないようなので。
Nim binary size from 160 KB to 150 Bytes · HookRace Blog
hello.nim のバイナリサイズを縮めようという企画らしい。
better CたるNimlangの本質をなかなか表してると思われる。
echo "Hello!"
正直、プログラムとは呼べない行数。
※以下全てnimコマンドラインオプション
- そのままビルド 160Kb
- gccによる最適化 --opt:size 19Kb
- gcをとめる --gc:none 11Kb
- --os:standalone 6.1Kb
- --passL:nostdlib 1.4Kb ※動かず
- システムコール直呼び --noMain 1.5Kb
システムコール直呼びのおかげで、ソースが跡形もない。
Nim package directory syscall
import syscall
const STDOUT = 1
proc write(fd: cint, buf: cstring, len: csize): clong
{.inline, discardable.} =
syscall(WRITE, fd, buf, len)
proc exit(n: clong): clong {.inline, discardable.} =
syscall(EXIT, n)
proc main {.exportc: "_start".} =
write STDOUT, "Hello!\n", 7
exit 0
外部ライブラリをimportしてるが、nimlangは一旦全てをCに落とすので、バイナリサイズに大きな影響はでないようだ。
それをstripして952B
最後に、逆アセンブルしたりELFヘッダを削ったり 150B
Discussion