Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.prolog > #13960 > unrolled thread

Not being a Haskell programmer is trendy!

Started byMild Shock <janburse@fastmail.fm>
First post2024-02-02 20:46 +0100
Last post2024-03-06 01:56 +0100
Articles 2 on this page of 22 — 2 participants

Back to article view | Back to comp.lang.prolog


Contents

  Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-02-02 20:46 +0100
    Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-02-02 21:00 +0100
      Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-02 12:50 -0800
        Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-07 03:25 -0800
      Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-11 14:34 -0800
        Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-11 14:39 -0800
          Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-14 06:45 -0800
            Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-14 06:53 -0800
    Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-14 13:29 -0800
      Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-14 13:33 -0800
    Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-02-21 01:27 +0100
      Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-02-21 01:28 +0100
        Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-02-21 01:30 +0100
          Re: Not being a Haskell programmer is trendy! Mild Shock <bursejan@gmail.com> - 2024-02-21 03:43 -0800
    Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-01 17:45 +0100
      Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-01 17:47 +0100
        Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-01 17:57 +0100
          Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-01 18:06 +0100
            Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-01 18:08 +0100
              Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-01 19:45 +0100
                Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-01 21:33 +0100
    Re: Not being a Haskell programmer is trendy! Mild Shock <janburse@fastmail.fm> - 2024-03-06 01:56 +0100

Page 2 of 2 — ← Prev page 1 [2]


#14003

FromMild Shock <janburse@fastmail.fm>
Date2024-03-01 21:33 +0100
Message-ID<urte2c$qgfe$1@solani.org>
In reply to#14002
Lets not forget GNU Prolog. It lacks a little bit
behind SWI-Prolog for the first test case:

?- p(X), (between(1,1000000,_),X,fail; true).
X = (A is 1+2,_ is A+3)
(453 ms) yes

?- (between(1,1000000,_),p(X),X,fail; true).
(578 ms) yes

Also this kind of testing might be a little bit
to generous, by ommiting the time/1 call.

Mild Shock schrieb:
> A small sanity test. How does formerly Jekejeke Prolog
> and Dogelog Player perform. Dogelog Player has not yet
> call/N, I do not promote using it, since I am
> 
> still waiting for a good idea to compile it a little
> bit more statically. Formerly Jekejeke Prolog uses a
> dynamic inline cache, polymorphic in the arity.
> 
> But this test case is anyway less about call/N and
> more about call/1 and is/2. I get:
> 
> For formerly Jekejeke Prolog:
> 
> /* Jekejeke Prolog 1.6.6 */
> ?- p(X), time((between(1,1000000,_),X,fail; true)).
> % Zeit 540 ms, GC 3 ms, Uhr 01.03.2024 19:37
> X = (_0 is 1+2, _1 is _0+3).
> 
> ?- time((between(1,1000000,_),p(X),X,fail; true)).
> % Zeit 867 ms, GC 3 ms, Uhr 01.03.2024 19:37
> true.
> 
> For Dogelog Player:
> 
> /* Dogelog Player 1.1.6 */
> ?- p(X), time((between(1,1000000,_),X,fail; true)).
> % Zeit 447 ms, GC 0 ms, Lips 15660199, Uhr 01.03.2024 19:38
> X = (_16030782 is 1+2, _16030783 is _16030782+3).
> 
> ?- time((between(1,1000000,_),p(X),X,fail; true)).
> % Zeit 1780 ms, GC 0 ms, Lips 14606802, Uhr 01.03.2024 19:38
> true.
> 
> Jekejeke Prolog and Dogelog Player do not choke
> like Scryer Prolog does. The performance of Dogelog
> Player is amazing, since call/1 is implemented in
> 
> pure Prolog, not via an interpreter, but via a little
> compiler, and an intermediate form, that we anyway use
> when we generate cross compiled code or
> 
> static/dynamic clausse.
> 
> Mild Shock schrieb:
>> But I cannot retract my claim about Scryer Prolog
>> it definitively chokes:
>>
>> ?- p(X), time((between(1,1000000,_),X,fail; true)).
>>     % CPU time: 2.233s, 11_000_023 inferences
>>     X = (_A is 1+2,_B is _A+3).
>>
>> ?- time((between(1,1000000,_),p(X),X,fail; true)).
>>     % CPU time: 6.180s, 13_000_045 inferences
>>     true.
>>
>> Thats an order slower than Trealla and SWI-Prolog.
>>
> 
> 

[toc] | [prev] | [next] | [standalone]


#14007

FromMild Shock <janburse@fastmail.fm>
Date2024-03-06 01:56 +0100
Message-ID<us8f0r$100qa$1@solani.org>
In reply to#13960
In short moment I though I could speed up
call/1, by using SWI-Prolog $meta_call/1 semantics,
which differs from call/1 semantis:

/* SWI-Prolog 9.3.0 */
?- call((Y=!,(X=1;X=2),Y,X=2)).
Y = !,
X = 2.

?- '$meta_call'((Y=!,(X=1;X=2),Y,X=2)).
false.

/* SWI-Prolog 9.3.0 */
?- call(((X=1;X=2),1,X=2)).
ERROR: Type error: `callable' expected, found
`(_168=1;_168=2),1,_168=2' (a compound)

?- '$meta_call'(((X=1;X=2),1,X=2)).
ERROR: Type error: `callable' expected, found `1' (an integer)

One can spare one pass, since body conversion is
ommited. Would make call/1 faster. Also intersting
find, that I wasn't aware of, namely there is

correspondence between:

SWI-Prolog                  Dogelog Player
prolog_current_choice/1     '$MARK'
prolog_cut_to/1             '$CUT'

but the body conversion pass in Dogelog Player, does
optimize away unnecessary '$MARK' and $CUT', so maybe
the this extra pass isn't useless overhead?

Mild Shock schrieb:
> Lets not forget GNU Prolog. It lacks a little bit
> behind SWI-Prolog for the first test case:
> 
> ?- p(X), (between(1,1000000,_),X,fail; true).
> X = (A is 1+2,_ is A+3)
> (453 ms) yes
> 
> ?- (between(1,1000000,_),p(X),X,fail; true).
> (578 ms) yes
> 
> Also this kind of testing might be a little bit
> to generous, by ommiting the time/1 call. 

[toc] | [prev] | [standalone]


Page 2 of 2 — ← Prev page 1 [2]

Back to top | Article view | comp.lang.prolog


csiph-web