主题:【讨论】龙芯什么时候能配上中文计算机语言编译的源程序? -- 唵啊吽
但作为高级语言,是与人类自然语言相似的语言,如Basic就是数学语言。C脱离了自然语言,引入了一些机器语言,如pointer这样的东西,是计算机调配记忆单元的机器语言。
现在对象语言,也脱离了自然语言,使用了自然界的语言:对象。
中文是自然语言,而是是描述对象(自然)的比较好的语言。如C++的Class,中文有“狗”class,其中有猎狗,哈巴狗,公狗,母狗等等,英文没有class结构,英文有dog, puppy, greyhund,等看上去毫不相干的各类狗的名称。
不说是否优越,仅语言不同这点上,中文编译也应该可以开创出一些更加有效的高级计算机语言。
这么个简单例子如果能说明中文编码的长处或短处,那计算机产业也就是街头买大萝卜的水平。
汉字的问题就是无法断句,英语在断句和语法上拥有相对于汉字的优势,比如很简单的一本萨缪尔森的《经济学》,我看过英文版和日文版,觉得都比中文版易懂,虽然中文是我的母语。
比如,上面我写的这么简单的一段文字,如果我不加入空格,一个将汉语作为外语者是很难判断每个字到底是与上一个字还是与下一个字合并构成单词的,但如果你需要我把单词与单词之间加入空格,那么中文编程语言的优势就完全不可体现了。
如果你觉得中文作为编程语言有优势,你不妨可以看一下我写的总结词:
最后,说 一句, 编程 语言 不是 简单的 将 if 换成 若,outprint 换成 输出 就 成为 一门 新 语言 的。
中文 代码 如果 不是 这么 写,是 很 难 成为 一门 系统的 编程 语言 的。
你两个单词间不加空格试试?
WhatwillhappenifwedonotaddanyblankbetweenwordsinEnglish?
这方面汉语倒是优势,至少不加空格我们能分清楚单个的字。
不过对于编程语言来说,你说的这些根本就不是问题。
所以你说得我谨慎支持。
送花成功。有效送花赞扬。恭喜:你意外获得 16 铢钱。1通宝=16铢
参数变化,作者,声望:1;铢钱:0。你,乐善:1;铢钱:15。本帖花:1
形式逻辑不因为语言而改变,正如空气动力学不因为国界而改变一样。 所以用中文编程能有革命性的变化是不靠谱的事情(至少我这样认为),但是中文(界面的)编程降低中国人的编程难度是完全可以做到的。
在软件这个行业也干了10来年了,在国内干过几年,现在在国外也算干了几年。也说说我对中国软件业的看法。
首先是开发人员水平的问题。在国内的时候在深圳一家大的软件公司干过,感觉那时候同事的水平都相当不错,虽然我不认为他们比我强到哪里去,但也差不到那里去。现在在国外7,8年,说实话我还没见过一个比我好的。说道逻辑思维能力,我在这边的大学教过一两年的数学,至少我这边的学生的数学水平,只能用惨不忍睹来形容。虽然整体水平不怎么样,不过班里也确实有那么几个学生相当不错,相当聪明。
英语的问题。英语还是比较关键。主要是在学习的时候。如果看相关的英语材料,觉得挺容易理解的,如果看相关的中文材料,有的真的是天书一样。还有的话如果跟海外的用户沟通,英语好的话当然更方便一点,需求理解的也准些。
软件本身并没有什么,软件是对现有管理制度规则的总结归纳已经体现。如果说软件落后,一个很大的原因是因为国内企业机构的管理制度,管理方式,规则等等还比较落后。这也是为什么一些大公司要用国外的软件,因为使用软件的本身也是对企业管理的改进。
要去开会了,再续。
英语的各种格,时态,句型等等,计算机语言也一样没有,C语言关键字一样要加空格。我写的那些,就是简单的字符串替换,但是你看替换之后,还剩下什么英语的东西了。
我的结论就是:计算机语言,除了单词,剩下没多少英文的东西。任何看过编译原理的人都明白为什么。
我写那段只是给LZ看看,他说的语言中文化能不能达到预想效果。
LZ说的是起步教育,那问题就是,英语单词对小学生中学生是不是门槛,至于长远的概念,谁敢用英文来写给机器看,谁先写个解析英文到汇编的编译器给我瞅瞅。
现在世界上的计算机语言不知道有多少,光通用型的可执行就至少可以用百来做单位,如果加上HTML、XML、ASN.1这种描述性语言,以及某些领域专用语言如MATLAB等等更不知道几千几万甚至几十万(如果从广义上算再加上各种协议和文档格式就更数不过来了)。这里面中国人的贡献少之又少。除了易语言之外更是罕有应用,比如软件所唐稚松院士的XYZ系列语言,几乎没人任何实际应用(当然学术价值是很高的)。就是脚本语言,常用软件中国产的只有飞狐支持VBScript(而且是用的微软引擎),其它的能像大智慧之类股票软件支持公式系统就不错了(而且其大智慧等所用的公式系统文法和语法也基本是照抄根据国外软件)。而反观国外软件,大家最常用的Office系统就支持的VBA/VSTA,就算是WIndows系统中屏幕上的每个字都说不定都包含一个可以在特定虚拟机上运行的机器语言代码(见TTF字体规范),而PDF文件则是PostScript语言的应用与改进(Adobe就是从这个东西发家的),而网页是用HTML写的就更不用说了(而且这个HTML还可能是PHP,Perl之类的语言产生的)。
造成这个现象的原因,首先是国内教育在这方面的空白,其次大概是思维习惯和传统。计算机语言也是语言,而语言首先是用来交流用的,国外IT界遇到新领域新问题,很多情况下都是先想一想能不能用一种语言进行描述并执行。这点在美国军方尤甚。据说在JSF之前很少用C/C++进行开发,大都是专用语言,其中最著名的就是ADA(虽然这个语言也很失败,不过在4GL里已经是最成功的了)。
(即使是在其他方面,似乎西方也有发明语言的传统,形式化的各种数学语言就不说了,波兰眼科医生柴门霍夫看现有语言不爽,发明了世界语;英国作家托尔金写《指环王》时,也发明了一套完整的“精灵语”,电影版里精灵们说的精灵语可是费了老大劲才做到“字正腔圆”的。)
要开发中文计算机语言,不是简单的事情,如果只是简单的关键字替换,没有任何价值,这个早在70、80年代就有人搞过,现在看来也没什么意义。至于中文变量名,据说早在VC5.0就支持了,也没多少人用。至于像COBOL那样用接近英文的文法的中文化语言,至今也没什么大的成就(估计也是因为没什么人搞)。
其实本人很怀疑,在现在的中文语法分析仍旧使用主谓宾定状补这种分类方式下能有什么中文化计算机语言出现,这套标准本来就是从分析印欧语系语言中产生的,对中文来说有很大缺陷。这方面没有理论突破向COBOL那样的中文语言不太可能出现(如果搞成自然语言识别或自然语言查询那样就失去了作为一门计算机语言的意义)。
另外,逻辑的表示也很成问题。现代逻辑学,其实就是西方逻辑学,无疑是反映西方人的思维方式,写法也是符合西方语言的,这点即使在常见的数学公式中也可以体现出来。而中国人的逻辑学,即号称世界三大逻辑体系之一的“名学”,其实在魏晋之后就已经死亡了(另两个是希腊逻辑学以及延续到现代的西方逻辑学,和印度的因明),这也直接造成从那时起中国数学的停滞不前,更不要说几乎是逻辑学子学科的计算机科学。在这种前提下怎么可能出现所谓的中文计算机语言呢?
每种通用计算机语言,都对应一种或几种计算模型,比如常见的C/C++,Java,对应的是图灵机模型;Lisp基于兰不达演算;Prolog基于一阶谓词逻辑;XYZ基于时序逻辑。要想把这几种语言中文化,至少要把它所对应的计算机制中文化吧,这项任务真的可能吗?即使可能又有意义吗?
从计算机语言的某些细节上看,以国内IT界的语言学和逻辑学基础,中文化也有很大障碍。比如现在就流行的高级通用计算机如C/C++,Java,C#都是强类型的。但是为什么要被设计成强类型呢?估计国内能知道强类型比弱类型能减少错误这个结论的都不多,更不要说这个“类型”到底是从哪里来的(其实是来自“类型论”),如果这个都搞不清楚更不要说面向对象和泛型了(国内IT界倒是有人把“对象”和维特根斯坦的“哲学笔记”联系起来,这个已经很不错了)。当今翻开一任何本Java或C#书籍,几乎都把Reflection翻译成“反射”这个驴唇不对马嘴的词,很少有人知道其实是“反思”或“自省”的意思,本质上是个哲学概念。据说唐稚松院士的博士生前两年都要先学习哲学,但即使是软件所内部对这种做法进行嘲笑的都大有人在。
国内搞计算机语言的并不是没有,比如唐稚松院士,比如北大裘宗燕教授。但是没有强大的软件工业做基础,他们的研究往往只能在学术圈子里自生自灭。
当前这种代码书写方式,本身就是对中文不利的。中文没有发展起一种形式化的描述体系(比如数学公式之类),而计算机语言对格式高度敏感,这样写中文本身就不会有太强的表现力。也许创造一种严格的形式化中文子语言会好一些。
微软曾有个项目叫做Intentional Programing(意图编程),它的想法是直接对抽象语法树(AST)进行编辑,因为AST是语言中立的,所以可以用各种语言“呈现”,当然也包括中文,而不管用什么语言“呈现”,只要AST是一样的,程序其实就是一样的。这个项目最终失败了,但是我还是觉得中文化语言更可能的方向是在挖掘中文语法内在逻辑的基础上,使用类似AST或其他的数据结构来更好地进行表达。
比较赞同stanly lipman的说法:所有人学命令式语言都要过个坎,把正常的人类的概括思维变成递归步进的指令序列。
现有的 以表达式,变量,作用域这些概念组合,以编译技术映射到汇编的计算机语言,都必然和任何自然语言相距甚远,这是工业技术的需求,计算机文化的特征首先是工业文化的特征,要求可重复,排斥所有不可知不可控。
计算机技术里只要出现语言中立,绝对是说对编程语言。对语法树编辑其实就是冯诺依曼机的滥觞。冯诺依曼一开始的构思里,指令序列应该可以运行时修改,后来lisp的eval算是部分回应了这个概念。但是但是,现在绝大多数编程语言都不依赖这个技术(所以严格说用的不是冯诺依曼机,应该是剑桥某人命名 程序不可编辑的另一种模型),宁愿用各种设计模式来应付某些需要这种功能的个案,为什么呢?
因为对所有有时间有成本限制项目来说,可调式 可预测 可靠性比表达力都更要命,修改指令序列或者求值树带来的不可控让人不敢尝试。
同样的理由,解释了为什么计算机语言离所有的自然语言都非常非常远,因为必须依赖各种明确的接口来结构化,依赖确切的存储器变化来步进调试,需要种种笨重(和自然语言相比),但是可重复可分割的技术来支撑庞大的整体,因为这是工业化分工的数字化体现,而这些内容在所有自然语言中都不存在。
如果说中文不适应计算机,那中文也必然不适应工业化不适应数学。但是谁敢说,我们改说英文,我们的数学英语就能火箭上升。
如果说C语言到中国的距离是太阳到地球,那到英语也就是太阳到月亮。
传说中的自然语言编程,目前还在试验阶段。
这的确是下一步发展的方向,要等到这东西有可能实用的时候,楼主担心的才可能成为现实。
另,这楼里面长篇大论的,没几个看过编译原理。
不过感觉您是从“计算”角度来考虑的,而不是从语言的表达来表述。
从“计算”的角度,所有的计算机语言,都有一个上限,函数式的Lisp,命令式的C/C++,尽管计算模型不同,但理论上来说计算能力都是一样的。但是现实的结果是在大部分人在大部分领域都是用类似C的命令式语言。这不能不说是命令式语言这种表达计算的方法更容易理解、使用和控制。在者,即使在命令式编程语言内部,像Pascal,Basic这样的语言现在也是不如C/C++,Java等,虽然他们的计算能力也是相同的。因而语言的外在形式还是很重要的。
再比如正则语言,现在实际应用的几乎只有各种基于正则表达式的变体。不能不说正则表达式的简洁表示法功不可没,但是这种表示法明显带有拉丁语系的风格,因而更适合于拉丁语系,比如“寻找带前缀dis(仅小写)的所有单词”,可以表示为[^\b]dis[a-zA-Z]+。但是如果说“寻找带人字旁的所有汉字”,这样的话用现有正则表达式就根本无能为力。
至于您说的自修改代码和诺依曼体系结构,其实属于计算机体系结构的范围,和计算模型以及计算机语言还是有很大差别的。而且自修改代码虽然很少见,但是并不是诺依曼体系结构所禁止的,比如航天飞机之类需要高可靠性的计算机上就大量使用自修改代码。早期这种代码应该相当多,但因为问题太多,后来IBM给禁掉了;而现在PC机上从DOS到Windows其实都可以实现,难度也不是很高。
函数式和命令式的差别,不仅是计算的角度,也是表达的角度,因为两者中“值”的地位不同,导致接口的不同,从而必然影响大框架的思路,比如用函数式语言基本就不会去玩值驱动。
回到主题,我说思维的转变,主要是是强调主流(命令式)编程语言和任何自然语言都有的主要鸿沟在哪里,入门阶段在这个门槛面前,自然语言之间的结构差异微不足道。
表达形式很重要,但是入门阶段并不是当务之急,因为对代码的可阅读性,可理解性,各种思路差异的理解,在有几万行实践积累之后比较容易说明白,我试过给一开始就给人讲模块化方法,人家因为程序不上一百行,根本体会不到重要性。
说完入门,我说一下我从工程考虑,为什么认定编程语言会和自然语言相差至远,同时回答为什么我认为刚才有人提及的Intentional Programing也走不了太远,以修改代码为啥没被推开为例:
修改AST和冯诺依曼机初始的运行时修改代码实际是同构的,lisp的eval也做过类似尝试,他们很容易实现,但是因为对所有有时间有成本限制项目来说,可调式 可预测 可靠性比表达力都更要命,修改指令序列或者求值树带来的行为分支太大,因为既然代码可以改变,那么白盒测试的范围就无法确定,这造成范围不可控而让人不敢尝试,这些造成eval和冯诺依曼机原型没有被广泛接受。
修改代码,还算是理论上说的清楚,而因为实践中调试量过大难以实现,那么直接使用自然语言,其行为范围恐怕现在理论上都覆盖不了,谈何广泛应用(人工智能研究例外)。
结论:计算机语言不是自然语言的延伸,而是数学表达式和工业原则碰撞的结果。从图灵开始的数学研究奠定其方法集合,工业原则和调试成本剔除了某些方法,而接近自然语言的语法,无法通过工程原则检验。以后这些语言就算应用,也必然是作为嵌入语言,在传统的命令式或函数式的宿主语言控制下解决特定问题。