-
Notifications
You must be signed in to change notification settings - Fork 34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
中文化 类C编程语言 需要什么样的关键字? #40
Comments
我的主张关键字还是应该与长期以来形成的一些习惯保持一致,就中文关键字来说,字符最好控制在2到4个个,不要太长也不要太短,还有就是各种语言虽然关键字不同,但是中文能统一是最好的。 |
其实问这个问题之前,我希望的都能找到一个字对应,最好了。比较适合懒癌患者。 可以统计一下,哪些关键字用得多,就尽量短一些。 我的脑洞: switch 切 if 如 return 回 break 破 new 新 this 此 try 试 while 、for 和 in 还有好多没想好 |
希望这个讨论不会太分神(因为太见仁见智, 就像推敲诗里的取字一样)妨碍编译器修改的进度 :) 话说回来, 也许需要一些例程, 囊括所有关键词, 写出来看看视觉效果. 比如(来源), 只包含了几个:
虽然够醒目了, 不过感觉有些不大自然. 当然, 英文关键词对于英文自然语言很多也是很不自然的 :) 不过那些英文关键词是好几十年前成型的, 相比现在可读性要求可能比较低, 咱们的起点可以考虑高一些.
@nlpguyz 不知你有没有认识有中文/翻译专业背景的一起讨论? |
要不把CTS的关键词中英对照贴一下? 或者分享一下相关的代码链接? |
我赞成先作。作好了,可以随时改嘛。 |
int 整数型 switch 开关/切换 if 如果 return 返回 break 断开 new 新建 this 本体 try 尝试 还可再商酌 我认为没有必要在使用中文的时候还是一个单字,使用中文的好处就在于能达到一种类似”所见即所得“的效果,能够让代码有自解释的作用。使用汇编、C、高级语言,都是为了对程序员友好,增强可读性和可维护性的,减少代码量是实现这两个目的的副产品,因此不要节省,像 @htwx 说的,2-4个字符都可以接受,中文也有这个能力。 中文编程的另一个重要目的就是不需要人有英文的思维和相关知识,只需要关心计算机技术、算法、业务逻辑等待。对于我们这些已经会了的人,在做中文关键字和语言的时候,就要去除脑子里的这些思维定式,像有些关键字不好翻译的时候,正说明我们没有真正的理解,而是在机械的模仿,记住了判断情况很多就用switch,循环就用for等等,至于它是什么意思,并没有转化为母语来理解记忆。 我建议先按语言把关键字列出来,容易翻译的先确定好,不好翻译的我们分任务自愿领取,专门去查询一下使用这个词的原因,一起讨论,确定适合中文用户理解的翻译。 |
while 就是 当 |
@hummerstudio in 是我最头痛的一个。改语法我还搞不定,"在...之中"我找不到一个前置用法的词。不过我感觉古文中很有可能有,可以找出了再用用,大家习惯就好了。 前面的关键字都很正式,对于有赖癌的我来说,有些太长了。 |
@hummerstudio 我想了一下,可以多弄几个同义词。不过要改一改,clang匹配的文本和kw的方式,加起来才方便。不然加一个词都得source全搜一般,4,5处加一加。 |
要不在wiki里建个页面, 类似这样列出关键词和待定的可能选项? 然后有不同想法的可以自己添到"待选关键词里". 不过也许需要一个大致同意的'风格", 比如是否带"型".
|
我觉得中文关键字可以分为两类,一类是汉化已有语言的,不用要求完全符合汉语语法,汉化只是为了避免使用英文和混用导致的不一致性问题,这是中文编程的第一步(基于现有技术、时间限制和利用现有语言的需要),写中文关键字教程的时候可以提到原始英文,但写代码还是用中文来写。最终我们是希望能够按汉语语法来的,这个就需要我们自己来创造新语言了。
型不加感觉也可以。不要去想字母个数了,只想汉字个数吧!加上IDE的智能提示,其实效率会很高的!如何翻译可以再商酌,我查了下,像 在上述知识的背景下, @nobodxbodon 可以的。 |
wiki页已新建, 链接也添加到了顶楼 |
这是TS涉及到的
|
这些是TS里JSDOC涉及的
|
@htwx orz 拜托一下, 最后一个特别长的(ES5)能不能换成一个代码链接啊? github的issue连个分页也没有, 这样五千多行贴出来之后, 看之后的评论的会比较累, 翻到底要个好几分钟, 呵呵 |
我这个翻译的不好但是很全面, 这个也是我还没发布的主因. 关键字和相关术语及常用的标识符最好形成一个业界统一的标准, 成立个标准组织. |
这个歌CTS里面涉及到的内容实际很多包括了全部ES5 里面的方法属性 对象等等内容, 关键字及标识符汉化是很重要的, 我的这套汉化的不理想, 这也是我还没发布的主因. 关键字 根据我这些年的 经验 最好就是固定 2~3个汉字的范围内, 标识符 主要 分为:
最好要有一套方案
|
@hummerstudio @htwx is 是 keyof 键为 var 自由变量 RegExp 正则表达式 for 循环 typedef 自定义类型 空 null untyped 类型化 switch 假如 |
@swizl var 这个和 let 在ts 里挺冲突的 现在更推荐用 let 所以就把 var 翻译为 自由变量 意思比 let 变量 更灵活的意思 关于 of 是比较麻烦的 根据你的提醒 我感觉 翻译为 "求解" 在这种用法中更合适 类型求解 键型求解 怎么样 关于其他的都比我的强, 看来多讨论是有用的. 谢谢 |
@htwx 刚看了一下,var 和 let 用法上还是有一点区别的,var 从JS继承的,在JS里被诟病过的,let应该有些优化。当然主要是原词语义要对应上,一个用过原版语言的人能很快识别。 我建议 var 变量 let 让/设 我上学的时候,英文也非常烂。主要是对英文比较抗拒。 |
@swizl 像之前提到的, 如果不拘泥于它的现有关键词, 而是基于它的实际含义, 那么也许 另外, 在看到这个例子之前, 我也一直设想一个英文词在所有它所在的编程语言里都最好有同样的中文对应, 但是, sizeof在PHP里是求数组中元素个数的, 在Java里没有sizeof但核心库里有size, 也是求Collection中元素个数. 如果强求用词一致性, 似乎是延续了同一英文用词在不同编程语言中有不同含义这个问题. 是不是可以考虑基于在每种语言中的实际含义, 具体情况具体分析? |
clang 折腾新成果 void IdentifierTable::AddKeywords(const LangOptions &LangOpts) ; tok::PPKeywordKind IdentifierInfo::getPPKeywordID() const ; 就这么简单! |
@swizl 恭喜! 期待早日看到代码示例, 或者新代码库. |
来个最难翻译的 如果 class 翻译成2个汉字 怎么最好 @swizl @nobodxbodon @buyouyuan @hummerstudio |
"类型"? 其实感觉也需要推敲一下. |
class type object Object 这2个都麻烦 C++ 的原则要比那个麻烦点 他内部可能会有对关键字字符代码的验证,例如 关键字的长度 和 关键字字符是否为 ascii 等等 |
觉得这个解释有点借鉴: |
至少比 种类 强 听你的就叫 类别了, 那个最后 也改成 善后 或 收尾, 一会在把整理好的 关键字表 在发一遍. 号召大家继续改. 这个对语言读和理解起来太重要了. 导入 { 某某类 } 来自 "某某模块"; |
|
#40 (comment) 提过, 上个月写此文时愈发觉得, 语言设计(包括关键词设计)最好与使用结合. |
@nobodxbodon 我有认识学中文的,也有认识做翻译/同传的,但是这两类人,都不怎么跟编程打交道。而反过来,认识的会编程的人里面,[古文/文学/人文]功底比较深厚的,好像没有。我是学电子的,对古文字古汉语有业余研究,翻译的话也还凑合的那种。 |
上面的想法初步实现并成文在中文关键词替换体验页面原型. 欢迎各种尝鲜/改进, 以及添加覆盖更多关键词的示例程序. |
关于ts的泛关键词汉化,个人还是持汉化从简的观点,即有些部分不需要汉化,只需要简化。 个人认为,需要汉化的有以下:
可简化的有以下几个: // __双下划线可以考虑写成[内]
可有可无的有以下几个:
待定的有:untyped,__computed java的关键词里面,感觉不需要汉化的有: 可以汉化的有: 汉化/可有可无: (todo:最后,typescript和java取交集 |
我看了一下维基页,有几个问题。
我觉得关键字候选词列表应该再长一点,尽量能够覆盖所有编程范式,包括函数式编程、等等。 |
才发觉
|
稍微整理了一下在Q群的发言,关于中文化的编程,个人意见归纳成以下三个方面。 我的想法是在中文变量前加上对应中文的拼音缩写,无论中文有多长,缩写都只要3到4个应该足够定位,比如xm姓名,dz地址,主要是用来堵那些说打中文影响自动补全速度的人的嘴,这样无论是支持中文命名的编程语言还是完全中文化的编程语言都不影响自动补全功能了。——当然最完美的方案是能写个插件,直接让现有的各种主流IDE全部支持拼音缩写自动补全,那就可以完全省掉前缀的拼音缩写(VSC上已经有了一个由zj1d写的对应插件了,虽然是初版,但相当好用)。退而求其次的话最好也是能有个插件能在变量命名完成后自动提取拼音缩写加到最前。 而针对现有编程语言做一个新的IDE以及在IDE中添加输入法的方案个人认为不可行,因为每个人有自己习惯使用的输入法和编缉环境,而且还要考虑到五笔用户。不能让程序员改变原有输入法和编缉环境的习惯,所以不能让程序员换IDE,换输入法,这样会在普及中文编程上遇到抵制。 然后是类型缀词,我觉得以前受到原有英语规则影响让大家思维固化了,在已有明确声明的情况下再加同型缀词会显得多此一举,比如“class 学生”或“类 学生”就已经表明“学生”是个类了,再加个类字就没必要了,英文库中class Object也没写成class ObjectClass呀,用的时候大家都知道,实在不知道查一下声明,在使用时,比如“new 学生()”,明眼一看就能理解是“new”了一个“学生”,对新人来说也非常好理解,而“new 学生类()”对于老手来说无所谓,但对新入门的小白来说就要多绕一个弯了,老师也许要这么解释:从学生类中生成一个新学生实例,——感觉不是很友好的解释。 同理的“添加()” 即可,没必要“添加f()”来表明这是个函数。什么时候需要加类型缀词呢?比如想强调“姓名”是个全局变量,那么“姓名g”或“姓名q”都行,g或q放在前还是后还要考量一下,因为目前中文化的自动完成支持功能欠缺,我前面提出过为了兼容现有的IDE,在中文命名前加上3到4个拼音缩写,如果不得不如此的话,把变量类型的缀词放在后面可以避免多加一个下划线的麻烦。非加不可的类型缀词完全可以放在最后,因为其实用的时候程序员大多都关注变量本身,只有别人看程序的时候才会看一下这变量是个什么类型,因此把缀词放在后面就是真的点缀一下,需要了解的人就扫一眼最后,不关心的人甚至根本不用看。 另外,在缀词问题上为了区分“学生 学生”而专门变成“学生类 学生”完全没必要,Object object纯粹就是一种懒人命名,对实例加上特定的缀词能在声明时区别即可,比如“学生 学生实例”甚至“学生 学生o”(o即对象object,或用obj,表示是一个实例化对象),这样能避免在库本身上过多累赘用字,实例化对象缀词爱用什么用什么只要能区分都无所谓,库的命名简洁干练与规范化才能让中文库显得有足够的“范儿”。 二、现有标准库的翻译 对于已存在的编程语言,没必要强求关键字中文化,毕竟三五十个词没多大难度,不用追求极致中文化,怎么方便怎么来。中英混合并不难看,想想数学上不也是:已知 △ABC为等边△,也没人说难看吧,也不需要写成已知三角形ABC或三角形甲乙丙吧。所以要中文化的是已有编程语言的库,根据一套统一的命名规范把现有库中文化,我的想法是直接根据原库结构做一套相同结构的中文命名的库,直接调用原库,相当重打个包,这样原库开源的话被人升级了算法我们也不需要修改,而且一套同样中文命名的库还能做Java版、C#版,因为只是调用对应的方法而已,这样甚至更有利于代码转换,同一套代码甚至可以同时用于Java和C#,——复制过来,稍改几个关键字直接编译即可,主体代码基本啥都不用改。 在库的翻译上,目前了解到的做的不错的是草蟒,以Python为切入点是非常好的选择,毕竟是超新星,流行且想以之为入门的人也多。不过其中一些命名规范问题也很明显,就是前面说的有些拘泥于英文用词。草蟒的汉化经验总结页面上也说了“如果直译难以理解或意译更好的话,应根据其作用取意译”,我觉得应该反过来,以意译为主直译为辅,也就是符合国人的表义习惯就好,像elseif,“余如”、“或如”都不太符合国人的思维表义,“或如”更容易造成理解错误,因为“或”在逻辑上是允许两者都满足的。如果找不到更好的古文风的译法,直接“否则若”会更好些,若实在纠结两字,用“异若”“异如”应该也还行(如果不是“异或”早被用于另一个关键词的话这里用异或会更贴切)。翻译时尽量用书面化语言,不必强求光从命名上就能一眼看出作用而用些口语化的用词,会显得非常“不专业”。例如在Q群里讨论过的lru_cache,即使母语是英文的原生使用者,同样也要先查“lru”是什么意思如何用才知其意,那么反正都是需要做“名词解释”的,用“低频缓存”(低频缓存管理)就专业得多,“低频”即“使用频率低”,查者一看即明,群里有人建议用“少用缓存”就显得过于口语化了。 三、新的完全中文化的编程语言 这样做首先能避免一些原来就抵触中文编程的人嘲讽只是翻译了一下现有编程语言的关键字以落人口实(造谣一张嘴,辟谣跑断腿,说易语言就是翻译一下VB就是最好的先例)。同时也能带入一些新的角度考虑如何让编程语言有更多“中国范儿”。 |
of 之于,合音为诸 switch-case 检-索 |
在列表中->中列表/中于列表。此种介词,均可如此:在你左边 左你 左于你;在你们中间 间你们 间于你们 |
@program-in-chinese/all 为国内用户访问方便起见,新话题转到 Gitee 发了: HTML 标签中文化命名探讨 |
for(item in list) 这个感觉如何 |
现在使用中文方法多是在英文输入法情况下, 通过拼音首字母智能感知出来的. 但是考虑后面保持中文输入法的情况下编码, 这时候更多依赖的是输入法推测, 就我了解拼音输入法对于 比较长、比较特殊 的词有更快速精准的推导效果。 所以这里提个建议,关键词太短不可取(单字就别了重码率高, 2~3个字最佳,最长不超过5个字)。 |
@tldzyx 刚看草蟒里 for ... in 用的是 取...于...:https://www.grasspy.cn/guide/kw.html 关于关键词,个人认为只要阅读通顺、语法风格一致都可尝试。输入方面,不大确定IDE辅助能做到什么程度,如果能像标识符补全 这样 的话,单字与否似乎问题不大。 |
取...于... 这种看着简洁, 对阅读友好, 但是对输入就很糟糕了, 全面使用中文编程的话, 实际上输入法就是保持中文的状态, 而现在普及的是拼音输入法, 所以拼音输入法下输入效率高的是词而不是字, 单字输入基本要全拼, 而且重码率高, 也因此不推荐用单字做中文关键词. 如果说兼顾读写的话, 我建议是关键词用2~3个字的, 输入时思路不容易被打断(五笔拆字拼音重码), 然后因为关键字是会被编译器识别到的, 可以通过插件将完备的长关键词显示成短的关键字以优化读体验, 因为底层存储的实际上是长关键词, 所以显示映射成什么样插件可以灵活配置不影响实际的语法语义. |
@tldzyx 输入方面如果在实践中发现是瓶颈,总有方法改进体验(像上面提的标识符补全辅助插件)。个人认为语法设计上不妨先百花齐放,在实践中检验即可。顺便说下,之前尝试的 借鉴自然语言的语法设计 也有一些单字关键词。仅仅为了“可能”的输入效率问题而自缚手脚感觉不大值得。 |
This comment was marked as spam.
This comment was marked as spam.
您好,您的邮件已收到,会尽快处理回复您!
|
基于clang做中文编译,取得了一点成绩。
做出来是中英双语的,可使用中文关键字、中文符号,对原来的C,C++,Objective-C没有影响,安全兼容。
之前基于tinycc做的时候,有人嫌弃中文关键字选得不好。
目前还没动工,大家看看用些什么字词比较好?
Java, JS, Python, Go 等其他语言也可以一起讨论一下。
----- 追加 -----
关键词汉化待选列表整理在此wiki页
The text was updated successfully, but these errors were encountered: