Brown University 版本的 The Rust Programming Language 教程中,Generic 这一章节末尾提出了一个非常棒的 Quiz。
假如某个 library 定义了如下 function 而我们不知道具体实现是什么:
1fn mystery<T>(x: T) -> T {
2 // ????
3}
当我们在代码中如此调用时,当然可以确定 foo 的类型,但是能确定值吗?
令人意外的是,foo 的值是唯一的。
Claude Sonnet 老师也在恍然大悟后直言「这正是理解 Rust 泛型系统的关键点之一」。
今天重新看了神谷英树 23 年 10 月离开白金工作室的访谈,
他穿着四叶草工作室的衣服啊!
莎蒂停顿了一下又说道,“自从开始教书,我总在琢磨,我们是多么幸运的一代,诞生在那个时代,我们很幸运。”
“怎么说?”
“这个嘛,如果我们出生得再早一点,制作电子游戏就没那么容易。我们接触电脑的机会更少,我们会属于把软盘装进塑料密封袋、开车带着游戏到店里去的那代人。
如果出生再晚一些,互联网就会更加普及,值得利用的工具也更多,但是说实话,到那时电子游戏已经变得复杂,这个行业变得太专业化了。我们不可能凭一己之力完成那么多工作。以当时的资源,我们做出的游戏不可能被奥珀斯这样的公司看中,也不可能把一五设计成日本人,我们会为自己不是日裔而畏首畏尾。而且我猜,由于互联网的存在,我们会得知有多少人在做跟我们相同的事情,我们会感到难以应对。
当时的我们有太多的自由空间,创意方面的也好,技术方面的也罢。没人监督我们,就连我们自己都没在监督自己。我们拥有的只是高得离谱的标准,以及你完全理想化的信念 —— 认定我们能做出一款了不起的游戏。”
——「明日传奇」
周赛遇到了一道数组中所有 pair 的绝对值求和的问题 2731. Movement of Robots,直觉上 O(N^2) 的方式会 TLE,后来转换思路,发现有序数组用 O(N) 就可以做到了。
直觉上的做法,是在模拟 abs 运算:
1for i in range(N):
2 for j in range(i + 1, N):
3 res += abs(nums[i] - nums[j])
通过归纳这个过程,可以发现:
1N1 - N0, N2 - N0, N3 - N0, N4 - N0
2 N2 - N1, N3 - N1, N4 - N1
3 N3 - N2, N4 - N2
4 N4 - N3
对于 index i,
在 -
号左边会出现 i
次,因为有 i
个数比它小;在 -
号右边会出现 N - 1 - i
次,因为有 N - 1 - i
个数比它大。
那么我们可以直接用乘法计算了:
1sum(
2 nums[i] * (i - (N - 1 - i))
3 for i in range(N)
4)
那么为什么只有对有序数组才能得到这样的 O(N) 优化呢?
因为要求的是 abs,如果出现了逆序我们不知道某一步应该是 Ni - Nj
还是 Nj - Ni
,会导致计数错误。
在做 JNI 的时候,Kotlin 与 Rust 传递复杂结构,需要手动赋值每一行属性,非常繁琐。
想到也许可以用 Protocol Buffer 作为中间载体,依赖自动生成的类。
效果倒是可以,input 和 output 都使用 ByteArray 了,两边各自反序列化一次就行。
但是吧,10 个属性的结构,在 Rust 下面生成的文件也就 60 行,在 Java 里有足足 2500+ 🤯
Protobuf java generate to large methods
只能说,凡事皆有代价。
archinstall
脚本还挺香,完整保留了 Win 11 分区和引导。
碰到的唯一需要调整的地方是,安装完毕提示 “Would you like to chroot into the newly created installation and perform post-installation configuration?” 我直接无视就重启了。
最好 chroot 然后添加 bootloader config,修改后 bootctl list
确认一下。大概率碰到的问题是,选了 linux-zen 的 kernel,和默认的 vmlinuz-linux
& initramfs-linux.img
匹配不上。
用了 10 年的 Arch 了,之前都是 zsh 一行行敲命令安装,再也不想回去了。
一想到人类其实也被多巴胺奴役着,搞一个 Super AI 管理社会,感觉也差不多?
对于程序员和开发人员来说,
如果完成某项任务所需要付出的努力对他们是个挑战,
却又恰好还在力所能及的范围内,
他们就会觉得很有乐趣。
因此,趣味性是一个峰值效率的标志。
……
乐趣是一个符号,意味着效能、效率和高产。
——「UNIX 编程艺术」