学习笔记之编程之魂(与27位编程语言创始人对话)

Masterminds of Programming 编程之魂(与27位编程语言创始人对话)

Federico Biancuzzi / Shane Warden

内容简介

本书是27位杰出的设计师与你分享他们的智慧和经验。书中以问答方式告诉为什么要创建某种编程语言、它在技术上如何开发、如何教授和学习,以及它如何顺应时代发展等。你会发现构建成功编程语言所需的思想和步骤,它广受欢迎的原因,以及如何处理程序员常见的问题。因此,如果你想深入学习设计成功编程语言的思想,本书会对你大有帮助。

-------笔记--------

去年的书,读读大师的谈话受益匪浅。

Ch1  C++(使用语言/OOP和并发/关于未来/有关教学)

  1. C是一种强类型、弱检查的语言。
  2. hack程序,是指一种辅助程序,完成对系统功能的扩展,即替换或增强原有的系统功能。 
  3. “一般资源管理”是指让一个对象拥有一种资源(例如文件句柄或锁)的流行技术。
  4. 类型安全并不等于安全性。编写C++的人们如果大量使用未封装的数组、造型和非结构化的新建和删除运算,简直就是自找麻烦。为了更好的使用C++,你必须采用这种风格:它会以简单、系统化的方式,将类型安全违例和管理资源(包括内存)减少到最低限度。 
  5. Generic Programming :泛型编程。
  6. 我并不想把C++描绘成“一种OO语言“或”一种GP语言“;它更是一种支持下列特性的语言:C风格编程/数据抽象/面向对象编程/泛型编程。 
  7. 闭包(closure)是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。 
  8. K&R, Brian W.Kernighan和Dennis M.Ritchie编写的《The C programming Language》,简称K&R,是最经典的C语言教程之一。 
  9. C++主要改进包括:
    支持现代及其体系结构和并发:一个机器模型、一个线程库、线程本地存储器和原子计算,以及一个异步值返回机制(“未来”)
    更好的支持泛型编程:为模板定义和使用提供更好的检查,以及更好的模板重载的概念(用于类型、类型组合、类型和整数组合的一个类型系统)。基于初始化程序(auto)的类型推演、统一初始化程序列表、统一常量表达式(constexpr)、lambda表达式等。
    很多“微小的"语言扩展,比如静态断言、动态语义(move semantics)、改进枚举及空指针名称(nullptr)等。
    支持正则表达式匹配、哈希表(例如unordered_map)、智能指针等的新标准库。  

Ch10  SQL(一篇开创性的有重大影响的根本性的论文/语言/反馈和演进/XQuery和XML)

  1. 给定一个大量的结构化数据集合,在你不知道人们需要何种运算时,你如何能提供一种高效方式来采集、检索和更新信息呢?这就是E.F.(Ted)Codd创造的在关系模型之后的基本概念。SQL是关系模型最明显的实现,这是一种用来描述想要什么而不是如何去做的声明式语言。Donald以Codd的思想为基础,Chamberlin和Raymond Boyce开发了SQL。 
  2. 不过,你并不总是能够设计一种新语言时又灵活的定义一个新的数据模型。例如,Xquery的设计者没能发明XML--它们必须与XML Schema和其他W3C标准定义的数据模型一起工作。 
  3.  ?在早期的设计决策中,你想要SQL是说明性语言,而不是过程性语言。您做出这种选择的重要标准是什么?
  4. 如果用户告诉系统用什么算法来处理查询的详细步骤,那么优化器就无法灵活的进行改变,比如选择一个替代访问路径,或者是选择一个更好的连接顺序。说明性语言要比低级程序语言更加优化器友好(optimized-friendly)。 · 
  5. 我们对数据独立性很感兴趣,这意味着系统管理员可以自由添加删除索引、修改数据的结构,并创建新的数据视图。 
  6. 必须考虑用户的生产率。这更易于用户在高级级别上使用熟悉的词汇来表达意图,而不是在他们不熟悉的低级别上来表示他们的查询。 
  7. 因此,我们认为说明性语言在最优化、数据独立性以及用户生产率方面具有显著的优点。 
  8. 我们认为视图应该广泛用于数据查询,因为不同的应用程序需要以不同的方式来访问数据。另一方面,与在更新应用程序方面的应用相比,视图在查询应用程序方面的应用要广泛的多。 
  9. 万圣节问题:这个词成为无法使用已被更改或修改的属性索引来访问数据的代名词。由于这是所有的关系数据库优化器都必须解决的一个问题。这个词自然而然就在业内广为人知了。 
  10. 以下是我的设计原则清单。它们中很多看起来似乎是常识,但在实践中坚持并不容易。闭包/完备性/正交性/一致性/简单性/可扩展性/抽象/最优化/适应性。  
  11. SQL之所以受到欢迎,主要原因来自于Ted Codd的关系数据模型的强大功能和简单性。 SQL成功的具体原因包括:
    ·SQL支持一整套数据库管理任务,对于这种语言被接受来说是非常重要的。
    ·SQL非常容易学习。
    ·至少有两家供应商(IBM/Oracle)能提供强健的多用户的SQL实现,而且多平台运行。
    ·SQL还提供对流行的编程语言的接口支持。
    ·ANSI和ISO在SQL标准化方面的前期工作,为用户将实现移植方面提供信心。
    ·SQL开发生逢其时,当时,许多企业正在开发活着将关键应用程序转为使用集成的企业数据库。
  12. SQL一直受欢迎原因包括:
    ·ISO的SQL标准提供了途径让语言演变以满足不断变化的用户需求。
    ·SQL可以管理生命周期很长的持久性数据。
    ·SQL非常强健,足以解决实际问题。 
  13. SQL的复杂性迅速发展到了编程语言级别,而且也需要同编程语言相当的培训,因此,它主要由专业人士来使用。
  14. 我对最近基于WEB的应用程序深表钦佩,比如说Google,它可以用于检索有用的信息而不需要任何培训。  
  15. 很难设计出一种语言,其使用范围跨越强类型到松散类型。 
  16. 我会将研究中的成功定义为能够产生持久的技术影响力。如果我们能开发出广泛应用的理论、接口或者方法,并且经得起时间的考验,我认为我们就可以说我们的研究具有一定的价值。

Ch13  C#(语言和技术)

  1. 当微软刚刚处理完来自于Sun Microsystems公司关于Java编程语言修改的诉讼官司,他们就转而求助于经验丰富的语言设计者Anders Hejlsberg,请他设计一种有强大的虚拟机支持的面向对象的新语言。结果就产生了C#,用于替代Microsoft生态系下的Visual c++和Visual Basic。 
  2. .Net是作为多语言平台开始设计的,而且,你看它现在驻留了各种不同语言:静态语言、动态语言、函数式语言,还有XML这样的说明性语言等。然而,它们下面都是相同的框架、相同的API,而这种影响是非常巨大的。如果这些都自成一体的话,你就会在互操作和资源消耗中慢慢耗死。 
  3. Turbo Pascal是创新性的研发环境,Delphi是可视化编程,而RAD、C#和.NET都与可控执行环境、类型安全等有关。 
  4. 所谓延续(continuation),是指函数式编程中的一种函数调用机制。CPS(continuation passing style)是指延续传送风格。call/cc调用(call with current continuation)是指取得当前的延续,传递给要调用的这个函数,这个函数可以选择在适当的时候直接返回到当前延续。 
  5. LINQ,即语言集成查询,它是一组技术的名称,这些技术建立在将查询功能直接集成到C#语言(以及Visual Basic和可能的任何其他.NET语言)的基础上。借助于LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。对于编写查询的开发人员来说,LINQ最明显的"语言集成"部分是查询表达式。 
  6. 在计算机行业,通常用几代来表示编程语言的发展。它是按照语言的抽象成都(即和自然语言的接近程度)划代的。第三代编程语言(3GL)是一种"高级"编程语言,例如Pascal、C都属于这一类。而第四代编程语言(4GL)则包括VB、C++等。访问恩数据库的语言通常都是第四代。
原文地址:https://www.cnblogs.com/pegasus923/p/2013089.html