Связана ли чувствительность к регистру со строго типизированными языками (или свободно типизированными языками)? - PullRequest
2 голосов
/ 15 декабря 2010

(Я допускаю, что это может быть вопрос n00b - я очень мало знаю о теории КС, в основном это практическое / хобби).

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

Я всегда думал, что простой ответ на различие между языком со строгой / слабой типизацией заключается в том, что первый требует явных объявлений типов, а второй более открытый, даже «динамический».

Два потока S / O ( здесь и здесь ), которые я обнаружил до сих пор, кажется, предлагают (более или менее), но они ничего не упоминают о чувствительности к регистру , Есть ли вообще связь между чувствительным к регистру и сильным / слабым?

Ответы [ 3 ]

4 голосов
/ 15 декабря 2010

Пара уточнений:

  1. Чувствительность к регистру не имеет ничего общего с типизацией сильной и слабой типизации, статической или динамической типизацией или любым другим свойством системы типов.Я не знаю, почему ответ на ответы Yahoo получил одно одобрение, но это совершенно неправильно.Просто игнорируйте его.

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

    Например, умножение строк "foo" и "bar" дает 0 как результат в perl, в то время как это вызывает ошибку типа в ruby, python, java, haskell, ml и многие другие языки.Таким образом, эти языки более строго типизированы, чем perl.

    Строгая типизация также иногда используется как синоним статической типизации.

  3. Статически типизированный язык - это язык, в которомтипы переменных, функций и выражений известны во время компиляции (или, во всяком случае, до времени исполнения - статически типизированный язык не нужно компилировать как таковой, хотя на практике это обычно так).Это означает, что если статически типизированная программа содержит ошибку типа, она не запустится.Если программа с динамической типизацией содержит ошибку типа, она будет работать до момента возникновения ошибки, а затем завершится сбоем.

Требует ли язык аннотации типа (в некоторой степени) независимо от того,Система типов сильная или слабая, статическая или динамическая.Теоретически, динамически типизированный язык может требовать (или, по крайней мере, разрешать) аннотации типов, а затем генерировать ошибки времени выполнения, когда эти аннотации прерываются (хотя я не знаю ни одного динамически такого, который на самом деле это делает).Есть много статически и строго типизированных языков (например, Haskell, ML), которые не требуют аннотаций типов, но вместо этого используют алгоритмы вывода типов для вывода типов.

2 голосов
/ 15 декабря 2010

Теоретически, чувствительность к регистру совершенно не связана со строгостью типов. Чувствительность к регистру зависит от того, относятся ли идентификаторы foo, FOO и fOo к одной и той же переменной, функции или что-то еще. Строгость типов зависит от того, имеют ли переменные типы или просто значения , как легко преобразовывать типы и т. Д.

На практике может существовать корреляция между чувствительностью к регистру и строгостью типов, но я не могу сейчас думать о достаточном количестве регистронезависимых языков для проведения оценки. У меня сложилось впечатление, что большинство языков, обычно используемых сегодня, чувствительны к регистру & mdash; возможно, потому что C был чувствительным к регистру и очень влиятельным, возможно потому, что это был единственный способ заставить людей прекратить программирование во всех шапках после пары десятилетий Фортрана, Кобола и Бейсика.

1 голос
/ 15 декабря 2010

Нет - они не связаны. Языки строгого типа вынуждают вас указать тип данных, которые может содержать переменная, такие как действительное число, целое число, текстовая строка или некоторый определенный программистом объект. Вы не можете случайно назначить другой тип данных в эту переменную, если она не является неявно конвертируемой: например, вы можете поместить целое число в вещественное число (т. Е. double x = 3.14; x = 3; в порядке, но int x = 3; x = 3.14; может быть в зависимости от того, насколько сильно напечатан язык). Языки со слабой типизацией просто хранят все, что им задают, без выполнения этих проверок работоспособности. В строго типизированных языках, таких как C ++, вы все равно можете создать тип, который может хранить данные, которые могут быть любого из определенного набора типов (например, C ++ boost::variant), но иногда они немного более ограничены в том, сколько вы можете сделать насколько удобно пользоваться.

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

...