Сравнение языков программирования по системе типов

редактировать

Это сравнение характеристик систем типов и проверка нескольких языков программирования.

Краткие определения

  • A система номинальных типов означает, что язык решает, являются ли типы совместимыми и / или эквивалентными на основе явных объявлений и имен.
  • A структурный тип system означает, что язык решает, являются ли типы совместимыми и / или эквивалентными на основе определения и характеристик типов.
  • Проверка типа определяет, будут ли типы проверяться и когда. Статическая проверка означает, что об ошибках типа сообщается на основе текста программы (исходного кода). Динамическая проверка означает, что сообщения об ошибках типа сообщаются на основе динамического поведения программы (во время выполнения).
ЯзыкБезопасность типов Выражение типа Совместимость типов и эквивалентность Проверка типов
ActionScript 3.0strongнеявный с необязательной явной типизациейstatic
Ada Strongявныйноминальныйстатический
Алдор слабыйнеявныйстатический
АЛГОЛ 58 сильныйявныйстатический
АЛГОЛ 60 сильныйявныйстатический
АЛГОЛ 68 сильныйявныйструктурныйстатические и помеченные объединения
APL strongдинамический
AutoHotkey без типан / дн / дн / д
Ateji PX strongявныйноминальныйстатический
Bash ????
BASIC strongявныйноминальныйстатический
BLISS без типан / дн / пн / д
BeanShell strongноминальныйдинамический
Boo strongнеявный с необязательной явной типизациейстатический с необязательной динамической типизацией
Bro strongнеявный с необязательным явным типомноминальныйстатический
C слабыйявныйноминальныйстатический
C ++ (ISO / IEC 14882 )weakявный с необязательной неявной типизацией (с использованием auto в C ++ 11)номинальныйстатический
C# слабыйнеявный с необязательной явной типизациейноминальныйстатический
чистый сильныйнеявныйстатический
Clojure strongнеявный с необязательной явной типизациейдинамический
COBOL strongявныйноминальныйстатический
ColdFusion (CFML)сильныйнеявныйдинамический
Common Lisp сильныйнеявный с необязательным явным типизацияструктурная для неявной типизации, номинальная для явной типизациидинамический, некоторая статическая проверка (в зависимости от реализации)
Curl strongноминальный
Cython strongнеявный с необязательной явной типизациейноминальный (типы расширения) и структурный (Python)динамический с необязательной статической типизацией
D слабыйявныйноминальныйстатический
Дилан сильныйдинамический
Эйфель сильныйноминальныйстатический
Эликсир сильныйнеявныйдинамический
Erlang strongнеявныйдинамический
Euphoria strongявный, неявный с объектаминоминальныйстатический, динамический с объектами
F# сильныйнеявныйноминальныйстатический
Форт без типан / дн / пн / п
Fortran strongexplicitноминальныйстатический
Gambas strongявныйноминальный
GLBasic строгийявный. Неявные объявления, доступные через параметры проектаноминальныйстатический
Go строгийнеявный с необязательным явным типомструктурныйстатический
Gosu strongчастично неявный (вывод локального типа)номинальный (подклассы) и структурныйstatic
Groovy strongнеявный с необязательным явным типомдинамический с необязательным статическим типом
Harbor strongнеявный с необязательным явным типомдинамический
Haskell strongнеявный с необязательной явной типизациейноминальныйстатический
Haxe strongнеявный с необязательным явным типомноминальный (подклассы) и структурныестатические с необязательной динамической типизацией
Io сильнаянеявнаядинамическая
ISLISP сильнаядинамическая
J сильнаядинамический
Java Strongявныйноминальныйстатический
JavaScript w eakнеявныйн / ддинамический
Julia strongнеявный с необязательной явной типизациейструктурный для неявной типизации, номинально для явной типизациидинамический
Joy strongдинамический
Kotlin strongчастично неявный (вывод локального типа)номинальныйстатический
LabVIEW strong
Lua strongнеявныйдинамический
Maple strongdynamic
Mathematica strongdynamic
MATLAB M-codestrongdynamic
Modula-2 weakявныйноминальныйстатический
Modula-3 weakявныйструктурныйстатический
MUMPS (M)без типан / дн / дн / п
Оберон сильныйявныйноминальныйстатический и частично динамический
Objective-C сильныйявныйноминальныйдинамический с дополнительным статическим типом ng
OCaml strongнеявный с необязательной явной типизациейноминальный для записей, структурный для объектовstatic
Object Pascal strongявныйноминальныйстатический
Opa строгийнеявный с необязательным явным типомструктурныйстатический
кислородный слабыйнеявныйстатический
Оз-Моцарт сильныйнеявныйструктурныйдинамический
Pascal weakявныйноминальныйстатический
Perl 5неявныйдинамический
PHP неявный с необязательной явной типизациейноминальныйдинамический
Плюс сильныйявныйструктурныйстатический, динамический (необязательно)
Пролог динамический
Чистый динамический
Python сильныйнеявный (с необязательной явной типизацией начиная с 3.5)н / ддинамический
Raku частично неявныйдинамический с дополнительным статическим типом g
REBOL strongimplicitdynamic
Rexx typelessn / a, неявный по числамn / aстатический + динамический по отношению к числам
RPG слабыйстатический
Ruby сильныйнеявныйн / ддинамический
Rust strongявный с необязательной неявной типизациейв основном номинальныйстатический
S динамический
S-Lang strongнеявныйдинамический
Scala strongчастично неявный (вывод локального типа)номинальный (подклассы) и структурныйстатическая
Схема сильнаянеявнаядинамическая (скрытая )
Seed7 сильнаяявнаяноминальнаяstatic
Simula strongstatic
Smalltalk strongimplicitdynamic
Swift strongчастично неявный (вывод локального типа)номинальный (подкласс) и структурныйстатический
Стандартный ML сильныйимпл. icit с необязательной явной типизациейструктурныйстатический
Tcl динамический
TypeScript ?необязательныйструктурныйстатический
Visual Basic сильныйнеявный с необязательной явной типизациейноминальныйстатический
Visual Basic.NET слабыйявныйстатический
Visual Prolog strongчастично неявныйноминальныйстатический
Wolfram Language strongдинамический
Windows PowerShell сильныйнеявныйдинамический
XL сильныйноминальныйстатический
Xojo сильныйявныйноминальныйстатический
XPath / XQuery strongчастично неявныйноминальныйдинамический с дополнительным статическим набором
Дарт сильныйпостепенный наборноминальныйстатический с дополнительным динамическим набором
ЯзыкТип безопасностьВыражение типаСовместимость типов между композитами itesПроверка типов
Ссылки
  1. ^Спецификация языка программирования Go
  2. ^Лё, Андрес. «Почему в Haskell нет записей со структурной типизацией?». Переполнение стека. Архивировано из оригинала на 14 марта 2016 года. Проверено 13 апреля 2020 г.
  3. ^ Король, Алексис (19 января 2020 г.). «Нет, системы динамического типа по своей сути не являются более открытыми». lexi-lambda.github.io. Архивировано из оригинала на 2020-03-01. Проверено 13 апреля 2020 г.
  4. ^Шэн Лян, Гилад Браха. Динамическая загрузка классов в виртуальной машине Java. Том 33, выпуск 10 уведомлений ACM SIGPLAN, октябрь 1998 г.
  5. ^https://docs.julialang.org/en/latest/manual/types/
  6. ^Developer.apple.com Архивировано 10 июня 2009 г., на Wayback Machine
  7. ^«Запись · Причина». reasonml.github.io. Архивировано из оригинала 31 марта 2020 г. Проверено 13 апреля 2020 г.
  8. ^, Wikipedia, 29 марта 2019 г., получено 13 апреля 2020 г.
  9. ^"rust-lang / rustc-dev-guide". GitHub. Проверено 8 апреля 2020 г.
  10. ^"Система типов Dart". dart.dev. Проверено 8 апреля 2020 г.
Последняя правка сделана 2021-05-15 08:04:58
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте