C语言读书笔记2014第17依:《代码的前景》

一经去西南出差了,却打友好之书架上跟Kindle中摸索不起感兴趣的修来,临出发前失去老SUN屋里寻摸一围绕,选中了《代码的未来》这本书。选中它的因由来几乎漫漫:Ruby之父写的题,作者是日本丁,日本丁写的开一般比较实用、也想打听一下Ruby、翻目录时发现产生Go、Dart、CoffeeScript、Lua几只新语言的对比分析、老SUN说网上对这个开评论是。

机达看了同步,一丁暴读了面前2章,90几近页,对各种语言中的最主要特性分析得一定好,对语言的迈入历史来了概括性的垂询。出差后白天忙碌工作,晚上将多余的局部高速读了了,后面三回的情针对我的话吸引力就是不够了,可能是技术性太胜了,我们不见面研究到这么深,只见面去用别人写好之备的框架。

首先章 编程的时光跟空间

平开始作者从编程的实质入手,编程就是开创出一致栽人类与计算机都能够理解的言语(编程语言),并透过如此的语言将人类的企图传达给电脑,这样的表现就是称编程。自然语言的歧义性太强,将来底用户界面肯定是圆满的语音输入应该没问题,但用语音把题目总体游说出,交给计算机去落实,现在看来还是相当有难度,假如明天实现了,那么程序员是免是设下岗了?还是都转入到还底层的代码的编中去?

编程是一样件创造性的工作,能够按照自己之意来创造世界,正是编程的极特别魅力所在。想起高中时录入的几乎履BASIC代码,能够做到繁琐的测算,就想方自己编辑一个小游戏会是呀状态为?从而容易上了编程这项工作使一发不可收拾。

微机语言的进化和摩尔定律也来死深的联系,但计算机的算法改变得连无老,特别是局部古老的底子算法仍于大方运。摩尔定律现在着力还行,但CPU主频的增强就基本到了顶峰,将来多对技术、内存容量增大、硬盘向SSD转变以见面化主流。我们的主次和算法需要什么适应这些变迁吧?

这儿想起当孩子有些之上,我启蒙性地给其看了扣LOGO语言,让它们宰制小海龟在屏幕上绘生奇异之画,她的确感觉到蛮神奇,但针对着手创造新的社会风气并凭极端可怜之意,可能女孩子的天性并无希罕这些东西吧,难怪女程序员如此的少。我哉未思强行给男女灌输什么编程技术,毕竟软件开发仍是一模一样件特别累之做事,还是别让孩子整天给代码过日子吧。

作者也敢地针对未来开展了展望,IT技术变化日新月益,5年即会见发现死挺之转。价格下降、性能提高、容量增大、带富增加,而且这些项都是按指数关系升华的,这些做了IT技术预测的底子。在这些增长方面,存储容量的叠加好像还快,而数传输速度增加并没有那么快,这些发展之非抵呢会见左右咱们的前途。

编程人员的思路果然离不起头编程,作者运用终端编程XP的思路来预测一下前景。当把几乎起指标还调动到巨大,世界会是什么体统?

处理器价格低得和白菜一样,现在的智能家电都观望有些方向了。将来之世界自然一切了芯片,物联网看来正是得。地板是智能地板、手表是智能手表、灯是智能灯、杯子是智能杯子、智能箱子,这些还以出现,将来的术语肯定不再使用“智能”这么无聊的单词,默认就是拉动计算机芯片的设备,便地还是电脑了,看来程序员事情再次多了,任务还复杂了。

处理器性能非常强会发生什么?将来自己之记录本配置会是1024核查?多核CPU并行编程肯定要发新的开拓进取,如果哪起编程语言有这种特点,应该是用着重关注之言语。可能作者把Go语言排在较靠前哪怕是此缘故吧。

容量非常坏?我之笔记本电脑会配备1EB硬盘?不,硬盘已经远非了,内存和硬盘已经合2为1了,因为内存为已是白菜价了,配置1TB内存?其它东西还存在云端了,没必要管啊容量问题了,因为带富不成问题,从网达到宣读写10G数目吧是几秒的事务?malloc()你不怕尽情地分配个八维数组吧,别失去随便什么内存溢出之类的不行,哈哈。现在因SSD为根基的数据库系统跟特别数额解析技术早已下了。

