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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可以退出
suse的小站(面向运气编程): https://wojs.org
Download Telegram
#cs #dev #statement 我终于理解Dijkstra说的,“编程不关于计算机”。自古以来,编程不是件事务,而是思考的习惯;简明不是卖点,它是生存的条件

这些人写的都是什么跟什么?base64和base32 竟然不是一个pkg? C语言1.4k行共写了1个算法 0次复用?各种编码模式能ctrlcv出4个函数来?
拿Rust“设计模式”了一堆struct{} 然后说自己只支持base64,也没有并行优化??
base64 不是很简单的3:4字节重组算法吗? 它..算是问题吗
它..值得花几千行、400次提交,修补3年吗

这就是所谓的“静态编译优于脚本”?在我眼里,这些人以脚本级的思路,用等编译的态度编程,不算自讨苦吃?😨
写这种代码一开始就用js,py好了,移植个什么劲。哦,原来是编译器垃圾,不能“肉眼可见”地把py译为C
所以要那种编程语言干嘛?制造隔阂、另起炉灶、妨碍计算机的进步?

几星期的操心,只是为解决5行级的传输编码?这能叫编程吗?
如果大部分是这种代码的话,大家都别编程算了,交给AI吧,人家思路至少是清晰、条理有序的。比en-wiki质量还高 🌚🌝 再比中文百度

所以我讨厌看重编程和代码排版。 人应该做的,是享受科技革命后的日常生活、轻易地高质量创作,不是以 重复先人的成就及错误为荣🙄
duangsuse::Echo
#statement 人能活几十年,计算机界也有70岁, 对技术怎么就这么短视😒。 过几年再看看,会觉得吵的是毫无收获,你新写的东西真的是唯一的吗?世界上甚至有人实用过。也有无数种视角你没做过,这并不能作为什么谈资 自己做CS,科学,搞得跟信教了一样,主动提AI,主动骂狗shit ,你拿什么荔枝? #ce #reveng #sb https://t.me/Javaer/895034 哦,刚刚想起来 跳转Block 的层级也是可以做混淆的,但这是 #security 领域的东西,一般人只会用加壳脱壳扫内…
#ai 这个多少有点恶心了, #PL 人都这么抽象的吗?🙄
#zhihu 回答大意:
GPT不能说是编程语言,因为套路和准确度都不够统一 也没有生态和社区,但可以帮更多人更简短的完成任务,所以说是最好也没有错。

《程序员的心理疾病》
☝️文中提到的礼貌问题GPT全解决了,所以帮人用好它的人,就成了被口诛笔伐的“蠢货”

唉,不论是非只论善恶,也难怪中国的PL人都要出去留学呢

没点素质,真润出去的PL大佬哪会在意这点细节?多是一群连parser和IR都没构造过、OOP和trait多态都不知咋实现的愤青,看到自己模式匹配和English terminology 的技能被AI“抢”了,就破防到跨领域无论据追捕

#cs 的学生成千上万,但文化程度这么低的也是第二次见 👏😓
#cs #math markov 链 BV1xa4y1w7aT https://www.youtube.com/watch?v=i3AkTO9HLXo&t=1s

#algorithm 随机游走 、稳态矩阵
有时也觉得 #CS#IT 界挺魔幻的,60~70年前的矩阵和协程,Lisp式的DSL,到今天还有框架 😔

当然,numpy和 Go func, kotlin.coro, Rust derive宏 已经远不是Fortran,OpenResty那些东西可比拟的

但究其根本,我觉得今天CS+IT的佼佼者,不少lib依然在犯70年前它们先辈的错误。
对于协程这个特性,究竟是DOM,node那样不靠package就包揽一切,还是像Go那样作为噱头,Erlang那样基于Actor,Kt这样与时俱进 最为正统呢?

拿js模拟过……
 总之就当自动传f1(回调),f局部变量在回调中, 所以调用f()能选择何时何处执行
Kt的结构化并发确实很有意思,但要谈可用性,JS的手动撤销和自动Dispatch更实在

btw一句,我讲的比较详细,但我对CPS不感兴趣,
主要是为了把回调链表与callstack、OS线程 做类比。确实编译原理和OS是分不开

本群人均素质挺高啊,都知道coroutine是靠CPS
但我更喜欢不纯粹的理论

