Coder Social home page Coder Social logo

v8-internals's Introduction

深入V8引擎

面向想要成为 Google V8 开发人员的MOOC。

V8 是 Google Chrome 浏览器和微软 Edge 浏览器的 JavaScript 执行引擎。本课程介绍如何成为 V8 的开发人员。注意这是硬核技术培训,每次视频请预留10个小时的上机编程练习时间。

NOTICE: 目前处于连载状态,预计连续更新到2020年底。 可以关注B站 @lazypaser 接收课程更新的推送。

课件(Slides)、开源电子书、配套代码及相关资料存放在本仓库:

https://github.com/lazyparser/v8-internals

我们从2020年4月开始逐步对V8官方博客进行评论和内容有效性的梳理,请参考 v8-blog-comments.md, 同时我们非常欢迎提交 Pull Request 分享你的文章或评论。

课程视频和幻灯片列表

Video Slides Author Title
av83746754 01.pdf 吴伟 第01课:上手开始看 V8 Ignition 解释器的字节码(Bytecodes)
av87260107 02.pdf 邱吉 第02课:从零开始分析V8的构建系统构成
av89142028 03.pdf 邱吉 第03课:V8的构建系统构成Part2
BV1N7411N73m 04.pdf 邱吉 第04课:V8的构建系统构成Part3
TBD TBD 吴伟 第05课:TBD,Ignition Bytecodes 解析
TBD TBD 吴伟 第06课:TBD,torque
TBD TBD 吴伟 第07课:TBD,torque
TBD TBD 邱吉 第08课:TBD

淦!移植个V8不可能这么难!

Video Slides Author Title
B站连载1 01.pdf 20210416 - 邱吉 - Security Strategies in V8: Spectre漏洞的防御
B站连载2 02.pdf 20210430 - 陆亚涵 - LinearScanRegisterAllocation 算法分析
B站连载3 03.pdf 20210514 - 邱吉 - V8后端代码生成:常量池及其实现
B站连载4 04.pdf 20210528- 陆亚涵 - trampoline 和 Embedd Builtins
B站连载5 05.pdf 20210613 - 邱吉 - 学习V8的测试框架
B站连载6 06.pdf 20210709 - 邱吉 - V8 simulator如何调用host function
B站连载8 08.pdf 20210815 - 邱吉 - V8中HelloWorld的执行过程-part1
B站连载10 10.pdf 20210910 - 邱吉 - V8中HelloWorld的执行过程-part2
B站连载11 11.pdf 20211015 - 邱吉 - V8中HelloWorld的执行过程-part3
B站连载12 12.pdf 20211031 - 陆亚涵 - v8中的inline cache实现
B站连载13 13.pdf 20211112 - 邱吉 - V8中HelloWorld的执行过程-part4

V8 相关的技术分享和资源

v8中LinearScanRegisterAllocation的伪代码和源码分析-陆亚涵-20210430-PLCT实验室

WebAssembly Compilation Pipeline - 姜宇辰 - 20210127 - PLCT实验室

https://www.bilibili.com/video/BV19o4y1R71F

How to debug V8 学习报告 - 梁斌 - 20210113 - PLCT实验室

https://www.bilibili.com/video/BV1jU4y147eD

王建中 - 在 V8 中添加一个 RISC-V B 扩展指令 - 20201216 - PLCT实验室

https://www.bilibili.com/video/BV1Gt4y1k7Bx

陆亚涵:V8中的指针压缩及其实现源码分析【第12届开源开发工具大会(OSDT2020)】

https://www.bilibili.com/video/BV1oK4y1572D

陶立强:V8寄存器分配源码分析——以添加RISCV-C扩展为背景【第12届开源开发工具大会(OSDT2020)】

https://www.bilibili.com/video/BV19X4y1M7Ax

RISC-V V8 移植调试记录:关于一次奇怪的 int32 的值 - 陆亚涵 - 20200801 - PLCT实验室

https://www.bilibili.com/video/BV1SZ4y1T7Rw

V8 for RISC-V 开发小结 - 陈家友 - 20200729 - PLCT实验室

https://www.bilibili.com/video/BV1cD4y1U74R/

RISC-V <3 V8 w/ Keynote: The Roadmap of V8 RISC-V Porting - Peng Wu |OSDT Meetup

https://www.bilibili.com/video/BV1da4y1a7JD

V8中的浮点转整型 - 陆亚涵 - 20200624 - PLCT实验室

https://www.bilibili.com/video/BV1yA411v7m2

V8:几个Torque语句分析 - 杨文章 - 20200610 - PLCT实验室

https://www.bilibili.com/video/BV1sZ4y1W7YQ

V8引擎TurboFan后端代码浅析 - 邱吉 - V8技术讨论会 - OSDT社区 - 20200607

https://www.bilibili.com/video/BV1oZ4y1n7E8

V8中的Snapshot机制分析 - 杨文章 - 20200606 - PLCT实验室

https://www.bilibili.com/video/BV1UV411r7Nq

杨文章-Dive-Into-V8-Torque-PLCT实验室-20200527

https://www.bilibili.com/video/BV1JK411s7Pv

邹小芳-V8移植简介-PLCT实验室-20200527

https://www.bilibili.com/video/BV11K4y1t76G

V8单元测试框架 - 陆亚涵 - 20200513 - PLCT实验室

https://www.bilibili.com/video/BV1pp4y1Q71M

深入V8引擎-技术分享:V8 Assembler 学习小结 - 陈家友

https://www.bilibili.com/video/BV1cc411h747

PLCT实验室分享 - 深入V8引擎:V8 Call Interface Descriptors - 邹小芳

https://www.bilibili.com/video/BV1TE411N7k7

PLCT实验室技术分享-V8解释器字节码代码浅析 - 张江涛

