Download the latest stable release:
ftp://ftp.cse.unsw.edu.au/pub/users/dons/hs-plugins/hs-plugins-0.9.10.tar.gz
Darcs repository of the latest code:
darcs get http://www.cse.unsw.edu.au/~dons/code/hs-plugins
A tarball of the document you are reading:
http://www.cse.unsw.edu.au/~dons/hs-plugins/hs-plugins.html.tar.gz
A postscript version of the document you are reading:
http://www.cse.unsw.edu.au/~dons/hs-plugins/hs-plugins.ps.gz
Papers:
A paper on interesting uses of hs-plugins to enable Haskell to be used
as an application extension language:
http://www.cse.unsw.edu.au/~dons/papers/PSSC04.html
A paper on dynamic applications in Haskell, utilizing hs-plugins:
http://www.cse.unsw.edu.au/~dons/papers/SC05.html
It is known to run on i386-{linux,freebsd,openbsd}, sparc-solaris2, powerpc-{macosx,linux} and flavours of Windows.
June 2005, v0.9.10
Support for GHC 6.4, with help from Sean Seefried for the package.conf parser.
Ported to Windows of various flavours thanks to Vivian McPhail and Shelarcy
Removed posix and unix dependencies
Now uses HSX parser, thanks to Niklas Broberg
Extended load interface, thanks to Lemmih
Source now in a darcs repository
Supports building with GNU make -jN
Simplified module hierarchy, moved under System.* namespace
pdynload clarifications, thanks to Alistair Bayley
Miscellaneous bug fixes
February 2005, v0.9.8
Fix bug in .hi parsing.
Add reloading of packages.
Fix bug in canonical module names (fixing problems with "Foo.o" and "./Foo.o"
Fix for hierarchical names, don't guess them, read them from the .hi file.
Add new varients of load.
Fix bug in makeAll, such that dependent module changes were not noticed.
Add varient of eval: unsafeEval_, returing Either.
Better, bigger testsuite.
Better api.
September 2004.
makeAll
Better return type for make.
Mid August 2004, v0.9.6 release.
More portable, thanks to debugging by Niklas Broberg.
Other small fixes to the interfaces.
Provides a runtime-generated printf.
Mid July 2004, added new pdynload strategy.
Mid-June 2004, v0.9.5 release.
dynamic typing is working
static typing of interfaces is working
Adds eval, and hs_eval
bugs fixed.
Early-June 2004, v0.9.4 release.
Adds a .hi file parser. We use this to work out plugin dependencies directly, meaning no more .dep files or ghcp.
It also adds a package.conf parser, meaning we can properly handle packages that either aren't stored in the normal location, don't have a canonical name, or are found using a -package-conf argument. Thanks to Sean for this work.
the interface to load() has changed to allow a list of package.conf files to search for packages.
the interace to make() has changed, so that you can get back any stderr output produced during plugin compilation.
It solves a bug whereby a package that is required by another package would not be loaded unless the plugin itself depended on this indirect package.
more stable, more examples.
May 2004, v0.9.3 released, adding support for dependency conflict resolution between multiple plugins. Several plugins with shared dependencies can now be safely loaded at once. -prefix is now respected in ./configure. Thanks to Sean for this patch.
v0.9.2 change licence to LGPL
v0.9.1 expand on the documentation
v0.9 released, initial source release
André Pang's runtime_loader was the inspiration and basis of the dynamic loader (http://www.algorithm.com.au). hs-plugins has benefited from many discussions with him, particularly to do with dependency checking and dynamic typing, and bug reports. André wrote an objective C binding to hs-plugins, and helped with the design of eval(). He also fixed GHC so we could load the dynamic loader dynamically.
Sean Seefried (http://www.cse.unsw.edu.au/~sseefried) was the first user of hs-plugins and his code and feedback have helped make the library much more useful and powerful.
Manuel Chakravarty's take system provided the basis for make, and helped with several issues to do with safety of plugins, apis and the applications that use them. Manuel also helped with the design of eval(), and on how to successfully evaluate polymorphic functions using rank-N types.
Simon Marlow helped with several issues to do with linking and loading static and dynamic code, and provided many useful suggestions.
Hampus Ram's dynamic loader (http://www.dtek.chalmers.se/~d00ram/dynamic/) provided the design of the state maintained by the loader, and for thread safety issues relating to this.
Shae Erisson provided several insights into more powerful uses of the library. Thanks to everyone on #haskell who provided discussion about the library.
Malcolm Wallace's hmake provided some useful insights in how to compile Haskell source in a way that makes it appear like an interpreter, used in the interactive environment: plugs.
Niklas Broberg helped a lot by testing, and providing feedback for the new make and load API. Thanks Niklas.
Finally, thanks to everyone who has worked on GHC and its libraries: for GHCi, the .hi interface parser, the package system, and all the other code the hs-plugins depends on.