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 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