Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++的关键词(和标准库)可以本地化吗?(可修改的解析器语法)_C++_Unicode - Fatal编程技术网

C++的关键词(和标准库)可以本地化吗?(可修改的解析器语法)

C++的关键词(和标准库)可以本地化吗?(可修改的解析器语法),c++,unicode,C++,Unicode,等等,这会很长的!在问我的问题之前,我需要解释一些事情 根据C++标准,如编译器中所描述的,编译器应该支持源代码中的Unicode,甚至更准确地标明UTF-8的标识符、变量、函数等。我知道Clang完全支持,我的意思是,你可以使用UTF-8编码的源文件,GCC只支持在标识符中使用\ U代码,但让我们假设我们生活在一个完美的世界中,在这个世界中,所有编译器都能正常工作 太好了!现在我不再需要用英语编写代码,最终可以用我的母语保加利亚语或者世界语来编写代码。毕竟,这就是标准要求的要点。但这仍然是一个

等等,这会很长的!在问我的问题之前,我需要解释一些事情

<>根据C++标准,如编译器中所描述的,编译器应该支持源代码中的Unicode,甚至更准确地标明UTF-8的标识符、变量、函数等。我知道Clang完全支持,我的意思是,你可以使用UTF-8编码的源文件,GCC只支持在标识符中使用\ U代码,但让我们假设我们生活在一个完美的世界中,在这个世界中,所有编译器都能正常工作

太好了!现在我不再需要用英语编写代码,最终可以用我的母语保加利亚语或者世界语来编写代码。毕竟,这就是标准要求的要点。但这仍然是一个巨大的问题。让我们看看一些没有真正意义的代码:

首先使用英语ASCII中的标识符:

int i = 0;
while(i < 100)
{
    auto f = static_cast<float>(i);
    std::string currentName = "name_" + toString(f);
    std::cout << getPrettyName(currentName) << ": " << getSalary(currentName) << std::endl;
}
然后使用保加利亚语的标识符,因为它清楚地显示了问题:

int и = 0;
while(и < 100)
{
    auto д = static_cast<float>(и);
    std::string текущоИме = "име_" + превърниВНиз(д);
    std::cout << красивоИме(текущоИме) << ": " << заплата(текущоИме) << std::endl;
}
如您所见,由于关键字和标准库,第二个代码仍然主要是英文的。这有两个问题:

它不帮助非英语的保加利亚人理解代码,假设他们不知道C++,那么他们仍然必须知道英语是合适的程序员,这不是这整个事情的要点吗? 实际上更糟糕的是,至少对我来说,写这篇文章很烦人。那些说一种语言的人,其字母表不是基于拉丁语的,知道要用不同的字母表书写,你必须切换键盘布局大多数人使用Alt+Shift。我必须切换布局4次才能写出每一行。这很烦人,而且很慢。 这适用于所有不以拉丁语为基础的语言:汉语、阿拉伯语、俄语、印地语

至少对于我来说,显而易见的解决方案是C++语言应该支持本地化关键字和标准库类,以便整个Unicode标识符都有意义。可能还有其他的,还有其他的。这样,保加利亚语的代码看起来会更好,编写起来也会容易得多。我并不认为保加利亚语的单词必须是这样的:

цяло и = 0;
докато(и < 100)
{
    авт д = статично_преобр<дробно>(и);
    стд::низ текущоИме = "име_" + превърниВНиз(д);
    стд::изх << красивоИме(текущоИме) << ": " << заплата(текущоИме) << стд::кред;
}
关于这些问题:

根据目前的标准,这实际上是允许的/可能的吗?我可能错过了什么… 有没有办法让我自己以一种体面的方式解决问题?宏可以用于关键字,但那太糟糕了。使用将在标准库类名称空间Сзз{usingзз=std::string;}上起作用,但是没有办法处理方法std::string::size->crmk?除了子类化…还是有? 如果不可能,甚至不考虑,人们应该如何向C++ Guuru提出这个标准?

只是要清楚,我不是说对于不同的语言应该有不同版本的C++——更像是它可以通过一些设置或包含或任何需要同时支持所有的东西。

< P>不,关键字固定在C++标准C++ 11、C++ 14等中…你不能改变它们,否则语言就不再是C++了。 您可以使用预处理器技巧,如:

#define стд std
或者,如您所评论的,使用С砦砦=std;;但是对于适当的关键字,如while,您只能用预处理器替换它们。但我不确定这是否有效,我真的认为这是一个非常糟糕的主意

一个C++程序员期待标准中提到的名字。别把他弄糊涂了


编程并不是用一种近乎自然的语言进行编码,而Cobol的雄心正是在这方面完全失败了。重点是编程很难,所以需要学习它,所以你希望程序员能够使用英语中的关键词和阅读技术文档英文。< /P> < P>不,关键字固定在C++标准C++ 11、C++ 14等中。你不能改变它们,否则语言就不再是C++了。 您可以使用预处理器技巧,如:

#define стд std
或者,如您所评论的,使用С砦砦=std;;但是对于适当的关键字,如while,您只能用预处理器替换它们。但我不确定这是否有效,我真的认为这是一个非常糟糕的主意

一个C++程序员期待标准中提到的名字。别把他弄糊涂了

编程并不是用一种近乎自然的语言进行编码,而Cobol的雄心正是在这方面完全失败了。关键是编程很难,所以需要学习它,所以你确实希望程序员能够使用看起来像英语的关键字并阅读英语的技术文档

