2015-03-28 3 views
1

До сих пор я использовал Poly/ML для нескольких небольших проектов, где все файлы исходного кода находятся в одном каталоге. Для того, чтобы построить эти проекты, все, что я должен был сделать запустить следующую команду в РЕПЛ:Использование Poly/ML для создания проектов с вложенными структурами каталогов

> PolyML.make "Main"; 

Но теперь у меня есть проект, масштаб которого делает его непрактичным поместить все файлы исходного кода в том же каталоге. Для того, чтобы построить эти проекты в РЕПЛ, мне нужно выполнить следующие команды:

> PolyML.make "foo/Foo"; 
> PolyML.make "bar/Bar"; 
> PolyML.make "qux/Qux"; 
> PolyML.make "Main"; 

, который не очень практичен, как число подсистем растет.

Есть ли способ автоматизировать процесс создания проектов с вложенными структурами каталогов в Poly/ML?


P.D .: Я имел взгляд на менеджера по составлению ОБА SML/NJ и системы ML Basis MLton в. Хотя, безусловно, мощные, они слишком сложны для моих потребностей.

ответ

4

Поместите файл с именем ml_bind.ML в каждом из подкаталогов и есть те файлы, создавать компонент для этого каталога.

PolyML.make ожидает, что имя исходного файла будет соответствовать имени компонента (структура, подпись или функтор). Поэтому, если он ищет структуру под названием «Foo», он ожидает источник для «Foo» в файле «Foo», «Foo.ML» или «Foo.sml». Если вместо этого он находит каталог под названием «Foo», он рекурсивно входит в каталог «Foo» и использует файл «ml_bind.ML» в качестве руководства для построения структуры «Foo». Как правило, "Foo/ml_bind.ML" будет выглядеть

structure Foo = FooFunctor(structure A = FooA and B = FooB); 

с файлами "Foo/FooFunctor.ML", "Foo/FooA.ML" и "Foo/FooB.ML", содержащий источник для «FooFunctor "," FooA "и" FooB "соответственно.

Вы можете найти примеры этого в коде для компилятора Poly/ML, который входит в состав дистрибутива исходного кода Poly/ML.

+0

Я почти уверен, что в какой-то момент эта информация была на веб-сайте Poly/ML, но я не мог найти ее, когда искал ее несколько дней назад. Удалено ли? – pyon

+0

Удалено, когда я очистил устаревшую документацию. Теперь он был восстановлен как http://www.polyml.org/docs/PolyMLMake.html. –

+1

И страница теперь находится по адресу http://www.polyml.org/documentation/Reference/PolyMLMake.html. – eatonphil

1

Вы могли бы иметь build.sml список файлов и use -ную всех файлов проекта:

use "bar/bar.sml"; 
use "foo/foo.sml"; 
use "main.sml"; 

Или, немного более кратким:

app use [ 
    "foo/foo.sml", 
    "bar/bar.sml", 
    "main.sml" 
] 

app Где это стандарт List.app.

Тогда можно построить только этот файл:

$ polyc -o main main.sml 
$ # or 
$ poly 
> PolyML.make "build.sml" 
Смежные вопросы