Zn - 面向业务的编程语言

2020-09-20 21:13:24 +08:00
 demohn2016

GitHub 传送门:reg0007/Zn

写在前面

去年入职了一家新公司,负责的是一个行业的具体业务。入职没多久便遇到了命名问题:很多业务相关的名词都是用中文表述的,翻译成对应的英文相当困难。好不容易各种翻箱倒柜找到了对应的翻译命名,结果 review 同事的代码时直接晕倒:同一个中文名词在不同人手里有着 3 种完全不同的名字!

自此之后我便思考:业务代码说到底就是 CRUD,又不需要开源给老外看,为何不直接用中文命名呢?而目前大部分编程语言(如 Go, Python, JS 等)都是基于英文设计,直接使用中文命名必然会导致频繁地切换输入法,最终写出来的代码也不够协调;所以最后决定自己设计一门纯粹面向业务的编程语言吧!于是我就花了大约一年的时间去开发Zn

目前 Zn 的基本语法已经实现(见后面的图),但是距离一门真正可用的语言还有一段距离,所以目测会有些 bug,还请多多详解。

简介

Zn 是一门 面向业务 的编程语言。

所谓「面向业务」,即是为用户开发业务代码时提供便利,使得用户能够快速根据真实需求投射出简洁、稳定、可维护的代码。Zn 在设计之初即强调「以人为本」,希望程序能够适应真实世界的需求而不是让开发者去适应代码逻辑。

为此,Zn 拥有以下独特的特性:

Zn 语言采用 Go 开发。之所以选用它是因为它在开发效率以及运行效率间取得了平衡,而且里面内置的函数库也帮助省去了很多开发上的障碍(比如 高精度运算使用 math/big 库,里面直接使用 Go 自己的 GC 等);之后将 Zn 内嵌到已有的 Go 项目里也会变得十分简单。

详细见 GitHub

代码预览

求解鸡兔同笼问题

流程控制代码:循环、遍历、如果

调用方法

定义一个类,并调用其方法

5156 次点击
所在节点    分享发现
59 条回复
nguoidiqua
2020-09-21 11:09:56 +08:00
那个 xuanwu,我印象中,大概五六年前就在知乎看到过了,当时他就大谈优势了,我当时也问了他上面几个问题,到现在也没看他给出答案。

这么多年过去,他总是用一个台湾人拿 Python 混合中文命名写的几个小脚本举例,而且这都不是他自己写的。

喜欢一个东西,不管有没有优势有没有特别好处,不管出于什么心态,都可以去搞,这是个人自由。但你既然要宣扬什么优势,难道别人不能提出反对看法了?一旦别人提出反对看法,一个“西方中心”的帽子就盖上去了,这行么?
demohn2016
2020-09-21 11:11:55 +08:00
@l00t 是的,没有使用浮点数。
类似于 Python 的 decimal 库 https://docs.python.org/3.8/library/decimal.html
demohn2016
2020-09-21 11:13:47 +08:00
@l00t 只要有浮点数就会有误差,这里主要考虑到在金融领域计算金额时要求准确。
cmdOptionKana
2020-09-21 11:16:01 +08:00
@nguoidiqua

我是空谈,但我空谈的内容主要不是批评、批判别人,而是轻度鼓励一下别人。

你的空谈程度和我是一样的,但你空谈的内容主要是批评、批判别人。

其实论坛发言,空谈很正常,我从未开贴鼓吹中文编程,只是在有人作出这方面的努力时说几句鼓励的话而已。你我都在论坛划水,如果你评判楼主,还算切题,如果你忽然对围观群众说 “你怎么在划水”,这…… 我看来至少是跑题了。
tuchg
2020-09-21 11:17:36 +08:00
@Chingim 这个出发点就不是实用,没楼主这套实用
l00t
2020-09-21 11:18:40 +08:00
@demohn2016 #43 不要求的…… 保留到指定小数点位就行了。准确是不可能准确的。误差不仅来自浮点数,也来自数字本身。随便乘个利率什么的,都会出现一大串小数,这时候都得取整到指定小数点位。浮点数也只需要保证指定小数点位的准确就可以了。
jedihy
2020-09-21 11:18:55 +08:00
比英语门槛还高
nguoidiqua
2020-09-21 11:20:16 +08:00
实际上真正去实践,很容易发现一个情况:

中文少的时候,中文变量名、函数名很醒目,相当于点睛效果,确实很方便。但是随着中文比例加高,分辨就越来越难了。

所以实践下来,汉字、拼音、英文结合起来用才是最合适的,实际上工作中很多人都是这样灵活使用的。

如果适合用英文的时候非要中文,或者适合中文的时候非要一长串英文,那都是很扯淡的。
nguoidiqua
2020-09-21 11:38:07 +08:00
@cmdOptionKana

