~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ C157D9A83AAEC91784F0CCD5B3DAE236__1701784980 ✰
Заголовок документа оригинал.:
✰ Gradual typing - Wikipedia ✰
Заголовок документа перевод.:
✰ Постепенная типизация — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Gradual_typing ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/c1/36/c157d9a83aaec91784f0ccd5b3dae236.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/c1/36/c157d9a83aaec91784f0ccd5b3dae236__translat.html ✰
Дата и время сохранения документа:
✰ 24.06.2024 07:17:15 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 5 December 2023, at 17:03 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Постепенная типизация — Википедия Jump to content

Постепенное набор текста

Из Википедии, бесплатной энциклопедии

Постепенная типизация — это система типов , в которой некоторым переменным и выражениям могут быть присвоены типы, а правильность типизации проверяется во время компиляции (что является статической типизацией ), а некоторые выражения могут оставаться нетипизированными, а возможные ошибки типов сообщаются во время выполнения (что динамическая типизация ). Постепенная типизация позволяет разработчикам программного обеспечения выбирать подходящую парадигму типа в рамках одного языка. [1] Во многих случаях к существующему динамическому языку добавляется постепенная типизация. [2] создание производного языка, позволяющего, но не требующего использования статической типизации. В некоторых случаях язык с самого начала использует постепенную типизацию.

История [ править ]

Этот термин был придуман Джереми Сиком, который разработал поэтапную типизацию в 2006 году вместе с Валидом Таха. [1] [ нужен неосновной источник ]

Реализация [ править ]

специальный тип, называемый динамическим При постепенной типизации для представления статически неизвестных типов используется . Понятие равенства типов заменяется новым отношением, называемым согласованностью , которое связывает динамический тип со всеми остальными типами. Отношение непротиворечивости рефлексивно и симметрично, но не транзитивно. [3]

Предыдущие попытки объединить статическую и динамическую типизацию пытались сделать динамический тип одновременно верхним и нижним в иерархии подтипов. Однако, поскольку подтипирование является транзитивным, это приводит к тому, что каждый тип становится связанным с каждым другим типом, и поэтому подтипирование больше не исключает каких-либо ошибок статического типа. Добавление в систему типов второго этапа проверки достоверности не решило полностью эту проблему. [4] [5]

Постепенную типизацию можно легко интегрировать в систему типов объектно-ориентированного языка, который уже использует правило включения , позволяющее неявное преобразование вверх по отношению к подтипированию. Основная идея заключается в том, что согласованность и подтипирование — это ортогональные идеи, которые хорошо сочетаются. Чтобы добавить подтипирование в язык с постепенной типизацией, просто добавьте правило подтипирования и правило подтипирования, которое делает динамический тип подтипом самого себя, поскольку подтипирование должно быть рефлексивным. (Но не делайте верхнюю часть порядка подтипов динамической!) [6]

Примеры [ править ]

Примеры постепенно типизированных языков, производных от существующих динамически типизированных языков, включают Closure Compiler , TypeScript (оба для JavaScript [7] ), [8] Взлом (для PHP), PHP (начиная с версии 7.0) [9] ), Типизированная ракетка (для ракетки [10] [11] ), Типизированный Clojure (для Clojure ), [12] Cython ( компилятор Python ), mypy (средство проверки статического типа для Python ), [13] Pyre (альтернативная проверка статического типа для Python), [14] или cperl (типизированный Perl 5 ). ActionScript — это язык с постепенной типизацией. [15] теперь это реализация ECMAScript от Apple , хотя изначально он возник отдельно как родственный язык, оба под влиянием HyperTalk .

система для языка программирования J , Разработана [16] добавление приведения, распространения ошибок и фильтрации к обычным свойствам проверки системы типов, а также применение функций типов вне определений функций, тем самым увеличивая гибкость определений типов.

И наоборот, C# начинался как статически типизированный язык, но начиная с версии 4.0 он постепенно типизируется, что позволяет явно помечать переменные как динамические с помощью dynamic тип. [17] К постепенно типизированным языкам, не производным от динамически типизированных языков, относятся Dart , Dylan и Raku .

В Raku (ранее Perl6) с самого начала реализована постепенная типизация. Проверки типов происходят во всех местах, где значения назначаются или привязываются. «Нетипизированная» переменная или параметр вводится как Any, который будет соответствовать (почти) всем значениям. Компилятор помечает конфликты проверки типов во время компиляции, если он может определить во время компиляции, что они никогда не будут успешными.

Objective-C имеет постепенную типизацию указателей объектов относительно вызовов методов. Статическая типизация используется, когда переменная вводится как указатель на определенный класс объекта: когда для переменной выполняется вызов метода, компилятор статически проверяет, объявлен ли класс для поддержки такого метода, или генерирует предупреждение или ошибку. . Однако если переменная типа id используется, компилятор разрешит вызов любого метода.

