[nim]高速処理言語nimのMacOSでのセットアップと開発、テスト環境構築

広告

新しい開発言語を学ぶ必要に迫られ、今流行りの言語を色々みましたが、最終的に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の環境セットアップについての記事でした

言語の特徴は、以下の記事が詳しいです

広告

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です