program-in-chinese / overview

中文编程的历史、现状和展望。issue 中进行相关问题的讨论.
https://zhuanlan.zhihu.com/codeInChinese
GNU General Public License v3.0
385 stars 34 forks source link

讨论: 适合中文用户的编程语言和IDE, 侧重于现有语言/IDE不具备的特性 #11

Open nobodxbodon opened 7 years ago

nobodxbodon commented 7 years ago

一个用户对象是中文为母语的开发者的编程语言以及配套开发环境, 应该有哪些特殊的功能, 才有存在的价值和维持开源的社区动力? 暂且不讨论如何实现的问题, 先搜集需求和探讨设计. 这个目标虽然是远期的, 但总要一步步实现, 希望这里能迈出第一步.

基于早先的讨论, 个人整理的一些如下. 视野有限, 仅作抛砖引玉:

开发环境
    集成语言源码(编译器,标准库等),方便用户修改/改进语言本身或丰富库,并方便验证修改对已有项目的影响. 理想情况是开发环境本身也能在自身中导入进行开发
    集成代码版本控制功能, 语言开发团队对语言/标准库与用户库/项目提供版本控制服务, 以提高团队开发效率, 促进共享, 提升整体代码水平
    提示/帮助文档贯穿整个开发过程
    集成语言解释器
    内置适合编程的中文输入法
    可以导入其他编程语言的项目
语言本身
    内置语法最简化, 可扩展性高. 想到的类似例子是Scheme/Lisp
    保证代码可读性的前提下优化性能/效率
    支持与其他编程语言的集成
    源码版本间易于比较
    易于理解的中文反馈信息, 包括编译错误/警告, 运行时错误等等

下面是参考易语言相关平台的官方文档,挑选出的一些. 本人没有易语言实践经验:

火山:
    支持中英文代码切换
易语言:
    代码即文档源程序风格统一
易语言飞扬:
    类自然语言编程 - 支持宏定义(和可扩展性高一致)
nobodxbodon commented 7 years ago

2000年的论文: 自然语言和计算机编程语言的比较. 自然语言是以中文为主要分析对象的.

ice1000 commented 7 years ago

I think there should be some IntelliJ IDEA Chinese language patch.

I've seen that once.

nobodxbodon commented 7 years ago

这个补丁是汉化IDEA界面还是有支持中文代码开发的功能?

ice1000 commented 7 years ago

汉化界面啊。。

nobodxbodon commented 7 years ago

恩 开发环境有中文界面是一个必需特性.

lightrabbit commented 7 years ago

我觉得TypeScript+VSCode的组合也挺适合的,TypeScript的解释器支持UTF8编码,然后编译出来的JavaScript也支持,同时VSCode可以提供很好的代码提示功能。只要实现了根据拼音首字母或者拼音的部分来匹配中文标识符,就可以极大地提高编码时输入的效率。像下面这样: demo

nobodxbodon commented 7 years ago

@lightrabbit 有兴趣的话方便在首页添加个TypeScript的中文代码例程吗?

只要实现了根据拼音首字母或者拼音的部分来匹配中文标识符

这个好像和"内置适合编程的中文输入法"的想法有点交集. 话说看你的示例里好像没有用额外的输入法? 是visual studio已经能够识别拼音了吗?

nobodxbodon commented 7 years ago

感觉题目有些误导, 修正了一下. 之后会随着讨论进行而更新特性列表.

lightrabbit commented 7 years ago

@nobodxbodon 这个就是上面的插件提供的功能,只是因为VSCode修改了代码中的匹配算法,和菜单面板里的不同了,所以那个插件对于新版的VSCode,暂时不能提供代码中用拼音匹配中文标识符的功能。

taostein commented 7 years ago

Emacs 或者 Vi 呢?我想一个中文合适也不需要用老鼠的IDE。石涛

2017-08-07 9:43 GMT+08:00 lightrabbit notifications@github.com:

@nobodxbodon https://github.com/nobodxbodon 这个就是上面的插件提供的功能, 只是因为VSCode修改了代码中的匹配算法,和菜单面板里的不同了,所以那个插件对于新版的VSCode,暂时不能提供代码中用拼音匹配中文标识符的功能。

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/program-in-chinese/overview/issues/11#issuecomment-320548810, or mute the thread https://github.com/notifications/unsubscribe-auth/AJoUCSMEaqJ94jzKPxEmGJqjNkfZGMlDks5sVmvLgaJpZM4OqSsO .

