从编程语言到计算的执行过程
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 计算的魔法小结
实际上,我们用魔法唤起了计算机的精神。 计算过程确实很像巫师对精神的看法。它看不见也摸不着。它根本不是由物质组成的。
然而,这是非常真实的。它可以执行智力工作。它可以回答问题。它可以通过在银行付 款或控制工厂中的机械臂来影响世界。
我们用来执行计算过程的程序就像一个巫师的咒语。
它们是由神秘而深奥的象征性表达精心组成,这也规定了希望我们的进程执行的任务的编程语言。
- 点赞
- 收藏
- 关注作者
评论(0)