有时我觉得这些也没必要说的, 我反复思考有好几年了,但它们终究是三句话讲完的程度呢
因为JS最开始是 func*(){} yield Promise,没有async

async是因为JS不能直接把函续交给then,要先yield给执行器(对等协程vs上下级协程)

Ruby的call/cc, C的"setjmp" 就是对等协程,它们符合CPS的刻板印象但不好用…… 总之异步编程反人类
异步编程也可以很美好的,比如 Reactive 就遥遥领先于Java,PHP这一套。 Nextjs应该是新时代的服务端语言

我想,大家都被限制在自己的编程生态圈,不去思考这些差异背后的进步方向,可能才是编程之道吧……

可能直到AI广泛辅助编程,这些问题都不会有答案
但我清楚AI无法完成写法的形式化,只能从根源上,让用户指定开多大线程池完成多少种Task,这些术语的差异才会伴随着“优化选项”消失

C 那种argc+argvec 的list,也只是术语的差异吗? 恐怕除了样板代码的多少,这些语言作为“app设计器”,也有根本不同
——
在我看来,无论是工业界最流行的语言,还是协程的理论讨论, 都是没有取得统一模型的
换句话说,每个语言有它的优点
这不是一件好事。 一个没有取得共识的工具,会阻碍人的泛化思考,会把编程当成一件机械的编码任务

其实明白编程和数学里的泛用性,又如何呢? 有人为此挣到钱,有人选择删了公开博客, 但到最后随着时代向前,知识也没啥可稀奇的吧

即便如此,我选择把编程视为一种乐趣和创作。
我不需要言辞间的“朴素” “平凡不难”,对于创作者来说,灵感,才能成为汗水里掷地有声的内核。 🕊
duangsuse::Echo
https://zhuanlan.zhihu.com/p/707493606 虽然确实是可行的但是这是什么玩意😇
#您知道吗#cs #dnn #wasm 计科长青树一瞥:递归下降、梯度下降 (1)

*编程的赞歌就是(组合compose)的赞歌,软工的伟大就是(复用reuse)的伟大!*
复用就是腾讯嘛!但,什么是组合?流行乐队是组合?

在《几何原本》里有这样一条公理:“整体”是由部分构造堆上去的。 无论物理的原子分子、化学的单质单剂、生物的组织系统、儿童编程的二分查找,甚至您编写的{语句}(算式) 定义表(),总少不了分治算法的影子;而与递归对应得最直观的树,除了带kwarg的视图描述树XML、文件夹管理和正则匹配的前/后缀树Trie、OIer的必修KMP图(: Trie+FailGoto),更有梗图里常被实现为SortedSetOrMap的红黑树RBTree(: AVL) --作为按int KHash()预分组K-V查找的一种补充。

不过,今天咱调戏的不是高深的算法或数理化,而是程序员的自我修养:表达式、解释、编译、类型检查和推理。
🤓不少语法看似是ES6,Kotlin,Java20+,C++里高深莫测的新特性,其实,只是因为它们的设计混乱带来的大误会! 软件工程界的基岩,原本很简单?

- 计算器🧮("1+1"):数据值 是不支持forif或(vars)=>函数/JSON文档的解释器,最简单的理解是 x=1; eval[+,1]。对内存的利用方式过于单一,就像🔑C语言的.o .so 只是靠LD互调用的object{static{}},或者VB一代难加函数的"红石命令",毫无扩展性还要另写头文件 自然被淘汰
- 解释📠("expr(1+1)"):值或行为 程序员唯一必须调用的接口。tree-walk(递归遍历算式)非解释器的专利、VM不是编译器的秘技。对x86汇编的执行也叫硬件解释,旧安卓通过转译arm汇编.so库到x86做兼容,就像IKVM对“JVM汇编”仍能再次转译到IL
- 编译 就是解释器的缓存📑:记住自顶向下遍历时的套路,直接自底向上组装值(lisp转RPN),很像二叉树vs(堆,一种树状数组)!这除了要重新实现重复/判定/ret&&break跳转的流控,还可将RPN栈指令集优化为局部读写-按类型复用。
要求手动编译的语言均属慢速原型,会标注或推理出类型签名,从而🔑以限界实现提速和多态(重写重载、记住变量名的指针,即担保栈size恒定)。 ANTLR等“状态机”编译器的输出便是自底向上,正好颠倒于主动read()流到js栈的PEG,不过,它们其实是慢的虚拟机。

