新しい開発言語を学ぶ必要に迫られ、今流行りの言語を色々みましたが、最終的にnimをこれから色々触ってみようという結論にいたりました。情報がまだまだ少なく、あまり有名でないこの開発言語について、少しづつ情報をためていく為の最初の一歩として「何故 nimなのか」と、開発環境の構築を記事にしておきます(2018年4月現在)
目次
処理速度の速い言語を求めて
完全な日曜プログラマの私は、演劇感想文リンクの更新のためのツールをRubyで開発しています
Rubyは、開発者の楽しさを追った言語で、書いていて楽しいし、様々な事ができます
特別な用途(iOSアプリを開発するためのswift等)以外であれば大概の事ができるので、なるべくなら他の言語を扱いたくはなかったのですが、演劇感想文リンクのページの使い勝手をあげていくために、やりたいことが増えるに連れ扱うデータ量が増えていき少しづつ処理時間が重荷になってきました
Rubyは、スクリプト言語の中では、バージョンアップの度に速度の向上が図られているとはいえ、限界があります
よりプリミティブな言語で、コンパイル型の言語を使えば、処理スピードの向上が図れるのではないかと考えました
当初の想定は、GoやRustといわれる最近流行りだした言語でした
ぶっちぎりのスピードを叩き出していたのは意外にも未知の言語nim
この記事で、スピード比較をするとCを除くとnimがぶっちぎりスピードを叩き出しています
以下のグラフは、上記の記事からの引用ですが、単位時間あたりの処理量でGoの2倍、rubyの30倍と、ぶっちぎりのスピードです
正直、言語としての知名度があまりないことから、Web上にもまだ日本語の情報がすくなくビビる部分もありますが、ものは試しで手を付けてみることにしました
nimの環境構築
macOSであれば、はっきり言って超簡単。brewで一発インストール可能です
brew install nim
インストール後に、ヴァージョン情報を確認したらOK
nim --version Nim Compiler Version 0.18.0 [MacOSX: amd64] Copyright (c) 2006-2018 by Andreas Rumpf active boot switches: -d:release -d:useLinenoise
2018年4月時点では、0.18になっています
コーディング環境設定(sublime)
私は、エディタとしてsublimeを利用しています
コードのハイライトを行うため、nim用のパッケージnimlimeをインストールします
上記のリンクからコードをダウンロードして構築してもよいのですが、安定的なパッケージをインストールするのであれば、sublimeのPackageコントロールを利用すれば簡単です
メニュー>基本設定>PackageControlでパッケージインストール画面を開きます
Package Contorol:Install Packageを選択して、「nimlime」を選択してインストールします
コードハイライトとエラーチェックがsublime上で行えるようになります
テスト駆動開発環境の設定
rubyでもrspecを利用して、まずはテストを記述してから、コードを書くというスタイルを貫いています(手間のようで結局これが一番早い)
その為、以下のようなフォルダ構成でテストと作成するモジュールを管理することにしました
以下は、演劇の公演情報を管理するモジュール「show.nim」を開発するためのフォルダ構成です
show┳lib ┣test ┗data
testの配下にunittestを行うモジュールを置き、libの配下に構築するモジュールを作成します
testフォルダに、nimのテスト用のモジュールを配置します
dataフォルダには、モジュールのIN/OUTのデータを作成するイメージです
以下は、公演情報を管理するモジュール(show.nim)のテスト用コードです
#import reviewerpage import unittest import ../lib/show suite "公演情報の管理クラスの挙動": #echo "suite setup: run once before the tests" var show=Show(title:"テスト",filename:"test1.html",fromdate:"2015/12/01",todate:"2016/01/31") setup: echo "run before each test" teardown: echo "run after each test" test "公演期間を取得する": # checkは、NGでもテストは継続する check(show.term=="2015/12/01〜2016/01/31") test "公演リンクを取得する": # checkは、NGでもテストは継続する check(show.link=="<a href='https://engeki.kansolink.com/shows/test1.html'>テスト(2015)</a>") test "essential truths": # give up and stop if this fails require(true) echo "suite teardown: run once after the tests"
「unittest」というモジュールをインポートすることで、一連のテストを記述するための「suite」(rspecのcontextに相当)や、「test」(rspecのitに相当),「check」(rspecのexpectに相当)を利用することができます
show.nimをlibに作成した上で、show_test.nimをコンパイル&実行すると以下のようになります
実行は、親フォルダの「show」の直下です
$ nim c -r test/show_test.nim Hint: used config file '/usr/local/Cellar/nim/0.18.0_1/nim/config/nim.cfg' [Conf] Hint: system [Processing] Hint: show_test [Processing] Hint: unittest [Processing] Hint: macros [Processing] Hint: strutils [Processing] Hint: parseutils [Processing] Hint: math [Processing] Hint: algorithm [Processing] Hint: streams [Processing] Hint: times [Processing] Hint: posix [Processing] >Hint: sets [Processing] Hint: hashes [Processing] Hint: os [Processing] Hint: ospaths [Processing] Hint: terminal [Processing] Hint: strformat [Processing] Hint: unicode [Processing] Hint: colors [Processing] Hint: tables [Processing] Hint: termios [Processing] Hint: show [Processing] CC: show_test Hint: [Link] Hint: operation successful (40490 lines compiled; 1.360 sec total; 82.148MiB peakmem; Debug Build) [SuccessX] Hint: /Users/kseikaku/Dropbox/dev/nim/kansolink/show/test/show_test [Exec] [Suite] 公演情報の管理クラスの挙動 run before each test run after each test [OK] 公演期間を取得する run before each test run after each test [OK] 公演リンクを取得する run before each test run after each test [OK] essential truths suite teardown: run once after the tests
以上 高速で処理ができる言語nimの環境セットアップについての記事でした
言語の特徴は、以下の記事が詳しいです
コメントを残す