豫言源码浏览器 / Source Browser

浏览项目文件与源码

yuyan · 276 行 · 15347 字节 · UTF-8
§
寻观「底层库」之书。
寻观「客体二号」之「布局」之书。
寻观「客体二号」之「林系统」之书。
寻观「客体二号」之「原生系统」之书。

「:文言:执行器所倚之宿主原语,皆导入自“平台”模块。汉语:宿主(Node 夹具或裸机加载器)提供的平台导入:输出一字节、退出任务、读一字节(无则为负一)、时钟滴答,以及任务与邮箱服务(复制、等待、回收任务,发送、接收、等待消息,消息来源,任务状态、退出码)。裸机上它们被降级为内核服务。同一份执行器也在 Linux 与 macOS 上运行:每个原始原语先看平台号,原生系统上改走 Linux 系统调用或 macOS 的 libSystem(写、读、退出、clock_gettime);任务与邮箱服务在原生系统上尚未实现,按失败返回(待办事项:子进程改用底层接口的运行程序)。:」
「写字节原始」乃化「整数」而「有」也。
「写字节原始」者会「字节」而
  若「是原生」于「元」则
    虑「流」者
      「选择」于(「等零」于(「读四」于「状态_输出流」))于「一」
        于(「读四」于「状态_输出流」)而
        虑「无」者「写一」于「状态_林字节」于「字节」而
        虑「数」者「原生_写」于「流」于「状态_林字节」于「一」而
        「元」
  否则
    《《外调》》名『导入:平台:写字节:1:0』传「字节」
也。

「退出任务原始」乃化「整数」而「有」也。
「退出任务原始」者会「码」而
  若「是原生」于「元」则
    「原生_退出」于「码」
  否则
    《《外调》》名『导入:平台:退出任务:1:0』传「码」
也。

「读字节原始」乃化「有」而「整数」也。
「读字节原始」者会「无」而
  若「是原生」于「元」则
    虑「数」者「原生_读」于「零」于「状态_林字节」于「一」而
    若「等」于「数」于「一」则「读一」于「状态_林字节」
    否则若「等零」于「数」则(「减」于「零」于「二」)
    否则
      (「减」于「零」于「一」)
  否则
    《《外调》》名『导入:平台:读字节:0:1』传「无」
也。

「:文言:读字节:标准入若已重定向于文件,则自其内容取,尽则返负二;否则取自控制台。汉语:读字节:标准输入被重定向到文件(状态_输入缓冲 非零,其内容是堆里的字节数组,长度在偏移 8、字节从偏移 16 起)时从那份内容里取,取尽返回 -2(文件结束;-1 仍表示控制台暂时没有输入);否则取自控制台。:」
「读字节」乃化「有」而「整数」也。
「读字节」者会「无」而
  虑「缓」者「读四」于「状态_输入缓冲」而
  若「等零」于「缓」则
    「读字节原始」于「元」
  否则
    虑「位」者「读四」于「状态_输入位」而
    若「无符号小于」于「位」于(「读四」于(「加」于「缓」于「八」))
    则
      ((「写四」于「状态_输入位」于(「加」于「位」于「一」));
        「读一」于(「加」于(「加」于「缓」于「一六」)于「位」))
    否则
      (「减」于「零」于「二」)
也。

「时钟滴答」乃化「有」而「整数」也。
「时钟滴答」者会「无」而
  若「是原生」于「元」则
    虑「无」者「原生_取时」于「阳」于「状态_林时」而
    虑「秒」者「读四」于「状态_林时」而
    虑「纳」者「读四」于(「加」于「状态_林时」于「八」)而
    「加」于(「乘」于「秒」于「一零零」)于(「无符号除」于「纳」于「一零零零零零零零」)
  否则
    《《外调》》名『导入:平台:时钟滴答:0:1』传「无」
也。

「:文言:墙钟:读硬件实时钟,得自一九七零年正月朔日子时起之秒数(三十二位无符号)。汉语:墙钟秒:内核服务 26,返回自 1970-01-01 00:00:00 UTC 起的秒数(三十二位无符号,至 2106 年);ARM64 读 PL031,AMD64 读 CMOS 时钟并换算。开机以来的单调时间仍用 时钟滴答。:」
「墙钟秒」乃化「有」而「整数」也。
「墙钟秒」者会「无」而
  若「是原生」于「元」则
    虑「无」者「原生_取时」于「阴」于「状态_林时」而
    「读四」于「状态_林时」
  否则
    《《外调》》名『导入:平台:墙钟秒:0:1』传「无」
也。

