From: Ken F. L. <kf...@it...> - 2001-09-19 20:35:15
|
Stephen Weeks <sw...@in...> writes: > I would be interested to hear from other groups (Moscow ML, Poly/ML, ML Kit, > TILT) about the compilation management system they use. Let me reply about what Moscow ML and (partly) ML Kit use. Moscow ML traditionally uses ordinary make and the distribution includes a simpleminded dependency analysis tool. But if you are willing to commit to GNU make it is possible to make a generic Makefile that will "just work" in most projects (it does take quite a bit of make hacking). I dislike make as much as any other sane person. But it is standard tool that many programmers know how to use. And it is easy to integrate components writen in another programming language such as C. But Moscow ML 2.00 also came with mosmlpm[1], which is a project manager that accepts the same project files (PM files) as the ML Kit (almost). PM files are quite simple, the grammar is: pm ::= "import" imports "in" body "end" | body imports ::= path.pm imports | empty body ::= path.sml body | path.sig body | "local" body "in" body "end" body | empty Where path is a unix-style path (much to Doug Currie's grief ;-), and we also allow SML-style comments. Example: import Ast.pm Lexer.pm Parser.pm in Typechecker.sml local Optimizer.sml in Compiler.sml end end I like PM because it is *simple* and it is simple to explain what the semantics of a PM file is (even with respect to side-effects!). And it is simple to implement. I think PM is a good candidate for a common exchange format. The only flows I know of is: * No way to specify compiler options for a specific file (or a whole .pm file). My suggestion is to extend the format to allow something like: | RedBlack.sml [mosml : "-orthodox", mlkit : "-inline 40 -fix-reduce"] * No way to make a big library pm file that exports other pm files (for example for the Basis Lib). Martin Elsmann is the designer behind PM and I'll let him correct any mistake I've made in the description above. Cheers, --Ken [1] Unfortunately is mosmlpm still unannounced and a bit hard to find. But those who are interested can find a quick prototype in mosml/src/mosmlpm in the Moscow ML distribution. |