refactor(tvix/eval): Box Value::String

NixString is *quite* large - like 80 bytes - because of the extra
capacity value for BString and because of the context. We want to keep
Value small since we're passing it around a lot, so let's box the
NixString inside Value::String to save on some memory, and make cloning
ostensibly a little cheaper

Change-Id: I343c8b4e7f61dc3dcbbaba4382efb3b3e5bbabb2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10729
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Aspen Smith 2024-02-01 12:28:29 -05:00 committed by aspen
parent 4c5d9fa356
commit 5f0f4ea374
15 changed files with 69 additions and 72 deletions

View file

@ -14,11 +14,8 @@ fn test_empty_attrs() {
#[test]
fn test_simple_attrs() {
let attrs = NixAttrs::construct(
1,
vec![Value::String("key".into()), Value::String("value".into())],
)
.expect("simple attr construction should succeed");
let attrs = NixAttrs::construct(1, vec![Value::from("key"), Value::from("value")])
.expect("simple attr construction should succeed");
assert!(
matches!(attrs, NixAttrs(AttrsRep::Im(_))),
@ -28,9 +25,9 @@ fn test_simple_attrs() {
#[test]
fn test_kv_attrs() {
let name_val = Value::String("name".into());
let value_val = Value::String("value".into());
let meaning_val = Value::String("meaning".into());
let name_val = Value::from("name");
let value_val = Value::from("value");
let meaning_val = Value::from("meaning");
let forty_two_val = Value::Integer(42);
let kv_attrs = NixAttrs::construct(
@ -64,9 +61,9 @@ fn test_empty_attrs_iter() {
#[test]
fn test_kv_attrs_iter() {
let name_val = Value::String("name".into());
let value_val = Value::String("value".into());
let meaning_val = Value::String("meaning".into());
let name_val = Value::from("name");
let value_val = Value::from("value");
let meaning_val = Value::from("meaning");
let forty_two_val = Value::Integer(42);
let kv_attrs = NixAttrs::construct(
@ -92,11 +89,8 @@ fn test_kv_attrs_iter() {
#[test]
fn test_map_attrs_iter() {
let attrs = NixAttrs::construct(
1,
vec![Value::String("key".into()), Value::String("value".into())],
)
.expect("simple attr construction should succeed");
let attrs = NixAttrs::construct(1, vec![Value::from("key"), Value::from("value")])
.expect("simple attr construction should succeed");
let mut iter = attrs.iter().collect::<Vec<_>>().into_iter();
let (k, v) = iter.next().unwrap();