Язык программирования JS ++ , выпущенный в 2011 году, представляет собой надмножество JavaScript (динамически типизированное) с системой постепенного типа, которая подходит для угловых случаев ECMAScript и DOM API. [18]

Ссылки [ править ]

  1. ^ Перейти обратно: а б Зик, Джереми (24 марта 2014 г.). «Что такое постепенное типирование?» .
  2. ^ Браха, Гилад (2004). «Системы сменного типа» . OOPSLA'04 Семинар по возрождению динамических языков .
  3. ^ Сик, Джереми; Таха, Валид (сентябрь 2006 г.). Постепенная типизация для функциональных языков (PDF) . Схема и функциональное программирование 2006 . Чикагский университет . стр. 81–92.
  4. ^ Татте, Сатиш (1990). «Квазистатическая типизация». Материалы 17-го симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования - POPL '90 . АКМ . стр. 367–381. дои : 10.1145/96709.96747 . ISBN  978-0897913430 . S2CID   8725290 .
  5. ^ Олиарт, Альберто (1994). Алгоритм вывода квазистатических типов (технический отчет). Бостонский университет. 1994-013.
  6. ^ Сик, Джереми; Таха, Валид (август 2007 г.). «Постепенная типизация объектов». ЭКООП 2007 – Объектно-ориентированное программирование . Конспекты лекций по информатике. Том. 4609. Спрингер . стр. 2–27. дои : 10.1007/978-3-540-73589-2_2 . ISBN  978-3-540-73588-5 .
  7. ^ Фельдтхаус, Асгер; Мёллер, Андерс (2014). «Проверка корректности интерфейсов TypeScript для библиотек JavaScript» . Материалы Международной конференции ACM 2014 года по языкам и приложениям объектно-ориентированных систем программирования . Портленд, Орегон, США: ACM Press. стр. 1–16. дои : 10.1145/2660193.2660215 . ISBN  978-1-4503-2585-1 .
  8. ^ Свами, Н.; Фурне, К.; Растоги, А.; Бхаргаван, К.; Чен, Дж.; Струб, П.Ю.; Бирман, Г. (2014). «Постепенная типизация, безопасно встроенная в JavaScript» (PDF) . Материалы 41-го симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования — POPL '14 . стр. 425–437. дои : 10.1145/2535838.2535889 . ISBN  9781450325448 .
  9. ^ «PHP: Аргументы функции - Руководство » Строгая типизация» .
  10. ^ Тобин-Хохштадт, Сэм; Феллизен, Маттиас. «Межъязыковая миграция: от скриптов к программам» . Материалы симпозиума по системам объектно-ориентированного программирования, сопутствующий том . Портленд, Орегон. Тобин-Хохштадт06 . Проверено 6 ноября 2020 г.
  11. ^ Тобин-Хохштадт, Сэм; Феллизен, Матиас. «Проектирование и реализация типизированной схемы» . Труды по основам языков программирования . Сан-Диего, Калифорния. Тобин-Хохштадт08 . Проверено 6 ноября 2020 г.
  12. ^ Чес Эмерик. «Руководство пользователя по печатному Clojure» . Гитхаб .
  13. ^ Юкка Лехтосало. «mypy — дополнительная статическая типизация для Python» .
  14. ^ «Pyre — эффективная программа проверки типов для Python 3» .
  15. ^ Асим Растоги; Авик Чаудхури; Бэзил Хосмер (январь 2012 г.). «Все тонкости постепенного вывода типов» (PDF) . Ассоциация вычислительной техники (ACM) . Проверено 23 сентября 2014 г.
  16. ^ "тип-система-j" . Гитхаб .
  17. ^ «динамический (Справочник по C#)» . Библиотека MSDN . Майкрософт . Проверено 14 января 2014 г.
  18. ^ «Система типов JS++, Приложение B: Проблемы (почему это было трудно решить?)» . Проверено 10 февраля 2020 г.

Дальнейшее чтение [ править ]

  • Зик, Джереми Г.; Витоусек, Майкл М.; Чимини, Маттео; Бойленд, Джон Тан (2015). Болл, Томас; Бодик, Растислав; Кришнамурти, Шрирам; Лернер, Бенджамин С.; Моррисетт, Грег (ред.). Уточненные критерии постепенного набора текста . Лейбниц Международные труды по информатике. Том 32. Дагштуль, Германия: Центр компьютерных наук Schloss Dagstuhl-Leibniz. стр. 274–293. дои : 10.4230/lipics.snapl.2015.274 . ISBN  9783939897804 . S2CID   15383644 .
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: C157D9A83AAEC91784F0CCD5B3DAE236__1701784980
URL1:https://en.wikipedia.org/wiki/Gradual_typing
Заголовок, (Title) документа по адресу, URL1:
Gradual typing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)