2014-02-05 6 views
5

Ich bin ganz neu zu OCaml und zum js_of_ocaml Compiler insbesondere.js_of_ocaml und Core

Hat jemand geschafft, die Anwendung zu kompilieren, die Jane Street Core mit js_of_ocaml verwendet? Ich bekomme während der Kompilierung viele "fehlende primitive" Warnungen, und wenn ich versuche, sie mit node auszuführen, werden sie zu einer tatsächlichen Ausnahme.

Ich verstehe, dass jene Primitive sind, die nicht von OCaml zu JS portiert werden können und dass deren Umsetzung von der Anwendung abhängen sollte, aber für den Kern gibt es buchstäblich Tausende von ihnen, während mein Programm nur dann ausgegeben zu stdout verwendet.

Nebenbei bemerkt, hatte ich Probleme, sogar ein einfaches "Hallo Welt" -Projekt zu kompilieren, da IO-Funktionen in JS nicht implementiert waren. Gibt es irgendwo eine "Standard" JS-Datei, die für diesen Zweck verwendet werden könnte? z.B. Ersetzen caml_ml_output_char durch console.log und andere Dinge, so dass Module zu etwas Sinnvollem kompiliert werden können, ohne irgendein kundenspezifisches Javascript zu schreiben?

+0

Bitte verwenden Sie keine Backticks zur Betonung. Sie sind für Code. Siehe http://stackoverflow.com/editing-help#code –

Antwort

1

Ja, fehlende Primitive sind das Problem bei der Verwendung Core mit . Es gibt core_kernel Bibliothek. Es ist eine Untermenge von Core, die grundlegende Funktionen enthält. UNIX-bezogene Funktionen von core sind nicht in Core_kernel enthalten. Wenn ich mich richtig erinnere, ist der Hauptgrund für die Extraktion Core_kernel von Core Ihr Problem.

Aktualisieren. Ich habe versagt. Es scheint, dass Entwickler versucht haben, Core_kernel mit js_of_ocaml, aber without success zu verwenden. Es scheint, dass Sie es jetzt nicht tun können. Sie warten auf OCaml-Namespaces.

+0

Danke für die Antwort! Also was soll ich tun? Öffne stattdessen 'core_kernel'? Ich bin ziemlich verwirrt darüber, warum fehlende Primitive wichtig sein sollten - wenn ich sie nicht in meinem Code verwende, könnten sie nicht sicher weggeworfen werden? –

+0

Bitte verwenden Sie keine Backticks zur Betonung. Sie sind für Code. Siehe http://stackoverflow.com/editing-help#code –

+0

@PascalCuoq Aber es ist Code, nicht wahr? Ich denke an den Namen der Bibliothek als Code. –

3

Ja, es ist möglich, Core_kernel mit zu kompilieren, OCamlPro hat eine Version von Try-OCaml damit gemacht. Sie müssen einige ihrer Abhängigkeiten patchen (sexplib, ounit usw.) und die neueste Version von aus dem Repository verwenden, die eine bigarray Implementierung enthält.

1

ab heute, core_kernel Version 0.9, es funktioniert.

nach Kompilieren zu Bytecode.

Lauf js_of_ocaml

js_of_ocaml +weak.js +nat.js +base/runtime.js +core_kernel/runtime.js +bin_prot/runtime.js main.bc 

oder die js_of_ocaml in jbuilder direkt hinzufügen.

(js_of_ocaml (
    (flags (+weak.js +nat.js +base/runtime.js +core_kernel/runtime.js +bin_prot/runtime.js))))