Path: ...!news.nobody.at!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock Newsgroups: comp.lang.prolog Subject: Re: Is old school mode directed compilation dead? (Was: thank you for the FLOPs) Date: Fri, 24 Jan 2025 17:58:06 +0100 Message-ID: References: <1b7ce2bd-722b-4c2e-b853-12fc2232752bn@googlegroups.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Fri, 24 Jan 2025 16:58:05 -0000 (UTC) Injection-Info: solani.org; logging-data="447885"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0 SeaMonkey/2.53.20 Cancel-Lock: sha1:URD2FDI1Ni3EpYvtaOF2V0FBWgY= X-User-ID: eJwFwQERADEIAzBL5VbKkMPD8C/hEz8ydVAu+voaMHXWqOtXSBY4r6kV7PbkBAh7W53dH06ksS0jBqeKPzfdFPE= In-Reply-To: Bytes: 4015 Lines: 90 Hi, Would need more testing but the present example is immune: /* SWI-Prolog 9.3.19 */ ?- X = f(g(1),h(2)), time((between(1,1000000,_), test1(X, Y), fail; true)). % 1,999,998 inferences, 0.094 CPU in 0.100 seconds (93% CPU, 21333312 Lips) ?- X = f(g(1),h(2)), time((between(1,1000000,_), test2(X, Y), fail; true)). % 1,999,998 inferences, 0.094 CPU in 0.100 seconds (93% CPU, 21333312 Lips) ?- Y = j(1,2), time((between(1,1000000,_), test1(X, Y), fail; true)). % 1,999,998 inferences, 0.109 CPU in 0.100 seconds (109% CPU, 18285696 Lips) ?- Y = j(1,2), time((between(1,1000000,_), test2(X, Y), fail; true)). % 1,999,998 inferences, 0.094 CPU in 0.102 seconds (92% CPU, 21333312 Lips) Not all Prolog systems are that lucky: /* Scryer Prolog 0.9.4-286 */ ?- X = f(g(1),h(2)), time((between(1,1000000,_), test1(X, Y), fail; true)). % CPU time: 1.163s, 11_000_108 inferences ?- X = f(g(1),h(2)), time((between(1,1000000,_), test2(X, Y), fail; true)). % CPU time: 1.248s, 11_000_131 inferences ?- Y = j(1,2), time((between(1,1000000,_), test1(X, Y), fail; true)). % CPU time: 0.979s, 11_000_131 inferences ?- Y = j(1,2), time((between(1,1000000,_), test2(X, Y), fail; true)). % CPU time: 1.338s, 11_000_131 inferences Bye Mild Shock schrieb: > Hi, > > Just noticed that SICStus Prolog says that > their mode declaration is a dummy declaration, > does nothing. Now I tried whether I can force > > SWI Prolog to accept different manually compiled clauses: > > test1(X,Y) :- Y = j(C,D), g(C) = A, h(D) = B, f(A,B) = X. > > test2(X,Y) :- X = f(A,B), A = g(C), B = h(D), j(C,D) = Y. > > Difficult to archive in SWI-Prolog, since it > orders unification on its own, test1/2 and test2/2 > will behave the same, since they are essentially the same: > > /* SWI-Prolog 9.3.19 */ > ?- listing(test1/2), listing(test2/2). > test1(f(A, B), j(C, D)) :- >     A=g(C), >     B=h(D). > > test2(f(A, B), j(C, D)) :- >     A=g(C), >     B=h(D). > > But maybe not necessary since SWI-Prolog has an > advanced instruction set and advanced Prolog > logical variable representation? > > Bye > > Mild Shock schrieb: >> Hi, >> >> Given that Scryer Prolog is dead. >> This made me smile, traces of Scryer Prolog >> >> are found in FLOPs 2024 proceedings: >> >> 7th International Symposium, FLOPS 2024, >> Kumamoto, Japan, May 15–17, 2024, Proceedings >> https://www.cs.ox.ac.uk/jeremy.gibbons/flops2024.pdf >> >> So why did it flop? Missing garbage collection >> in the Prolog System? Or did or is it to estimate >> that ChatGPT will also kill Scryer Prolog? >> >> Or simply a problem of using Rust as the >> underlying host language? >> >> Bye > >