然而目前来看仍旧没有看到能说服我的观点。
有人说我在上一个帖子里是为了杠而杠,那说明 1 他本身已经成见太深 2 没有仔细看我的回应
先不吹自己的编程水平了,目前是在没什么能拿的出手的,也不倚老卖老,就先总结几个常见误区:
1 中文编程多麻烦,还要切换输入法
对曰:这是输入法的问题,不是中文编程的问题
2 只不过是翻译汉化,没必要
对:不是所有的中文编程都叫易语言
3 中文编程能创造什么价值,有什么意义?
这个见仁见智,个人是 just for fun
4 有本事连阿拉伯数字都别用啊
对:为什么要这么极端呢?这才是为了杠而杠吧
另,麻烦想理性探讨的人:
2.1 中文编程的迷思 2.0 优秀的程序语言是不用括号和空格的
3。区分 programming coding 和 engineering。不要再把中文编程当作 coding in chinese 了 BBUH
PS:顺带也可以说说为什么我要掺和进中文编程这个领域:
101
absente OP @wutiantong 不完全是这个意思。把汉字直接替换到 APL 的效果我试过,一般般,替换到 J 还是可以的,但是也不实用。最佳实践还是,借鉴 APL 的思路,另外做一套符合现代汉语表达逻辑的 PL。关于最后[一切的本质]这个问题,我觉得不尽然,有种片面的观点认为,语言会影响一个人的思维和表达,我部分认同这个观点,换言之,programming in chinese 和 in english 的最后表达结果,可能有千差万别。
另一个关键的问题,如 @nekoneko 所言,冯氏架构制约了计算机发展,也限制了 PL 的发展。但这个问题不可能一步到位。非冯的芯片已经有人在做了,例如 TPU 和量子计算,编程方面主要不是刚需,所以改进可有可无(对于大多数人来讲 @learnshare 很多人可能还没有意识到这个问题的关键性,具体跟中文编程有点偏了,也不展开了 @zsdroid 前文其实说过了,做键盘开销大,不如做虚拟键盘 /即输入法,我是有这个打算的,排期预计明年春天动工 @charslee013 和 @yujiff 等认为中编是伪命题的可能没有理解顶楼的第三条,我也不再重复论述了。中文编程如果把简单的东西复杂化了,那它也是失败的。 另外感谢 @trait 和 @marcong95 的理解与支持。 最后回复两点:@mylopk 我其实也不知道中文编程最后能解决什么,但我可以肯定的说,现有的编程语言存在很多问题,即便是 erlang/APL/Forth,也有各自的问题,而更关键的是,所有的 PL 都近乎是各自的孤岛,我对这种现状还是心存不满,想要改变的 /哪怕做些尝试的。 @zhicheng 不知道你想看怎样的代码?如果是中文无空格无括号解析,github 上 bhuztez 已经有 poc 了。当然我也承认还没有拿得出手的 repo,如果没有 block 我,等有拿得出手的时候定会告知。最晚大约是 2019 年 12 月 |
102
Lanke0 2018-11-02 16:45:22 +08:00
大概懂那个意思,玩玩看嘛。
|
103
admol 2018-11-02 16:47:35 +08:00 1
你啷个楞个楞个楞个也
|
104
mozutaba 2018-11-02 16:57:47 +08:00 1
终极解决方法,拼音过度。中文打着打着就变英文了。
方法 = fangfa = fun 定义方法 = ding e fangfa = def |
105
jmc891205 2018-11-02 16:58:00 +08:00
可以叫 unicode 编程
这样我不仅可以用中文 还可以用 emoji 啦 |
106
nikolajiang 2018-11-02 16:58:03 +08:00 3
没有人黑你,自立靶子.
程序员中许多顶尖的来自中国,俄罗斯,印度,东欧. 他们第一语言大多不是英语. 但是英语沟通了全世界的程序员. 只是一种通用语而已. 你自绝于这个圈子,就好比一粒沙子掉进海洋. 没人在意的. |
107
lardud 2018-11-02 16:59:32 +08:00 via Android
傻逼用中文
|
108
newtype0092 2018-11-02 17:01:23 +08:00 3
just for fun 没问题,只是总有些中文编程布道师,打着国家民族的旗号的,搞些意义不明的事,误人子弟,这种人不狠狠黑一下对不起我一颗真正的爱国心。
你不和这些人划清界限,客观来说躺枪是难免的。 |
109
absente OP @jmc891205 Unicode 也有 unicode 的问题。个人觉得中文编程更适合解决现有的冯氏 PL 存在的通病,当然,不用中文也可以,就是多了一些数学符号罢了。emoji 也可以少量使用,多了也会本末倒置
|
110
absente OP @nikolajiang 我一个普通修电脑的,业余写点代码赚外快,不怕的。
|
111
wikinee 2018-11-02 17:07:25 +08:00 via iPhone
有理有据,令人信服。听过个说法,印度程序员这么牛跟他们官方语言是英语有关,想象一下哪天代码全中文,我们的阅读感受
|
112
wsh1108 2018-11-02 17:13:44 +08:00 via Android
感觉用什么语言感觉是硬件决定的,底层都是 abcde,用中文来操作这些,真的合适吗?要做也只能做基于某种语言的底层,比如在 c 上创造,但是这样还有创新的意思么。以上都是我胡诌的
|
113
absente OP @wsh1108 底层是二进制,中间层有 abcde。其实中间层是可以调整的,底层调整相对来说 1 不切实际 2 成本开销大
|
114
woodensail 2018-11-02 17:28:35 +08:00 2
我觉得没问题,不过你得把核心字符限制到 50 个以内,外加 50 个额外常用字符。也就是总共使用不超过 100 个汉字就行。
然后我就可以把这 100 个汉字引到键盘上去了。 |
115
zukai 2018-11-02 17:30:44 +08:00 1
不太明白这有什么可争吵的点,个人觉得:每个人发表自已的意见和看法,但没必要要求每个人都会认同我的观点吧
|
117
xermao 2018-11-02 17:54:42 +08:00
说中文编程好不应该举例说明好在哪里吗,来个例子呗,看看哪里好,大家能看出好处来自然是支持的
|
118
zhuziyi 2018-11-02 18:03:28 +08:00 1
|
120
xpresslink 2018-11-02 18:07:05 +08:00 1
我是想认真地和楼主讨论一下。
首先,请楼主先给中文编程下个明确定义。 我们好在统一的框架内讨论。不然有人把中文理解成所谓的翻译,鸡同鸭讲没有争的意义。 其实我们说编程语言的时候,如汇编、C、java、Python 来等,通常忽略它是使用某种自然语言,这些语言中有很多相同的关键字或类似的语法,它们的不同本质上主要是由于解释或编译器的运行机制之间的差别。 第二、请楼主说一下中文编程能解决编程中的那些痛点,这也就是中文编程存在的意义所在。 你不能去解决一个不存在的问题吧?不然楼花那么多精力,消耗那么多水电和粮食就是为 just for fun? |
121
haogefeifei 2018-11-02 18:09:07 +08:00 1
编程和语言无关,你看 iOS 上的 Shortcuts。。。其实就是编程。
|
122
caocong 2018-11-02 18:09:59 +08:00
不管中文语言 外文语言 有人用的语言才是好的语言
楼主认为“没有看到能说服我的观点” 恕不是“没有能说服众人的观点” just for fun 233 |
124
absente OP @haogefeifei 我认为可以无关也可以有关。shortcut 也好 tasker 也把,是基于 shell 脚本的思路,本质上还是冯氏的
@caocong 我比较自私,先满足了自己,再去考虑大众需求 @xpresslink 这两个问题,第二个我打算下周再回复一次,第一个:定义不是我能给的,如果是为了方便讨论,我想把范围缩小一下,缩小成[基于中文表达逻辑的编程语言],为了方便区分可以记为新文言。新文言算是非冯诺依曼编程语言的一个分支。 第二,就目前来说,分两块,主要是加快迭代[学习 /实践 /生产]周期。另一方面是探索性质的(如同前面提到的非冯 PL 关于第一个问题提到的[运行机制],前面也吐槽了,主要是太分散。我倒是觉得只要有一门 DSL 能把 runtime 都统一了,是不是中文编程都无所谓 |
125
ferock 2018-11-02 18:36:17 +08:00
参考 https://www.zhihu.com/question/24288510 不想多解释,如果看懂就行了。。
|
126
moposx 2018-11-02 18:44:55 +08:00 via Android
个人认为,可以搞,但没必要
|
127
719465553 2018-11-02 18:52:14 +08:00
楼主心态没崩住,jusf fun, why care other
|
128
xpresslink 2018-11-02 18:53:24 +08:00
@absente 没太明白你说的新文言 [新文言算是非冯诺依曼编程语言的一个分支。] 这也是一种符号语言吧?另外现在非冯计算机硬件还没有可用性,你这个非冯编程语言难道要跑在冯系硬件上?
加快迭代[学习 /实践 /生产]周期的实现原理是什么呢,或者说逻辑上为什么能学得快写得快呢?原因是什么呢,比如说用 C 比汇编开发效率高,是因为抽象程度提高了,用 Python 写代码比 C 要少一半,也是因为抽象程度高了。 |
129
mangoDB 2018-11-02 19:02:06 +08:00
如果就是单纯的把英文翻译成中文,我觉得没有太大意义。
|
130
sobigfish 2018-11-02 19:06:17 +08:00 1
如果没有自动补完的话,会不会一堆 not defined... ( 同义词太多而记错 )
|
131
edk24 2018-11-02 19:19:27 +08:00 1
易语言让我入坑了编程领域, 我很感谢它。 现在我重点都放在 PHP py 和 linux 上了。 现在偶尔依然用它解决一些问题。
近 10 年没有重构 /重点更新。 某些支持库都存在 bug 还是没有支持 unicode, 现在接触了“项目化管理” 它的源码二进制独立文件保存就有点不友好了。 优点就是易学, 能快速上手, 对英语不好的人友好(比如我)。 在 win 下开发 lin 程序并调试(可惜 lin 并不看中, 资料少, 支持库 bug 多, 库少的可怜) 一人包揽所有 开发效率也不低 对我个人而言, 易语言各方面已经跟不上现在的系统了。 生态圈活跃度也在逐步下降。 纷纷学其他语言了。 现在的年轻人姿势水平高 英语已经不是阻碍人们学习编程的门槛了。 况且你也不一定需要会英语(我连许多 py PHP 的关键字都只会拼不会读, 变量字段命名和调试错误也是用拙劣的基础英语+机翻解决问题), 照样行(啃开发文档就吃力了。。。) 我用易语言也揽了些活, 不能放下碗骂娘。 用它解决项目方便点的话, 我还是会用的。 好了, 想了一堆流水账 |
132
visonme 2018-11-02 19:27:42 +08:00
如果只是为了个人开心,无所谓了
如果只是在本国度内玩玩,无所谓了 但是你想跟全世界的人玩,那你就得考虑了,而且现在国内所谓中文编程,不知道 LZ 觉得有哪个是“质“的飞跃? 这很关键的~ |
133
edk24 2018-11-02 19:30:37 +08:00
@mangoDB 易语言的话, 好像是程序包括两个部分, 前段是 C++程序 后段是易语言的代码编译的二进制.
前段让 win 支持运行, 后段才是你的代码逻辑. 编译会把支持库(C++或者 delphi 编译的类插件 dll)写出到程序目录 "独立编译"是把支持库和程序打包到一块, 单文件程序. 启动时自动释放支持库 (类似自解压) "静态编译"是把需要用到的静态链接库放到程序里, 体积小 单文件 exe 在我看来不是简单的"翻译"其他语言, IDE 和代码纯文本的语法类似 VB. 许多人就说它是"VB 翻译机". 实际体验过的人就知道不一样的 |
134
hoobyy 2018-11-02 19:33:39 +08:00 via Android
支持楼主,我也有同样的想法。
|
135
wlwood 2018-11-02 19:39:39 +08:00 via Android
撤了这么多,有个 luan 用?
有这时间在扯,还不如立马开始。 只不过希望楼主到后来不要又找借口说做不来。 楼主这样,就像我们当年,看了黑客与画家,然后去学了 lisp 一样,以为掌握了上古神器。多年后才发现,那时候是多么的幼稚,可笑 |
136
absente OP @xpresslink 对,算是一种符号 PL,冯到非冯是个循序渐进的过程。反正我是不打算等冯氏式微了才动手,所以 HAL 是肯定会用到的。但我的本质是想统一 runtime 的调度,所以这个新文言 PL 有没有必要,我自己还没有定论。就好像我做输入法插件,用 typescript 短期内绝对够用。
关于[加速迭代的实现原理],其实就是让抽象自然化,让写代码 /看文档 /改代码 /改文档的过程中,减少思维切换的耗损,所有能一体化的都一体化,简单说也就是更高且更自然的抽象。APL 本身已经证明了这种抽象思路的可行性和潜在的 advantage,加点中文只是为了让自己用着更顺手一点,本来也没有什么国际化的打算,刻意写太多英文反而是跟自己过不去。 @visonme 我觉得质的飞跃,对于中文编程来说有两种,一种是,中学生也能在最小外语负担的前提下完成一个(比如安卓 app )的软件开发,期间他不需要借助中英文翻译工具。另一种是,中文编程实现了开源的生态闭环,且生成的机器码性能不弱于 rust。 @ferock 我看过类似的言论,总的来说,个人是搞工程的思路,核心就是解决问题,跟搞学术不一样。而且你看搞工程的,我就拿土木距离把,应该没那个单位可以讲究 international 吧,一样的道理,就是为了高效。母语带来的效率提升,是因为节省了中间层,这可以类比静态 PL 直接生成机器码而不是依赖字节码+runtime 的形式,背后带来的性能提升。 @wlwood 我会努力做实践的,但再不乱立 flag 的同时,也需要说明,个人主要是为了优化编程这个过程,因此做输入法插件才是我的业余重心,中文编程不过是顺路的。关于黑客与画家,不知道你是什么时候看的,反正我也看过,但是庆幸我先遇到了 erlang,所以没有 care lisp 一族这种缺乏实用性的 PL。私真正的上古神器只有 3.5 个: APL,Forth,Prolog,还有半个是 erlang。 |
137
qiukong 2018-11-02 20:32:34 +08:00 1
支持是很支持,但目前计算机底层都是依据英文逻辑来编写的,如果中文编程我觉得应该更多地改造计算机基础。
|
138
Trim21 2018-11-02 20:36:14 +08:00 1
@absente #101 我在 github 上找到了 bhuztez 用户, 然后发现他并没有一个叫做 poc 的 repo, 不知道能不能直接发一下链接?
|
139
absente OP @Trim21 poc 是[概念验证 /proof of concept]的缩写,代码主要是这两个:github.com/bhuztez/shu github.com/bhuztez/85 更多的他是把内容发在知乎了(有些匿名了有些删除了
|
140
cnt2ex 2018-11-02 20:40:30 +08:00
你既然要说 notation as a tool of thought,那应该举出中文的优势,而不是说 just for fun。
中文在一些方面有好处,也有一些方面并没有好处,但我认为这些东西最终和语言无关。 比如我认为中国人可以很快背诵九九乘法表的原因是中文数字发音有规律。 又比如 >问曰一二三相加。 >答曰六 以及 >九章算术里只用相加就可以表达清楚的概念,西方在几百年后仍然还要使用\sum_{i=0}^{n} A_{i} 这样拙劣的记号。 你说这一点,显然是\sum_{i=0}^{n} A_{i} 这个记号比你用相加要高级,例子中的相加,无非是加一堆常数,而\sum_{i=0}^{n} A_{i}是在加整个未知的数列,并且这个数列的大小可变,并且利用这个表达式,我们还可以很快的写出乘法的分配率的式子。 但是说白了其实这 2 个的区别无非是\sum_{i=0}^{n} A_{i} 用的是前缀表达式,而“一二三相加”用的是后缀表达式。当然我可以改造中文的后缀表达式使他达到类似的效果,所以这最终这和语言没有关系。 |
141
absente OP @cnt2ex 这两段内容是 bhuztez 说的,我只是引用了一下,个人基本赞同他的这方面观点。关于你说的[快背诵九九乘法表的原因是中文数字发音有规律],这背后的规律,我认为是颗粒化 /或者说 离散 /单音节化。中文的好处无非是书写和语言分离,这样保证了语言逻辑的统一,不至于因为方言口音的偏差而碎片化。
\sum_{i=0}^{n} A_{i} 这个和你说的[并且利用这个表达式,我们还可以很快的写出乘法的分配率的式子。],其实 bhuztez 想说的是,j 里面只需要借助两三个符号组合就可以了。 关于[说白了无非是前缀表达式][二相加用的是后缀]这里纠正一点,APL/J,包括 bhuztez 的九章算术,用的其实是中缀。这是 APL 和 LISP 的主要区别之一。 至于[所以这最终这和语言没有关系],我认为这个结论不够充分。除非有足够的证据可以证明,自然语言的差异不会影响一个人的逻辑和思维表达。 |
143
cnt2ex 2018-11-02 20:59:41 +08:00 1
@absente
我是认为自然语言对一个人的思维有影响的。但是到编程语言上没有区别,因为编程语言本身就是高度简化的。而所谓中文编程也无非就是把几个英文字符替换成中文字符,这没有任何本质上的改变。 除非你说用中文的思维设计一种编程语言,但实际上这种编程语言的字符本身就没必要限制成中文字符,最终又回到了其实用中文英文没有区别的结论上。 |
144
kingwl 2018-11-02 21:53:33 +08:00 1
如果只是改下 keyword, 允许 identifier 为中文 确实意义不大
感觉上更重要的是适合中文的文 /语法和 type interface(如果有) 另外 runtime 准备用啥呢? llvm? |
145
octobersnow 2018-11-02 21:53:51 +08:00 via iPhone
长时间用的,我愿意多花功夫,玩玩的你随意,你开心就好。
|
146
shadeofgod 2018-11-02 21:57:34 +08:00 1
当你想推广,想安利,想说服别人认同你的观点,这个时候早就不仅仅是个人 just for fun 了。
你理所当然的会遭遇反驳,针对,和所谓的黑,你不能这时候又拿出 for fun 当盾牌来指责别人。 其实根本就没有什么什么英文编程、中文编程,编程语言的语法你可以设计任意的符号来指代每一个指令,这个符号是中文还是甲骨文本质上都没有什么区别。但是编程这件事本身已经有了庞大的生态建立在英文的基础之上,不是编程语言第三方库和工具这种生态,更是计算机科学本身的生态,这是一个无法跨越的壁垒。 |
147
absente OP @kingwl 初期用 erlang 的 BEAM,互通的问题,一步步来,明年能实现 erlang 跟 py/node.js 互通就不错了。当然,也有很多现成的 FFI driver 可以借鉴,只是总感觉现有的 interface/driver 还是太分散,大多不实用。
|
148
czk1997 2018-11-02 23:21:07 +08:00
就是 keyword 和 identifier 是英语的而已,中文英文无所谓,本来好多语言都支持用中文或者其他 Unicode 来作为变量和方法名。反正哪个最后不是到汇编码啊……为了中文而中文一点用没用。
|
149
xuecan 2018-11-02 23:25:20 +08:00 1
难得看到 erlanger 赞一个
|
150
innoink 2018-11-02 23:31:53 +08:00 via Android
你都 just for fun 了
|
152
qiumaoyuan 2018-11-03 00:32:43 +08:00
我就知道很多黑人会编程
|
153
ferock 2018-11-03 00:46:40 +08:00 via iPhone
|
154
lscho 2018-11-03 00:54:32 +08:00
如果没有 c,没有 c++,没有 java,没有 python,没有 php,计算机刚起步的时候,别人提这个观点,我是赞同的。。。但是现在,我持反对意见。。
既然 just for fun 了,就不要在社区讨论这个问题了,没意义。 |
156
kawkeye 2018-11-03 03:00:55 +08:00 1
己所不欲,勿施于人,你既有所好,何必劝说他人为伍,尽管你是如此的特立独行,那就实践见真知.
|
157
shutongxinq 2018-11-03 06:36:44 +08:00
请教一下楼主,请问什么是非冯 PL 啊?能不能给一个详细而精准的定义啊?
不然定义都没有讨论不下去啊。 况且我之前很惭愧没有听说过这样的词汇,你是在讲某类 DSL(domain specific language)吗? |
158
jzq526 2018-11-03 07:29:08 +08:00
如果只是自己研究或者好玩,什么文编程其实无所谓。但如果是要推广,或者说让别人接受,就要考虑很多现实问题。毕竟已有的语言,尤其是比较流行的那一批,从出现到现在过了这么多年,相关的产品已经非常丰富,比如 Java 或者 python 的那一堆框架,所以要别人接受,就要考虑别人的需求。
即使中文编程比现有的技术有非常大的优势,也不会让大家一下子接受,只能等他们老去,或者老技术死去,才有可能。 现在还有些行业在用 DOS 呢,不是他们不知道新系统更好,而是老的还能用,何必重复投资呢? |
159
absente OP @ferock 这位同学把古汉语和文言文搞错了。古汉语编程目前来说才是伪命题。
@lscho 如果这里非常不欢迎 just for fun 的讨论,那就别叫 V2EX 了。当然,为了减少不必要的无关言论,我已经主动下沉了 @kawkeye 没有劝说的意思,只是想普及一下 notation as a tool of thought 的思想。 @shutongxinq 参考 https://en.wikipedia.org/wiki/Von_Neumann_programming_languages 。关于 DSL,只是个人认为适合中文编程的一种形式。 @jzq526 个人也是使用主义,关于重复投资的问题,我认为如果中文编程如果等价于毫无意义的重复投资,那也同样是失败的 |
160
karllynn 2018-11-03 11:00:09 +08:00
just for fun 你用啥都可以吧…有讨论价值么,娱乐性编程语言多得很
|
161
jzq526 2018-11-03 11:27:14 +08:00 1
@absente 你理解错了,当然也可能是我没说清楚,中文编程不是重复投资,我举重复投资的例子是为了说明前面的那个观点:既然现有的还能用,就没有必要更新。中文编程的推广也是如此,即使中文编程有明显的优势,想要别人接受,也存在对别人来说是“重复投资”的问题:现在的技术能用,没必要学习和使用新的技术。即使中文编程能够显示出很强的优势,也需要时间来让别人接受,就像 IPv6 一样,你能找出无数比 v4 强的地方,但大多数人就是不用,因为现有的技术缝缝补补也凑合能用了,没必要重新部署,更没有必要重新购买设备。只能等到老设备慢慢淘汰,换新设备,换新管理员,换新技术,尤其是有了新需求,才能逐步普及。
我谈的是个新事物被接受的问题,和是不是中文编程关系不大。 最后,既然是 just for fun,祝开心 |
162
atcdef 2018-11-03 12:03:58 +08:00 1
1 中文编程多麻烦,还要切换输入法
对曰:这是输入法的问题,不是中文编程的问题 连自黑都黑不到点子上,谁和你说要切换输入法了?易语言明明支持首拼和全拼录入的,根本不用切换输入法,仅仅是在定义中文变量时,需要先用中文输入法来输入中文。对于已定义的中文变量、函数之类的都是直接首拼或者全拼上屏的。 我可是真正实打实体验过易语言的,哈哈。 另外,我认为中文编程很有必要。 |
163
atcdef 2018-11-03 16:36:03 +08:00 2
实际上对中文编程语言,很多人都有一个极端观点,认为既然是“中文”编程了,就不应该写 abcde123 了。我觉得大可不必。中文编程语言在我看来,优势有两点:
1,不需要进行中文转换,直接考虑业务逻辑即可。 2,中文代码可读性更强,更加精练。 但易语言,并不是中文编程的方向,他的缺点在于:闭源,代码是二进制格式,脱离了 ide,那代码根本没法看。当然呢,不可否认易语言确实是中文编程里目前最好的,没有之一。 我想象中的中文编程,应该和 python 之类的一样,进行关键字的中文化( 当然不是一对一中文化,那样翻出来估计很别扭)。 至于必要性,无需讨论,那么多的易语言用户用事实说明了其存在的必要性。 |
164
absente OP @atcdef 感谢建议。我先按顺序回复:1 其实没有自黑,只是举了另一个帖子里面无脑黑的理由 2 我也体验过易语言
这里有我的一些关于翻译的观点 https://github.com/program-in-chinese/overview/issues/44#issuecomment-435580057 |
165
ferock 2018-11-03 19:40:09 +08:00 1
古汉语编程目前来说才是伪命题
为啥你说是伪命题才是伪命题,别人说汉语变成是伪命题,就不是呢?。。。这也看来,这帖子是完全毫无价值 |
166
absente OP @ferock 应为古汉语没有一个特定标准,是实现不了的。汉语指的是语言,是说的,不是写的,而且古汉语已经死了,中文还活着。希望你能明白这点,如果说价值,我没指望自己说的每句话都有价值
|
167
absente OP @ferock 别人说汉语是伪命题的前置条件,是他们认为语言和编程本身完全无关,而我不这么认为。我认为是有部分相关的。比如英文的 for in 你就没办法在中文语境里面找到一个完全等价且同样简洁的表达。
|
169
JerryCha 2018-11-04 11:29:26 +08:00 1
可以搞关键字允许中英文混用,最起码可以解决忘记切输入法带来的符号错误问题
|
170
dwcz 2018-11-04 12:11:18 +08:00 2
中文编程的问题是现有搞的人,没有找到正确方向。不是汉化就是文言文化。
其实,中文编程现阶段最缺的是文本解析工具。正则是解析拼英文字的,而汉语正好有很多句法是正则不擅长的地方。在技术上表现为有大量前后配对,标志符在左中右的情况都有,而且还有混用的。汉语更看重句法,比西方文字高一个维度,字词是对应的是单、多元音和习语。而西方还没到解析习语的场景,等到了,中西文都必须面对这个问题。 再就是,汉语或其他自然语言是现有编程语言上更进一步的抽象,这就要求中文编程的模式必须提供更抽象的概念定义和更多的转换机制。 现在,西方编程语言其实在走回头路,由于 c++等语言在进一步抽象上的失败,新语言只是有了更多的限制,而不是代码灵活转换。 中文编程只要有了文本解析工具,再添加运行逻辑语句,就是一个编程语言了。现阶段,中文编程的使用场景是小工具自动化上。就像评论中有人说的,现有的以串行计算为主的体系不能发挥中文优势,中文或其他自然语言需要并行检索为主的体系。 编程语言的功能结构上其实就是文本解析、模式转化和通信约定。没有文本解析,后两步也不好展开。 至于输入法,是不干正事。人们聊天从来没有说用输入法别扭的,说编程别扭是因为表达方式不一致。有符合中文表达方式,这就不是个问题了。说到输入法不干正事,其实输入法对中文编程是优势。输入法平台可以提供像自动补全、截图、按键精灵、剪贴板管理、快速启动管理、翻译转换等功能。 能解析类似如下中文代码,估计也没多少反对声音了。 姓名是字符串 年龄是 8 位正整数 工资是 32 位浮点数 增减是自然数 表的项目为姓名、年龄、工资、增减 //结构体 其动作:登记,参数为姓名、年龄、工资 //方法 { 姓名给项目的姓名 年龄给项目的年龄 工资给项目的工资 } 统计表的值类型是表,其长是 3 //数组 动作:汇总,参数为表,结果为自然数 //函数 { 循环计数 } 解析: 循环计数 { 表的迭代器,值(工资)给连加器 连加器的值给输出 } 入口: { 名为大学的统计表,长为 4 大学登记(“张三”,25,5000.00 ,-1000 ) 汇总大学,值给总数` 显示,格式:"总数"+总数+“/n ” 显示,格式:"变化:"+工资+增减(左对齐)+“/n ” } |
171
absente OP @dwcz 是的。我也是觉得 DSL 比较可行。这里有相关的历史讨论
github.com/program-in-chinese/overview/issues/89 github.com/program-in-chinese/flo |
172
dwcz 2018-11-04 22:36:44 +08:00 1
@absente DSL 作为实验可行,但要工具化,还是太单板了。中文是一种重义轻形的语言,不同事物的相同形况会用不同表达方式,或不同事物的不相同形况用相同表达方式,这就必须提供自定语法功能。我的想法是模仿 C 抽象汇编,主要的是中文,细节还是部分原来的。数据的抽象,西方基本完成。但语句的抽象,由于拼音文字的影响,西方基本不可能进步了,所以他们转向函数式编程。现有编程语言是由底层开始抽象,这是由事物发展造成的。而中文编程是后来的,而且中文思维本身也是由顶向下扩展的。所以中文编程应该是像写框架一样,先描叙整体,然后逐级扩展到描叙细节。而这也需要在语法上提供自定编译器行为。再就是串行编程模式已经到头了,以后是并行编程模式了,所以语言上肯定是并行设计开始。
|
173
absente OP @dwcz 你所说的由上至下,其实可以分两方面来看。一方面是先写接口,然后往下写实现。另外还有一种方式,就是类似 prolog 和 miniKanren,用回溯和 unification 来求解问题的答案。关于多义词的问题,用 APL 的思路是足够解决这类情况的。具体实现还带摸索
|
174
dwcz 2018-11-04 22:58:11 +08:00 1
@absente 我感觉其中的难点在于自定编译器行为的描叙,语言是要能满足人和机器的要求。现有的工具都很呆板,函数式编程中一点亮点。但都不能覆盖全部要求,有时直接替换还好用些,毕竟人知道目的,机器不知道。是考虑用接口模式,但有点贪心想让机器更聪明点,多完成点事。还在打草稿阶段。
|
175
947211232 2018-11-05 08:53:58 +08:00
很奇怪哟~
“ 1 中文编程多麻烦,还要切换输入法 对曰:这是输入法的问题,不是中文编程的问题 ” 编程难道不是为了解决麻烦的吗,中文编程不应该是为使得更高效更便捷地开发吗,难道就不觉得...... |
178
dwcz 2018-11-05 23:19:36 +08:00 1
我想到一个办法,应该可以结束关于中文编程的争论。现在,中文编程基本是空想阶段,实现工业级的编译器基本不可能。那还不如先用设计中的中文编程语言直接写编译器的源代码,这样既可以完善语言,也可以完成源代码。最开始的高级语言本来也是从伪代码中诞生的。
|
179
absente OP @dwcz 直接自举好像也不是不可以。目前我的思路是,一边做 vscode 插件来改进符号 /中文输入,另一边用 elixir 写中文解析 /直接生成对应的 PL 代码 /先生成 py 和 rust 就够用了
|
180
dwcz 2018-11-07 00:01:44 +08:00 1
@absente 做 vscode 插件意义不大,毕竟中文编程没成体系前用的人少。要是当技术沉淀,也可以。解析转换成其他代码,倒是关键技术之一。rust 中有很多技术同中文编程相一致,要不是死活不愿意全面支持 U 编码,本可以成为中文编程暂时的替代品。 说到 vscode 插件时,突然想到可以想宏一样,提供短代码转换,不过这不是中文编程了,是宏了。
|
181
absente OP @dwcz 顺着前面的思路,我想到了一个结合 repl 的比较可行的方案。关于宏的问题,我觉得只要解决了的问题,算不算中文编程其实就不那么重要了。
|
182
dwcz 2018-11-08 22:38:02 +08:00 1
@absente 做为一个方案可行。但我个人认为不能突出中文编程的优势。中文编程毕竟是用中文思维和中文表达方式来实现代码即文档,为编程提供另一种书写模式(从上至下的),从而让机器尽量自动化干枯燥的事,让人更清晰表现概念。相对拼音文字,汉字汉语的编码方案描叙概念和逻辑更精确。相对数学等式,灵活度要好些。放弃这些,用半格式化实现,有点可惜。当然,中文编程中肯定有一部分是格式化表现。
|
183
absente OP @dwcz 结构化或者格式化感觉在演进的过程中没法彻底避免,当然最后肯定是要往更纯粹的方向走。数学化在提升通用性的同时,自然会在其他方面有所损失,这个也是避免不了的
|
185
dwcz 2018-11-10 15:59:03 +08:00 1
@absente 我认为自上而下,可以利用中文语法、更抽象的类型系统和自定义语句解析来实现。结构化可用于代码整体布局,格式化可用于文字表达不利的情况。而中文用于描叙代码逻辑和抽象概念。现在主要问题是解析文本比较复杂,有点数据库的味道了。再就是为了更方便地完成上下对应,可以把数据和函数进一步抽象成统一的概念。中文对同一物描叙的方式可以多样化,必须得有自定义语句解析功能,也为上下对应提供机制。
我粗划分一下词法与代码结构的对应:名称是类型,动作是函数,状态词是维度(比较级),形容词是改动维度,数量词是数,其他是设定逻辑和状态。 中文编程就可以设定一些顶层格式定义: 名+动 表使用方法 动+名 表使用带参数的函数 名+动+名 表使用带参数的方法 动+"成"+名 表设定 的地得字句 表所属 是字句 表定义,定义名称、动作 为在中 表定义,定义类型 为在首 表条件的对象默认为前者 被字句 表最后为重点 给字句 表传递赋值 不字句 表逻辑非 和字句 表逻辑和 或字句 表逻辑或 有字句 表下属 了为尾 表完成状态 很为首 表比较级的首尾 在。。为。。时 表条件 是否 表检测 |
187
absente OP @dwcz 这里有做过类似的尝试: https://zhuanlan.zhihu.com/p/46030123
|
188
dwcz 2018-11-10 23:08:13 +08:00
@absente 这是一种表示方法,有其它的也行。文本的好处是写起来方便,有笔有纸有概念就可以开始了。这只是表象,反正编程多样化也是趋势。那个尝试感觉只是解决解析部分,而自动化方面更趋向于函数式编程。不太喜欢函数式编程,函数式编程的理念好是好,就是遇到复杂时,代码的灵活性就太差了。中文编程的优势中就应该有灵活性。
|
189
absente OP @dwcz 文本的形式,差别在于,手写的其实是图,而键入的实际上是线性字符串。只要脱离了单行文本限制,其实就能方便很多,再往后其他形式也是类似。
关于那个 poc,是有一点 FP 的影子。我都是对 FP 没啥意见,当然纯 FP/为了 FP 而 FP,不实用也是显而易见的。关于灵活性的问题,Forth 和 APL 的思路更具可参考价值。 |
190
dwcz 2018-11-12 16:59:02 +08:00 1
@absente 我还是倾向 C 体系,函数式编程的思维是从小到大,这与中文编程的宗旨相反,并没减少学习成本。函数式编程并没考虑让机器干更多的事,只是划分的更细致。这一点加强类型系统和进一步抽象就可以把函数式编程的优点学过来。同时也可以让机器多做事人少做事。比如,不论哪种编程模式,最终干的就是以下三件事:解析、转换、通信。以此为基础类型,进行扩展再加上拷贝和引用两种数据模式。串法的工作方式就都包括了。并发的也只是把通信提级后的串发拷贝。而函数式编程弱化了这些概念,反而造成串中有并,并中有串,整体上的混乱。有系统的类型系统,让机器自动完成代码也更容易。这也是现有语言的通病。
|