Связывание статического типа и связывание динамического типа - PullRequest
8 голосов
/ 23 марта 2012

Я понимаю, что подразумевается под привязкой типов. Пожалуйста, поправьте меня, если я ошибаюсь -

Привязка типов - это процесс «связывания» объявленной переменной с конкретным типом
(Сделано компилятором).

Тип привязки можно классифицировать как -
Статический тип привязки
Динамическая привязка типа

Статическое связывание типов может быть достигнуто двумя типами объявлений -

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.2.gif

Пока ясно.
Но теперь, что такое динамическое связывание типов? (не определение) Я знаю, что это означает, что переменная связана с «типом» во время выполнения,

http://sankofa.loc.edu/CHU/WEB/Courses/Cosi350/Ch4/bound.3.gif

Любая дополнительная информация, например, -

  1. Почему Связывание динамического типа?
  2. На каких языках программирования он доступен как функция?
  3. Каковы его преимущества и недостатки по сравнению со статической привязкой типов?

Указывается в операторе присваивания

Можете ли вы дать больше информации об этом? Должен ли он быть указан только с оператором присваивания?

1 Ответ

17 голосов
/ 28 февраля 2013

Я постараюсь ответить на ваши вопросы:

Сначала самый простой На каких языках программирования он доступен как функция?

Php, Python, Ruby, Perl, JavaScript ...

«Что такое динамическое связывание типов?»

Языки программирования, которые используют этот подход для привязки переменных типов, таких как PHP, Python, Ruby ии так далее, в целом являются интерпретируемыми языками.Итак, у них нет компилятора.На этих языках вы не указываете тип переменной и не имеете для этого правил простоты, поэтому «невозможно» обнаружить тип переменной перед рабочим типом.

Зачем использовать динамическое связывание типов?

Чтобы ответить на этот вопрос, я должен рассказать о некоторых преимуществах этого подхода.Выбор использования динамического связывания типов - это решение о дизайне вашего языка.Таким образом, зависит от того, что вы хотите для своего языка и в какой ситуации он будет использоваться.

Преимущества

  • Писать легчеуниверсальный код.

Пример: подумайте о создании общей структуры данных, например, Stack.Вы хотите использовать его для хранения всех типов переменных, используя разные стеки, например, стек для int, другой для строки и так далее.Сделать это на ** языках программирования со статической привязкой типов ** сложнее.

В C, например, у вас есть две опции:

  • Записать один стек для каждого типа, который вы хотите использовать, сохранить в стеке
  • Создать стек, который сохраняет (void*), другими словами, точка для чего-либо

Если вы попытаетесь сделать это на Python, вы только напишите свой код сразу.Язык делает тяжелую работу за вас.

Вы можете поспорить о Java и других языках, но вы должны помнить, что динамическое связывание типов является концепцией более старой, чем Oriented Object Programming, поэтому в этот разПолиморфизм не был.

Недостатки

  • Высокая Стоимость проверки типа и интерпретации

Выполнение программы с использованием сгенерированного двоичного файлапо компиляции намного быстрее, чем та же программа, работающая над интерпретатором.Во-вторых, когда вы используете статическое связывание типов , «в основном, процесс связывания выполняется только один раз, перед выполнением. С другой стороны, в языках с динамическое связывание типов ,процесс привязки выполняется для каждой операции присваивания каждой переменной.

Другие минимальные недостатки касаются некоторых ошибок, которые может найти компилятор, но при использовании привязки динамического типа интерпретатор не может.

Например: поскольку вы можете изменять тип ваших переменных столько раз, сколько вам нужно во время выполнения, действительно возможно создать путаницу, например, изменить переменную int на строку, а через некоторое время попытаться вызватьфункция, которая получает int, и вы вызываете эту функцию, используя переменную, которая теперь является строкой.

Это минимальная проблема, потому что опытный разработчик никогда не сделает этого, но все еще возможно и на языках с статический тип привязки нет.

Вы должны иметь в виду, что мы говорим оНаши концепции и реализации этих концепций развиваются вместе с компьютерными науками, поэтому, вероятно, в настоящее время некоторые преимущества / недостатки можно свести к минимуму.

...