我是Rust和系统编程的绝对初学者.constRust 的文档说明了这一点:
常量适用于程序的整个生命周期.更具体地说,Rust中的常量在内存中没有固定地址.这是因为它们有效地内联到他们使用的每个地方.由于这个原因,对同一常量的引用不一定保证指代相同的存储器地址.
我只是const在C++中遇到过,但从来没有内联const类型.有人可以提供一个初学者友好的解释,如何工作?
另外,我有点困惑const.这是否意味着每次我们使用该const类型时,堆栈中的值仅为此表达式分配,并且在表达式执行完毕后,它将被销毁?
在Rust Programming Language一书中,在Structs一章中我们介绍了元组结构.
在哪些情况下我应该使用元组结构而不是正常的元组(除了书中提到的例子)?
我正在研究haskell书,我理解:sprint x用于打印x的元素已经被评估,而元素则没有(那些不是由'_'表示的).
书中提供的一个例子,
Prelude> let blah = enumFromTo 'a' 'z'
Prelude> :sprint blah
blah = _
Prelude> take 1 blah
"a"
Prelude> :sprint blah
blah = 'a' : _
Run Code Online (Sandbox Code Playgroud)
为了测试不同的输入,我在GHCi中做了这个: -
prelude> let b = [1,2,3,4,5]
prelude> :sprint b
b = _
prelude> take 1 b
[1]
prelude> :sprint b
b = _
Run Code Online (Sandbox Code Playgroud)
:sprint b最后一个命令的输出不应该是b = 1 : _因为我们在使用命令时只评估一个列表项和一个cons运算符take 1 b?? 但它显示了上面的输出.这是怎么发生的?输出不应该类似于String类型的输出吗?
编辑:我一直在尝试更多并得到这个结果: -
prelude> let b = [1..10] :: [Int] …Run Code Online (Sandbox Code Playgroud) 我刚刚意识到f64即使在具有一点性能权衡的32位机器中我们也可以使用类型.但是,这在Rust中是如何实现的?是否将两种f32类型捆绑在一起作为临时f64类型?幕后还有别的什么东西?
有人可以解释如何在不深入挖掘内部锈蚀的情况下完成这项工作吗?(我对Rust仍然很新).
在发生恐慌之前在堆或堆栈上分配的类型会发生什么?是否已调用析构函数以便取消分配类型?他们在记忆中徘徊等待被其他一些过程覆盖吗?或者它完全是另一回事?
我不知道,因为我是Rust和系统编程的新手.
我正在阅读这篇文章,它解释了Haskell的非严格语义.直到作者开始讨论Haskell中的Partial和Infinite Lists,我才明白.
作者说: -
这个想法是无限列表被理解为部分列表的限制.
之后,作者继续解释表达式的执行: -
filter (< 3) [1..]
结果有点违背我对预期输出的直觉.我认为答案就是清单: - 虽然作者解释了足以理解执行过程以及我们如何得到最终结果,但它并不能解释为什么它如此工作.[1, 2].但是,不!
所以,我的问题是为什么无限列表被表示为一堆部分列表的限制?有人可以解释这个问题而不必深入研究复杂的数学术语吗?
谢谢
我刚学会了Haskell中的无点样式,以及它如何帮助整理代码并使其更易于阅读.但有时他们可以使代码有点过于简洁.
所以,当我应该总是使用无点样式时,在什么情况下我应该绝对避免在Haskell中使用无点样式?