豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 351 行 · 19344 字节 · UTF-8
§
寻观「标准库」之书。
寻观「标准库」之「数据结构」之「字节串」之书。
寻观「编译器核心」之「网页汇编核心」之「二进制生成」之书。

「:文言:字节自生,标号两遍定之。汉语:机器码、地址和重定位由豫言直接编码,不调用汇编器或链接器。:」
「机器片」立「元类型」也。
  「原字节」立化「字节串」而「机器片」也。
  「代码标记」立化「字符串」而「机器片」也。
  「代码相对」立化「整数」而化「字符串」而「机器片」也。
  「代码地址」立化「整数」而化「字符串」而「机器片」也。

「机器符号」即「字符串」
  合「整数」
也。

「机器成品」即「字节串」
  合(「列」于「机器符号」)
也。

「整数余数」乃化「整数」而化「整数」而「整数」也。
「整数余数」者会「数」而会「除数」而
  「减」于「数」于(「乘」于(「除以」于「数」于「除数」)于「除数」)
也。

「:文言:单字节之串,预制二百五十六于表,空串亦预制之,取之唯读表而已。标准库之「单字节串」「空字节串」每用必呼宿主,节点之宿主又经元组之转与缓冲之配;预编大程序时以百万计,回收因之不堪。汉语:单字节串表:模块初始化时一次建好 0 至 255 共 256 个单字节串,空串也预先建好,之后取用只是读数组。标准库的「单字节串」「空字节串」每次都是宿主调用,在 Node 宿主上还要经过元组转换与 Buffer 分配;预编大程序时这类调用数以百万计,拖垮垃圾回收。字节串不可变,共用同一对象无妨。:」
「机器单字节表」乃「数组引用类」于「字节串」也。
「机器单字节表」者
  虑「表」者
    「新数组引用」授以「字节串」于(「空字节串」于「元」)于「二五六」而
  递归虑「填」其化「整数」而「有」者会「位」而
    若「小于」于「位」于「二五六」则
      ((「写数组引用」授以「字节串」于「表」于「位」于(「单字节串」于「位」));
        (「填」于(「加」于「位」于「一」)))
    否则
      「元」
  而
  虑「无」者「填」于「零」而
  「表」
也。

「机器空串」乃「字节串」也。
「机器空串」者「空字节串」于「元」也。

「机器单字节」乃化「整数」而「字节串」也。
「机器单字节」者会「数」而
  若「或者」于(「小于」于「数」于「零」)于(「大于」于「数」于「二五五」)则
    「发生事故」于『构造单字节串:字节必须在零至二百五十五之间』
  否则
    「读数组引用」授以「字节串」于「机器单字节表」于「数」
也。

「小端字节」乃化「整数」而化「整数」而「字节串」也。
「小端字节」者会「宽」而会「数」而
  若「或者」于(「小于」于「宽」于「零」)于(「大于」于「宽」于「八」)则
    「发生事故」于『小端字节宽度须在零至八之间』
  否则
    若「小于」于「数」于「零」则「发生事故」于『小端编码须为非负整数』否则
      若「等于」于「宽」于「零」则
        若「等于」于「数」于「零」则「机器空串」否则「发生事故」于『小端整数超出宽度』
      否则
        若「等于」于「宽」于「一」则
          若「小于」于「数」于「二五六」则「机器单字节」于「数」否则「发生事故」
          于『小端整数超出宽度』
        否则
          「拼接字节串」
            于(「机器单字节」于(「整数余数」于「数」于「二五六」))
            于(「小端字节」于(「减」于「宽」于「一」)于(「除以」于「数」于「二五六」))
也。

「零字节」乃化「整数」而「字节串」也。
「零字节」者会「数」而
  若「小于」于「数」于「零」则
    「发生事故」于『负填充长度』
  否则
    若「等于」于「数」于「零」则「机器空串」
    否则
      若「等于」于「数」于「一」则「机器单字节」于「零」否则
        虑「半」者「零字节」于(「除以」于「数」于「二」)而
        「网页拼字节」于(「列」【
          「半」,
          「半」,
          若「等于」于(「整数余数」于「数」于「二」)于「零」则「机器空串」否则「机器单字节」
            于「零」
        】)
