小编Jal*_*Jal的帖子

Rust中的空指针优化是什么?

学习Rust中,链接列表完全过多,作者提到:

但是,如果我们有一种特殊的枚举:

enum Foo {
    A,
    B(ContainsANonNullPtr),
}
Run Code Online (Sandbox Code Playgroud)

空指针优化启动,这消除了标签所需的空间.如果变体是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

rust

10
推荐指数
3
解决办法
1634
查看次数

筏如何处理上一个提交的条目?

牛皮纸中,第5.4.2节

如果领导者在提交条目之前崩溃,则未来的领导者将尝试完成复制条目。但是,领导者一旦将其存储在大多数服务器上,就无法立即得出结论,即上一个条目的条目已提交。可能存在这样的情况,旧的日志条目存储在大多数服务器上,但仍可能被将来的领导者覆盖。

作者提到,要避免上述情况

为了消除类似图8中的问题,Raft决不通过对副本数进行计数来提交前项的日志条目。通过计算副本数,仅提交领导者当前任期的日志条目;一旦以这种方式提交了当前术语的条目,则由于“日志匹配”属性而间接提交了所有先前的条目。

但是会不会仍然出现同样的问题?

鉴于作者提供的以下情况

边缘情况

S5当选领导者时,它只会查看其当前已提交的日志,(term3, index1)这将覆盖term2所有关注者中的条目。

让领导者查看自己的已提交日志如何解决该问题?

algorithm leader distributed consensus raft

6
推荐指数
1
解决办法
783
查看次数

生命周期省略的第三条规则是否涵盖了结构实现的所有情况?

终身省略的第三条规则说

如果有多个输入生命周期参数,但其中之一是&self&mut self因为这是一种方法,则生命周期self被分配给所有输出生命周期参数。这使得编写方法更好。

这是描述此功能发生了什么的教程

fn announce_and_return_part(&self, announcement: &str) -> &str
Run Code Online (Sandbox Code Playgroud)

有两个输入生命周期,所以 Rust 应用第一个生命周期省略规则并给出它们&selfannouncement它们自己的生命周期。然后,因为其中一个参数是&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)

lifetime rust

6
推荐指数
1
解决办法
202
查看次数

为什么"不能泄漏私人类型"只适用于结构而不是枚举?

请考虑以下代码

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)

造成这种差异的原因是什么?私有结构为什么私有枚举不会导致错误?

rust

6
推荐指数
1
解决办法
874
查看次数

是否Files.lines将所有行读入内存?

文档中

从文件中读取所有行作为Stream

这是否意味着它正在加载整个文件?例如:

try (Stream<String> stream = Files.lines(Paths.get("myfilename.txt"))) {
        stream.forEach(x -> {
Run Code Online (Sandbox Code Playgroud)

如果myfilename100GB,是否会Files.lines加载整个100GB

java file

6
推荐指数
2
解决办法
1057
查看次数

在 psycopg2 中打开连接而不关闭它的后果是什么?

我有多个工作人员处理队列中的作业,在处理过程中,每个工作人员都会打开一个连接而不关闭它。这样做有什么后果吗?

例如

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)

python psycopg2

5
推荐指数
0
解决办法
858
查看次数

如何检查kafka中键分配给哪个分区?

我正在尝试调试一个问题,我试图证明如果集群没有重新平衡,每个不同的键只会转到 1 个分区。

所以我想知道对于给定的主题,有没有办法确定密钥发送到哪个分区?

apache-kafka kafka-consumer-api

5
推荐指数
1
解决办法
4877
查看次数

是否可以对hyperloglog进行重复数据删除,以便添加和删除元素将产生相对正确的唯一计数?

如果我想在可以添加和删除的元素列表中获取唯一计数,有没有办法做到这一点?

例如

add key1
delete key1
add key1
Run Code Online (Sandbox Code Playgroud)

应该给出1的唯一计数

但如果我有一个简单的2 hll方法用于删除,一个用于添加,它返回0?

有没有办法可以在hll中重复键入?

algorithm hyperloglog

5
推荐指数
1
解决办法
137
查看次数

如何在d3中有2个矩形重叠以制作进度条?

我正在尝试使用 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以便用户可以观察到基于条形图位置的相对百分比是多少?

编辑:

我想知道如何只创建栏,这里是省略了文本的栏

在此处输入图片说明

javascript css d3.js

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

在类型检查中传递命名对象和匿名对象之间的差异

考虑下面的代码

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,而命名对象则不会。

typescript

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