小编aij*_*aij的帖子

循环和真实有什么区别?

Rust教程,现在书中声称while true和之间存在差异loop,但在此阶段理解并不是非常重要.

如果你需要一个无限循环,你可能会想写这个:

while true {
Run Code Online (Sandbox Code Playgroud)

但是,Rust有一个专门的关键字loop来处理这种情况:

loop {
Run Code Online (Sandbox Code Playgroud)

Rust的控制流分析以不同的方式对待这个构造,因为我们知道它将始终循环.在这个阶段,这意味着什么并不是非常重要的细节,但总的来说,我们可以给编译器提供的信息越多,它对安全性和代码生成的影响就越大,所以你应该总是喜欢循环计划无限循环.

完成了一些编译器类型的工作后,我不得不想知道它有什么可能的语义差异,因为编译器弄清楚两者都是无限循环是微不足道的.

那么,编译器如何区别对待它们呢?

loops rust

25
推荐指数
3
解决办法
1919
查看次数

如何让货物自动重新编译已更改的文件?

我听说货物有能力自动重新编译已更改的源文件,但我很难弄清楚如何告诉它这样做.

现在,我手动运行cargo buildcargo run每次要输入检查我的代码.我宁愿简单地保存文件并在邻近的终端窗口中查看结果.

如果你仍然不知道我在说什么,我正在寻找相当于sbt ~compile或等的货物sbt ~run.

这似乎很难找到,所以我开始怀疑它是否真的得到了支持.可能有人说货物可以检测到已更改的文件并重新编译它们的意思是货物可以检测到未更改的文件并避免重新编译它们,例如make.

rust rust-cargo

16
推荐指数
1
解决办法
3116
查看次数

RUST_BACKTRACE = 1有多少开销?

总是设置RUST_BACKTRACE = 1是否合理?

它是否在正常执行期间(例如在函数调用期间)引入任何(重要的?)开销,或者在发生恐慌时是否只有开销?

debugging rust

11
推荐指数
3
解决办法
977
查看次数

整数非重叠范围的数据结构?

我记得学习了一个数据结构,它将一组整数存储为树中的范围,但是已经有10年了,我记不起数据结构的名称,而且我对细节有点模糊.如果它有帮助,它是CMU教授的功能数据结构,我相信2002年的15-212(编程原理).

基本上,我想存储一组整数,其中大部分是连续的.我希望能够有效地查询集合成员资格,有效地添加一系列整数,并有效地删除一系列整数.特别是,我小心保留原始范围是什么.如果相邻范围合并为一个更大的范围,则会更好.

一个简单的实现是简单地使用泛型集数据结构(如HashSet或TreeSet),并在添加范围时添加范围内的所有整数,或者在删除范围时删除范围中的所有整数.但是,当然,除了添加和删除速度之外,这会浪费大量内存.

我正在考虑一个纯粹的功能数据结构,但对于我目前的使用,我不需要它.IIRC,查找,插入和删除都是O(log N),其中N是集合中的范围数.

那么,你能告诉我我想要记住的数据结构的名称,还是一个合适的替代方案?

functional-programming data-structures

9
推荐指数
1
解决办法
1835
查看次数

为什么SBT项目被宣布为懒惰的?

根据SBT文档,"通过声明类型为Project的惰性val来定义项目."

这当然是常态,而且正是我们正在做的事情,但我想知道如果有什么是它需要懒惰的原因.

使用常规val而不是lazy val 似乎工作.当然,使用严格的val会导致项目定义按顺序初始化,这意味着前向引用不起作用,需要按依赖顺序定义项目.

对于一个相对较大的构建,有53个相互依赖的项目,强制执行的命令实际上是一个Good Thing™,所以我想知道是否有使用延迟val的实际原因 - 除了允许定义以任意顺序发生.

sbt

8
推荐指数
1
解决办法
693
查看次数

Scala类型真的形成一个格子吗?

似乎有一种普遍的概念,即Scala类型形成一个格子.

我可以在那里获得四分之三的路径,并通过定义top = ,bottom = 和meet = 来定义半格.那么至少大部分相当于,即子类型关系.AnyNothingwith<:

Scala甚至可以帮助我们测试至少一些晶格定律:

scala> implicitly[Nothing =:= Nothing]
res0: =:=[Nothing,Nothing] = <function1>

scala> implicitly[Nothing =:= String with Nothing]
res1: =:=[Nothing,String with Nothing] = <function1>

scala> implicitly[Nothing =:= String with Any]
<console>:11: error: Cannot prove that Nothing =:= String with Any.
       implicitly[Nothing =:= String with Any]
                 ^

scala> implicitly[Any =:= String with Any]
<console>:11: error: Cannot prove that Any =:= String with Any. …
Run Code Online (Sandbox Code Playgroud)

scala algebra

7
推荐指数
0
解决办法
219
查看次数

scala是否具有功能对象的快捷方式?

我正在Scala中编写类,并希望编写一些更新方法,这些方法将返回原始对象的修改版本.我希望课程继续不变.

当然,我可以通过每次显式创建一个适当类型的新对象来完成它,就像在这个例子中所做的那样,但是在继承面前中断,因为在子类的实例上调用方法将改为返回一个实例超类.

FWIW,我来自OCaml的土地,它具有支持功能对象的特殊语法.有关示例,请参见此处

那么,Scala {< x = y >}在OCaml中是否具有等价物?

oop ocaml functional-programming scala

4
推荐指数
1
解决办法
116
查看次数

如何返回对本地分配的struct/object的引用?AKA错误:`foo`的寿命不够长

这是我正在做的简化示例:

struct Foo ...
impl io::Read for Foo ...

fn problem<'a>() -> io::Result<&'a mut io::Read> {
    // foo does not live long enough, because it gets allocated on the stack
    let mut foo = Foo{ v: 42 };
    Ok(&mut foo)
}
Run Code Online (Sandbox Code Playgroud)

Rust操场就在这里.

显然,问题是foo在堆栈上分配,所以如果我们返回对它的引用,引用会比对象更长.

在C中,您可以通过使用malloc在堆上分配对象来解决此问题,并且调用者需要知道free在适当时调用.在GCed语言中,这只会起作用,因为它foo会一直存在,直到没有引用它为止.Rust非常聪明,介于两者之间,所以我不确定我的选择是什么.

我认为一个选项是返回托管指针类型.是Box最合适的?(我找到了生锈指针的指南,但它已经过时了.)

我返回引用的原因是,实际上我需要返回实现的几个结构中的任何一个Read.我想另一种选择是创建一个枚举来包装每个可能的结构.这样可以避免堆分配,但似乎不必要的尴尬.

还有其他我没有想过的选择吗?

pointers rust

4
推荐指数
1
解决办法
110
查看次数

究竟什么被认为是对PureScript库的重大改变?

Rust社区对他们对语义版本控制的解释有相当详细的描述.

PureScript社区拥有此功能,其中包括:

我们应该为初学者编写一个semver教程,特别是它在PureScript中的使用以及我们依赖于-versions的方式.

奇怪的是,查看各种各样的65个随机purescript库,它们都使用^ --versions而不是〜-versions,但我一直无法找到任何更新的文档,我们最近由于期望不匹配而导致我们的构建被破坏.

PureScript社区是否对semver有一个合理一致的解释,特别是关于什么是或不被认为是一个突破性变化?如果是这样,它是什么?

semantic-versioning purescript

4
推荐指数
1
解决办法
131
查看次数

Git 以原子方式推送,仅当目标分支位于预期的 SHA 时

有没有办法只在我上次提取后没有改变的情况下推送到一个分支?

更具体地说,我想删除已经合并的分支,但前提是在我检查分支是否已合并和我推送删除之间没有其他人向它们推送新提交。

git push文档中,我看到它确实支持一个--atomic选项,但该选项用于以原子方式相互更新多个分支,而不是确保我对远程分支的更新相对于其他用户是原子的更新。

即,我想删除远程 git 存储库上的合并分支,而不会删除任何其他人的工作,即使他们正在同时工作。

git

3
推荐指数
1
解决办法
24
查看次数