https://www.bilibili.com/video/BV1q741137GB

Sigurd Scheider- Inside V8- The choreography of Ignition and TurboFan

https://www.bilibili.com/video/BV1uJ411H7ok

V8- an open source JavaScript engine

https://www.bilibili.com/video/BV15J411J7sr

BlinkOn 6 Day 1 Talk 2- Ignition - an interpreter for V8

https://www.bilibili.com/video/BV15J411J7Gf

What’s new in JavaScript (Google I-O ’19)[00]

https://www.bilibili.com/video/BV1RJ411J7ZD

Embedding V8 in the real world by Stanimira Vlaeva - JSConf EU 2019

https://www.bilibili.com/video/BV1RJ411J7Wf

Franziska Hinkelmann- JavaScript engines - how do they even? - JSConf EU

https://www.bilibili.com/video/BV1oJ411J7kD

Franziska Hinkelmann - Performance Profiling for V8 - Script17

https://www.bilibili.com/video/BV1RJ411J7Y6

Franziska Hinkelmann- A Trip to the Zoo- SpiderMonkey, SquirrelFish, Nashorn, V8

https://www.bilibili.com/video/BV1oJ411J7z8

Mathias Bynens - V8 internals for JavaScript developers

https://www.bilibili.com/video/BV1oJ411J7j1

JavaScript Engines- The Good Parts™ - Mathias Bynens & Benedikt Meurer - JSConf

https://www.bilibili.com/video/BV1oJ411J72X

Orinoco: The new V8 Garbage Collector Peter Marshall

https://www.bilibili.com/video/BV1TJ411n7pi

Understanding Why The New V8 Is So Fast, One Demo At A Time

https://www.bilibili.com/video/BV1TJ411n78Y

MNUG 2017.03.23 TurboFan: A new code generation architecture for V8

https://www.bilibili.com/video/BV137411e7TQ

关于本项目的一些脚注

这个项目的目标是为了写一本书,能够让读者对于 V8 引擎的内部架构和源代码有所了解。 如果你翻阅过本仓库的提交历史,就会注意到这个仓库的首次公开commit可以追溯到2015年。 那个时候我正在念编译技术方向的博士(后来退学了),熟悉了 Spidermonkey 并进行了一些不成功的实验,对 JavaScript 执行引擎有着很高的兴趣。 但是写一个 V8 这种体量的分析是非常苦难的,我只是刚开始就咕咕咕了好几年。以上是第一阶段。

第二阶段则到了2020年,我成立了PLCT实验室,并跟邱吉一起启动了 V8 for RISC-V 的项目。 我们当时谁都没有看过(仔细研究过)V8的源代码,所以很自然的,第一步就是组织小组进行自我学习。 在这个过程中,我们自然的进行组内技术分享,并发送到了B站进行公开。这个过程启发我重新启动了本项目,并期待 V8 小队可以团体写一本书。 在这个过程中我们继续输出了一些技术分享视频、一些零散的文档,之后就奔命于追赶 upstream 的进度,跟FutureWei一起将 RISC-V 后端送入 V8 仓库。 于是又咕了一年。

第三阶段是2021年4月份开始。这个时候写书的权责已经完全落于邱吉的肩上,而此时《V8 Internals》这本书的出版印刷已经注定要跳票半年。 「来不及了,先出门课程吧!」 在2021年春节之后的会议上我这么对邱主管提议到。 于是就有了目前正在B站连载的《淦!移植个V8不可能这么难!》系列讨论班(笑)。 计划是保持最低两周一次技术报告的输出,让我们在追赶 upstream 的同时,能确保自己在写书和公开课这个任务上持续有产出。

由于已经不再是个人项目,本项目于2021年5月12日从 gh/lazyparser/ 移动到了 gh/plctlab 账号下,正式成为PLCT实验室的团队项目。邱吉主管是本项目的 owner。 感谢杨文章同学、陶立强同学即使在实习结束之后依然积极贡献本书的写作。我会敦促新的owner努力赶上进度的 :-P

@lazyparser on 2021-05-12 22:40 CST

v8-internals's People

Contributors

amyzxf avatar lazyparser avatar luyahan avatar qjivy avatar taowyoo avatar thyecust avatar zhengliu2825 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

v8-internals's Issues

git clone error

something wrong when git clone, the message:

Cloning into 'v8-internals'...
remote: Enumerating objects: 247, done.
remote: Counting objects: 100% (49/49), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 247 (delta 22), reused 14 (delta 14), pack-reused 198
Receiving objects: 100% (247/247), 48.14 MiB | 2.23 MiB/s, done.
Resolving deltas: 100% (115/115), done.
error: invalid path 'slides/Oilpan:V8中C++ 垃圾回收器.pdf'
fatal: unable to checkout working tree
warning: Clone succeeded, but checkout failed.
You can inspect what was checked out with 'git status'
and retry with 'git restore --source=HEAD :/'

续更

这里已经很长时间没更新了,新的资料还有计划上传嘛?

"深入V8引擎"书籍大纲

今年V8小组要完成一本介绍V8技术细节的书籍。这个issue用来记录这本书的内容提纲。

稻盛先生说“必须具备某种‘无赖’精神”。

在开始挑战某项新事业时,人容易出现“因为没有这个或那个”的心态,往往一拖再拖,迟迟不肯迈出第一步。但是,挑战新事物,或是从事谁都没有做过的事业时,因为本来就没有前例可循,所以起步阶段一无所有是理所当然的。

即便如此,也无论如何都想要实现。如果愿望如此强烈,就会去思考如何才能实现,就会透彻地、具体地思考所需的人才、技术、资金、设备以及如何调配这些资源。对于心中强烈的愿望和梦想,只有透彻思考到每个细节,目标才能够实现。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.