今日好书丨《Node.js:来一打 C++ 扩展》

Posted 博文视点Broadview

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今日好书丨《Node.js:来一打 C++ 扩展》相关的知识,希望对你有一定的参考价值。


Node.js:来一打 C++ 扩展

死月 著

2018年6月出版


今日好书丨《Node.js:来一打 C++ 扩展》 

小编推荐:涵盖Chrome V8 开发、libuv 开发和 Node.js 的原生 C++ 扩展开发知识


内容简介

Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。

本书以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node.js提供的一些 API 来编写其 C++ 的原生扩展。此外,在后续的进阶章节中,还会介绍原生抽象NAN 以及与异步相关的 libuv 知识,最后辅以几个实例来加深理解。不过,在学习本书内容之前,希望读者已经具备了初步的 Node.js 以及 C++ 基础。

阅读本书,相当于同时学习Chrome V8 开发、libuv 开发以及 Node.js 的原生 C++ 扩展开发知识,非常值得!


大咖推荐


  • 安娜·亨宁森(Anna Henningsen, addaleax)/ Node.js 技术指导委员会成员(Node.js TSC)

  • 曹力(ShiningRay)/ 酷链科技 CEO,暴走漫画前CTO,糗事百科前联合创始人,高级 Node.js 技术专家,《javascript 高级程序设计》译者

  • 顾天骋(Timothy Gu)/ pug、ejs 前Maintainer,Node.js Core Collaborator 之一

  • 雷宗民(老雷)/ 《Node.js 实战》作者之一

  • 李启雷 博士 / 趣链科技CTO

  • 刘琥(响马)/ 西祠胡同创始人,fibjs 作者

  • 潘旻琦(pmq20)/ Node.js 技术专家,Node.js Collaborator 之一,RubyConf 讲师之一

  • 桑世龙(i5ting、狼叔)/ StuQ 明星讲师,Node.js 技术布道者,《更了不起的Node.js》作者

  • 孙信宇(芋头)/ 大搜车无线架构团队负责人,前端乱炖站长

  • 田永强(朴灵)/ 高级Node.js 技术专家,《深入浅出Node.js》作者

  • 王文睿 博士(Roger Wang)/ node-webkit 和NW.js 项目创始人和维护者,英特尔软件架构师

  • 袁锋(fengmk2)/ Node.js 技术专家


前言节摘


本书面向的读者

在阅读本书前,我希望你对Node.js 比较熟悉,并且对于C++ 这门语言至少要有一个初步的认识。当然,如果你的C++ 基础并不是很好的话,也不要怕,可以多读几遍本节最后的一段话。

本书不仅仅讲实践,我还花了不少篇幅来讲解它的前驱知识,如Chrome V8 引擎开发的一些基本概念,如句柄、句柄作用域等,以及各种API 的初步介绍。另外,书中还介绍了libuv 层面的内容,尤其是在异步方面,像libuv 中的线程、同步原语,以及如何在Node.js 的主时间循环中与你自身写的线程进行跨线程通信等。这么一算,Chrome V8、libuv,加上Node.js 的C++ 扩展开发,你相当于一下子买了3 本书,是不是觉得很超值?也就是说,你阅读本书的目的不一定是想要开发Node.js 的C++ 扩展;如果你想学习Chrome V8,或者想学习libuv,也可以参考本书。

本书的最后还简单展望了一下Node.js 8.0 之后出现的一个新特性,就是新一代Node.jsC++ 原生扩展接口N-API。不过由于N-API 还处于试验阶段,各种接口还不是很稳定,在未来随时会变,因此本书中并没有详细地介绍N-API,而只是简单讲解了它的思想,让大家在心中有一个思想准备。这样,哪一天N-API 正式发布了,读者就可以比较快地上手了。

不过,不要忘本,哪怕N-API 真的出来了,我还是希望大家多了解一下底层的基础,比如像Chrome V8、libuv 以及Node.js 源码相关的内容。因为学习了这些基础知识,对大家肯定没有坏处(甚至对于Node.js,大家说不定会有一个新的认识)。

最后,奉上我在一次技术直播中说过的一句话:“当我们在学习Node.js 的时候,我们其实就是在学编程。语言只是最表象的东西,思想才是核心内容。”如果还有部分读者由于本书需要有C++ 基础望而却步的话,多读几遍我刚才说的话,然后鼓起勇气入“坑”吧。

本书的结构

本书共分为9 章。其中前两章描述了一些基础的前驱理论知识;第3 章到第6 章讲的是Node.js 的C++ 扩展开发中用到的各种知识,并辅以简单的样例;第7 章和第8 章为实战章节,根据现实需求来完成相应的Node.js C++ 扩展;第9 章为对未来的N-API 的一个展望。

