Hi Gordon, thanks for your summary.
    Just want to add that BuckleScript compiler is only developed for one
year, now I almost work full time on it (thanks to my employer), so you
would expect more performance boost coming soon.
    Personally, I don't  mind any syntax, I am a huge fan of common lisp so
you can tell. But I understand syntax does matter to quite a lot of people,
so you may be interested in checking out ReasonML by Facebook(a more
familiar syntax for OCaml). OCaml is a very modular compiler which has 7
IRs,  ReasoML compiles to IR 0, while BuckleScript takes it from IR 4, so
the combination of ReasonML and BuckleScript is seamless.
   Thanks -- Hongbo

On Wed, Jan 11, 2017 at 10:37 AM, GordonBGood <[email protected]> wrote:

>
> On Thursday, 5 January 2017 21:46:26 UTC+7, Bob Zhang wrote:
>>
>> Indeed,  in OCaml native backend, `for loop` still dominates the
>> performance critical code since most optimizations does not work across
>> function boundaries.
>>    There is still a long way for optimizing compiler to catch up with
>> carefully tuned code, but BuckleScript does not get in your way, you can
>> still write low level code with type safe guarantee  in it when performance
>> matters
>>
>
> To anyone that might try to get something useful out of this thread, after
> a week of trying BuckleScript, PureScript, and Fable (I couldn't get GHCJS
> to install on my machine), I have the following observations:
>
>    1. As Hongbo asserts, BuckleScript is the fastest of the ones I tried,
>    both as to run speed and compilation speed.  It also doesn't get (much) in
>    the way of writing imperative code for the very fastest output, nor does it
>    (much) obstruct the forced generation of pretty much any JavaScript special
>    functions one might want to call from BuckleScript or Elm.  My main
>    objections to it is that it gets very wordy and obscure when one has to
>    force it to generate uncurried calls to special JavaScript functions, and I
>    have grown to hate OCaml syntax even more than I ever did as feeling very
>    archaic compared to more modern feeling functional languages as F#,
>    Haskell, and Elm:  not a white space language, no operator overloading
>    other than through modules/"Functors" which have a run-time cost - quite
>    usable but that doesn't mean I like it.
>    2. Fable is a great concept using F# (one of my favourite languages)
>    as the front end and outputting JavaScript through using Babel; however, it
>    isn't (at least yet) mature enough to consider:  it is slow to compile
>    (likely due to adding passes in compiling to F# AST, then converting to
>    Babel AST, then finally compiling to JavaScript) and in many cases to run,
>    this last much due to poor emulations of F# libraries but also generally
>    poor code generation.  It doesn't have tail call optimizations at all
>    although there is a plug-in that looks that it would do the job and as for
>    BuckleScript/OCaml, one can use imperative code if one must.  One can
>    output (emit) any JavaScript one might desire for calling from Elm or
>    Fable, and such code can have type signatures attached for (some) type
>    safety.  Other than speed, my main problem with it is difficulty in
>    controlling when functions are curried or not, which is a problem for
>    temporary functions used functional style.  This pretty much invalidates
>    writing functional code when one has to drop to imperative code frequently
>    in order to get performance.  If only one could decorate functions to show
>    whether they are to be called non-curried as one can in BuckleScript
>    ("[@bs]").
>    3. PureScript in a very powerful language comparable to Haskell, but
>    being Haskell-like, there is no provision for writing imperative code at
>    all, meaning that one would need to write Javascript in order to accomplish
>    this.  That pretty much precludes PureScript's use for me, as the things I
>    need it for involve speed and its more work writing JavaScript modules in
>    some other language and then calling them from PureScript (which is quite
>    easy) that I may as well do it more simply from Elm.  There also that
>    PureScript depends on many library functions do be able to have its
>    Haskell-like complexity, so anything done in the language idiom is going to
>    be quite bulky; also, calling those features have a run-time cost so are
>    slow.
>    4. Although I could not try it, I suspect that GHCJS will also depend
>    on many library calls in order to emulate what GHC/Haskell can do.  I did
>    not investigate whether one can emit JavaScript directly from the language
>    and how easy it is to call JavaScript from the language, nor do I knkow how
>    compilation speed compares.
>
> BuckleScript can do basic transformation of tail calls inside (some)
> functions into loops, but not in all cases; however, within about a year
> that capability won't be vary important as all mainline browsers and nodejs
> will do this themselves once the ECMAScript specification is formalized
> (currently in flux)  Other optimizations such as not making unnecessary
> function calls (which lack of in Elm started this thread) or creating too
> many objects will become the more important optimizations.
>
> My general conclusion is that while one could use BuckleScript for the
> purpose of generating the fast JavaScript that Elm currently cannot, one
> has to be pretty committed to its use and is going to have to some
> imperative code in a language where writing imperative code what it was
> designed to do.  For some uses, one could do the same in Fable but it
> generally is very slow at anything functional (I measured up to about six
> times slower than BuckleScript due to overuse of JavaScript objects.  I am
> starting to think that one may as well write in TypeScript in order to
> avoid having to know JavaScript too well (using TypeScript classes and
> interfaces is an option but not compulsory and have a slight run time
> cost), which was my first thought.  However, I do admit that BuckleScript
> can do the job if one is willing to live with OCaml syntax and typing.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "Elm Discuss" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/elm-discuss/Um7WIBTq9xU/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Regards
-- Hongbo Zhang

-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to