小编csh*_*rad的帖子

可执行文件实际上需要目标目录中的哪些文件?

在编译我的程序'zagir'之后,release文件夹的大小超过200MiB,这对于我编写的程序来说是荒谬的.所以,我试图检查是否只有'zagir'可执行文件是孤立运行的.

但令人困惑的是,release文件夹还包含libzagir.rlib文件以及.d文件和一堆其他文件夹.

  1. 究竟是什么?
  2. 他们真的需要吗?
  3. 当这些文件被忽略时,我会在执行期间得到错误吗?
  4. 我应该为完整的可执行文件捆绑哪些文件?

Cargo.toml

[package]
authors = ["Sharad Chand"]
name = "zagir"
version = "0.1.0"

[dependencies]
bcrypt = "0.1.3"
dotenv = "0.10.1"
image = "0.17.0"
log = "0.3.8"
r2d2 = "0.7.3"
r2d2-diesel = "0.16.0"
rand = "0.3.16"
rocket = "0.3.2"
rocket_codegen = "0.3.2"
serde = "1.0.11"
serde_derive = "1.0.11"
serde_json = "1.0.2"
validator = "0.6.0"
validator_derive = "0.6.0"

[dependencies.bigdecimal]
features = ["serde"]
version = "0.0.10"

[dependencies.chrono]
features = ["serde"]
version = "0.4.0"

[dependencies.diesel]
features = [
    "mysql", …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo

10
推荐指数
1
解决办法
979
查看次数

如何在过程宏中提供有用的编译器错误?

我正在使用proc_macro和设计自定义HTML语法分析器syn.一个样品:

#[derive(Debug)]
struct BlockElement {
    stag: Ident,
    child: Vec<Element>,
    ctag: Ident
}

impl Synom for BlockElement {
     named!(parse -> Self, do_parse!(
         punct!(<) >>
         stag: syn!(Ident) >>
         punct!(>) >>
         child: syn!(ElementList) >>
         punct!(<) >>
         punct!(/) >>
         ctag: syn!(Ident) >>
         punct!(>) >>
         (BlockElement { stag, child: child.inner, ctag })
     ));
 }
Run Code Online (Sandbox Code Playgroud)

虽然我知道Span在解析之后如何使用错误,我无法在解析过程中弄清楚如何使用错误.它只是出错了failed to parse anything.如何确定解析失败的位置并给出适当的错误?

rust rust-macros

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

此代码是否遵循观察者模式?

我试图将观察者模式应用于Rust.与其他GC语言(如JS或Java)一样,我想Observable在事件中发送对数据的引用Observer.但是由于借用检查器,编译器继续让我头疼.因此,我学会了使用,Rc但它没有让我改变价值,Observable然后我使用了一个RefCell内部可变性,这是我想要的.霍拉我说.但后来我意识到Rc导致从不同地方引用单个位置的原因导致事件系统Observer过时.所以在删除事件方法之后Observer,我得到了:

struct Observable<T: Clone> {
    value: Rc<RefCell<T>>
}

impl<T: Clone> Observable<T> {
    fn new(value: T) -> Observable<T> {
        Observable {
            value: Rc::new(RefCell::new(value))
        }
    }

    fn set_value(&mut self, value: T) {
        *self.value.borrow_mut() = value;
    }

    fn register(&mut self) -> Observer<T> {
        Observer::new(self.value.clone())
    }
}

struct Observer<T: Clone> {
    value: Rc<RefCell<T>>
}

impl<T: Clone> Observer<T> {
    fn new(value: Rc<RefCell<T>>) -> Observer<T> {
        Observer {
            value
        } …
Run Code Online (Sandbox Code Playgroud)

rust observer-pattern

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

使用Vec <T>而不是选项<Vec <T >>有什么含义?

我正在创建很多结构,Option<Vec<T>>而不是Vec<T>在不需要时不分配内存.我抬头一看这个答案对两者的大小VecOption<Vec>>两者都是相同的.

所以我的问题是这个.我应该使用Vec<T>并检查其.len()效果是否相同或继续使用Option?或者他们是等同的?

最初我也是一名JavaScript开发人员.并且偏执过分配或不分配.

rust

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

如何使用普通的struct构造函数创建具有关联类型的值?

我正在尝试创建一个T使用P::Childstruct Pwhere 初始化struct的宏P: Parent<Child = T>.

macro_rules! init {
    ($t:tt, { $( $k:ident =>  $v:expr ),* }) => {
        <$t as Parent>::Child {
            $( $k: $v ),*
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

这个宏将props作为一个map传递给struct的给定构造函数.扩展,它看起来像这样:

#[derive(Debug)]
struct Apple {
    a: i32
}

trait Parent {
    type Child;
}

struct Mango;

impl Parent for Mango {
    type Child = Apple;
}

fn main() {
    let a = <Mango as Parent>::Child {
        a: 4
    };
    println!("{:?}", a);
}
Run Code Online (Sandbox Code Playgroud)

编译它有错误: …

rust

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

GKE Ingress-GCE是否支持压缩?

我的后端,在Rocket(Rust)中,没有内置压缩.因此,它依赖于代理来压缩它.虽然nginx入口控制器支持它,但我认为默认的是否也有它,因为它具有高可用性.

如果没有,那么我应该怎么设置?

google-cloud-platform kubernetes google-kubernetes-engine

2
推荐指数
1
解决办法
870
查看次数

如何为用属性本身注释的结构体的字段提供属性?

我想实现proc_macro_attribute这样一个:

#[component]
struct Div {
    #[prop]
    color: String,
    clicked: bool
}
Run Code Online (Sandbox Code Playgroud)

其中两个属性的 impl 是:

#[proc_macro_attribute]
pub fn component(_attribute: TokenStream, input: TokenStream) -> TokenStream {
    modify_struct_and_generate_props_struct(input)
}

// Just as a placeholder attribute for the component attribute to work on.
#[proc_macro_attribute]
pub fn prop(_attribute: TokenStream, input: TokenStream) -> TokenStream {
    input
}
Run Code Online (Sandbox Code Playgroud)

我可以使用自定义派生来完成此操作,但这不是我想要在这里实现的目标,因为任何带有注释的结构都#[component]将被修改以包含其他字段。sub#[prop]属性用于创建仅由 prop 字段组成的新结构。

proc_macro_attribute支持在其上下文中使用的其他子属性,我尝试实现一个单独的属性来缓解这种情况。这会导致编译器出错:

#[component]
struct Div {
    #[prop]
    color: String,
    clicked: bool
}
Run Code Online (Sandbox Code Playgroud)

添加此功能与#![feature(proc_macro)].

我已经在GitHub上定义了问题。你可以查一下它,看看我正在努力实现什么目标。

难道就没有其他可能的出路吗?

如果这不是它本来的样子,我还向 …

rust

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