『代码的未来』读书笔记

从一个语言设计者的角度,纵览了一遍目前热门的编程语言,和它们背后的意义。很有启发性的一本好书。它回答了我下面的这些问题。

什么是元编程?
在程序运行过程中也可以对程序本身进行操作。
例如,描述数据所具有的结构的数据,也就是关于数据本身的数据,被称为元数据(Metadata)。再举个比较特别的例子,小说中的角色如果知道自己所身处的故事是虚构的,这样的小说就被称为元小说(Metafiction)
=》“用程序来编写程序”
意义:获取和变更程序本身信息的功能,并动态更改 -》即 Ruby 的动态运行模式
实例语言:Javascript、Ruby

什么是函数对象?
比如js,把函数当成值来用,高阶函数(目的:提高程序通用性)

一个编程语言设计者眼中的编程语言学习与如何评价一门编程语言?
-元编程
-内存管理 – 垃圾回收
-异常处理
-闭包
-服务器端 客户端
-动态 静态

什么是闭包?
闭包(Closure)这个词原本就是封闭的意思。被封闭起来的变量的寿命,与封闭它的函数对象寿命相等。也就是说,当封闭这个变量的函数对象不再被访问,被垃圾回收器回收掉时,这个变量的寿命也就同时终结了。
1. 生命周期
2. 作用域

什么是动态语言?
1. 动态运行模式
2. 动态类型

V8为什么这么快?
通过『特殊化』

Go 语言是什么?
意义:解决 C 和 C++ 的效率问题
特点:
没有继承关系的面向对象 – 有鸭子样的就是鸭子
基于 C 的特点,带垃圾回收
多返回值
并发的 Go 关键字

Dart 语言是什么?
意义:解决 js 问题:几乎所有数据(除了数值和字符串)都是对象(散列表),散列表的对象的性能问题(跟数组和结构体)。Dart 用基于类的对象系统(结构体)取代。

CoffeScript 是什么?
基于 JS 的一种语言(有点像 JS 的另外一种语法规范)。解决了全局变量的问题。借用了 Python 和 Ruby 的语法。

什么是MapReduce?
MapReduce是将数据的处理通过Map(数据的映射)、Reduce(映射后数据的化简)的组合来进行描述的。
简单来说就是将计算分块,然后整合每个分块结果的一种方法。
MongoDB 也有 MapReduce,用来计算。

什么是面向文档数据库?
例子:MongoDB。里面保存的 JSON 就是文档。(DB,Collection,Document)
特点:
以JSON(JavaScript Object Notation)格式保存数据
不需要结构定义
支持分布式环境
乐观的事务机制
通过JavaScript进行操作
支持从多种语言进行访问