さっき決めたブログ

[Nim]プログラミング言語 “Nim” を始めてみた

2020年7月18日 1:08 PM02.36KNimPROGRAMNimプログラミングgccVSCode

何か新しい言語を始めようと思い、色々検討した結果Nimを始める事にしました。

はじめに

Nimとは

Wikipediaより引用
Nim(旧称Nimrod)とは命令型、マルチパラダイム、コンパイル言語という特徴を持つプログラミング言語であり、アンドレアス・ランプフにより設計・開発された。
Nimは「効率的で表現豊かで優雅」であるように設計されている。メタプログラミング、関数型プログラミング、メッセージパッシング、手続き型プログラミング、オブジェクト指向プログラミングをサポートしており、 コンパイル時のコード生成、代数的データ型、C言語のForeign function interface(FFI)、JavaScriptへのコンパイルなどの機能を提供している。Pythonのようなシンプルな構文で書かれるが、C言語並みの高いパフォーマンスを有している。Rust、D言語、Goなどの言語としばしば比較される。
らしいです。

つまりは

  • C言語などと同じくコンパイル型の言語で、実行形式のバイナリが作れるけど、それだけじゃなくJavaScriptにも変換できるよ。
  • それなりに分かりやすい構文で、処理速度も速いよ。

という事なのでしょう(多分...)。

何故Nimを選択したのか

自分の場合、仕事でもプログラミングをすることはありますが、ここでやっているのはあくまでも趣味の範疇なので、Windowsや他OSのGUI開発だったり、Web開発、モバイル開発など、色々な事をやってみたいというのがあります。
しかし、その度に色々な言語を使い分けるのは大変ですが、その点Nimの場合、

  • GUI(Windows,Linux,MacOS)
  • Web(JavaScript,WebAssenbly)
  • モバイル(Android,iOS)

などほぼ全ての環境に対応できるというところが大きいです。

競合になる言語は他にもいくつかあり、RustGoも検討したのですが、

Rust
何か難しいような事言っている人が多い
GUI開発パッケージでいまいち良いのが無かった
Go
何かコンパイルしてみたらやたらファイルサイズが大きかった
構文が特殊っぽい

という事で、結局Nimをやってみる事にしました。

ただ、Nimにも色々と問題はあります。
一番大きいのは、いまいち人気がない事でしょうか。
それにより、ネット上での情報量も上の2言語に比べると大分少ない気もしています。

環境設定

Windows10 64bit環境での導入になります。

今回入れたもの

インストーラを使ってセットアップしても良いのだが、PATH周りに色々と書かれるのが嫌なので、出来る限り、zip形式のファイルを使って手動で設定していく。
※気にしない人は普通にインストーラーなどで入れたほうが良いと思います。

  • Visual Studio code 既に導入済みなのでインストールは今回割愛
  • Nim本体 こちらより "Download x86_64 zip"を選択して、ファイルをダウンロード
    ダウンロードしたファイルは D:\devtools\nimというフォルダに解凍しました。
  • MinGW(C言語コンパイラ) ※Nimは一旦C言語に変換されてからコンパイルする方式なので必須
    先ほどと同じサイトの下の方を見ていくと、"Notes about compiler dependencies" という項目があり、そこに "mingw64.7z" のダウンロードリンクがあるので、ダウンロード
    ダウンロードしたファイルは D:\devtools\mingwというフォルダに解凍しました。

環境構築

NimとMinGWにパスを通すためのスクリプトを作成する。

スクリプト起動用のショートカットを作成する。

ショートカット

これで最低限のものはOKかな?
以降、各種作業は全て上記ショートカットから起動したコンソールのコマンドで行う

Visual Studio code 周りの設定

開発にはVisual Studio code(以下VSCode)を使用するので、Nim用の設定を行う
コンソールで code と入力して、VSCode を起動します。
(コンソール上から起動しないとさっき設定されたパスが有効になりません)

拡張機能のインストール

  • Nimプラグイン "Nim"で検索し、Konstantin Zaitsevさんが作成した拡張機能をインストール
  • Native Debugプラグイン "Native Debug"で検索し、WebFreakさんが作成した拡張機能をインストール

設定の変更

Nimのインデントは見た目だけではなく、言語的に意味のあるもので、インデントにはタブを使用できない(半角スペースを用いる)との事。
なので、Nimソースコードの編集時はタブキーを押した際にスペースでインデントされるように設定してやる。
また、Nimでの標準のインデント幅は2Spaceらしいので、そちらも設定する。
VSCodeの settings.json を開き以下の内容を追加する。

サンプルプログラミングを動かす

お決まりの "Hello World!!" を表示してみる。
最初に作業用のフォルダを作成しておく。 今回は D:\projects\nim\test001 フォルダ上で作業を行う

tasks.jsonの設定

VSCodeからフォルダを開き、メニューより ターミナルタスクの構成... を選択する。 tasks.json ファイルが開くので、以下を入力

launch.jsonの設定

メニューより 実行構成の編集 を選択する。
launch.json ファイルが開くので、以下を入力

コードの記載・実行

"test01.nim" を作成する。

Ctrl+Shift+B でコンパイル。
F5で実行

こんな感じでデバッグコンソールに "Hello World!!!!"" が表示されたら成功です。
実行結果

デバッグコンソールではなく、普通の黒いコンソール画面に表示したい場合、"lunch.json" の "externalConsole": true, を有効にしてやればOK

使ってみた感想

とりあえず、コンパイルと実行までは出来た。
まだ、全然わかっていない事の方が多いので、多くは語れないが、.NetやJavaの様にVMだの、ランタイムだの余計なものが必要ないのでとても楽に感じた。
ツールやフレームワークなどは全く触っていないので、その辺りの使い勝手次第で今後の評価は変わるし、最悪他の言語に乗り換えるかもしれないが、
今のところはとても良い印象である。

ここまでのコード

nimtest01.zip

参考にしたサイト

Nimを知ってほしい
https://qiita.com/happy_packet/items/3c59abf9875f4f6869c9
至高の言語、Nimを始めるエンジニアへ
https://qiita.com/rigani/items/6e87c7cee6903ed65ed2
オープンソースの言語/Nimとは
https://www.ossnews.jp/oss_info/Nim
VSCodeでNimのデバッグ(ステップ実行)
https://qiita.com/6in/items/10325115859c93a1d6ba

今回はここまで。

投稿者プロフィール

KARASU
うーん いろいろ考え中。。。

コメント

コメント取得中...

関連記事

TOPへ