- 主题:AI 写代码确实太爽了
【 在 hgoldfish 的大作中提到: 】
: 我最近修的好几个 BUG 对调个语句就解决了。Rust 能解决吗?
: 1. 应该先更新缓存再通知客户端。之前弄反了。
这种业务顺序可以体现在类型系统里的,比如,更新缓存前的数据类型是Something,
更新后变成SomethingWithCacheUpdated,通知客户段的接口只接受后者,传错了必然编译不过
: 2. 双重循环的次序错了。不满足数据局部性规则。
: ...................
--
FROM 123.120.175.*
推荐读一下 Domain Modeling Made Functional: Tackle Software Complexity
就是在讲各种编译器保证业务逻辑的方法,只要语言有像样点儿的类型系统就可以
知乎上的 工业聚 也写过类似的系列文章
【 在 gfkid 的大作中提到: 】
: 学习了
--
FROM 123.120.175.*
我最初接触到的这方面的例子就是你写的相关内容,哈哈
其实和rust关系不大,只要是个提供ADT类型系统的语言,nominal typing的,都可以做到这一点。甚至typescript这种structural typing的,没有sum type的,也能模拟出来凑合用。
关键还是人要有概念,要主动充分使用类型来描述出尽可能多的逻辑要求。否则
rust也帮不了任何一点
【 在 lvsoft 的大作中提到: 】
: beep已经回答的很好了。
: 我之前在circuit版说过一个例子,比如mcu里面寄存器的某一个bit,表示对应的某个功能是否开启。1是开启0是关闭。
: rust里面对这个bit位的读和写要用不同的枚举。
: ...................
--
修改:beep FROM 123.120.175.*
FROM 123.120.175.*
对,之前就是看你那个10.丝(),从中悟到了trait的威力
【 在 lvsoft 的大作中提到: 】
: 是的,这个东西只是用类型系统去约束业务逻辑,现代语言都可以做到。
: 但选择一门语言更重要的是选择了一种风格。比如我前面说的这个例子,
: 如果不是写这个库的人有这个洁癖,rust下当然也是可以和c一样用&&和|=的方式来读和写bit位的。
: ...................
--
FROM 123.120.171.*
仔细想想其实 move_to(10.丝()) 也不是非要rust这样有trait的语言才行
完全可以
struct Length(i32);
fn move_to(length: Length)...;
fn 丝(number: i32) -> Length ...;
fn um(number: i32) -> Length ...;
...
move_to(丝(10));
但是的确好像在以往各语言的工程实践中不常见到这种充分利用类型系统的风格。貌似这风格也是从函数式圈子里发展过来的。
【 在 lvsoft 的大作中提到: 】
: 是的,这个东西只是用类型系统去约束业务逻辑,现代语言都可以做到。
: 但选择一门语言更重要的是选择了一种风格。比如我前面说的这个例子,
: 如果不是写这个库的人有这个洁癖,rust下当然也是可以和c一样用&&和|=的方式来读和写bit位的。
: ...................
--
FROM 123.120.171.*
我记得这书是用f#写的,但是基本不影响,都看得懂。里面有些是函数式语言吃饱了撑的搞出来的各种烂模式,但大部分尤其是类型相关的实践都是实际工程用得上的
【 在 gfkid 的大作中提到: 】
: 看了摘要感觉不错 没想到能有这样的书
--
FROM 123.120.171.*
是的,我同意你说的,一方面是语言本身,rust提供了必要的基础设施比如好用的类型和模式匹配,另一方面更重要的是社区风格风气,主流的包都在教你甚至逼你充分利用最先进的语言特性和实践思路来做事,比如你提到的,比如serde。。。
【 在 lvsoft 的大作中提到: 】
: 这个例子其实也没啥,这玩意本质上来说跟语法糖一样也没啥本质区别。
: rust的很多东西都这样,粗看也没啥,奇技淫巧罢了,不是什么非常本质的东西。
: 但你用的越多越能感受到这里有一种奇妙的平衡感。
: ...................
--
FROM 123.120.171.*
我理解重点不是immutable,而是业务流水线上每一个不同的可区分的业务状态都用类型来区分。哪怕数据本身过了一个处理环节之后没发生变化,但所处环节位置变了,也是不同类型。如果修改数据只是变化了数据本身,并不改变其业务逻辑中的位置,那类型也不变。这两种情况也是常见的
但确实和immutable的表现有点相似,所以也可以理解为什么这是从functional社区里发展出来的做法。
【 在 gfkid 的大作中提到: 】
: 老实说 当看到你给出的解法的时候 我理解是 用类型实现immutable data的效果
: 所以是否要在每一次修改数据的时候,给出一个有意义的类型来约束呢,对程序员来说,这是一个负担
: 但是对AI来说是否就容易很多,也许只需要用恰当的prompt告诉AI,在每一次修改数据的时候绑定一个新的有业务含义的类型,以此增加鲁棒性
: ...................
--
FROM 123.120.171.*
对,ai可以帮助编码,但是业务建模还得人来干
【 在 gfkid 的大作中提到: 】
: 在AI时代 感觉 DDD 会越来越体现价值 因为如果模型抽象合理,那么代码生成就是水到渠成了
: 见的
--
FROM 123.120.175.*
不是bob写的,作者叫scott啥的
【 在 guizhidao 的大作中提到: 】
: bob写的那本书吗?
: 我看豆瓣评价私货多,是主推F#?
: #发自zSMTH@AGT-AN00
: ...................
--
FROM 123.120.175.*