Verilog quine

誰も quine を書いたことのなさそうな言語で quine を書いてみたくなったので、ちょっと調べても見つからなかった Verilog で書いてみました。

module quine;
wire [648:1] s = 648'h3b0a696e697469616c2023312024646973706c617928226
d6f64756c65207175696e653b5c6e77697265205b3634383a315d2073203d20363438
276825682573222c732c73293b0a656e646d6f64756c65;
initial #1 $display("module quine;\nwire [648:1] s = 648'h%h%s",s,s);
endmodule

数値リテラル中の改行は適当に省いてください。

Icarus Verilog で動作確認。

$ iverilog -o quine quine.v
$ ./quine -vcd-none > quine2.v
$ diff quine.v quine2.v
$

$display は printf みたいなものです。

多倍長整数 (のようなもの) をそのまま表示しつつ文字列としても表示するという発想はなぜか今までありませんでした。Ruby 版。改行は省いてください。

543114142524420872685942134807519113887335415350530307640040977122247
3663418478577839382060372434075310437203576713919611951540526.
instance_eval{display;puts Marshal.dump(self)[5..-1]}