On Saturday, 31 December 2016 11:44:10 UTC+7, Bob Zhang wrote:
>
>
> Just for fun, I pasted the same code under BuckleScript playground:
>
>
> https://bloomberg.github.io/bucklescript/js-demo/?gist=efaf57aef9b37a38785681ded0ba35a9
>
> The generated code is below
>
> ```js
> function testProg(n) {
>   var lmt = Pervasives.min(n + 100000000 | 0, 1000000000);
>   var _i = n;
>   while(true) {
>     var i = _i;
>     if (i >= lmt) {
>       return i;
>     }
>     else {
>       _i = i + 1 | 0;
>       continue ;
>       
>     }
>   };
> }
> ```
> Note that BuckleScript compiler is able to do type specialization for 
> generic comparison, also it heavily optimized curried calling convention
>
 
That's interesting; Ocaml is quite a good syntax; this main thing I have 
found wrong with it in the past is how few primitive types it has, as int 
Int is 32 bits on 32-bit platforms and 64-bits on 64-bit platforms; 
actually less then these as there are tag bits.  Going by the try site, 
this is still true true; this might not affect it's use for BockleScript so 
much as most things are going to get converted to JavaScript Number's 
anyway, but one might be forced to use floating types more often then 
really required and there still is no way to represent primitive unboxed 
32/64 bit integers natively.

On Monday, December 26, 2016 at 12:44:49 PM UTC-5, GordonBGood wrote:
>>
>> *Synopsis:*  Some, including  Evan, maintain that Elm can be "faster 
>> than JavaScipt".  While that may be true for some use cases including use 
>> of perhaps more efficient UI updates due to compartmentalized use of 
>> VirtualDOM, the actaul Javascript code generated by the compiler  is not 
>> very efficient for many/most tight code cases.  The reason is often 
>> unnecessary nested function calls that could easily be eliminated by making 
>> full use of the type information that the Elm compiler has.
>>
>> Part I
>>
>> *An example;*  The following tight loop doesn't really do anything, so 
>> should therefore compile into the very tightest of code (and I'm not 
>> expecting the Elm compiler to recognize that the result is actually known 
>> at compile time):
>>
>> range : Int
>> range = 1000000000
>>
>> testProg : Int -> Int
>> testProg n = -- do some work
>>   let lmt = min (n + 100000000) range in
>>   let loop i =
>>     if i >= lmt then i else
>>     loop (i + 1) in loop n
>>
>> which compiles to the following JavaScript:
>>
>> var _user$project$Temp1482759649866537$range = 1000000000;
>> var _user$project$Temp1482759649866537$testProg = function (n) {
>> var lmt = A2(_elm_lang$core$Basics$min, n + 10000000000, 
>> _user$project$Temp1482759649866537$range);
>> var loop = function (i) {
>> loop:
>> while (true) {
>> if (_elm_lang$core$Native_Utils.cmp(i, lmt) > -1) {
>> return i;
>> } else {
>> var _v0 = i + 1;
>> i = _v0;
>> continue loop;
>> }
>> }
>> };
>> return loop(n);
>> };
>>
>

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