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

代码预览

求解鸡兔同笼问题

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

调用方法

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

4874 次点击
所在节点    分享发现
59 条回复
xgfan
2020-09-20 21:20:17 +08:00
给你介绍 @xuanwu
你们俩可以好好交流下。
cmdOptionKana
2020-09-20 21:55:13 +08:00
蛮好的,但,凡是中文编程都会遇到一个尴尬的处境:已经学会编程的人(程序员)没必要学,也不乐意学中文编程。而且,其中不少人怀有复杂的(由懂编程、懂英语等多种因素揉合而成的)优越感,他们会嘲讽中文编程。

因此建议向还未学会编程的人群推广,两个方向,一是作为入门的踏脚石,入门后改学主流编程语言;一是作为某个小领域的专用语言。
Cu635
2020-09-20 22:00:42 +08:00
这个和锌有啥关系?
love
2020-09-20 23:06:56 +08:00
喜欢看这类一本正经地搞笑
话说之前也有一个文言文版的,记不清叫啥了
JmmBite
2020-09-20 23:15:40 +08:00
有甲骨文版的吗
79bxh9b
2020-09-20 23:32:21 +08:00
nguoidiqua
2020-09-21 00:41:12 +08:00
每当提到中文编程,总会有人说什么适合教别人入门,我想了下,大概类似拿九章算术教别人数学入门,拿切韵教别人汉语入门一样。

中国使用汉字数字几千年,现在没看到谁提汉字数字比阿拉伯数字容易入门。中国使用切韵学汉字发音几千年,现在没看到谁说切韵比用外国拉丁字母编成的汉语拼音更容易入门。

更没听说谁指责使用阿拉伯数字和汉语拼音的人——怀有复杂的优越感、嘲讽汉字数字和切韵。实际上从来没有人嘲笑中文编程,用中文编程或者用中文编程语言都不会有人嘲笑,谁没有民族好胜心呢。

但要是天天高举着“中文编程优越性”的旗帜,实际上自己没用中文编程写几个程序,也没教出几个学生,只是反复到处空谈“优势”,那不被嘲笑是不可能的,大家嘲笑的不是中文编程,大家嘲笑的是“空谈”。

如果自己扎扎实实去用,最后写出更好的程序,或者效率更高,或者成本更低,教出更多、更好水平的学生,没有人会嘲笑,大家只会佩服,到时候什么都不用说,大家自然会群起效仿。
lostberryzz
2020-09-21 00:56:18 +08:00
英语比中文简单很多...
lamany
2020-09-21 01:00:51 +08:00
我现在面对的业务也是上百个变量,每个变量翻译起来都很麻烦。
所以就直接的在 Python 里使用中文变量名了,数据库也是用中文字段:)
pabupa
2020-09-21 01:07:31 +08:00
@Cu635 zh-cn ===> zn
catror
2020-09-21 01:31:30 +08:00
编程语言只是一个符号系统,用英文来定义符号(关键字),明显比中文要简单明了。你想象一下写数学公式解数学题什么的全部用中文,就会明白这个道理。
nguoidiqua
2020-09-21 01:36:11 +08:00
我一向的观点就是——适合用什么的适合用什么,我们拿工具是为了做事的,不是来搞工具民族主义的。

就好像你吃饭的时候不会想——番茄、番薯(红薯)、番椒(海椒、辣椒)、茄子、番石榴、番木瓜、洋葱、洋姜、洋芋(土豆)、胡瓜、胡桃、胡豆、胡椒、胡葱、胡蒜、芥兰、紫甘蓝、西葫芦、西兰花、胡萝卜、菠菜、黄瓜、莴笋、生菜、香菜、南瓜、四季豆这些是外来的,要吃本地原产食物。

以编程为例,关键字用 if else 之类,和非要写 若 或者 如果 假如 ruo huo 有蛮大区别吗?简单了吗?一定要中文才行吗?

像变量名、函数名、类名之类,如果不考虑国际化,有些用汉字或者拼音确实更方便,这个时候当然要用汉字或者拼音,但是像 i j x y z id by to set get run 也要中文化吗?更方便吗?

不见得。当然,想要纯粹中文化的心情是可以理解的,但强说纯中文更有优势就有点扯了。
chinvo
2020-09-21 01:37:06 +08:00
业务逻辑需要的不是中文编程, 而是 BDD
yuzo555
2020-09-21 01:50:46 +08:00
你这个方向有前景,但是重点应该是自然语言处理,而不是生硬地要求用户用你给出的关键词写八股文。
falcon05
2020-09-21 03:54:05 +08:00
这跟业务关系好像没多大啊?…
xuanwu
2020-09-21 04:35:37 +08:00
@xgfan 多谢,可惜好像 v2 不会提醒被别人 @ ?

to 楼主:建议先从自己开始在项目内特别业务相关的部分用中文命名( go 也支持吧),关于切换中英问题,用输入法选项“中文下使用英文标点”、再用“中文代码快速补全”vsc 插件或者 JB 系列类似插件 ChinesePinyin-CodeCompletionHelper 可以部分解决。

个人建议:既然 zn 还未达到实用程度,先在项目里用起中文命名来得到点立竿见影效果为好。毕竟读代码时间远超过写的,算下来还是很值得。

关于 zn,可否发介绍文章到知乎?希望可以收入中文编程专栏。最近也有其他一些中文编程工具出现,不妨一同交流一下。
number
2020-09-21 07:30:16 +08:00
如果能完成自举就更棒了
ClarkAbe
2020-09-21 07:56:51 +08:00
这代码看着好累,可读性极差
demohn2016
2020-09-21 08:03:47 +08:00
@yuzo555 其实编程语言从某种意义上讲就是八股文:通过约定某种特定的语法让计算机完成特定的事情。自然语言由于其多义性天然就和编程语言所需要的高效性相矛盾。
cmdOptionKana
2020-09-21 08:07:25 +08:00
@nguoidiqua 楼主已经把语言做出来了(虽然只是起步阶段),花了很多时间精力,你说楼主是空谈?

你的最后一段话 “最后写出更好的程序,或者效率更高,或者成本更低,教出更多、更好水平的学生,没有人会嘲笑,大家只会佩服,到时候什么都不用说,大家自然会群起效仿”

意思是:等你成功了,大家就会支持你。现在大家嘲笑你,不是嘲笑别的,只是嘲笑你没有成功。

就这,还好意思说 “实际上从来没有人嘲笑中文编程” ?

已经有国人开了个好头,你不参与进去就算了,还说人家是空谈。说人家是空谈就算了,还说现在说你空谈是鞭策你等你成功了我就加入你。就这,好意思说 “有民族好胜心”?

另外你说人家天天高举着中文编程优越性的旗帜,就更搞笑了,楼主很明显只是用中文辅助业务,起一个 “有点帮助” 的作用,没有“高举着中文编程优越性的旗帜”。在你楼上的评论也没有人把中文编程说得有多好多好,更没有人说民族好胜心。

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

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

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

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

© 2021 V2EX