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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
#rust #performance #dalao
https://curiouscoding.nl/posts/1brc/
作者对大量 'city;0.00\n' 模式数据的minmax/avg优化perf了手动解析,依次使用 atoi、 match .\d{3} 、SIMD memchr 寻找';',
直到靠 s.get_unchecked(s.len().. *(0 if len<k else 1) 来减少jmp 实现了100x的加速
还使用了 record.min = max(-value, record.min) 等位运算和超线程技术,逐条汇编跑分
最终做到了1.06s解析13G数据
Forwarded from codedump的电报频道 (老C)
#Rust
国内知名Rust社区贡献者Folyd,之前曾经给Rust贡献了一个优化后的二分查找实现:《优化 Rust 标准库的 binary_search》。

但是这个实现,会导致在有多个重复元素的情况下,返回是不确定的,最终导致了币圈某产品的翻车,这里可以看到作者的后续推文
👎6
https://zhuanlan.fxzhihu.com/p/12834699352 #os #cpp #rust #learn 协程 云风

>在知乎上看到两篇 吹嘘 云风的 coroutine 库的文章。

人啊就是这样的,出名了以后,就是垃圾也有人吹捧。

🤔 回头我可以科普下非阻塞(异步)、调度器、C++赝品Promise、 所有的协程都是使用的同一条栈(单一调度器) 有什么不对

https://www.zhihu.com/question/524369963/answer/21981903209
为调用 atexit(cb, cbarg0) 这人还写了个 GCC 实现 new lambda ,其实都很简单: up=1; f=(A)=>A+up 弄成 _f=(A,v)=>A+v.up ,再生成个 A=>_f(A, (captured_data*)x86_get_eip()[code_size])
被称为 trampoline 代码模板

整的我不会了,函数是穷人的对象,new个虚表或双指针挺直白的玩意这么麻烦,这是为啥呢?
因为 obj->call() == (obj.call) (obj,) ,是thiscall 1静1动,双指针则是 (*to_trait).call(obj,) 1静2动,而 CDEF f() 就是直接jmp过去,f肯定要在堆上,不能是static,但是又不能把f[code_size]到处复制粘贴,只好让 f.bind()=new 固定大小的可调用指针+data ,这还要求 “堆内存可执行”

结论:CDEF 的函数指针,危险危险危险。 UNIX 不以 addCb( any cb(any data), any data) 暴露回调API,坏; Python thread 暴露data参数,更坏! (py 都支持 fnptr.f_lasti 协程了还在用老思想编程啊)

CDEF 支持非阻塞编程的正确做法是: 在 dlopen() 外支持 dlnew(template_so, {statics...}) ,就像 ThreadLocal 那样。 硬是要把static重绑定为参数,才能安全兼容C++的 [](){return} 字面
https://github.com/ibraheemdev/modern-unix #tool #rust

#bash #linux #design https://www.micahlerner.com/2021/07/14/unix-shell-programming-the-next-50-years.html
三篇关于强类型IO的博文
和我的想法撞车了, 但我有信心在API设计上超过他们 😊
https://t.me/hyi0618/7238?comment=12049 #ts #rust 类型检查

许多学问,只是跨端、跨期之时,对同一种语言结构或「语意」的扭曲。 我甚至觉得比Python晦涩的编程语言不应该存在,因为人人皆可编程,这才是编程语言和IT的本意。

Guido用 @pipe(x) def y: +1 和lambda:的若智语法compose块,但他的哲学刚好弥补了这一部分。

如果你是个高级的元编程研究者, 你的眼中不会有「高级特性」,因为那正是语言设计要消灭的问题。 许多“特性”,只是与App接触不良的“关联性”。
#rust
xz 供应链攻击,暴露了一个GNU-C风格的项目有多浮夸🤣 👎

https://felipec.wordpress.com/2024/04/04/xz-backdoor-and-autotools-insanity/

运行autogen.sh脚本(生成configure)
运行configure脚本(生成Makefile文件)
make
make install
duangsuse::Echo
#tool 🌠🔍
#cg 现在可以使用 WebGPU 做 OpenProcessing.org , 虽然它主要用于免IO(2x加速)的 DNN infer ,但还能使用 WGSL
https://google.github.io/tour-of-wgsl/types/vectors/constructors/

优势: SFC单文件,不需要 polyfill header 和typehint,优雅吧? #rust
@fragment
fn fragmentMain(@builtin(position) pos: vec4f) -> @location(0) vec4f {
return vec4f(pos.xy / inputs.size.xy, 0.5, 1);
}


https://compute.toys/
https://pongasoft.github.io/webgpu-shader-toy/
#rust #os yinwang 说的道理 😅😅
https://www.yinwang.org/blog-cn/2013/04/14/os-design

dnaugsuz:
诶,要是在libc或操作系统的程度把 unsafe ban 掉就好了

内存r/w都有struct可言

我能想到一个例子

比如对授信代码, union+tag, ptr+length 可以间接计算出来

其他的只允许用fatPtr双指针验证后调用

总之就是不允许用值类型+Maybe 以外的东西

不允许硬编码堆/栈地址,不允许自己捏造虚表来调用,不允许越界读写, 不允许通过addr缓存deepEq ID,并且造成一些无聊的误解

本来就不该信任的代码注入,就不该有虚拟机,而是靠沙箱, 就像 eBPF 用setInterval取代while(1)那样

哦,所以这又是一个C经验问题……

我看到过bpf插件在heap上搞 struct 不={} 的

应该是 .bss 的问题吧,不是new的
calloc 才是C喜欢的🥰
所有人都只用 malloc ,默认必须有构造器赋值码😂

C自己的对象结构(.so segments) 也是个神人

在我看来,这和JVM的OOP对象没区别, 只是更加难以创建

ld-linux 不该叫 dlopen(),该叫 new("xx.so") , PATH 或许也该叫classpath😂 ,只是它的API只支持换汇符流,没有json……

这玩意和线程vs携程一样, 基本上就是 Ring0/ userspace 的区别

结果却是,整个编程界重复造轮子 。

如果从C的程度就把这些 hack 视为 unsafe 的

根本就不会有把所有对象按 r/w/x 分割出堆/栈/静态/类型区 的做法

有 .so ELF 的时候他们就知道需要 constructor ,但是最后C还是只有全局按sizeof分配

而不是细粒度管理

就像 React vs Svelte 一样,没有人会蠢到用60fps检测一下“山寨DOM”更新了多少,然后去patch, 而是你点了1次,它就知道有2个text要刷新, 本该如此

一开始,该就分治好

Rust虽然语法挺原神的,API设计也没革命性, 在我看来它至少懂怎么规划变量树

而且UIUX做的不错
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from codedump的电报频道 (老C)
#Rust
之前一直以为,在Rust代码中只有返回Result类型的函数可以用?提前返回,没想到可不止这个类型,参见:https://doc.rust-lang.org/std/ops/trait.Try.html