科学計算用の高速で無駄のないJavaScript:どの機能を維持する必要がありますか?


8

ここで私は数学教育の障壁を下げることに本当に興味があります。

目標:

私はJavaScriptコミュニティ用に作成されてほしいと思います。これは、Pythonベースの/リンクされた科学的および高性能なコンピューティングライブラリに相当します(それらのすばらしいリストはSageなどから入手できます)。そして私はそれを望んでいます。なぜなら、私は、JavaScriptを学ぶ人々が、Python(および会社)を学ぶ必要なく、科学的および数値計算に簡単に入ることができるようにしたいからです。(基本的にはいつかPythonを習得したので、Pythonを学ぶのは簡単ですが、これはおそらく、JavaScriptの制限されたサブセットをPythonにコンパイルするのが簡単になることを示唆しています。)

仮説法:

私がターゲットとしている市場(「人間のコンパイラー」)はすでにJavaScriptを知っているプログラマーであるため、私は主にJavaScriptとの違いが最小限の新しい言語に興味があります。私がそれらの人々をターゲットにしたいのは、RPythonとCythonがPythonで行うように、より高速なCにコンパイルするコードを書くための最小限の異なる言語を彼らに与えることです。私はたくさんのJavaScript機能を放棄するつもりです。最小限の機能を追加するように注意してください。Lua、Dart、ECMA Harmony(正式なリリース日はありません)を確実に調べます。 、または私は間違っていますか?)など。これらはすべて、JavaScriptの現在の(2012)実装に非常によく似ているためです。

疑わしい動機:

私は個人的に、物事をより速く実行できる言語/ツールセットを学びたいと思っています(このため、Erlangを自分で学習しています)が、ここでは特に、そのようなことをしていない他の人のためにバー(申し訳ありません)を下げることに興味があります意欲。これは、「ケーキを手に入れて食べたいので、問題の調査に時間をかけている」状況の1つにすぎません。私はコンピュータ言語設計の経験が非常に限られていますが、生態系のハッキングの観点から見ると、この問題は研究するのに十分興味深いと思われるので、すぐにもっと多くのことをしたいと思っています。


5.メソッド名には文字列ではなく記号を使用します。
Dave Clarke

4
この質問は、現状では合理的に答えることができません。よくある質問を読むことをお勧めします。あなたの質問は非常に広範でオープンエンドであり、何かをより良くしようとする真の試みよりも、JavaScriptの認識された遅さに対する怒りのようなものです。ただし、ここには有効な質問が潜んでいるため、再開できるように質問を改善することをお勧めします。「ボールが転がる」のではなく、答えは答えに属します。質問に個人的な仮定を入れすぎないようにしてください。客観的な質問は、より客観的な答えを得ます。
Gilles「SO-悪をやめなさい」

2
あなたの質問に欠けている主なものはあなたの目標です。あなたはスピードを望み、JavaScriptに似ていることを望みます。あなたは何を犠牲にする用意がありますか?あなたの言語は何ができるはずですか?JavaScriptとのソースコードの互換性は重要ですか?既存のコードとリンクできるようにしますか?あなたの言語のユースケースは何ですか?多くのJavaScriptコードが動的に読み込まれます。これはeval、あなたの言語にはこれがありますか?主に、マシンコード、VM、または解釈へのコンパイルを目的としていますか?どのような静的型システムを想定していますか?
Gilles「SO-悪をやめなさい」

2
編集のおかげで、私たちはあなたの目的が何であるかを知ったので、質問は答えられます(広範囲で主観的ですが、多すぎるとは思いません)。残念ながら今まで誰もあなたの編集に気づいていないようです。答えがまだ役に立つことを願っています。コメントに返信したことを誰かに通知するため@には、名前の前に記号を使用する必要があります(たとえば@Gilles、スペルが正しい)- helpコメント入力ボックスの近くにあるボタンをクリックして、詳細を確認してください。
Gilles「SO-邪悪なことをやめよう」

