Каков опыт использования юникода в идентификаторах - PullRequest
8 голосов
/ 16 ноября 2008

В наши дни все больше языков используют юникод, и это хорошо. Но это также представляет опасность. В прошлом возникали проблемы, различающие 1 и l, а также 0 и О. Но теперь у нас есть совершенно новый набор похожих символов.

Например:

ì, î, ï, ı, ι, ί, ׀ ,أ ,آ, ỉ, ﺃ

С их помощью не так сложно создать несколько очень трудных для поиска ошибок.

На моей работе мы решили остаться с символами ANSI для идентификаторов. Есть ли кто-нибудь, кто использует идентификаторы Unicode и каков опыт?

Ответы [ 6 ]

10 голосов
/ 16 ноября 2008

Помимо схожих ошибок символов, о которых вы упоминаете, и технических проблем, которые могут возникнуть при использовании разных редакторов (w / BOM, wo / BOM, разных кодировок в одном и том же файле при вставке копий, что является проблемой только при наличии фактически символов не может быть закодирован в ASCII и т. д.), я считаю, что не стоит использовать символы Unicode в идентификаторах. Английский язык стал языком развития, и вы должны придерживаться его при написании кода.

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

6 голосов
/ 16 ноября 2008

Мой опыт использования юникода в исходных файлах C # был катастрофическим, хотя он был японским (так что нечего было путать с «i»). Source Safe не нравится юникод, и когда вы обнаруживаете, что вручную исправляете поврежденные исходные файлы в Word, вы знаете, что что-то не так.

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

3 голосов
/ 17 ноября 2008

Я думаю, что не стоит использовать весь набор символов ANSI для идентификаторов. Независимо от того, с какой кодовой страницей ANSI вы работаете, ваша кодовая страница ANSI содержит символы, которые не включены в некоторые другие кодовые страницы ANSI. Поэтому я рекомендую придерживаться ASCII, без кодов символов выше 127.

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

Теперь о разнице между кодовыми страницами ANSI и Unicode.

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

Иногда я сохранял исходные файлы в Unicode и использовал escape-последовательности в некоторых строках для представления значений символов Unicode. Это важная практика, и я очень рекомендую ее. Мне особенно приходилось делать это, когда другие программисты использовали символы ANSI в своих строках, и их кодовые страницы ANSI отличались от других кодовых страниц ANSI, поэтому строки были повреждены и вызывали ошибки компиляции или дефектные результаты. Чтобы решить эту проблему, используйте escape-последовательности Unicode.

1 голос
/ 17 ноября 2008

Я бы также рекомендовал использовать ascii для идентификаторов. Комментарии могут оставаться не на английском языке, если редактор / ide / compiler и т. Д. Все знают о локали и настроены на использование одной и той же кодировки.

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

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

0 голосов
/ 23 января 2009

Я никогда не использовал юникод для имен идентификаторов. Но что мне приходит в голову, так это то, что Python допускает идентификаторы юникода в версии 3: PEP 3131 .

Еще одним языком, который широко использует юникод, является Крепость .

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

0 голосов
/ 17 ноября 2008

Это зависит от языка, который вы используете. В Python, например, мне проще придерживаться Unicode, так как мои приложения должны работать на нескольких языках. Поэтому, когда я получаю файл от кого-то (чего-то), которого я не знаю, я предполагаю Latin-1 и переводить в Unicode.

У меня работает, так как я в Латинской Америке.

На самом деле, когда все сглаживается, все становится плавным ходом.

Конечно, это зависит от выбранного языка.

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