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

代码预览

求解鸡兔同笼问题

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

调用方法

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

4892 次点击
所在节点    分享发现
59 条回复
Rxianbei
2020-09-21 08:38:47 +08:00
@cmdOptionKana 是的,我觉得楼主这样的精神特别值得学习,不空谈概念,不反智反常识。就是默默的去做这件事。并且已经有了一个超过 demo 水平的产物。
另外强调,中文只是语言的载体。zn 业务的基础和亮点是面向业务的语言,而非中文。
missdeer
2020-09-21 08:45:49 +08:00
真心觉得这个有点 6
victor
2020-09-21 08:56:51 +08:00
@ClarkAbe 因为没有空格做视觉上的分割,所以我们看着很累,可读性差。
CrazyMoon
2020-09-21 09:16:19 +08:00
@cmdOptionKana 这些天天嘲笑中文编程的人,所竖起的靶子其实正是他们自己。就因为行业传统上使用英文编程,所以“祖宗之法不可废”,怎么能用其它语言写程序呢。而把自说自话地中文看成“民族主义”的做法,恰又证明了他们自己内心深深的西方中心观,凡是有一点违逆了西方中心的举动,哪怕只是为了服务现实业务,也都是“可悲的民族主义”。。
demohn2016
2020-09-21 09:19:24 +08:00
@victor 空格可以自己加的,这里演示表明不用空格也能正常工作
948936595
2020-09-21 09:23:14 +08:00
中文编程好,只要好用,我肯定用,我又不想专业编程,有各种哇
948936595
2020-09-21 09:24:32 +08:00
学起来简单,使用方便,作为业务后盾
wy7305e
2020-09-21 09:26:20 +08:00
下一步是摆脱阿拉伯数字
robinchina
2020-09-21 09:34:38 +08:00
有点文言文的感觉,如果能按现在的语法,只是对应单词换中文,可能会好读一点
demohn2016
2020-09-21 09:48:13 +08:00
@wy7305e 没计划,也没必要
yy77
2020-09-21 10:03:20 +08:00
其实保留字和语法可以留着英语,只要变量能够开放使用中文(主流语言应该都支持 utf8 了),那就是很大的进步了。其他变化就有点鸡肋了。
比如直接使用“鸡总脚数”,可读性应该好过“Sum_Of_Legs_Chicken”,尤其是大家的英语水平参差不齐的情况下。
如楼主所述,如果有约定的中文名,比如“年度集团销售总额”之类的,直接用就行。
wysnylc
2020-09-21 10:05:32 +08:00
中文关键字和中文命名是两码事,前者代表中文化编程后者现在的任何支持 utf-8 以上的都支持
xz410236056
2020-09-21 10:13:33 +08:00
@cmdOptionKana 计算机语言本质是符号语言,就现在那批语言,从变量到方法都可以搞成中文,但是有意义吗,除了打字的时候多打几个按键。搞语言不搞解释器这不耍流氓吗。
“Zn 语言采用 Go 开发。”看到这就没兴趣了
tuchg
2020-09-21 10:25:08 +08:00
其他不说,这种语法结构挺舒服的(ps:把现代汉语关键字换文言可能更合适,可以更简洁可能更舒服,也能减少费力的输入),楼主最初的出发点其实开发一个插件就可以解决
Chingim
2020-09-21 10:26:08 +08:00
Wenyan:

吾有一數。曰三。名之曰「甲」。
為是「甲」遍。
吾有一言。曰「「問天地好在。」」。書之。
云云。
Equivalent JavaScript:

var n = 3;
for (var i = 0; i < n; i++) {
console.log("問天地好在。");
}
Output:

問天地好在。
問天地好在。
問天地好在。





https://github.com/wenyan-lang/wenyan
liberty1900
2020-09-21 10:28:42 +08:00
@Chingim Python 可以更简单,用 range 2 行就完了
nguoidiqua
2020-09-21 10:37:45 +08:00
@cmdOptionKana

我没有说楼主空谈。

我是说你和那个 xuanwu 空谈,整天空谈“更适合国人”,“更容易入门”。那么请问用中文编程效率提高了吗?有对比数据吗?教别人更容易入门吗?有对照试验吗?写出什么好程序了吗?有案例吗?不拿事实说话,整天网上论优势,有意义吗?

大家嘲笑的是这种空谈行为本身,和成功不成功毫无关系,请不要曲解别人的意思。如果扎扎实实去实践,用实践说话,不管成功还是失败,都是令人敬佩的。
lucybenz
2020-09-21 10:46:50 +08:00
个人觉得楼主的需求解决方案应该是:变量名使用 [ 前缀 + unicode 编码] 来规范一致性,然后通过 IDE 插件实现开发过程中的变量 中文预览 或 中文注释
nguoidiqua
2020-09-21 10:48:41 +08:00
@CrazyMoon

扪心自问,搞中文编程真的和民族主义没关系吗?

别自欺欺人好吗?我十多年前也搞过易语言,我那时候年轻,我就是很民族主义,我现在也还很民族主义,我坦坦荡荡承认我就是出于民族自尊心去搞的,我不遮遮掩掩说什么有优势,我就是愤青。

但我就算很民族主义,我也是实事求是的民族主义,我不会因为我希望中文编程发扬光大就自欺欺人的谈优势,就自欺欺人的掩盖自己出于民族主义搞中文编程的事实,就自欺欺人的去指责别人“嘲笑中文”“迂腐守旧”“西方中心观”。

我很民族主义,我特别支持中文编程,但我非常讨厌自欺欺人不敢坦诚自己心态的那些民族主义分子。

我很支持中文编程,但我非常讨厌盲目谈“优势”的人,因为太虚伪了。
l00t
2020-09-21 11:05:57 +08:00
“默认使用 高精度小数 作为数值并参与运算,杜绝因浮点数计算所带来的计算误差。"



你的高精度小数是什么东西?定点数?

其实浮点数这点误差没什么关系……单精度的话倒是可能确实不够用。双精度基本上够用了。

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

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

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

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

© 2021 V2EX