- 主题:国庆突击学习了下rust个人感觉项目如无必要还是用其他熟悉的语
国庆突击学习了下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.*
这几个都是范式进步
【 在 nextworld8 的大作中提到: 】
: 国庆突击学习了下rust个人感觉项目如无必要还是用其他熟悉的语言工具
:
: 个人意见 欢迎讨论 不要人身攻击
: ...................
--
FROM 221.218.139.*
总之就是语言理念过于“超前”,对于程序员的个体要求很高。对于过往国内快、猛、糙的打法是完全不一致。
最大的问题,如果是大工程非常不好找人,而且人员上手也比较难。
如果是小工程,其实语言的差异性没有那么大。
可能大厂相对好一些。
【 在 nextworld8 的大作中提到: 】
: 国庆突击学习了下rust个人感觉项目如无必要还是用其他熟悉的语言工具
:
: 个人意见 欢迎讨论 不要人身攻击
: ...................
--
FROM 221.216.155.*
整体感觉 如果项目不是特别需要
用其他c++ golang java更适合开发需要
这玩意开发效率和可读性真不适合日常业务开发
- 来自 水木社区APP v3.5.7
【 在 Windsor 的大作中提到: 】
: 总之就是语言理念过于“超前”,对于程序员的个体要求很高。对于过往国内快、猛、糙的打法是完全不一致。
: 最大的问题,如果是大工程非常不好找人,而且人员上手也比较难。
: 如果是小工程,其实语言的差异性没有那么大。
:
: 可能大厂相对好一些。
--
FROM 223.104.41.*
以前总嫌c++
语法啰嗦
现在感觉c++
相对逻辑更清晰
看来rust我搞不定了
- 来自 水木社区APP v3.5.7
【 在 Windsor 的大作中提到: 】
: 总之就是语言理念过于“超前”,对于程序员的个体要求很高。对于过往国内快、猛、糙的打法是完全不一致。
: 最大的问题,如果是大工程非常不好找人,而且人员上手也比较难。
: 如果是小工程,其实语言的差异性没有那么大。
:
: 可能大厂相对好一些。
--
FROM 223.104.41.*
如果不是对性能有极致要求,不妨可以看看golang,有轻度GC的语言,类似C语法,上手容易,工程化容易,编译很快。最大的问题就是语法不够先进,而且有GC。
【 在 nextworld8 的大作中提到: 】
: 以前总嫌c++
: 语法啰嗦
: 现在感觉c++
: ...................
--
FROM 221.216.155.*
早上回复了下,但说要等审核。。。。。换个论坛吧
---
2. 我这里编译是不通过的:
error[E0308]: mismatched types
--> src/main.rs:2:16
|
2 | let _a:i32 =(1.0+8.9);
| --- ^^^^^^^^^ expected `i32`, found floating-point number
| |
| expected due to this
For more information about this error, try `rustc --explain E0308`.
3. 我之前没有学过其他支持泛型的语言,没有先入为主,所以还是觉得很好理解的。
这个turbofish并不是强制的,大部分时候不需要这么写,有时候才需要。
这里`i32` 就是myfn里的泛型T。
4. 我理解 const fn 并不是说【返回结果】固定,而是【计算过程】固定。或者说,只要入参在编译期已知,那么就可以在编译期算出返回结果,而不用等到运行时。
比如 const fn sqrt(x: i32)->i32 { x * x } 。那么就可以用:
const XXX: i32 = sqrt(100);
这里的XXX就是编译器算出来的,就可以当常数用。
而典型的反例就是 需要申请内存的函数。
5. 我不确定你问的是不是 静态分发(impl Trait)和动态分发(dyn Trait)。 TheBook里有明确的介绍,这两个的优缺点和适用场景。
--
修改:hellowub FROM 122.231.68.*
FROM 122.231.68.*
很多都是C++的经验和教训啊。
【 在 nextworld8 的大作中提到: 】
: 国庆突击学习了下rust个人感觉项目如无必要还是用其他熟悉的语言工具
:
:
: ...................
--
FROM 114.249.209.*
2 个 估计版本的可能
这个会子表达式 自动转换点
3.ruobofish语法
一直安慰为啥不学其他语言
为啥在调用操作符前加::
直接mytest《i32》()
也好理解
- 来自 水木社区APP v3.5.7
【 在 hellowub 的大作中提到: 】
: 早上回复了下,但说要等审核。。。。。换个论坛吧
:
: ---
:
: 2. 我这里编译是不通过的:
:
: error[E0308]: mismatched types
: --> src/main.rs:2:16
: |
: 2 | let _a:i32 =(1.0+8.9);
: | --- ^^^^^^^^^ expected `i32`, found floating-point number
: | |
: | expected due to this
:
: For more information about this error, try `rustc --explain E0308`.
:
:
: 3. 我之前没有学过其他支持泛型的语言,没有先入为主,所以还是觉得很好理解的。
:
: 这个turbofish并不是强制的,大部分时候不需要这么写,有时候才需要。
:
: 这里`i32` 就是myfn里的泛型T。
:
: 4. 我理解 const fn 并不是说
--
FROM 223.104.41.*
golang还可以 业务逻辑不复杂还不错
做过几个项目
多了解一门语言 看看设计思想和考虑
- 来自 水木社区APP v3.5.7
【 在 Windsor 的大作中提到: 】
: 如果不是对性能有极致要求,不妨可以看看golang,有轻度GC的语言,类似C语法,上手容易,工程化容易,编译很快。最大的问题就是语法不够先进,而且有GC。
--
FROM 223.104.41.*