home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / faqs / comp / answers / meta-lang-faq < prev    next >
Encoding:
Internet Message Format  |  1997-10-02  |  50.8 KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!news-out.internetmci.com!newsfeed.internetmci.com!4.1.16.34!cpk-news-hub1.bbnplanet.com!news.bbnplanet.com!portc02.blue.aol.com!pitt.edu!newsfeed.pitt.edu!bb3.andrew.cmu.edu!honeysuckle.srv.cs.cmu.edu!goldenapple.srv.cs.cmu.edu!rowan
  2. From: rowan@cs.cmu.edu (Rowan Davies)
  3. Newsgroups: comp.lang.ml,comp.answers,news.answers
  4. Subject: Comp.Lang.ML FAQ [Monthly Posting]
  5. Followup-To: poster
  6. Date: 1 Oct 1997 15:34:43 GMT
  7. Organization: Carnegie Mellon Univ. -- Computer Science Dept.
  8. Lines: 1306
  9. Sender: rowan@cs.cmu.edu
  10. Approved: comp-lang-ml@cs.cmu.edu
  11. Expires: Tue, 4 Nov 1997 00:00:00 GMT
  12. Message-ID: <60tqij$6k4$1@goldenapple.srv.cs.cmu.edu>
  13. Reply-To: comp-lang-ml-request@cs.cmu.edu
  14. NNTP-Posting-Host: kurt.tip.cs.cmu.edu
  15. Summary: This posting contains a list of Frequently asked questions (and their
  16.          answers) about the family of ML programming languages, including 
  17.          Standard ML, CAML, Lazy-ML, and CAML-Light.  This post should be read 
  18.          before asking a question on the comp.lang.ml newsgroup.
  19. Originator: rowan@kurt.tip.cs.cmu.edu
  20. Xref: senator-bedfellow.mit.edu comp.lang.ml:2188 comp.answers:28320 news.answers:113580
  21.  
  22. Archive-name: meta-lang-faq
  23. Last-modified: 1997/08/07
  24.  
  25.          COMP.LANG.ML Frequently Asked Questions and Answers 
  26.        (compiled by Dave Berry and Greg Morrisett)
  27.            (maintained by Rowan Davies) 
  28.  
  29. Please send corrections, additions, or comments regarding this list to
  30. comp-lang-ml-request@cs.cmu.edu.  
  31.  
  32. Changes since last month: 
  33.  - None
  34.  
  35. Contents:
  36. ---------
  37.     1. What is ML?
  38.     2. Where is ML discussed?
  39.         a. Comp.Lang.ML
  40.         b. SML-LIST
  41.         c. CAML-LIST
  42.     3. What implementations of ML are available?
  43.         a. quick summary (by machine/OS)
  44.          b. Standard ML of New Jersey (SML/NJ)
  45.         c. sml2c
  46.         d. Caml Light
  47.                 e. Objective Caml
  48.                 f. Bigloo
  49.                 g. Camlot
  50.         h. Moscow ML
  51.         i. ML Kit
  52.                 j. Edinburgh
  53.         k. MicroML
  54.         l. Poly/ML
  55.         m. Poplog ML
  56.                 n. MLWorks
  57.         4. Unsupported SML/NJ Ports
  58.         a. Linux
  59.         b. OS/2
  60.                 c. FreeBSD
  61.         d. NEXTSTEP
  62.          e. SVR4
  63.         5. Where can I find documentation/information on ML?
  64.         a. The Definition
  65.         b. Textbooks
  66.         c. Information on the Internet
  67.     6. Where can I find ML library code?
  68.                 a. The Standard ML ('97) Basis Library
  69.         b. The Edinburgh SML Library
  70.         c. The SML/NJ Library
  71.         d. SML_TK
  72.                 e. Caml-light libraries
  73.         f. The Qwertz Toolbox (for AI)
  74.     7. Theorem Provers and ML
  75.         8. Miscellaneous Questions
  76.         a. How do I write the Y combinator in SML?
  77.         b. Where can I find an X-windows interface to SML?
  78.         c. How do I call a C function from SML/NJ?
  79.         d. Where can I find an emacs mode for SML?
  80.  
  81. --------------------------------------------------------------------------
  82.  
  83. 0. Where can I find the latest copy of this FAQ?
  84.  
  85.   This document can be retrieved via anonymous ftp from
  86.     ftp://pop.cs.cmu.edu/usr/rowan/sml-archive/faq.txt
  87.   or from rtfm.mit.edu.  There is an HTTP version with active links at
  88.     http://www.cis.ohio-state.edu/hypertext/faq/usenet/meta-lang-faq/faq.html
  89.  
  90. --------------------------------------------------------------------------
  91.  
  92. 1. What is ML?
  93.  
  94.   ML (which stands for Meta-Language) is a family of advanced programming 
  95.   languages with [usually] functional control structures, strict semantics, 
  96.   a strict polymorphic type system, and parametrized modules.  It includes 
  97.   Standard ML, Lazy ML, CAML, CAML Light, and various research languages.  
  98.   Implementations are available on many platforms, including PCs, mainframes,
  99.   most models of workstation, multi-processors and supercomputers.  ML has 
  100.   many thousands of users, is taught at many universities (and is the first
  101.   programming language taught at some).
  102.  
  103. --------------------------------------------------------------------------
  104.  
  105. 2. Where is ML discussed?
  106.  
  107. COMP.LANG.ML
  108. ------------
  109. comp.lang.ml is a moderated usenet newsgroup.  The topics for discussion
  110. include but are not limited to:
  111.  
  112.    * general ML enquiries or discussion 
  113.    * general interpretation of the definition of Standard ML 
  114.    * applications and use of ML 
  115.    * announcements of general interest (e.g. compiler releases)
  116.    * discussion of semantics including sematics of extensions based on ML
  117.    * discussion about library structure and content
  118.    * tool development
  119.    * comparison/contrast with other languages
  120.    * implementation issues, techniques and algorithms including extensions
  121.      based on ML
  122.  
  123. Requests should be sent to:
  124.  
  125.     comp-lang-ml@cs.cmu.edu
  126.  
  127. Administrative mail should be sent to:
  128.  
  129.     comp-lang-ml-request@cs.cmu.edu
  130.  
  131. Messages sent to the newsgroup are archived at CMU.  The archives can be
  132. retrieved by anonymous ftp from internet sites.  Messages are archived
  133. on a year-to-year basis.  Previous years' messages are compressed using
  134. the Unix "compress" command.  The current year's messages are not
  135. compressed.
  136.  
  137.     ftp pop.cs.cmu.edu
  138.     username: anonymous
  139.     password: <username>@<site>
  140.     binary
  141.     cd /usr/rowan/sml-archive
  142.     get sml-archive.<year>.Z
  143.     quit
  144.     zcat sml-archive.<year>.Z
  145.  
  146. (Pop's IP address is 128.2.205.205).
  147.  
  148. Individual messages can also be accessed in the directories
  149. /usr/rowan/mh-sml-archive/<year>-sml.
  150.  
  151. SML-LIST
  152. --------
  153. The SML-LIST is a mailing list that exists for people who cannot
  154. (or do not want to) read the Usenet COMP.LANG.ML newsgroup. 
  155. Messages are crossposted from COMP.LANG.ML to the SML-LIST and
  156. vice-versa.  You should ask to join the SML-LIST _only if_ you cannot
  157. (or do not want to) read the Usenet COMP.LANG.ML newsgroup.
  158.  
  159. To send a message to the SML-LIST distribution, address it to:
  160.  
  161.     sml-list@cs.cmu.edu
  162.  
  163. (sites not connected to the Internet may need additional routing.)
  164.  
  165. Administrative mail such as requests to add or remove names from the
  166. distribution list should be addressed to 
  167.  
  168.     sml-list-request@cs.cmu.edu
  169.  
  170.  
  171. CAML-LIST
  172. ---------
  173. The Caml language, a dialect of ML, is discussed on the Caml mailing
  174. list.  To send mail to the Caml mailing list, address it to:
  175.  
  176.     caml-list@inria.fr
  177.  
  178. Administrative mail should be addressed to:
  179.  
  180.     caml-list-request@inria.fr
  181.  
  182. ALT.LANG.ML
  183. -----------
  184. No longer used.
  185.  
  186. --------------------------------------------------------------------------
  187.  
  188. 3. What implementations of ML are available and where can I find them?
  189.  
  190.  
  191. Quick Summary:
  192.  
  193. System    full SML?  contact                        Platforms
  194. ------    ---------  ------------                 ------------------------------
  195. SML/NJ       yes     sml-nj@research.bell-labs.com Unix/Sparc,Mips,Vax,680x0,
  196.       SML'97       ftp.research.att.com          I386/486/Pentium,HPPA,RS/6000,
  197.                           MacOS/MacII
  198.                 ftp.cs.sunysb.edu             Linux (including binaries)
  199.            ftp-os2.nmsu.edu         OS/2  (including binaries)
  200.            ftp.informatik.uni-muenchen.de  Nextstep
  201.  
  202. sml2c       yes       dtarditi@cs.cmu.edu         32-bit Unix machines (C code)
  203.            ftp.cs.cmu.edu
  204.  
  205. Caml Light coreish caml-light@inria.fr         Unix, Mac, PC 80386,
  206.            ftp ftp.inria.fr         (bytecode)
  207.  
  208. Objective  own     caml-light@inria.fr         Unix and Windows NT/95
  209.   Caml    modules  ftp ftp.inria.fr              (bytecode)
  210.                                                  Alpha, Sparc, x86, Mips,
  211.                                                  HPPA, Power (native code)
  212.  
  213. Bigloo    coreish  Manuel.Serrano@inria.fr.      Unix (compiles caml-light 
  214.                    ftp ftp.inria.fr                    to native code)
  215.  
  216. Camlot    coreish  Regis.Cridlig@ens.fr          Any 32-bit (compiles
  217.                    ftp ftp.inria.fr                    caml-light to C)
  218.  
  219. Moscow ML  core+   sestoft@dina.kvl.dk         PC 80386, Mac, Unix 
  220.        SML'97  ftp ftp.dina.kvl.dk           (bytecode)
  221.  
  222. Kit       yes       ftp ftp.diku.dk         (Requires another SML compiler
  223.            ftp ftp.dcs.ed.ac.uk         to build binaries)
  224.  
  225. Edinburgh  core       ftp.dcs.ed.ac.uk             32-bit machines (bytecode)
  226.            ftp.informatik.uni-muenchen.de  PC 80386SX+, Amiga
  227.  
  228. MicroML    core    Olof.Johansson@cs.umu.se      PC 8086+ (bytecode)
  229.            ftp ftp.cs.umu.se
  230.  
  231. Poly/ML       yes       ahl@ahl.co.uk                SPARC/SUNOS, SPARC/Solaris
  232.                                                  RS6000/AIX
  233.  
  234. PoplogML   yes     isl@isl.co.uk                 Sun/Solaris, Sun/SunOS, 
  235.                                                  SG/IRIX, PC/Linux, HP/HP-UX, 
  236.                                                  Alpha/OSF, Alpha/VMS, VAX/VMS
  237.  
  238. MLWorks    yes     web@harlequin.com             SunOS, Solaris, Irix, 
  239.            SML'97                                Windows NT/95.
  240.                    http://www.harlequin.com/mlworks
  241.  
  242. Details:
  243.  
  244. Standard ML of New Jersey
  245. ------------------------
  246. Standard ML of New Jersey was developed jointly at AT&T Bell
  247. Laboratories and Princeton University.  It is currently being worked
  248. on by researchers at AT&T Labs Research, Lucent Bell Labs, Princeton
  249. University, and Yale University.  The SML/NJ distribution includes
  250. CM (a separate compilation manager), ML-Yacc, ML-Lex, ML-Burg, the
  251. SML/NJ Library, Concurrent ML, and eXene (a multithreaded X-windows
  252. toolkit).
  253.  
  254. Version 93 of SML/NJ (released in February 1993) works on the Motorola
  255. 68k, SPARC, and MIPS (both big and little endian), I386/486/Pentium,
  256. HPPA(HP9000/700), and RS/6000 architectures under various versions of
  257. the Unix operating system (SunOS, Ultrix, Mach, Irix 4.0.x, Riscos, HPUX, AIX,
  258. AUX, etc.), and on the Macintosh OS (Mac II, System 7.x, min 12MB ram or
  259. any system of greater or equal power, which includes most Macs produced
  260. after about 1987).
  261.  
  262. The SML/NJ team is currently working towards a release of version 110,
  263. which will be fuly SML'97 compliant.  The latest ``working'' version
  264. can be found at:
  265.  
  266.     ftp://ftp.research.bell-labs.com/dist/smlnj/working/
  267.  
  268. Most working versions are quite stable, but check the README file for
  269. details.  The working versions are currently supported on the following
  270. hardware/system combinations:
  271.  
  272.     Alpha    OSF/1
  273.     Mips    Irix 4.0.x, Irix 5.x, Irix 6.x
  274.     x86        Linux, Solaris, FreeBSD, NetBSD, Windows95, WindowsNT
  275.     Sparc    SunOS, Solaris
  276.     RS/6000    AIX (also PowerPC)
  277.     HPPA    HPUX 9, HPUX 10
  278.  
  279. In addition, there are ports of the PowerPC version to MacOS and BeOS
  280. in progress.
  281.  
  282. There are a number of useful web links relating to SML/NJ.  These can all
  283. be reached from the SML/NJ home page, which is at:
  284.     http://cm.bell-labs.com/cm/cs/what/smlnj/index.html
  285.  
  286. Another important link is the documentation for the SML'97 basis, which
  287. can be found at:
  288.     http://cm.bell-labs.com/cm/cs/what/smlnj/basis/index.html
  289.     http://www.dina.kvl.dk/~sestoft/sml/sml-std-basis.html
  290.  
  291. SML2C
  292. -----
  293. sml2c is a Standard ML to C compiler.  It is based on an old
  294. version of SML/NJ from 1992 and shares its front-end and most of the
  295. runtime system. sml2c is a batch compiler and compiles only module-level
  296. declarations.  It does not support SML/NJ style debugging and profiling.
  297.  
  298. sml2c is easily portable and has been ported to IBM RT, 
  299. Decstation 3100, Decstation 5000, Omron Luna 88k, sun-3, sun-4 and a 
  300. 486-based machine (running Mach).  The generated code is highly portable 
  301. and makes very few assumptions about the target machine or the C compilers 
  302. available on the target machine. The runtime system, which it shares with 
  303. the SML/NJ has several machine and operating system dependencies.  sml2c 
  304. has eliminated some of these dependencies by using portable schemes for 
  305. garbage collection and for freezing and restarting programs.
  306.  
  307. sml2c is available by anonymous ftp from ftp.cs.cmu.edu
  308. (128.2.206.173). Log in as anonymous, send username@node as password.
  309. The distribution can be found in /afs/cs/project/mess/research/sml2c/ftp.
  310. The local ftp software will allow you to change directory only
  311. to /afs/cs/project/mess/research/sml2c/ftp.  The README file in this
  312. directory describes the files in the distribution.
  313. The size of the uncompressed distribution is about 12 Meg.
  314.  
  315.  
  316. CAML LIGHT
  317. ----------
  318. Caml Light is a portable, bytecode interpreter for CAML, a dialect of ML.
  319. Some features of Caml Light include separate compilation, streams and
  320. stream parsers, ability to link to C code, and a fairly rich library.
  321. The implementation has low memory requirements, compiles quickly and
  322. generates compact executables. 
  323.  
  324. The Caml Light system comprises a batch compiler, a toplevel-based
  325. interactive compiler, tools for building libraries and toplevel
  326. systems, a replay debugger, and a hypertext-based module browser.
  327.  
  328. Caml Light runs on most modern Unix machines, including Sun
  329. Sparcstations (under SunOS 4.1 and Solaris 2), Decstations 3000
  330. (Alpha) and 5000 (Mips), and PCs under Linux, but many more machines
  331. have been reported to work. It is also available for the Macintosh (as
  332. a "fat binary" that runs native on PowerMacs) and the PC under
  333. MS Windows and MSDOS.
  334.  
  335. The current version is 0.73, released in January 1997. It is available by
  336. anonymous ftp from:
  337.  
  338.     host:           ftp.inria.fr    (192.93.2.54)
  339.     directory:      lang/caml-light
  340.  
  341. Summary of the files:
  342.  
  343.      README.cl            More detailed summary
  344.      cl73unix.tar.gz      Unix version (source code)
  345.      cl73macbin.sea.bin   Binaries for the Macintosh version
  346.      cl73win.exe          Binaries for MS Windows and MSDOS
  347.      cl73refman.*         Reference manual, in various formats
  348.      cl73tutorial.*       Tutorial, in various formats
  349.      cl73macdoc.sea.bin   On-line documentation for the Macintosh version
  350.      cl73macsrc.sea.bin   Source code for the Macintosh version
  351.  
  352. More information on Caml Light is available on the Web at:
  353.   http://pauillac.inria.fr/caml
  354.  
  355. The implementors can be contacted at caml-light@inria.fr.  General
  356. questions and comments of interest to the Caml community should be
  357. sent to caml-list@inria.fr, the Caml mailing list. (see question 2
  358. above for details.)
  359.  
  360.  
  361. OBJECTIVE CAML
  362. --------------
  363. Objective Caml (formerly known as Caml Special Light) is a complete
  364. reimplementation of Caml Light that adds a complete class-based
  365. object-oriented system and a powerful module system in the style of
  366. Standard ML.
  367.  
  368. The object system is statically type-checked (no "message not
  369. understood" run-time errors) and performs ML-style type reconstruction
  370. (no type declarations for function parameters). This is arguably the
  371. first publically available object-oriented language featuring ML-style
  372. type reconstruction.
  373.  
  374. The module system is based on the notion of manifest types /
  375. translucent sums; it supports Modula-style separate compilation, and
  376. fully transparent higher-order functors.
  377.  
  378. Objective Caml comprises two compilers: a bytecode compiler in the
  379. style of Caml Light (but up to twice as fast), and a high-performance
  380. native code compiler for the following platforms:
  381.  
  382.     Alpha processors: DecStation 3000 under OSF1 (a.k.a. Digital Unix)
  383.     Sparc processors: Sun Sparcstation under SunOS 4.1, Solaris 2, NetBSD
  384.     Intel 486 and Pentium processors: PCs under Linux, NextStep,
  385.         FreeBSD, Windows 95 and Windows NT
  386.     Mips processors: DecStation 3100 and 5000 under Ultrix 4
  387.     HP PA-RISC processors: HP 9000/700 under NextStep (no HPUX yet)
  388.     PowerPC processors: IBM RS6000 and PowerPC workstations under AIX 3.2
  389.  
  390. The native-code compiler delivers excellent performance (better than
  391. Standard ML of New Jersey 1.08 on our tests), while retaining the
  392. moderate memory requirements of the bytecode compiler.
  393.  
  394. The source distribution (for Unix machines only) is available by
  395. anonymous FTP on ftp.inria.fr, directory lang/caml-light.
  396.  
  397. More information on Objective Caml is available on the World Wide
  398. Web, at:  http://pauillac.inria.fr/ocaml/
  399.  
  400. Bug reports and technical questions should be directed to
  401. caml-light@inria.fr. For general questions and comments, use the Caml
  402. mailing list caml-list@inria.fr (to subscribe:
  403. caml-list-request@inria.fr).
  404.  
  405.  
  406. BIGLOO
  407. ------
  408. Bigloo is an optimizing Scheme-to-C and Caml-to-C compiler that
  409. produces native machine code from Caml sources. Compatibility with the
  410. bytecoded implementation of Caml Light is almost perfect. Performance
  411. of generated code is on a par with that of New Jersey ML. Bigloo is
  412. also one of the most efficient Scheme compilers available.
  413.  
  414. Bigloo runs on the following Unix platforms: Decstations 3000 and
  415. 5000, Sparcstations, PCs under Linux, HP PA 730 and Sony News R3000.
  416.  
  417. Bigloo is being developed by Manuel Serrano (Manuel.Serrano@inria.fr).
  418.  
  419. Available from:
  420.   ftp://ftp.inria.fr/lang/caml-light/bcl*.tar.gz.
  421.  
  422. CAMLOT
  423. -----
  424. Camlot is the stand alone Caml Light to C compiler. It then uses a standard C
  425. compiler to produce an executable machine code file. The compiler itself is
  426. mostly written in Caml Light and the runtime system is written in standard C,
  427. hence Camlot is easy to port to almost any 32-bit platform. The performance 
  428. of the resulting code is quite good, often ten times faster than the bytecode
  429. original implementation of Caml Light.
  430.  
  431. The distribution has been tested on the following platforms:
  432.  
  433.   Sun Sparcstation
  434.   DecStation 3100
  435.   HP 9000/710
  436.   i386/486 Linux
  437.  
  438. The distribution is avaiable at:
  439.   ftp://ftp.inria.fr/lang/caml-light/camlot0.64a.tar.gz
  440.  
  441. MOSCOW ML
  442. ---------
  443. Moscow ML is a Core Standard ML implementation, based on the Caml
  444. Light system.  It implements the Core language of Standard ML and
  445. separate compilation via a limited version of the SML Modules
  446. language, with signatures and non-nested structures but no functors.
  447.  
  448. Version 1.42 of Moscow ML
  449.  
  450.     * is somewhat faster
  451.     * provides support for writing CGI scripts
  452.     * automatically includes all required libraries when linking
  453.  
  454. Moscow ML implements much of the SML Basis Library, follows the 1997
  455. revision of Standard ML, and can produce compact stand-alone
  456. executables (a la Caml Light).
  457.  
  458. Moscow ML works under DOS, many Unixes (including Linux, MkLinux,
  459. Solaris, IRIX, HP/UX), and MacOS (68k and PPC).
  460.  
  461. It was written by Sergei Romanenko (roman@keldysh.ru) at the Keldysh
  462. Institute of Applied Mathematics, Moscow, Russia, and Peter Sestoft
  463. (sestoft@dina.kvl.dk) at the Royal Veterinary and Agricultural
  464. University, Denmark.  Thanks to Xavier Leroy and Damien Doligez (Caml
  465. Light), Doug Currie (MacOS version, new bytecode) and Jonas Barklund
  466. (CGI support).
  467.  
  468.     * The Moscow ML homepage
  469.         http://www.dina.kvl.dk/~sestoft/mosml.html
  470.     * Moscow ML library units documentation
  471.         http://www.dina.kvl.dk/~sestoft/mosmllib/index.html
  472.     * The DOS executables (and documentation) are in
  473.         ftp://ftp.dina.kvl.dk/pub/mosml/mos14bin.zip
  474.     * The Linux executables (and documentation) are in
  475.         ftp://ftp.dina.kvl.dk/pub/mosml/linux-mos14bin.tar.gz
  476.     * The Macintosh/MacOS (68k and PPC) executables are in
  477.         ftp://ftp.dina.kvl.dk/pub/mosml/mac-mos14bin.sea.hqx
  478.     * The DOS source files are in
  479.         ftp://ftp.dina.kvl.dk/pub/mosml/mos14src.zip
  480.     * The Unix source files are in
  481.         ftp://ftp.dina.kvl.dk/pub/mosml/mos14src.tar.gz
  482.     * The MacOS modified source files (relative to Unix) are in
  483.         ftp://ftp.dina.kvl.dk/pub/mosml/mac-mos14src.sea.hqx
  484.  
  485. These files are mirrored at
  486.     ftp://ftp.csd.uu.se/pub/mirror/mosml
  487.         ftp://ftp.dcs.ed.ac.uk/pub/ml/versions/by_origin/Moscow
  488.  
  489.  
  490. The ML Kit
  491. ----------
  492. Two versions of the ML Kit are available from DIKU: 
  493. (a) The ML Kit (Version 1, 1993)
  494. (b) The ML Kit with Regions (1997)
  495.  
  496. Both are described in more detail at the DIKU ML Kit web site:
  497.  
  498.      http://www.diku.dk/research-groups/topps/activities/mlkit.html
  499.  
  500. ML Kit Version 1
  501. ----------------
  502. Version 1 of the ML Kit is a straight translation of the 1990
  503. Definition of Standard ML into a collection of Standard ML modules.
  504. For example, every inference rule in the Definition is translated into
  505. a small piece of Standard ML code which implements it. The translation
  506. has been done with as little originality as possible - even variable
  507. conventions from the Definition are carried straight over to the Kit.
  508.  
  509. If you are primarily interested in executing Standard ML programs
  510. efficiently, the ML Kit is not the system for you! (It uses a lot of
  511. space and is very slow.) The Kit is intended as a tool box for those
  512. people in the programming language community who may want a
  513. self-contained parser or type checker for full Standard ML but do not
  514. want to understand the clever bits of a high-performance compiler. We
  515. have tried to write simple code and module interfaces; we have not
  516. paid any attention to efficiency.
  517.  
  518. The documentation is around 100 pages long and is provided with the
  519. Kit. It explains how to build, run, read and modify the Kit. It also
  520. describes how typing of flexible records and overloading are handled
  521. in the Kit.
  522.  
  523. The ML Kit is written by Nick Rothwell, David N. Turner, Mads Tofte
  524. and Lars Birkedal at Edinburgh and Copenhagen Universities.
  525.           
  526. The ML Kit with Regions (aka Version 2)
  527. ---------------------------------------
  528. Version 2 builds on Version 1, but is expanded into a real compiler.
  529. Inefficient data structures and algorithms in the system have been
  530. replaced by more efficient ones. The ML Kit with Regions is intended for
  531. the development of stand-alone applications which must be reliable,
  532. fast and space efficient.
  533.  
  534. The main feature of the ML Kit with Regions is that it uses a stack of
  535. regions for memory management rather than traditional garbage
  536. collection techniques; this has several important consequences:
  537.  
  538.    Compile-Time Garbage Collection: 
  539.      All memory allocation directives (both allocation and
  540.      de-allocation) are inferred by the compiler, which uses a number
  541.      of novel program analyses concerning lifetimes and storage
  542.      layout. There is no pointer-tracing garbage collection at
  543.      runtime;
  544.    Memory Safety: 
  545.      Safety of de-allocation of memory is ensured by the compiler; 
  546.    Static detection of space leaks; 
  547.    Region Resetting: 
  548.      It is possible to give explicit directives about resetting of
  549.      regions in cases where the static analyses are too conservative;
  550.      such directives are checked by the compiler;
  551.    Region Profiling: 
  552.      The system includes a graphical region profiler, which helps
  553.      gain detailed control over memory use; 
  554.    Soft Real-Time: 
  555.      Programmers who are interested in real-time programming can
  556.      exploit the absence of garbage collection: there are no
  557.      interruptions of unbounded duration at runtime;
  558.    Interface to the C language: 
  559.      ML Kit applications can call C functions using standard C calling
  560.      conventions; the region scheme can even take care of allocating
  561.      and de-allocating regions used by C functions thus invoked.
  562.  
  563. The overall goal with developing the ML Kit with Regions has been to
  564. combine the advantages of a high-level, type-safe language (Standard
  565. ML, 1997 Definition), with the advantages of low-level languages,
  566. namely detailed control over space and time. Indeed, it turns out that
  567. the regularity provided by the ML type system makes is possible to
  568. infer much more useful information about ML programs than one can
  569. reasonably hope for in languages with more liberal type
  570. systems. Naturally, the hope is that this technology will promote the
  571. use of Standard ML in situations where safety and detailed control of
  572. machine resources are important, as indeed is often the case.
  573.  
  574. Since we are using Standard ML as our source language, one can use the
  575. ML Kit in conjunction with other Standard ML systems; for example, one
  576. can port programs that previously ran on a garbage collection based
  577. Standard ML system to run on the Kit; or one may use the Kit simply to
  578. gain insight into how a program intended for another system uses
  579. memory; or one can develop Standard ML programs directly in the Kit.
  580. We have tried all three with good results.
  581.  
  582. A comprehensive technical report "Programming with Regions in the ML Kit"
  583. is available from the above web site.
  584.  
  585. The ML Kit with Regions was developed by Mads Tofte, Lars Birkedal,
  586. Martin Elsman, Niels Hallenberg, Tommy H{\o}jfeld Olesen (all at DIKU) and
  587. Peter Sestoft and Peter Berthelsen (both at KVL).
  588.  
  589.  
  590. Edinburgh ML 4.0
  591. ----------------
  592. Edinburgh ML 4.0 is an implementation of the core language (without
  593. the module system).  It uses a bytecode interpreter, which is written in C
  594. and runs on any machine with 32 bit words, a continuous address space and
  595. a correct C compiler.  Ports to various 16 bit machines are underway.  The
  596. bytecode interpreter can be compiled with switches to avoid the buggy parts
  597. of the C compilers that we've used it with (as far as I know none of them
  598. worked correctly).  
  599.  
  600. Edinburgh ML 4.0 is available from the LFCS.  See the WWW link:
  601.      http://www.dcs.ed.ac.uk/lfcsinfo/index.html
  602.  
  603. A port to PCs with 386SX processors or better is available by FTP from
  604. ftp.informatik.uni-muenchen.de, in the file
  605. pub/comp/programming/languages/sml/ibmpc/edml3864.exe.
  606. Contact Joern Erbguth (erbguth@juris-sb.de) for more information.
  607.  
  608. Also, there are apparently 8086 and 80386-specific ports of Edinburgh
  609. ML 3.5 in the same location.  The 386 port is in the file
  610. edml3863.exe.
  611.  
  612. There are other Edinburgh (PC-)ports of ML including an OS/2 2.x, an
  613. OS/2 PM and a Dos version. A new version has just been made ready and
  614. is available at forwiss.uni-passau.de (132.231.1.10) in
  615. pub/ibmpc/os2/lang/sml/sml04.zip. It is about 360K long (short?).
  616.  
  617.     All 3 programs have in common (all in one .zip):
  618.        - true 32 Bit applications
  619.        - easy to install, easy to use
  620.        - As far as I know they work stable
  621.          (except the DOS version working as a Windows window
  622.          [you can use it with Windows but it crashes on *exit*])
  623.        - they don't require expensive hardware 
  624.          (and they don't need a co-processor)
  625.  
  626.     To be more specific:
  627.           OS/2 PM               OS/2                DOS    
  628.     OS    >= OS/2 2.0+ServPak   >= OS/2 2.0        >= DOS 5.0
  629.     Edit  PM, GUI,              Standard            command history
  630.           integrated editor
  631.           (cut&paste)
  632.     HW    >= 386/33, 8MB        >= 386/33 4MB       >= 386sx, 2MB
  633.           lots of MB and fast
  634.           graphics ad. recommended
  635.     Help  online                online
  636.           (+ML ref. in german)
  637.  
  638. There's also an amiga port of Edinburgh ML available on all aminet ftp
  639. sites (amiga users should know which these are) in dev/lang, called
  640. "sml4.1.02.lha".  The standard version needs a 68020 or better and an
  641. FPU but there is a 68000-only version as well.
  642.  
  643. MicroML
  644. -------
  645. MicroML is an interpreter for core SML that runs on IBM PCs,
  646. from the Department of Computing Science at the Umea University in
  647. Sweden.  It implements the core language except for records.  A 80286
  648. processor or better is recommended, but it runs even on a 8086. 
  649.  
  650. MicroML is available by anonymous ftp from
  651. ftp.cs.umu.se /pub/uml022.zoo.  For more information contact Olof Johansson
  652. (olof@cs.umu.se).
  653.  
  654.  
  655. Poly/ML
  656. -------
  657. Poly/ML is a commercial product from Abstract Hardware Ltd.  (email to
  658. ahl@ahl.co.uk, or browse http://www.ahl.co.uk). The Poly/ML system has
  659. been used to implement a number of high-value tools including ICL's
  660. ProofPower, ViewLogic's ViewSchedule and AHL's own LAMBDA toolset.
  661.  
  662. Poly/ML 3.0 (Motif Edition) runs on SPARC systems under either
  663. SunOS (4.1) or Solaris (2.3 or later). It also runs on IBM RS/6000 
  664. systems under AIX. The Motif Edition of Poly/ML features native code
  665. generation, a make system, an X11/Xlib interface, and a OSF/Motif interface.
  666. Non-standard extensions include concurrent processes and an associated
  667. message-passing scheme.
  668.  
  669. The price of the Motif edition of Poly/ML is 1500 pounds for an
  670. academic site licence or 3500 pounds per machine for commercial users.
  671. Multiple and site licences are available by negotiation.
  672.  
  673. AHL are currently developing a Windows Edition of Poly/ML. This will
  674. run on standard PC hardware under the Windows 95. The release date and
  675. pricing policy for this product have not yet been finalised.
  676.  
  677.  
  678. Poplog ML
  679. ---------
  680. Standard ML is one of four languages included with the Poplog system,
  681. the others being Pop-11, Prolog and Common Lisp. It uses an
  682. incremental, native-code compiler which implements the full language
  683. described in the Definition; compilation is fast with low memory
  684. usage.  There is an integrated editor and an X interface; these are
  685. both programmable only from Pop-11 but the shared compilation
  686. environment makes it easy to link Pop-11 procedures into ML
  687. programs. This provides a general route for calling out to external
  688. libraries.
  689.  
  690. Poplog is available for various Unix systems -- Sun SPARC with Solaris
  691. or SunOS, Silicon Graphics, DEC Alpha, HP RISC and Linux -- but also for
  692. VMS, both on Alpha and VAX. It costs money, but there are substantial
  693. discounts for academic users. Sales are handled by Integral Solutions
  694. Ltd. and enquiries should be directed to them at isl@isl.co.uk.
  695.  
  696. You can get a free demonstration copy of Poplog for Linux/x86 from
  697.  
  698.     ftp://ftp.cogs.susx.ac.uk/pub/poplog/poplog15.0
  699.  
  700. This is entirely compatible with the full-price version, but is
  701. unsupported and has certain restrictions: in particular, it has a
  702. limited heap size and cannot make saved images. But it is a working
  703. system and may be of special interest to students who want SML on their
  704. PCs at home.
  705.  
  706. Adrian John Howard (adrianh@cogs.susx.ac.uk) has a WWW page for Poplog:
  707.  
  708.     http://www.cogs.susx.ac.uk/users/adrianh/poplog.html
  709.  
  710.  
  711. Harlequin MLWorks
  712. -----------------
  713.  
  714. Harlequin MLWorks is a commercial product and is a full implementation
  715. of SML encapsulated inside a modern programming environment. MLWorks
  716. supports both SML90 (TDoSML), and SML97 (revised definition).
  717.  
  718. In addition to Harlequin's compiler technology, MLWorks offers:
  719.  
  720.  - Graphical browsing and inspection
  721.  - Source level debugging and tracing
  722.  - Graphical profiling (call count, time slice and heap) and profiling of
  723.    standalone applications without source modification
  724.  - Integration with source editors
  725.  - Generational garbage collection
  726.  - A sophisticated compilation manager
  727.  - A C Foreign Function Interface
  728.  
  729. Libraries are provided supporting graphics, threads and the Standard
  730. ML Basis Library.
  731.  
  732. MLWorks is available on SunOS, Solaris, Irix, Windows NT and Windows
  733. 95. An evaluation version may be freely downloaded from Harlequin's
  734. web site:
  735.  
  736.   http://www.harlequin.com/mlworks 
  737.  
  738. --------------------------------------------------------------------------
  739.  
  740. 4. Unsupported SML/NJ Ports
  741.  
  742. This section describes various ports of SML/NJ (see section 3) 
  743. that are not directly supported by the NJ folks.  
  744.  
  745. Linux:
  746. ------
  747. (Thanks to Ralf Reetz, Peter Su, and Mark Leone)
  748.  
  749. This is a port of Standard ML of New Jersey (SML/NJ) to Linux. It is
  750. based on the work of Mark Leone (mleone@cs.cmu.edu) who did the port
  751. for i386/i486 machines. The current binary was compiled using Linux
  752. 0.99.7a.  Shared lib 4.3.3.
  753.  
  754. This port was done by Sanford Barr (sbarr@cs.sunysb.edu) based on the
  755. original port of 0.91 by Hermano Moura (moura@dcs.glasgow.ac.uk) and
  756. Andre Santos (andre@dcs.glasgow.ac.uk).
  757.  
  758. Various ftp sites seem to carry SML/NJ version 0.93 for Linux:
  759.  
  760.     tsx-11.mit.edu:/pub/linux/sources/usr.bin/
  761.            njsml.93.src.tar.z
  762.         njsml.93.linux.README
  763.         njsml.93.linux.README.NEW
  764.         njsml.93.linux.diffs.z
  765.  
  766.     ftp.cs.sunysb.edu:/pub/linux/
  767.         njsml.93.bin.z
  768.         njsml.93.mo.i386.z
  769.         njsml.93.linux.README
  770.         njsml.93.linux.diffs.z
  771.         njsml.93.src.tar.z
  772.  
  773.     ftp.dcs.glasgow.ac.uk:/pub/linux/
  774.         njsml.93.linux.diffs.z
  775.         njsml.93.src.tar.z
  776.         smlnj-0.93-linux.README
  777.  
  778. 16M of ram is suggested if you wish to do anything serious with
  779. the system.  Also, a 386-40 or better would be helpful.
  780.  
  781. KNOWN BUGS AND DEFICIENCIES:
  782. 1 Some minimal precision problems exist when a 387 emulator is
  783.   used.
  784. 2 ML functions System.Directory.listDir and System.Directory.getWD not
  785.   working at the moment.
  786. 3 There have been reported problems with the Div exceptions 
  787.   (real & int). The problems have been corrected.  See:
  788.     ftp.id.dth.dk (Internet 130.225.76.51)
  789.     file pub/sestoft/sml93-linux99pl12/sml.gz
  790.   That version also allows profiling; see the README file.
  791.  
  792. OS/2:
  793. -----
  794. Standard ML of New Jersey (version 0.93) for OS/2 has been implemented using
  795. Mark Leone's i386 code generator and the Unix emulator EMX (copyright of
  796. Eberhard Mattes). It is an (almost) complete implementation of SML/NJ 0.93.
  797. Only a few System.* functions have been left unimplemented.
  798.  
  799. Features of this 2nd release for OS/2:
  800.  * Signal handling
  801.  * Interval timers (real-time, supports CML 0.9.8)
  802.  * 'Garbage flushing', yields better performance on low-memory machines
  803.  * Reduced executable size (well, now it equals the other ports ;-)
  804.  * Exporting supported (also in the binary-only package)
  805.  * Improved MakeML & BindCore utilities
  806.  * Generally more robust
  807.  * Using EMX version 0.8h (the latest release at this moment)
  808.  
  809. Available from ftp.research.att.com (in /dist/ml/) and, in Europe, from
  810. ftp.id.dth.dk (in /pub/bertelsen/) as:
  811.    93.os2b.exe.zip  Binary-only, SML/NJ interactive compiler (executable)
  812.    93.os2b.src.zip  Sources & documentation
  813.    93.os2b.txt      Introduction
  814. See 93.os2b.txt for system requirements and details on .zip files.
  815.  
  816. Peter Bertelsen  (c917023@id.dth.dk)
  817. Department of Computer Science, Technical University of Denmark
  818.  
  819. FreeBSD:
  820. --------
  821. A patch for the standard distribution is available at:
  822.     ftp://pop.cs.cmu.edu/usr/rowan/sml-archive/freebsd/
  823.  
  824.  
  825. NEXTSTEP:
  826. ---------
  827. The CSDMteam at the University of Munich proudly presents the port of 
  828. Standard  ML of NJ, version 0.93, to NEXTSTEP for Intel processors.
  829.  
  830. The modified source can be found at ftp.informatik.uni-muenchen.de:
  831. /pub/comp/programming/languages/sml/NJ-0.93/93.src.nsfip.tar.Z (please look 
  832. at the installation instructions in the file README.NeXT.I386).
  833.  
  834. A precompiled binary of the interpreter (gzip'ed) is located at  
  835. ftp.informatik.uni-muenchen.de:/pub/comp/platforms/next/Developer/languages/ml 
  836. /sml.0.93.I.b.gz.
  837.  
  838. SVR4:
  839. -----
  840. An mplementation for SVR4.0.4 is available from Anthony Shipman 
  841. (als@tusc.com.au) that fixes the problems with listDir and getWD 
  842. and includes a full malloc implementation for runtime/malloc.c.  
  843. Contact Anthony for more info.
  844.  
  845.  
  846. --------------------------------------------------------------------------
  847.  
  848. 5. Where can I find documentation on ML?
  849.  
  850. THE DEFINITION
  851. --------------
  852. Robin Milner, Mads Tofte, Robert Harper and Dave MacQueen
  853. The Definition of Standard ML (Revised)
  854. MIT Press, 1997, xiii + 114 pp.
  855. ISBN 0-262-63181-4 (paper)
  856.  
  857. Robin Milner, Mads Tofte and Robert Harper
  858. The Definition of Standard ML
  859. MIT, 1990.
  860. ISBN: 0-262-63132-6
  861.  
  862. Robin Milner and Mads Tofte
  863. Commentary on Standard ML
  864. MIT, 1991
  865. ISBN: 0-262-63137-7
  866.  
  867. TEXTS       (date order)
  868. -----
  869. Ake Wikstrom
  870. Functional Programming Using Standard ML
  871. Prentice Hall 1987
  872. ISBN: 0-13-331661-0
  873.  
  874. Chris Reade
  875. Elements of Functional Programming
  876. Addison-Wesley 1989
  877. ISBN: 0-201-12915-9
  878.  
  879. Lawrence C Paulson
  880. ML for the Working Programmer (2nd Edition)
  881. Cambridge University Press 1996
  882. ISBN: 0-521-56543-X (paperback), 0-521-57050-6 (hardback)
  883. (Covers SML'97.  see: http://www.cl.cam.ac.uk/users/lcp/MLbook/)
  884.     
  885. Stefan Sokolowski
  886. Applicative High Order Programming: The Standard ML perspective
  887. Chapman & Hall 1991
  888. ISBN: 0-412-39240-2     0-442-30838-8 (USA)
  889.  
  890. Ryan Stansifer
  891. ML Primer
  892. Prentice Hall, 1992
  893. ISBN 0-13-561721-9
  894.  
  895. Colin Myers, Chris Clack, and Ellen Poon
  896. Programming with Standard ML
  897. Prentice Hall, 1993
  898. ISBN 0-13-722075-8 (301pp)
  899.  
  900. Jeffrey D. Ullman
  901. Elements of ML Programming
  902. Prentice-Hall, 1993 (Oct. 15)
  903. ISBN: 0-13-184854-2
  904. (See Comp.Lang.ML archives, message from Ullman dated 22 Sep 1993 for
  905.  chapter headings.)
  906.  
  907. Rachel Harrison
  908. Abstract Data Types in Standard ML
  909. John Wiley & Sons, April 1993
  910. ISBN: 0-471-938440
  911.  
  912. Richard Bosworth,
  913. A Practical Course in Functional Programming Using Standard ML,
  914. McGraw-Hill 1995,
  915. ISBN: 0-07-707625-7.
  916.  
  917. Elementary Standard ML
  918. Greg Michaelson
  919. UCL Press 1995
  920. ISBN: 1-85728-398-8 PB
  921. (see ftp://ftp.cee.hw.ac.uk/pub/funcprog/gjm.book95.ps.Z for contents
  922. and prologue).
  923.  
  924.  
  925. INFORMATION AVAILABLE BY INTERNET
  926. ---------------------------------
  927.  
  928. The Fox project at CMU has a WWW page for information about Standard ML,
  929. which also includes the first two reports below:
  930.    http://foxnet.cs.cmu.edu/sml.html
  931.  
  932. The following report covers all of Standard ML, and is available at:
  933. ftp://ftp.cs.cmu.edu/afs/cs/project/fox/mosaic/intro-notes.ps
  934.   Robert Harper
  935.   Introduction to Standard ML
  936.   LFCS Report Series  ECS-LFCS-86-14
  937.   Laboratory for Foundations of Computer Science
  938.   Department of Computer Science
  939.   University of Edinburgh
  940.   Nov. 1986 (revised Jan. 1989 by Nick Rothwell and Kevin Mitchell)
  941.  
  942. The following report includes an introduction to Standard ML and 3
  943. lectures on the modules system.  Available from: 
  944. http://foxnet.cs.cmu.edu/sml.html
  945.   Mads Tofte
  946.   Four Lectures on Standard ML
  947.   LFCS Report Series  ECS-LFCS-89-73
  948.   Laboratory for Foundations of Computer Science
  949.   Department of Computer Science
  950.   University of Edinburgh
  951.   March 1989
  952.  
  953. The following report introduces Extended ML, a language for writing
  954. (non-executable) specifications of Standard ML programs and for
  955. formally developing Standard ML programs from such specifications.
  956. The report is available at:  http://www.dcs.ed.ac.uk/%7Edts/eml/bcs.ps
  957.   Don Sannella
  958.   Formal program development in Extended ML for the working programmer.
  959.   LFCS Report Series  ECS-LFCS-89-102
  960.   Laboratory for Foundations of Computer Science
  961.   Department of Computer Science
  962.   University of Edinburgh
  963.   December 1989
  964.  
  965. Le projet Cristal at INRIA Rocquencourt has set up a WWW server for
  966. information regarding its activities, especially the Caml and Caml
  967. Light compilers. The server also offers on-line access to
  968. documentation, publications and to a database of BibTex references in
  969. CS.  Welcome to:
  970.    http://pauillac.inria.fr/
  971. Please report problems and suggestions to Xavier.Leroy@inria.fr.
  972.  
  973. Richard Botting has taken Larry Paulson's SML Syntax and
  974. translated it into a form that can be read by mosaic, netscape,
  975. lynx and other WWW browsers.  The URL is:
  976.   http://www.csci.csusb.edu/dick/samples/ml.syntax.html
  977.  
  978. Andrew Cumming has made availible "A Gentle Introduction to ML".  It
  979. is aimed at students who are reasonably computer literate but who are
  980. new to functional programming.  It consists largely of questions and
  981. diversions broken up into roughly one-hour tutorials, most of the
  982. questions have hints which the student can follow up if required.  The
  983. material is intended to be used alongside ML - sections of code may be
  984. copied from the browser window into an ML session.  The URL is
  985.    http://www.dcs.napier.ac.uk/course-notes/sml/manual.html
  986.  
  987. There are some WWW pages based on an info-tree at MIT with a variety
  988. of useful information on ML.  The URL is:
  989.    http://www.ai.mit.edu/!info/sml/!!first
  990.  
  991. There is an interesting collection of news articles at:
  992.    http://www.cs.jcu.edu.au/ftp/web/FP/ml.html
  993.  
  994. --------------------------------------------------------------------------
  995.  
  996. 6. Where can I find library code?
  997.  
  998. a. The Standard ML ('97) Basis Library
  999.  
  1000.  In order to enhance the usefulness of SML as a general-purpose
  1001.  programming language, a group of SML implementers, including
  1002.  representatives of Harlequin's ML Works, Moscow ML and SML/NJ, have
  1003.  put together a proposal for an SML Basis Library, containing a
  1004.  collection of modules to serve as a basic toolkit for the SML
  1005.  programmer. The current draft is available on the web at
  1006.     http://cm.bell-labs.com/cm/cs/what/smlnj/basis/index.html
  1007.     http://www.dina.kvl.dk/~sestoft/sml/sml-std-basis.html
  1008.  
  1009. b. The Edinburgh SML Library
  1010.  
  1011.  The Edinburgh SML Library provides a consistent set of functions on the
  1012.  built-in types of the language and on vectors and arrays, and a few extras.
  1013.  It includes a "make" system and a consistent set of parsing and unparsing
  1014.  functions.  The library consists of a set of signatures with sample portable
  1015.  implementations, full documentation, and implementations for Poly/ML,
  1016.  Poplog ML and SML/NJ that use some of the non-standard primitives
  1017.  available in those systems.  It is distributed with Poly/ML, Poplog ML and
  1018.  Standard ML of New Jersey.  It is also available from the LFCS.
  1019.  
  1020.  The library documentation is available as a technical report from the LFCS
  1021.  (reports@dcs.ed.ac.uk) and costs 5 pounds or 10 US dollars.  The
  1022.  LaTeX source of the report is included with the library.
  1023.  
  1024.  Dave Berry
  1025.  The Edinburgh SML Library
  1026.  LFCS Report Series  ECS-LFCS-91-148
  1027.  Laboratory for Foundations of Computer Science
  1028.  Department of Computer Science
  1029.  University of Edinburgh
  1030.  April 1991
  1031.  
  1032. c. The SML/NJ Library
  1033.  
  1034.  The SML/NJ Library is distributed with the SML of New Jersey compiler.
  1035.  It provides a variety of utilities such as 2-dimensional arrays, sorting,
  1036.  sets, dictionaries, hash tables, formatted output, Unix path name
  1037.  manipulation, etc.  The library compiles under SML/NJ but should
  1038.  be mostly portable to other implementations.
  1039.  
  1040.  
  1041. d. SML_TK
  1042.  
  1043.  sml_tk is a Standard ML package providing a portable, typed and
  1044.  abstract interface to the user interface description and command
  1045.  language Tcl/Tk. It combines the advantages of the Tk toolkit with
  1046.  the advantages of Standard ML (bypassing the shortcomings of Tcl),
  1047.  allowing the implementation of graphical user interfaces in a
  1048.  structured and reusable way, supported by the powerful module system
  1049.  of Standard ML.
  1050.  
  1051.  For more information, and to obtain sml_tk, please point your web
  1052.  browser to the sml_tk homepage at
  1053.     http://www.informatik.uni-bremen.de/~cxl/sml_tk
  1054.  or contact us at smltk@informatik.uni-bremen.de.
  1055.  
  1056.  
  1057. e. Caml-light libraries 
  1058.    (Included in the Caml Light distribution unless otherwise noted)
  1059.    (Most of these libraries are also available for Objective Caml)
  1060.  
  1061.  CAML-TK
  1062.  TK is a GUI library for the TCL language. Normally, TK is controlled
  1063.  from TCL. The Caml-TK interface provides a Caml Light library to control TK
  1064.  from Caml Light programs. Thus, TK can be used to program graphical
  1065.  user-interfaces in Caml Light without knowledge of the TCL language.
  1066.  
  1067.  LIBGRAPH 
  1068.  The "libgraph" library implements basic graphics primitives (line
  1069.  and text drawing, bitmaps, basic event processing) for the Caml Light system.
  1070.  It is portable across all platforms that run Caml Light: X-Windows,
  1071.  Macintosh, MSDOS.
  1072.  
  1073.  CAMLWIN
  1074.  Camlwin is a GUI library for Caml Light that provide all the classical
  1075.  graphic objects: buttons, string and text editors, list... and a high
  1076.  level object like windowed file selector. It is based on an extension
  1077.  of the "libgraph" library and therefore highly portable. Its main
  1078.  interest is its ability to compile the same code under many systems.
  1079.  At present time, it works under DOS, Windows, and X11 with unix.
  1080.  Camlwin is distributed at:
  1081.    ftp.inria.fr:lang/caml-light/Usercontribs/camlwin
  1082.  The reference manual is also available on the WWW at:
  1083.    http://liasc.enst-bretagne.fr/~saunier
  1084.  
  1085.  LIBNUM 
  1086.  The "libnum" library implements exact-precision rational arithmetic
  1087.  for Caml Light. It is built upon a state-of-the-art
  1088.  arbitrary-precision integer arithmetic package, and therefore
  1089.  achieves very good performance (it's much faster than Maple, for
  1090.  instance).
  1091.  
  1092.  LIBUNIX 
  1093.  The "libunix" library makes many Unix system calls and system-related
  1094.  library functions available to Caml Light programs. It provides Caml
  1095.  programs with full access to Unix capabilities, especially network
  1096.  sockets.
  1097.  
  1098.  LIBSTR
  1099.  The "libstr" library for Caml Light provides high-level string
  1100.  processing functions, including regular expression matching and
  1101.  substitution. It is intended to support the kind of text processing
  1102.  that is usually performed with "sed" or "perl".
  1103.  
  1104. f. The Qwertz Toolbox
  1105.  
  1106.  The qwertz toolbox, a library of Standard ML modules with an emphasis
  1107.  on symbolic Artificial Intelligence programming, may now be obtained
  1108.  by anonymous ftp at:
  1109.     ftp.gmd.de:gmd/ai-research/Software/qwertz.tar.gz
  1110.  
  1111.  The qwertz.tar.gz file is a tar archive compressed using the the GNU
  1112.  gzip program.  Use the gunzip program to decompress it.  The
  1113.  README file explains how the install the library.  
  1114.  
  1115.  The toolbox includes: symbols and symbolic expressions, tables
  1116.  including association lists, sets, queues and priority queues,
  1117.  streams, heuristic search including A* and iterative deepening,
  1118.  and an ATMS reason maintenance system.
  1119.  
  1120.  
  1121. --------------------------------------------------------------------------
  1122.  
  1123. 7. Theorem Provers and ML
  1124.  
  1125. (Collected by Paul Black, pblack@cs.berekeley.edu.  Thanks Paul!)
  1126.  
  1127. - LCF (Edinburgh LCF and Cambridge LCF)
  1128.     * originally written in the Edinburgh dialect of ML from which SML 
  1129.       developed.
  1130.  
  1131.    "Logic and Computation: Interactive Proof with Cambridge LCF"
  1132.     also by Lawrence C. Paulson.  (Describes a Standard ML [core language
  1133.     only] version of LCF.)  The port was done by M. Hedlund, then at
  1134.     Rutherford Appleton Labs, UK.  It is available by anon. ftp from
  1135.     ftp://ftp.cl.cam.ac.uk/ml/lcf.tar.gz.
  1136.  
  1137. - Lego (LFCS, Edinburgh Univ., SML)
  1138.     * originally developed in CAML
  1139.     * latest version (5) now runs under SML/NJ 
  1140.     * only higher-order resolution
  1141.     * available via anon. ftp from ftp.dcs.ed.ac.uk:/pub/lego
  1142.  
  1143. - HOL90 
  1144.    Authors = Konrad Slind, Elsa Gunter
  1145.    kxs@cl.cam.ac.uk, elsa@research.att.com
  1146.    http://www.cl.cam.ac.uk/Research/HVG/HOL/
  1147.  
  1148.    hol90 is a free implementation in SML/NJ of Mike Gordon's HOL logic (a
  1149.    polymorphic version of Church's Simple Type Theory). The system provides
  1150.    a lot of automated support including:
  1151.    
  1152.    - a powerful rewriting package;
  1153.    - pre-installed theories for booleans, products, sums, natural
  1154.      numbers, lists, and trees;
  1155.    - definition facilities for recursive types and recursive functions
  1156.      over those types (mutual recursion is also handled);
  1157.    - extensive libraries for strings, sets, group theory, integers, the
  1158.      real numbers, wellordered sets, automatic solution of goals
  1159.      involving linear arithmetic, tautology checking, inductively
  1160.      defined predicates, Hoare logic, Chandy and Misra's UNITY theory,
  1161.      infinite state automata, and many others.
  1162.  
  1163.    The HOL community has a lively mailing list accessible at
  1164.    info-hol-request@leopard.cs.byu.edu and a yearly user's meeting that
  1165.    alternates between Europe and North America. hol90 is available by
  1166.    anonymous ftp from
  1167.  
  1168.     machine = ftp.informatik.tu-muenchen.de/local/lehrstuhl/nipkow/slind/hol90/
  1169.      or
  1170.     machine = ftp.research.att.com/dist/ml/hol90/
  1171.  
  1172.    Tim Leonard mentions that a description of the variant of ML used in
  1173.    HOL88 is online at the following url:
  1174.  
  1175.    http://lal.cs.byu.edu/lal/holdoc/Description/ML/ML.html
  1176.  
  1177. - NuPrl (from Bob Constable`s group at Cornell)
  1178.  
  1179. - Isabelle (Lawrence C. Paulson, Cambridge Univ. )
  1180.     * has rewriting, but not many decision procedures.  It does have
  1181.     things like model elimination-based decision procedures.
  1182.     * a generic automatic theorem prover i.e. you can program it to
  1183.     the logic system/proof system you want.  Already has the
  1184.     following subsystems already implemented:
  1185.         i) FOL - first order logic
  1186.         ii) HOL - higher order logic
  1187.         iii) LCF - Logic of computable functions
  1188.         iv) LK - Gentzen system LK
  1189.         v) Modal - Modal logic systems T, S4, S43
  1190.         vi) ZF - Zermelo-Fraenkel set theory
  1191.     * ftp from ftp://ftp.cl.cam.ac.uk/ml/Isabelle94.tar.gz
  1192.     * There's a WWW page:
  1193.     http://www.cl.cam.ac.uk/Research/HVG/isabelle.html
  1194.     * There's also a mailing list: isabelle-users@cl.cam.ac.uk
  1195.  
  1196.  
  1197.  
  1198. - MERILL (Brian Matthews, U. of Glasgow & Rutherford Appleton Laboratory)
  1199.     * written in standard ML
  1200.     * a general purpose order-sorted equational reasoning system
  1201.     * Allows the user to declare their own object language, allows
  1202.     AC-rewriting and AC-unification of terms and equations, has
  1203.     several completion algorithms, is built on a hierarchy of
  1204.     types known as Order-Sorting, and allows the user to try
  1205.     different termination methods.
  1206.     * available via anonymous ftp from the University of Glasgow,
  1207.     ftp address: ftp.dcs.glasgow.ac.uk (130.209.240.50)
  1208.     * Brian Matthews, brian@dcs.glasgow.ac.uk or bmm@inf.rl.ac.uk
  1209.  
  1210. - FAUST (Karlsruhe)
  1211.     * a HOL add-on written in ML.
  1212.     * ftp from goethe.ira.uka.de (129.13.18.22)
  1213.  
  1214. - Alf
  1215.     * written in SML
  1216.     * An implementation of Martin-Lofs type theory with dependent types
  1217.     * Proof editor
  1218.     * available by anonymous ftp from cs.chalmers.se
  1219.     * only higher-order resolution
  1220.  
  1221. - Coq
  1222.    * written in Objective CAML 
  1223.      (previous versions were written in CAML and Caml-Light)
  1224.    * implements the Calculus of Inductive Constructions 
  1225.      a logical framework suitable for abstract mathematical formalisation 
  1226.      and functional program manipulation.
  1227.    * available via anon. ftp from ftp.ens-lyon.fr:/pub/LIP/COQ/V6.1
  1228.      ftp.inria.fr:INRIA/Projects/coq/coq/V6.1
  1229.    * possible contact: coq@pauillac.inria.fr
  1230.      more information : http://pauillac.inria.fr/coq/systeme_coq-eng.html
  1231.    * Coq has an interface based on Centaur developed by the CROAP project 
  1232.      at INRIA Sophia-Antipolis :
  1233.     http://www.inria.fr/croap/ctcoq/ctcoq-eng.html
  1234.  
  1235. - ICLHOL/ProofPower (ICL Secure Systems)
  1236.     * a commercial system using a reimplementation of HOL in SML
  1237.     * contact ProofPower-server@win.icl.co.uk
  1238.  
  1239. - Lamdba/DIALOG (Abstract Hardware Ltd)
  1240.     * a commercial tool written in Poly/ML
  1241.     * contact ahl@ahl.co.uk
  1242.  
  1243. - Elf (Frank Pfenning, Carnegie Mellon Univ.)
  1244.    * Elf is a higher-order logic programming language based on the LF
  1245.     Logical Framework.
  1246.    * Elf is not a theorem prover per-se, but is useful for specifying
  1247.     and proving properties of programming languages, logics, and their
  1248.     implementations.  A number of examples are provided with the
  1249.     distribution.
  1250.    * The Elf implementation is written in SML/NJ and should be easily
  1251.         portable to other SML implementations.
  1252.    * Elf can be ftp'd from ftp.cs.cmu.edu (128.2.206.173)
  1253.     in the directory user/fp/
  1254.    * A home page for Elf can be found at http://www.cs.cmu.edu/~fp/elf.html
  1255.    * There is an Elf mailing list.  Contact elf-request@cs.cmu.edu to join.
  1256.    * For further information, contact Frank Pfenning (fp@cs.cmu.edu).
  1257.  
  1258. - Definitional Reasoning (Univerity of Tasmania)
  1259.    * developed with SML/NJ
  1260.    * a study of Boolean Affine Combinations (a highly formal case construct)
  1261.    * includes a rich set of term rewriting combinators
  1262.    * ftp://hilbert.maths.utas.edu.au/pub/DR.tar.gz
  1263.    * mail to piggy@acm.org for more information.
  1264.  
  1265. References
  1266.    "ML for the Working Programmer" by Lawrence C. Paulson contains a
  1267.     small first-order theorem prover.
  1268.  
  1269.     Paulson also has a good chapter on writing theorem provers in ML in
  1270.     "Handbook of logic in computer science",
  1271.     Edited by:  S. Abramsky, Dov M. Gabbay, and T.S.E. Maibaum.
  1272.     Oxford : Clarendon Press, 1992-.
  1273.     CALL#: QA76 .H2785 1992 
  1274.    
  1275. Others
  1276.     Edinburgh's Concurrency Workbench and Sussex's Process Algebra
  1277.     Mauipulator are also ML systems of note, though neither are
  1278.     interactive theorem provers.
  1279.  
  1280.  
  1281. --------------------------------------------------------------------------
  1282.  
  1283. 8. Miscellaneous
  1284.  
  1285. Where can I find out about SML'97?  
  1286.  
  1287.  Look at:
  1288.     http://cm.bell-labs.com/cm/cs/what/smlnj/sml97.html
  1289.  
  1290.  
  1291. How do I write the Y combinator in SML without using a recursive
  1292. definition (i.e. "fun" or "let rec")?
  1293.  
  1294.  datatype 'a t = T of 'a t -> 'a
  1295.  
  1296.  val y = fn f => (fn (T x) => (f (fn a => x (T x) a)))
  1297.                    (T (fn (T x) => (f (fn a => x (T x) a))))
  1298.  
  1299.  
  1300. Where can I find an X-Windows interface to SML?
  1301.  
  1302.  Poly/ML, Poplog/ML, MLWorks and SML/NJ all come with X-Windows
  1303.  interfaces.  See the appropriate entries under section 3.  In
  1304.  addition, Poly/ML interfaces to the industry standard OSF/Motif
  1305.  toolkit.
  1306.  
  1307.  
  1308. How do I call a C function from SML/NJ?
  1309.  
  1310.  See the file runtime/cfuns.c for example C functions that are in
  1311.  the runtime and callable from ML.  You have to enter the function
  1312.  into a table at the end of the file along with a string.  You use
  1313.  the function System.Unsafe.CInterface to look up the function, using
  1314.  the string as the key.  Note that you'll need to convert ML values
  1315.  to C representations and back.  You'll have to rebuild the compiler
  1316.  using makeml.
  1317.  
  1318.  
  1319. Where can I find an emacs mode for SML?
  1320.  
  1321.  Version 3.2 of sml-mode is at
  1322.    ftp://set.gmd.de/pub/sks/mjm/sml-mode/
  1323.  and Version 3.3, which is stable but still at beta, is at
  1324.    http://www.scs.leeds.ac.uk/mjm/sml-mode/
  1325.  Nowadays sml-mode works well with Emacs 19 and XEmacs 19, as well as
  1326.  a number of different SML compilers.
  1327.