「:文言:中断:内核吞 Ctrl-C 而立标,此询之(读而清)。汉语:控制台中断。平台.中断查询(内核服务 27,见[控台输入])返回并清除内核记下的 Ctrl-C 标志(1 有 0 无);串口读到的 0x03 不会进入字节流。中断检查:见到标志时,子任务以退出码 130(128 + SIGINT,与 POSIX 相同)结束本任务,首任务(壳)则记进 状态_中断挂起,由正在读行的 读行核 取用;中断点:解释器在每次进入 Wasm 函数体与每次跳回循环头时调用,隔 4096 次才真正询问一次,所以死循环也会在几毫秒内被打断,而平时几乎不增加开销。:」
「中断查询」乃化「有」而「整数」也。
「中断查询」者会「无」而
  若「是原生」于「元」则
    「零」
  否则
    《《外调》》名『导入:平台:中断查询:0:1』传「无」
也。

「中断检查」乃化「有」而「有」也。
「中断检查」者会「无」而
  若「等零」于(「中断查询」于「元」)则
    「元」
  否则
    (若「等零」于(「读四」于「状态_是子任务」)则「写四」于「状态_中断挂起」于「一」否则「退出任务原始」于「一三零」)
也。

「中断点」乃化「有」而「有」也。
「中断点」者会「无」而
  虑「余」者「减」于(「读四」于「状态_中断计」)于「一」而
  若「大于」于「余」于「零」则
    「写四」于「状态_中断计」于「余」
  否则
    ((「写四」于「状态_中断计」于「中断计初值」);
      「中断检查」于「元」)
也。

「:文言:任务之服务:复制、等待、回收。汉语:内核任务服务:复制任务(父得子号、子得零、败为负)、等待任务(阻塞至子退出,返其退出码)、回收任务(释放子任务槽)。:」
「复制任务」乃化「有」而「整数」也。
「复制任务」者会「无」而
  若「是原生」于「元」则
    (「减」于「零」于「一」)
  否则
    《《外调》》名『导入:平台:复制任务:0:1』传「无」
也。

「等待任务」乃化「整数」而「整数」也。
「等待任务」者会「号」而
  若「是原生」于「元」则
    (「减」于「零」于「一」)
  否则
    《《外调》》名『导入:平台:等待任务:1:1』传「号」
也。

「回收任务」乃化「整数」而「整数」也。
「回收任务」者会「号」而
  若「是原生」于「元」则
    (「减」于「零」于「一」)
  否则
    《《外调》》名『导入:平台:回收任务:1:1』传「号」
也。

「:文言:邮箱之服务:一条整数之信,送、收、候、问来源;任务之状态与退出码。汉语:内核邮箱与任务查询服务:发送消息(目标句柄、值 → 0 成功 / -1 失败)、接收消息(非阻塞,空为 0)、消息来源(最近接收的发送者句柄,空为 -1)、等待消息(阻塞至有消息;对端已退出则空返回)、任务状态(位 4 表示已结束)、任务退出码。:」
「发送消息原始」乃化「整数」而化「整数」而「整数」也。
「发送消息原始」者会「目标」而会「值」而
  若「是原生」于「元」则
    (「减」于「零」于「一」)
  否则
    《《外调》》名『导入:平台:发送消息:2:1』传「目标」与「值」
也。

「:文言:发送之重试:邮箱唯容一信,对端未取则送不出而返负一;对端得确认后每未及被调度,本任务已发下一信,故败则重试,试尽则记其目标而后径败。汉语:可靠发送:内核邮箱只有一条容量,对端还没取走上一条时 发送消息 返回 -1(“邮箱满”)。而对端刚被唤醒去取确认时往往还没被调度,本任务就已经要发下一条了(远程文件调用里紧接着的两次请求就是如此,二三十次里会撞上一次),所以发送失败时重试(最多二十万次,每次都进内核,时钟中断会让对端运行、取走消息);试尽仍失败,把目标记进 状态_发送失联(加 1),此后发往同一目标的消息立刻失败(对端已退出或无权限时不至于每条都空转);成功则清除该记录。:」
「发送消息重试」乃化「整数」而化「整数」而化「整数」而「整数」也。
「发送消息重试」者会「目标」而会「值」而会「余」而
  虑「果」者「发送消息原始」于「目标」于「值」而
  若「或者」于(「等零」于「果」)于(「等零」于「余」)则
    「果」
  否则
    「发送消息重试」于「目标」于「值」于(「减」于「余」于「一」)
也。

「发送消息」乃化「整数」而化「整数」而「整数」也。
「发送消息」者会「目标」而会「值」而
  若「等」于(「读四」于「状态_发送失联」)于(「加」于「目标」于「一」)则(「减」于「零」于「一」)
  否则
    虑「果」者「发送消息重试」于「目标」于「值」于「二零零零零零」而
    虑「无」者
      (「写四」于「状态_发送失联」于(「选择」于(「等零」于「果」)于「零」于(「加」于「目标」于「一」)))
    而
    「果」
