从编程语言到计算的执行过程

举报
码乐 发表于 2024/01/29 12:11:56 2024/01/29
【摘要】 1 计算的执行过程数学提供了一个精确处理“是什么”概念的框架。计算提供了一个精确处理“如何做”概念的框架。计算机语言不仅是让计算机执行操作的一种方式, 而且还是一种表达方法论思想的新形式媒体。因此,必须编写程序供人们阅读,而只是偶然 地供机器执行。其次,我们认为,这一主题要解决问题的基本材料,而不是特定编程语言结构的语法,也 不是有效计算特定函数的巧妙算法,甚至不是算法的数学分析和计算基础...

1 计算的执行过程

数学提供了一个精确处理“是什么”概念的框架。计算提供了一个精确处理“如何做”概念的框架。

计算机语言不仅是让计算机执行操作的一种方式, 而且还是一种表达方法论思想的新形式媒体。因此,必须编写程序供人们阅读,而只是偶然 地供机器执行。

其次,我们认为,这一主题要解决问题的基本材料,而不是特定编程语言结构的语法,也 不是有效计算特定函数的巧妙算法,甚至不是算法的数学分析和计算基础,而是用于控制大 型软件系统的智能复杂性的技术。

1.0 语言风格和美学

我们应该对编程的风格元素和美学有很好的感觉。他们应该 掌握控制大型系统复杂性的主要技术。我们应该能够阅读长的程序,如果它以模范风格编写的话。

我们应该知道什么不该读,他们在任何时候都不需要理解的有哪些。
我们应该对修 改程序感到安全,并且可以保留原作者的精神和风格。

这些技能绝不是计算机编程所独有的。我们在学习时被教授和借鉴的技术对所有工程设计都是通用的。

我们通过构建在适当的时候隐藏细节的抽象来控制复杂性。我们通过建立常规接口来控 制复杂性,这些接口使我们能够通过以“混合和匹配”方式组合标准的、易于理解的部分来 构建系统。

我们通过建立用于描述设计的新语言来控制复杂性,每种语言都强调设计的特定 方面并淡化其他方面。 我们对这个主题的研究方法的基础是我们坚信“计算机科学”不是一门科学,它的重要性与计算机无关。

计算机革命是我们思考方式和表达思想方式的一场革命。

这种变化的本质 是出现了最好被称为程序认识论的东西——从命令的角度研究知识结构,而不是经典数理学科采取的更具声明性的观点。

1.1 计算的结构

部分语言的结构非常类似我们在教育系统中接受的数理逻辑。

比如复合表达式 4+2*3-1,就像在传统代数中一样,算子可以在一个序列中复合。

  受过基础数学教育的人都会解读为“2*3 是 6,6+4 是 10,10-1 是9”。

不过,并没有那么简单。

 如果仅仅从左到右阅读,我们会得到“4+2 是 6,6*3 是18,18-1 是 17”,而不是 9。

那么为什么我们会得到 9 作为结果呢?编程语言包含运算符优先级规则,这些规则确定应执行序列中操作的顺序。像大多数编程语言一样,Python首先执行乘法和除法,然后返回并执行加法和减法。

您也可以就像数理逻辑一样,通过用括号括住表达式的各个部分来指示对操作序列的预期解释。
在将结果用于另一个操作之前,将完全评估一对括号内的所有内容。

它们形成复合表达式的方式很少,几乎没有句法结构。所有的形式属性都可以在一个小时内完成,就像象棋的规则一样,比如python的表达式语句如下。

	compound_stmt ::=  if_stmt
               | while_stmt
               | for_stmt
               | try_stmt
               | with_stmt
               | match_stmt
               | funcdef
               | classdef
               | async_with_stmt
               | async_for_stmt
               | async_funcdef
	suite         ::=  stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
	statement     ::=  stmt_list NEWLINE | compound_stmt
	stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]

使用不久之后,我们会忘记掉语言的句法细节(因为没有句法)并继续解决真正的问题——弄清楚 我们想要计算什么,我们如何将问题分解为可管理的部分,以及我们将如何处理零件。

它们支持(但不强制)比我们所知道的任何其他语言更多的程序大规模模块化分解的策略。

我们可以进行过程和数据抽象,我们可以使用高阶函数来捕获常见的使用模式。

我们可以使用赋值和数据变异对局部状态进行建模,我们可以将程序的一部分与流和延迟评估联系起来,我们也可以依次轻松地实现嵌入式语言。

我们研究一个想法的计算过程。这个计算过程是存在于计算机中的抽象存在。随着它们的发展,进程会操纵其他的称为数据的东西。

一个过程的演变是由一种称为程序,人们创建程序来指导流程。

2 计算的魔法小结

实际上,我们用魔法唤起了计算机的精神。 计算过程确实很像巫师对精神的看法。它看不见也摸不着。它根本不是由物质组成的。

然而,这是非常真实的。它可以执行智力工作。它可以回答问题。它可以通过在银行付 款或控制工厂中的机械臂来影响世界。

我们用来执行计算过程的程序就像一个巫师的咒语。
它们是由神秘而深奥的象征性表达精心组成,这也规定了希望我们的进程执行的任务的编程语言。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。