类型的本质是简洁的🔑常量「黑盒测试」,它与表达式同构,执行方法也相同!
- 类型检查 就是只解释 def f(x:T):R 里":右侧"的算式,以插入 (f T R) 这样的SQL行。x编译后是arg[0]:一个空悬指针,但T.fns却是有血有肉的"反射"常量。把每个 x:T=1 换为 x=T!
x+x 的语意为查询 (+ T T)、1+"" 查找函数签名 (+ int str)、 u.id (.id User Ret?) 便能检查误拼写和空指针
不难发现,这些都是效仿numpy重载个运算符就能实现的,并不需要学编译原理写解析器!这也是 hamcrest.org http Test库断言组合器的原理

泛型class/fn/var和赋值 的推理规则是一样的。
例如把 <TR> as([Box, T], T=>R):R 与 as(Box(1), str) 深度重合时,新建两个TypeVar(void),它们会在 Int==T, R==str 的检查时被向上赋值,从而填充[Box,int]里的类型T、as调用里的R,并照顾到 i32->i64等转换及子类规则
同为编译期遍历,你还可以思考下 let[x0,x1]=a 如何被实现的,以及在运行期是否能模拟?

学习元编程有何好处🌝?因为可以从根源理解yield/await、纯函数、模式匹配、模板宏等“新”特性,凭什么能简化旧实践!
- 闭包和协程closure&coro 便是编译比解释好实现的两个特性。 compiler 通过{let;}的动态作用域(原型链..) 区分符号的LEGB来源(Local Enclosed外层局部 Global Builtin常量),从而能把 (x=>y=>x+y) 化为对象值 f_y=((x,y)=>).bind(x);Lua能查出跳转到表达式的指针,y=yield x 便能在return前,把函数的局部栈保存回 g.next/pr.then
- 模板constexpr 让闭包关于常量创建,如何? ((x,y)=>x+y).bind(1) 就是 1+y, ((k,s)=>s[read+k]() ).bind("Int") 就是readInt,*[map(print,0~9)] 就是循环展开,这些就是预处理的价值!反射和const只是对eval(并缓存)之「二段求值」的阉割
- 副作用effects #FP bros异常抨击print这种“无法被值存储的、有非局部干扰的赋值”并推广他们的赎罪券:Monad……这却是因为他们并不懂「定义式编程」!
React signal(x=0) (1) 就是一个不纯的赋值,但,它导致的x=1却能被广播为参数、被保存和复现!🔑这还能叫“状态变更泄露难题”么?
并且,它还偷走了"FP独有的模式匹配"。对赋值副作用的录制,更是bash,vimrc类格式经久不衰的原因

说准点,这些都是 #SQL 的老大Prolog所原创并推崇的-:变量作为值,逻辑式编程!
*整体大于局部;与另一结构重合的结构,之中的值相等 --几何原本*

在通读本文时,也可以参考以下实例:
coroutine=由用户run()的线程
*调用栈是数组,协程栈是回调构成的链表
诸分治排序可视化
手动babel脱糖一个async函数
知乎:分词解析vs解释
实现一个HTTP DSL
Var(signalObj)如何跨越进程和网络:句柄、登录cookie、JWT
def(): return this 是何方神圣?
在解释时缓存代码的Tk GUI
Trie们和字典输入法的实现
关于class Visitor {se(e:Add_AB), se(e:Int)} 和Eval/Dump接口的融合
实现文本流递归下降、四则运算逆波兰、 JSON.org
Prolog binop #parser
计科原神:认识WASM/LLVM IR和JIT, webVM.io
#recommend
#plt #cs #learn 如果从「一等公民」的角度给语言打分,从计算器开始,依次有这些类型的值:

bytenum1248(char short int long u8~u64) bytes bool
tuple union{enum Tag} rwstream(sockets/libc) 很大程度被sealed class:接口重写与json消息取代了🔑

