I will check ATS3 version, meanwhile GHC 8.10 produces much more optimised
code:

```
[nix-shell:/data/devel/mobt2/haskell]$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 8.10.7
[nix-shell:/data/devel/mobt2/haskell]$ ghc -O2 --make app/Main.hs -o haskell
[1 of 1] Compiling Main             ( app/Main.hs, app/Main.o )
Linking haskell ...
[nix-shell:/data/devel/mobt2/haskell]$ $(which time) ./haskell
1077871
1.04user 0.00system 0:01.05elapsed 100%CPU (0avgtext+0avgdata
72140maxresident)k
0inputs+0outputs (0major+17298minor)pagefaults 0swaps
```
in comparison to ATS2 versions from repo above:

```
[nix-shell:/data/devel/mobt2/ats2/src]$ make
patscc -O2 -DATS_MEMALLOC_LIBC -I"../libs/" -o test3   TEST/test3.dats
/run/current-system/sw/bin/time ./test3
1077871
1.11user 0.01system 0:01.12elapsed 100%CPU (0avgtext+0avgdata
102456maxresident)k
0inputs+0outputs (0major+25327minor)pagefaults 0swaps
patscc -O2 -DATS_MEMALLOC_LIBC -I"../libs/" -o test1   TEST/test1.dats
/run/current-system/sw/bin/time ./test1
1077871
2.11user 0.03system 0:02.14elapsed 99%CPU (0avgtext+0avgdata
203448maxresident)k
0inputs+0outputs (0major+50589minor)pagefaults 0swaps
```
ie, non-linear version (test1) is twice slower and using 2x memory of test3
(which converts stream into stream_vt). But still, haskell version is
faster and using less memory :)

вс, 10 июл. 2022 г. в 02:21, gmhwxi <gmh...@gmail.com>:

> 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
> <https://groups.google.com/d/msgid/ats-lang-users/d87d273b-c937-40b8-ae6a-8846a9fbb801n%40googlegroups.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/CAHjn2KyYuioGnFKq94WF-1ESB9B%3DqK9t_a4Vk5vBnKv%3DGAxNiA%40mail.gmail.com.

Reply via email to