Here is a version I wrote in ATS3:

https://github.com/githwxi/ATS-Xanadu/blob/master/xatslib/libcats/TEST/test02_isPrime.dats

Currently, I can only compile the ATS3 code to JS. The generated JS code 
runs about 10 times slower
than the C code generated from compiling a comparable ATS2 implementation:

|thePrimes2| = 1077871

real    0m23.060s
user   0m23.380s
sys     0m0.188s
On Saturday, July 9, 2022 at 5:33:43 PM UTC-4 gmhwxi wrote:

> I took a look. Your ATS code looks very fine to me.
>
> I did some profiling on my own. In my trials, your ATS code is actually a 
> lot faster than
> the Haskell code you posted. Note that my ghc version is very old: GHC 
> 7.10.3
>
> ###### ATS ######
>
> (* Your code using non-linear stream *)
> hwxi@hongwei-t440p:/tmp$ patscc -O2 -o primes -DATS_MEMALLOC_LIBC 
> primes.dats
> hwxi@hongwei-t440p:/tmp$ time ./primes    
> 1077871
>
> real    0m3.118s
> user    0m3.064s
> sys     0m0.048s
>
> ###### Haskell ######
> (* Your haskell version *)
> (*
> Glasgow Haskell Compiler, Version 7.10.3, stage 2 booted by GHC version 
> 7.10.3
> *)
>
> hwxi@hongwei-t440p:/tmp$ ghc -O2 primes.hs
> Linking primes ...
> hwxi@hongwei-t440p:/tmp$ time ./primes    
> 1077871
>
> real    0m8.195s
> user    0m8.152s
> sys     0m0.040s
>
> ################
>
> ###### ATS ######
> (*My version using linear stream that is based on yours*)
>
> hwxi@hongwei-t440p:/tmp$ patscc -O2 -o primes2 -DATS_MEMALLOC_LIBC 
> primes2.dats
> hwxi@hongwei-t440p:/tmp$ time ./primes2    
> 1077871
>
> real    0m2.120s
> user    0m2.092s
> sys     0m0.000s
>
> On Saturday, July 9, 2022 at 12:50:11 PM UTC-4 ice.r...@gmail.com wrote:
>
>> My initial motivation was this Haskell source code: 
>> https://github.com/dambaev/mobt2/blob/master/haskell/app/Main.hs which 
>> is using lazy list (of course) and recursive binding and I decided to check 
>> if it will be possible to get something similar
>>
>> ATS version using non-linear stream is here: 
>> https://github.com/dambaev/mobt2/blob/master/ats2/src/TEST/test1.dats , 
>> but it takes to much memory as `stream_take_while` duplicates data, as I 
>> have got, that datatype constructor can't be unfolded with `@stream_cons` 
>> pattern match
>>
>> There is another version, that generates primes with non-linear stream 
>> and then, converting it to linear stream 
>> https://github.com/dambaev/mobt2/blob/master/ats2/src/TEST/test3.dats . 
>> This is the closest version to haskell's one. but still is using more space 
>> and as twice as slow as Haskell, so I had started to think of how to 
>> eliminate intermediate data structure.
>>
>> So, not a production issue, hehe, just found an interesting topic to dig 
>> in :)
>>
>> сб, 9 июл. 2022 г. в 11:11, Hongwei Xi <gmh...@gmail.com>:
>>
>>> By looking at your first version, my simple answer is that a linear 
>>> stream cannot be used
>>> in this way. The second version is possible but I am not sure what you 
>>> wanted to do exactly.
>>> If you show me how to use a non-linear stream to do it, then I could 
>>> probably say more.
>>>
>>> On Sat, Jul 9, 2022 at 5:26 AM Dambaev Alexander <ice.r...@gmail.com> 
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I had tried to implement function of type:
>>>>
>>>> ```
>>>> fun
>>>>   {a:t0p}
>>>>   isPrime
>>>>   ( xs: !stream_vt( int)
>>>>   , x: int
>>>>   ):<cloptr1>
>>>>   bool
>>>> ```
>>>>
>>>> Ie, I want to force evaluation of some portion of a stream, but I need 
>>>> to preserve it for a later use. 
>>>>
>>>> I had tried to make a similar version:
>>>> ```
>>>> fun
>>>>   {a:t0p}
>>>>   isPrime
>>>>   ( xs: stream_vt( int)
>>>>   , x: int
>>>>   ):<cloptr1>
>>>>   ( stream_vt( int), bool)
>>>> ```
>>>>
>>>> but failed as well, so I decided to ask for a direction if someone had 
>>>> tried to do similar stuff
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "ats-lang-users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to ats-lang-user...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/ats-lang-users/CAHjn2KwFq7JH%2BiZE7bWCJ_L7oZ38K-kmGBFii7DZsdxWLDsGmg%40mail.gmail.com
>>>>  
>>>> <https://groups.google.com/d/msgid/ats-lang-users/CAHjn2KwFq7JH%2BiZE7bWCJ_L7oZ38K-kmGBFii7DZsdxWLDsGmg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "ats-lang-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to ats-lang-user...@googlegroups.com.
>>>
>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLqp62MaoG8hugJ8h2mUt%2BsSAJ2eu6uRuJ%3D5nMOc4EbcfQ%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/ats-lang-users/CAPPSPLqp62MaoG8hugJ8h2mUt%2BsSAJ2eu6uRuJ%3D5nMOc4EbcfQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"ats-lang-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ats-lang-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ats-lang-users/d87d273b-c937-40b8-ae6a-8846a9fbb801n%40googlegroups.com.

Reply via email to