[PPL-devel] Re: Problems with XSB 2.7.1

Roberto Bagnara bagnara at cs.unipr.it
Fri Jul 1 20:29:59 CEST 2005


Terrance Swift wrote:
> First, thank you Roberto for your help and patience in finding a bug.
> I was away from email this morning, which I guess was fortunate for me
> in that you and David did the work in isolating problematic behavior.
> 
> There are actually two issues.  The first is that if you call
> flush_output/1 with an atom that is not an alias it fails silently,
> rather than raising an exception.  This is a bug.
> 
> The second is the use of user_output as an alias for the current
> output stream.  I had been under the impression that the ISO standard
> used user_out rather than user_output, but I should recheck my copy (I
> dont have it with me for the weekend, and it doesn't seem to be
> available on line).  However, since other Prolog's support user_output
> (at least Sicstus does) I should also include user_output and
> user_input as aliases.

They are indeed specified by the ISO standard: 7.10.2.2 and 7.10.2.3,
page 55.

> I'll make the fixes in sourceforge this afternoon.  It may require
> changes to a couple of files.
> 
> As a workaround, you can 1) check out XSB from sourceforge under
> anonymous CVS (after I make the changes) or 2) use one of these in
> your code
> 
> | ?- flush_output(userout).
> | ?- flush_output(user_out).
> | ?- flush_output.
> 
> or 3) undefine flush_output/1 as a standard predicate in your copy of
> XSB (easy, and I can tell you how to do this if this is what
> you want to do).

I think (3) is the best option for me.  In fact, the users involved
are unlikely to want to use a non-official release, which rules out
(1), while (2) would require me to change the system-independent part
of my code.
So, if you teach me how to implement (3), I have the temporary
workaround I was looking for.
Many thanks,

     Roberto

> Terry Swift
> 
> 
> 
> 
> On Fri, 1 Jul 2005, Roberto Bagnara wrote:
> 
> 
>>David Warren wrote:
>>
>>>You've enabled more debugging than I ever have...  It gets through the
>>>compilation of the emulator, but then fails as it begins to recompile
>>>the prolog compiler.  It seems to have completed compilation of the
>>>first file, so you've gotten reasonably far into the XSB code.  THis
>>>means it is most likely not the tagging scheme, with which we formerly
>>>had problems under fedora.
>>>
>>>It looks like here it may have something to do with file i/o?  What if
>>>you try to execute other simple files with this emulator?  I.e., just
>>>try to use this emulator to execute something simple.
>>>
>>>Going back to the original system, did you configure it (before trying
>>>to enable debugging)?  Did it get through the recompilation of the
>>>prolog compiler and system directories?  If so, then this seems to be
>>>a problem with the debug configuration.  If we go back to the original
>>>problem of a loop in some code that ought to run, where was that loop?
>>> Could we trace or instrument that original program to try to see
>>>where the loop was?  Or was it so early, you couldn't find it in the
>>>Prolog code?
>>>
>>>So, to summarize.  It might be the debugging code that is causing the
>>>problem here, and it may be easier (or may not) to go back to the
>>>original nondebugging version to try to see what's going on there.  If
>>>it getting into Prolog code, it might be easier to try to track down
>>>the loop using Prolog tracing or other Prolog techniques.
>>
>>Dear David,
>>
>>you are right: the one I reported is probably a bug concerning
>>the debugging options.  The problem was that my code makes heavy
>>use of the foreign language interface and with the optimized version
>>I was unable to understand where the problem occurred.
>>
>>Now I have configured XSB with
>>
>>   ./configure --prefix=/usr/local/lib/xsb --enable-debug  --disable-optimization
>>
>>and this gave me the possibility to ascertain that my problem was
>>in the Prolog part.  Everything boils down to the fact that the
>>query
>>
>>     ?- flush_output(user_output).
>>
>>silently fails.  This is strange, because flush_output/1
>>is an ISO builtin, user_output is, in ISO Prolog, an alias
>>for the user output stream.
>>
>>Passing from XSB 2.6 to 2.7.1 I was brought to remove my
>>definition
>>
>>:- import file_flush/2 from file_io.
>>
>>flush_output(user_output) :-
>>   file_flush(0, _).
>>
>>because of the error
>>
>>++Error[XSB]: [Compiler] Trying to redefine the standard predicate: flush_output/1
>>The file ./xsb_clpq.xwam is removed
>>Aborting...
>>
>>I thought: "cool, they have incorporated more ISO features!"
>>What am I doing wrong?
>>Many thanks,
>>
>>      Roberto
>>
>>--
>>Prof. Roberto Bagnara
>>Computer Science Group
>>Department of Mathematics, University of Parma, Italy
>>http://www.cs.unipr.it/~bagnara/
>>mailto:bagnara at cs.unipr.it
>>
>>
>>-------------------------------------------------------
>>SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
>>from IBM. Find simple to follow Roadmaps, straightforward articles,
>>informative Webcasts and more! Get everything you need to get up to
>>speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
>>_______________________________________________
>>Xsb-development mailing list
>>Xsb-development at lists.sourceforge.net
>>https://lists.sourceforge.net/lists/listinfo/xsb-development


-- 
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara at cs.unipr.it



More information about the PPL-devel mailing list