Почему звукость типа имеет значение на языках функционального программирования

Почему звукость типа имеет значение на языках функционального программирования

8 июля 2025 г.
  1. Введение

  2. Перевод на последовательное исчисление

    2.1 Арифметические выражения

    2.2 Пусть привязки

    2.3 Определения верхнего уровня

    2.4 Алгебраические данные и типы кодов

    2.5 первоклассные функции

    2.6 Операторы управления

  3. Оценка в контексте

    3.1 Контексты оценки для развлечения

    3.2 Сосредоточение внимания на оценке в сердечнике

  4. Правила печати

    4.1 Правила печати для развлечения

    4.2 Правила печати для Core

    4.3 Тип. Звукость

  5. Понимание

    5.1 Контексты оценки являются первым классом

    5.2 Данные двойные до кодата

    5.3 LET-связы

    5.4 Трансформация случая

    5.5 Прямой и косвенный потребители

    5.6 Позвоните в запас, вызовов и eta-laws

    5.7 Линейная логика и двойственность исключений

  6. Связанная работа

  7. Заключение, заявление о доступности данных и подтверждение

A. Взаимосвязь с последовательным исчислением

B. Правила набора развлечений

C. Оперативная семантика лейбла/goto

Ссылки

4 Правила печати

В этом разделе мы представляем правила набора для развлечения в разделе 4.1 и для ядра в разделе 4.2. В разделе 4.3 мы утверждаем тип обоснованности для обоих языков и доказываем, что перевод от веселья на основной сохраняет типичность программ. Мы используем одни и те же конструкторы, деструкторы, типы и контексты для печати как для веселья, так и для ядра, которые приведены в определении 4.1. Обратите внимание, что мы различаем переменные производителя и потребителей в контекстах типирования, которые мы указываем с аннотациями PRD и CNS.

Мы специализируем правила для типов данных для пары и списка типов конкретных типов, а также правила для типов кодат для LPAIR, потока и функций 𝜎 → 𝜏. Реалистичный язык программирования будет использовать объявления типа, представленные программистом для данных TypeCheck и типов кода, вместо использования этих особых случаев. Но формализация такого общего механизма для определения данных и типов кодат делает правила печати менее читаемыми. Этот вид механизма для определения алгебраических данных и типов кодат на языках, основанных на последовательности, можно найти в [Downen et al. 2015] или [Даунен и Ариола 2020, раздел 8]. Во всех приведенных ниже правилах печати мы предполагаем, что у нас есть программная среда, которая содержит типовые объявления для всех определений, содержащихся в программе, но не явно не передают эту программу среды через каждое из правил печати.

4.1 Правила печати для развлечения

Мы не обсуждаем правила печати для развлечения в деталях, так как они в основном стандартные. Вместо этого мы предоставляем полные правила в Приложении B. Языковая веселье имеет только одну синтаксическую категорию, термины, поэтому нам нужно только одно типирование суждения γ ⊢ 𝑡: 𝜏. В этом печатном решении говорится, что в контексте γ (который содержит назначения типа как для переменных, так и для ковариации) термин 𝑡 имеет тип 𝜏. Единственные два интересных правила касаются маркировки и Goto: Goto:

В правиле, мы требуем, чтобы ковейство 𝛼 находилось в контексте с типом 𝜏, и что термин 𝑡 может быть типичным с тем же типом. Сам термин Goto (𝑡; 𝛼) может использоваться в любом типе 𝜏 ′, потому что он не возвращается к своему непосредственно окружающему контексту.

Авторы:

(1) Дэвид Биндер, Университет Тюбингена, Германия;

(2) Марко Цшенке, Университет Тюбингена, Германия;

(3) Мариус Мюллер, Университет Тюбингена, Германия;

(4) Клаус Остерманн, Университет Тюбингена, Германия.


Эта статья естьДоступно на Arxivпод CC по 4,0 лицензии.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE