第四章: 元语言抽象

在口语中,有摩力的词 如 abracadabra,芝麻开门,和其它的吧。
但是在一个故事中的摩力词语在下一个故事中就不是了。
真正的摩力是理解单词的作用,什么时候用,为什么用;
戏法是需要学习的。
并且这些词语是由我们的拉丁字母组成的;我们能用笔画几十个笔划
而成。这就是关键! 戏剧也是这样的,如果我们能够伸手得到它,
仿佛戏剧的关键就是戏剧!

在我们的程序设计的研究中,我们已经了解到专家级程序员
使用所有的复杂的系统的设计者通用的技术 来控制他们的设计的
的复杂度。
他们组合原生的元素形成组合的结构对象,
他们抽象组合对象形成高层次的构建块,
他们采用系统结构的适合的规模的视角来模块化。
在这些技术的演示中,我们已经使用LISP语言来描述过程,
组装可计算的数据对象,在现实世界中的对复杂现象的建模的过程。
然而,我们应对日益增长的复杂问题,我们发现LISP,或者是其它的
已有的编程语言对于满足我们的需求来说是不足够的。 为了更有效地
表达我们的思想我们必须持续地拥抱新的语言。 在工程设计之中,
为了控制复杂度,建立一种新的语言是一种强有力的策略。
在处理一个复杂的问题时,通过采用一种新的语言用一种特别的方式,来描述
问题,常常增强了我们的能力。 使用原生对象,组合的方法,抽象的方法,
是特别地适合手头的问题的。

编程是由多种语言混合的。有物理语言,例如适用于特定机器的机器语言,
这些语言关注于数据的表示和存储的字位的控制的表示和原生的机器指令的表示。
机器语言的编程者,关注于 在特定硬件上的 能够做到把资源有限的计算过程
高效实现的系统和工具。高级语言建立在机器语言之上,隐藏了机器语言
关于数据表示等的细节。这些语言有组合的方法,抽象的方法,
例如过程定义,适合于系统的大规模的组织。

元语言抽象,也就是建立新的语言 在工程设计的所有的分支中,
都扮演了重要的角色。对于计算机编程而言,尤其重要,
因为在编程之中,我们不仅公理化我们的新语言,
而且也通过构造解释器的方式,实现这些新语言。
一个解释器对于一个编程语言来说是一个 针对语言的表达式,
执行相关操作来解释执行表达式的编程模块。
认为它是在编程中,最基础的思想 也是不过分的。

解释器仅仅是另外的一个程序,用来确定在一个
编程语言里表达式的含义的。

为了理解这个观点,我们需要改变我们自己作为一个编程者的定位。
我们把自己看作是语言的设计者,而不仅仅是一个由其他人设计的
语言的使用者。

在事实上,我们可以认为几乎任何一个程序都是某个或者是某些语言的解释器。
例如,在2.5.3部分的运算多项式的系统 内嵌了多项式的运算规则,和在列表结构的数据上
的操作的实现。如果我们为这个系统增加读和打印多项式的表达式的程序,
我们就拥有了一个特定的用于符号数学的问题的用途的语言的内核。
3.3.4部分的数字逻辑模拟器 和3.3.5部分的约束传播者 在它们的自己的领域中
是合法的语言,它们中的任何一个都有自己的原生子,组合的方法,
抽象的方法。 从这个角度上看,以大的扩展性的计算机系统为顶盖的技术
加上构建计算机新语言的技术,再加上计算机科学本身 就成了构建
合适的描述性语言的原则。

我们现在开始用其它语言来构建语言的技术之旅。在这一章中,
我们将用LISP作为基础,实现一个LISP程序的解释器。LISP特别适合这个任务,
通过为LISP自身构建一个解释器的方式,我们第一步要做的是
理解语言是如何实现的。我们的解释器实现的语言是我们在本书中使用的LISP
的SCHEME方言的一个子集。尽管在本章中描述的解释器是为LISP的一个特定的方言
而写的,但是它包含了一个 任何一个面向表达式的语言(这种语言是设计用来在
序列化的机器上写程序的)的解释器的必要的结构。事实上,大部分的语言的处理器
都包含一个小的 类LISP的解释器。 这种解释器为了演示和讨论的目的,
已经被简化过了,一些对于生产级的LISP系统而言很重要的特征已经被去掉了。然而,
这个很简单的解释器对于这本书中的大部分的程序的运行是足够的了。

用LISP程序写解释器的一个重要的好处是我们能够有选择性地实现解释器的规则,
通过对解释器程序的修改,来描述这些规则。我们使用这种威力有良好的效果的
一个地方是在计算模型表现时间的观念 的方式的方面获得了特别的控制权,而
计算模型表现时间的观念 这个事在第三章中,进行过集中地详细地讨论。
通过使用流,我们能够把现实世界中的时间的表现形式与计算机中的时间 脱钩,
也就是分离开来,我们这样就把状态与赋值的复杂性,迁移出一些来。
我们的流程序,却有时是笨重的,累赘的,因为它们被SCHEME的应用程序序的解释
所约束着。 在4.2部分中,为了提供一种更优雅的方法,我们将改变底层语言,通过
修改解释器来提供一种正常序的解释。

在第4.3部分中,实现了一个更有野心的语言学的改进,表达式可以有多个值,
而不是仅仅一个值。在非确定性的计算的这个语言中,在表达的流程中
生成表达式的多个可能的值是很自然的,然后再为这些值搜索以满足特定的约束。
用计算与时间的模型为单位,这像是有时间的分支分到一个可能的特征的集合,
然后再搜索合适的时间线。用我们的非确定性的解释器,
利用语言的这种机制,可以追踪多个值,执行搜索能够自动化地处理。