网带来富1Gbit/s?计算机刚刚出版时,那是一个中央集权的一世,一尊重型电脑,周围只有来部分顶。当口可以来同等玉电脑时,出现了C/S系统。当WWW浏览器在世界普及时,B/S方式的中央集权开始复辟。现在JavaScript在浏览器上风行,实际上以是C/S换个马甲复活了。如果B/S是来势,那若安排那么强的村办电脑又发什么用处吧?不,每令计算机本身为是网语计算着之一个节点,你必提供计算资源,才能够访问别人的服务?

仲章 编程语言的病逝、现在跟未来

2.1编程语言的世界

这里提到了打孔纸带、巴贝奇的差分机、女程序员Ada、第一贵计算机ENIAC,至于到底孰是当真的首先那是历史学家的从业了。计算机语言主要介绍了FORTRAN、COBOL、LISP、SNOBOL语言,然后说到了脚下之主流语言。

100年晚底编程语言会是啊样子?变化不大?使用编程语言来编程的这个行为已休存了?发明了再胜抽象度写法的编程语言?反正我是看不到了。

20年晚底编程语言是什么样子?肯定会在差不多CPU协作与多机分布式处理地方更为强劲。当前底线程编程模型实在太让程序员痛苦了。

2.2 DSL(特定领域语言)

外部DSL举凡由专用的言语引擎来兑现的DSL,可以高度自由之定制,但读成本比强。
YAML、JSON、正则表达式都好叫做外部DSL。XML非常通用,但叙冗长,不符合阅读和次序编制,将来见面怎么改善?

内部DSL则寄宿在某个同编程语言的底蕴及,这样即便非需再套一家新的语言,宿主语言的语法等都得以将来用,节约了汪洋底次开发时间。

骨子里设计一堆API的过程,就是均等栽设计DSL的经过。

自家呢已想管工区底图和剖面程序DSL化,核心程序员开发好组件库,其他程序员只需要这么描绘就行了:

a = Basemap.New

a.AddImage(image, 0, 0, 1, 1)

a.AddSurvey(…)

survey.Hide

SeismicLine.Show zxcVolume inline 200

……

可惜在C#里实现中DSL还是一定辛苦,只能临时用API了。

笔者认为Lisp、Smalltalk和Ruby适合作为内部DSL的语言,这或跟它们的元语言编程特性有关吧。

DSL
设计之组合要素:上下文、语句、单位、词汇、层次结构,这些概念我还小领会不了。

2.3 元编程

于是程序来编写程序就是首批编程Metaprogramming。这时又想开了数字油田遭到整天都说交之初数据,存储这些元数据虽然要,但剥离以之长数据肯定收集不上,必无生活之地。如果长数据和初编程都实现了,程序员获取数据的逻辑应该就是是像well1.GetWellLog(“AC”)这样?你既未待写SQL,也不需要写ORM映射关系,也不需写实体类,写起是便利了,但好像学习起来难度还不行了。

在Java和C#惨遭重要性都是通过反射Reflection来取得和改程序本身的信息,而Ruby的头条编程相当强劲,可以据此几执行代码生成100只点子,而当Java和C#受到不怕只能通过编制专门的代码生成器了。

Lisp中的次是用S表达式来代表的,其先后及数据是完全相同的,
所以元编程已经深入融入到Lisp中了。

首先编程很强大,但为不克因此得极度多,否则理解源代码就充分不便。

2.4 内存管理

垃圾堆收集GC的老三种植艺术:标记清除、复制收集、引用计数。引用计数方式的原理和贯彻虽然简单,但缺点也生多,因此近年来基本上不再以。想想Qt中的内存管理吗是采取引用计数,让程序员去决定何时增1、减1真是平栽切肤之痛。

新的垃圾堆收集算法来:分代回收、增量回收、并行回收。

再有雷同各项IBM的学者用物理学上的十分联理论(Grand Unified
Theory,简称GUT)
用于垃圾收集,统一啊跟回收与援计数。

