avhz / RustQuant

Rust library for quantitative finance.
https://avhz.github.io
Apache License 2.0
1.13k stars 131 forks source link

Decrease compile time. #26

Open avhz opened 1 year ago

avhz commented 1 year ago

Compile time increased quite substantially after adding Polars as a dependency. Should look into reducing the compile time a bit if possible.

avhz commented 1 year ago

Have made polars crate part of an opt-in feature.

Harshal662 commented 1 year ago

we can remove https://github.com/avhz/RustQuant/blob/634735dd5d860af26f5e31091aca44ee69ea2430/Cargo.toml#L45C16-L45C16

and edit data = ["dep:polars/default"] https://github.com/avhz/RustQuant/blob/634735dd5d860af26f5e31091aca44ee69ea2430/Cargo.toml#L56

avhz commented 1 year ago

The way I have it currently reduces the number of dependencies compiled from 400+ to around 270-280.

Are you saying we should remove optional = true and change polars to a default feature ? This would increase the dependencies compiled to 400+ again wouldn't it ?

Harshal662 commented 1 year ago

Ohh My bad we can keep it as true and data = [] ( empty) , the data feature is disabled by default, meaning Polars will not be included in the compilation process unless explicitly enabled using the --features data flag or specifying features = ["data"] in the Cargo.toml file.

avhz commented 1 year ago

But polars is already not included unless data is specified as a feature.

Why do you want to have data = [] instead of data = ["dep:polars"] ?

kelvincesar commented 1 month ago

Hello! Came here by the first good issue tag.

Is this still a problem? Maybe separate the project into smaller crates could improve the compile time

avhz commented 1 month ago

@kelvincesar thanks for the comment :) I have considered doing this but am worried about running into issues with the orphan rules.

kelvincesar commented 1 month ago

@avhz you're right, that can be a problem. In this case we would have to create new types around the existing ones plus replicate their methods (https://doc.rust-lang.org/book/ch19-03-advanced-traits.html#using-the-newtype-pattern-to-implement-external-traits-on-external-types). I don't know if this make sense