nobodxbodon commented 7 years ago

@lightrabbit 哦! 真难得, @cleverdango 是这个插件的作者吧, 有幸ta也在组里. 像这种专门针对中文用户的项目感觉最适合用中文编程了. 确实, 插件就是受制于IDE. 像Firefox插件在火狐决定放弃xul支持之后社区一片怨声载道.

@taostein 惭愧, 在下对这两个编辑器仅限于在linux里看看log文件的使用程度. 请问这些非图形界面的IDE在支持中文编程方面有什么特殊需要吗? 比如输入法和自动补全, 和图形界面的IDE相比有什么不同吗?

cleverdango commented 7 years ago

@nobodxbodon 这个坑就是 @lightrabbit 挖的,部分代码也是他写的当时因为有些别的原因所以没有分开commit

cleverdango commented 7 years ago

你们可以把 @lightrabbit 拉到组里讨论,他比我更懂些技术细节

nobodxbodon commented 7 years ago

请帖已经发给 @lightrabbit . 不知是否收到. 自动补全和输入法确实是IDE易用性的很重要一部分. 个人感觉拼音输入匹配中文标识符的功能是个好切入点, 因为用拼音输入的用户比例最大, 而且和现有的自动补全无缝集成. 好像在基于现有IDE的前提下没想到更用户友好的方式. 不知你们有兴趣/动力继续维护它吗? 比如跟进新版vscode的问题?

lightrabbit commented 7 years ago

@nobodxbodon 插件受制于IDE这个,也是我选择VSCode的原因。因为VSCode是开源的,你可以直接看它的源码并且修改它的源码。而那个vscode-pinyin的本质其实也是对vscode的源码进行修改,让它支持拼音匹配。然后插件所做的事情其实是把原版的vscode中负责匹配的部分替换成修改后的vscode。 继续维护的话,主要是近期事情很多很忙,所以没有多余的精力来做这方面的事情……

qwas982 commented 7 years ago

关于这个问题,我认为用code block 加载汉语编程语言的编译器就行了,有很多现成的IDE可以用。

nobodxbodon commented 7 years ago

@qwas982 个人觉得, 现有IDE加上中文语言编译器是一个基础. 有些功能是有中文特色而且现有IDE默认不自带的. 比如上面 @lightrabbit 和 @cleverdango 开发的在自动补全中支持拼音输入. 还有一些在顶楼的列表中. 其中个人比较看重的是第二条:

集成代码版本控制功能, 语言开发团队对语言/标准库与用户库/项目提供版本控制服务, 以提高团队开发效率, 促进共享, 提升整体代码水平

可以想象成, 开发环境和类似github的代码版本管理系统再加上类似Maven/NPM的库管理平台(解决依赖问题, 标准化代码和文档等)无缝集成. 所有使用这个开发环境的用户都可以选择把自己的库/代码直接分享, 其他用户可以在开发环境中搜索和利用其他人分享的库/代码并直接在自己的项目中使用, 这样可以最大限度地互相学习, 减少重复开发, 以此来抵消部分后发劣势, 使得第三方库和代码的积累尽快赶上老牌主流编程语言.

nobodxbodon commented 7 years ago

在Z语言讨论群里版大介绍了一个在线中文编程环境: http://quzsc.huangyipeng.cn/web/ 目测像是汉化了JQuery的接口, 因为JQuery就用#号按照ID取HTML元素:

界面.容器.添加标题("第一个中文程序");
界面.容器.添加按钮("我的按钮",{编号:"按钮001"});
界面("#按钮001").点击(函数(){
     界面.消息框("我的按钮");    
});

思成.展示源代码(); 

https://github.com/program-in-chinese/overview/issues/20 和它的不同在于, 目标用户是设计师和初学者, 而不是通用前端开发者.

qwas982 commented 7 years ago

@nobodxbodon 你说的不错,我很赞同,我还完善了一下我的思路。

我想到一个新思路

利用现有基础,站在巨人的肩膀上,借鉴前人的经验。