第1 章讲述了我们在学习本书内容之前所需要了解的基础,如Node.js 的模块机制与包机制,以及Node.js 都是由什么三方依赖构成的。其中就提到了很重要的Chrome V8 和libuv。本章的最后还讲述了要进行Node.js 的C++ 扩展开发所需要做的准备工作,包括但不限于编辑器的挑选、开发环境的搭建等。

第2 章主要讲述了什么是Node.js 的C++ 扩展,它的本质是什么,并且什么情况下需要使用C++ 扩展,以及阐述了为什么在这些情况下要使用 C++ 扩展。

第3 章介绍了谷歌的Chrome V8 引擎,从它与Node.js 的关系讲到它的一些基本概念,例如V8 的内存机制、基本对象等。在后续的章节中将开始介绍Chrome V8 的各种类及其概念,以及它们的用法,如句柄、句柄作用域、模板和各种常用的数据类型等。

第4 章相当于各种编程语言书籍中的“Hello World”,向读者介绍了binding.gyp 这个重要的配置文件,以及GYP 文件格式的基础,然后以几个最简单的例子向读者展示了Node.js 的C++ 扩展最简单的一些代码,包括函数的参数、回调函数的用法、对象的返回、函数的返回等,以及如何将一个C++ 的类封装成Node.js 中直接能用的类。

第5 章为大家介绍了NAN(Native Abstractions for Node.js)这个非常实用的包,使大家能在不同的Node.js 版本(本质上是各不兼容的Chrome V8 版本)中使用同一份C++ 代码。

第6 章讲解了如何使用libuv 进行异步Node.js 的C++ 扩展代码编程,首先介绍了libuv的一些基础概念,如句柄与请求等,然后讲述了如何使用libuv 进行跨线程编程。

第8 章与第7 章的实战不同,对两个现有的简单C++ 扩展包进行分析,从另一个角度剖析了一个Node.js 的C++ 扩展包的源码。

第9 章展望了如何使用Node.js 的最新特性N-API 进行原生扩展的开发。不过我估计等到本书正式上市的时候,第9 章已经变成一个仅供参考的章节了。


本书目录
  • 篇幅限制,完整目录请见阅读原文

1 Node.js 的 C++ 扩展前驱知识储备  1

1.1 Node.js 的模块机制  2

1.2 Node.js 的包机制  9

1.3 Node.js 依赖简介  20

1.4 C++ 扩展开发的准备工作  31

2 C++ 模块原理简析  57

2.1 为什么要写 C++ 模块  57

2.2 什么是 C++ 扩展  78

3 Chrome V8 基础  104

3.1 Node.js 与 Chrome V8  104

3.2 基本概念  105

3.3 句柄(Handle)  111

3.4 句柄作用域  121

3.5 上下文(Context)  129

3.6 模板(Template)  133

3.7 常用数据类型  189

3.8 异常机制  206

4 C++ 扩展实战初探  212

4.1 binding.gyp  212

4.2 牛刀小试  229

4.3 循序渐进  240

5 Node.js 原生抽象——NAN  260

5.1 Node.js 原生模块开发方式的变迁  260

5.2 基础开发  267

5.3 JavaScript 函数  280

5.4 常用帮助类与函数  296

5.5 NAN 中的异步机制  316

6 异步之旅——libuv  328

6.1 基础概念  329

6.2 libuv 的跨线程编程基础  341

6.3 跨线程通信  357

7 实战——文件监视器  370

7.1 准备工作  370

7.2 核心设计  376

7.3 编写JavaScript 类  386

7.4 进一步完善  393

8 实战——现有包剖析  401

8.1 字符串哈希模块——Bling Hashes  401

8.2 类 Proxy 包——Auto Object  410

9 N-API——下一代 Node.js C++ 扩展开发方式  425

9.1 浅尝辄止  426

9.2 基本数据类型与错误处理  433

9.3 对象与函数  442


今日好书丨《Node.js:来一打 C++ 扩展》


今日好书丨《Node.js:来一打 C++ 扩展》 

博文视点

您阅读的专业智库

了解更多本书详情请点击阅读原文

长按二维码轻松关注


点击阅读原文,即可快速抵达本书详情页!

以上是关于今日好书丨《Node.js:来一打 C++ 扩展》的主要内容,如果未能解决你的问题,请参考以下文章

荐书丨Node.js:来一打 C++ 扩展

今日好书丨《移动Web前端高效开发实战》

今日好书丨《The Little Schemer:递归与函数式的奥妙》

今日好书丨《Laravel框架关键技术解析》

今日好书丨《深入理解 Flask》

今日好书丨Python高效开发实战——DjangoTornadoFlaskTwisted