也。

「字节片」乃化(「列」于「整数」)而「机器片」也。
「字节片」者会「项」而
  「原字节」于(「网页拼字节」于(「态射」于「项」于「机器单字节」))
也。

「字片」乃化「整数」而「机器片」也。
「字片」者会「数」而
  「原字节」于(「小端字节」于「四」于「数」)
也。

「:文言:臂之分支,类一二为跳与呼,三至九及二四至三零为条件,三二至六二为零则跳,六四至九四为非零则跳;兼容之分支,类一零至二三及一百以上。汉语:类号决定编码族与长度。ARM64:一 B,二 BL,三至九依次是 EQ NE CS CC MI PL VS,二四至三零依次是 VC HI LS GE LT GT LE,三二至六二是 CBZ 寄存器类减三二,六四至九四是 CBNZ 寄存器类减六四,均为四字节。AMD64:一零 call,一一 jmp,一二至二三是既有条件跳,一百至一一五是 0F 8x 条件跳,其中类减一百为条件码,可表示 jb 与 jae。:」
「臂分支类」乃化「整数」而「爻」也。
「臂分支类」者会「类」而
  「或者」于(「小于」于「类」于「一零」)于(「且」于(「大于」于「类」于「二三」)于(「小于」于「类」于「九五」))
也。

「机器片长」乃化「机器片」而「整数」也。
「机器片长」者会「片」而
  鉴「片」而
    有「原字节」于「字」则
      「字节串长度」于「字」
    或有「代码标记」于「名」则「零」
    或有「代码地址」于「宽」于「名」则「宽」
    或有「代码相对」于「类」于「名」则
      若「臂分支类」于「类」则「四」
      否则
        若「小于」于「类」于「一二」则「五」否则「六」
也。

「机器寻址」乃化(「列」于「机器符号」)而化「字符串」而「整数」也。
「机器寻址」者会「项」而会「名」而
  鉴「项」而
    有「罄」则「发生事故」于(『机器符号不存在:』附「名」)
    或有「缀」于「首」于「尾」则
      若「串相等」于「名」于(「首」中「零」)则「首」中「一」否则「机器寻址」于「尾」于「名」
也。

「:文言:符号之表:以名之散列分桶,插与寻皆近常时;昔以列表,插则遍查重名、寻则遍历,符号至百万则不可行。汉语:符号哈希表:按名字的散列值分到 262144 个桶里,插入(同时查重名)与查找都接近常数时间。原先用列表,插入时要遍历查重、每次寻址也要遍历,预编大程序时标签以百万计,就跑不完了。:」
「机器符号表」即「数组引用类」于(「列」于「机器符号」)也。

「机器表桶数」乃「整数」也。
「机器表桶数」者「二六二一四四」也。

「机器串散列」乃化「字符串」而「整数」也。
「机器串散列」者会「名」而
  虑「字」者「字符串转字节串」于「名」而
  虑「长」者「字节串长度」于「字」而
  递归虑「逐」其化「整数」而化「整数」而「整数」者会「位」而
  会「和」而
  若「非」于(「小于」于「位」于「长」)则
    「整数余数」于「和」于「机器表桶数」
  否则
    「逐」
      于(「加」于「位」于「一」)
      于(「整数余数」
        于(「加」于(「乘」于「和」于「三一」)于(「字节串取字节」于「字」于「位」))于「一六七七七二一三」)
  而
  「逐」于「零」于「五三八一」
也。

「机器表插」乃化「机器符号表」而化「字符串」而化「整数」而「有」也。
「机器表插」者会「表」而会「名」而会「址」而
  虑「桶号」者「机器串散列」于「名」而
  虑「桶」者「读数组引用」授以(「列」于「机器符号」)于「表」于「桶号」而
  若「存在吗」授以「机器符号」
    于(会「符」而「串相等」于「名」于(「符」中「零」))
    于「桶」则
    「发生事故」于(『机器标记重名:』附「名」)
  否则
    「写数组引用」授以(「列」于「机器符号」)
    于「表」
    于「桶号」
    于(「缀」于(「名」与「址」)于「桶」)
也。

