豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 317 行 · 18154 字节 · UTF-8
§
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「林系统」之书。
寻观「客体二号」之「平台」之书。
寻观「客体二号」之「基础」之书。
寻观「客体二号」之「实例」之书。
寻观「客体二号」之「模块」之书。
寻观「客体二号」之「控制」之书。
寻观「客体二号」之「堆」之书。
寻观「客体二号」之「对象」之书。
寻观「客体二号」之「异常」之书。
寻观「客体二号」之「运算」之书。
寻观「客体二号」之「访存」之书。
寻观「客体二号」之「裸机底层句柄」之书。
寻观「客体二号」之「裸机底层文件」之书。
寻观「客体二号」之「裸机底层终端」之书。
寻观「客体二号」之「裸机底层网络」之书。
寻观「客体二号」之「裸机底层进程」之书。
寻观「客体二号」之「块设备」之书。
寻观「客体二号」之「文件系统」之书。
寻观「客体二号」之「宿主对象」之书。
寻观「客体二号」之「主机名」之书。
寻观「客体二号」之「主机文件」之书。
寻观「客体二号」之「主机任务」之书。
寻观「客体二号」之「主机」之书。
寻观「客体二号」之「调用」之书。
寻观「客体二号」之「解释」之书。
寻观「客体二号」之「初始化」之书。
寻观「客体二号」之「软浮点」之书。
寻观「客体二号」之「浮点指令」之书。
寻观「客体二号」之「链接」之书。
寻观「客体二号」之「装载」之书。
寻观「客体二号」之「林启动」之书。
寻观「客体二号」之「林底层」之书。
寻观「客体二号」之「原生系统」之书。
寻观「客体二号」之「原生底层」之书。
寻观「客体二号」之「原生子进程」之书。
寻观「客体二号」之「苹系统」之书。
寻观「客体二号」之「苹启动」之书。
寻观「客体二号」之「原生文件原语」之书。
寻观「客体二号」之「原生装载」之书。
寻观「客体二号」之「预编接口」之书。

「:文言:客体执行器二号之门:底层模式之豫言所写,解释普通豫言所出之 WasmGC 程序。汉语:客体执行器二号入口(底层模式)。宿主把客体模块放在 0x10000 起的窗口、长度写到 0x408,再调用导出的 启动:解析模块、建立各区、初始化全局与元素与数据、挂载持久文件系统,然后运行测试约定的导出函数(名字在 0x2400,缺省为 _start;参数在 0x2440 起)并打印结果。:」
「:文言:内存之上限约二千兆字节(三万二千七百六十七页),任其按需而长;取此而不取四千兆者,使址皆小于二之三十一次方,有号之比较无误。裸机之内核唯供五百一十二页,故页上限依平台而定。汉语:线性内存上限声明为约 2 GiB(32767 页,按需增长),让原生宿主能运行编译器这类大程序(1 GiB 时预编编译器并行编译曾“堆内存不足”);不取 4 GiB,是为了让地址都小于 2^31,执行器里的有符号比较不出错。裸机内核只提供 512 页(降级按裸机上限截断),所以堆用的页上限(决定标记位图大小)按平台取:原生 32767,裸机 512。:」
「内存」者(「声明内存」于「八」于「三二七六七」)也。

「数据区」者(「声明数据区」于「字面串基」于「参数区」)也。

「解析模块」乃化「有」而「有」也。
「解析模块」者会「无」而
  虑「大」者「不等于」于(「读四」于「状态_主程序大」)于「零」而
  虑「无」者
    (「写四」于「状态_模块址」于(「选择」于「大」于「区域起」于「模块基」))而
    虑「无」者
      (「写四」
        于「状态_区域顶」
        于(「选择」
          于「大」
          于(「位与」
            于(「加」于「区域起」于(「加」于(「读四」于「状态_模块长」)于「七」))
            于(「减」于「零」于「八」))于「区域起」))而
            虑「无」者
              (「写四」于「状态_页数」于(「内存页数」于「元」))而
              虑「无」者
                (「写四」于「状态_页上限」于(「选择」于(「是原生」于「元」)于「三二七六七」于「五一二」))
              而
              「解析各段」于「元」
