Poly/ML Home
About Poly/ML
Support for Poly/ML
Documentation
Get Poly/ML
About Poly/ML

Table of Contents

  1. History and Acknowledgements
  2. How much of Standard/ML does Poly/ML support?
  3. What else does Poly/ML provide?
  4. Will Poly/ML run on my computer?
  5. What is the persistent store (version 4)?
  6. What does "No room in pages" mean (version 4)?
  7. Where has discgarb/changeParent gone (versions 3 and 4)?
  8. How do I use X-Windows/Motif in Linux?
  9. How do I make a stand-alone application?

History and Acknowledgements

Poly/ML was originally written by David Matthews at the Computer Laboratory at Cambridge University.  It was written in an experimental language, Poly, similar to ML but with a different type system.  Among the first users was Larry Paulson who used it to develop the Isabelle theorem prover.  It was licensed by Cambridge University's company Cambridge University Technical Services, then called Lynxvale, to Abstract Hardware Limited (AHL) who developed it further and used it to write the Lamba system for hardware verification as well as other tools.  Mike Crawley did significant work on the run-time system and Simon Finn was heavily involved in translating Poly/ML from Poly into Standard ML.  Nick Chapman (nic AT truthmachine DOT demon DOT co DOT uk) wrote the C-language interface. In 1999 AHL's rights in Poly/ML were acquired by CUTS and they agreed to make Poly/ML freely available.

More recently David Matthews has continued to develop Poly/ML. The Standard Basis Library has been implemented and the compiler converted to the 1997 Definition of Standard ML (Revised).  This work was supported in part by LFCS. The most recent work has been rewriting the run-time system which has resulted in the version 5 release. This work was supported by the Verisoft project and the Technical University of Munich.

Back to Top

How much of Standard/ML does Poly/ML support?

Since the version 4.0 release Poly/ML now supports the full version of the language as given in the "Definition of Standard ML (Revised)", generally known as ML97.

Back to Top

What else does Poly/ML provide?

As well as being extremely fast and efficient implementation of Standard ML Poly/ML provides several additional features.  There is a foreign language interface which allows dynamically linked libraries to be loaded and functions within them called from ML.   An X-Windows interface using Motif is available and a Windows programming interface.  There is also a symbolic debugger for Poly/ML.

Back to Top

Will Poly/ML run on my computer?

Poly/ML is available for the most popular architectures and operating systems.   There are native code versions for the i386 (32 and 64 bit), Power PC and Sparc architectures.   There is a byte-code interpreted version which can be used on unsupported architectures. The configure script will automatically select the architecture when building from source.

Back to Top

What is the persistent store (version 4)?

The persistent store (in version 4.2.0 and earlier) was a way of saving program state (the declarations made in an interactive session) from one session to the next.  Other implementations of Standard ML provide something similar.  The main differences are that Poly/ML uses memory-mapping to load the saved state into working memory rather than reading it in.   This greatly reduces the start-up time of a session and improves the virtual memory behaviour of the program as well as reducing the load on the garbage collector.

Back to Top

What does "No room in pages" mean (version 4)?

There is a limit on the size a database can reach which is different for different operating systems.  The actual limits vary between operating systems and platforms but are typically around 400Mbytes for version 4.1.3 and later.  This message means that the database has reached this limit and "commit" has failed.  If you get this message the first thing to do is to run discgarb on the database to reduce its size.  Using the "-c" option to share common values may well help.   Another alternative is to create a child database using "PolyML.make_database".  Since the limit is per database this effectively doubles the space available.

Back to Top

Where has discgarb/changeParent gone (versions 3 and 4)?

The database garbage collector discgarb and the changeParent program have both been incorporated into the poly program.  To compact a database use poly with the -d option.  An additional option -c can be used to run the common-expression elimination phase.  The -p option changes the parent of a database as with changeParent.  If you need a discgarb or changeParent program, for instance if you have scripts which assume them, you can get the old behaviour simply by creating links to the poly binary called discgarb and changeParent.  Invoking the binary through these names will work as though the appropriate option had been given.

Back to Top

How do I use X-Windows/Motif in Linux?

In version 5 the configure script will automatically compile in support for X-Windows/Motif if the appropriate headers and libraries are available.

Back to Top

How do I make a stand-alone application?

This was complicated in older versions of Poly/ML but as from version 5.0 you can simply export a function and link the resulting object file with the Poly/ML libraries..

$ poly
Poly/ML 5.0 Release
> fun f () = print "Hello World\n";
val f = fn : unit -> unit
> PolyML.export("hello", f);
val it = () : unit
> ^D
$ cc -o hello hello.o -lpolymain -lpolyml
$ ./hello
Hello World

If you have installed the libraries in a directory that is not in the search path you may need to add this. For example
cc -o hello hello.o -L/usr/local/lib -lpolymain -lpolyml
It is possible to use the ld command rather than cc here but you may need to include some of the default C and C++ libraries on the command line. On some platforms it may be necessary to add -lstdc++.

Back to Top