4 ms·
Author here, just created a new account : ). I think ocamlscript is complementary to js_of_ocaml, actually it is inspired from js_of_ocaml. For those who like t
by hongboz 11y ago
Author here, just created a new account : ). I think ocamlscript is complementary to js_of_ocaml, actually it is inspired from js_of_ocaml.
For those who like to write ocaml only application, js_of_ocaml is perfect, ocamlscript is designed to help easier integration with existing javascript system.
Design goals here: http://bloomberg.github.io/ocamlscript/ http://bloomberg.github.io/ocamlscript/
- Drup 11y agoThat is how you justify the project, and it makes sense, when you look at it with a microscope. But my remark still stand: we now have two compilers to js, their API/FFI is not the same, so you can't factorize work, and the integration work could be made on js_of_ocaml too (see alain frisch's project).
- jordwalke 11y agoHi Drup, I'd be curious to hear about the work that Alain is doing. Do you have a link?
- Drup 11y agoThere you go : https://github.com/LexiFi/gen_js_api https://github.com/LexiFi/gen_js_api
- hongboz 11y agoactually we have great relationship with Lexifi, and we did exchange some ideas about ocamlscript before, I think mostly we are on the same page, there is enough room for two compilers :-)
- truncate 11y agoIts good to see ocaml->js back to life. Have you considered supporting TCO or arbitrarily deep stack? I'm just curious how often could we reuse ocaml libraries with just tail call to loop conversion.
- hongboz 11y agoself tail call is supported. mutual recursive tailcall can be done partially, but there is not a strong guarantee
- cannam 11y agoIn the (nice) immutable map example on that page, a reference cell is used & updated each time something is added to the map. How would the JS output differ if you built the map using a fold or similar, without any refs?
- jordwalke 11y agoBefore that, I'd ask if the implementation of OCaml's map is at all similar to the implementation of Immutable.js's Map. Different internal data structures/algorithms are probably the most likely explanation for any difference. Still, it's nice to see a benchmark that shows how OCaml compiled to JS is competitive in performance, even when compared to a very popular library that is known for performing well.
- cannam 11y agoAlso a fair point, and I take your implication that the effect of a change to the outer loop syntax would probably be lost in the noise. It just struck me that using ref cells and loops feels like a concession to writing Javascript-style code in the first place (I grant in this particular case it makes the code more obvious) and I wondered how much difference it actually makes. Is the compiler able to flatten a fold into a similar loop? Or do you get a readable fold call in the JS code and, if so, is it much slower? Or neither?
- hongboz 11y agoList.fold_left is compiled into a while loop in ocamlscript. The main reason that I used for loop is that the generated code is the same as hand written js, so the comparison is more reasonable Edit: I am a practical programmer, I am in favor of both for loop and recursion as long as it is readable