list的len(骂你呢,C) str的iter(utf8的'🔠'不总是8bit一格哦) err和null的可选链(骂你呢,java空指针.快乐悲伤路径/非局部return)
Rc/GC(如List树或KV图 而非瞎手写指针链表); fn的bind(非全局状态,即对象变量,函数值)
Thread的asCallback(小名async函数. 能被不同CPU回调的'单线程',以允许evpoll监听,如触屏手势)
ref的onvar(响应式绑定,模式匹配let) ref的map(惰性数组和变更缓存)

fn的bindLit(字符串模板/算式内重载/变量和类型作为值-反射)
wavfile的sr(自适应微分精度) vec+计算图=tensor(numpy)

C的数组没长度,union没tag不区分子类型 (说C有sizeof的杠精退散,C就是在用汇编器都嫌烧cpu时代的封建余孽,pygo ffi/asn1可完美取代)
C++一个lambda隐转SAM class可给它装到了,难写的要死,那么简单的逻辑写成下划线能加钱似的😅
C的多维数组不支持broadcast运算,当然也没有.shape
librosa的“声音采样”只是数组而不包含采样率..
sql的惰性数组,至今仍被 http 分页切成offset limit的碎片缓存

js的input() 不能和{wtf:}绑定,只能搞.value不能load,formUI了个寂寞? H5应该比qt gtk这些先进吧,结果Tk里都支持的Var()compose没移植过来😅
java的“序列化”因为反射的不透明,至今仍有各种坑,因此最基本的CLI也写不利索

我至今仍然很好奇,新语言/库对「值」的理解,会怎样在无知上继续刷新下线
然后用一大堆自身就缺陷不小的所谓设计模式、样板项目。。 来解决这些API自身的缺陷
——你们真的懂自己的lib在解决什么问题吗,如果没学过,比较过古今四海的同类api吗?

在我看来,没有统一标准Ok/Err类值(NaN,null,'',[]..) 的语言根本没法使用,只能写些不相干的ifelse🔑
而没有标准二段求值(类于py的type annotation) 的静态语言,所有数据绑定都无法完成,只能祈求它能导包,或只用写4个“属性”的load/save
连pip install 都没有,就更是对工具化使用造成致命打击了。 (什么?可以发布 shadowJar? python可不需要你懂这些,甚至cli直接fire(fn) 就有了)

然而无论OOP,FP,“多范式”.. 它们是绝对的主流😅😅😅 而且还有一堆人对那些boilerplate code奉之为圭臬
仿佛只要是个“图灵完全”的语言,有一些UI/http/CLI的接口能用上套上,代码有多烂?冗长如同手写汇编?时间来凑就够了嘛……AI都懒得用

#linux 应该不会告诉你,它也是libc算法的一部分:它负责“分配与回收.so对象的内存片” “在cat等待read()管道生成器时 让cpu跑其他时间片”,它还定义了“ELF对象格式”,这约定了.bss与全局构造器,允许你修改.rodata里的字面量、用LD_PRELOAD替换函数
它使用被称为fd(->inode)的cookie参数,调用“syscall”来鉴权,而
这种CLI有4类参数 env UID=header f -kw -is-flags arg 与http如出一辙!
https://t.me/danteslimbo/3349 ebpf

这些,都是pyjs背后会为你的代码做的事! 但,你的object()强过C的dlopen()或bash alias,你的async def强过C进程,可用于N:1轮询'用户态'触屏驱动,你的http能跨越内存或系统,不需要wine和/usr/include struct就能利用..
linux 唯一比jvm强的部分,除了能解析各种usb,ip消息驱动和fs格式,就是mem上兼容用磁盘做4Kswap,以及cpu上能让while(1) 不像js那样卡死-注意!单await不等于没有并发加速。😋
os和compiler的同构有多疯狂呢? 打开htop,你看到的其实是F12里的对象树:这包含env表的继承、killall将它们free()、新线程的数组;而对于能被多个“对象”引用的文件-如同堆内malloc,内核还使用了Rc来清理对象图..
所以,有没有感觉自己比UNIX运维乃至内核开发者高到不知哪里去了呢(笑) Linus懂个锤子异步

btw. 我说的「值」不是与ref对立的那个,而是“用于90%编程业务的必需品的心智模型”
再说,不能ref.assign/copy() 的也不叫引用
#cs #asm 一个极小的2byte指令和数据RISC(int=i8)
GP寄存器: R0~RE
mov RF, setInterval
smem 0x800, 输出
lmem 0x802, 输入
地址总线u16 通过RD:RE访问

