Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

NimのコードをNode.js用のJavaScriptコードにトランスコンパイルする

$
0
0

概要

  • NimのコードをJSバックエンドでコンパイルしてNode.jsのスクリプトとして実行してみます
  • NimのコードからNode.js用のライブラリを生成してNode.jsから関数を呼び出してみます

NimはJavaScriptを生成できる

Nimは公式でNimのコードからJavaScriptのコードにトランスコンパイル可能です。

例えば、以下のようなNimコードに対して

index.nim
proc plus*(x,y:cint):cint{.exportc.}=returnx+y

以下のコマンドでコンパイルします。すると、index.nimからindex.jsが生成されます。

$ nim js index.nim

$ ls index*
index.js index.nim

このようにJavaScriptコードを生成できます。

しかしここで生成されるJavaScriptはフロントエンド用で、HTMLから読み込む想定のものです。
Node.jsからは扱うことはできません。

NimはNode.jsのコードも生成できる

しかし、コンパイル時にオプションを渡すことにより、Node.js向けのNimコードを生成できます。
Nim Backend Integration - Nim

前述のコードを手直ししてNode.js用コンパイルを実施し、Node.jsで実行してみます。

index.nim
proc plus*(x,y:cint):cint{.exportc.}=returnx+yechoplus(1,2)
$ nim js -d:nodejs index.nim

$ node index.js
3

node.jsで実行できました。

NimのコードをNode.js向けライブラリとして生成する

Node.js用の単体のスクリプトとして実行できることがわかりました。
次はスクリプトをNode.jsからライブラリとして読み込めることを確認します。

以下のNimコードを用意します。
以下のNimコードでは、plus関数を定義して、Node.jsからplus関数を呼び出せるようにするものです。

lib.nim
importjsffivarmodule{.importc.}:JsObjectproc plus*(x,y:cint):cint=returnx+ymodule.exports.plus=plus

次に、上記ライブラリを読み込んで使用するindex.jsを定義します。

index.js
constlib=require("./lib");console.log(lib.plus(1,2));

これらのファイルがそれぞれ同じディレクトリに配置し、以下のコマンドを実行します。

$ nim js -d:nodejs lib.nim

$ ls lib*
lib.js lib.nim

$ node index.js
3

無事、Node.jsのスクリプトから、Nimで生成したNode.js用ライブラリを読み込んで、関数を呼び出すことができました。

まとめ

以下の内容について記載しました。

  • NimのコードをJSバックエンドでコンパイルしてNode.jsから関数を呼び出す
    • コンパイルするときはjsバックエンドで -d:nodejsを付ける
  • NimのコードからNode.js用のライブラリを生成してNode.jsから関数を呼び出してみます
    • module {.importc.}: JsObjectでモジュールを読み込んで関数をセットする

以上です


Viewing all articles
Browse latest Browse all 8691

Trending Articles