From jan@swi.psy.uva.nl Thu Dec 20 17:33:41 2001
Received: from gollem.swi.psy.uva.nl (root@gollem.swi.psy.uva.nl [145.18.152.30])
	by swi.psy.uva.nl (8.11.6/8.11.2) with ESMTP id fBKGXfT06330
	for <prolog@swi.psy.uva.nl>; Thu, 20 Dec 2001 17:33:41 +0100 (MET)
Received: (from jan@localhost)
	by gollem.swi.psy.uva.nl (8.11.3/8.11.3/SuSE Linux 8.11.1-0.5) id fBKGXfJ16243
	for prolog@swi.psy.uva.nl; Thu, 20 Dec 2001 17:33:41 +0100
Date: Thu, 20 Dec 2001 17:33:41 +0100
Message-Id: <200112201633.fBKGXfJ16243@gollem.swi.psy.uva.nl>
From: Jan Wielemaker <jan@swi.psy.uva.nl>
To: prolog@swi.psy.uva.nl
Phone: +31 - 20 - 525 6121
Subject: [SWIPL] Seeking testers for new meta-call implementation

Hi,

Background
----------

I've made some drastic changes to the way meta-calls (call/1,
variables as goal, findall/3, catch/3, etc.) are handled.  SWI-Prolog
is a compile-only environment.  Correct handling of the ! is
meta-calls is very hard without using the compiler.  Before version
3.3 this problem was ignored and ! simply didn't work.  From version
3.3 any meta-call that is not a `simple' call (i.e. contains
control-structures) is compiled.  This posed two problems.  The first
was to clean up these temporary clauses efficiently.  The second
proved more serious: compound terms appearing in arguments are
compiled and copied.  This problem was detected by Lyosha Ilyukhin
and clearly unacceptable.

I've now implemented a new schema.  Control-structures are compiled,
but compound and string arguments to goals are shared with the term.
In addition, the compiled code is stored on the stack and thus
disappears as the goal finishes without any worries.

Test request (CVS users)
------------------------

The CVS repository contains the new version.  It has passed a rather
extensive test-suite and a number of applications I have around.  I'd
be glad if you could test this version on your programs, especially
if you happen to use a lot of meta-calls.  Please drop me a mail with
results.

	Regards --- Jan

