Почему многие языки чувствительны к регистру? - PullRequest
45 голосов
/ 02 февраля 2009

Почему многие языки чувствительны к регистру?

Это просто вопрос наследования? C ++ чувствителен к регистру, потому что C есть, Java чувствителен к регистру, потому что C ++ и т.д. Или за этим стоит более прагматичная причина?

Ответы [ 31 ]

66 голосов
/ 02 февраля 2009

Не думаю, что вы получите лучший ответ, чем «потому что автор (ы) этого языка считали, что так будет лучше». Лично я думаю, что они правы. Я бы не хотел находить эти строки где-либо в одном и том же исходном файле (и ссылаться на один и тот же объект + метод) ...

SomeObject.SomeMethod();
...
SOMEOBJECT.SOMEMETHOD();
...
someObject.someMethod();
...
sOmEoBjEcT.sOmEmEtHoD();

Не думаю, что кто-то был бы счастлив увидеть это ...

59 голосов
/ 02 февраля 2009

Unix.

В Unix учитывался регистр, поэтому многие языки программирования, разработанные для использования в Unix, были чувствительны к регистру.

Компьютеры не прощают - заглавные буквы - это не то же самое, что строчные буквы, они совершенно разные. И когда циклы обработки, оперативная память и т. Д. Были дорогостоящими, не стоило усилий заставить «прощать» компиляторы и компьютеры, люди просто пытались заставить их работать.

Обратите внимание, что нечувствительность к регистру на самом деле не стала чем-то полезным, пока не появились такие вещи, как Visual Basic - как только компании начали вкладывать средства в концепцию, согласно которой массовое программирование было полезным для их дна линия (т. е. Microsoft зарабатывает больше денег, если на Windows больше программ), языки стали более дружелюбными и более щадящими.

35 голосов
/ 02 февраля 2009

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

Существует большая разница (где я живу, в любом случае, недалеко от города Рединг) между:

Мне нравится читать.

и

Мне нравится читать.

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

Одно явное преимущество чувствительности к регистру для языков программирования состоит в том, что текст становится культурно нечувствительным. Достаточно того, что иногда приходится указывать компилятору, какая кодировка текста используется для исходного файла, - указывать culture , в котором он находится, было бы еще хуже: (

29 голосов
/ 02 февраля 2009

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

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

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

25 голосов
/ 02 февраля 2009

Полагаю, чувствительность к регистру увеличивает пространство имен. Хороший трюк, такой как

MyClass myClass;

было бы невозможно без учета регистра.

24 голосов
/ 02 февраля 2009

Фальцовка кейсов проста только на английском языке (и для всех символов <128). Немецкий <a href="http://en.wikipedia.org/wiki/%C3%9F" rel="noreferrer"> sz или "sharp s" (ß) не имеет заглавного варианта в кодировке ISO 8859-1. Он получил только один в Unicode после десятилетия обсуждения (и теперь все шрифты должны быть обновлены ...). Кандзи и Хирагана (японские алфавиты) даже не знают строчных букв.

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

16 голосов
/ 02 февраля 2009

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

Как только появились идентификаторы, которые были уникальными только в их случае, стало очень трудно вернуться назад. Многим разработчикам это понравилось, и, кажется, нет большого желания отменить это.

13 голосов
/ 14 февраля 2009

ExpertSexChange

Я считаю, что это конкурент Stack Overflow, где вы должны платить, чтобы прочитать ответы Хм ... с учетом регистра, значение названия сайта неоднозначно.

Это хорошая причина для чувствительности языков к регистру. Меньше двусмысленности! Неоднозначность для программистов считается противной.

11 голосов
/ 02 февраля 2009

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

Person person = new Person("Bill");

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

Кроме того, наличие Персона, персона, Персона, Персон и Персона - все равноценные токены - вызвали бы у меня головную боль. :)

9 голосов
/ 02 февраля 2009

Какая капитальная форма i ? I (U + 0049) или & # x0130; (U + 0130)?

Использование заглавных букв зависит от локали.

...