NectarJSを使ってJavaScriptを事前コンパイルする
注意!
下記のプログラムを再度実行したところ、コンパイルエラーが発生しました。
以前は正常に動作したのですが??? (2021年3月13日)
今日は NectarJS の紹介です。私の知る限りでは、NectarJS は JavaScriptコードをマシンコード(バイナリコード)に事前コンパイルできる唯一のコンパイラではないかと思います。 JavaScript の全ての機能がサポートされている訳ではありませんが、簡単なコードであればコンパイルできます。 現状でも、Arduino のようなマイコン用のプログラムを作成するのであれば充分だと思います。
〈インストール〉
OS:MX Linux 19.2 $ sudo apt update $ sudo apt install npm -y $ sudo npm install nectarjs -g
〈コンパイルと実行〉
$ nectar main.js -o main $ ./main
main.js
const add = function (x, y) { return x + y; };
console.log(add(1.111, 2.222));
console.log(add("aaa", "bbb"));
〈実行結果〉
3.333 aaabbb
次はガウスの消去法を使って連立一次方程式を解くプログラムです。大規模な数値計算は無理ですが、小規模の計算であれば問題なく実行できます。
gauss.js
function solve(a, b) {
let length = a.length;
for (let k = 0; k < length - 1; k++) {
for (let i = k + 1; i < length; i++) {
let s = a[i][k] / a[k][k];
for (let j = k + 1; j < length; j++) {
a[i][j] -= s * a[k][j];
}
b[i] -= s * b[k];
}
}
for (let i = length - 1; i >= 0; i--) {
for (let j = i + 1; j < length; j++) {
b[i] -= a[i][j] * b[j];
}
b[i] /= a[i][i];
}
}
let a = [[1.2, 0.5, 9.2, 7.6, 2.1], [9.8, 1.3, 8.4, 5.3, 3.3], [4.1, 2.7, 1.4, 7.3, 5.6], [0.2, 8.7, 4.5, 1.9, 0.6], [3.7, 6.4, 5.6, 2.6, 1.7]];
let b = [1.9, 8.3, 5.1, 3.4, 7.2];
solve(a, b);
for (let i = 0; i < b.length; i++) console.log(b[i]);
注)const length = a.length; にするとエラーになります。
〈実行結果〉
-0.93230297368388 -0.26417804844125 2.10502247334133 -3.85061459325048 6.21396035552607
参考記事
- NectarJS
- NectarJS Quick Start
- NectarJSがJavaScriptのサービスとしてのコンパイルを提供
- Compiling an Arduino firmware written in JavaScript from your Raspberry Pi 3 with NectarJS