Hier bin ich wirklich daran interessiert, Hindernisse für den Mathematikunterricht abzubauen.
Ziel:
Ich würde gerne sehen, dass es für die JavaScript-Community erstellt wurde, ein Äquivalent zu den Python-basierten / verknüpften wissenschaftlichen und leistungsstarken Computerbibliotheken (große Listen davon sind über Sage und andere verfügbar ). Und das möchte ich, weil ich es Menschen, die JavaScript lernen, leicht machen möchte, in das wissenschaftliche und numerische Rechnen einzusteigen, ohne Python (& Unternehmen) lernen zu müssen. (Ich weiß, dass es einfach ist, Python zu lernen, wie ich es im Grunde irgendwann getan habe, aber dies deutet darauf hin, dass es vielleicht einfach sein wird, eine eingeschränkte Teilmenge von JavaScript in Python zu kompilieren.)
Hypothetische Methode:
Ich interessiere mich hauptsächlich für eine neue Sprache mit minimalen Unterschieden zu JavaScript, da der Markt ("Human Compiler"), auf den ich abziele, Programmierer sind, die JavaScript bereits kennen. Ich möchte diese Leute ansprechen, indem ich ihnen eine minimal andere Sprache gebe, in der sie Code schreiben können, der auf schnelleres C kompiliert wird, wie es RPython und Cython für Python tun. Ich bin bereit, viele JavaScript-Funktionen zu verwerfen. Ich möchte nur darauf achten, eine Mindestanzahl von Funktionen wieder hinzuzufügen. Ich werde mir auf jeden Fall Lua, Dart und ECMA Harmony ansehen (die kein offizielles Veröffentlichungsdatum haben , oder irre ich mich?) usw., da dies alles sehr ähnlich zu zeitgenössischen (2012) Implementierungen von JavaScript ist.
Fragwürdige Motivationen:
Ich persönlich bin bereit, jede Sprache / jedes Toolset zu lernen, mit dem Dinge schneller erledigt werden können (dafür lerne ich Erlang selbst), aber hier bin ich speziell daran interessiert, die Messlatte für andere Leute zu senken (sorry), die solche möglicherweise nicht haben Bereitschaft. Dies ist nur eine der Situationen, in denen ich "meinen Kuchen haben und ihn auch essen möchte, also nehme ich mir etwas Zeit, um das Problem zu untersuchen". Ich habe nur sehr begrenzte Erfahrungen mit dem Design von Computersprachen, aber bisher scheint das Problem aus Sicht des Hacking-the-Ecosystems interessant genug zu sein, um es zu untersuchen. Ich hoffe, bald mehr davon zu tun.
eval
; sollte deine Sprache das haben? Wollen Sie in erster Linie auf Maschinencode, eine VM oder eine Interpretation kompilieren? Was für ein statisches Typensystem stellen Sie sich vor?@
Zeichen vor seinem Namen verwenden müssen (z. B.@Gilles
- und die Schreibweise richtig eingeben). Klicken Sie auf diehelp
Schaltfläche neben dem Eingabefeld für Kommentare, um weitere Informationen zu erhalten.Antworten:
Wenn Sie JavaScript für wissenschaftliche Berechnungen verwenden möchten, probieren Sie Node.js aus . Node basiert auf der V8-Engine von Google und bietet einige zusätzliche Funktionen für die Interaktion mit dem Dateisystem, das Schreiben von Servern und das Verknüpfen mit C- und C ++ - Bibliotheken (dies ist definitiv keine vollständige Liste). Es bietet schnelle Ausführungszeiten und bietet eine interaktive Konsole sowie eine Möglichkeit, Ihre Programme über die Befehlszeile auszuführen. Ich fand @ DaveClarkes Kommentar über Python als "Klebercode" wegen des Wortlauts interessant. Hier ist ein Auszug aus der Knotendokumentation zu Addons :
Node hat auch einen ausgezeichneten Paketmanager namens NPM, der es einfach macht, von Ihnen geschriebene wissenschaftliche Module zu teilen. Das NPM-Repository enthält bereits einige wissenschaftliche Module, z. B. "natürlich" (für die Verarbeitung natürlicher Sprache) oder "clusterfck" (eine Clusterbibliothek). Es gibt definitiv viele andere Bibliotheken für eine Vielzahl von Anwendungen.
Das Tolle an dieser Lösung ist, dass Sie weder JavaScript ändern noch eine neue Sprache erstellen müssen. Die Syntax ist im Wesentlichen dieselbe, aber für die Ausführung Ihres Codes ist kein Browser erforderlich. Wenn Sie planen, mit node fortzufahren, besteht ein guter erster Schritt möglicherweise darin, Addons für vorhandene wissenschaftliche Open-Source-Bibliotheken zu erstellen, die in C und C ++ geschrieben sind, oder Sie können sie auf JavaScript portieren. Ich habe heute tatsächlich darüber nachgedacht, Node für die wissenschaftliche Programmierung zu verwenden, was mich zu dieser Frage geführt hat. Es wäre großartig, robustere Tools zu sehen, wie Sie sie in Python finden.
Ich hatte anfangs Links zu natural und clusterfck, aber ich habe nicht genug Repräsentanten, um sie zu posten. Glücklicherweise werden sie als erste Ergebnisse angezeigt, wenn Sie "clusterfck node" und "natural node" googeln.
quelle
Der Punkt der wissenschaftlichen Bibliotheken von Python ist, dass Python lediglich als Klebercode zum Mischen der Daten zwischen den wissenschaftlichen Bibliotheken fungiert. Python selbst macht wenig von der Hochleistungs-Grind-Arbeit. Python ist hierfür eine gute Sprache, da es sowohl prozedurale als auch objektorientierte Paradigmen unterstützt (und weitgehend funktional ist) und leicht mit externen Bibliotheken verknüpft werden kann.
Javascript ist stark an Browsertechnologien gebunden. Es ist meistens eine schreckliche Sprache, die überhaupt nicht dafür ausgelegt ist, effizient zu sein oder umfangreiche Software zu schreiben, obwohl in der Praxis beides aufgrund enormer Investitionen in die Compilertechnologie bzw. des sorgfältigen Gebrauchs der Sprache geschieht. Javascript wird durch gut gestaltete Bibliotheken wie JQuery 1000-mal besser. Ich bin mir nicht sicher, ob Javascipt Unterstützung für die einfache Verknüpfung mit C-Bibliotheken bietet (obwohl ich denke, dass dies indirekt über den Browser und über Java erforderlich ist).
Ich will nicht entmutigen, aber die ganze Idee scheint unbegründet. Javascript und Hochleistungsrechnen finden sich nur in Sätzen, die mit "Ein Mann ging in eine Bar ..." beginnen.
Trotzdem bin ich bereit, mich als falsch zu erweisen. Es gibt Echtzeit-Java, eine seltsame Kombination, die einigermaßen erfolgreich ist, also wer weiß.
quelle
Nur eine Idee: Sie können in Java geschriebene wissenschaftliche Bibliotheken (ich denke, Sie werden bereits viel Arbeit finden) mit Javascript verwenden - das eine Java-ähnliche Syntax hat -, das nur als Umbruchsprache verwendet wird für:
Im Rhino-Projekt finden Sie einen stabilen Javascript-Interpreter, der in Java geschrieben wurde.
Wenn Sie möchten, können Sie die Java-JNI verwenden, um in C / C ++ geschriebene wissenschaftliche Bibliotheken zu verwenden.
Das ganze Bild:
EDIT : nur ein gefundenes Material googeln um wie folgt aus : Java GNU Wissenschaftliche Bibliothek , Liste der (Java) numerischen Bibliotheken , Java Graph Bibliothek , jHepWork Multi - Plattform - Umgebung für wissenschaftliche Berechnungen und Datenanalyse
quelle
Das Erstellen einer neuen Sprache ist nicht erforderlich. Man kann heute performantes numerisches Rechnen in JavaScript schreiben, ohne es zu kompilieren / zu transpilieren. Als Skriptsprache ist JavaScript im Vergleich zu Python und R recht günstig. Führen Sie für Benchmarks die Sprachbenchmarks in stdlib aus , um die Leistung einer Vielzahl von APIs zu vergleichen.
Für serverseitige Anwendungen können native Add-Ons von Node.j geschrieben werden, um eine Schnittstelle mit denselben C / C ++ / Fortran-Bibliotheken herzustellen, die in anderen numerischen Computerumgebungen wie R, Python und Julia verwendet werden. Wie in meiner Arbeit gezeigt, ermöglichen die nativen Add-Ons von Node.j die Verknüpfung mit hardwareoptimierten numerischen Berechnungsbibliotheken und ermöglichen so eine leistungsstarke numerische Berechnung aus JavaScript.
Für clientseitige Anwendungen kann eine Kompilierung in WebAssembly durchgeführt werden, um eine 1,5-2-fache native Leistung zu erzielen. Für ältere Umgebungen kann man zu asm.js kompilieren, einer reduzierten Teilmenge von JavaScript, die für die Compileroptimierung besser geeignet ist. In meiner Arbeit kann asm.js mit naiven Referenzimplementierungen (dh nicht hardwareoptimierten Implementierungen) übereinstimmen, die in C / C ++ / Fortran geschrieben wurden.
Kurz gesagt, es gibt keine technischen Gründe, warum Sie keine numerischen und wissenschaftlichen Computerbibliotheken in JavaScript selbst schreiben können. Was benötigt wird, sind Leute, die die Zeit und das Nötigste haben, um rigorose und robuste Implementierungen zu schreiben.
Offenlegung : Ich und andere arbeiten am stdlib- Projekt, das darauf abzielt, JavaScript und Node.js robuste, leistungsstarke numerische Computerfunktionen bereitzustellen.
quelle