Чувствительный к потоку набор текста - Flow-sensitive typing

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

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

Пример

Цейлон

См. Следующий пример в Цейлон который иллюстрирует концепцию:

// Объект? означает, что переменная name имеет тип Object или nullпустота Привет(Объект? имя) {    если (является Нить имя) {        // "name" в этом блоке теперь имеет тип String        Распечатать("Привет,` name``! ");        // и можно вызывать методы String для переменной        Распечатать("String.size - это` name.size`` ");    }    еще если (существуют имя) {        // "name" теперь имеет тип Object в этом блоке        Распечатать("Привет, объект` name``! ");    }    еще {        Распечатать("Привет, мир!");    }}          Привет(ноль);Привет(1);Привет("Джон Доу");

Какие выходы:

Привет, мир! Привет, объект 1! Привет, Джон Доу! String.size - 8

Котлин

См. Этот пример в Котлин:

весело Привет(объект: Любой) {    // Приведение типа не выполняется, если `obj` не является String    объект в качестве Нить    // Поскольку приведение типа не завершилось ошибкой, `obj` должен быть String!    вал л = объект.длина    println("'$ obj' - строка длины $ l")}          Привет("Муооо")

Преимущества

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

Это также может помочь разработчикам языков предоставить реализации, которые быстрее выполняют динамические языки, статически предсказывая тип объектов.[1]

Наконец, увеличивается безопасность типа и может предотвратить проблемы из-за нулевые указатели[как? ], помеченный МАШИНА. Hoare - изобретатель с нулевой ссылкой - как "ошибка на миллиард долларов"[2]

Реализации

Пока, созданный Дэвидом Дж. Пирсом, был первым языком, в котором в 2009 году использовалась чувствительная к потоку печать.[3][4]

Со времени этого введения его стали использовать другие языки, а именно Цейлон,[5] Котлин,[6][7] Машинопись[8] и Facebook Поток.[9]

Внешние ссылки

  1. ^ Лукас Эдер (11 декабря 2014 г.). «Неудобная правда о динамической и статической печати». blog.jooq.org. Получено 11 марта 2016.
  2. ^ Тони Хоар (2009-08-25). «Нулевые ссылки: ошибка в миллиард долларов». InfoQ.com. Я называю это своей ошибкой на миллиард долларов. Это было изобретение нулевой ссылки в 1965 году. В то время я проектировал первую всеобъемлющую систему типов для ссылок на объектно-ориентированном языке (АЛГОЛ W ). Моя цель состояла в том, чтобы гарантировать, что любое использование ссылок должно быть абсолютно безопасным, с автоматической проверкой компилятором. Но я не мог устоять перед соблазном вставить пустую ссылку просто потому, что это было так легко реализовать. Это привело к бесчисленным ошибкам, уязвимостям и системным сбоям, которые, вероятно, причинили боль и ущерб на миллиард долларов за последние сорок лет.
  3. ^ Дэвид Дж. Пирс (22 сентября 2010 г.). «О типах, чувствительных к потоку, в Whitesy». whiley.org. Получено 11 марта 2016.
  4. ^ Дэвид Дж. Пирс (8 апреля 2012 г.). "В то время как - поток ввода". whiley.org. Получено 11 марта 2016.
  5. ^ «Цейлон - Краткое введение - Типобезопасный нуль и ввод с учетом потока». ceylon-lang.org. Получено 11 марта 2016.
  6. ^ «Нулевая безопасность». kotlinlang.org. Получено 11 марта 2016.
  7. ^ «Проверка типов и приведение типов». kotlinlang.org. Получено 11 марта 2016.
  8. ^ Райан Кавано (18 ноября 2014 г.). "Краткий обзор TypeScript 1.4: типы объединения, средства защиты типов и многое другое". blogs.msdn.microsoft.com. Получено 11 марта 2016.
  9. ^ Авик Чаудхури, Бэзил Хосмер, Габриэль Леви (18 ноября 2014 г.). "Flow, новая программа проверки статического типа для JavaScript". code.facebook.com. Получено 11 марта 2016.CS1 maint: использует параметр авторов (связь)