#book Computer Science: An Overview http://v8cpu.qinyue.world/instruction-set.html
https://github.com/chyyuu/v8-cpu/tree/master/examples
https://github.com/vsergeev/v8cpu/blob/master/v8cpu_isa.txt

汇编期计算:
brElse: fn ;if{}else{fn} then..
addI R0,0xFA,R0 ;+=250
jumpL R0,'A' ;if(ch==0x41)
rodata_XX: db "Hello" ;常量池指针

ALU(fn Ra Rb Rw):
addi .+
addf d+
and .&
or .|
xor .^

MCU(fn Ra lit):
jumpl b.lt
jump b.eq
move .= Ra Rw
halt b.thread
rot .>>

ldst内存读写指令,在x86上从来都是mov多写法
loadm lconst "wtf"
loadb lconst_0
loadp larg, aload 0
duangsuse::Echo
#algorithm 动态规划 dynamic programming eg. lcs公共子串, knapack背包最佳配重, edit-distance编辑距离 http://www.bilibili.com/video/BV1FJ4m1M7RJ 🌚这是连“二参记忆化递归”这个常识都没说出来啊。 其实DP的经典案例是fib f x=x if x<2 else f(x-1)+f(x-2) 转化为一维的 f=[0,0]; f.i=f.(i-1)+f.(i-2) 这样,动归比递归的主要难度,是确立基线,以…
🌚 其实看完动画,我是有点想批评作者的。 这么用心做manim ppt 却依旧照搬谭氏备课,国内的 #CS 大概就是这样
然后下面把dfs和dp类比的,一看3小时,这是在悉尼歌剧院放的编程课吗!

完全无法理解《状态转移公式》是怎么得出来的,最好不是抄的。 因为对着答案出题、停留在魔改公式的程度,可不是人类该干的事


每当你想指点什么的时候,比比自己的条件和对方差什么——盖茨比大概想对砖家“高人”说”
https://t.me/dsuse/19830 #statement #book 「只给🔑不给🔒#china
😒莫名其妙把《kt元编程》看到 Compose, AtomFU 的部分了,占二成篇幅

不得不说,牢霍 这两张写得是最珍贵,但是最烂的。

@Composeable 上来就是说内部有啥结构啥流程和flag,报菜名
连期待编译出什么代码都没得

如果您是后端,不懂Compose在哪调用,为什么有 $changed 这些优化呢?不好意思,牢霍只负责教codegen,这个框架被设计来解决什么,比无魔法的Anko优越在哪,他是一点不关心。
纯流水账 ,基本只对同样要学八股的人有用。。

我在想, 自顶向下地编程和写文,是我用的唯一方法;它的好处是,一切代码都是有reasoning的,不服可以重写、重新选型,不是强加给你来死记硬背的

但是,迄今为止我阅读全部的中文资料,除了王银那种废话为主的低密度冷科普,没有这种「自顶向下」的作者。

为什么从根源认知一类问题, 从而区分本质与私货、明白为什么要这么写,对各种大牛就那么难呢?!
https://ray-eldath.me/programming/three-important-ideas/ #statement #PLT
Ray: 我的一位朋友如此评论这些文章:他说真正理解抽象的唯一方式是通过抽象本身,而不是通过并不准确的类比。
「为了充分地("有用处"地)学习这些抽象,你必须去学数学,而不是通过一些糊里糊涂的文章,它们除了类比还是类比」
Dr: 要找到 “哪些代码遵循此抽象” 并不是必须的。像 Monad 这样的概念是非常抽象和通用的:它是一个描述了一套广泛的编程模式、数据结构、库和 API 的概念,其强大之处在于它们,是对如何设计和使用这种抽象的指导原则
成为高效的程序员并不需要理解全部的联系。其他人自然会强烈反对 :-)

Ray: "可仅仅知道 JavaScript 里的 Promise 本质上是 Monad,而 Functor “又是一个盒子” 并不能帮助你成为更好地程序员,而在你自己的库中使用这些词语只会让你的下游觉得不舒服"

...概念是非常抽象和通用的
等等,
逻辑学告诉我,抽象是通用的反面,就像社会是丛林的反面: 您的知识若是通用的,它一定能与各应用领域紧密联系,学生如何觉得它抽象!

