Практические Аффинных типов

Джесси А. тов и Риккардо Pucella

В Тез. Докл. АСМ 38-й симпозиум по принципам языков программирования (POPL’11), Январь 2011

Подаяние-это язык программирования общего назначения, который поддерживает практические аффинных типов. Предложить выразительность Жирара линейную логику, сохраняя Тип системы легкий и удобный, милостыню использует выразительные виды, которые минимизируют нотации при максимальном полиморфизм между аффинной и неограниченный типов.

Ключевая особенность милостыню-это способность представить абстрактного аффинного типов через мл-стиль подписи атрибуции. В милостыню, интерфейс может наложить более жесткие ограничения на использование ресурсов, чем основные ограничения на использование ее реализации. Эта форма позволяет герметизировать систему типов, чтобы естественно и непосредственно выражать различные протоколы управления ресурсами специального назначения и типа систем.

Мы представляем два куска доказательств, подтверждающих обоснованность проектных целей. Во-первых, мы вводим реализации прототипа милостыню и обсудить наш опыт программирования на языке. Во-вторых, мы устанавливаем обоснованность базового языка. Мы также используем ядро модели, чтобы доказать принципиальное киндинг теорема.

В наличии:

Милостыню также доступен на Так вот hackage и может быть установлен с кабалом установить милостыню, хотя это может быть не последняя версия и она скрывает примеров в малоизвестном месте, как $HOME/.cabal/share/alms-version/.

Милостыню Справочник

Приступая К Работе

Милостыню требует ГГК строить. Он известен работой с помощью ghc 7.4.1, и скорее всего больше не работает с помощью ghc 6. (Если вы хотите попробовать его и не могу запустить ГГК 7, дайте мне знать, и я, возможно, смогу заставить его работать с 6.10.)

При условии, что последние ггк находится в вашем пути, чтобы строить на Unix оно должно быть достаточным для типа:

 % make

Это должно создать исполняемую милостыню в текущем каталоге,

Если это не удается, он также может быть необходимо либо установить editline пакет первой или отключить линии редактирования (см. Возможные неприятности).

На Windows, сборки с Кабалом:

 > runghc Setup.hs configure
 > runghc Setup.hs build

Это производит исполняемый в dist\build\alms\alms.

Кабал должен работать на Unix, но смешивая кабала и приводит к компоновщика ошибки, так это, наверное, лучше придерживаться одного или другого.

Что попробовать

Примеры из бумаги и еще несколько находятся в примерах/ каталог. Примеры из раздела 2 представления находятся в POPL:

 examples/ex60-popl-deposit.alms
 examples/ex61-popl-AfArray.alms
 examples/ex62-popl-AfArray-type-error.alms
 examples/ex63-popl-CapArray.alms
 examples/ex64-popl-CapLockArray.alms
 examples/ex65-popl-Fractional.alms
 examples/ex66-popl-RWLock.alms

Другие известные примеры включают две реализации типов сеансов, реализация Сазерленд-Ходжмэн повторно используемо обрезки полигонов (1974) с использованием типов сеансов, и отслеживаемых Сокетов Беркли API из наших ЭСОП 2010 документ:

 lib/libsessiontype.alms
 lib/libsessiontype2.alms
 examples/session-types-polygons.alms
 lib/libsocketcap.alms

Эхо сервера с нашего ЭСОП бумаги, который использует libsocketcap, examples/echoServer.alms. Чтобы попробовать его, слушает на порту 10000, пробег:

 % ./alms examples/echoServer.alms 10000

Для подключения к Эхо-серверу, вы можете запускать

 % ./alms examples/netcat.alms localhost 10000

из другого терминала.

Примеры каталог содержит множество примеров, многие из которых являются малыми, но продемонстрировать типа или на договорной ошибки—комментарий в верхней части каждого примера рассказывает, чего ожидать. Запустить многие примеры с:

 % make examples

Или запустить примеры в качестве регрессионных тестов (тихо):

 % make tests

Конечно, вы также можете запустить интерпретатор в интерактивном режиме:

 % ./alms

Вы можете загружать библиотеки из командной строки такой:

 % ./alms -lsocketcap

Или изнутри в repl такой:

 #- #load "libsocketcap"

Наконец, это может быть полезно знать об спросил команду в repl об идентификаторах:

 #- #i list Exn *
 type +`a list : `a = (::) of `a * `a list | ([]) -- built-in
 module Exn -- defined at lib/libbasis.alms:198:1-32
 type +`a * +`b : a ⋁ b -- built-in
 val ( * ) : int → int → int -- built-in

Бумага против Синтаксис Синтаксис ASCII и

Язык, как указано в документе является верной языка как реализовано, за исключением вопросов довольно печати:

Когда бумага говорит . . . , затем введите. . . .
∀ ∃ λ μ all ex fun mu (связующих)
α β ‘a ‘b (неограниченный Тип переменных)
\/ (квалификатор присоединиться)
± ⌽ + – = 0 + - (отклонений)
α β `a `b (аффинного типа переменных)
U ВА -a,b> (неограниченный & один-использовать стрелки)
⟨α⟩ ⊔ ⟨β⟩ -а,b> (стрелка с квалификатором выражение)

Editline Беда

Линия редактирования включена в repl по умолчанию, который зависит от editline кабала пакет. Если сделать не удается, и говорит что-то о editline, тогда есть три варианта:

  • Отключить линию редактирования:
    % make clean; make FLAGS=-editline

    или

     % cabal install --flags=-editline alms
    
  • Использовать readline вместо:
     % make clean; make FLAGS=readline
    

    или

     % cabal install --flags=readline alms
    
  • Попробуйте установить editline или readline . . .

Установка editline может быть своего рода недотрога. На моей системе

 % cabal install editline

казалось, чтобы установить его, но Кабал все равно не мог найти его при построении программы. Установка editline глобально заставили его работать:

 % sudo cabal install --global editline

(Аналогичным образом, с readline не работал пока я не установил его глобально.)

В этот момент старые версии кабала может дать установленная библиотека плохого разрешения, так что нечто подобное может помочь, в зависимости от того, где он устанавливает вещи:

 % sudo chmod -R a+rX /usr/local/lib/editline

Если кабал установка ГГК пакета происходит сбой, это может быть необходимо сначала установить библиотеки C, от которого он зависит. Источник доступен по адресуhttp://www.thrysoee.dk/editline/. На моей системе Debian, я был в состоянии установить его с:

 % sudo aptitude install libedit2 libedit-dev

Обратите внимание, что libeditline-это совершенно разные библиотеки, и установив, что не поможет.

Ссылка на оригинал статьи: http://www.ccs.neu.edu/home/tov/pubs/alms/

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>