ブログは書いていませんが、Nimは書いています
最近「少しでもいいから毎日趣味でもコードを書こう」と思い、毎日ちょっとずつNimで何かを書いています。
書き慣れているJavaScriptとかGoや忘れかけているJava、話題のRustなんかでもよかったのですが僕が毎日書くのに選んだのはNimです。
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とかに書こうとは思いますが、「こんなの作ってるよ」などはこれからも少しは書いていこうと思います。