人们就是讨厌空谈,所以设计各种简洁而通用的API;人民就是讨厌丛林,所以组织出了社会。 现在竟有人觉得存在通用抽象和丛林社会?? 这就像是说javadoc等机翻的玩意,比各种demo, test甚至产品更能展示项目的价值!
“靠代码行数来衡量软件功能的进度,就像是凭零件重量来衡量飞机制造的进度——Gates
靠知识点的难度衡量价值,同理。😅

我看这种观念者,确实是够抽象。 “类比”的本质是抽象,而「学习」只是用自己领域的思维,去「组合」「代换」出别人说的那种东西,带给你工具和知识图谱上的价值。
大家来到世上都是白痴,没有谁拥有无法被代换给别人的知识「原子」。写文爱用「未定义就使用的概念」,想设计新的抽象,却不谈理由?那就是 lier
无论我们用什么领域的「原子」组合出了CS的知识点,那都是潜在的价值,为空洞的术语绑定了新的语意,更摒弃了其中被“凭空捏造”的哲学。让IT人说话,天塌不下来!

难者,不会也。作者已死,凭什么说的道你就是「高等抽象」,大家能跟上的就是"糊里糊涂"的抽象? Einstein, Feynman 说物理的最前沿应该教高中生搞懂,难道你们的方法论比爱翁还科学?
人们给车设计的引擎,能达到原理极限的98%,那么 #CS 对IT的指导,除了让空指针反复造成十亿美元bug,就是让功能不变的软件,随着更新越来越臃肿和慢? 这算什么CS

Monad很图论,很优雅啊! 但它能从 x+1==2 得出x=1吗? does it run backwards?
数学的精度是无限的、数学的等号是有交换律的。 #Haskell 里有模式匹配,但有"Var(x)作为值"吗?
只要变量是值,模式匹配、类型推理、响应式,甚至函数的编译,就真是小孩都会写的栏大街了。让 let(['x','y'],a) 生成 x=a[0],y=a[1] 谁不会啊 也配叫语言特性
FP们连正反函数如 show-out(1, "1"); show(res, "1"); res==1 都没建模,无精度int、向量、矩阵和微分都不如numpy sympy,也好意思谈数学性? 起码把Fortran的矩阵搞明白再说吧

https://arendjr.nl/blog/2024/07/post-architecture-premature-abstraction-is-the-root-of-all-evil/#:~:text=achieved%20through%20a%20much%20simpler%20function
费曼家有一套《大英百科全书》,父亲常让费曼坐在他的膝上,给他念里边的章节。

有一次念到恐龙,书里说,“恐龙的身高有 25 英尺, 头有 6 英尺宽。” 父亲停顿了念书, 对费曼说,
“唔,让我们想一下这是什么意思。这也就是说,要是恐龙站在门前的院子里,那么它的身高足以使它的脑袋凑着咱们这两层楼的窗户,可它的脑袋却伸不进窗户,因为它比窗户还宽呢!”

就是这样, 他总是把所教的概念变成可触可摸, 有实际意义的东西。

“个体的经历,不过是一个庞大的(形式主义)系统下极其表面化的闪烁而已”

可那个闪烁对某一天的用户来说就是一切。 自然原理,亘古不变。如果只是发现他们就能改变世界? 工业革命可以提早数百年。
人一思考,上帝就发笑。 你们的抽象,永远概括不了现实的领域、具体的人所提供独有的组合与可能性。

知其变,守其恒,为天下式?
穷其变,悟不穷,以明我志!
不能为每个人产生普世价值,是理论的悲哀。
#recommend #cs #dalao https://notes.tansongchen.com/中日韩统一表意文字/ UniHan
https://www.zhihu.com/question/596405042/answer/3568948103 Unicode NFC #py 全半角 兼容
#tool https://github.com/garywill/cc-visualize OpenCC 汉字同义可视化
https://unvcode.librian.net/ 同形异体 防和谐 高仿号 (非 hanguel filler)

为什么信息学大佬,还这么有品呢?
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=一个操作系统本应该
https://www.fxzhihu.com/question/652185870/answer/3458513818

