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


参考記事