也。

「接收消息」乃化「有」而「整数」也。
「接收消息」者会「无」而
  若「是原生」于「元」则
    「零」
  否则
    《《外调》》名『导入:平台:接收消息:0:1』传「无」
也。

「消息来源」乃化「有」而「整数」也。
「消息来源」者会「无」而
  若「是原生」于「元」则
    (「减」于「零」于「一」)
  否则
    《《外调》》名『导入:平台:消息来源:0:1』传「无」
也。

「等待消息」乃化「有」而「整数」也。
「等待消息」者会「无」而
  若「是原生」于「元」则
    「零」
  否则
    《《外调》》名『导入:平台:等待消息:0:1』传「无」
也。

「任务状态」乃化「整数」而「整数」也。
「任务状态」者会「号」而
  若「是原生」于「元」则
    「零」
  否则
    《《外调》》名『导入:平台:任务状态:1:1』传「号」
也。

「任务退出码」乃化「整数」而「整数」也。
「任务退出码」者会「号」而
  若「是原生」于「元」则
    「零」
  否则
    《《外调》》名『导入:平台:任务退出码:1:1』传「号」
也。

「:文言:输出之捕获:子任务之出,三字节一信,送父任务而候其确认。汉语:捕获写字节:输出模式为三(子进程的输出被父任务捕获)时,字节先攒在 状态_待发字 里,满三个字节、遇换行或流(标准输出/标准错误)改变时,打成一条消息发给初始任务(句柄 0),再阻塞等它的确认,父任务由此得到限速的输出。发送失败(父任务已退出)则丢弃。:」
「等确认」乃化「有」而「有」也。
「等确认」者会「无」而
  虑「无」者「等待消息」于「元」而
  「元」
也。

「捕获冲刷」乃化「有」而「有」也。
「捕获冲刷」者会「无」而
  虑「数」者「读四」于「状态_待发数」而
  若「等零」于「数」则
    「元」
  否则
    虑「消息」者
      「位或」
        于(「左移」
          于(「加」
            于(「加」于「捕获消息标」于(「乘」于「一六」于(「减」于(「读四」于「状态_待发流」)于「一」)))
            于「数」)
            于「二四」)
            于(「读四」于「状态_待发字」)
    而
    虑「无」者(「写四」于「状态_待发数」于「零」)而
    虑「无」者(「写四」于「状态_待发字」于「零」)而
    虑「结果」者「发送消息」于「零」于「消息」而
    若「等零」于「结果」则「等确认」于「元」否则「元」
也。

「捕获写字节」乃化「整数」而「有」也。
「捕获写字节」者会「字节」而
  虑「流」者
    「选择」于(「等零」于(「读四」于「状态_输出流」))于「一」
      于(「读四」于「状态_输出流」)而
      虑「无」者
        (
          若「且」
            于(「大于」于(「读四」于「状态_待发数」)于「零」)
            于(「不等于」于(「读四」于「状态_待发流」)于「流」)则「捕获冲刷」
              于「元」
          否则
            「元」
        )
      而
      虑「数」者「读四」于「状态_待发数」
      而
      虑「无」者(「写四」于「状态_待发流」于「流」)
      而
      虑「无」者
        (「写四」
          于「状态_待发字」
          于(「位或」
            于(「读四」于「状态_待发字」)
            于(「左移」于(「位与」于「字节」于「二五五」)于(「乘」于「八」于「数」))))
      而
      虑「无」者
        (「写四」于「状态_待发数」于(「加」于「数」于「一」))
      而
      若「或者」于(「等」于「数」于「二」)于(「等」于「字节」于「一零」)则
        「捕获冲刷」于「元」
      否则
        「元」
也。

「:文言:写字节:子任务之输出被弃者(是子任务为二)不真写;被捕获者(为三)经邮箱送父任务。汉语:输出一字节:本任务是“输出被丢弃”的子任务(状态_是子任务 为 2)则什么也不做;是“输出被捕获”的子任务(为 3)则交给 捕获写字节;否则真写到控制台。:」
「写字节」乃化「整数」而「有」也。
「写字节」者会「字节」而
  虑「模」者「读四」于「状态_是子任务」而
  若「等」于「模」于「二」则
    「元」
  否则
    (若「等」于「模」于「三」则「捕获写字节」于「字节」否则「写字节原始」于「字节」)
也。

「退出任务」乃化「整数」而「有」也。
「退出任务」者会「码」而
  虑「无」者「捕获冲刷」于「元」而
  「退出任务原始」于「码」
也。