也。

「挂载磁盘」乃化「有」而「有」也。
「挂载磁盘」者会「无」而
  「:文言:原生之系统无块设备,文件皆经底层接口至宿主之文件系统。汉语:原生系统(Linux、macOS)上没有 Virtio 块设备,不挂载执行器内的文件系统(文件经底层接口直达宿主文件系统)。:」
  若「是原生」于「元」则
    「元」
  否则若「块就绪」于「元」
  则
    虑「果」者「文件系统挂载」于「元」而
    若「且」于(「等」于「果」于「错_未挂载」)于(「不等于」于(「读四」于「状态_自动格式化」)于「零」)
    则
      (虑「无」者「文件系统格式化」于「元」而「元」)
    否则
      「元」
  否则
    「元」
也。

「:文言:请求之办:解释循环因请求而退出,入口于此代办,办毕自所存之现场续行。汉语:驱动循环:办请求(加载模块:读实例号写回占位槽;装箱结果:把调用导出的返回值装箱写回占位槽,无结果者补一个装箱的零);处理请求们:解释循环退出后若有请求,就办理、再用 状态_续* 里存的现场重新进入解释循环,直到没有请求(最外层函数真正返回,或续行指令针为零)为止。:」
「装箱返回值」乃化「整数」而化「整数」而「整数」也。
「装箱返回值」者会「钩」而会「栈针」而
  若「等」于「钩」于「三」
  则
    虑「新栈针」者「加」于「栈针」于「八」而
    虑「无」者(「写四」于「状态_栈针」于「新栈针」)而
    虑「无」者
      (「置栈槽」于「新栈针」于「一」于(「装箱整」于「零」)于「零」)
    而
    「新栈针」
  否则
    虑「低」者「读四」于(「减」于「栈针」于「八」)而
    虑「高」者「读四」于(「减」于「栈针」于「四」)而
    虑「引用」者
      (若「等」于「钩」于「一」则「装箱整」于「低」否则「装箱」于「低」于「高」)
    而
    虑「无」者(「置栈槽」于「栈针」于「一」于「引用」于「零」)而
    「栈针」
也。

「办请求」乃化「整数」而化「整数」而「整数」也。
「办请求」者会「请求」而会「栈针」而
  虑「无」者(「写四」于「状态_栈针」于「栈针」)而
  若「等」于「请求」于「请求_加载」
  则
    虑「实例」者
      「加载实例」于(「读四」于「状态_请求参一」)于(「读四」于「状态_请求参二」)而
      虑「无」者
        (「置栈槽」于「栈针」于「一」于(「装箱整」于「实例」)于「零」)
      而
      「栈针」
  否则
    (若「等」于「请求」于「请求_装箱结果」
      则
        「装箱返回值」于(「读四」于「状态_请求参一」)于「栈针」
      否则
        「栈针」)
也。

「处理请求们」乃化「整数」而「整数」也。
「处理请求们」者会「栈针」而
  虑「请求」者「读四」于「状态_请求」而
  若「等零」于「请求」则
    「栈针」
  否则
    虑「无」者(「写四」于「状态_请求」于「零」)而
    虑「续」者「办请求」于「请求」于(「读四」于「状态_续栈针」)而
    若「等零」于(「读四」于「状态_续指令针」)
    则
      「续」
    否则
      虑「新栈」者
        「解释循环」
          于(「读四」于「状态_续指令针」)
          于(「读四」于「状态_续帧针」)
          于(「边偏」于(「读四」于「状态_函」))于「续」
      而
      「处理请求们」于「新栈」
也。

「压测试参数」乃化「整数」而化「整数」而化「整数」而「整数」也。
「压测试参数」者会「位」而会「个数」而会「栈针」而
  若「小于」于「位」于「个数」
  则
    ((「宽存」于「栈针」于(「读四」于(「加」于「测试参数」于(「乘」于「位」于「四」)))于「零」);
      「压测试参数」于(「加」于「位」于「一」)于「个数」于(「加」于「栈针」于「八」))
  否则
    「栈针」
也。

