diff --git a/benches/programs/map_literal_build.ndc b/benches/programs/map_literal_build.ndc new file mode 100644 index 0000000..e62ea3d --- /dev/null +++ b/benches/programs/map_literal_build.ndc @@ -0,0 +1,11 @@ +let total = 0; +for _ in 0..50_000 { + let m = %{ + 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, + 9: 9, 10: 10, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16, + 17: 17, 18: 18, 19: 19, 20: 20, 21: 21, 22: 22, 23: 23, 24: 24, + 25: 25, 26: 26, 27: 27, 28: 28, 29: 29, 30: 30, 31: 31, 32: 32 + }; + total += m[1]; +} +print(total); diff --git a/ndc_vm/src/vm.rs b/ndc_vm/src/vm.rs index b02c5ff..d682dd6 100644 --- a/ndc_vm/src/vm.rs +++ b/ndc_vm/src/vm.rs @@ -351,7 +351,7 @@ impl Vm { None }; let flat = self.stack.split_off(self.stack.len() - pairs * 2); - let mut map = HashMap::new(); + let mut map = HashMap::with_capacity(pairs); let mut flat_iter = flat.into_iter(); for _ in 0..pairs { let key = flat_iter.next().expect("expected key");