近几年来,我越来越多地思考语言问题。或者换句话说,表达方式问题。当然,我认为维特根斯坦后期的哲学是对的,虽然还不够精细。也就是说,我认为语言寄生在要表达的问题中,并强烈依赖于“生活方式”。
让我们把焦点聚拢一下,对准计算机程序设计语言这种人工语言,好使的我们的讨论可以落到实处。上面说到,语言与问题密切相关,那么我们看看计算机程序设计语言关联的问题是什么。
计算机程序设计语言泛泛的说,是要解决各种可计算问题。对于可计算问题,图灵机清晰的捕获了这个概念,谁想深入请自己去看相关论文。具体的说,计算机程序设计语言就是用计算机解空间元素表达问题领域的问题的。更直白的说,计算机程序设计语言就是要表达出问题领域的问题的一个抽象(或者叫做模型)。由于问题领域元素无限丰富,逻辑上讲,研究问题领域元素无助于我们对于计算机程序设计语言的认识。所以我们聚焦在计算机解空间。它的元素相对清晰和有限,我们可以有一个坚实的基础讨论计算机程序设计语言。
计算机空间涉及到的,直觉可以捕获的就是数据和算法。往下落实就成了数据及指令,在往下就是存储了,所以往下没有什么价值,往上呢?往上就散焦了,就跟领域模型贴近了。所以,我们就关注数据和算法。
我认为一个合格的计算机程序设计语言应该能够比较好的支持数据抽象和算法(函数)抽象。好,现在已经到了我们的立足点了,我们要以此为基础,探讨计算机程序设计语言应该有的几种基本构造。
对于数据抽象,其实从COBOL提出来记录以后,再也没有什么特别值得惊奇的发展。也就是说,对于数据抽象,记录(熟悉C语言的可以想想struct)作为数据抽象是完善的。后来的Object其实也没有脱离了记录这个基本的概念。只不过把可以操作这个记录的那些操作绑定在记录上了而已。
算法抽象则复杂的多,最初抽象为routine,表示一个操作序列,后来抽象为lambda(abstract),表示一个对应(转换、操作)法则。 Eiffel还特地的区分出query和command,我们意识到,这个区分对于表达契约必不可少。后来发展出来closure,也不过就是 lambda加上该操作施加的对象(数据)而已。
但是,很快的,人们发现操作序列本身没有多少好讨论的东西,反倒是操作序列所生存的环境跟操作序列之间,操作序列们之间有各种各样的可能性。很快,人们发展出来最稳定的caller和callee;以及非常常见的coroutine和yeild,另外,另一个角度出发又出现了thread和 concurrent。最后,我们的主角登场了,它的名字是aspect,按照发明者的解释,它是横切关注点。也就是说,它是横跨多个模块的,与模块本身的业务逻辑关系不大但是与整体的系统要求密切的那种东西,比如事务,安全,性能统计,日志等等方面的东西。显然,它发现和关注所有算法抽象的共性,也就是所有算法不太关注的,对自己来说非本质的东西。显然,这种东西非常有用。这个东西最基本的实现方式是:Intercepte。也就是需要在算法抽象的执行序列中的某一点插入一个别的执行序列,以完成共性的东西。
据我的理解,一旦一个问题能够有一个清晰而高效的数据抽象来表达,那么这个问题就算是解决了。对于算法抽象,它们之间的各种关系,都可以用栈做一个清晰的表达。但是,我们还有一个更通用的方式,那就是:Continuation,它可以高效的表达上面所有的算法抽象关系构造。
另外,我们不能忽略现阶段计算机编程语言所发展的概念,比如:泛型、静态类型安全、元数据、契约、类型推导、MOP等等。原因是这是“生活习惯”,这是大家都接受的一种状态。
这样我们就可以以这些基本构造创建一个新型的通用目的的语言,对它的扩充可以方便的进行,不需要对语言本身进行大幅度的修改,而只是提供各种各样的组合这些语言构造的库就可以了。
用它跟发展中的C#3比较的话,我可以非常自豪地说,这个语言比C#3简单易学,同时比C#3优雅强大:)。因为我们只需要面对非常少的非常流行或者通用的概念,就可以构造出来非常强大的抽象。当然了,这儿我没有提到BETA,它其实跟我构想的语言是最接近的了,不过,它用了一个不太流行的概念叫做 pattern,这恐怕是阻碍它流行的一大原因。因为语言毕竟是一种“生活方式”,无论从哪个角度来说。
分享到:
相关推荐
人工智能自然语言处理视角下的胡适语言学思想再思考.pdf
姚钢强在其讲座“编程语言中的架构思考”中,分享了他在不同项目中积累的经验,特别是在优化系统性能、提高稳定性以及资源利用效率方面的实践。 首先,姚钢强提到了架构优化的重要性,通过改善系统架构,他成功地将...
《语言学纲要》的思考题涵盖了语言的本质、作用、语言与说话的关系,以及语言学习和社会性质等多个方面。以下是对这些知识点的详细解读: 1. 语言定义:语言被定义为人类最重要的交际工具和思维工具,是社会成员...
【文章标题】:“我校少数民族学生国家通用语言文字使用若干问题思考” 【文章描述】:本文主要探讨了在自治区高等教育背景下,少数民族学生使用国家通用语言文字(国语)所面临的挑战和存在的问题,以新疆师范高等...
《高级语言程序设计》课程是计算机科学的基础课程,主要涵盖了编程语言的基本概念、语法结构以及程序设计的基本方法。...这正是高级语言程序设计这门课程的目标所在,即培养出能够独立思考和解决问题的程序员。
【计算机软件开发语言的认识与思考】 计算机软件开发语言是构建现代信息技术系统的基础,它使得人类能够与计算机进行有效的沟通,创建出满足各种需求的应用程序。本文主要探讨了计算机软件编程的研究,以及软件开发...
《【一百种语言问好】一百种语言与思考演讲稿》正是围绕这一核心理念展开的,它呼吁教育工作者重新审视儿童教育的实践方式,以及如何通过尊重儿童的多样表达来实现教育的真正价值。 首先,演讲稿强调了尊重儿童自我...
【认知语言学理论思考】 认知语言学是一种以人类认知过程为基础的语言学研究领域,它将语言视为人类思维和经验的反映。在这个理论框架下,语言不仅仅是符号系统,更是一种理解和创造意义的方式。以下是对认知语言学...
【英语教育硕士学位论文写作语言的思考】 撰写英语教育硕士学位论文的主要目标是提升学员的科研能力和解决实际教学问题的技能,而非单纯的高级英语写作训练。当前的制度规定论文必须以英语为唯一语言,这对某些学员...
【幼儿园语言教学活动游戏化的思考】 幼儿园阶段是儿童语言能力形成和发展的重要时期,语言教学活动是培养幼儿语言能力的关键手段。游戏化教学方法因其能够激发幼儿的学习兴趣和积极性,成为当前幼儿园教育的趋势。...
"如何肢体语言视频观看思考沟通.pptx"的主题聚焦于肢体语言在沟通中的作用,这在技术领域同样至关重要。工作中的大部分时间,技术人员都在与团队成员、客户或管理层进行交流,而沟通效率和效果直接影响到项目的成功...
逐步介绍了Go语言的语法、特性以及一些标准库,内置数据类型、语句和控制结构,然后讲解了如何在Go语言中进行面向对象编程,Go语言的并发特性,如何导入和使用标准库包、自定义包及第三方软件包,提供了评价Go语言、...
文学研究中的语言问题分析及其新思考,涉及到文学理论、文学作品、文学翻译等多个领域,语言作为文学的核心元素,其特殊性、形象性和情感性在文学研究中占据着至关重要的地位。语言的演变和发展与文学研究的进程紧密...
这篇关于英语教育硕士学位论文写作语言的思考主要讨论了在英语教育硕士论文写作过程中,将英语作为唯一语言的要求是否合理。作者强调,论文写作的主要目标是提升学员的科研能力和解决教学实际问题,而不是高级英语...
### 在信息技术课堂教学中引入Scratch语言的思考 #### 一、引言 随着信息技术的快速发展,“互联网+”时代已经到来,新一代青少年成长于数字化环境中,思维方式和能力展现方式发生了根本性的变化,从以往的记忆为...
【英语教育硕士学位论文写作语言的思考】 撰写英语教育硕士学位论文的主要目标是提升学员的科研能力和解决实际教学问题的技能,而非单纯的高级英语写作训练。当前的制度规定论文必须以英语为唯一写作语言,但这可能...
逐步介绍了Go语言的语法、特性以及一些标准库,内置数据类型、语句和控制结构,然后讲解了如何在Go语言中进行面向对象编程,Go语言的并发特性,如何导入和使用标准库包、自定义包及第三方软件包,提供了评价Go语言、...