まめめもさんの core golf のエントリー(6/27)より
さて、core dump するコードの短さで競う core golf はゲームとして成立するでしょうか。明らかに環境や処理系に依存するのでルールの決め方が難しいです。とりあえずうちでは core dump した C のコード (15B) 。もっと短くなる?
core dumpの定義はいろいろあると思いますが、とりあえず手元の環境 CentOS Linux x64_64 で segmentation fault が起きるコードで。
(1) C言語で core dump
早速、core dumpした5byteのCのコード。
(via. λx.x K S K @ はてな - core golf)
main;
実行結果
$ echo -n "main;" > a.c && cc a.c && ./a.out
a.c:1: 警告: データ定義が型や記憶クラスを持っていません
a.c:1:6: 警告: no newline at end of file
zsh: segmentation fault ./a.out
コンパイラの警告は出るけどちゃんと実行バイナリができて、それを実行するとsegmentation faultしてくれます。
(2) Perlでcore dump
正規表現でsegmentation faultを起こすのが簡単かな、と思ってトライ。Perlで22byte。
(via. [perl #33945] Segmentation fault with deep recursion in regex engine)
$x=qr/(??{$x})/;""=~$x
実行結果
$ perl -e'$x=qr/(??{$x})/;""=~$x'
zsh: segmentation fault perl -e'$x=qr/(??{$x})/;""=~$x'
barewordを使ってもよければもう1byte節約することができますが、とりあえずここまで。
(3) Rubyでcore dump
ruby-devのMLには、最新のrubyをcore dumpさせるコードがたくさん投稿されているようです。以下、手元の環境で再現した5byteのコードです。
(via. [ruby-dev:31085] 0..:" dumps core)
0..:"
実行結果
$ ruby -e '0..:"'
-e:1: unterminated string meets end of file
-e:1: empty symbol literal
-e:1: [BUG] Segmentation fault
ruby 1.8.5 (2006-08-25) [x86_64-linux]
アボートしました
最強言語 Ruby ?
あと、Ruby 1.8系では正常に(?)core dumpできませんが、Ruby 1.9 では 4byte で core dump 可能なコードもいくつか報告されているみたいでした。
もしかしたら最新のリリースビルドでは再現できないかもしれません。
$ ruby -e '$&;[]'
$ ruby -e '$`;0'
$ ruby -e '$1;0'
$ ruby -e '{*0}'
ということで、現在 Ruby 1.9 が 4 byte で Core Golf 最強になっていますが、3 byte 以下で core dumpできる処理系をご存知の方がいらっしゃいましたら教えてください。