手动汉化不如自动汉化。 我们可以用自己现阶段会的某种语言,比如 javascript java python等语言写一个【源代码翻译器】,翻译C/C++的编译器gcc、llvm的源代码,调用Google 的|谷歌翻译|(谷歌已经在去年将它升级到了具有机器学习的人工智能翻译水平)去自动翻译其中的代码,然后保存为汉语源代码,然后再把这个源代码通过现成的编译器编译为支持汉语的新gcc或llvm编译器可执行程序,然后在我们用vs或者code::block(或其它语言的IDE)的时候通过加载编译器,就可以在强大现有的IDE中使用汉语编程了。这是汉化C/C++这种语言的一个思路,也可以将其用于汉化其他语言,比如javascript java python。 因为这个【源代码翻译器】本质上是个文本翻译器。 对翻译的策略,我们可以给他设置一个规则,比如语言保留的关键字和已占用的命名空间用我们协商好的汉语词汇列表,非保留和占用的,如;库、模板、STL等,如果是英文单词就直接翻译,如果是缩写就手动翻译一处,其它相同的缩写就自动替换。

qwas982 commented 7 years ago

这样做的好处是可以兼容现有语言的资源。反正是机器自动智能的翻译,即便是海量的源代码文件或者各种库、模板等也是可以轻易翻译完的。只不过校验需要一定的人手和时间,不过这应该已经很容易了。我觉得此举就像我们买了苏联的su-30 、su-35后将它国产化并自己生产出歼-11,、歼-15一样。完全消化并掌握这项技能。现在还有全新的歼-20,也就是说以后我们有创造全新语言的可能性,什么图形化编程,人工智能编程,自动化编程都不在话下。

ice1000 commented 7 years ago

请正确拼写我国战斗机的名字,那个字是,歼灭的意思,你那个字是狡猾险恶的意思

ice1000 commented 7 years ago

另:是code::block,不是

code::black

nobodxbodon commented 7 years ago

@qwas982 机器翻译(个人觉得"智能"一词最近有被用滥的倾向)远没有达到理想境界, 而且它针对的是自然语言, 而非源码中使用的命名. 自然语言的上下文往往能为机器翻译利用, 而源代码离自然语言本身很远. 虽然没有尝试过, 但我估计机器翻译只能按照单词"直译"(还不考虑Camel命名的分词问题, 还有英文代码随处可见的缩写问题). 你可以试试取一段实际项目的代码, 试试用google translate出来的样子.

另外, 请麻烦你修正一下 @ice1000 指出的用词问题, 谢谢.

qwas982 commented 7 years ago

@ice1000 感谢指出,已修正。

nobodxbodon commented 7 years ago

@qwas982 还有一处请修正. 另外请把https://github.com/program-in-chinese/overview/issues/28#issuecomment-327061853 也一并修正. 另外, 如果是相同内容, 建议用引用链接而不是拷贝粘贴.

qwas982 commented 7 years ago

@nobodxbodon 好的

ice1000 commented 7 years ago

很多解释型语言整这种编码的问题比较困难,因为他们支持的编码都很贫瘠,比如py。好像rb也有类似的问题。C# Java Haskell等都没有问题。

nobodxbodon commented 7 years ago

@ice1000 不知你说的编码问题是...? Python3Ruby都支持utf8命名吧.

nobodxbodon commented 7 years ago

@program-in-chinese/all 被反问: 你们设想的中文化的C#(语言本身)应该是怎样的. 除了汉化关键词和核心库(类似https://github.com/program-in-chinese/HuanXiang )以外, 还有什么可行的吗?

nobodxbodon commented 7 years ago

@Glavo 有幸看到你关于语言设计等等的发言, 如这里, 非常希望一同探讨!

hummerstudio commented 7 years ago

我记不清是易语言还是习语言,有一个功能:在输入英文标点符号的时候可以自动更正为中文标点符号。这样就可以避免频繁切换输入法的问题。并且,在语言级别,也同时兼容英文标点符号。再通过IDE编辑器的自动更正功能,可以统一到中文标点符号上来,保证一致性、纯粹性和可读性。

nobodxbodon commented 7 years ago

@fyyxgame 有幸在这里看到你的作品. 希望分享一下细节和心得. 不知有没有什么推广的打算? 31582825-6f93cac2-b1c0-11e7-9cdf-9b0778bbceab

nobodxbodon commented 7 years ago

至今, 只发现了一个开源的母语编程语言: Nadesiko(日语). 比较有意思的是, 它已经有了三代:

nobodxbodon commented 7 years ago

又发现一个Java实现的开源法语编程语言: Linotte: repo v2.07 source zip 已有超过10年历史

nobodxbodon commented 6 years ago

这两天琢磨, 阻碍易/飞扬大规模商用的主要因素是哪些. 想到的就只有IDE对团队开发/版本控制功能的欠缺. 不知各位有何看法? 另请教: @chencun @qingseshaohua

