#NimでC/C++のライブラリを呼び出す。
スクリプト言語風の簡易な文法ながら、C/C++等にコンパイルされ、Cに近しい実行速度が出せるNim。
まだ、バージョン1.0前でドキュメント量をまだまだ少ないため、実案件で使うことは当面ないだろうが、C系との近しさは、余計な物がなん分、C系のライブラリの学習用途には使えそう。
Nimの情報はまだまだ少ないので、MySQL(Mariadb)をNimから呼び出してみたメモ書きをさらしておく。
#バッケージマネージャツールnimbleを活用。
外部パッケージを活用して、一定程度以上に複雑なプログラムを書く場合には,適切なパッケージ管理が必要。nimには、パッケージの導入からコードのビルドまでを行えるパッケージマネージャnimbleが標準で付属している。
- nimbleについては以下のブログを参考。
http://unreallife.hatenablog.com/entry/2016/02/07/135149 - 同じ方がnim専用のブログnim帳を立ち上げているので、nimが気になる方は要watch。
## mimleでdbライブラリを導入
- パッケージ情報を最新に更新
nimble refresh
- mysqlに関するパッケージ情報を調べる
nimble search mysql
- パッケージdbを導入
nimble install db
これで、RDB接続用パッケージdbが導入される。
nimble initでディレクトリ構造を決定
nimble initコマンドで生成されるパッケージ名.nimbleファイルにより、ディレクトリ構造を定める
# Package
version = "0.1.0"
author = "Anonymous"
description = "test"
license = "MIT"
# Dependencies
requires "nim >= 0.15.2"
# ここにディレクトリ構造を追記
srcDir = "src"
binDir = "bin"
bin = @["main"]
私もnim初心者なので、委細はnimble initで自ら調べていきたいが
./srcにソースコードを書き、ビルド後のファイルは./binに置かれることは分かるだろう。
#MySQLに接続
ローカルのMySqlに接続するには、以下のようなコードを書く(この例ではデーブル生成のみ)。
import db_mysql
let theDb = open("localhost", "user", "passwd", "mydb")
theDb.exec(
sql(
"create table myTestTbl (" &
" Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, " &
" Name VARCHAR(50) NOT NULL, " &
" i INT(11), " &
" f DECIMAL(18,10))"
)
)
theDb.close()
要するに、open -> exec(sql文) -> closeという一連の流れでデータベースを操作するわけだ。
ビルドはnimble buildで行い、実行は./bin/main.exeとなる。
...が、このまま実行してしまうと、libmysql.dllがないよ、と怒られてしまう(windows環境の場合)。実行に際しては、例えば、windowsでのC言語実行の基本にもどって、libmysql.dllをmain.exeと同じディレクトリに配置する必要がある。
無事実行できた際のディレクトリ構造は以下のようになる。
コンパイル後に生成される./nimcacheディレクトリを開いてみる。
確かに、nimがCにコンパイルされていることが分かる。
C系言語の資産を活かそう。
C系言語は、40年以上の歴史を持ち、さまざまな実用プログラムを生み出してきた。C系言語のソースコードにコンパイルされるnimは、まさしく、その巨人の肩に直接に乗っている形だ。
nimでC系言語の良さをお手軽に再認識したいと思う今日このごろ。