「打印结果们」乃化「整数」而化「整数」而化「整数」而「有」也。
「打印结果们」者会「位」而会「个数」而会「栈针」而
  若「小于」于「位」于「个数」
  则
    ((「打印数」于(「读四」于(「减」于(「加」于「栈针」于(「乘」于「位」于「八」))
    于(「乘」于「个数」于「八」))));
      (「写字节」于「一零」);
      「打印结果们」于(「加」于「位」于「一」)于「个数」于「栈针」)
  否则
    「元」
也。

「:文言:启动一次:解析模块、建诸区、初始化、挂载磁盘,行所约之导出函数而印其果;若本任务已被换成新程序(待重启)或为子任务,则不印果。凡以取区域取常驻之区者(底层句柄之表、原生后端之暂存),皆须在初始化堆之前,盖堆起即区域之顶,其后取区域则与堆相叠。汉语:启动一次:完整走一遍启动流程。凡是用 取区域 取常驻缓冲的初始化(底层句柄表、原生后端暂存区)都必须放在 初始化堆 之前:初始化堆 把区域顶设成堆的起点,之后再 取区域 会与堆对象重叠。子任务不打印函数结果;解释循环因待重启退出后,直接返回交给启动循环。:」
「启动一次」乃化「有」而「有」也。
「启动一次」者会「无」而
  虑「无」者「解析模块」于「元」而
  虑「无」者「初始化区域」于「元」而
  虑「无」者「文件系统初始化」于「元」而
  虑「无」者「继承当前目录」于「元」而
  虑「无」者
    (若「是原生」于「元」则「原生继承当前目录」于「元」否则「元」)而
    虑「无」者「底柄_初始化」于「元」而
    虑「无」者
      (若「是原生」于「元」则「原底_初始化」于「元」否则「元」)
    而
    虑「无」者
      (若「是原生」于「元」则「原生异步初始化」于「元」否则「元」)
    而
    虑「无」者「初始化堆」于「元」而
    虑「无」者「初始化全局」于「元」而
    虑「无」者「发现宿主类型」于「元」而
    虑「无」者「初始化元素」于「元」而
    虑「无」者「初始化数据」于「元」而
    虑「无」者「挂载磁盘」于「元」而
    虑「无」者「加载输入文件」于「元」而
    虑「函数号」者
      「查导出」于(「选择」于(「不等于」于(「读一」于「测试名」)于「零」)于「测试名」于「串_启动」)
    而
    虑「无」者
      (「若则致命」于(「小于」于「函数号」于「零」)于「一三四」于(「静态串」于『找不到导出函数』))
    而
    虑「参数栈」者
      「压测试参数」于「零」于(「读四」于「测试参数数」)于(「读四」于「状态_值栈基」)
    而
    虑「终栈一」者「运行或预编」于「函数号」于「参数栈」而
    虑「终栈」者「处理请求们」于「终栈一」而
    若「或者」
      于(「不等于」于(「读四」于「状态_待重启」)于「零」)
      于(「不等于」于(「读四」于「状态_是子任务」)于「零」)
    则
      「元」
    否则
      「打印结果们」
        于「零」
        于(「读字段」于(「函数条」于「函数号」)于「函数条_结果数」)
        于「终栈」
也。

「:文言:启动之循环:启动一次毕,若待重启则清状态格而再启动,直至无待重启。汉语:启动循环:每次 启动一次 返回后检查 状态_待重启(新程序长度):非零则做 重启准备(清状态格、写回模块长度)再启动一次;这是子进程“换成新程序”的落脚处。:」
「启动循环」乃化「有」而「有」也。
「启动循环」者会「无」而
  虑「无」者「启动一次」于「元」而
  虑「长」者「读四」于「状态_待重启」而
  若「不等于」于「长」于「零」
  则
    ((「重启准备」于「长」);
      「启动循环」于「元」)
  否则
    「元」
也。

「导出:启动:0:0」乃化「有」而「有」也。
「导出:启动:0:0」者会「无」而
  虑「无」者
    (
      若「是林」于「元」则「林装启动」于「元」
      否则
        若「是苹」于「元」则「苹装启动」于「元」否则「元」
    )而
    虑「无」者
      (若「是原生」于「元」则「原生装载程序」于「元」否则「元」)
    而
    虑「无」者「启动循环」于「元」而
    「捕获冲刷」于「元」