「机器表寻」乃化「机器符号表」而化「字符串」而「整数」也。
「机器表寻」者会「表」而会「名」而
  「机器寻址」于(「读数组引用」授以(「列」于「机器符号」)于「表」于(「机器串散列」于「名」))
  于「名」
也。

「:文言:收符号:遍诸片,记标之址于表,并成列(供外用)。汉语:收集符号:遍历机器片,把每个标记的地址记进哈希表(查重名),同时累积成列表(机器成品对外给出)。:」
「机器收符号表」乃
  化「机器符号表」而
  化「整数」而
  化(「列」于「机器片」)而
  化(「列」于「机器符号」)而
  (「列」于「机器符号」)
也。
「机器收符号表」者会「表」而会「址」而会「片」而会「符号」而
  鉴「片」而
    有「罄」则「符号」
    或有「缀」于「首」于「尾」则
      虑「后」者
        (
          鉴「首」而
            有「代码标记」于「名」则
              ((「机器表插」于「表」于「名」于「址」);
                (「缀」于(「名」与「址」)于「符号」))
            或有「其他」则「符号」
        )
      而
      「机器收符号表」于「表」于(「加」于「址」于(「机器片长」于「首」))于「尾」于「后」
也。

「机器收符号」乃
  化「整数」而
  化(「列」于「机器片」)而
  化(「列」于「机器符号」)而
  (「列」于「机器符号」)
也。
「机器收符号」者会「址」而会「片」而会「符号」而
  鉴「片」而
    有「罄」则「符号」
    或有「缀」于「首」于「尾」则
      虑「后」者
        (
          鉴「首」而
            有「代码标记」于「名」则
              若「存在吗」授以「机器符号」
              于(会「符」而「串相等」于「名」于(「符」中「零」))于「符号」则
                「发生事故」于『机器标记重名』
              否则
                「缀」于(「名」与「址」)于「符号」
            或有「其他」则「符号」
        )
      而
      「机器收符号」于(「加」于「址」于(「机器片长」于「首」))于「尾」于「后」
也。

「有界位移」乃化「整数」而化「整数」而「整数」也。
「有界位移」者会「值」而会「界」而
  若「或者」于(「小于」于「值」于(「减」于「零」于「界」))
  于(「非」于(「小于」于「值」于「界」))则「发生事故」于『机器相对分支超出范围』
  否则若「小于」于「值」于「零」则「加」于「值」于(「乘」于「界」于「二」)否则「值」
也。

「:文言:有界之位移,逾则报其标与距。十九位之立即数唯条件之分支用之,须待择定编码之后方计,否则远之 b 与 bl 亦被误判为逾界。汉语:同 有界位移,超出范围时在报错里带上目标标签名与距离,便于定位。注意 19 位立即数只有条件分支用,必须在确定是条件分支之后才计算,否则 ±1 MiB 以外的 b、bl 也会被误判为超出范围(代码很大时才会遇到)。:」
「有界位移名」乃化「整数」而化「整数」而化「字符串」而「整数」也。
「有界位移名」者会「值」而会「界」而会「名」而
  若「或者」于(「小于」于「值」于(「减」于「零」于「界」))
  于(「非」于(「小于」于「值」于「界」))则
    「发生事故」于(『机器相对分支超出范围:』附「名」附『,距离 』附(「整数表示」于「值」)附『,界 』附(「整数表示」
      于「界」))
  否则
    「有界位移」于「值」于「界」
也。

「机器解片」乃
  化「机器符号表」而
  化「整数」而
  化「机器片」而
  「字节串」