刚开始了解易语言-飞扬的语法, 就像原文中所说脱胎自“类C语言”,因而在语法上,与C、C++、Java、C#等编程语言,有相似甚至相同之处. 其中友好名称有些显眼, 不知各位对它有什么理解? 看上去有点像宏定义:

友好名称 '在控制台上显示<某东西>' = 控制台.输出行(某东西);
友好名称 '将<某东西>显示到控制台上' = 控制台.输出行(某东西);

调用示例:

//以下三行都相当于调用:控制台.输出行(123);
'在控制台上显示123';
'将123显示到控制台上';
'将<某数值>显示到控制台上'(某数值 = 123);
obj404 commented 6 years ago

@nobodxbodon 不一定是团队开发,易的方面是不够强大,因为是他2000年出的,所以,他的链接器是vc98,直到现在,他的编译器还是没有升级。而且,他的代码也不够优化。如果你是用来商用,那是不太好的,效率跟不上。最重要的是易为了简单,砍掉了很多东西。一些特性在其他语言是自带的,甚至是必备的。但是,易只能靠第三方支持库,虽然也是作者开发的,但是,不完善。易界口口相传,除了核心库,不要用其他的库。但是,你要知道,在之前,连核心库,都是不安全的。。易的前期设计,就没有考虑好多线程的问题。至于飞扬,就是为了弥补易的缺陷而出来的。但是,他其实就是汉化的CPP,编程不会提升效率,还不如直接cpp,所以,也没多少人多。飞扬没用过,看那图就不想接触。所以,我下面来说下易为啥不被公司使用。 1.源码是一个二进制的文件,还是加密的。所以,你无法协同开发,如果你源码损坏了,那么你什么都找不回来。我用易开发,每次更新一点功能,都是复制源码文件一份备份保存的。 2.易的源码结构,IDE接口,都是不开放的,你不能随心所欲的扩展,就算易自身满足不了你的需求,你不能自己去扩展,你要么接受,要么换语言,换IDE。IDE的接口,是最近的版本才开放一部分的。 3.易语言是收费的商业软件,一份要差不多600元的售价。虽然相对国外的IDE要便宜,敢和人家对标价格,但是有人家的那么强大么。有破解版,但是,你企业敢用么?而且,破解版是会触发暗桩的。我前期也是用的破解版,后面赚钱了,才买的正版。但是正版没有任何的服务,也就是给你个加密狗U盘,插入能编译为EXE。 4.易语言不会发展自己的生态,加上他的不开放,没有谁会贡献库。现在一些库,都是易友贡献的,质量参差不齐,就算质量好的,也是不会长期维护更新的,社区维护的不好。 5.最后说一下,就算是正版的易语言,也不自带的VC98,可能是版权问题。需要自己去下载后安装。一个商业软件,还有版权问题,你公司,敢商用么?而且,易语言的库,很多可能是直接复制第三方库的,所以,一些源码,不知道是否是侵权的GPL之类的。吴涛一年时间,他开发出了易语言,然后自己一个人写了那么多的库,你可以想象,有多少东西,是拿来即用的。 6.更多问题,等待自己发现,和其他人补充。。。。

nobodxbodon commented 6 years ago

@chencun 非常感谢分享经验心得! 下面针对性地试着从正面角度总结一些(设想中的)新中文编程语言/IDE需要的特性:

欢迎补充!

htwx commented 6 years ago

易飞扬 据我所知, 这个的知识产权不属于吴涛, 这个是当时吴涛获得大有集团投资后搞的产品, 后来合作终止了这个项目就停止开发了, 大有是大连的一个房地产开发公司

nobodxbodon commented 6 years ago

@htwx 哦, 原来这样. 之前还在困惑这个产品都出内测版了怎么还说停就停了. 好像多数流行的语言要么是个人自研, 要么是公司主导开发, 好像没看到一方出资, 一方代工的.

nobodxbodon commented 6 years ago

根据@qingseshaohua 早先的分享, 归整出另外一些必需特性. 欢迎补充:

3133795557 commented 6 years ago

