在学习Rust中,链接列表完全过多,作者提到:
但是,如果我们有一种特殊的枚举:
Run Code Online (Sandbox Code Playgroud)enum Foo { A, B(ContainsANonNullPtr), }空指针优化启动,这消除了标签所需的空间.如果变体是
A,整个枚举设置为全部0.否则,变体是B.这是有效的,因为它B永远不会全部0,因为它包含一个非零指针.
我想作者说的是(假设A是4位,B是4位)
let test = Foo::A
Run Code Online (Sandbox Code Playgroud)
内存布局是
0000 0000
Run Code Online (Sandbox Code Playgroud)
但
let test = Foo::B
Run Code Online (Sandbox Code Playgroud)
内存布局是
some 8 bit non 0 value
Run Code Online (Sandbox Code Playgroud)
究竟在这里优化了什么?两种表示都不总是8位当作者声称时它是什么意思
这意味着
&,&mut,Box,Rc,Arc,Vec,并把在当鲁斯特其他几个重要的类型有没有开销Option
在牛皮纸中,第5.4.2节
如果领导者在提交条目之前崩溃,则未来的领导者将尝试完成复制条目。但是,领导者一旦将其存储在大多数服务器上,就无法立即得出结论,即上一个条目的条目已提交。可能存在这样的情况,旧的日志条目存储在大多数服务器上,但仍可能被将来的领导者覆盖。
作者提到,要避免上述情况
为了消除类似图8中的问题,Raft决不通过对副本数进行计数来提交前项的日志条目。通过计算副本数,仅提交领导者当前任期的日志条目;一旦以这种方式提交了当前术语的条目,则由于“日志匹配”属性而间接提交了所有先前的条目。
但是会不会仍然出现同样的问题?
鉴于作者提供的以下情况
当S5当选领导者时,它只会查看其当前已提交的日志,(term3, index1)这将覆盖term2所有关注者中的条目。
让领导者查看自己的已提交日志如何解决该问题?
终身省略的第三条规则说
如果有多个输入生命周期参数,但其中之一是
&self或&mut self因为这是一种方法,则生命周期self被分配给所有输出生命周期参数。这使得编写方法更好。
这是描述此功能发生了什么的教程
fn announce_and_return_part(&self, announcement: &str) -> &str
Run Code Online (Sandbox Code Playgroud)
有两个输入生命周期,所以 Rust 应用第一个生命周期省略规则并给出它们
&self和announcement它们自己的生命周期。然后,因为其中一个参数是&self,返回类型获得 的生命周期&self,并且所有生命周期都已被考虑在内。
我们可以证明所有生命周期都没有考虑在内,因为它的生命周期可能与announcement不同&self:
struct ImportantExcerpt<'a> {
part: &'a str,
}
impl<'a> ImportantExcerpt<'a> {
fn announce_and_return_part(&self, announcement: &str) -> &str {
println!("Attention please: {}", announcement);
announcement
}
}
fn main() {
let i = ImportantExcerpt { part: "IAOJSDI" };
let test_string_lifetime;
{
let a = String::from("xyz");
test_string_lifetime = i.announce_and_return_part(a.as_str());
} …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码
struct Node {
elem: i32,
next: List,
}
pub enum List {
Empty,
More(Box<Node>),
}
Run Code Online (Sandbox Code Playgroud)
这会导致编译器抱怨:
error[E0446]: private type `Node` in public interface
--> src/main.rs:8:10
|
8 | More(Box<Node>),
| ^^^^^^^^^^ can't leak private type
Run Code Online (Sandbox Code Playgroud)
但是这段代码即使Link是私有的也不会导致错误:
pub struct List {
head: Link,
}
enum Link {
Empty,
More(Box<Node>),
}
struct Node {
elem: i32,
next: Link,
}
Run Code Online (Sandbox Code Playgroud)
造成这种差异的原因是什么?私有结构为什么私有枚举不会导致错误?
在文档中说
从文件中读取所有行作为
Stream。
这是否意味着它正在加载整个文件?例如:
try (Stream<String> stream = Files.lines(Paths.get("myfilename.txt"))) {
stream.forEach(x -> {
Run Code Online (Sandbox Code Playgroud)
如果myfilename是100GB,是否会Files.lines加载整个100GB?
我有多个工作人员处理队列中的作业,在处理过程中,每个工作人员都会打开一个连接而不关闭它。这样做有什么后果吗?
例如
conn = psycopg2.connect(dbname="my_db_name",
user="my_user",
password="my_password",
host="my_host",
port="5432")
cur = conn.cursor()
cur.execute("SELECT * FROM test;")
cur.fetchone()
conn.commit()
# What happen if I omit the line below for each job?
# cur.close()
# conn.close()
Run Code Online (Sandbox Code Playgroud) 我正在尝试调试一个问题,我试图证明如果集群没有重新平衡,每个不同的键只会转到 1 个分区。
所以我想知道对于给定的主题,有没有办法确定密钥发送到哪个分区?
如果我想在可以添加和删除的元素列表中获取唯一计数,有没有办法做到这一点?
例如
add key1
delete key1
add key1
Run Code Online (Sandbox Code Playgroud)
应该给出1的唯一计数
但如果我有一个简单的2 hll方法用于删除,一个用于添加,它返回0?
有没有办法可以在hll中重复键入?
我正在尝试使用 d3 制作进度条,我可以制作条形图
但我想在这样的栏下有范围重叠
这是我的 d3 代码
var my_values = [
{ name: 'London', cost: 8674000},
{ name: 'New York', cost: 8406000},
{ name: 'Sydney', cost: 4293000},
{ name: 'Paris', cost: 2244000},
{ name: 'Beijing', cost: 11510000}
];
d3.selectAll('rect')
.data(my_values)
.attr('height', 5)
.attr('width', function(d) {
var scaleFactor = 0.00004;
return d.cost * scaleFactor;
})
.attr('y', function(d, i) {
return i * 20;
})
Run Code Online (Sandbox Code Playgroud)
有没有办法让条形图的范围显示在每个条形下方,rect以便用户可以观察到基于条形图位置的相对百分比是多少?
编辑:
我想知道如何只创建栏,这里是省略了文本的栏
考虑下面的代码
interface Config {
label?: string;
width?: number;
}
function printLabel(labelledObj: Config) {
console.log(labelledObj.label);
}
let myObj = {not_in_interface: 10, label: "Size 10 Object"};
// No error
printLabel(myObj);
// Will run into error Argument of type '{ not_in_interface: number; label: string; }' is not assignable to parameter of type 'Config'
printLabel({not_in_interface: 10, label: "Size 10 Object"});
Run Code Online (Sandbox Code Playgroud)
差异的原因是什么?
似乎匿名对象会触发excess property checking,而命名对象则不会。
rust ×3
algorithm ×2
apache-kafka ×1
consensus ×1
css ×1
d3.js ×1
distributed ×1
file ×1
hyperloglog ×1
java ×1
javascript ×1
leader ×1
lifetime ×1
psycopg2 ×1
python ×1
raft ×1
typescript ×1