五千年(敝帚自珍)

主题:【讨论】龙芯什么时候能配上中文计算机语言编译的源程序? -- 唵啊吽

共:💬151 🌺373 🌵4
分页树展主题 · 全看首页 上页
/ 11
下页 末页
        • 家园 看来得研究一下九章算术之类的记述方式

          然后弄一套符合中文逻辑推理表达的编程语言。问题是阿拉伯数字表达方式也是人家印度发明的,难道算是西方哲学吗?英国人也是没有回到未来啊。而且我们现在中文的逻辑推理表达记述,不也是弃用了古代的繁复的记述方式吗?

          其实如果有人能详细的总结描述中国文化的所谓博大精深的哲学表达具体形式,逻辑表达方式是哪些,那么配上相应的程序语言,也不是难事。

          但是有谁一条一条总结过吗?只看到泛泛而谈,博大精深是最常用的词语。

          现状是道可道非常道,名可名非常名啊,无从下手。

          而且也没见过那种拉丁语言的表达方式跟现在的编程语言相同,只是借用了英文字母作为符号名称,否则就那么几个#!$%%&*)特殊符号它不够用啊。其实美国人也是硬着头皮上的。

          中国人编程的主要问题是程序库都是外国编的,自然手册也都是英文的。只是学习编程语言容易,买本中文版的编程语言教材就是了。

          问题是程序库的手册基本是英语,读起来英文要求高些。编程又不可能不用程序库。即便有中文翻译,也都是硬译,读着费劲。

          一套纯中文表述的编程语言,自然可以强迫所有相应的程序库都附有中文手册,但是同时减少了可以直接复用现有英文程序库的范围,需要自己把常用,非常用程序库都搞起来,这个才是推广的最大障碍。

          • 家园 说说个人不太成熟的看法

            首先提一下您关于阿拉伯数字的看法,本人认为这个和哲学关系不太。其实印度人发明的阿拉伯数字本身只提供了两个优点:一是单独的0符号,二是十个单独的没有重叠的简单符号(几乎都是一笔画)。其实更重要的是十进位值制,这个最早是中国人发明的,在公元前14世纪就有记载;而印度到6世纪才有,欧洲至少9世纪以后才有(欧洲现有最早文献是公元976年的)。如果这个东西作用大到能影响哲学甚至科学发展,那么中国几乎要领先世界2000年。

            下面是本人关于中文化计算机语言的一点不成熟看法:

            首先,中文化计算机语言不是现有计算机语言的中文化,后者做出来的东西顶多能和原版一样好用(大多数情况下应该是远远不如的),所以几乎没什么价值。中文化计算机语言,至少是读起来象中文(这个可以和COBOL与英语的关系对比),玄一点说就是能反映中国的文化。要做到这一点,俺有一个猜想(仅仅是个猜想,甚至是想象),就是假设没有西方文化的情况下,中国人自己发明的计算机会是什么样子,其中俺觉得最有可能的是:

            1. 算盘->算盘机->广泛使用的算盘机体系结构->在此体系结构下的成熟的算盘机机器语言和汇编语言。

            2. 汉语的文法语法分析->形式化的汉语子语言生成规则理论->生成规则可用上述算盘机进行描述和执行->汉语化的高级计算机编程语言。

            以上的每一步其实在现实中都有很大障碍,但不妨碍我们做假设。上面的1以现在的技术实现起来应该没什么太大问题,已经有理论证明算盘机的计算能力和一般递归函数是等价的,因而也是和图灵机等价的,即使不做个真机器,写个模拟器应该没什么太大问题。关键是2,目前来看仍然处在研究之中,少有重大突破(也许有其它方法,就不是俺所能知道的了)。

            最后说几句关于“名学”的,这个东西其实早失传了,著名的“辩家21事”,大部份连命题的具体内容都不知道了,“白马非马”的真正含义到魏晋就很少有人理解了。如果不是胡适写了本《先秦名学考》,估计到现在我们也不会知道(这本书只写了一半,胡适凭它拿到博士学位后就不写了,所以别人叫他“半卷博士”)。

            《公孙龙子-名实》中说(其实这本书很多部分可能不是公孙龙本人写的):

            “物以物其所物而不过焉,实以实其所实而不旷焉”。

            俺的看法,这里似乎已经包含了朴素的集合论思想,那么白马非马的就个可以解释为:{白马这个集合}非->不是->不等价于{马这个集合}

            • 家园 个人认为

              “白马非马”恰恰没有现代集合论的概念。白马是马的一个子集(或者子类),马不能过,是表示马这个父集合(父类)下的各种马,包括白马这个子集(子类)

              {白马这个集合}非->不是->不等价于{马这个集合}
              集合论不光有等价于还应该有包含于,应该是{白马这个集合}包含于{马这个集合}

              白马非马说到中文编程,又想起构词不同了,英文“three person”里的“person”这个父集合与“man”、“woman”子集合并没有相同词根,而中文的“人”、“男人”、“女人”明确了男人和女人是“人”这个父类的继承。

              • 家园 按原文理解可能是这样的

                不过中文不是一种精确语言,白马既可以指一匹白马,也可以指白马这个类也就是集合(英文当然可以通过单复数明显区分)。“非”这个词也是一样有歧义。不过有歧义恰恰应该是逻辑进步的动力,如果名学能继续发展的话我相信也能推导出现代的集合论,不过由于早夭没有实现。所以我认为是朴素的集合论。

                • 家园 这个例子明显不妥

                  (英文当然可以通过单复数明显区分)

                  如果是horses,那么我只带了one horse,如果是horse那么我带了tow horses都可以用类似于“白马非马”诡辩

                  • 家园 我的意思是如果是英文就不会有这样的诡辩

                    英文白马非马应该是

                    A white horse is not a horse. 或

                    White horses is not horses.

                    这两个命题在估计在英文里没有什么讨论价值。但中文里则可以从这个歧义中提炼出某些东西,尤其是特定于中文的东西。

                    • 家园 不同意见

                      那英文的标语该怎么写呢?

                      “horse is forbidden”?或者“horses are forbidden”?

                      我们应该更多的是看见前者吧?

                      “I am riding the white horse。white horse is not = horse。”

                      那么white horse(!=)horse在英文中也应该成立,white也好白也好都是都是horse或者马的定语无关中文或者英文

                      白马非马的本意是把“马(horse)”这种普适性或者全集当成特指性或者子集来曲解

                      甚至于在英文还能发生houses这种>=2的集合和horse这种=1的集合故意曲解的问题

                      • 家园 白马非马的本义到底是指什么呢?

                        所谓白马非马的本义,根本是不存在的。

                        原文是:

                        “白马非马,可乎?”曰:“可。”

                        也就是:“白马非马”这个命题的值,可不可以是真呢?答:可以。

                        也就是说只要使“白马非马”这个论题为真就可以,而没有什么本义。包括公孙龙本身的解释,只是对这个命题为真的很多种解释中的其中几种。(这个论题实际上应该是宋国人儿说最早提出来的,但原内容已不可考,公孙龙的解释似乎也主要是从“不等于/不等价”的角度解释的,也即使用“马”的地方不能直接代换为“白马”)。

                        俺的意思是,这个命题本身就带有很严重的中文色彩,是在中文使用过程中自然产生的。而英文没有产生类似的等价论题,也是由语言特性决定的。而逻辑本身也是在使用语言的过程中产生的,所以如果中国古代逻辑学要发展,必然是在对已有论题的深入讨论的基础上,没必要拘泥于所谓的“本义”,如果说这个论题已经定性了,没可能讨论下去了,那只能说,1)这个论题解决了。2)逻辑学死掉了。您非要用西方逻辑学解释一个已经死掉的论题,那除了再一次验证西方逻辑学的正确之外,没有什么其他意义。

        • 家园 现有计算机语言对任何语言都差不多

          比较赞同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和冯诺依曼机原型没有被广泛接受。

              修改代码,还算是理论上说的清楚,而因为实践中调试量过大难以实现,那么直接使用自然语言,其行为范围恐怕现在理论上都覆盖不了,谈何广泛应用(人工智能研究例外)。

              结论:计算机语言不是自然语言的延伸,而是数学表达式和工业原则碰撞的结果。从图灵开始的数学研究奠定其方法集合,工业原则和调试成本剔除了某些方法,而接近自然语言的语法,无法通过工程原则检验。以后这些语言就算应用,也必然是作为嵌入语言,在传统的命令式或函数式的宿主语言控制下解决特定问题。

              通宝推:唵啊吽,
              • 家园 有点明白了

                但有几个观点不敢苟同。

                1. AST是编译阶段生成的,跟执行没什么直接关系,也和自修改代码没什么直接关系。不管什么源代码,主流编译器几乎都要把源代码转换成AST再进行其他处理。修改AST和修改源代码本质上是相同的。

                2. 目前自然语言和计算机语言之间的差距确实很大,但是这并不意味着这个鸿沟就没办法缩小。当然目前这方面没什么重大突破,语言学的成就目前还只能应用到自然语言理解和自然语言识别方面,但并不意味着将来不会出现很接近自然语言的计算机语言,虽然他们都是高度形式化的。

                • 家园 多谢 刚查了一下,Internal PG理解错了

                  现在看来是一种元编程手段。

                  不能缩小的范围和理由都说了:工业实践中,不好框定调试范围,再具体说,因为我看不出限制自然语言的作用域的办法。当然可以人为限制死,但这样限制之后,比起已有语言有何优势呢。

                  退一步问:使用自然语言,我们获得了什么样的好处?大多数已有简单代码,同样是自然语言半天表达不清楚的。为什么自然语言获得了更强的生产力,难道通过让朗诵者上岗,程序员下台,产能能得到提升,成本能够下降吗。

                  已有的计算机语言是伴随着软件工程一步步发展起来的,自然语言要取代的话,处理工程问题还是得一步步走过来。

                  以自然语言写的法律为例,其运行的精确程度,达成预期目标的效果也并不让人满意啊。

      • 家园 汉字在计算机逻辑上问题很大

        这么个简单例子如果能说明中文编码的长处或短处,那计算机产业也就是街头买大萝卜的水平。

        汉字的问题就是无法断句,英语在断句和语法上拥有相对于汉字的优势,比如很简单的一本萨缪尔森的《经济学》,我看过英文版和日文版,觉得都比中文版易懂,虽然中文是我的母语。

        比如,上面我写的这么简单的一段文字,如果我不加入空格,一个将汉语作为外语者是很难判断每个字到底是与上一个字还是与下一个字合并构成单词的,但如果你需要我把单词与单词之间加入空格,那么中文编程语言的优势就完全不可体现了。

        如果你觉得中文作为编程语言有优势,你不妨可以看一下我写的总结词:

        最后,说 一句, 编程 语言 不是 简单的 将 if 换成 若,outprint 换成 输出 就 成为 一门 新 语言 的。

        中文 代码 如果 不是 这么 写,是 很 难 成为 一门 系统的 编程 语言 的。

        • 家园 这逻辑同样适用于英语,而且英语表现更糟

          英文单词断词难,断句也难。

          比如你可以吧 i am a student,you are a teacher.去掉空格和标点,看看是什么效果,中文绝对好得多。

          iamastudentyouareateacher

          我是学生你是老师

分页树展主题 · 全看首页 上页
/ 11
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河