很多人提到易语言,因为他算得上中文编程中的成功者,但是实际上因为是纯技术出身,而不是技术转产品,所以易语言是很封闭的,后面的产品更是一代不如一代,一个小团队想要蚂蚁啃大象,没有穿透力还是不行的。但是易语言生态圈也作出了不少成功的尝试,精易论坛、世桓培训都开辟了不同的道路。 除了楼主外,恐怕很多人都喜欢拍脑袋来开发产品,这说明诸位过去足够成功,才有有如此的自信,传说中的权威病就是这样的,导致很多技术优秀的人往往都渴死在资源匮乏的沙漠中。 我想提几个标准供大家参考:

所以,想要一门语言被认可,订单才是真爱,若你不能成为天使,就要找到岗位,若找不到岗位就要创造微客平台,至于怎么实现,用什么语言实现,都是历史的选择,此时中文编程若能够提升效率则必然会被接受。而在这之前,可以探讨,也可以做市场测试,我相信市场是一定存在的,但是目前的探索比让alphaGo学习前人的棋谱还不如。

nobodxbodon commented 6 years ago

@3133795557 受启发, 写了从人机交互角度看中文编程:'打开微信'一文

nobodxbodon commented 6 years ago

@ice1000 关于https://github.com/program-in-chinese/overview/issues/2#issuecomment-415307729 , 想请教你对在线IDE的看法. 这篇2014年的JS编辑器列表里有不少发展至今, 比如Codenvy用了Eclipse Che快要被Redhat收购, Cloud9已经到Amazon旗下. 之前看抚子日语编程语言也提供了浏览器开发环境.

nobodxbodon commented 6 years ago

也许其他帖里提到过. IDE中可在新建项目时选择模板项目, 如下(Eclipse的XBase入门模板). 可以考虑针对现有IDE, 开发一些常见常用的使用中文命名的项目模板, 如Spring Boot问好或更实用的. 以便用户上手即用. screen shot 2018-08-31 at 10 48 57 am

nobodxbodon commented 5 years ago

刚意识到忽视了编程语言环境的一个重要部分: 对开发者的反馈信息, 包括编译错误/警告, 运行时错误等等. 这些反馈信息应是中文, 需要尽可能切中问题, 也许尽量从开发者的角度而不是编译器的角度. 可参考: 2012年论文Exploring the design of compiler feedback

inkydragon commented 5 years ago

今天昨天看到一个有趣的东西,过来分享一下。(要是火星了轻点吐槽) 不知道怎么对这个东西进行归类,能算是一种 GPPL 但我还是更乐意叫他 IDE,毕竟里面可以写不止一种“语言”。

DUANG~ > 当我第一次知道 PWCT 时,你让我去推荐它,其实我是拒绝的。应为我觉得啊,我不能看到了就推荐、马上推荐。第一,我要试一下,我又不想说,拿 PWCT 编完程序之后,代码加了很多特效,自动生成(DUANG~)!很强!很快!结果大家一定会吐槽我,根本没有这种 IDE!~~所以我先要试一下~~。我要给大家看到,我用完之后就是这样子,你们用完以后,也是这样子!

找到这个东西的顺序大概是:

Github explore -> Ring-lang -> PWCT(Programming Without Coding Technology)

有趣的东西是 PWCT 直译就是不写代码也能编程的技术。PWCT 是一个项目,也是这 IDE 的名字,算是图形编程的一种,号称是一行代码都不用写。可能比较像 scratch?

目前看来这个东西还是比较实用的,能开发新的语言。github 给我推的 Ring-lang 也是用 PWCT 开发的 GPPL ,跟普通的 C/C++ 一样,要写代码的哪种。只用 PWCT 也能开发各种程序,详见 demo。

这种纯靠 IDE 的“语言”汉化也好做一点,毕竟“完形填空”段有限。易用性不好说,写小程序时还可以,程序写大了可能就有点烦,不过这个 IDE 从教程里看可以纯键盘操作,易用性应该有所改善。 另外团队目测是阿拉伯人,因为它们 youtube 的教程全部带阿拉伯文字字幕。也看到有阿拉伯语的demo,国际化应该不成问题。


大概看了一下,装完打开就是一个图形的 IDE,参照教程写一个 hello world

我发现教程里面的步骤特别详细,详细到感觉不是人写的, eg: 这篇是创造新的图形化编程语言教程的第一篇,先看看长度,再仔细看看:前几百步都是在定义各种文件/变量,每步都配图+文字说明,让人来写应该是举一反N就行了。 后面发现这些文档都是生成的,编完程序就可以自动生成这样的文档,并自带版本控制

IDE 里“写”程序大概又多种办法: 详细过程见 hello world 教程,有图有文字,下面就不贴图了

