- 主题:编程语言中的null,算不算是一个失败的设计?
我也不喜欢optional,没什么本质改变,还不如go的默认值设计,字符串永远不会为null
【 在 hgoldfish 的大作中提到: 】
: 关键是默认整个编程环境都是 non-null 的,optional 也是少部分,免得心智负担太重。现有语言写多了都是 optional<> 和 ?. 到处飘,很丑很恶心。
:
--
FROM 124.64.18.*
关键是optional怎么用,如果是可以对有和无的分支分别提取,并不强制全列举,
那就跟C里的union没啥区别。如果只能用pattern match提取,有和无分支必须
显式考虑,那还是会强制写代码的人对不同情况都要考虑周到的。
【 在 littleSram (littleSram) 的大作中提到: 】
: 我也不喜欢optional,没什么本质改变,还不如go的默认值设计,字符串永远不会为null
--
FROM 122.225.220.*
用go的码农不需要关心内存分配和释放,
但是go runtime的实现者需要关心这个问题,不把内存分配失败作为null暴露给码农,那就只能在out of memory时直接panic了。
【 在 littleSram 的大作中提到: 】
: 我也不喜欢optional,没什么本质改变,还不如go的默认值设计,字符串永远不会为null
: :
--
FROM 125.35.125.*
写go的一些高性能库的,也要关心的。是分配到goroutine的栈上还是堆上。
切片是个好东西,但是只要动态改变大小就要在堆上重新分配,所以各种技巧就来了
【 在 z16166 的大作中提到: 】
: 用go的码农不需要关心内存分配和释放,
: 但是go runtime的实现者需要关心这个问题,不把内存分配失败作为null暴露给码农,那就只能在out of memory时直接panic了。
:
--
修改:littleSram FROM 124.64.18.*
FROM 124.64.18.*
null涉及的是关心的是失败与否,不是性能。
【 在 littleSram 的大作中提到: 】
: 写go的一些高性能库的,也要关心的。是分配到goroutine的栈上还是堆上。
: :
--
FROM 125.35.125.*
go有指针,会有dereference
【 在 z16166 的大作中提到: 】
: null涉及的是关心的是失败与否,不是性能。
:
--
FROM 124.64.18.*
什么东西被滥用之后都很恶心
optional还是客观存在的,比如咖啡可以多加1份,2份糖,无糖或者默认糖量,如果只有int而没有int?,这个结构就不太好写
【 在 hgoldfish 的大作中提到: 】
: 关键是默认整个编程环境都是 non-null 的,optional 也是少部分,免得心智负担太重。现有语言写多了都是 optional<> 和 ?. 到处飘,很丑很恶心。
:
--
FROM 155.64.23.*
make和new?卧槽这个口子一开,等于是go和cpp在null问题上是一样的啊
go的文档貌似没描述new在内存不足时是返回nil,还是直接panic。估计得看实现代码?
如果能接受new直接抛异常,cpp其实可以不用处理null。
pure C也可以规定用统一的allocator,做到内存不足时直接panic,而不返回null。
可惜的是很多情况下同一个team的各人搞各人的,各种代码写法混在一个工程中。调用的第三方库也得封掉null。
另外有些工程不允许直接panic。
【 在 littleSram 的大作中提到: 】
: go有指针,会有dereference
: :
--
修改:z16166 FROM 125.35.125.*
FROM 125.35.125.*
是啊,稍微深入用go,就发现傻眼了
好多人问什么时候用 T,什么时候用 *T,哪个性能好
go官方给的回答是,看情况,如果不确定该用哪个,就用 *T
【 在 z16166 的大作中提到: 】
: make和new?卧槽这个口子一开,等于是go和cpp在null问题上是一样的啊
: go的文档貌似没描述new在内存不足时是返回nil,还是直接panic。估计得看实现代码?
: 如果能接受new直接抛异常,cpp其实可以不用处理null。
: ...................
--
FROM 124.64.18.*
不知道swift和kotlin有没有人问这个问题
【 在 littleSram (littleSram) 的大作中提到: 】
: 是啊,稍微深入用go,就发现傻眼了
: 好多人问什么时候用 T,什么时候用 *T,哪个性能好
: go官方给的回答是,看情况,如果不确定该用哪个,就用 *T
: ...................
--
FROM 61.144.118.*