我不评判楼主,楼主只是做了个事情,没有表达什么观点,没有什么可以评判的。东西我也没用,也不打算去用,既然如此,我不可能去批判这个编程语言。

空谈是很正常,别人嘲笑这是空谈难道不正常?

至于我发帖的原因,因为你帖子先说别人“优越感”。而且,我开始没有批评别人吧,我只是反驳了“优越感”和“嘲笑中文编程”的这个观点,说明大家嘲笑的其实是“空谈”。

然后我鼓励大家去实践,扎扎实实用出成果,用事实说话,这个也不算批评别人吧?

后面有人“祖宗”“西方中心观”的帽子都盖出来了,我说下自欺欺人、虚伪不算很过分吧?
mdesi
2020-09-21 11:43:15 +08:00
支持,大佬加油,不过代码看着确实可读性不是特别好
icyalala
2020-09-21 11:44:41 +08:00
好!很有精神!
demohn2016
2020-09-21 12:48:07 +08:00
@nguoidiqua 认同第一句,其实我无意推广中文编程( i.e. 把中文当作是编程的目的而不是解决问题的手段)只是想在实际应用中解决问题。

事实上对于前述的 i,j,k,m,n , Zn 完全可以用单个英文字母表示:比如 ‘以 K,V 遍历数组’ 这样。非得追求全中文变量名(诸如 甲乙丙丁)除了给自己添堵之外没有任何好处。

Zn 更想解决业务相关的变量命名问题:比如 ‘function getPrizeReissueCensorList’ 和 ‘如何获取人工发奖审核列表?‘ 相比 显然后者对于母语是中文的人来说更加容易理解。
winglight2016
2020-09-21 12:50:32 +08:00
7 楼讲得挺明白了,但是很多人不愿意动脑筋思考一下,哪怕是做一下 SWOT 就能知道“中文编程语言有没有用”和“面向业务的编程语言有没有用”的答案。结果很明显,有用,但是和弊端比较,并没什么优势。

另外,我很好奇 lz 怎么从“解决面向业务( CRUD )编程”走到了“发明中文编程语言”这一步的?只是命名困难、不规范这种问题,应该有更便捷的解决方案呀——20 年前 SRS 模板里就有术语表 /Glossary 这一块内容了,后期维护一下也不是什么难事儿呀。毕竟,就算你用了中文编程,程序员还不是照样可以乱起变量名?
demohn2016
2020-09-21 13:03:55 +08:00
@winglight2016 Glossary 这玩意对于专门的 **名词** 很有用,比如将 `行情卡` 厘定为 `QutCard` ,因为这些都是有稽可循的;而对于动词效果就大打折扣了——我曾经见过对于同一个 “审核” ,在不同的业务里称为 `audit`, `check`, `review` 甚至 `censor` 都有... 尤其是 `censor`, 简直是拿 google translator 随手一查查出来的。

其实对于命名问题有两大方案:一是大家英文水平都提高(雅思 6.5 起步 LOL );二是干脆全用中文。lz 只是想尝试下第二条路可不可行 TAT
fuxkcsdn
2020-09-21 15:35:22 +08:00
不知道没有编程基础的人看起来如何
反正我看上面的示例感觉比看英文还吃力
chenluo0429
2020-09-21 17:26:50 +08:00
和 wenyanlang 一样,蛮有意思的。
没了解过语法和编译器相关的设计,请教一下,关键字和变量名之间没有分割,这样如果变量名中包含了关键字(比如“令”),会不会分词错误导致编译错误,或者结果和预期不一致?
还有令,为,之这些关键字很多都是偏文言的习惯用词,现在很少这么说,会不会导致新手入门理解困难?可不可以换成更加通俗一点的词作为关键字?
winglight2016
2020-09-21 18:48:46 +08:00
@demohn2016 我觉得,如果考虑到 programming language 的本质其实是不同于中文或英文的一种“严格定义”的语言,那么这种编程语言本身(关键字等)是不需要中文化的。至于你说的变量、类名、方法名的统一问题,我同样理解为一种“遵守约定”的能力,并不需要英语 6 级,需要的是项目管理能力,btw,如果真的想英语流利使用,6 级远远不够。最后,VB 就支持中文的变量、类名、方法名,20 年前我就见过这种风格的 HIS,并不需要额外的发明一门新的“编程语言”。
demohn2016
2020-09-21 19:04:54 +08:00
@chenluo0429 会,所以解决办法就是在变量前后各加一个间隔号,就像这样: ·将军令·

至于 为,之 等关键词这个确实可以商榷,这里选用偏文言的词汇主要是希望代码写出来更加书面一些,而且 “之” 要比“的” 适用范围更广一些(存粹是语感的角度)
msaionyc
2020-09-22 11:42:48 +08:00
语言名也别叫 Zn 了,直接叫锌,或者叫 xx 语言( xx 为汉字),去英文就去的彻底一点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/708829

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX