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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
https://www.bilibili.com/video/BV1zG4y1f7c7 🤔.. 码农搞天
这个人比较有素质,锐评了丁真对MIT自作聪明。 但对于清华毕业,微软员工,Python核心开发者, 还有点信息差……
其实这个CG挺无聊的,也就对前端后端稀奇, offscreencanvas.com 那种才是标准

在找些 3D demo 时,发现他是我4年前的水平.. 那时候总觉得自己比编译器比lib聪明,不重视简洁明确,也罢。 最近有「清华拳」南开辅导员,也是IT男。
不过他挺有意思的 😅 没有真去算particles或noise,而是用mp4的PIL(cv2) 粘贴旧帧,还用了js canvas.. 也是比何同学 ASCII art 用的技术牛逼点,我搞过
https://t.me/dsuse/18702

200行代码交给iq能做到 shadertoy.com/view/4lK3Rc
>在一场C语言开卷考试中,和自己的清华大学男友通过腾讯文档共享来作弊,被一位临时担任监考老师的大四辅导员发现。
好像,也就是美帝资助的学堂罢了。
#china 最近献忠禁报了☺️舒心~
唉,学宣传学的 https://m.youtube.com/watch?v=Zh6FpWdxVM4
https://m.youtube.com/watch?v=DsNkGduKqzU Louise 整理了法制的失序

#hk 未来有拿身份证的风险, 言论和劳权自由 有被共走的取向

未来的意识形态,是左,是民粹(对内对外 不平等),还是自由法制?

🐱信希特勒的人不少。 我们在西方看来确实是恐怖主义地区了, 赞助鹅爹,联盟CRINK,献祭小学生,开车歼35
#china #news 潮汕,吃财政饭吃的

不拿一针一线,不休一朝一夕,
罚光一粥一饭,尽蛀一司一户🐻

“鬼子”来了, 讨薪者才能人人平等嘛
易姓改号,谓之亡国,人之相食,谓亡天下。
人是以是非判断定立场的,狗是以主人的立场判断是非的,其命运截然不同。
duangsuse::Echo
https://offscreencanvas.com/renders/advanced-ascii-rendering/ btw. 随便逛逛引文就会发现伪字符画 0xAA 这种,其实可以做到好的多的效果 不管你用 #js 还是什么,不管你多少岁,只要思想不滑坡,程序员的世界本该是这样的。 所以我不大喜欢何同学的那种,刻板印象 js和c的 4K-intro 可以看 https://www.zhihu.com/question/420656795/answer/1509103813 http://js1k.com/2010…
#china #dev #经济 http://www.bilibili.com/video/BV1dfBHY4EHg

>
现在应该老实了,一大堆人在谴责为什么要抽向弱者
按照社达的理论,干不过汽车大棒刀子的不是活该被淘汰? 🤗

开车过来社达就老实了?筛选出跑得比车还快的人类出来,还得比汽车硬 😡
按照社达的逻辑,人最多活35……婴儿期就度不过。动物世界可是喜欢吃老的和小的
——我教教你怎么爱国。“谁不招35岁以上员工,我们就抵制谁。不买他的产品、不看他的广告、不接他的代言,直到把他抵制到愿意招为止”。
>
我才不怕战争,一听到战争我就兴奋。战争的代价嘛,无非是死亡。咱就是一个普通老百姓,命不值钱。
如果没有战争,一辈子也就那样了,不会有大出息。上战场运气好立个战功,下来后混个官当当就知足了。
早打,大打,打核战争
duangsuse::Echo
https://x.com/whyyoutouzhele/status/1816770434508976560 #kt Kotlin Multiplatform 是迄今为止最优秀的跨平台方案 https://bytedance.host/231204/ #db https://tangdh.life/posts/database/duckdb-file/ http://blog.asleson.org/2024/07/24/bcachefs-an-introduction/exploration/
https://blog.lxscloud.top/2022/12/29/记一次请求伪混淆实验/ #net #freedom
https://www.zhihu.com/question/653647449 🙉大记忆恢复术!
>想抓的话一抓一个准

真是有点佩服贱忠圈互联网对自由世界隐私意识的意淫能力。 都2024了什么技术没有,靠偷开源,就精神胜利是吧?不够本。 有能耐把爱因斯坦和胡适抓回来批斗 😊

红小将恨民党能找到阮老师,是因为他揭露权贵/腐败前就在豆瓣。搜索引擎上都公开有,搜同图搜同书名就知道,即便这样,这帮法西斯饭桶还是找了10年。 阮只是装作重视匿名性,如同反贼声称自己在国外(yt上有不少北上广),红小将就被带歪了方向,那如果是真的呢? 和忠教品牌华为的芯片一样可悲。
而恐吓爆炸的韩裔学生,在哈佛网络ISP上直连Tor+10min mail ,这种特征都不会藏,学个毛的心理学。

>国内一般是蜜罐代理给VPN当前置,最后一步再接Tor, tor over rdp.. 现在大把Tr的sni还是用 update.windows.com 伪装成 windows 升级的流量
>接入Tor的是自己的海外服务器,而接入网络的方式是餐馆咖啡店的匿名wifi。

这些讽刺日本能信用卡诈骗的贼始终不知道,警察社会才是运行不下去的。 以前地铁在那表演安检,现在国内频繁歼35还不知情,无新闻,如同鲁迅所言的那个黑屋子, 啧啧
duangsuse::Echo
噢对了,之前做一个这个 https://duangsuse.github.io/mkey/making_reco/#sorts3 #algorithm #visualize
https://t.me/hyi0618/5036?comment=6393
#algorithm #visualize

>poetry pip 用 #Rust rewrite #statement
这种类似 docker/chroot 的东西其实C API调用都很少,最复杂的部分反而可能是 CLI getopt 和配置文件模板,根本不需要rust..

rust 的意义就是让我们觉得很Niubility,很neo,但写出来的东西,其实不比拿zsh或py胶水几个包快。 printf "\e[33m黄字" 这样的功能强吗? ruby也能做啊,写那么麻烦没意义,其实就是上情绪价值。

像 Vue 最近那个 oxc ESTree 用Rust才有点意义,因为它背后有一个更简洁通用的数据模型,类似与 tree-sitter vs ANTLR/PEGgyjs.org ,这才是革命性的
#life 移民 https://www.fxzhihu.com/question/570129737/answer/3379499929

>他在海关被留在问询室(俗称小黑屋)48小时,出来被带到难民安置中心,六个月后放出来得到一张绿条儿(临时工卡),然后就可以合法打工啦。

华人修脚店打工,从见习修脚技师,到修脚技师,到高级修脚技师。过了没几年就有绿卡了,比H1B排期快多了,不知道快多少倍。
我当时看着手里的J1签证陷入了深深的思考,觉得自己活该loser。
胡建免签全球,真不是吹的
>你都不用撕护照,直接六个月C8(BH)卡,无非就是身份过期之前申请,c8工卡很快就下来了。
>求求你们快来吧,现在送外卖和开网约车的越来越贵了,再不来点华人卷真就吃不起外卖了。
#china #sql #java #security #recommend
省流: fastjson 作者实现了前端都不能的 JSON.parse('{"__proto__":{"name":"FakeClass"}}') instanceof RealClass
它比JSer在类型检查上更 👈🤡

fastjson 窝槽, Ali 的架构师设计也真是逆天啊!! 2020的分析,今天才看到,狗屎程度堪比 antd 事件
Jackson 真是多亏同行衬托 😅 温高铁​还煞有介事在下面装无辜, 晒自己咋优化 Latin-1(8bit)+UTF8 转wchar(16b) 比赢JDK

# xx toJSONString : {"sale":{"price":0.5},"name":"Hollis"} 的类结构
.:
- Store-name-sale ["" IFruit]

.: IFruit
- Apple-price [0]
- Free

-xx Store "Hollis" (Apple 0.5)


这里有个问题, IFruit 其实是 sealed interface IfFruit{ Apple; Free } ,前者有"price":Int 后者没有field或setter,因此 parse<Store> ("{..}").sale as Apple 只能失败。

那 IFruit 凭啥能在无 backing field 的情况下被databind出来?new java.lang.reflect.Proxy ……😂 var by mapOf(); 没错,他搞笑呢,从性能和structure对应性上这都是fatal
那咋实现 OOP=封装+多态继承 呢? 通过严格定义的 sealed/enum ADT{} ?通过XML?都不是,他懂, Auto "@type"...
{
"@type":"com.hollis.lab.fastjson.test.Store",
"fruit":{
"@type":"com.hollis.lab.fastjson.test.Apple",
"price":0.5
},
"name":"Hollis"
}
// 正确做法
{"sale":{type: Apple, "price":0.5},"name":"Hollis"}
// Rust默认做法
name=Hollis
[sale]
Apple={price=0.5}

脚本引擎都弄出来了呀…… 这画风和js的JSON迥异,生硬如同 new WTF({kwarg:..})
于是计算器就出来了 {@type:com.sun.rowset.JdbcRowSetImpl, dataSourceName: "rmi://localhost:1099/Exploit"} ,数不清的注入点。
{"@type": "jdk.jfr.internal.JVM", "memorySize": 1} , {@type":"com.ibatis.sqlmap.engine.transaction.jta ... 变游乐场了

第一次知道这么脑洞打开的 workaround ,是把 List<*> =Any 泛型擦除当真理了吗, 真当子类多态就是一切皆Object 一切有@type呢, 其实那就是 enum { A(int) B(str) } 的特例而已!👈🤣
最搞的是JDK和这家伙一样喜欢玩魔法,开 1.2.25 blacklist 后 lazy(loadClass)("[Lcom.sun.rowset.JdbcRowSetImpl;") 等为方便ASM和反射也是合法类名,和温大佬异想天开的不一样, 修得和安卓 utf8_casefold 大小写合并bypass 一样弱智。真是不能期待他们在RCE 0day后,对OOP和json的强类型理解会有所反思,
因为直到 1.2.47 ,他都用类似 breakwa11 的黑名单「闭源」来防,拉黑算法还有bug…… 恕我直言,common sense 缺到有点好笑。 还@type呢, {"": "Apple"} 都是合法json,这不得快得废弃来?
(子类多态,var_a:T=b as T1 合法, Fn1<in T,out R> 就可以兼容赋值?super T ,override同理,这才叫懂八股..)

和log4j一样级别的。有时候我都好奇,在一个a[i]的 i±1 都绝对报错的代码世界,在try{return} 都会跳到finally{close..}的事务性严谨圈子里,在 sudo kill -9 随意但弱密码和Thread.stop不允许的稳健文化下,SQLi这种让WAF替你修的语意性混淆咋被容忍的。 弄得好像骇客们RCE进封闭系统如探囊取物,硬件主权全无效似的。
——
compile('select {}+1') (232) 是怎么能和 eval(f'{232}+1') 混为一谈的,代码和常量就这么拼接了?一个扁平一个嵌套分不清吗? 我 模仿JS元编程20行 INI.dumps() 都未曾设想的逆天类型观 ,这就像幻想「富文本」里会有 <script>、fetch() 会带站内cookie执行任意 curl 能做的事,真拿人html/DOM就瞎用,丢的岂止隐私?

唉,草台班子。 「你就说弹calc.exe快不快吧」
这不禁让我想到「一种游戏服务器RPC返回Object的方法」: 直接把0xcafababe..的对象指针传客户端。 😓你怎么验证那句柄是否有效,能够安全写入? set<usize> 还不如 map<int,usize> 快
如果客户端瞎JB暴力指向了admin密码上,或ROP覆盖了return“回调”的函数呢,你是否还记得 x=malloc(N) free(x) 为啥要对「整数x」严格限界、正确配对?

libc 和 Linux 防但防不住的,就是这种撒手掌柜啊 🤡
真是群爱等编译的脚本小子。 Talks
duangsuse::Echo
纯sdf, 顺手移植了一个给 numpy+tty 花了1小时吧: cv2.open(mode=HSL亮L).降采样为(stty size) mix(256色到" .*#"色) .追加\n列 .光标到(0,0)print 我用了比yes命令内存效能低的join'',但也不打紧 #performance fwrite() 就像CtrlV,要打'y'*500你是粘贴五百次还是多复制、缓冲? 把rows('<U1').buf分隔复制到 int8(w*h+1h),按帧yield给/dev/pts/0管道更省 若一开始就…
看最近几条逆天,我要聊哲学 #CS
操作系统不就是4片3口虚拟化么
时间内存存储程序,网口线口板口 #os #plt #embed #recommend
win,*nix,mac, aosp ios ;哪个不是只有这么点API和差异化 🦄?为了音视频和回应事件弄那么多框架外链新语法,不如3行 #web js。
bellard.org 那样的通才终究少数,搞出\0结尾无长度字串,连{}[]{type:}都没建模的libc算什么API啊?在位运算位flag上都被人打败 也配教人数据结构算法? 。 为这撒手掌柜的「千年虫哲学」服务的「编译器和OS」……

"It works"的「千年虫哲学」出现在4byte的13位时间戳、在'\0'结尾的CStr、在argc和snprintf等“最佳实践”、在将'❤️'算作2字符的JS和JVM(UCS-2的伪utf16)、在线程被窄化为while(1);join和各种设备信号的“同步IO”里 —evpoll为何不是默认呢,就因为C没“回调值”,轮询pull>推送onpush? 千年虫在几乎所有让你不分昼夜却不得要领的「术语」里……

时间片sched - 变通while(true)的死机, kotlin/go func 怎么不需要这些? numpy,GL 为啥不需要循环向量化?
内存片vm - 缝补struct{{}} Rc状态树, 缓解(编译期)检查缺位的骇客 enum { A(int) B(str) }, for(i:0~9)a[i], sql select${x}+1, scanf%s
存储片fs - 分簇存bytes&CoW复制断电不断写
程序设置依赖片elf,apt,regedt - 硬编码各种rc,ini和/lib/.so.版本 🤮,各发行版树格式不通,make系统ld.so优化一堆,却连 live compile/fatJar/minify 抖树都不懂……

网口tcp,ssh 双管道(socket), pipe闪存读写(等buffer就是等yield)
线口usb 注意方口圆口转接,通用的
主板口pciBus 安卓的dts
>__线程调度内存隔离、文件设备(fat32,ext4,IRQ)、 IP网络和并发工具(IPC,sem,mutex)__
>如果一个人写了线程池或malloc()或ELF文件链接器,声称自己写了操作系统 是可以的(GNU不就是)……

凑以上这些字数干嘛? 时间内存存储程序--片,网线板--口,就这么简单。 把双管道快取翻译成「套接字缓存」是啥逆天专家
OOP封装/多态实际上解决了 libc vm 化进程的问题,JVM,NET只需要查数组或union的越界,没有“syscall给驱动”,因此跨平台,何来segfault?顶多送个内存片swap和热更新热迁移(混合睡眠/分布式fork),做好函数间互相jump; yield(闪存或typed)的“IPC”。

IO? 直接说ip+fs 分片传输吧,检测点击长按、解码HDav到PCM也没见内核态自带啊,外设和性能也不必突破一切皆文件。
ip实际上靠http。纯socket没?args长度没返回MIME类型 ,URL就平替了 env key=v PATH/git/add-command?k1=v1#.mp4 .wav; 实现共享
ip和sh命令一样,带参数单文件而已。ip还附赠跨语言扁平读写(REST序列化)。 stdout本该可直接 print Blob(bytes,MIME);而stderr是loglevel变量,没意识到这让log4j竖子成名
用过 nc;curl 管道和GET,PUT都知道,http函数模型比sh优秀,实际上WebAPI/py调包远胜于UNIX。PJAX调用/PWA就是一种“上文切换”、IPC、/{etc,usr}软件格式

时间内存存储程序,网口线口板口,4片3口虚拟化 😊
逗号左半,pyjs javacs rust 包括C作者自己写的Go啊 Docker啊,哪个不比libc+Linux强, uv(vs ^CSIGINT或evpoll?) jemalloc(闪存0copy和0flush) psql redis/flatpak
逗号右半,Bun.js ip栈封装; WebUSB; Arduino; 各种图形界面设定,很简洁,一到hwinfo“元数据”就乱搞,像fastjson大师修注入似的。凑字数?给骇客留空间!
包括那个 ld.so 可绕过的chmod +x ,多用户真的比多app容器+人均root有用么? OS竟敢不按devs的喜好来部署。
《程序员的自我修养》大概比较了COFF对象的这几种分支,PE,ELF,甚似于apk。常量池.rodata、全称名mangle、字节码动态链接、菜单图标、自带资源树和签名,比之C++ 对象,不能复制修改,无虚表原型,无双指针框定类型,不线程局部而。

也就是缺个二进制 databind 写冷门硬件的“驱动”,不过那也无所谓,ASN1式的屎山只能像zig那样,自动C2zig
有人说用户态不够,memsafe 后还需要调度器呢。 谁要那个巨无霸4K起步的 struct task/PCB{} 啊,还有上文切换开销。画蛇添足? Lua, 2KGo, NTFS和安卓的FUSE, numpy 真多核……从API从源码开始做优化,删掉无意义的设计模式,四海皆效仿,才配叫编译器和OS!

我半年前1k阅读的稿,也是这样 libC sucks 的观点 https://t.me/dsuse/19854
淫王也这么想 https://www.yinwang.org/blog-cn/2019/08/19/microkernel#:~:text=一个操作系统本应该
1🦄1
https://t.me/solidot/25742 #linux #py #news 幽默狗官 🤡
>
Linux“现在就像是大型科技公司”——我 Kent Overstreet 不同意。Linux 25 年前的诞生并没有得到大厂的帮助。 科技公司来来去去,Linux 会比它们活得更久。它们只是过客。
面向社区、面向用户,培育工程文化。 靠威胁某人的职业生涯来让他们遵守规定?
用于开发人员之间交互的 CoC(Code contract) 是一 回事,但是在提供一个通用平台(即 Python 软件包存储库、LKML 讨论串)时,审查制度就变得更加值得怀疑,而绕过流程来删除它显然是越权行为!

没有任何透明度或公开声明 - 只是 Linus 的私人通知,根据 CoC,我的PR不会进入 6.13
几乎普遍情况下,只要出现权力真空,首个候补都是混帐——过于暴力,因为这就是他们掌权的方式。CoC 委员会如雨后春笋般涌现,以令人感到小题大做的方式掌握着「生杀大权」。
一种轻蔑的文化,想用宗教化的尊重屏蔽、带歪技术讨论的文化,比单纯的口水战更有害。

>Steve Jobs : 我喜歡和聰明人一起共事,因為完全不用考慮他們的自尊心。 你的時間有限,因此不要浪費在為別人而活上。要求知若渴,虛心若愚。

技术内容,还涉及 #rust kmalloc。 mm 维护者对错误处理迷恋的「技术政确」阻止了巧妙的"alloc_hooks(realloc)"内存分配分析,年前也妨碍他贡献单模块动态开关 printk() 调试调用: 👎

>内核现在有一项称为内存分配分析的功能:如果启用它,cat /proc/allocinfo 中将显示一个新文件,该文件按调用点列出分配的内存总量。这是我多年前自己构思出来的,而且它的开销很低:比 memcg 便宜,便宜到足以让分发内核默认启用。这很棒:我真的很喜欢那些成本低廉、可以一直打开的调试功能,这样用户就可以四处探索并发现一些东西(引起开发人员的兴趣!)

文尾他提到 #py https://www.patreon.com/posts/116412665#:~:text=happened%20in%20the%20Python%20community
>
https://discuss.python.org/t/for-your-consideration-proposed-bylaws-changes-to-improve-our-membership-experience/55696/18
Tim Peters 是 Timsort [1] 的发明者,Timsort 是 Python、Java、JavaScript(V8)和 Swift 中使用的内置排序算法。
提到诽谤是在讨论删除名为“slut”的 PyPI 包时。Tim 没有直接使用这个词,而是说: 因为它的文档反复使用了 Dan Akroyd 用来形容 Jane Curtin 的词(SNL)
他的回应似乎很正常,根本不应该被禁言。这几乎是卡通式的权力滥用。
应该有一个 SNL 西部小品,其中强盗和牛仔像 FOSS 软件开发人员一样行动和互动,围绕一个主题“同意我的社会框架并按我说的做,否则我就杀了你!”
http://www.bilibili.com/video/BV1cFm8YGEKe #china #dev BLM DLM了🥰

https://zhuanlan.fxzhihu.com/p/704798293 Markdown编辑器 Mou
📱国内开发者和用户都是奇葩,一个想着办法不付钱,一个想办法挣快钱,猜猜最后谁受伤? #经济 🤗
btw. #apple 这方面真是闭源丁真,什么都吃,就知道用户够有钱,其实是群靠着开源上游,卖设计,设计上也不求上进的脚本小子。
吃定某款App,比如ytdl或CodeMirrorIDE吧,不是问题, 但巨婴化就是和自己过不去了,软饭还吧唧嘴,又功利又幽默,不够本
iPhone 上默认 Pythonista 都收70,不知道给Guido或相关FFI作者捐了多少?上游出bug苦的还是用户。 实在是吃相难看,Objc也超级饭桶,一群程序员,非常有行为艺术家的范 #bilibili

>https://github.com/MaterialCleaner/MaterialCleaner
两年多时间过去了,我自己的软件终于有了完善的逻辑,也接入了 Google Play 的支付系统。虽然项目收入很低,总收入约 8600 元平均下来连低保水平都不到,
做小众项目更加困难,70 人民币永久的价格还算合理。然而即便如此,当我看到评论区一些用户也说太贵,我决定还是开源并放出一个完全免费的版本。
然而在得罪两百多个付费用户之后,得到的结果是评论区把带节奏的人当做英雄,

他们回复是“既然有能力改变”,有能力说的是我吗?恐怕是在炫耀有能力,轻松地让一个弱小项目破产的你。

😔 可怜啊, 咕狗,苹果,两年时间才能完成一个 🤗式的模组界面, 和Web和PyJS产能根本没法比。
http://xahlee.info/kbd/jp_hiragana_frequency_table.html 超级 何同学
#china #dev https://www.fxzhihu.com/question/617917921/answer/3173907554 不过,别说「独立显卡」、「台式机箱」了, 「独立开发者」都犯法了

https://coolshell.org/articles/8398.html/ xkcd 最火漫画
https://leafletjs.cn/reference.html 🇺🇦 世界地图 map
DEMO: https://xkcd-map.rent-a-geek.de/#10/1.0141/36.1848
Forwarded from 层叠 - The Cascading
#CVE: 7-zip 任意代码执行漏洞,请更新至 24.07 或更新版本。

7zip 的 zstandard 解压组件存在漏洞,或导致任意代码执行。

CVE: CVE-2024-11477

zerodayinitiative.com/~

linksrc: https://t.me/bupt_moe/2305

#7zip #zstd
Forwarded from Dante's Limbo (Dante At2814)
duangsuse::Echo
看最近几条逆天,我要聊哲学 #CS 操作系统不就是4片3口虚拟化么 时间内存存储程序,网口线口板口 #os #plt #embed #recommend win,*nix,mac, aosp ios ;哪个不是只有这么点API和差异化 🦄?为了音视频和回应事件弄那么多框架外链新语法,不如3行 #web js。 像 bellard.org 那样的通才终究少数,搞出\0结尾无长度字串,连{}[]{type:}都没建模的libc算什么API啊?在位运算位flag上都被人打败 也配教人数据结构算法? 。 为这…
#FP #c https://github.com/hirrolot/datatype99/blob/master/datatype99.h macro
https://halfrost.com/reactivecocoa_macro/

tag union: enum { A(int) B(str) } in C 😨 无需任何编译器插件
implemented upon Boost/Preprocessor
冷知识: gcc 宏是可以通过CPS延长递归展开 到1024步的,而宏又包含 if defined/eq 等常规流控与##-concat等运算,意味着即便没有 template<> 魔法, for if 甚至 eval() 也可以 static_assert
// 9, 2, 5
static int lesser_than_10[] = {
ML99_LIST_EVAL_COMMA_SEP(
ML99_listFilter(ML99_appl(v(ML99_greater), v(10)), ML99_list(v(9, 2, 11, 13, 5)))),
};
// 用例: 1+(2+3)
datatype(
BinaryTree,
(Leaf, int),
(Node, BinaryTree *, int, BinaryTree *)
);
int sum(const BinaryTree *tree) {
match(*tree) {
of(Leaf, x) return *x;
of(Node, lhs, x, rhs) return sum(*lhs) + *x + sum(*rhs);
}
}


ML99 是一门在 C99 预处理器运行的lisp https://metalang99.readthedocs.io/en/latest/list.html
尽管如此,有大佬说「元编程」要三思 https://lotabout.me/2018/think-twice-before-utilizing-meta-programming/
btw. 看到文心一言禁止F12, 有人贴了个反制 很有意思😂
for (var i = setTimeout(";"); i-->0; clearTimeout(i)); 


利用宏展开和递归实现貌似不可能的链表处理,其实也只是手段巧妙,利用f.nArg这样的const拼接代码, 效果并不会比过程宏甚至简单的codegen好
#define AND(X, Y) AND_##X##_##Y
#define AND_0_0 0
#define AND_1_1 1

#define IF_ELSE(C, T, E) JOIN(IF_ELSE_, C)(T, E)
#define IF_ELSE_0(T, E) E
#define IF_ELSE_1(T, E) T

#define IF(C, T) IF_ELSE(C, T, )


我还是觉得,如果不限制工具链,编译期反射或运行期记忆化eval 比模板巧妙的多。 体操只是被编译器驯化的结果而已,比递归+模式匹配巧妙的算法有很多。

https://github.com/hirrolot/datatype99/tree/master/examples/derive
https://github.com/orangeduck/CPP_COMPLETE
https://netcan.github.io/2020/11/06/C-Rust元编程之BrainFuck编译器(constexpr-过程宏解法)/

n=a=>a.length
add=(A,B)=>A+B
curry=(f, N=n(f)-1, ARG=Array(N).fill('').map((x,i)=>'_'+i) )=>eval(`p0=>(${ARG})=> ${f.name}(p0,${ARG})`)

curry(add)
p0=>(_0)=> add(p0,_0)

完全有能力生成任意的vararg,并且可以加泛型