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.