也。

「:文言:浮点指令之测:以合成之值栈召 执行浮点 或 浮饱和截断。汉语:Wasm 浮点指令自检:把甲、乙放到测试栈(浮槽_测栈)上,按操作码是一元还是二元决定栈针,调 执行浮点(运算 = 256 + Wasm 操作码,例如 f64.add 0xA0 传 416)或 浮饱和截断(运算 = 512 + 0xFC 子操作码),把结果槽拷到 浮槽_果。陷阱以退出码 125 结束(宿主夹具捕获)。:」
「浮点指令自检」乃
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  「有」
也。
「浮点指令自检」者会「运算」而会「甲低」而会「甲高」而会「乙低」而会「乙高」而
  虑「栈基」者「浮槽_测栈」而
  虑「无」者(「宽存」于「栈基」于「甲低」于「甲高」)而
  虑「无」者
    (「宽存」于(「加」于「栈基」于「八」)于「乙低」于「乙高」)而
  若「有符号大等」于「运算」于「五一二」
  则
    (
      虑「新栈」者
        「浮饱和截断」于(「减」于「运算」于「五一二」)于「零」
          于(「加」于「栈基」于「八」)
      而
      「拷槽」于「浮槽_果」于(「减」于「新栈」于「八」)
    )
  否则
    (
      虑「操作码」者「减」于「运算」于「二五六」
      而
      虑「二元」者
        「或者」
          于(「无符号小于」于(「减」于「操作码」于「九一」)于「一二」)
          于(「或者」
            于(「无符号小于」于(「减」于「操作码」于「一四六」)于「七」)
            于(「无符号小于」于(「减」于「操作码」于「一六零」)于「七」))
      而
      虑「新栈」者
        「执行浮点」于「操作码」于(「加」于「栈基」于(「选择」于「二元」于「一六」于「八」))
      而
      「拷槽」于「浮槽_果」于(「减」于「新栈」于「八」)
    )
也。

「:文言:软浮点之测:宿主可直召此门以校双精度之算。汉语:软浮点自检入口(Node 夹具随机对照 V8 的双精度用;裸机不用):运算 0 加、1 减、2 乘、3 除(甲、乙为双精度的低高字),4 整数转浮点(甲为 64 位整数),5 浮点转整数(甲为双精度),结果在 浮槽_果(0x2590)起的 8 字节;7 字符串转小数(甲为串址,乙为串长),6 小数转定点六位串(甲为双精度),串在 浮串缓冲,长度在 浮槽_果 低字;运算 ≥ 256:Wasm 浮点指令(256 加操作码,512 加 0xFC 子操作码),见 浮点指令自检。:」
「导出:浮点运算:5:0」乃
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  化「整数」而
  「有」
也。
「导出:浮点运算:5:0」者会「运算」而会「甲低」而会「甲高」而会「乙低」而会「乙高」而
  虑「无」者(「宽存」于「浮槽_甲」于「甲低」于「甲高」)而
  虑「无」者(「宽存」于「浮槽_乙」于「乙低」于「乙高」)而
  鉴「运算」而
    有「零」则
      「浮加减」于「浮槽_果」于「浮槽_甲」于「浮槽_乙」于「零」
    或有「一」则
      「浮加减」于「浮槽_果」于「浮槽_甲」于「浮槽_乙」于「一」
    或有「二」则
      「浮乘」于「浮槽_果」于「浮槽_甲」于「浮槽_乙」
    或有「三」则
      「浮除」于「浮槽_果」于「浮槽_甲」于「浮槽_乙」
    或有「四」则
      「整转浮」于「浮槽_果」于「浮槽_甲」
    或有「五」则
      「浮转整」于「浮槽_果」于「浮槽_甲」
    或有「六」则
      「宽存」于「浮槽_果」于(「浮转定点串」于「浮槽_甲」)于「零」
    或有「七」则
      「析浮点」于「甲低」于「乙低」于「浮槽_果」
    或有「其他」则
      「浮点指令自检」于「运算」于「甲低」于「甲高」于「乙低」于「乙高」
也。