- 主题:Tour of Rust
println! 是一个语法糖,rust 里面用宏实现了非常多的语法糖
【 在 pfan117 的大作中提到: 】
: helloworld程序没有使用stdout<<这一点我喜欢
--
FROM 120.52.147.*
rust 语言机制的基石之一就是生命周期,比如一个字符串的生命周期内,我们可以对它进行操作,如获取一个切片,也可以修改它的内容,但是不能在切片之后再修改它的内容,因为这有可能会使得切片内存越界等。
生命周期保障了这个特性,获取切片的操作是在immutable reference上进行的,而在语法层面保障immutable reference生命周期内无法获取mutable reference,就能保障切片的内存安全。
【 在 sosei 的大作中提到: 】
: 没明白分成 不可写变量与常量 的意义
: 不可写变量有必要吗
--
FROM 120.52.147.*
我觉得不多学几门语言的话,没法完整领悟rust的一些机制的核心思想
比如,最简单的move语义,只有了解c++里面引用和右值的机制才能理解rust为什么要这么设计
再比如traits,也只有了解了c++缺少类似的语法机制问题,以及为啥c++20要引入concepts,才能理解它的意义
【 在 KEILLY 的大作中提到: 】
: 正好相反。。
: rust可能就学得明白。
: 因为有一整套的东西。所有的源代码就在那里。
: ...................
--
FROM 120.52.147.*
是的。但worse is better. 所以要么rust不会发展起来;要么那篇文章被推翻,二者必居其一。
【 在 zli07 的大作中提到: 】
: 我觉得不多学几门语言的话,没法完整领悟rust的一些机制的核心思想
: 比如,最简单的move语义,只有了解c++里面引用和右值的机制才能理解rust为什么要这么设计
: 再比如traits,也只有了解了c++缺少类似的语法机制问题,以及为啥c++20要引入concepts,才能理解它的意义
--
FROM 1.80.221.*
不需要领悟吧
一般人不都是经常试错法嘛,只要程序能得到想要的结果。。
rust语法是另类一点,多调试几回也就习惯了。即可以上去蛮干
右值这种概念,其实没啥用,只有学术意义。
【 在 zli07 的大作中提到: 】
: 我觉得不多学几门语言的话,没法完整领悟rust的一些机制的核心思想
: 比如,最简单的move语义,只有了解c++里面引用和右值的机制才能理解rust为什么要这么设计
: 再比如traits,也只有了解了c++缺少类似的语法机制问题,以及为啥c++20要引入concepts,才能理解它的意义
: ....................
※ 修改:·KEILLY 于 Jul 26 21:39:40 2020 修改本文·[FROM: 113.214.214.*]
※ 来源:·最水木 客户端·[FROM: 113.214.214.*]
修改:KEILLY FROM 113.214.214.*
FROM 113.214.214.*
那我再举个例子,栈上对象的内存分配,这块 rust 刻意淡化了概念(比如 sizeof 这种 C/C++ 常见操作),但是通过c++的方式去理解 rust 代码如何运行的,当函数返回对象的时候返回值是如何接收,非常重要。
比如下面这段代码:
// 构造一个 vector
let values = vec![String::from("foobar")];
// 获取 Iterator
let mut iter = values.iter();
assert_eq!(iter.next(), Some(&String::from("test"));
在这里为什么能够直接对 String::from 返回的栈上对象取引用?
如果能类比 c++ 中的函数接收 const T& 这种引用时可以传入一个临时对象,就发现它们的道理是一样的
class T {};
void test(const T& t) {}
test(T());
【 在 KEILLY 的大作中提到: 】
: 不需要领悟吧
: 一般人不都是经常试错法嘛,只要程序能得到想要的结果。。
: rust语法是另类一点,多调试几回也就习惯了。即可以上去蛮干
: ...................
--
FROM 120.52.147.*
可以用性能比较法(一段语法,跑上几万次)。
比如C#或Java处理字符串的速度追不上c++
知道原因就差不多了,需要性能的时候就得放弃C#
这样也就理解了rust的切片概念,直接读取内存的当然快了。
不过C#最近也有了切片新语法Span<T>
【 在 zli07 的大作中提到: 】
: 那我再举个例子,栈上对象的内存分配,这块 rust 刻意淡化了概念(比如 sizeof 这种 C/C++ 常见操作),但是通过c++的方式去理解 rust 代码如何运行的,当函数返回对象的时候返回值是如何接收,非常重要。
: 比如下面这段代码:
: // 构造一个 vector
: ....................
--
FROM 101.71.38.*