Math.jsはJavaScriptおよびNode.js向けのオープンソースMathライブラリで、数値、ビッグナンバー、複素数、単位、行列を扱うことができる。これは柔軟な式パーサも備えている。さらに詳しく知るため、InfoQはプロジェクトの創始者であるJos De Jong氏にコンタクトした。
Jos氏はプロジェクトの背景について、次のように説明する。
JavaScriptには、行列、複素数、統計などに使える優れたライブラリがすでにあります。でも、そこには先進的な数学処理をするための統合ソリューションが欠けていました。既存のライブラリの多くはchained APIを備えています。これは非常にわかりやすいのですが、ライブラリ自身が知っているデータ型しか受け付けません。そのため、統合が問題になります。行列のライブラリは複素数を扱えないといった具合に、組み合わせることができないのです。Math.jsのAPIは、JavaScriptのMathオブジェクトのAPIと組み込みオペレータ、各種入力を受け付けるスタティック関数、と同じです。Math.jsでは、先進的なデータ型、関数、定数をサポートするようAPIを拡張しています。
Math.jsがアプリケーション開発における数学を、もっと簡単に、もっと楽しいものにすること、そして、開発者の世界とアカデミックな世界とのギャップを橋渡しをするのに役立つことを期待しています。
Math.jsには3種類の使い方がある。
-
スタティック関数と定数を使う(JavaScriptのMathオブジェクトのように)
math.add(2, 3); // 5 math.sqrt(-4); // 2i math.pow([[-1, 2], [3, 1]], 2); // [[7, 0], [0, 7]]
-
文字列式を評価する
math.eval('1.2 * (2 + 4.5)'); //7.8 math.eval('5.08 cm to inch'); //2 inch
-
chainingオペレーションを使う
math.select(3) .add(4) .multiply(2) .done(); //14
Math.jsのWebサイトやそのドキュメントにサンプルが載っている。
Jos氏はこの2か月以内に、最初の安定バージョンである1.0をリリースするつもりだ。
残っているのは、リファレンスドキュメントを書くこと、ユニットテストによるコードカバレッジを100%にすること、あちこちにある荒削りなところを解消することです。
1.0ではAPIが安定化され、その後は最適化にフォーカスが移ることになる。Jos氏は性能改善のために、型付き配列、並行処理、asm.jsなどを使う可能性を検討している。
なぜJos氏は、すでにNumPi/SciPiといったライブラリのあるPythonなどではなく、JavaScriptを選んだのだろうか。
ここ最近、私たちはクラウドとWebアプリケーションへ大きく動いているのを目の当たりにしています。私もすっかり夢中になっています。ブラウザとJavaScriptエンジンはどんどん高速になり、この数年で、node.jsを使ってJavaScriptをサーバサイドで動かせるようになりました。これは多くの新たな可能性を広げ、その結果、JavaScriptエコシステムとその人気は爆発的に拡大しました。JavaScriptはこれまでで最もユビキタスな言語になっているように見えます。JavaScriptは完璧な言語から程遠いものですが、私はJavaScriptとそのコミュニティが大好きです。
すでにmath.jsを使ったエンドユーザのプロジェクトがいくつもある。Jos氏のプロジェクト、mathnotepadもmath.jsを使っていて、開発の初期段階にある。Math.jsは人気のある計算機プロジェクト、numericsでも使われている。
Math.jsを始めるには、まずはドキュメントを読んでみよう。