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.