From ae0bf50cafa28cf8050087f1f22435d1d1be2517 Mon Sep 17 00:00:00 2001 From: muqiuhan Date: Mon, 17 Mar 2025 06:55:26 +0000 Subject: deploy: 55f6dea717ea87289f86f6471f130bc618f770e2 --- search.xml | 71 +++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 45 insertions(+), 26 deletions(-) (limited to 'search.xml') diff --git a/search.xml b/search.xml index c43c45c8..a1a0b605 100644 --- a/search.xml +++ b/search.xml @@ -623,32 +623,6 @@ Medicine - - G-Machine - /2024/01/23/G-Machine/ - -
  • The G-machine: A fast, graph-reduction evaluator
  • - -

    G-Machine 是一种通过图规约来对函数式语言程序求值的抽象架构。
    与组合子规约不同,组合子规约的control是从表达式图本身动态导出的,而G-Machine是由通过编译Application表达式导出的指令序列指定的。

    -
    -

    FP的程序基本上都可以用一个表达式的图表示,图计算机就是对这个图求值的机器,总的说来对图的求值是一个不停合并图上的节点生产新节点的过程。

    -

    例如:

    -
    let x = 2 + 3 in 
    x * x
    - -

    先计算出5,然后创建一个新的节点 5 * 5,然后再对这个节点求值,于是求值过程中就产生了很多临时的节点,这些中间节点也被叫做是 spine,求值过程是沿着 spine 进行的。

    -

    但是这样就产生了很多额外的开销,lambda lifting 里提到:可以把程序里,很多捕捉了外围绑定的闭包函数中的这些绑定,转换成函数的参数,从而消除闭包,得到的这个函数就可以自由脱离作用域,被静态的编译到机器码里。这些被 float out 的函数也叫 supercombinator.

    -

    在上面的代码中,如果不创建新的节点,顺序计算完了第一个 x,第二个 x 还会再被算一遍。

    -

    Spineless reduction 的概念:只有当面临需要重复计算的情况时,才去创建节点,不然就一路顺序算下去

    - -]]>
    - - Technique - -
    Functional Reactive Programming in F# /2024/09/12/Functional-Reactive-Programming-in-F/ @@ -776,6 +750,32 @@ Archive + + G-Machine + /2024/01/23/G-Machine/ + +
  • The G-machine: A fast, graph-reduction evaluator
  • + +

    G-Machine 是一种通过图规约来对函数式语言程序求值的抽象架构。
    与组合子规约不同,组合子规约的control是从表达式图本身动态导出的,而G-Machine是由通过编译Application表达式导出的指令序列指定的。

    +
    +

    FP的程序基本上都可以用一个表达式的图表示,图计算机就是对这个图求值的机器,总的说来对图的求值是一个不停合并图上的节点生产新节点的过程。

    +

    例如:

    +
    let x = 2 + 3 in 
    x * x
    + +

    先计算出5,然后创建一个新的节点 5 * 5,然后再对这个节点求值,于是求值过程中就产生了很多临时的节点,这些中间节点也被叫做是 spine,求值过程是沿着 spine 进行的。

    +

    但是这样就产生了很多额外的开销,lambda lifting 里提到:可以把程序里,很多捕捉了外围绑定的闭包函数中的这些绑定,转换成函数的参数,从而消除闭包,得到的这个函数就可以自由脱离作用域,被静态的编译到机器码里。这些被 float out 的函数也叫 supercombinator.

    +

    在上面的代码中,如果不创建新的节点,顺序计算完了第一个 x,第二个 x 还会再被算一遍。

    +

    Spineless reduction 的概念:只有当面临需要重复计算的情况时,才去创建节点,不然就一路顺序算下去

    + +]]>
    + + Technique + +
    .NET AOT 下的 F# 命令行参数解析库选择 /2024/06/06/NET-AOT-%E4%B8%8B%E7%9A%84-F-%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%A7%A3%E6%9E%90%E5%BA%93%E9%80%89%E6%8B%A9/ @@ -2363,6 +2363,25 @@

    然后我就在山峰浮现出第一缕阳光时,笑着对这个世界说:“我爱你,会永远爱你,永远最爱你。”

    我爱这个因为有我而变得温柔的世界。

    这将是我与周遭的一切,热爱一生,共度一生的地方。

    +]]> + + gallery + +
    + + 二〇二五年三月十七日 + /2025/03/17/%E4%BA%8C%E3%80%87%E4%BA%8C%E4%BA%94%E5%B9%B4%E4%B8%89%E6%9C%88%E5%8D%81%E4%B8%83%E6%97%A5/ + 人类其实根本无法同时拥有对死亡的坦然和对生活的眷恋。

    +

    看见死亡,看见新生,看见朝露凝于叶尖,看见惊雷震碎山月,
    它们是因缘聚散吗?

    +

    那露珠消散后去了哪里?
    当晨光加热露珠表面至 $0.1μm$ 深度时,表层水分子动能突破氢键束缚(键能约 $23 kJ/mol$)。
    这种相变并非整齐划一的队列解散,而是呈现量子隧穿效应——单个水分子以 $10^{-12}s$ 量级的涨落,在液态与气态间振荡,直到完全脱离范德华力作用半径(约 $0.3 nm$)。
    逃逸的 H2O 分子并非直线升空,而是在空气分子碰撞下进行三维随机游走。
    根据爱因斯坦-斯托克斯方程,其扩散系数 $D \approx 0.282 cm^2/s$(25℃标准大气压)。这意味着单个水分子在1秒内将形成半径约 $2.4 mm$ 的概率云,与数十亿同伴共同形成水汽。

    +

    水中捞月,伸手时,涟漪碎了三千世界。

    +

    人类的眉睫处有十方虚空,三藏经书不过指月之指,

    +

    看见儿时门前溪水倒流,看见婴孩啼哭时眼底星河闪烁。

    +

    看见生死之幕薄如蝉翼,和众生颠倒梦想处。

    +

    某些水分子可能抵达对流层顶(约 $12 km$),在那里被极地涡旋捕获。
    经过 $50-200$ 天的环球旅行后,其中 $0.0003%$ 的分子将逃逸到太空,携带着地球的熵增印记。
    它们的氧原子核内,八个质子正以 $10^{34}$ 年半衰期等待质子衰变——这恰是 $138$ 亿年前宇宙暴胀时期产生的原初量子涨落的回响。

    +

    那在这之前呢?

    +

    在这之前我刚吃完一碗辣椒炒肉,

    +

    香

    ]]>
    gallery -- cgit v1.2.3