Сравнение языков программирования по системе типов
(Перенаправлено из Сравнение систем типов )
Это сравнение особенностей систем типов и проверки типов нескольких языков программирования .
Краткие определения
- Система номинальных типов означает, что язык решает, являются ли типы совместимыми и/или эквивалентными, на основе явных объявлений и имен.
- Система структурных типов означает, что язык решает, являются ли типы совместимыми и/или эквивалентными, на основе определения и характеристик типов.
- Проверка типов определяет, проверяются ли типы и когда это происходит. Статическая проверка означает, что сообщения об ошибках типа сообщаются на основе текста программы (исходного кода). Динамическая проверка означает, что сообщения об ошибках типа сообщаются на основе динамического поведения программы (во время выполнения).
Язык | Тип безопасности | Введите выражение | Совместимость типов и эквивалентность | Проверка типа |
---|---|---|---|---|
А+ | сильный | динамичный | ||
ЭкшнСкрипт 3.0 | сильный | неявный с необязательной явной типизацией | статический | |
АВС | сильный | |||
АБАП | сильный | номинальный | статический | |
Есть | сильный [ТС 1] | явный | номинальный | статический |
приглашенный | сильный | номинальный | статический | |
Возраст | слабый | частично неявный [1] | статический | |
Алеф | сильный | статический | ||
АЛГОЛ 58 | сильный | явный | статический | |
АЛГОЛ 60 | сильный | явный | статический | |
АЛГОЛ 68 | сильный | явный | структурный | статические и тегированные союзы |
АЛГОЛ W | сильный | статический | ||
Алиса | сильный | неявный с необязательным явным | статический | |
Альма-0 | статический | |||
AmbientTalk | сильный | динамичный | ||
АМОС БЕЙСИК | статический | |||
АнгелСкрипт | сильный | статический | ||
АПЛ | сильный | динамичный | ||
AppleScript | слабый | динамичный | ||
Дуга | динамичный | |||
Автогорячая клавиша | бестиповый | — | — | — |
АвтоЛИСП | динамичный | |||
Атчи ПХ | сильный | явный | номинальный | статический |
АВК | слабый | скрытый | динамичный | |
Б | бестиповый | |||
Балерина | сильный | структурный | статический | |
Баш | ? | ? | ? | ? |
БАЗОВЫЙ | сильный | явный | номинальный | статический |
БКПЛ | бестиповый | |||
БинШелл | сильный | номинальный | динамичный | |
БЛАЖЕНСТВО | бестиповый | — | — | — |
Бу | сильный | неявный с необязательной явной типизацией | статический с дополнительной динамической типизацией | |
Братан | сильный | неявный с необязательной явной типизацией | номинальный | статический |
С | слабый | явный | номинальный | статический |
С-- | слабый | статический | ||
С++ ( ИСО/МЭК 14882 ) | слабый | явный с необязательной неявной типизацией (с использованием auto в C++11) | номинальный | статический [ТС 2] |
С* | слабый | явный | статический | |
С# | слабый [ТС 3] | неявный с необязательной явной типизацией | номинальный | статический [ТС 4] |
оболочка C | ? | ? | ? | ? |
Камл | сильный | неявный с необязательной явной типизацией | статический | |
Сесил | динамический с дополнительной статической типизацией | |||
Чистый | сильный | скрытый | статический | |
Цейлон | сильный | статический | ||
Часовня | неявный с необязательной явной типизацией | статический | ||
ХОЛОД | сильный | статический | ||
ЧакК | сильный | |||
Силк | слабый | явный | статический | |
Клэр | сильный | неявный с необязательной явной типизацией | динамический с дополнительной статической типизацией | |
Чистый | сильный | ? | ||
Кложур | сильный | неявный с необязательной явной типизацией | динамичный | |
КЛУ | сильный | |||
КОБОЛ | сильный | явный | номинальный | статический |
Кобра | сильный | явный с необязательной неявной типизацией | статический с дополнительной динамической типизацией | |
Кофескрипт | скрытый | динамичный | ||
КолдФьюжн (CFML) | сильный | скрытый | динамичный | |
КОМАЛ | сильный | |||
Общий Лисп | сильный | неявный с необязательной явной типизацией | структурный для неявной типизации, номинальный для явной типизации | динамический, некоторая статическая проверка (в зависимости от реализации) |
Компонентный Паскаль | сильный | статический | ||
Прохладный | сильный | явный | статический | |
КОРАЛЛ | сильный | статический | ||
Кристалл | неявный с необязательной явной типизацией [2] | структурный | статический | |
клинопись | явный | статический | ||
Завиток | сильный | номинальный | ||
Карри | сильный | неявный с необязательной явной типизацией | статический | |
Китон | сильный | неявный с необязательной явной типизацией | номинальный (типы расширения) и структурный (Python) | динамический с дополнительной статической типизацией |
Д | слабый [ТС 3] | явный | номинальный | статический |
Дарт | сильный [3] | постепенное набор текста | номинальный | статический с дополнительной динамической типизацией |
Дилан | сильный | динамичный | ||
Эйфелева | сильный | номинальный | статический | |
Эликсир | сильный | скрытый | динамичный | |
Эрланг | сильный | скрытый | динамичный | |
Эйфория | сильный | явный, неявный с объектами | номинальный | статический, динамический с объектами |
Ф# | сильный | скрытый | номинальный | статический |
Форт | бестиповый | — | — | — |
Фортран | сильный | явный [ТС 5] | номинальный | статический |
Креветки | сильный | явный | номинальный | |
GLBasic | сильный | явный. Неявные декларации доступны через опции проекта. | номинальный | статический |
Идти [4] | сильный | частично неявный ( вывод локального типа ) | структурный | статический |
Гоша | сильный | частично неявный ( вывод локального типа ) | номинальные (подклассы) и структурные | статический |
классный | сильный | неявный с необязательной явной типизацией | динамический с дополнительной статической типизацией | |
Гавань | сильный | неявный с необязательной явной типизацией | динамичный | |
Хаскелл | сильный | неявный с необязательной явной типизацией | номинальный [5] [6] | статический |
Смешанный | сильный | неявный с необязательной явной типизацией | номинальные (подклассы) и структурные | статический с дополнительной динамической типизацией |
Этот | сильный | скрытый | динамичный | |
икона | сильный | скрытый | динамичный | |
ИСЛИСП | сильный | динамичный | ||
Дж | сильный | динамичный | ||
Ява | сильный [7] | явный | номинальный | статический |
JavaScript | слабый | скрытый | — | динамичный |
Юлия | сильный | неявный с необязательной явной типизацией [8] | структурный для неявной типизации, номинальный для явной типизации | динамичный |
Радость | сильный | динамичный | ||
Котлин | сильный | частично неявный (вывод локального типа) | номинальный | статический |
ЛабВЬЮ | сильный | |||
Два | сильный | скрытый | динамичный | |
Клен | сильный | динамичный | ||
Меркурий | сильный | статический | ||
Математика | сильный | динамичный | ||
MATLAB M-код | сильный | динамичный | ||
Модуль-2 | слабый [ТС 3] | явный | номинальный | статический |
Модуль-3 | слабый [ТС 3] | явный | структурный | статический |
Свинка (М) | бестиповый | — | — | — |
Ничего | динамичный | |||
Немерль | сильный | скрытый | номинальный | статический |
Сетевой логотип | сильный | скрытый | динамичный | |
НетРекс | сильный | неявный с необязательным явным | динамический с дополнительной статической типизацией | |
новыйЛисп | скрытый | динамичный | ||
НЬЮП | сильный | статический | ||
Новояз | динамичный | |||
НьютонСкрипт | динамичный | |||
Ниал | динамичный | |||
Nim | сильный | частично неявный (вывод типа) | статический | |
Никель | сильный | |||
Нет | динамичный | |||
Оберон | сильный | явный | номинальный | статический и частично динамический [ТС 6] |
Цель-C | сильный | явный | номинальный | динамический с дополнительной статической типизацией [9] |
OCaml | сильный | неявный с необязательной явной типизацией | номинал для записей, [10] структурный для объектов [6] [11] | статический |
Объектный Паскаль | сильный | явный | номинальный | статический |
Опа | сильный | неявный с необязательной явной типизацией | структурный | статический |
Кислород | слабый | скрытый | статический | |
Оз-Моцарт | сильный | скрытый | структурный | динамичный |
Паскаль | слабый [ТС 3] | явный | номинальный | статический |
Перл 5 | скрытый | динамичный | ||
PHP | слабый | неявный с необязательной явной типизацией | номинальный | динамичный |
Плюс | сильный | явный | структурный | статический, динамический (опционально) |
Пролог | динамичный | |||
Чистый | динамичный | |||
Чистый скрипт | сильный | неявный с необязательной явной типизацией | номинальный | статический |
Питон | сильный | неявный (с необязательной явной типизацией, начиная с версии 3.5) | номинальный | динамичный |
Р | скрытый | динамичный | ||
Раку | частично неявный [ТС 7] | динамический с дополнительной статической типизацией | ||
РЕБОЛ | сильный | скрытый | динамичный | |
Рекс | бестиповый | -, неявные числа | — | статические+динамические числа |
РПГ | слабый | статический | ||
Руби | сильный | скрытый | — | динамичный |
Ржавчина | сильный | явный с необязательной неявной типизацией [12] | в основном номинальный | статический |
С | динамичный | |||
Сленг | сильный | скрытый | динамичный | |
Скала | сильный | частично неявный (вывод локального типа) | номинальные (подклассы) и структурные | статический |
Схема | сильный | скрытый | динамический ( скрытый ) | |
Сид7 | сильный | явный | номинальный | статический |
начало | сильный | статический [ТС 8] | ||
Смолток | сильный | скрытый | динамичный | |
Быстрый | сильный | частично неявный (вывод локального типа) | номинальные (подклассы) и структурные | статический |
Стандартный ML | сильный | неявный с необязательной явной типизацией | структурный | статический |
Ткл | динамичный | |||
Машинопись | ? | необязательный | структурный | статический |
Юникон | сильный | скрытый | динамичный | |
Визуальный Бейсик | сильный | неявный с необязательной явной типизацией | номинальный | статический |
Визуальный Бейсик .NET | слабый [ТС 3] | явный | статический | |
Визуальный Пролог | сильный | частично неявный | номинальный | статический |
Вольфрам Язык | сильный | динамичный | ||
Windows PowerShell | сильный | скрытый | динамичный | |
XL | сильный | номинальный | статический | |
Содзё | сильный | явный | номинальный | статический |
XPath / XQuery | сильный | частично неявный | номинальный | динамический с дополнительной статической типизацией |
Язык | Тип безопасности | Введите выражение | Совместимость типов и эквивалентность | Проверка типа |
Примечания
[ редактировать ]- ^ Небезопасные операции хорошо изолируются префиксом «Unchecked_».
- ^ с необязательным динамическим приведением типов (см. динамическое приведение типов )
- ^ Jump up to: а б с д и ж Это почти безопасно, небезопасные функции обычно не используются.
- ^ с необязательным динамическим типом (см. динамический поиск членов )
- ^ При желании типизация может явно подразумеваться по первой букве идентификатора (в сообществе Fortran это называется неявной типизацией).
- ^ динамическая проверка расширений типов, т.е. унаследованных типов.
- ^ явно для статических типов
- ^ необязательно для формальных и виртуальных процедур
Ссылки
[ редактировать ]- ^ Руководство пользователя Алдора (PDF) . Алдор.орг. 2002. С. 40, 61 . Проверено 3 июня 2021 г.
- ^ «Кристалл определения типа» . Справочник по кристаллическому языку . Проверено 3 июня 2021 г.
- ^ «Система типов Дарт» . dart.dev . Проверено 8 апреля 2020 г.
- ^ Спецификация языка программирования Go
- ^ Лё, Андрес. «Почему в Haskell нет записей со структурной типизацией?» . Переполнение стека . Архивировано из оригинала 14 марта 2016 г. Проверено 13 апреля 2020 г.
- ^ Jump up to: а б Кинг, Алексис (19 января 2020 г.). «Нет, системы динамических типов по своей сути не более открыты» . lexi-lambda.github.io . Архивировано из оригинала 01 марта 2020 г. Проверено 13 апреля 2020 г.
- ^ Шэн Лян, Гилад Брача. Динамическая загрузка классов в виртуальной машине Java . Том 33, выпуск 10 уведомлений ACM SIGPLAN, октябрь 1998 г.
- ^ «Типы · Юлийский язык» . Архивировано из оригинала 24 июля 2018 г. Проверено 24 июля 2018 г.
- ^ Developer.apple.com. Архивировано 10 июня 2009 г., на Wayback Machine.
- ^ «Запись · Причина» . причинаml.github.io . Архивировано из оригинала 31 марта 2020 г. Проверено 13 апреля 2020 г.
- ^ «Система структурных типов» , Arc.Ask3.Ru , 29 марта 2019 г. , получено 13 апреля 2020 г.
- ^ "rust-lang/rustc-dev-guide" . Гитхаб . Проверено 8 апреля 2020 г.