1
「私は、コンピュータ言語設計の非常に限られた経験を持っています」。最初に修正する必要があります。個人的な違反はありませんが、私たちにはすでに、標準以下の作品で市場をあふれさせるアマチュア言語デザイナーの大洪水があります。問題ではなく、ソリューションの一部になる
gardenhead 2017年

回答:


7

JavaScriptを科学計算に使用したい場合は、Node.jsを試してみませんか?NodeはGoogleのV8エンジンに基づいており、ファイルシステムとのやり取り、サーバーの作成、CおよびC ++ライブラリへのリンクを行うための追加機能がいくつかあります(これは完全なリストではありません)。実行時間が速く、インタラクティブコンソールとコマンドラインからプログラムを実行する方法を提供します。「グルーコード」として機能しているPythonについての@DaveClarkeのコメントは、その文言のために興味深いものでした。以下は、アドオンに関するノードのドキュメントからの抜粋です。

アドオンは動的にリンクされた共有オブジェクトです。CおよびC ++ライブラリへの接着剤を提供できます。

NodeにはNPMと呼ばれる優れたパッケージマネージャーもあり、作成した科学モジュールを簡単に共有できます。NPMリポジトリーには、「自然」(自然言語処理用)や「clusterfck」(クラスタリングライブラリ)などのいくつかの科学的モジュールがすでに含まれています。間違いなく、さまざまなアプリケーション用のライブラリが他にもたくさんあります。

このソリューションの優れた点は、JavaScriptを変更したり、新しい言語を作成したりする必要がないことです。構文は基本的に同じですが、コードを実行するためにブラウザーは必要ありません。ノードのフォローアップを計画している場合、最初のステップとして、CおよびC ++で記述された既存のオープンソースの科学ライブラリ用のアドオンを作成するか、JavaScriptに移植することができます。私は実際に今日、科学的プログラミングにノードを使用することを考えていました。それがこの質問に私を導いたものです。Pythonで見られるような、より堅牢なツールを見ることは素晴らしいことです。

私は最初はnaturalおよびclusterfckへのリンクを持っていましたが、それらを投稿するのに十分な担当者がいません。幸いにも、「clusterfckノード」と「ナチュラルノード」をググると、最初の結果として表示されます。


@ JasonLynch426に感謝します。これは理にかなっています。NPMの利便性に同意します。
2012

6

Python科学ライブラリのポイントは、Pythonが単に科学ライブラリ間のデータをシャッフルするためのグルーコードとして機能することです。Python自体は、高性能のグラインド作業をほとんど行いません。Pythonは、手続き型パラダイムとオブジェクト指向パラダイムの両方をサポートしており(かつ機能性も高い)、外部ライブラリと簡単にリンクできるため、これに適した言語です。

Javascriptは、ブラウザテクノロジに深く結びついています。どちらも実際にはコンパイラテクノロジーへの莫大な投資と言語の慎重な使用が原因で発生しますが、効率的で大規模なソフトウェアを作成するように設計されたものではありません。Javascriptは、JQueryなどの適切に設計されたライブラリにより、1000倍も優れています。JavasciptがCライブラリと簡単にリンクするためのサポートを提供しているかどうかはわかりません(ただし、ブラウザーを介して、およびJavaを介して間接的に行う必要があると思います)。

私は落胆するつもりはありませんが、全体のアイデアは根拠のないようです。Javascriptとハイパフォーマンスコンピューティングは、「男がバーに足を踏み入れた...」で始まる文章でのみ見られます。

そうは言っても、私は間違っていることが証明されても構わないと思っています。リアルタイムJavaは存在しますが、これは奇妙な組み合わせであり、妥当な成功を収めています。


2
ブラウザーのJavascriptにはFFIがありませんが、jerngが設計を考えていたnot-quite-JS言語の実装にはFFIがある可能性があります。JSは、手続き型、オブジェクト指向、および機能パラダイムも大幅にサポートしています。そのため、ここではJSへの抵抗を共有しません。(しかし、これも正しい道だとは思いません。別の理由があります。新しい言語を設計するには、非常に正当な理由があるはずです。ここにはその理由がありません。Vorは右側にいると思います。彼がJavaを提案するときをマークしてください。)
Gilles「SO-邪悪なことをやめ

