Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ECLiPSe release 7.0

35 views
Skip to first unread message

Joachim Schimpf

unread,
Jan 29, 2018, 1:29:42 PM1/29/18
to
Hello,


We have recently released version 7.0 of the ECLiPSe
Constraint Logic Programming System http://eclipseclp.org

The release contains significant changes "under the hood"
to support the new multi-engine/multi-thread functionality.
Beyond that, there are other new features and libraries too
numerous to list here, please refer to the release notes at
http://eclipseclp.org/relnotes/rel70.html

If you are upgrading from an earlier version, please check the
section on potential incompatibilities at the end of the notes.

ECLiPSe is open-source, with the reference source repository
hosted at Sourceforge (we have just migrated from CVS to Git
version control at https://sourceforge.net/p/eclipse-clp/git).

For help and feedback, please use one of the channels listed
under http://eclipseclp.org/mailinglist.html


Best regards,
Joachim Schimpf
ECLiPSe maintainer

burs...@gmail.com

unread,
Jan 29, 2018, 6:31:34 PM1/29/18
to
Whats the easiest way to make existing code run again?

I was trying a code that was working with a previous
version, but then during load I now get this error:

Ambiguous import of call / 1 from [eclipse_language, iso] in module eclipse
Ambiguous import of call / 1 from [eclipse_language, iso] in module eclipse

And then when I want to run my query, I get this error:

procedure does not exist: call / 1 in eclipse
Abort

Joachim Schimpf

unread,
Jan 30, 2018, 10:13:21 AM1/30/18
to
On 29/01/18 23:31, burs...@gmail.com wrote:
> Whats the easiest way to make existing code run again?
>
> I was trying a code that was working with a previous
> version, but then during load I now get this error:
>
> Ambiguous import of call / 1 from [eclipse_language, iso] in module eclipse
> Ambiguous import of call / 1 from [eclipse_language, iso] in module eclipse
>


ECLiPSe supports multiple Prolog dialects. The default is called
'eclipse_language', others are 'iso', 'iso_strict', 'cprolog',
'quintus', 'swi' ...

If you just want to run some experiments using one of the dialects,
you can start eclipse with a -L command line option such as

eclipse -L iso

or set the ECLIPSEDEFFAULTLANGUAGE enviroment variable accordingly.


If you want to mix different dialects in one application, you should
enclose the different components in modules with headers such as

:- module(my_iso_prolog_code, [], iso).


The error you were getting results from importing the 'iso' dialect
(via use_module(library(iso)) or the like) into an existing module
that already uses the default 'eclipse_language' dialect. This
causes conflicts between alternative definitions of built-ins.


Cheers,
Joachim


burs...@gmail.com

unread,
Jan 30, 2018, 10:45:55 AM1/30/18
to
Ok, could make it run via:

"C:\Program Files\ECLiPSe 7.0\lib\x86_64_nt\eclipse.exe" -L iso

Then did run my usual test cases:

?- ensure_loaded('//C/Projects/Jekejeke/Prototyping/samples/jekrun/benchmark/harness/eclipse.p').

But cannor replicate the old measures.
The old measures were:

https://github.com/jburse/jekejeke-samples/blob/master/jekrun/benchmark/galery/ideapad_eclipse.gif

The new measures are:

dummy in 0 (0 gc) ms
nrev in 31 (0 gc) ms
crypt in 62 (0 gc) ms
deriv in 62 (0 gc) ms
poly in 63 (0 gc) ms
qsort in 203 (0 gc) ms /* slower */
tictac in 125 (0 gc) ms
queens in 78 (0 gc) ms
query in 453 (0 gc) ms /* slower */
mtak in 250 (0 gc) ms /* slower */
perfect in 657 (0 gc) ms /* slower */
calc in 140 (0 gc) ms /* slower */
Total in 2124 (0 gc) ms

Something more to look for or watch out?

burs...@gmail.com

unread,
Jan 30, 2018, 10:47:33 AM1/30/18
to
Or maybe an effect of based_bignums? So the
old tests did not really run with unbounded int?

burs...@gmail.com

unread,
Jan 31, 2018, 5:07:51 AM1/31/18
to
Thanks for your respose with another eclipse.p.
One more question, what kind of BigNum is ECLiPSe
Prolog using.

Under the hood, what kind of library is used.

I know that SWI-Prolog uses GNU, and its two
times faster than Java BigInteger usually. I did
some testing with SWI-Prolog versus Jekejeke Prolog:

SWI-Prolog
?- time(fac(100000, 1, _)).
% 200,002 inferences, 1.609 CPU in 1.730 seconds (93% CPU, 124273 Lips)
true.

Jekejeke-Prolog (using 2G Mem to lower GC Pressure):
?- time(fac(100000, 1, _)).
% Up 2,667 ms, GC 29 ms, Thread Cpu 2,625 ms (Current 01/31/18 11:01:09)
Yes

If I use less memory like 512M, my system is slower,
since there is more GC pressure. But somehow its faster
then ECLiPSe Prolog with 2.69s according to this SO post:

Why a bignumber is shown incomplete in ECLiPSe Prolog?
https://stackoverflow.com/a/48530979/502187

So I wonder what kind of bignum are used in
ECLiPSe Prolog. Its quite stunning that GNU
beats Java BigInteger all the time, since

Java BigInteger uses all kind of tricks, like
extra fast multiplication (Karatsuba and Toom Cook)
when the arguments are large. But GNU is always

a little faster, couldn't beat it so far. And
in the above code of fac/3 its pratically irrelevant
how fast your Prolog interpreter is, the dominating

time factor will be the number Prolog ALU I guess.

burs...@gmail.com

unread,
Jan 31, 2018, 11:46:42 AM1/31/18
to
I just notice, ECLiPSe Prolog has an excellent
help system. But its not exactly like in SWI-Prolog.

In ECLiPSe Prolog:
==================

[eclipse 1]: apropos(time).
calling an undefined procedure apropos(time) in module eclipse
Abort

[eclipse 2]: help(time).
----
get_flag(?Flag, -Value)
Succeeds if the flag Flag has the value Value.
----
In library timeout: call_timeout_safe(+Goal)
Execute Goal, deferring the execution of an interrupting timeout predicate TimeOutGoal until Goal completes.
Etc..

[eclipse 3]: help(time/1).

time(+Goal)

Run Goal to first solution, and print timings

Arguments
Goal A callable term

Type
library(util)

Description

Call the goal Goal (as with once/1), and print the timings after
the goal has succeeded or failed. The four times printed are:

- thread cputime (of the calling thread only)
Etc..

In SWI-Prolog:
==============

?- apropos(time).
/* window with list shown */
true.

?- help(time).
true.
/* window with text shown */

Am Dienstag, 30. Januar 2018 16:47:33 UTC+1 schrieb burs...@gmail.com:

Joachim Schimpf

unread,
Feb 2, 2018, 1:14:01 PM2/2/18
to
On 30/01/18 15:45, burs...@gmail.com wrote:
> Ok, could make it run via:
>
> "C:\Program Files\ECLiPSe 7.0\lib\x86_64_nt\eclipse.exe" -L iso
>
> Then did run my usual test cases:
>
> ?- ensure_loaded('//C/Projects/Jekejeke/Prototyping/samples/jekrun/benchmark/harness/eclipse.p').
>
> But cannor replicate the old measures.

The sporadic slowdowns you noticed were due to the iso compatibility layer
(which has become more rigid in this release). Fixed in the next build.


On 31/01/18 10:07, burs...@gmail.com wrote:> One more question, what kind of
BigNum is ECLiPSe Prolog using.

ECLiPSe uses GMP.


-- Joachim

0 new messages