2.5 异常处理

今昔之高等级语言都发坏处理体制,让程序员可以再有利地拍卖好。传统的之所以非常返回值的办法,容易为原本正常的次让错误处理代码所覆盖没。

Java
的检查型异常强制让编译器检查大,有时的确不便民。异常之所以给称作大,本来就盖它们很麻烦事先预想到。明知如此,还非要于代码中强制性事先对那个做好声明,以避免发生编译错误,这实则是极致痛苦了。

Ruby中的ensure、rescue和retry参考了Eiffel语言的保留字。

2.6 闭包

学Haskell语言时,我先觉得闭包Closure就是凭借高阶函数,可以管函数当参数传递给函数。

C语言中函数指针的太可怜弱点是无力回天实现对表有变量的顾。能够对标变量进行访问(引用、更新),是闭包的整合要起有。

老三段 编程语言的初潮流

在及时同回中笔者主要介绍四栽编程语言Go、Dart、CoffeeScript和Lua。看到这里我打开了TIOBE关于软件编程语言的排行榜(截止到2014年11月),Go语言排名在20名为之外(排名46),Dart排名22,CoffeeScript没见,可能联合在JavaScript中了,Lua排名41。

Java稳居第2,JavaScript跃居第7,Ruby有点下降,处于第18称,而更上一层楼极抢之R和Swift没有出现在作者的书中。

C语言 1

3.1 语言的宏图

C语言 2

静态类型的语言编译期间就会觉察更多之BUG,更易于看与晓。而动态类型语言的助益在其简洁性和灵活性。

鸭类型Duck
Typing:如果如鸭子一样走,像鸭子一样可以,则它肯定是千篇一律只鸭。

3.2 Go(排名46)

足称现代版的C语言。声称也New(新的)、Experimental(实验性的)、Concurrent(并发的)、Garbage-collected(带垃圾回收的)、Systems(系统级)的语言。作者最看好她,可能要是以其放到支持并发编程,再不怕她系出名门吧。

3.3 Dart(排名22)

Dart想替JavaScript,但后者已拥有了大气用户,看来Dart的前程并无光明。

3.4 CoffeeScript

JavaScript于投入了汪洋资本开展不断向上,其速都越来越快。既然JavaScript地位越来越重要,能无克既非抛弃JavaScript,又克服其症结也?CoffeeScript就是这种思路,它的编译器实现达标就是是JS写成的,CoffeeScript程序会了编译为JS代码去执行,其前进值得期待。 

3.5 Lua(排名41)

Lua重点以嵌入式领域,以轻量、高速和响应快呢特点。

季节 云计算时的编程

打立无异章节开,读起来兴趣不大了,简单了解几乎只概念吧。

4.1 可扩展性

从今简单的第二区划法查找,讲到散列表和布隆过滤器,又摆到了遍布环境遭到之DHT(分布式散列表)、Roma(键值存储数据库)和MapReduce。

4.2 C10K 问题 

C10K是Client 10000
Problem的缩写,指“在又连接受服务器的客户端数量过10000只底条件遭到,即使硬件性能足够,依然无法正常提供服务”。epoll、libev和EventMachine,这些虽不明白了。

4.3 HashFold

不感兴趣。

4.4 进程之中通信

看Ruby 实现之网络服务器代码是一对一之简要,以后发生空子可以一试。

4.5 Rack 与Unicorn

不感兴趣。

 

第五回 支撑十分数额的数目存储技术

立刻回已超过了自己的喻范围,列几只术语吧,CAP、NoSQL、MongoDB、OD
Mapper、VoltDB、memcached、Redis。 

第六章 多按时代的编程

顿时回中提到了UNIX中之管道功能,真是相当之好看和强硬,相比之下,Windows中之管道也是经临时文件模拟实现的,相当的污染源。

别有关非阻塞I/O、node.js 、EventMachine的内容暂时在我之兴味之外。

关于进程之中通信,作者提到了ZeroMQ,是同样栽也分布式应用程序支付提供经过之中通信功能的库房。有机会好一试。

 

C语言 3

C语言 4

C语言 5

C语言 6

C语言 7

C语言 8