On Tue, 21 Jun 2011, Aleks Kissinger wrote:

On a related note, any idea why Par_List.exists would raise the "EXCEPTIONS []" exception? The predicate function shouldn't be throwing exceptions (at least it doesn't with List.exists substituted in), and doesn't use side effects.

EXCEPTIONS [] means spontanous cancellation, say via external interrupt or internal sigalling from peer task groups. E.g. there could be a stack overflow in one future task. The Poly/ML runtime systems turns this into exception Interrupt, which the future scheduler will propagate to other futures of the same group, turning it into EXCEPTIONS [] at some point.

(There can also some boundary cases with *incorrect* treatment in my implementation. I have had rare situations where there are some surprises concerning this.)

Anyway, you can check with Multithreading.max_threads := 1 without any special things getting in between. If you now see Interrupt it means Poly/ML RTS failure, typically stack overflow (max. 64MB) or virtual memory exhaustion (max. 2GB). You can then try with x86_64 to see if the problem persists, although it might lead to disk thrashing instead.


Assuming that you have Isabelle2011, this is how to configure x86_64 in your $HOME/.isabelle/etc/settings file:

  ML_PLATFORM="$ISABELLE_PLATFORM64"
  ML_HOME="$ISABELLE_HOME/contrib/polyml-5.4.0/$ML_PLATFORM"
  ML_SYSTEM=polyml-5.4.0
  ML_OPTIONS="-H 1000"
  ML_SOURCES="$ML_HOME/../src"

You then need to build Pure for that platform:

  Isabelle2011/build Pure

or on Mac OS X:

  Isabelle2011.app/Isabelle/build Pure


        Makarius
_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to