PWCT 支持 5 种 VPL (Visual Programming Language/可视化编程语言)

我用 hello world 测试,这几种貌似并不都兼容,也就是说并不是“编写”的一段程序,然后就可以定义选导出成哪种语言。感觉更像是,把某种语言的逻辑封装成一个个完形填空,然后组合起来直接生成对应的程序,再编译运行。

系列教程 中有教你怎么创建新的 VPL

Developing the Supernova Textual Programming Language Using the HarbourPWCT Visual programming language

他把 SupernovaPWCT 的开发过程都编为教程了(虽然是自动生成的)

我目前大概就了解了这么多,感觉从 PWCT 这个开源项目中可以学习和复用的东西有很多。 这个项目缺点肯定不少,毕竟编程方式比较特别,用的人也不多。但我们应该多从中找找优点,看那些值得学习的地方。上面说的也比较混乱,权当抛砖引玉吧。

apexel commented 5 years ago

本地化编程语言的特点 编程语言本地化不仅仅是替换一下关键字那么简单,主要包括以下几个方面: A.  开发环境本地化 如果没有提供对应的本地化开发环境,就无法做到完全本地化。 B.  语言字面本地化 编程语言的关键字和语法格式必须本地化。 C.  相关资源本地化 编程语言的所有附属资源,如功能类库、资料文档、附属工具等都必须本地化。 D.  使用习惯本地化 编程语言所有支持内容都必须符合本地的使用和学习习惯,包括语言本身、开发环境、附属资源等。 E.  交流社区本地化 必须为编程语言提供本地化的交流社区,方便用户之间进行交流及资源共享。

编程语言本地化的最终目的是为用户创建一个易学易用实用的应用开发环境,用户不需要掌握英文、不需要有太多软件开发基础、不需要使用西方思维,不需要投入太多学习成本就能学会使用。

nobodxbodon commented 5 years ago

听Ruby之父畅谈编程语言的设计节选:

自己想用就足够了

对于“这门语言是做什么的”和“目标用户是谁”的问题,我觉得有必要做一下补充。

作为资深的编程语言迷,我学习了很多编程语言。在 Ruby 成名之后,我与很多语言设计者也都进行过交流,比如 C++ 的设计者本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)、Perl 的设计者拉里·沃尔(Larry Wall)、Python 的设计者吉多·范罗苏姆(Guido van Rossum)和 PHP 的设计者拉斯马斯·勒德尔夫(Rasmus Lerdorf)等。从和他们的交流中我总结出一点,那就是除了设计者本人以自用为目的设计的语言以外,其余的语言大多没有流行起来。

如果连自己都不打算用,在设计时就考虑不到细节,也无法保持激情去将自己设计的语言培养成人气语言。不少语言都是经过十年以上的时间才变得有人气,因此,要想创造一门人气语言,考虑细节和保持激情不可或缺。也就是说,人气语言的目标用户首先是设计者本人,然后才是拥有相似特质的用户。而“这门语言是做什么的”则取决于设计者本人想做什么。

决定了目标用户和语言用途之后,就没有必要为最后一个问题,也就是“采用什么样的功能”而烦恼了。不过这里面也隐含着一些诀窍,之后我们再进行说明。

nobodxbodon commented 5 years ago

之前回答了 @jiangzheng1986 的知乎问题如果要全新设计一款中文编程语言&编译器&集成开发环境,大家有没有什么好的建议?, 并将回答整理在了文章中. 非常期待该项目的后续进展.

nobodxbodon commented 4 years ago

刚在头条看到一条评论,勾起了无空格语法设计的回忆。近两年前看过 @bhuztez 的优秀的程序语言是不用括号和空格的。但一直没有特别思考。 英文代码比如:

class Person {
    void greeting(String message) {...}
}

Person a = new Person();
a.greeting("吃了么?")

a.greeting中间必须要有分隔。因为 agreeting 就根本没法读。但对中文来说,因为本身就不需要空格分词,因此阅读是没有问题的。下面的甲.问好改为甲问好对阅读完全没影响,甚至更接近自然语言习惯:

class 人 {
    void 问好(String 语句) {...}
}

人 甲 = new 人();
甲.问好("吃了么?")

感觉括号也是类似甲问好“吃了么?”对阅读没有影响,当然如果多参数的话语法还需另行设计。 从这个角度说,中文的特性至少可以使中文编程语言省去一些英文编程语言来说属于无奈之举的语法符号,比如上面的.