国庆突击学习了下rust个人感觉项目如无必要还是用其他熟悉的语言工具
个人意见 欢迎讨论 不要人身攻击
1. 对于切片 一直不知道具体如何实现的 [T] 这个是切片类型 有这个类型 但是又不能声明变量 被归于DST类
那就是说通过引用赋值给胖指针(切片引用) 不是通过临时变量
[T]修饰的变量 就是数据本身(虽然编译器不通过) 但是没有所有权 和普通引用(指针)还不一样,
类似一般编译器通过符号表地址映射,
不是常规以为的视图逻辑 估计这是英文版本‘view’加了引号的原因
如果单纯是逻辑视图 其实编译时完全确定切片类型的size(胖指针,各字段类型size都可以确定) 反正数据又不是切片本身的,除了box【T】外 都是引用别人的数据 归为DST有点牵强
但是实技术需要运行时通过[..]和&操作获取 这个可以针对BOX<[T]>对切片数据的所有权推测一下
并且&[1,2][..] 这个格式很不清楚逻辑 &这个符号 如果按运算符理 你说时取地址吧 可是返回胖指针
估计大概率rust把& 这里当作一个标识 表明是切片 可能作为其语法特定规定
所以纳闷为什么不直接定义[T]为一个胖指针 然后切片操作[。。]返回胖指针的值 而需要显式以切片引用的方式使用 本身逻辑上成为view
2. 看中文翻译
基本类型不支持隐式类型转换,但是看英文版本 又有类型自动转换 机制
let a:i32 =(1.0+8.9);
上边这段代码又可以编译通过
ps:这个忘记但是什么场景编译了 ,现在单独拿出来编译又无法通过
这个涉及 子表达的 一个自动类型转换点
3.泛型函数的调用方式
myfn::<i32>();
都不知道怎么理解这么调用方式 从逻辑上如何理解tuobofish语法
4.搞不明白 const fn函数 到底是做什么的
按相关介绍 应该是编译时求职 但是fn函数本身返回值 又因为不同的调用参数而不同
也许是针对函数调用处 编译时先执行获取结果
5.动态分发机制
为啥impl trait类型 统一直接定义为dyn tait对应的数据结构多省事
赋值的时候自动解引用或者引用。
或者 impl trait 设定一个数据结构 一个字段存类型 一个存实例地址
赋值的时候动态绑定上去
可以参考golang 接口实现多态 或者 c++ 在基类标识虚函数也可以呀
当然对于重视编译时检查的rust可能有其他考虑
6.代码真的不想看 可阅读性欠缺
看了中文版和英文版的规范和标准库 ,内存安全模型的确要求严格,但是也因为这一点导致很多特定规范和约束存在,
很多逻辑上做不到一致性,有点堆砌语法项的感觉 ,感觉rust要求编程者必须显式告诉其一些特定编译参数,导致很多限定符好难理解不同地方的用法,当然也可能由于刚接触 还没有领略到真正的魅力
个人意见,可以反驳,但是不要人身攻击和秀莫名其妙的优越感
--
修改:nextworld8 FROM 223.104.41.*
FROM 223.104.41.*