なぜ、みゃみゅに玉子がついたのか?

増え続ける趣味(ダーツ・ももクロ・カラオケ・お酒・映画・アニメ・ゲーム等)のことや、気になったニュース、思いついた意気込みなどを書いていきます。不定期日記みたいなもんです。

ブログは書いていませんが、Nimは書いています

最近「少しでもいいから毎日趣味でもコードを書こう」と思い、毎日ちょっとずつNimで何かを書いています。

github.com

f:id:myamyugon:20210904003451p:plain
最近、毎日生える草

書き慣れているJavaScriptとかGoや忘れかけているJava、話題のRustなんかでもよかったのですが僕が毎日書くのに選んだのはNimです。

nim-lang.org

Nimとは

Nim - Wikipedia によると…
Nimとは、Andreas Rumpfにより設計・開発されたプログラミング言語で、「効率的で表現豊かで優雅」であるように設計されています。

特徴としては次のようなものがあります。

  • Pythonのようなインデントブロックでシンプルな構文
  • C言語並みの高いパフォーマンス
  • C言語JavaScriptなどのコードを生成することができる
  • nimbleというパッケージマネージャーがある

僕が面白いなと思った書き方はこれです。

proc say(message: string) =
  echo message

say("hogehoge") # こう書いても動く
"hogehoge".say() # こう書いても動く

関数が第1引数の型のメソッドのように振る舞います。
stringを拡張したメソッドを作れるイメージです。

この仕様により、演算子を使ってこういうのもなんとなく書けます。

# "a" / "b" => "ba"
proc `/`(a: string, b:string): string =
  return b & a

echo "fuga" / "hoge" # => "hogefuga"

まだJavaScriptを生成したりマクロやテンプレートを使って楽をしたりまでは踏み込んでいませんが、調べれば調べるほど面白い特徴に出会えます。

なぜ、Nimを選んだのか

これは思い返してみると「なんとなく選んだ」がしっくりきます。

  • コードを読んでみて読みやすかった
  • コードを読んでみて謎があった
  • 新しくてコンパイルして動く言語を1つ使いたかった
  • vscode拡張機能があった
  • にむって響きがよかった
  • ニムトで勝てなかったのが悔しかった

こんなところです。

Goでもよかったのですが、仕事で書けるし。
Rustでもよかったのですが、なんか読んでてしっくりこなかったです。

Nimで何を作るのか

今は練習中で、基本的なことをいろいろ書いています。
github.com

その過程で「Puppeteerみたいなことをしてみよう」と思いましたが、nimbleパッケージにあるWebDriverが少し機能として足りなかったため、Seleniumをコントロールするライブラリを書き始めました。
github.com

WebDriverやSeleniumの仕様を調べながらなので、なかなか完成が遠そうですがどこかで一気に書き上げてしまいたいなあ・・・と思います。

あとは、ニムトの必勝ロジックを考えたいので、ロジックでニムトで戦わせるゲームみたいなのも作ってみたいです。
どんなときに何をだせば勝てるのかを書いて、それを何回か戦わせてグリコかなんかでレーティングを出して・・・みたいな構想だけはあります。
言語はなんでもよかったのですがNimって名前はNimmtを攻略するのにふさわしいと思ったので。
リポジトリ名だけは決めてます。「nimnimmt」(にむにむと)です。


このブログではあまりプログラミングに関して書いてこなかったのですが、趣味としてしっかり書き始めたので書いてみました。

技術的なノウハウはQiitaとかに書こうとは思いますが、「こんなの作ってるよ」などはこれからも少しは書いていこうと思います。