difftreelog
refactor drop im-rc
in: master
Not worth it. It gives some improvements in some benchmarks, but at the cost of much complex memory layout, I do not consider that a win
5 files changed
Cargo.lockdiffbeforeafterboth162source = "registry+https://github.com/rust-lang/crates.io-index"162source = "registry+https://github.com/rust-lang/crates.io-index"163checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"163checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"164165[[package]]166name = "bitmaps"167version = "2.1.0"168source = "registry+https://github.com/rust-lang/crates.io-index"169checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2"170dependencies = [171 "typenum",172]173164174[[package]]165[[package]]175name = "block-buffer"166name = "block-buffer"701source = "registry+https://github.com/rust-lang/crates.io-index"692source = "registry+https://github.com/rust-lang/crates.io-index"702checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"693checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"703704[[package]]705name = "im-rc"706version = "15.1.0"707source = "registry+https://github.com/rust-lang/crates.io-index"708checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe"709dependencies = [710 "bitmaps",711 "rand_core 0.6.4",712 "rand_xoshiro",713 "refpool",714 "sized-chunks",715 "typenum",716 "version_check",717]718694719[[package]]695[[package]]720name = "indexmap"696name = "indexmap"829 "drop_bomb",805 "drop_bomb",830 "educe",806 "educe",831 "hi-doc",807 "hi-doc",832 "im-rc",833 "insta",808 "insta",834 "jrsonnet-gcmodule",809 "jrsonnet-gcmodule",835 "jrsonnet-interner",810 "jrsonnet-interner",881source = "registry+https://github.com/rust-lang/crates.io-index"856source = "registry+https://github.com/rust-lang/crates.io-index"882checksum = "21dd97b40cbfb2043094219f95d96519858ba1aee4e8260eb048a1774832a517"857checksum = "21dd97b40cbfb2043094219f95d96519858ba1aee4e8260eb048a1774832a517"883dependencies = [858dependencies = [884 "im-rc",885 "jrsonnet-gcmodule-derive",859 "jrsonnet-gcmodule-derive",886]860]8878611356checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"1330checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"1357dependencies = [1331dependencies = [1358 "rand_chacha",1332 "rand_chacha",1359 "rand_core 0.9.5",1333 "rand_core",1360]1334]136113351362[[package]]1336[[package]]1366checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"1340checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"1367dependencies = [1341dependencies = [1368 "ppv-lite86",1342 "ppv-lite86",1369 "rand_core 0.9.5",1343 "rand_core",1370]1344]13711372[[package]]1373name = "rand_core"1374version = "0.6.4"1375source = "registry+https://github.com/rust-lang/crates.io-index"1376checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"137713451378[[package]]1346[[package]]1379name = "rand_core"1347name = "rand_core"1384 "getrandom 0.3.4",1352 "getrandom 0.3.4",1385]1353]13861387[[package]]1388name = "rand_xoshiro"1389version = "0.6.0"1390source = "registry+https://github.com/rust-lang/crates.io-index"1391checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa"1392dependencies = [1393 "rand_core 0.6.4",1394]139513541396[[package]]1355[[package]]1397name = "random_color"1356name = "random_color"1431 "crossbeam-utils",1390 "crossbeam-utils",1432]1391]14331434[[package]]1435name = "refpool"1436version = "0.4.3"1437source = "registry+https://github.com/rust-lang/crates.io-index"1438checksum = "369e86b80fa7dc8c561dd9613a5bf25c59d2d3073cd66c47fd9e39802f0ecb58"143913921440[[package]]1393[[package]]1441name = "regex"1394name = "regex"1640source = "registry+https://github.com/rust-lang/crates.io-index"1593source = "registry+https://github.com/rust-lang/crates.io-index"1641checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"1594checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"16421643[[package]]1644name = "sized-chunks"1645version = "0.6.5"1646source = "registry+https://github.com/rust-lang/crates.io-index"1647checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e"1648dependencies = [1649 "bitmaps",1650 "refpool",1651 "typenum",1652]165315951654[[package]]1596[[package]]1655name = "smallvec"1597name = "smallvec"Cargo.tomldiffbeforeafterboth--- a/Cargo.toml
+++ b/Cargo.toml
@@ -22,7 +22,7 @@
jrsonnet-cli = { path = "./crates/jrsonnet-cli", version = "0.5.0-pre98" }
jrsonnet-types = { path = "./crates/jrsonnet-types", version = "0.5.0-pre98" }
jrsonnet-formatter = { path = "./crates/jrsonnet-formatter", version = "0.5.0-pre98" }
-jrsonnet-gcmodule = { version = "0.4.4", features = ["im-rc"] }
+jrsonnet-gcmodule = { version = "0.4.4" }
# Diagnostics.
# hi-doc is my library, which handles text formatting very well, but isn't polished enough yet
# Previous implementation was based on annotate-snippets, which I don't like for many reasons.
crates/jrsonnet-evaluator/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-evaluator/Cargo.toml
+++ b/crates/jrsonnet-evaluator/Cargo.toml
@@ -76,7 +76,6 @@
"Hash",
"PartialEq",
] }
-im-rc = { version = "15.1.0", features = ["pool"] }
smallvec = "1.15.1"
drop_bomb.workspace = true
crates/jrsonnet-evaluator/src/obj/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/obj/mod.rs
+++ b/crates/jrsonnet-evaluator/src/obj/mod.rs
@@ -11,7 +11,6 @@
};
use educe::Educe;
-use im_rc::{Vector, vector};
use jrsonnet_gcmodule::{Acyclic, Cc, Trace, Weak, cc_dyn};
use jrsonnet_interner::IStr;
use jrsonnet_ir::Span;
@@ -97,7 +96,7 @@
// 0 - add
// 12 - visibility
-#[derive(Clone, Copy)]
+#[derive(Clone, Copy, Acyclic)]
pub struct ObjFieldFlags(u8);
impl ObjFieldFlags {
fn new(add: bool, visibility: Visibility) -> Self {
@@ -136,7 +135,6 @@
#[allow(clippy::module_name_repetitions)]
#[derive(Debug, Trace)]
pub struct ObjMember {
- #[trace(skip)]
flags: ObjFieldFlags,
original_index: FieldIndex,
pub invoke: MaybeUnbound,
@@ -240,7 +238,7 @@
#[derive(Trace, Educe)]
#[educe(Debug)]
struct ObjValueInner {
- cores: Vector<CcObjectCore>,
+ cores: Vec<CcObjectCore>,
assertions_ran: Cell<bool>,
has_assertions: bool,
value_cache: RefCell<FxHashMap<(IStr, CoreIdx), CacheValue>>,
@@ -268,7 +266,7 @@
thread_local! {
static EMPTY_OBJ: ObjValue = ObjValue(Cc::new(ObjValueInner {
- cores: vector![],
+ cores: vec![],
assertions_ran: Cell::new(true),
has_assertions: false,
value_cache: RefCell::default(),
@@ -495,7 +493,10 @@
#[must_use]
pub fn extend_from(&self, sup: Self) -> Self {
- let cores = sup.0.cores.clone() + self.0.cores.clone();
+ let mut cores = Vec::with_capacity(sup.0.cores.len() + self.0.cores.len());
+ cores.extend(sup.0.cores.iter().cloned());
+ cores.extend(self.0.cores.iter().cloned());
+
let has_assertions = sup.0.has_assertions || self.0.has_assertions;
ObjValue(Cc::new(ObjValueInner {
cores,
crates/jrsonnet-evaluator/src/obj/oop.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/obj/oop.rs
+++ b/crates/jrsonnet-evaluator/src/obj/oop.rs
@@ -4,7 +4,6 @@
ops::ControlFlow,
};
-use im_rc::Vector;
use jrsonnet_gcmodule::{Cc, Trace};
use jrsonnet_ir::IStr;
use rustc_hash::{FxHashMap, FxHashSet};
@@ -118,7 +117,7 @@
#[allow(clippy::module_name_repetitions)]
pub struct ObjValueBuilder {
- sup: Vector<CcObjectCore>,
+ sup: Vec<CcObjectCore>,
has_assertions: bool,
new: OopObject,
@@ -130,7 +129,7 @@
}
pub fn with_capacity(capacity: usize) -> Self {
Self {
- sup: Vector::new(),
+ sup: Vec::new(),
has_assertions: false,
new: OopObject::new(FxHashMap::with_capacity(capacity), None),
next_field_index: FieldIndex::default(),
@@ -141,7 +140,7 @@
}
pub fn with_super(&mut self, super_obj: ObjValue) -> &mut Self {
self.has_assertions |= super_obj.0.has_assertions;
- self.sup = super_obj.0.cores.clone();
+ self.sup.clone_from(&super_obj.0.cores);
self
}
@@ -178,20 +177,19 @@
pub fn extend_with_core(&mut self, core: impl ObjectCore) {
self.commit();
- self.sup.push_back(CcObjectCore::new(core));
+ self.sup.push(CcObjectCore::new(core));
}
fn commit(&mut self) {
if !self.new.is_empty() {
- self.sup
- .push_back(CcObjectCore::new(mem::take(&mut self.new)));
+ self.sup.push(CcObjectCore::new(mem::take(&mut self.new)));
}
self.next_field_index = FieldIndex::default();
}
pub fn with_fields_omitted(&mut self, omit: FxHashSet<IStr>) {
self.commit();
- self.sup.push_back(CcObjectCore::new(OmitFieldsCore {
+ self.sup.push(CcObjectCore::new(OmitFieldsCore {
omit,
prev_layers: self.sup.len(),
}));