太好了!现在我不再需要用英语编写代码,最终可以用我的母语保加利亚语或者世界语来编写代码。毕竟,这就是标准要求的要点

我敢肯定不是。T 该标准的要点似乎纯粹是与可能生成此类符号的其他编程系统兼容。毕竟,该规范并不要求在任何地方接受实际的utf-8。它唯一需要的是gcc中支持的\u转义

根据目前的标准,这实际上是允许的/可能的吗?我可能错过了什么… 不,不是。规范指定了确切的符号名称

有没有办法让我自己以一种体面的方式解决问题?宏可以用于关键字,但那太糟糕了。使用将在标准库类名称空间Сзз{usingзз=std::string;}中起作用,但除了子类化之外,没有办法处理std::string::size->Пззззззз的方法……或者是否存在? 您可以使用defines来覆盖它们,但显然,它将应用于所有地方的相同名称,这是非常不合适的

如果不可能,甚至不考虑,人们应该如何向C++ Guuru提出这个标准? 算了吧。这是一个极其糟糕、近乎邪恶的想法。请记住,大多数代码现在或将来都会由世界另一端拥有不同母语的人维护或至少审查。英语使这成为可能。从它转换将是非常非常糟糕的。至少对大型软件公司来说是不好的,记住C++标准委员会的关键人物代表的是大型软件公司。 太好了!现在我不再需要用英语编写代码,最终可以用我的母语保加利亚语或者世界语来编写代码。毕竟,这就是标准要求的要点

我敢肯定不是。该标准的要点似乎纯粹是与可能生成此类符号的其他编程系统的兼容性。毕竟,该规范并不要求在任何地方接受实际的utf-8。它唯一需要的是gcc中支持的\u转义

根据目前的标准,这实际上是允许的/可能的吗?我可能错过了什么… 不,不是。规范指定了确切的符号名称

有没有办法让我自己以一种体面的方式解决问题?宏可以用于关键字,但那太糟糕了。使用将在标准库类名称空间Сзз{usingзз=std::string;}中起作用,但除了子类化之外,没有办法处理std::string::size->Пззззззз的方法……或者是否存在? 您可以使用defines来覆盖它们,但显然,它将应用于所有地方的相同名称,这是非常不合适的

如果不可能,甚至不考虑,人们应该如何向C++ Guuru提出这个标准?
算了吧。这是一个极其糟糕、近乎邪恶的想法。请记住,大多数代码现在或将来都会由世界另一端拥有不同母语的人维护或至少审查。英语使这成为可能。从它转换将是非常非常糟糕的。至少对于大型软件公司来说是不好的,记住C++标准委员会中的关键人物代表了大型软件公司。

你可以编写自己的脚本语言来实现这一点:我会说你也应该坚持用英语做变量等等,这样你的代码就可以被广泛理解。你只需要接受学习英语是对C++编程的一个要求。实际上,在日语中,你根本不需要改变键盘布局。键入句子/单词后,只需按空格键,IME就会自动为您将其转换为正确的格式,如果需要,您也可以手动指定needed@L我不知道。编辑!如果你想从事编程或任何重要的科学相关职业,他们应该学习英语,否则即使在查找和阅读文档方面也很困难。你可以编写自己的脚本语言来实现这一点:我想说,变量等也应该坚持使用英语,这样你的代码就可以被广泛理解。你只需要接受学习英语是对C++编程的一个要求。实际上,在日语中,你根本不需要改变键盘布局。键入句子/单词后,只需按空格键,IME就会自动为您将其转换为正确的格式,如果需要,您也可以手动指定needed@L我不知道。编辑!如果一个人想从事编程或任何重要的科学相关职业,他们应该学习英语,否则即使是在查找和阅读使用Са=std的文档时也会很困难;比那更好。正如我所说的,宏是一个糟糕的解决方案,但我的意思是,用于关键字的宏将不起作用。我的想法是,也许标准应该允许这样做。如果是这样,C++程序员会识别它们,因为它们将处于标准中。另外,这件事的全部要点
是为那些不想在代码中使用英语的人准备的。如果我用保加利亚语的名字作为标识符,一些不会说保加利亚语的人将无法理解代码,即使关键字是英文的。@LyubomirVasilev,如果你用保加利亚语作为标识符,你将立即被解雇,即使是在大多数保加利亚公司。因为大多数公司要么与国外的人/公司合作,并且需要他们能够理解自己的代码,要么希望有一天能够做到这一点;比那更好。正如我所说的,宏是一个糟糕的解决方案,但我的意思是,用于关键字的宏将不起作用。我的想法是,也许标准应该允许这样做。如果是这样,C++程序员会识别它们,因为它们将处于标准中。另外,这一点是为了那些不想在代码中使用英语的人。如果我用保加利亚语的名字作为标识符,一些不会说保加利亚语的人将无法理解代码,即使关键字是英文的。@LyubomirVasilev,如果你用保加利亚语作为标识符,你将立即被解雇,即使是在大多数保加利亚公司。因为大多数公司要么与国外的人/公司合作,要么需要他们能够理解他们的代码,或者希望有一天能做到这一点。@ LyubomirVasilev,如果你问是否有必要把这个想法提给C++委员会,那么就必须讨论政治。因为C++委员会的决定将是一个非常政治的问题。@ LyubomirVasilev,如果你问C++ C++委员会是否有这个想法是有意义的,那么政治必须讨论,因为C++委员会的决定将是一个政治上的决定。