#android 的失败给了「崇文」崇尚八股文的人一个教训: 没有 User Experience 的代码内卷是很蠢的投入,一旦垄断被打破,我们无处可去
认为 #dev 「领域护城河」和医学生一样的想法,是不切实际的。 医学生对照的是 #cs 拉丁文或IT架构师, 开发者就是纯粹的实干网红,应该对自己的产品负责

只有像PyJS这样有缺陷的直白,才有被开发的潜力, 在App的功能点上到处设卡、贩卖焦虑和私货的 android API 没有资格。
duangsuse::Echo
最近设计一种跨语言ABI,很苦逼, 没啥灵感, 就评论点文章吧 🙉 #learn #sql #web #design 作者是DBMS的维护者。谈到面向表单+外键的数据库,应该说SQLite的质量很高,它不会是为了过度设计而做的东西,但内存数据库和今天广泛用于 Geo/Vec/全文搜索/timestamp 的Pg方向不同。 而王垠是我同行,他对SQL的观点是:必然要连ORM,Redis这些套子,还不如直接 new $KV_HashMap +loaddump 解决了,反正索引算法都是BTree二分查找嘛,…
https://www.fxzhihu.com/question/329153374/answer/716655357
批评:
https://www.yinwang.org/blog-cn/2014/04/24/relational

#sql 也有更好看的写法
https://duangsuse.github.io/tv/%E9%BB%91%E4%BA%86/db.htm
https://baidu.github.io/amis/zh-CN/components/crud?page=1

这么一看我发现作者没有提及批评的闪光点:
- filterMap可以简单链式,而且也并非不能优化, select 嵌套却非常难写,更是养活了一堆XML怪物

- 1:1 , 1:N N:N 这些「关系模型」其实只是把struct/array拆开, 包括允许反查,这就是同步更新俩KV表而已,并不比C/json高级

- 一个概念被冠以“关系式代数”这样的称呼,你是不敢骂它的,确实如此,「迪卡尔积」就是 A,B in itertool.product(a,b)的嵌套for,这配叫算法?

> Neo4j 设计了个古怪的查询语言叫 Cypher,不但语法古怪,表达力弱,而且效率出奇的低,以至于几乎任何实际的操作,你都必须使用 Java 写“扩展”(extension)来完成。MongoDB 等使用 JSON 来表示查询,本质就是手写编译器里的语法树(AST),不直观又容易出错。

这就是好大喜功的问题了。numpy和pd可以证明, 这些学习成本不是必须的。

关于把DBMS当成内存外HashMap的问题,yinwang也解释过,他眼里的理想OS不是按4K管理mmap(页面)swap 的libc的虚拟机,而是类似JVM,带有数据结构和分代GC的

https://www.yinwang.org/blog-cn/2013/04/14/os-design
这个系统的「进程」本就是永久的、可编辑的文件树,无关于L2L3,RAM,SSD 这些缓存,main()函数内的变量才是退出清零的,安装程序就是首次执行,卸载就是kill -9 ,不存在execve() 要通过stdio序列化数据结构的问题,一切皆函数

这么一解释,就知道不存在认知差距,只是二人对 #CS 栈的选择如夏虫语冰,但我觉得这种“免数据库进程”有点道理。
我上面说的,那种「跨语言ABI」 ,其实是想做成这样,弥和IO与变量的差距,但是就连WASM也无力创建这样夸张的“类型化文件系统”来取代new Object树, 但从代码复用的角度,内存外存大一统是很有理论价值的

😂上一段说的那么惊世骇俗, 其实已经成为现实了:Redis是内存KV表,docker run 就是这个“初次运行即安装”,main函数有状态 的系统,只是它没有突破 内存class-IO-外存MIME 的样板代码了,还需要 systemctl suspend 不关机来实现已安装软件的「首屏快取」。
王银的理想是OS包揽状态管理&GC,安软件就是安函数,main()可以如vmware那样断点续传,fork()可以像投屏/CRIU那样发给集群并行,同文同种可RPC不需要任何连接与IO,这就有点像 p9@ Bell Lab 这个系统,不止是libc的运行时。
现在流行的asyncio和BPF,本质上就是为了写FUSE/油猴那样的用户态驱动程序,+1 mainloop 模拟1CPU来粘合回调栈(亦如C栈?)罢了

所以,想象力很重要,但现实也会朝臆想前进的。