
QuickJS
文章平均质量分 79
QuickJS解析
Jaesoon
read the fucking source code
展开
-
手把手教你用js实现一个虚拟机
什么是虚拟机?虚拟机就是使用编程的方式在计算机中虚拟出一个计算机。什么是计算机呢?我想起小学二年级时,第一次上微机课,微机老师是这样给我解释的:计算机本质就是一台做计算的机器。这句话,给我小小的脑袋里留下了大大的问号。直到长大后,我才知道,这分明就是:听君一席话,如听一席话的废话解释。为什么呢?老师说的没错,计算机本质上就是一个计算的机器。但是,我们日常接触到的计算机,如:笔记本、台式机、手机、树莓派等,可都是生龙活虎、绘声绘色的。上能设计造飞机,下能摸鱼打游戏。看起来和我们买菜、乘车等常用的二位数加减乘原创 2022-05-30 22:56:01 · 2550 阅读 · 0 评论 -
QuickJS JSShape剖析
JSShape定义JSShape在内存中的分布如下图代码定义如下:#define JS_PROP_INITIAL_SIZE 2#define JS_PROP_INITIAL_HASH_SIZE 4 /* must be a power of two */#define JS_ARRAY_INITIAL_SIZE 2typedef struct JSShapeProperty { uint32_t hash_next : 26; /* 0 if last in list */原创 2022-05-22 11:31:33 · 945 阅读 · 0 评论 -
QuickJS 代码解析阶段关键结构体
代码解析关键数据结构原创 2022-05-14 23:44:15 · 370 阅读 · 0 评论 -
QuickJS JavaScript世界的原始原型对象的建立
标题面向对象与原型链JavaScript中,对象的继承是通过原型链的方式来实现。一个子对象可以从父对象中继承其父对象的属性和方法。具体的机制是:当访问一个对象的属性或方法时,首先会查找该对象是否有对应的属性或方法。如果有,就调用其属性和方法。如果没有,就访问其原型对象,查看原型对象中是否存在。如果存在,就调用该属性或方法。如果没有,继续寻找原型对象的原型对象。直到访问到原始原型对象为止。需要注意的是,所有的对象继承自原始原型对象。在QuickJS中,JS对象反映在引擎中,是一个JSObject结构体。原原创 2022-05-14 23:17:13 · 1002 阅读 · 1 评论 -
QuickJS 数字字面量解析
背景QuickJS是Fabrice Bellard在2019年发布的一款支持ES6的JavaScript引擎。Fabrice Bellard是一位富有传奇经历的大佬。自己独立开发、发起和维护的耀眼明星项目有:FFmpeg、TCC、QEMU、JSLinux和LTEENB等等。FFmpeg是一个开源音视频处理库,提供了简单便捷统一的音视频处理接口,将广大的音视频开发程序员从音视频开发苦海中解放出来。QEMU是一个模拟器框架,绝大多数PC上的安卓模拟器都是基于它开发出来的。原创 2022-05-12 22:17:28 · 510 阅读 · 0 评论 -
QuickJS 数字字面量解析
背景QuickJS是Fabrice Bellard在2019年发布的一款支持ES6的JavaScript引擎。Fabrice Bellard是一位富有传奇经历的大佬。自己独立开发、发起和维护的耀眼明星项目有:FFmpeg、TCC、QEMU、JSLinux和LTEENB等等。FFmpeg是一个开源音视频处理库,提供了简单便捷统一的音视频处理接口,将广大的音视频开发程序员从音视频开发苦海中解放出来。QEMU是一个模拟器框架,绝大多数PC上的安卓模拟器都是基于它开发出来的。TCC是x86架构下,世界上最快的C语原创 2022-05-01 21:09:21 · 1369 阅读 · 0 评论 -
QuickJS JSValue
JSValue在JavaScript中,变量是弱类型的。但是C是一个强类型语言。但是QuicksJS作为一个使用C语言编写的虚拟机,少不了和JavaScript代码中的变量交互。如何来解决这个问题呢? QuickJS中,使用JSValue来表示这种变量。因此,JSValue是一个JavaScript变量的代表。它既可以是基础类型也可以是一个对象。它用到了引用计数,因此,明确的对它进行复制(JS_DupValue(),添加引用计数)和释放(JS_FreeValue(),减少引用计数)很重要。先看它的定义。原创 2022-05-01 21:36:44 · 2259 阅读 · 0 评论 -
QuickJS JSString & JSAtom
QuickJS JSString & JSAtomJSString定义QuickJS中,使用JSString结构体封装了字符串变量。使用JSAtom来完成对字符串的存储和比较。QuickJS支持ASCII和Unicode两种字符串编码格式。先看下,它们的定义typedef struct JSRefCountHeader { int ref_count;} JSRefCountHeader;struct { JSRefCountHeader header; /* mus原创 2022-04-27 15:07:47 · 878 阅读 · 0 评论 -
QuickJS 字节码打印
QuickJS的字节码打印原创 2022-04-24 16:00:14 · 2076 阅读 · 0 评论 -
QuickJS 操作码
QuickJS字节码,QuickJS操作码,QuickJS原创 2022-04-24 11:58:00 · 1020 阅读 · 0 评论