duangsuse::Echo
王垠是谁
不过就拿知识哥韭菜这事我附议。这个人是没啥好评价的(哀其不幸怒其不争),不过他的行为和说法是嘈点满满
他当时对 #CS/#PLT 的科普还不错,也没删过文章,很可惜冰封在科普上没有和他平起平坐的能力(冰封老博客 乃至现在的博客都是自己的日记,他也不会增量更新旧博文),只能在小圈子有(尽管我们都算小圈)R大那样的人太少了(尽管R大也不能破圈///)
>这篇博文的核心是这一段:我早已感觉到长久以来科学界在掩盖真正的知识,把它们弄得越来越难懂,太多滥竽充数的人写一些垃圾论文。这就是我为什么抛弃了三个博士学位。这就是为什么我最近都在致力于把看似深奥的知识变得简单,并且传授给其他人。只有大部分人能理解科学和其他关键学科,才能确保它们不会腐败变质。
传授给其他人要是收费的
作者:kdurant
早年我还在知乎上吐槽过他的收费和intro,反被封了几天……
他当时对 #CS/#PLT 的科普还不错,也没删过文章,很可惜冰封在科普上没有和他平起平坐的能力(冰封老博客 乃至现在的博客都是自己的日记,他也不会增量更新旧博文),只能在小圈子有(尽管我们都算小圈)R大那样的人太少了(尽管R大也不能破圈///)
>这篇博文的核心是这一段:我早已感觉到长久以来科学界在掩盖真正的知识,把它们弄得越来越难懂,太多滥竽充数的人写一些垃圾论文。这就是我为什么抛弃了三个博士学位。这就是为什么我最近都在致力于把看似深奥的知识变得简单,并且传授给其他人。只有大部分人能理解科学和其他关键学科,才能确保它们不会腐败变质。
传授给其他人要是收费的
作者:kdurant
早年我还在知乎上吐槽过他的收费和intro,反被封了几天……
duangsuse::Echo
类型系统简介 - 知乎用户frBud6的文章 - 知乎 https://zhuanlan.zhihu.com/p/65626985 超市买菜 - 圆角骑士魔理沙的文章 - 知乎 https://zhuanlan.zhihu.com/p/66349646 #PLT 魔法店里一些文章还是不错的(lambda类型系统, SystemF一大堆TypeNode 集),可惜表达方式太弱了.(他们写LaTeX时仿佛不知道这些在Rust等土直里就是tuple/struct/enum-union ,所以只是贴了无语序的“…
其实数学界也不是只有一种表示法, sin^-1 = arc sin 的反函数(而非“逆向计算”,我还改过类架构器->值构造器,回调->注册函数值 😓)已经在新文章里采用了,总之问题是在改善。 语言是否优美,重点是在写作的人。许多很脏/不知名的语法,也有妙的用处。
为啥不用『 回调(callback)』:回调是外部代码的调用,对程序员不可见,会让人以为有两种“调用”。具体调多少次、何时在何线程、咋处理返回值也没讲明,最关键是它掩盖了函数能作参存[]的事实,割裂了框架和应用者对程序周期的理解,是C函数仅代码指针的余孽,“回调时做..” 也是种对编程很见外的说法,因为操作序列没有主被动。 Kt 里
再科普个 #cs #冷知识 , float,double 是4,8字节的IEEE754浮点, 1e2=100, 1e-2=.01=1/1e2 ,而且 -0 是存在的(即便理论负数是 -(1+n) n非0的形式
按曲线上升率(导数)升序, +*, 乘方-求根、求次数(log,对数),根对几何更重要,而 log2(32768)==15 ,65536=16 ,即有/无符 short 的极端值
+n的导是0,*k则是k, **k才依x而变: x*x= 2x
Math.E 是
#JS 里log不是log_i,它即ln.. loge 65536/loge 2 等效log2,log(E)=1 ,可看出这是通过增长率的比例来求次数
牛顿开方则是
#Math 数学是挺爱建模万物的领域,复数-虚数 ii=-1 能定义旋转, dx^2/x 的导数表示法是为展现 d 作为“无穷小”值为数集引入了系统性和lim ,微积分为实数无限可分上统计算式服务,一个求瞬时一个求整体。 向量(矢量)本来是物理的、算法是计科的,矩阵也是物理/计算机最正宗,数学也去分一杯羹;
我觉得数学=数域+等式变形+2,3D几何+逻辑 就够了,信号处理这些算是数理电杂交产物,但它真的啥都会,即得易见平凡,如果你会数学真的就“无所不能”了 🤪简直比
命题 p^q 和 pvq 表示成类型就是组合分支类型(p,q) p|q ,而类型"Type"只是另一种仅编译器可见值(2=int vs. "2"=Const 2=2),推导-检查只是执行前的求值,这就是语义。还是解释器最正常,至少会走过(stepper)人类的语言
—
🤑刚刚终于想到了 Fourier 篇怎么画上句号。列表处理两个 Wavesurfer 可视化的 buffer a->b 频通滤波是可以的,但不会合成吉他拨弦
要再添加一个定长波形 c, 索引i循环于a或b /音高 来生成震动,用滑动平均 a[i]=(a[i]+a[i+1])/2 和K-S算法,即i==0 时以一个高频下降曲线频域滤波,就能在调音高时合成对应音色了,如此一来从 WebAudio 开始的傅里叶篇,能处理波形能合成乐器,就完结了
为啥不用『 回调(callback)』:回调是外部代码的调用,对程序员不可见,会让人以为有两种“调用”。具体调多少次、何时在何线程、咋处理返回值也没讲明,最关键是它掩盖了函数能作参存[]的事实,割裂了框架和应用者对程序周期的理解,是C函数仅代码指针的余孽,“回调时做..” 也是种对编程很见外的说法,因为操作序列没有主被动。 Kt 里
map(transform=op).filter(predicate=test)
就非常准确再科普个 #cs #冷知识 , float,double 是4,8字节的IEEE754浮点, 1e2=100, 1e-2=.01=1/1e2 ,而且 -0 是存在的(即便理论负数是 -(1+n) n非0的形式
.1+.2!=.3
,所以有人建议浮点计算不要用 a<v&&v<b 外的 ==(差<Number.EPS) 判断,即便同样可迭,浮点和整数的意义就不同,显卡计算浮点才重要按曲线上升率(导数)升序, +*, 乘方-求根、求次数(log,对数),根对几何更重要,而 log2(32768)==15 ,65536=16 ,即有/无符 short 的极端值
+n的导是0,*k则是k, **k才依x而变: x*x= 2x
Math.E 是
i=1000;(1+1/i)**i
升率趋近无穷得出的, log(65536)/LN2 =16,l=log_i, l M+l N=l M+N ,lg=log10,ln=logE#JS 里log不是log_i,它即ln.. loge 65536/loge 2 等效log2,log(E)=1 ,可看出这是通过增长率的比例来求次数
牛顿开方则是
rt(n,k=2, err=.01)=>{let ac=i; while(i-ac**k >err)ac=(ac+ n/ac) /k; }
历史上logEx的出现比常量E早,从 x^n 引的积分 1/x 怎么做 到 logEx 的反函数 e^x ,经过许多推导#Math 数学是挺爱建模万物的领域,复数-虚数 ii=-1 能定义旋转, dx^2/x 的导数表示法是为展现 d 作为“无穷小”值为数集引入了系统性和lim ,微积分为实数无限可分上统计算式服务,一个求瞬时一个求整体。 向量(矢量)本来是物理的、算法是计科的,矩阵也是物理/计算机最正宗,数学也去分一杯羹;
我觉得数学=数域+等式变形+2,3D几何+逻辑 就够了,信号处理这些算是数理电杂交产物,但它真的啥都会,即得易见平凡,如果你会数学真的就“无所不能”了 🤪简直比
man bash
还会。 日常逻辑真的是编程理论的最正宗,逻辑学那个话,人不能,至少不应该🤦 属于艺术性研究了。有点像C++ 为 template 而<> 的工程行为艺术命题 p^q 和 pvq 表示成类型就是组合分支类型(p,q) p|q ,而类型"Type"只是另一种仅编译器可见值(2=int vs. "2"=Const 2=2),推导-检查只是执行前的求值,这就是语义。还是解释器最正常,至少会走过(stepper)人类的语言
—
🤑刚刚终于想到了 Fourier 篇怎么画上句号。列表处理两个 Wavesurfer 可视化的 buffer a->b 频通滤波是可以的,但不会合成吉他拨弦
要再添加一个定长波形 c, 索引i循环于a或b /音高 来生成震动,用滑动平均 a[i]=(a[i]+a[i+1])/2 和K-S算法,即i==0 时以一个高频下降曲线频域滤波,就能在调音高时合成对应音色了,如此一来从 WebAudio 开始的傅里叶篇,能处理波形能合成乐器,就完结了
duangsuse::Echo
我太阳,才发现这个别人能发博文的东西,我竟然连标题和名字都没起,试运行成功贴上就pass了…… 这不是在线教SICP(程序的构造和解释)吗🤪 #lisp #fp #zhihu #statement 放到以前我绝对搞大新闻一样,就像之前仿造(但也没成功)Lice 时专门建了项目画了logo,然后文档拼缀别人的,最后模板代码写完不会了 🙈 但说起来,元编程最后也不过是编程。你了解编程语言,很好,但语言只是载体,美丽的、各种各样的应用才是我们的最终目的。 你能写编译器,很好,但也不过是完成了文本模式和树遍历,加上一些理论。…
#cs #statement #recommend 过去杂谈
计算机科学的讨论,好像是只收集晨露的人和饮水的「普通人」
晨露的每一粒、每个专有名词都是原理的侧面。就像对企鹅与鸵鸟,强化了鸟的一部分,却存在相似的周期和度量衡;对于算法,则存在相同的输入输出和差异化中间数据
水的每一滴,都有相似和不同的形态成分。相似成分像晨露,人却无法将其分离,甚至不觉得可能分离
喜欢晨露的人、喜欢水的人,都搞不清微小迷茫或庞大 都只是水而已;厉害或老土,只是附加的情感
水不喝,就可以有很多形态花样;而对真正想研究「水」的人,掌握交换互通的技术,晨露和饮水有何区别、原理或巨型有多难,都是无谓的问题。
编程的核心不是思想,而是语言。思想不独立于语言而存在,一切抽象归于文本,却应是最反映本质的文本。语言能做帮大家少走弯路的设计,这比折磨人和计算机的面向报错编程更值得、更有力
知道原理的缘由、知道堆砌的模式,是『编程语言』人对自己必须的要求。 空有原理或疲于堆砌都不能帮助程序走向更好,优美的「语义」才是最初目的。
有露水到饮用水的「语言和工具」,才能看清各种层级的目的,把美与高效融为一体
在刚才的故事里,饮用和观赏外的统一目的并不存在。 语言并不是目的,但能为其目的优化;语言不是唯一的,有选面向人或计算机
编程就是一件既要识大体,又应顾小局的事。 爱好语言,未必要做编译器。 PLT是种方法,方法是比程序乃至框架要「大」的方案
说到底语言并不存在,存在的只有编码集和思想。语言就是编码的哲学,只是它简化于人的思想和目的
与其说我是研究语言,不如说是在概况一类问题。这没什么了不起,因为问题间相同点很少——但这就是我爱做的,即便领域有这样或那样的约定俗成。
编程是把领域联起来,变成一个大领域晾出去;好的程序直观反映其处理数据的结构;程序集处理、代码亦数据;特例不比规律特殊 ,这些都是对某类代码段的优评,但只是「语言」内一瞥。解决问题的方法有很多,转化代码、描述程序、发布代码,有没有计算机意义的问题,都是语言能优化的问题。 好比算法于计算机。语言即智慧
明明能用 rect(xywh)x step 30 这样的定义,为什么要 ctx.draw_(x,y,..) 呢?明明是用来处理绘制,叫ctx干什么? 代码里类似的地方数不胜数,
只因为懂了OOP和物理VecN,懂内存与复制、重绘队列于线协程,才知道自己代码的责任和hack,因此知道最适合的命名;语言人,不死板
作为最大的领悟应该是做过一切后能发现其「简单」,就像物理式一样 I=UR,E=mc^2 ,创新和表象千变万化、运行期数据不可捉摸,不可或缺之原理恒常如新。这简单却不能是自我陶醉,对知识放下傲气,用踏实的语言描述优美的事物概念
所以像编程语言那样的东西我又不先弄了,转而弄些绘制和数处的应用、从 Stream RWer到二进制值绑定的框架等等
计算机科学的讨论,好像是只收集晨露的人和饮水的「普通人」
晨露的每一粒、每个专有名词都是原理的侧面。就像对企鹅与鸵鸟,强化了鸟的一部分,却存在相似的周期和度量衡;对于算法,则存在相同的输入输出和差异化中间数据
水的每一滴,都有相似和不同的形态成分。相似成分像晨露,人却无法将其分离,甚至不觉得可能分离
喜欢晨露的人、喜欢水的人,都搞不清微小迷茫或庞大 都只是水而已;厉害或老土,只是附加的情感
水不喝,就可以有很多形态花样;而对真正想研究「水」的人,掌握交换互通的技术,晨露和饮水有何区别、原理或巨型有多难,都是无谓的问题。
编程的核心不是思想,而是语言。思想不独立于语言而存在,一切抽象归于文本,却应是最反映本质的文本。语言能做帮大家少走弯路的设计,这比折磨人和计算机的面向报错编程更值得、更有力
知道原理的缘由、知道堆砌的模式,是『编程语言』人对自己必须的要求。 空有原理或疲于堆砌都不能帮助程序走向更好,优美的「语义」才是最初目的。
有露水到饮用水的「语言和工具」,才能看清各种层级的目的,把美与高效融为一体
在刚才的故事里,饮用和观赏外的统一目的并不存在。 语言并不是目的,但能为其目的优化;语言不是唯一的,有选面向人或计算机
编程就是一件既要识大体,又应顾小局的事。 爱好语言,未必要做编译器。 PLT是种方法,方法是比程序乃至框架要「大」的方案
说到底语言并不存在,存在的只有编码集和思想。语言就是编码的哲学,只是它简化于人的思想和目的
与其说我是研究语言,不如说是在概况一类问题。这没什么了不起,因为问题间相同点很少——但这就是我爱做的,即便领域有这样或那样的约定俗成。
编程是把领域联起来,变成一个大领域晾出去;好的程序直观反映其处理数据的结构;程序集处理、代码亦数据;特例不比规律特殊 ,这些都是对某类代码段的优评,但只是「语言」内一瞥。解决问题的方法有很多,转化代码、描述程序、发布代码,有没有计算机意义的问题,都是语言能优化的问题。 好比算法于计算机。语言即智慧
明明能用 rect(xywh)x step 30 这样的定义,为什么要 ctx.draw_(x,y,..) 呢?明明是用来处理绘制,叫ctx干什么? 代码里类似的地方数不胜数,
只因为懂了OOP和物理VecN,懂内存与复制、重绘队列于线协程,才知道自己代码的责任和hack,因此知道最适合的命名;语言人,不死板
作为最大的领悟应该是做过一切后能发现其「简单」,就像物理式一样 I=UR,E=mc^2 ,创新和表象千变万化、运行期数据不可捉摸,不可或缺之原理恒常如新。这简单却不能是自我陶醉,对知识放下傲气,用踏实的语言描述优美的事物概念
所以像编程语言那样的东西我又不先弄了,转而弄些绘制和数处的应用、从 Stream RWer到二进制值绑定的框架等等
#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质量还高 🌚🌝 再比中文百度
所以我讨厌看重编程和代码排版。 人应该做的,是享受科技革命后的日常生活、轻易地高质量创作,不是以 重复先人的成就及错误为荣🙄
这些人写的都是什么跟什么?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质量还高 🌚🌝 再比中文百度
所以我讨厌看重编程和代码排版。 人应该做的,是享受科技革命后的日常生活、轻易地高质量创作,不是以 重复先人的成就及错误为荣🙄
https://t.me/rynif/30026 #science vs. #tech 🌚🤔
按这个来说, 我也是离开 #cs #plt 计算机科学 加入了 #algor #sp #ce #cg #web 等具体应用,用 #py #js 去解读许多概念
并且回看之前的知识术语,也没有感觉什么不同👌 。主要是以所见即所得为重 ,体系性可以另起炉灶 从实践中来
按这个来说, 我也是离开 #cs #plt 计算机科学 加入了 #algor #sp #ce #cg #web 等具体应用,用 #py #js 去解读许多概念
并且回看之前的知识术语,也没有感觉什么不同👌 。主要是以所见即所得为重 ,体系性可以另起炉灶 从实践中来
Telegram
&'a ::rynco::UntitledChannel
【Science:#AI竞赛学术界输了#】
AI领域,重心已从学术界转移到了产业界,并且失衡还在继续。
Science在最新一期正刊上发了一篇文章,整理了近几年AI领域的相关数据,结果也是一目了然:
AI竞赛,学术界输了。
Science统计了论文、AI最大模型以及SOTA模型在各个领域的占比。
从2016年开始,产业界在领先的人工智能会议上发论文的占比开启了野蛮生长的趋势。
4年时间,在论文数量上,产业界几乎从学术界“夺取”了20%。
AI领域的10大模型,2013年之前还都是学术界居于主导地位。…
AI领域,重心已从学术界转移到了产业界,并且失衡还在继续。
Science在最新一期正刊上发了一篇文章,整理了近几年AI领域的相关数据,结果也是一目了然:
AI竞赛,学术界输了。
Science统计了论文、AI最大模型以及SOTA模型在各个领域的占比。
从2016年开始,产业界在领先的人工智能会议上发论文的占比开启了野蛮生长的趋势。
4年时间,在论文数量上,产业界几乎从学术界“夺取”了20%。
AI领域的10大模型,2013年之前还都是学术界居于主导地位。…
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 的学生成千上万,但文化程度这么低的也是第二次见 👏😓
#zhihu 回答大意:
GPT不能说是编程语言,因为套路和准确度都不够统一 也没有生态和社区,但可以帮更多人更简短的完成任务,所以说是最好也没有错。
《程序员的心理疾病》
☝️文中提到的礼貌问题GPT全解决了,所以帮人用好它的人,就成了被口诛笔伐的“蠢货”
唉,不论是非只论善恶,也难怪中国的PL人都要出去留学呢
没点素质,真润出去的PL大佬哪会在意这点细节?多是一群连parser和IR都没构造过、OOP和trait多态都不知咋实现的愤青,看到自己模式匹配和English terminology 的技能被AI“抢”了,就破防到跨领域无论据追捕
#cs 的学生成千上万,但文化程度这么低的也是第二次见 👏😓
#algorithm #cpp https://www.youtube.com/watch?v=jgQjes7MgTM
#cs https://www.youtube.com/watch?v=SzJ46YA_RaA
#py django 长视频 freeCodeCamp.org
#cs https://www.youtube.com/watch?v=SzJ46YA_RaA
#py django 长视频 freeCodeCamp.org
YouTube
The BEST Coding Interview Roadmap in 2023 (free)
🚀 https://neetcode.io/ - Checkout the FREE roadmap!
Checkout my second Channel: @NeetCodeIO
🧑💼 LinkedIn: https://www.linkedin.com/in/navdeep-singh-3aaa14161/
🥷 Discord: https://discord.gg/ddjKRXPqtk
🐦 Twitter: https://twitter.com/neetcode1
📷 Instagram:…
Checkout my second Channel: @NeetCodeIO
🧑💼 LinkedIn: https://www.linkedin.com/in/navdeep-singh-3aaa14161/
🥷 Discord: https://discord.gg/ddjKRXPqtk
🐦 Twitter: https://twitter.com/neetcode1
📷 Instagram:…
#cs #math markov 链 BV1xa4y1w7aT https://www.youtube.com/watch?v=i3AkTO9HLXo&t=1s
#algorithm 随机游走 、稳态矩阵
#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模拟过……
可能直到AI广泛辅助编程,这些问题都不会有答案
但我清楚AI无法完成写法的形式化,只能从根源上,让用户指定开多大线程池完成多少种Task,这些术语的差异才会伴随着“优化选项”消失
C 那种argc+argvec 的list,也只是术语的差异吗? 恐怕除了样板代码的多少,这些语言作为“app设计器”,也有根本不同
——
在我看来,无论是工业界最流行的语言,还是协程的理论讨论, 都是没有取得统一模型的
换句话说,每个语言有它的优点
这不是一件好事。 一个没有取得共识的工具,会阻碍人的泛化思考,会把编程当成一件机械的编码任务
其实明白编程和数学里的泛用性,又如何呢? 有人为此挣到钱,有人选择删了公开博客, 但到最后随着时代向前,知识也没啥可稀奇的吧
即便如此,我选择把编程视为一种乐趣和创作。
我不需要言辞间的“朴素” “平凡不难”,对于创作者来说,灵感,才能成为汗水里掷地有声的内核。 🕊
当然,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设计器”,也有根本不同
——
在我看来,无论是工业界最流行的语言,还是协程的理论讨论, 都是没有取得统一模型的
换句话说,每个语言有它的优点
这不是一件好事。 一个没有取得共识的工具,会阻碍人的泛化思考,会把编程当成一件机械的编码任务
其实明白编程和数学里的泛用性,又如何呢? 有人为此挣到钱,有人选择删了公开博客, 但到最后随着时代向前,知识也没啥可稀奇的吧
即便如此,我选择把编程视为一种乐趣和创作。
我不需要言辞间的“朴素” “平凡不难”,对于创作者来说,灵感,才能成为汗水里掷地有声的内核。 🕊
Telegram
duangsuse::Echo
#FP #math 的一些 #statement
#tool html bookmarklet data:text/html;utf8,<body ContentEditable>
—10÷3=3…1
被大佬建议写成 =(3)3+1 即m=qn+r (r<q)形式的“短除法” ,理由是...没交换律
“理论家布尔巴基有个笑话: 1+2当然是2加1,因为整数对加法构成阿贝尔群”
当然,纠结这些除和除以工程意义不大
ax+i=b; x,i=divmod(b,a) 的可变量元组数学里可是没有。函数只是“…
#tool html bookmarklet data:text/html;utf8,<body ContentEditable>
—10÷3=3…1
被大佬建议写成 =(3)3+1 即m=qn+r (r<q)形式的“短除法” ,理由是...没交换律
“理论家布尔巴基有个笑话: 1+2当然是2加1,因为整数对加法构成阿贝尔群”
当然,纠结这些除和除以工程意义不大
ax+i=b; x,i=divmod(b,a) 的可变量元组数学里可是没有。函数只是“…
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
*编程的赞歌就是(组合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() 的也不叫引用
#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() 的也不叫引用
Telegram
Dante's Limbo
#bpftrace #ebpf
为了跟踪哪个缺德的进程向一个博通网卡下发它不支持的 HWRM_PORT_PHY_I2C_READ(0x2c) ,写了一个 bpftrace 脚本:
#!/usr/bin/env bpftrace
//static int __hwrm_send(struct bnxt *bp, struct bnxt_hwrm_ctx *ctx)
k:__hwrm_send
{
$ctxp = (uint64*)arg1;
$outputpp = $ctxp + 3;
…
为了跟踪哪个缺德的进程向一个博通网卡下发它不支持的 HWRM_PORT_PHY_I2C_READ(0x2c) ,写了一个 bpftrace 脚本:
#!/usr/bin/env bpftrace
//static int __hwrm_send(struct bnxt *bp, struct bnxt_hwrm_ctx *ctx)
k:__hwrm_send
{
$ctxp = (uint64*)arg1;
$outputpp = $ctxp + 3;
…
#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
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
GitHub
v8-cpu/examples at master · chyyuu/v8-cpu
Simple 8-bit v8-CPU with Compiler+Assembler+Simulator. Try it--> - chyyuu/v8-cpu
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小时,这是在悉尼歌剧院放的编程课吗!
完全无法理解《状态转移公式》是怎么得出来的,最好不是抄的。 因为对着答案出题、停留在魔改公式的程度,可不是人类该干的事
“
每当你想指点什么的时候,比比自己的条件和对方差什么——盖茨比大概想对砖家“高人”说”
然后下面把dfs和dp类比的,一看3小时,这是在悉尼歌剧院放的编程课吗!
完全无法理解《状态转移公式》是怎么得出来的,最好不是抄的。 因为对着答案出题、停留在魔改公式的程度,可不是人类该干的事
“
每当你想指点什么的时候,比比自己的条件和对方差什么——盖茨比大概想对砖家“高人”说”
https://t.me/dsuse/19830 #statement #book 「只给🔑不给🔒」 #china
😒莫名其妙把《kt元编程》看到 Compose, AtomFU 的部分了,占二成篇幅
不得不说,牢霍 这两张写得是最珍贵,但是最烂的。
@Composeable 上来就是说内部有啥结构啥流程和flag,报菜名
连期待编译出什么代码都没得
如果您是后端,不懂Compose在哪调用,为什么有 $changed 这些优化呢?不好意思,牢霍只负责教codegen,这个框架被设计来解决什么,比无魔法的Anko优越在哪,他是一点不关心。
纯流水账 ,基本只对同样要学八股的人有用。。
我在想, 自顶向下地编程和写文,是我用的唯一方法;它的好处是,一切代码都是有reasoning的,不服可以重写、重新选型,不是强加给你来死记硬背的
但是,迄今为止我阅读全部的中文资料,除了王银那种废话为主的低密度冷科普,没有这种「自顶向下」的作者。
为什么从根源认知一类问题, 从而区分本质与私货、明白为什么要这么写,对各种大牛就那么难呢?!
😒莫名其妙把《kt元编程》看到 Compose, AtomFU 的部分了,占二成篇幅
不得不说,牢霍 这两张写得是最珍贵,但是最烂的。
@Composeable 上来就是说内部有啥结构啥流程和flag,报菜名
连期待编译出什么代码都没得
如果您是后端,不懂Compose在哪调用,为什么有 $changed 这些优化呢?不好意思,牢霍只负责教codegen,这个框架被设计来解决什么,比无魔法的Anko优越在哪,他是一点不关心。
纯流水账 ,基本只对同样要学八股的人有用。。
我在想, 自顶向下地编程和写文,是我用的唯一方法;它的好处是,一切代码都是有reasoning的,不服可以重写、重新选型,不是强加给你来死记硬背的
但是,迄今为止我阅读全部的中文资料,除了王银那种废话为主的低密度冷科普,没有这种「自顶向下」的作者。
为什么从根源认知一类问题, 从而区分本质与私货、明白为什么要这么写,对各种大牛就那么难呢?!
Telegram
duangsuse::Echo
🌚 其实看完动画,我是有点想批评作者的。 这么用心做manim ppt 却依旧照搬谭氏备课,国内的 #CS 大概就是这样
然后下面把dfs和dp类比的,一看3小时,这是在悉尼歌剧院放的编程课吗!
完全无法理解《状态转移公式》是怎么得出来的,最好不是抄的。 因为对着答案出题、停留在魔改公式的程度,可不是人类该干的事
“
每当你想指点什么的时候,比比自己的条件和对方差什么——盖茨比大概想对砖家“高人”说”
然后下面把dfs和dp类比的,一看3小时,这是在悉尼歌剧院放的编程课吗!
完全无法理解《状态转移公式》是怎么得出来的,最好不是抄的。 因为对着答案出题、停留在魔改公式的程度,可不是人类该干的事
“
每当你想指点什么的时候,比比自己的条件和对方差什么——盖茨比大概想对砖家“高人”说”
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很图论,很优雅啊! 但它能从
数学的精度是无限的、数学的等号是有交换律的。 #Haskell 里有模式匹配,但有"Var(x)作为值"吗?
只要变量是值,模式匹配、类型推理、响应式,甚至函数的编译,就真是小孩都会写的栏大街了。让
FP们连正反函数如
https://arendjr.nl/blog/2024/07/post-architecture-premature-abstraction-is-the-root-of-all-evil/#:~:text=achieved%20through%20a%20much%20simpler%20function
“个体的经历,不过是一个庞大的(形式主义)系统下极其表面化的闪烁而已”
可那个闪烁对某一天的用户来说就是一切。 自然原理,亘古不变。如果只是发现他们就能改变世界? 工业革命可以提早数百年。
人一思考,上帝就发笑。 你们的抽象,永远概括不了现实的领域、具体的人所提供独有的组合与可能性。
知其变,守其恒,为天下式?
穷其变,悟不穷,以明我志!
不能为每个人产生普世价值,是理论的悲哀。
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 英尺宽。” 父亲停顿了念书, 对费曼说,
“唔,让我们想一下这是什么意思。这也就是说,要是恐龙站在门前的院子里,那么它的身高足以使它的脑袋凑着咱们这两层楼的窗户,可它的脑袋却伸不进窗户,因为它比窗户还宽呢!”
就是这样, 他总是把所教的概念变成可触可摸, 有实际意义的东西。
“个体的经历,不过是一个庞大的(形式主义)系统下极其表面化的闪烁而已”
可那个闪烁对某一天的用户来说就是一切。 自然原理,亘古不变。如果只是发现他们就能改变世界? 工业革命可以提早数百年。
人一思考,上帝就发笑。 你们的抽象,永远概括不了现实的领域、具体的人所提供独有的组合与可能性。
知其变,守其恒,为天下式?
穷其变,悟不穷,以明我志!
不能为每个人产生普世价值,是理论的悲哀。
Ray Eldath's Blog
计算机领域的三个重要思想:抽象,分层和高阶
昨晚看了点比较有意思的东西,于是决定写一篇文章简单讲一下。 本文致力于概括我对计算机界三个重要思想的体会和认识。我希望做的并不是简单的百科全书式的列举(“A 体现了抽象思想;B 体现了分层思想…”),而是从这些思想中选取几个我个人较有体会(或者是我单纯觉得十分有趣)的侧面拿来细讲。这些侧面仅仅能覆盖这些思想应用范围中十分微小的一部分,它们并不是最有代表性的、亦非最为重要的——仅仅因为,我个人对这点