Перейти к навигации Перейти к поиску
Это сравнение возможностей систем типов и проверки типов на нескольких языках программирования .
Краткие определения
- Система номинальных типов означает, что язык решает, являются ли типы совместимыми и / или эквивалентными, на основе явных объявлений и имен.
- Система структурных типов означает, что язык решает, являются ли типы совместимыми и / или эквивалентными, на основе определения и характеристик типов.
- Проверка типа определяет, проверяются ли типы и когда. Статическая проверка означает, что об ошибках типа сообщается на основе текста программы (исходного кода). Динамическая проверка означает, что об ошибках типа сообщается на основе динамического поведения программы (во время выполнения).
Язык | Безопасность типов | Выражение типа | Совместимость типов и эквивалентность | Проверка типа |
---|---|---|---|---|
ActionScript 3.0 | сильный | неявный с необязательной явной типизацией | статический | |
Ада | сильный [TS 1] | явный | номинальный | статический |
Алдор | слабый | скрытый | статический | |
АЛГОЛ 58 | сильный | явный | статический | |
АЛГОЛ 60 | сильный | явный | статический | |
АЛГОЛ 68 | сильный | явный | структурный | статические и помеченные союзы |
APL | сильный | динамичный | ||
AutoHotkey | бессмысленный | н / д | н / д | н / д |
Ateji PX | сильный | явный | номинальный | статический |
Баш | ? | ? | ? | ? |
БАЗОВЫЙ | сильный | явный | номинальный | статический |
БЛАЖЕНСТВО | бессмысленный | н / д | н / д | н / д |
BeanShell | сильный | номинальный | динамичный | |
Бу | сильный | неявный с необязательной явной типизацией | статический с необязательной динамической типизацией | |
братан | сильный | неявный с необязательной явной типизацией | номинальный | статический |
C | слабый | явный | номинальный | статический |
C ++ ( ISO / IEC 14882 ) | слабый | явный с необязательной неявной типизацией (с использованием auto в C ++ 11) | номинальный | статический [TS 2] |
C # | слабый [TS 3] | неявный с необязательной явной типизацией | номинальный | статический [TS 4] |
Чистый | сильный | скрытый | статический | |
Clojure | сильный | неявный с необязательной явной типизацией | динамичный | |
КОБОЛ | сильный | явный | номинальный | статический |
ColdFusion (CFML) | сильный | скрытый | динамичный | |
Common Lisp | сильный | неявный с необязательной явной типизацией | структурный для неявной типизации, номинальный для явной типизации | динамическая, некоторая статическая проверка (в зависимости от реализации) |
Завиток | сильный | номинальный | ||
Cython | сильный | неявный с необязательной явной типизацией | номинальный (типы расширения) и структурный (Python) | динамический с необязательной статической типизацией |
D | слабый [TS 3] | явный | номинальный | статический |
Дилан | сильный | динамичный | ||
Эйфелева | сильный | номинальный | статический | |
Эликсир | сильный | скрытый | динамичный | |
Erlang | сильный | скрытый | динамичный | |
Эйфория | сильный | явный, неявный с объектами | номинальный | статический, динамический с объектами |
F # | сильный | скрытый | номинальный | статический |
Четвертый | бессмысленный | н / д | н / д | н / д |
Фортран | сильный | явный [TS 5] | номинальный | статический |
Гамбас | сильный | явный | номинальный | |
GLBasic | сильный | явный. Неявные объявления, доступные в параметрах проекта | номинальный | статический |
Вперед [1] | сильный | неявный с необязательной явной типизацией | структурный | статический |
Госу | сильный | частично неявный (вывод локального типа) | номинальная (подклассификация) и конструктивная | статический |
Groovy | сильный | неявный с необязательной явной типизацией | динамический с необязательной статической типизацией | |
Гавань | сильный | неявный с необязательной явной типизацией | динамичный | |
Haskell | сильный | неявный с необязательной явной типизацией | номинальный [2] [3] | статический |
Haxe | сильный | неявный с необязательной явной типизацией | номинальная (подклассификация) и конструктивная | статический с необязательной динамической типизацией |
Ио | сильный | скрытый | динамичный | |
ISLISP | сильный | динамичный | ||
J | сильный | динамичный | ||
Ява | сильный [4] | явный | номинальный | статический |
JavaScript | слабый | скрытый | н / д | динамичный |
Юля | сильный | неявный с необязательной явной типизацией [5] | структурный для неявной типизации, номинальный для явной типизации | динамичный |
Радость | сильный | динамичный | ||
Котлин | сильный | частично неявный (вывод локального типа) | номинальный | статический |
LabVIEW | сильный | |||
Lua | сильный | скрытый | динамичный | |
Клен | сильный | динамичный | ||
Mathematica | сильный | динамичный | ||
MATLAB M-код | сильный | динамичный | ||
Модула-2 | слабый [TS 3] | явный | номинальный | статический |
Модула-3 | слабый [TS 3] | явный | структурный | статический |
МАМПЫ (М) | бессмысленный | н / д | н / д | н / д |
Оберон | сильный | явный | номинальный | статические и частично динамические [TS 6] |
Цель-C | сильный | явный | номинальный | динамический с необязательной статической типизацией [6] |
OCaml | сильный | неявный с необязательной явной типизацией | номинальный для записей, [7] структурный для объектов [3] [8] | статический |
Object Pascal | сильный | явный | номинальный | статический |
Опа | сильный | неявный с необязательной явной типизацией | структурный | статический |
Кислород | слабый | скрытый | статический | |
Оз-Моцарт | сильный | скрытый | структурный | динамичный |
Паскаль | слабый [TS 3] | явный | номинальный | статический |
Perl 5 | скрытый | динамичный | ||
PHP | неявный с необязательной явной типизацией | номинальный | динамичный | |
Плюс | сильный | явный | структурный | статический, динамический (необязательно) |
Пролог | динамичный | |||
Чистый | динамичный | |||
Python | сильный | неявный (с необязательной явной типизацией с 3.5) | н / д | динамичный |
Раку | частично неявный [TS 7] | динамический с необязательной статической типизацией | ||
REBOL | сильный | скрытый | динамичный | |
Rexx | бессмысленный | н / д, неявно по числам | н / д | статические + динамические по числам |
РПГ | слабый | статический | ||
Рубин | сильный | скрытый | н / д | динамичный |
Ржавчина | сильный | явный с необязательной неявной типизацией [9] | в основном номинальный | статический |
S | динамичный | |||
Сленг | сильный | скрытый | динамичный | |
Scala | сильный | частично неявный (вывод локального типа) | номинальная (подклассификация) и конструктивная | статический |
Схема | сильный | скрытый | динамический ( скрытый ) | |
Семя7 | сильный | явный | номинальный | статический |
Симула | сильный | статический [TS 8] | ||
Болтовня | сильный | скрытый | динамичный | |
Быстрый | сильный | частично неявный (вывод локального типа) | номинальная (подклассификация) и конструктивная | статический |
Стандартный ML | сильный | неявный с необязательной явной типизацией | структурный | статический |
Tcl | динамичный | |||
Машинопись | ? | необязательный | структурный | статический |
Visual Basic | сильный | неявный с необязательной явной типизацией | номинальный | статический |
Visual Basic .NET | слабый [TS 3] | явный | статический | |
Визуальный пролог | сильный | частично неявный | номинальный | статический |
Язык Wolfram Language | сильный | динамичный | ||
Windows PowerShell | сильный | скрытый | динамичный | |
XL | сильный | номинальный | статический | |
Xojo | сильный | явный | номинальный | статический |
XPath / XQuery | сильный | частично неявный | номинальный | динамический с необязательной статической типизацией |
Дротик | сильный [10] | постепенный набор текста | номинальный | статический с необязательной динамической типизацией |
Язык | Безопасность типов | Выражение типа | Совместимость типов композитов | Проверка типа |
Заметки [ править ]
- ^ Небезопасные операции хорошо изолированы префиксом «Unchecked_».
- ^ с необязательным приведением динамического типа (см. динамическое приведение )
- ^ a b c d e f Это почти безопасно, небезопасные функции обычно не используются.
- ^ с необязательным динамическим типом (см. поиск динамического члена )
- ^ Необязательно, типизация может явно подразумеваться первой буквой идентификатора (известная как неявная типизация в сообществе Fortran).
- ^ динамическая проверка расширений типов, т.е. унаследованных типов
- ^ явный для статических типов
- ^ необязательно для формальных и виртуальных процедур
Ссылки [ править ]
- ^ Спецификация языка программирования Go
- ^ Лё, Андрес. «Почему в Haskell нет записей со структурной типизацией?» . Переполнение стека . Архивировано 14 марта 2016 года . Проверено 13 апреля 2020 .
- ^ a b Кинг, Алексис (19 января 2020 г.). «Нет, системы динамического типа не являются более открытыми по своей сути» . lexi-lambda.github.io . Архивировано 01 марта 2020 года . Проверено 13 апреля 2020 .
- ^ Шэн Лян, Гилад Браха. Динамическая загрузка классов в виртуальной машине Java . Том 33, выпуск 10 уведомлений ACM SIGPLAN, октябрь 1998 г.
- ^ https://docs.julialang.org/en/latest/manual/types/
- ↑ Developer.apple.com. Архивировано 10 июня 2009 г. на Wayback Machine.
- ^ «Запись · Причина» . reasonml.github.io . Архивировано 31 марта 2020 года . Проверено 13 апреля 2020 .
- ^ "Система структурного типа" , Википедия , 29 марта 2019 г. , получено 13 апреля 2020 г.
- ^ "rust-lang / rustc-dev-guide" . GitHub . Проверено 8 апреля 2020 .
- ^ "Система типов Дарт" . dart.dev . Проверено 8 апреля 2020 .