goの続き(その1)

Snow Leopardでbuildの途中にHungしたっぽいのは昨日書いたとおり。
で、念のため?debianで試してみた。
(しっかし、いくらgoが速くても、PentiumIIIだと遅い...)

今度は問題なくtestをパスした
1 known bugs; 0 unexpected bugs
とか言ってるけど、unexpected じゃないから大丈夫だよね。

さて、ネイティブコンパイラ言語のgoなのだけど、ふと、実行サイズを見て
「何じゃこりゃー!?」
by 松田優作(古いな)

Snow Leopard$ ls -al 8.out

  • rwxr-xr-x 1 skobayas staff 589753 12 2 21:07 8.out

Debian$ls -al 8.out

  • rwxr-xr-x 1 linux linux 581398 2009-12-02 21:35 8.out

ソースはサンプルのhelloworldだけなのに、サイズがやたらでかいんですけど。

何かの間違いかと思ったら、これはこれで正しいらしい。
まぁ、できたてほやほやの言語だから、大目に見てあげる必要があるんだろうけど。
それと、gcとかの機能を含んだランタイム(libc.a相当?)をスタティックリンクしてる
のだから大目に見てあげる必要があるのか。
その点、Javaは半分インタプリタ?だからだいぶ有利ではあるわな
それと、Cで組めば、libc.a相当は今時ダイナミックリンクだろうからこれも有利ではあるな。

そういえば、Javaも出始めの頃をリアルタイムで知っているんだなぁ。
(そういう時代を生きていただけで、言語そのものを深く理解していたわけではない)

後何年かしたら、
「goは出始めの頃からいじっていたんだぜ」
なんて自慢できるかも
...って、単なる趣味の悪い年寄り以外の何者でもないな。自粛
閑話休題
新しい言語を習熟するのに最適な手法はやはり、ソースを書いてみることに尽きる、
というわけで、projecteulerをgoで解いてみるの巻
いや、早速はまりました。

その1:fmt.Printfで"%d"を使用しないと整数が表示できない?
コンパイル時に怒られて先に進めない)
その2:変数の初期化書式で":="を使用する時は";"必須
(よく見たら、ドキュメントに書いてある)
その3:"or"じゃなくて"||" "and"じゃなくて"&&"
(まぁ、C/Java界隈の人にとってはこちらが常識なんでしょうけど)

ようやく、コンパイルが通って、答えが出た。
当然だけど、合っている。良かった良かった。

projecteulerは一段落ついた(というか、これ以上はかなり厳しくなった)ので、お休みしてたけど、
違う言語で再実装してみるというのは結構面白いことに気がついた今日この頃。

goバイナリ、何故かかなり速いです。
(比較対象の私のpythonコードがへぼいだけ?
=>よく見たら、python再帰を使ってた。goでは使ってないのに。これはフェアじゃないな。
とはいえ、疲れたので、これは放置だな。まぁ、python版も再帰を使わないように書き直せば
いいんだけど)

go、癖もあるけど、慣れ、の問題のような気もして来た。
pythonのlistみたいに、融通が利かない部分があるけど。ってかpythonのlistが
便利すぎるのだけど)

ただ、エディターが賢くないと私みたいな軟弱ものにはちときつい
(単に、SyntaxErrorと言われても...)

それを考えると、Python(IDLE)楽でいいわ。