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