也。
「机器解片」者会「符」而会「址」而会「片」而
  鉴「片」而
    有「原字节」于「字」则「字」
    或有「代码标记」于「名」则「机器空串」
    或有「代码地址」于「宽」于「名」则
      「小端字节」于「宽」于(「机器表寻」于「符」于「名」)
    或有「代码相对」于「类」于「名」则
      虑「差」者「减」于(「机器表寻」于「符」于「名」)于「址」而
      若「臂分支类」于「类」则
        若「不等于」于(「整数余数」于「差」于「四」)于「零」则
          「发生事故」于『臂架构分支未按字对齐』
        否则
          虑「偏」者「除以」于「差」于「四」
          而
          虑「码」者
            若「小于」于「类」于「三」则
              「加」
                于(若「等于」于「类」于「一」则「三三五五四四三二零」否则「二四八三零二七九六八」)
                于(「有界位移名」于「偏」于「三三五五四四三二」于「名」)
            否则
              虑「立十九」者
                「乘」
                  于(「有界位移名」于「偏」于「二六二一四四」于「名」)
                  于「三二」
              而
              若「小于」于「类」于「一零」则
                「加」
                  于(「加」于「一四零九二八六一四四」于「立十九」)
                  于(「减」于「类」于「三」)
              否则若「小于」于「类」于「三一」则
                「加」
                  于(「加」于「一四零九二八六一四四」于「立十九」)
                  于(「减」于「类」于「一七」)
              否则若「小于」于「类」于「六三」则
                「加」
                  于(「加」于「八七二四一五二三二」于「立十九」)
                  于(「减」于「类」于「三二」)
              否则
                「加」
                  于(「加」于「八八九一九二四四八」于「立十九」)
                  于(「减」于「类」于「六四」)
          而
          「小端字节」于「四」于「码」
      否则
        虑「头」者
          ((「列」于「整数」)也
            若「等于」于「类」于「一零」则(「列」【「二三二」】)
            否则
              若「等于」于「类」于「一一」则(「列」【「二三三」】)
              否则
                若「小于」于「类」于「一零零」则(「列」【「一五」,「加」于「一三二」于(「减」于「类」于「一二」)】)
                否则
                  (「列」【「一五」,「加」于「一二八」于(「减」于「类」于「一零零」)】)
          )
        而
        「拼接字节串」
          于(「网页拼字节」于(「态射」于「头」于「机器单字节」))
          于(「小端字节」
            于「四」
            于(「有界位移」于(「减」于「差」于(「机器片长」于「片」))于「二一四七四八三六四八」))
也。

「:文言:近连之符号表:每连一次,存其表于此,供写可执行文件时生调试之符号;旁路也,不改所生之码。汉语:最近一次连接的符号哈希表:连接机器代码每次覆盖它,写出可执行文件时据此生成调试符号表(函数名与地址)。这是旁路,不影响生成的代码;初值是空表。:」
「机器最近表」乃「引用类」于「机器符号表」也。
「机器最近表」者
  「新引用」授以「机器符号表」
    于(「新数组引用」授以(「列」于「机器符号」)于(「罄」授以「机器符号」)于「机器表桶数」)
也。

「连接机器代码」乃化「整数」而化(「列」于「机器片」)而「机器成品」也。
「连接机器代码」者会「基址」而会「片」而
  虑「表」者
    「新数组引用」授以(「列」于「机器符号」)
    于(「罄」授以「机器符号」)
    于「机器表桶数」而
    虑「符」者
      「机器收符号表」于「表」于「基址」于「片」于(「罄」授以「机器符号」)而
      虑「无」者「写引用」授以「机器符号表」于「机器最近表」于「表」而
      虑「址」者「新引用」授以「整数」于「基址」而
      虑「字」者
        「态射」授以「机器片」授以「字节串」
        于「片」
        于(会「项」而
        虑「当前」者「读引用」授以「整数」于「址」而
        虑「进」者
          「写引用」授以「整数」
          于「址」
          于(「加」于「当前」于(「机器片长」于「项」))
        而
        「机器解片」于「表」于「当前」于「项」
        )
      而
      (「网页拼字节」于「字」)与「符」
也。

「定位拼合」乃化「整数」而化(「列」于(「整数」合「字节串」))而「字节串」也。
「定位拼合」者会「始」而会「项」而
  鉴「项」而
    有「罄」则「机器空串」
    或有「缀」于「首」于「尾」则
      若「小于」于(「首」中「零」)于「始」则
        「发生事故」于『镜像片段重叠』
      否则
        「网页拼字节」于(「列」【
          「零字节」于(「减」于(「首」中「零」)于「始」),
          「首」中「一」,
          「定位拼合」
            于(「加」于(「首」中「零」)于(「字节串长度」于(「首」中「一」)))
            于「尾」
        】)
也。