在4.4部分中,我们实现了一个逻辑编程的语言,在这种语言中知识用关系来表达,
而不是计算中的输入和输出。即使这使得语言与LISP很不同,也不同于其它的
传统的计算机语言,我们将看到逻辑语言的解释器与LISP语言的解释器
分享着必要的结构。

第四章: 元语言抽象相关推荐

  1. sql语言管理中计算机系统,00051管理系统中计算机应用第四章数据库系统考纲

    第四章数据库系统考纲 一.数据库系统概述 识记: 1.数据模型:对现实世界事物特征的模拟和抽象就是这个事物的模型.在数据库中数据模 型是抽象的表示和处理现实世界中数据的工具. 首先按人们的认识观点将现 ...

  2. 管理系统中计算机应用第四章重点,管理系统中计算机应用课堂笔记第四章(4)...

    管理系统中计算机应用课堂笔记第四章(4) 分类:自考 | 更新时间:2016-07-08| 来源:转载 这个分析和抽象工作可分以下三步进行: 5.2.1数据流程图的绘制 数据流程图既是对原系统进行分析 ...

  3. 黑客与画家 第十四章

    2013/7/16 15:20 写于 家 第十四章 梦寐以求的编程语言 编程语言怎么样才能流行起来呢?专家黑客的看法,如果有黑客愿意使用,那么它就有可能流行起来.然后得到反馈,改进,流行.编程语言也是 ...

  4. C语言数据结构(大话数据结构——笔记2)第四章:栈与队列

    文章目录 第四章:栈与队列(115) 栈顶与栈底,空栈,后进先出 Last in first out(LIFO结构)(117) 进栈.压栈.入栈:栈的插入操作:出栈.弹栈:栈的删除操作(118) pu ...

  5. [转]Windows Shell 编程 第十四章【来源:http://blog.csdn.net/wangqiulin123456/article/details/7988010】...

    第十四章 设计Shell集成应用 有一些工具可以使应用程序更紧密地与Shell和底层系统进行集成.也就是说,用户可以象处理系统文档和程序那样处理你的文档和程序.例如,右击文件来显示可用功能列表等.Wi ...

  6. 领域驱动第四章-读书笔记

    以后简称作者为巨牛.^_& 第四章讲解的重点就是分离.领域的分离. 说实在的,读之前觉得,自己的设计模式用的也比较熟练了,OOP的设计也做过很多个了,分离什么都是小儿科.读完之后才发现,以前的 ...

  7. 系统架构师学习笔记_第十四章_连载

    第十四章  基于ODP的架构师实践 14.1  基于ODP的架构开发过程 系统架构 反映了功能在系统系统构件中的 分布.基础设施相关技术.架构设计模式 等,它包含了架构的 原则 和 方法.构件关系 与 ...

  8. PHP动态设计的设计流程,《PHP设计模式介绍》第十四章 动态记录模式

    到目前为止,您所看到的这些设计模式大大提高了代码的可读性与可维护性.然而,在WEB应用设计与开发中一个基本的需求与挑战:数据库应用,这些设计模式都没有涉及到.本章与接下来的两章-表数据网关与表数据映射 ...

  9. 计算机网络(第四章网络层)

    第四章网络层 4.1_网络层提供的两种服务 (1)虚电路服务 (2)数据报服务 4.2_网络协议 4.2.1_虚拟互连网络 4.2.2_分类的IP地址 (1)分类IP地址 三种分类方法 IP 地址的一 ...

  10. 深入理解Magento – 第四章 – 模型和ORM基础

    深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第四章 – 模型和ORM基础 对于任何一个MVC架构,模型(Model)层的实现都是占据了很大一部分.对于Mage ...

最新文章

  1. 记 fastjson泛型转对象 第一次可以正常转,第二次就变成JSONArray 问题
  2. Android开发者珍藏必备【学习资料篇】
  3. 人终究要活出自己对于这个世界的看法和自己的处事方式,并且由内而外的生成自信
  4. hdu- 5015 233 Matrix
  5. HDU 1054 Strategic Game 最小点覆盖
  6. 【C语言简单说】十七:数组
  7. ASP.NET Core的身份认证框架IdentityServer4--入门【转】
  8. nginx忽略文件名大小写
  9. nrm:安装与配置记录
  10. python os.walk遍历目录_Python 用 os.walk 遍历目录
  11. es文件浏览器怎么用_python爬虫入门:什么是爬虫,怎么玩爬虫?
  12. artcam 9.0英文版本下载_魔兽9.0暗影国度测试服前瞻 可能存在的仙狐坐骑详解
  13. 什么是DVD?DVD有些格式?
  14. 软件测试流程(完整版)
  15. 图论 ——五种最短路算法
  16. java中的URLEncoder和URLDecoder类
  17. Android使用Fragment打造万能页面切换框架(三)
  18. SVN 第一次上传项目和问题的解决方法
  19. 利用ps导出svg(主要用于上传自定义图标到iconfont)
  20. 1085: [SCOI2005]骑士精神

热门文章

  1. 《光剑文集》拾叶: 24首
  2. 不合适学计算机的人,想学计算机,这三类人并不合适!
  3. D. Count GCD
  4. java聚合支付之建行
  5. 【JS】中文繁简转换
  6. 国内开源镜像站地址汇总
  7. 最近十年诞生的6种新编程语言
  8. css直角线_CSS秘密花园:折角效果
  9. 洛谷P1005 [NOIP2007 提高组] 矩阵取数游戏题解
  10. 颜色码对照表(英文代码 形像颜色 HEX格式 RGB格式)