I would suggest we stop further discussions since it is quite lengthy and doesn't make too much sense.
No matter how much better job BuckleScript did, the 'Evan knows' means it will be solved magically soon, this is a little unfair to my work. I understand there are lots of factors when choosing a language, as long as you enjoy it, then it's great. Have fun with your favorite language! On Tue, Jan 24, 2017 at 11:53 PM Bob Zhang <bobzhang1...@gmail.com> wrote: I have been working on compilers professionally for more than 8 years, I did not read your ocaml code, so I am not sure it's performant ocaml code. But anyway, I think you already convinced yourself elm suits your need better :-) On Tue, Jan 24, 2017 at 11:44 PM GordonBGood <gordonbg...@gmail.com> wrote: On Tuesday, 24 January 2017 09:37:32 UTC+7, Richard Feldman wrote: The reason is that BuckleScript proves that Arrays are faster than "string" tagged objects and I have tried benchmarking it myself. In fact, I have gone further and manually substituted the use of Arrays rather than the string tagged objects in the generated Elm code to show that is the reason. The problem isn't so much the use of Array's versus objects/records, but the string tags, which as the Elm JS output doesn't preserve type information except by these tags, are continuously requiring string processing to determine the type of object at run time. Elimination of these strings by using the type information the compiler already has would greatly speed things even if objects are used, with the further advantage of Arrays being that their indices are numeric for slightly less processing (depending on the browser engine used). Modern JS engines intern string literals <http://stackoverflow.com/questions/5276915/do-common-javascript-implementations-use-string-interning>, making them in general faster than index-based Array access. I would definitely expect this idea to result in a performance regression for Elm, and I would be very surprised to see benchmarks to the contrary. With Robin Heggelund Hansen's help, I have determined that my problem is primarily the issue he already raised with Evan: that the static type information is not used in code generation so that equality and comparison conditions require an extra level of function calls, which problem is exacerbated by the tightness of the loops I am trying to write. In fact, other than for this problem, JS code produced by Elm is quite fast, at least on the Chrome V8 JS engine. My point is that for those of us that need speed - at least a few that have chimed in on this thread - if it isn't addressed with the Elm compiler then Elm might migrate to a front end to OCaml which would schism development efforts and possibly hurt the language. My other point is that the sooner it is done the easier it will be. And it doesn't affect those that find current Elm speed adequate - all that is needed is enough contributors and co-ordination between the different developments. I don't think any of this has even the remotest chance of happening. Why do you think that? I see that someone named Joey Eremondi did extensive work to improve optimization leading up to version 0.16 which made differences from several times to hundreds of times in improved execution speed. it turns out that I am suggesting much less than that: just the ability to make calls to the "isPrim" function for types and if true to just emit the direct JS operators rather than making a run time call to the general eq/cmp functions to let it be sorted out at run time. Further optimizations a la BuckleScript are more minor in effect and major in execution, effectively erasing some type information for minimal cases, but doing this would be much more complex as more complete type information would need to be available to the Code Generator. For instance, BuckleScript already knows the number of elements in a Tuple0 as compared to a Tuple2 so there is no need for a tag. and the same goes for records of various field names and numbers of fields. Joey's work already made Elm's handling of closures quite effective and in some cases better than BuckleScript as to elimination of the closure when it is inside a tail call optimized loop for many cases. Although off the subject of speed, it is something like the fairly minor change to make all current Elm types comparable (if comparing like types with like) so that Records and Union types/ADT's are also comparable as they are in OCaml/BuckleScript: the compiler already makes sure that both sides of a comparison are of the same type and kind; this would allow all current Elm types to be used as keys in Dict's/Set's and perhaps reduce the pressure on Evan to add type classes to the language. -- 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 elm-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout. -- 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 elm-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.