(似乎是很久前写的一篇草稿,看完整度还行先放出来)
I. 编程风格:
tmp = modify(tmp)
vs modify(&mut tmp)
在编程中,对变量的修改,两种方式:
将变量传入函数中进行操作,如
tmp = modify(tmp);
将变量的指针/可变引用传入函数中进行操作,如
modify(&mut tmp)
。当使用
tmp = modify(tmp)
进行操作时,如果在函数执行的过程中中断,tmp 是只读的,所以不会影响原始的 tmp 的值。而在使用后者的情况下,由于是直接操作变量的可变引用,如果在执行过程中中断了,就很难保证操作的完整性,难以恢复。案例:函数式编程在实现容错、幂等、原子操作等方面的应用
在实际开发中,函数式编程的思想可以用于实现容错、幂等、原子操作等功能。例如在并发编程中,可以使用函数式编程的思想来实现原子操作,确保对变量的修改不会受到其他线程的影响。同时,对于需要保证每次操作结果相同的操作,如缓存、备份等,可以使用函数式编程的思想来实现幂等操作,从而提供更大的代码可靠性。
还有所谓的 CoW
PKGBUILD 的 $pkgdir $srcdir
再来一个例子,pkgbuild 的构建思路
你会发现都在对 $pkgdir 操作(
$pkgdir 就是一个 folder, 里面“模拟”了 host 的 folder 结构
你在里面构建乱炸都没事
pacman -U *.zst 就是最后把 zst 解压放进真正的 host 里
而且这样构建,pacman 可以记录一切文件的位置(广义的构造函数
原子,容错,幂等操作
fp 的不可变相关
然后这玩意有啥别的“用处”呢
git 开发一般是 fork + checkout 一个 dev 分支,修改完合并 / rebase / squash
(是不是一回事