2
「Javascriptはブラウザテクノロジーに深く結びついています」:歴史的にそうでしたが、今もそうですか?ECMAScript標準によると、この言語は、ブラウザに特に関係のない、まともな汎用プログラミング言語のように見えます。
伊藤剛

1
IMO Javascriptはスクリプト作成に非常に適した言語ですが、そのOOサポートは少し奇妙です(継承はプロトタイプでシミュレートする必要があります。「クラス」はJavascriptの関数です...)...しかし、反対側のプロトタイプでは動的プログラミング環境では非常に強力です。たとえば、メソッドを「クラス」とそのインスタンスの両方にその場で(インタラクティブに)追加できます。
Vor

3
「両方のこれらの実施においては、それぞれ、コンパイラ技術に大きな投資と言語の慎重な使用のために起こるが、それは、効率的であることや、大規模なソフトウェアを書くために設計されたすべてのほとんどはひどい言語ではない」 私は同じことを言うことができます- Python用。個人的に使うのはひどいです。効率に関しては、それはC / C ++に重い作業を行わせることによってもたらされます。これは、JSが高いパフォーマンスを達成する方法でもあります。どちらもマルチスレッドにとって恐ろしいものです。私はC言語で簡単なPython関数を書き換えることにより、> 100倍の高速化を持っていた
マーク・K・コーワン

1
@Ski 5歳の回答は5歳です。ショッキング!
デビッドリチャービー2017

5

ただのアイデア:Javaで書かれた科学ライブラリを使用できます(多くの作業がすでに利用可能になっていると思います)。Javascriptと同様の構文を持ち、ラッピング言語としてのみ使用されます。

  • スクリプティング
  • ユーザーインタラクション
  • 基礎となる高レベルのクラス/パッケージ/関数の(再)モデリングと標準化... Javaの「レイヤー」でこれを行う方がよいと思いますが

Javaで記述された安定したJavascriptインタープリターについては、Rhinoプロジェクトを参照してください。

必要に応じて、Java JNIを使​​用して、C / C ++で記述された科学ライブラリを使用できます。

全体像:

                              ____ disparate Java libraries
Javascript   ----- Java      /
(scripting,      ("package   \____ JNI ____ C/C++ libraries
 interaction,     remodeling")   
high-level stuff)

編集:次のような見つかったものをググるだけ:Java GNU Scientificライブラリ(Java)数値ライブラリのリストJavaグラフライブラリ科学計算とデータ分析のためのjHepWorkマルチプラットフォーム環境


2

新しい言語を作成する必要はありません。今日では、コンパイル/変換を行わなくても、JavaScriptで高性能の数値計算を記述できます。JavaScriptはスクリプト言語として、PythonやRに比べて非常に優れています。ベンチマークについては、幅広いAPIのパフォーマンスを比較するstdlibで言語ベンチマークを実行します。

サーバー側アプリケーションの場合、Node.jsネイティブアドオンを作成して、R、Python、Juliaなどの他の数値計算環境で使用されているものと同じC / C ++ / Fortranライブラリとインターフェイスできます。私の仕事で示したように、Node.jsネイティブアドオンを使用すると、ハードウェア最適化数値計算ライブラリにリンクできるため、JavaScriptから高性能の数値計算が可能になります。

クライアント側アプリケーションの場合、WebAssemblyにコンパイルして、1.5〜2倍のネイティブパフォーマンスを実現できます。古い環境の場合は、JavaScriptのサブセットが削減されたasm.jsにコンパイルできます。私の作業では、asm.jsは、C / C ++ / Fortranで記述された単純な参照(つまり、ハードウェアに最適化されていない)実装に一致させることができます。

つまり、JavaScript自体で数値および科学計算ライブラリを記述できない技術的な理由はありません。必要なのは、厳格で堅牢な実装を作成するための時間と場所のある人です。

開示:私と他の人たちは、JavaScriptとNode.jsに堅牢で高性能な数値計算機能を提供することを目的としたstdlibプロジェクトに取り組んでいます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.