В стандарте сказано, какие символы можно использовать внутри идентификаторов (см., напр., черновик, [charname.allowed]).
Меня интересует, а почему, собственно, только только эти? Почему нельзя было разрешить вообще все символы, кроме тех, что уже используются в языке для других целей?
Например, 👀_table — допустимый идентификатор, а ☠_lock — нет. Вот пример.
Если не поможет, будем действовать током... 600 Вольт (C)
Re: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, b0r3d0m, Вы писали:
MX>>Например, 👀_table — допустимый идентификатор, а ☠_lock — нет B>На чём основывается данное утверждение? Одного лишь примера недостаточно.
B>Я вот вижу, что набор допустимых символов целиком и полностью определяется реализацией:
B>
B>The set of physical source file characters accepted is implementation-defined
Не знаю я как это понимать. Вот глава 2.10, стих 1:
An identifier is an arbitrarily long sequence of letters and digits. Each universal-character-name in an
identifier shall designate a character whose encoding in ISO 10646 falls into one of the ranges specified in E.1.
В Е.1 перечислены некоторые символы, не все. Вот эта же таблица в clang, по ней не допускаются идентификаторы с не теми символами.
Если не поможет, будем действовать током... 600 Вольт (C)
Re[3]: Ограниченность набора символов Unicode для идентификаторов
MX>An identifier is an arbitrarily long sequence of letters and digits. Each universal-character-name in an
MX>identifier shall designate a character whose encoding in ISO 10646 falls into one of the ranges specified in E.1.
MX>В Е.1 перечислены некоторые символы, не все. Вот эта же таблица в clang, по ней не допускаются идентификаторы с не теми символами.
Ключевое слово здесь "universal-character-name", что есть
MX>>An identifier is an arbitrarily long sequence of letters and digits. Each universal-character-name in an
MX>>identifier shall designate a character whose encoding in ISO 10646 falls into one of the ranges specified in E.1.
MX>>В Е.1 перечислены некоторые символы, не все. Вот эта же таблица в clang, по ней не допускаются идентификаторы с не теми символами. B>Ключевое слово здесь "universal-character-name", что есть
B>
Здравствуйте, b0r3d0m, Вы писали:
MX>>Что ты этим определением universal-character-name хотел сказать? В виде кода, желательно.
B>То, что мы можем гарантированно использовать лишь нотацию \uXXXXXXXX, а не их визуальное представление. Например,
B>
B>int \u2460_foo;
B>
Во-первых,
Any source file character not in the basic source character set (2.3) is replaced by the universal-character-name that designates that character.
Т.е. чтобы-таки иметь universal-character-name, вовсе не требуется обязательно писать \u...
Во-вторых, допустим, не гарантированно. Я предлагаю обсудить то, что натурально есть в наличии.
И, в-третьих, если в исходном вопросе поменять некоторые, да хоть все, символы на \u... то от этого суть вопроса никак не изменится.
Если не поможет, будем действовать током... 600 Вольт (C)
Re: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, -MyXa-, Вы писали:
MX>Например, 👀_table — допустимый идентификатор, а ☠_lock — нет. Вот пример.
Они чего серьезно собираются в С++ юникодовские идентификаторы разрешить? Не рухнули ли они с дуба?
Нет такого преступления, на которое не пошло бы суверенное родоплеменное быдло ради продления своего бессмысленного рода и распространения своего бессмысленного генома.
Re[7]: Ограниченность набора символов Unicode для идентификаторов
MX>Any source file character not in the basic source character set (2.3) is replaced by the universal-character-name that designates that character.
MX>Т.е. чтобы-таки иметь universal-character-name, вовсе не требуется обязательно писать \u...
Да, похоже, что ты прав, не дочитал.
Интересно, конечно, написано:
Any source file character not in the basic
source character set (2.3) is replaced by the universal-character-name that designates that character.
(An implementation may use any internal encoding, so long as an actual extended character encountered
in the source file, and the same extended character expressed in the source file as a universal-character-
name (e.g., using the \uXXXX notation), are handled equivalently except where this replacement is
reverted in a raw string literal.)
Что они имеют ввиду под выделенным? Ведь далее в стандарте говорится следующее:
The character designated by the universal-character-name \UNNNNNNNN is that character whose character
short name in ISO/IEC 10646 is NNNNNNNN ; the character designated by the universal-character-name \uNNNN
is that character whose character short name in ISO/IEC 10646 is 0000NNNN
Вроде как всё чётко оговорено -- символы должны маппиться согласно ISO/IEC 10646.
Или они имеют ввиду, что реализации позволено хранить символы прочитанного файла как в UTF-8, так и в UTF-16 (так и в какой-то более экзотической кодировке, хоть своей собственной), но преобразовывать символы из non-basic source character set'а он должен только согласно ISO/IEC 10646?
Re[2]: Ограниченность набора символов Unicode для идентификаторов
A>Они чего серьезно собираются в С++ юникодовские идентификаторы разрешить? Не рухнули ли они с дуба?
В смысле, "собираются"? Судя по стандарту, это ещё в C++11 ввели.
Re: Ограниченность набора символов Unicode для идентификаторов
MX>В стандарте сказано, какие символы можно использовать внутри идентификаторов (см., напр., черновик, [charname.allowed]).
MX>Меня интересует, а почему, собственно, только только эти? Почему нельзя было разрешить вообще все символы, кроме тех, что уже используются в языке для других целей?
Набор действительно очень странный. Надо было разрешить Lu, Ll, Lm, Nd, Mn (уместно применённый), и, наверно, всё.
Допуск всяких U+202B вообще преступление.
The God is real, unless declared integer.
Re: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, -MyXa-, Вы писали: MX>В стандарте сказано, какие символы можно использовать внутри идентификаторов (см., напр., черновик, [charname.allowed]).
Предлагаю добавить в C++ синтаксис, обеспечивающий многоязычную возможность задания имени идентификатора.
Что то типа.
int VpTime{ ru:VpВремя, es:VpTiempo};
Ну а далее в программе используем один из трех вариантов написания имени переменной.
Например:
VpВремя += 5;
VpTiempo -= 1;
Re[2]: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, vladimirmir2013, Вы писали:
V>Предлагаю добавить в C++ синтаксис, обеспечивающий многоязычную возможность задания имени идентификатора.
Дык препроцессор жеж?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, Erop, Вы писали:
V>>Предлагаю добавить в C++ синтаксис, обеспечивающий многоязычную возможность задания имени идентификатора.
E>Дык препроцессор жеж?
И прикрутить его к гуглотранслейту
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, vladimirmir2013, Вы писали:
V>Предлагаю добавить в C++ синтаксис, обеспечивающий многоязычную возможность задания имени идентификатора. V>Что то типа. V>int VpTime{ ru:VpВремя, es:VpTiempo};
V>Ну а далее в программе используем один из трех вариантов написания имени переменной. V>Например: V>VpВремя += 5; V>VpTiempo -= 1;
По идее IDE должен всё это понимать и выдавать на том языке, который указал пользователь.
Но я бы захотел другое. В тексте написано краткое название переменной или функции,
а при наведении курсора показывается развёрнутый комментарий, что это такое.
Разумеется, с переводом.
В тексте
VpВремя
И по требованию.
"Время последней модификации данных".
Течёт вода Кубань-реки куда велят большевики.
Re: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, -MyXa-, Вы писали:
MX>В стандарте сказано, какие символы можно использовать внутри идентификаторов (см., напр., черновик, [charname.allowed]). MX>Меня интересует, а почему, собственно, только только эти? Почему нельзя было разрешить вообще все символы, кроме тех, что уже используются в языке для других целей?
Чтобы не превратить C++ в PL/1.
Следующий вопрос, который ты задашь: "Почему нельзя превратить С++ в PL/1?"
Re[3]: Ограниченность набора символов Unicode для идентификаторов
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, vladimirmir2013, Вы писали:
V>>Предлагаю добавить в C++ синтаксис, обеспечивающий многоязычную возможность задания имени идентификатора.
E>Дык препроцессор жеж?
Я пробовал. В отладчике видишь не то, что в исходнике. Даже если это просто транслит — неудобно.