《Node.js:来一打 C++ 扩展》已出版,求支持
千呼万唤始出来,犹抱琵琶生哪吒。
真的不好意思自卖自夸,所以索性直接把编辑推荐语、大佬们的评语贴上来好了。
Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。
《Node.js:来一打 C++ 扩展》以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node.js提供的一些 API 来编写其 C++ 的原生扩展。此外,在后续的进阶章节中,还会介绍原生抽象NAN 以及与异步相关的 libuv 知识,最后辅以几个实例来加深理解。不过,在学习本书内容之前,希望读者已经具备了初步的 Node.js 以及 C++ 基础。
阅读《Node.js:来一打 C++ 扩展》,相当于同时学习Chrome V8 开发、libuv 开发以及 Node.js 的原生 C++ 扩展开发知识,非常值得!
最后十分感谢包括 Node.js TSC 之一的 Anna、几位 Collaborator 以及各位业界的大佬帮忙写推荐语,感谢 @yorkie 大佬和 @justjavac 大佬帮忙作序。
编辑推荐
《Node.js:来一打 C++ 扩展》在深度上远远超过了目前市面上的Node书籍。全书自始至终围绕一个主题展开:从介绍 Node.js 的包和模块规范开始,深入解析(包括但不限于剖析 Node.js 自身的源码) Node.js 的模块是如何在运行时被引入的,尤其是如何引入 C++ 模块的;接下来详细讲解了在什么时候、为何要编写 C++ 模块;借此契机,深入介绍了 Node.js 的基石 Chrome V8 和 libuv,以及异步非阻塞的原理——不仅如此,本书更教你如何在底层去驾驭它们。所以,本书以 Node.js 的 C++ 扩展为中心,衍生出对 Node.js 底层风光的层层剖析,最后再回归到如何编写 Node.js 的 C++ 扩展,一气呵成。读来酣畅淋漓,痛快不已!
买这一本书相当于买了“Node.js 的底层风光、C++ 扩展编写”、“Chrome V8”和“libuv”三本书!
读完本书后,你甚至能为 Node.js 自身的添砖加瓦做出非凡贡献。
购书链接
目前在预售阶段,顺便蹭 618 活动。
目录
1 Node.js 的 C++ 扩展前驱知识储备 1 |
推荐语
This book contains absolutely everything you need to know about how all the pieces of Node.js’ C++ code work and interact, explaining the necessary concepts without needing prior knowledge about the internals of V8, libuv or other pieces of Node.js. It shows well how Node.js’ own built-in modules are constructed using the APIs provided by V8, so that they are usable from JavaScript, and how you can create the same kind of modules from scratch.
After having read this book, you will be able to write a production-quality, future-proof C++ extension for Node.js if you need to do that, or maybe even make changes Node.js itself if you’re interested in that!
这本书包含了所有你需要了解的有关于 Node.js C++ 代码是如何运行和交互的知识,解释了一些你不需要知道 V8 的内部机制就能理解的必要概念,另外该书还介绍了 libuv 以及其他一些内容的方方面面。这本书还展示了 Node.js 的内置模块是如何使用 V8 的 API 进行构建并在 JavaScript 层面能提供使用的——并且你也能用这种方法从头开始创建相同类型的模块。
读完这本书,你将学到如何写出产品级质量的、面向未来的 Node.js C++ 扩展。感兴趣的话,你甚至可以对 Node.js 自身进行修改!
——安娜·亨宁森(Anna Henningsen, addaleax),Node.js 技术指导委员会成员(Node.js TSC)
Node.js 不是第一个将 JavaScript 带入服务器端领域的技术,然而却成为了史上最热门、最有影响力的工具之一。究其原因,其一,在于 Node.js 适逢后端高并发潮流,巧妙结合 Reactor 模型和 JavaScript 所擅长的回调风格,大大降低了开发高并发服务器应用的成本;其二,在于恰逢浏览器大战,前端技术突飞猛进,急需一个适合 JavaScript 和前端工程师的一套生态和工具链,Node.js 刚好成为前端 JavaScript 最易上手掌握的命令行环境。在 Node.js 发展这么火热之后,Node.js 的开发体验在不断提升,上手门槛也在不断降低。
然而,如果大家真正想突破自己成为个中高手,无论是后端程序员希望在服务器端及架构方面有所建树,还是前端程序员想跨越边界,你们都应该去了解 Node.js 的底层机制,去学习写一些 Node.js 的扩展。从 Node.js 的内在机制,我们可以学习到更多有关计算机体系的知识如内存管理、多线程编程等等,真正向一个架构师、大牛迈进。
死月的书,给我们在这些方面带来了一个非常系统的指南。死月通过精彩的内容告诉大家:底层的知识并不枯燥,用 C++ 写一个扩展很有意思也很简单。作为 Node.js 工程师/爱好者的你,值得拥有本书。
——曹力(ShiningRay),酷链科技 CEO,前暴走漫画 CTO,前糗事百科联合创始人,高级 Node.js 技术专家,《JavaScript 高级程序设计》译者
Native module is one of the most underappreciated features of Node.js. But even in the age of asm.js and WebAssembly, it is an irreplaceable part of the Node.js ecosystem due to its versatility and performance. XadillaX’s book provides a refreshing introduction (or reintroduction), and is a must-read for all low-level Node.js engineers.
原生模块是 Node.js 中最被低估的功能之一。因为它的性能和多样性,使其即使是在 asm.js 和 WebAssembly 时代,仍旧能作为 Node.js 生态系统中不可替代的部分存在。死月的书对其作了一个令人耳目一新的介绍,是所有的底层(Low-Level)Node.js 工程师必读之物。
——顾天骋(Timothy Gu),pug、ejs 前 Maintainer,Node.js Core Collaborator 之一
本书全面讲解了 V8、libuv 的原理并且手把手教你编写一打 Node.js 的 C++ 扩展,是目前市面上相关领域非常空缺的技术书籍。如果想更深入了解 Node.js 的实现原理,除了熟读内置 API 文档之外,阅读这本书会是一个很好的选择。
——雷宗民(老雷),《Node.js 实战》作者之一
这是一本角度刁钻的 Node.js 相关书籍,与市面上大多数的 Node.js 书籍定位不同。它借为 Node.js 开发 C++ 扩展为基石,顺带介绍了 Chrome V8 和 libuv 的内容,填补了市场上这一类书籍的空白,值得一读。
——李启雷博士,趣链科技 CTO
死月一直把实战贯穿在整本书之内,无论是基础部分的 V8 练习,还是使用 Node.js 经典的 Addon 开发、用 NAN 来改写,或是 libuv 里的 WatchDog 案例、EFSW 的封装,甚至在第八章里还特意剖析了两个 C++ 模块,把之前讲解的基础知识部分综合起来,可以边学边练。
这本《Node.js:来一打 C++ 扩展》,在如今追求大而全的时代,单纯的讲 Node.js 的某一个方面,而且讲的特别棒的书,真的难得。
——刘琥(响马),西祠胡同创始人,fibjs 作者
当你掌握了 Node.js 的上层使用,下一步进阶的方向就是研究 Node.js 的底层原理。本书为学习 Node.js 的实现机制打开了一扇门。书中介绍的上下文(Context)、句柄(Handle)、句柄作用域(Handle Scope)等概念直接来自于源码,对于阅读 Node.js 及 V8 的源码具有极高的参考价值。
——潘旻琦(pmq20),Node.js 技术专家,Node.js Collaborator 之一,RubyConf 讲师之一
国内 Node.js 偏向于原理的书目前只有朴灵的《深入浅出 Node.js》一本,至今 4 年过去了,Node.js 已经从 v0.10 发展到 v9 版本,中间再没有这样的系统的有深度的书籍。
很高兴死月的新书弥补了这一遗憾。本书以 C++ 为主线,涵盖 Node.js 最核心的 libuv 和 V8,对理解 Node.js 原理有极大的好处。当然最大的好处在于使用 C++ 编写 Node.js Addon 可以让 Node.js 有更广阔的应用空间。我们都知道 Node.js 擅长的是 I/O 密集型任务,对于 CPU 密集型运算这是极好的弥补。
特别推荐大家阅读此书,Node.js 应用极其广泛的今天,使用 C++ 编写 Node.js Addon 是更出彩的部分,你值得拥有。
——桑世龙(狼叔),StuQ 明星讲师,Node.js 技术布道者,《更了不起的 Node.js》作者
死月对 Node.js 底层机制有非常深入的了解。阅读本书,除了学习 C++ 扩展开发,还会跟随死月了解 V8、libuv,相信读后大家对于 Node.js 的理解会更上一层楼。
——孙信宇(芋头),大搜车无线架构团队负责人,前端乱炖站长
C++ 扩展其实是从外在,用 C++ 的角度去观察 Node.js 内在的形式。因为 Node.js 整个系统自身几乎就是构建在 C/C++ 之上的,只是内部称之为 built-in,在 user-land 则称之 Addon,它们本质上其实没有区别。死月凭借他在 C/C++ 的深厚积累,选择从 C++ 扩展作为突破口,带大家领略 Node.js 底层的风光,在书里,你能看到真正发挥巨大价值的 V8、libuv 亦是精彩纷呈。
死月将 C++ 扩展写得这么透,我是服的。
——田永强(朴灵),高级 Node.js 技术专家,《深入浅出 Node.js》作者
开发 C++ 扩展,可以扩充 Node.js 平台的本地 API,扩充 Node.js 应用的能力。这本书详细介绍了包括 libuv、V8 在内的各种必要知识,是该领域不可多得的好书。对 C++ 开发者来说,本书既可以作为入门指引,又可以作为日常开发的参考书。
——王文睿博士(Roger Wang),node-webkit 和 NW.js 项目创始人和维护者,因特尔软件架构师
清晰记得手写的第一个 Node.js C++ 扩展模块,在 Node.js 0.6.9 跑通的那种愉悦感。随着应用升级到 Node.js 0.8,依赖的 C++ 扩展模块无法安装编译成功,最后发现是 V8 的 API 变化导致不兼容,从此对 C++ 扩展模块产生抗拒。后来看到《Node.js:来一打 C++ 扩展》,从实现原理,到 V8 基础概念的一系列介绍,让我重新对 C++ 扩展模块产生兴趣。参考书里的实战例子,以及 NAN 的辅助下,现在编写一个跨 Node.js 版本的 C++ 扩展已经不是什么困难的事情。通过最后一章节,可以了解到 Node.js 官方的 N-API 计划,让 C++ 扩展不仅仅能跨版本复用,还能跨操作系统(平台)复用。
——袁锋(fengmk2),Node.js 技术专家