Rust中的<-
运算符/表达式是什么?您可以找到the symbol here。
我正好在查看描述Rust中表达式和操作的页面。我没有在Rust中编程,所以我问了一个朋友,他是生锈的,这个符号是什么,但即使他不知道它是什么。
答案 0 :(得分:12)
<-
运算符不是稳定Rust的一部分。至少还没有。
有一个RFC建议使用<-
语法将新对象直接写入内存中的特定位置,作为another RFC的替代方案,提出in
。这是(当前不稳定的)box
语法的一般化,它允许您直接分配给堆,而无需临时堆栈分配。
目前,在没有使用unsafe
代码的情况下,没有办法实现这一点,并且通常您需要先在堆栈上进行分配。在this RFC中讨论了潜在问题,这是相关RFC链中的第一个,并给出了背景动机,但关键原因是:
在C ++中,有一个名为&#34; placement new&#34;的功能,它通过让你向new
提供一个参数来实现这一点,// For comparison, a "normal new", allocating on the heap
string *foo = new string("foo");
// Allocate a buffer
char *buffer = new char[100];
// Allocate a new string starting at the beginning of the buffer
string *bar = new (buffer) string("bar");
是一个现有的指针,可以开始写入。例如:
<-
从我可以收集的内容来看,上面的C ++示例在Rust中可能看起来像这样// Memory allocated on heap (with temporary stack allocation in the process)
let foo = Box::new(*b"foo");
// Or, without the stack allocation, when box syntax stabilises:
let foo = box *b"foo";
// Allocate a buffer
let mut buffer = box [0u8; 100];
// Allocate a new bytestring starting at the beginning of the buffer
let bar = buffer[0..3] <- b"bar";
:
b"bar"
我不希望这个完全代码按原样编译,即使实现了放置功能。但请注意,Rust目前无法执行最后一行尝试的操作:直接在缓冲区的开头分配unsafe
,而不先在堆栈上进行分配。在Rust现在,没有办法做到这一点。即使// Note that b"bar" is allocated first on the stack before being copied
// into the buffer
buffer[0..3].clone_from_slice(&b"bar"[0..3]);
let bar = &buffer[0..3];
代码也无法帮助您。您仍然必须首先在堆栈上进行分配,然后将其克隆到缓冲区:
box
box
语法也不会对此有所帮助。这将分配新的堆内存,然后您仍然必须将数据复制到缓冲区。
对于在堆上分配新对象时避免临时堆栈分配的简单情况,<-
语法将在稳定时解决。 Rust将来需要解决更复杂的案例,但尚不确定lapply(x, function(xi) xi[!sapply(xi, function(xii) all(xii==""))])
是否会出现语法。