std: remove meta.trait
In general, I don't like the idea of std.meta.trait, and so I am providing some guidance by deleting the entire namespace from the standard library and compiler codebase. My main criticism is that it's overcomplicated machinery that bloats compile times and is ultimately unnecessary given the existence of Zig's strong type system and reference traces. Users who want this can create a third party package that provides this functionality. closes #18051
This commit is contained in:
@@ -4,8 +4,6 @@ const assert = debug.assert;
|
||||
const testing = std.testing;
|
||||
const math = std.math;
|
||||
const mem = std.mem;
|
||||
const meta = std.meta;
|
||||
const trait = meta.trait;
|
||||
const autoHash = std.hash.autoHash;
|
||||
const Wyhash = std.hash.Wyhash;
|
||||
const Allocator = mem.Allocator;
|
||||
@@ -2341,13 +2339,13 @@ test "reIndex" {
|
||||
test "auto store_hash" {
|
||||
const HasCheapEql = AutoArrayHashMap(i32, i32);
|
||||
const HasExpensiveEql = AutoArrayHashMap([32]i32, i32);
|
||||
try testing.expect(meta.fieldInfo(HasCheapEql.Data, .hash).type == void);
|
||||
try testing.expect(meta.fieldInfo(HasExpensiveEql.Data, .hash).type != void);
|
||||
try testing.expect(std.meta.fieldInfo(HasCheapEql.Data, .hash).type == void);
|
||||
try testing.expect(std.meta.fieldInfo(HasExpensiveEql.Data, .hash).type != void);
|
||||
|
||||
const HasCheapEqlUn = AutoArrayHashMapUnmanaged(i32, i32);
|
||||
const HasExpensiveEqlUn = AutoArrayHashMapUnmanaged([32]i32, i32);
|
||||
try testing.expect(meta.fieldInfo(HasCheapEqlUn.Data, .hash).type == void);
|
||||
try testing.expect(meta.fieldInfo(HasExpensiveEqlUn.Data, .hash).type != void);
|
||||
try testing.expect(std.meta.fieldInfo(HasCheapEqlUn.Data, .hash).type == void);
|
||||
try testing.expect(std.meta.fieldInfo(HasExpensiveEqlUn.Data, .hash).type != void);
|
||||
}
|
||||
|
||||
test "sort" {
|
||||
@@ -2434,12 +2432,12 @@ pub fn getAutoHashFn(comptime K: type, comptime Context: type) (fn (Context, K)
|
||||
return struct {
|
||||
fn hash(ctx: Context, key: K) u32 {
|
||||
_ = ctx;
|
||||
if (comptime trait.hasUniqueRepresentation(K)) {
|
||||
return @as(u32, @truncate(Wyhash.hash(0, std.mem.asBytes(&key))));
|
||||
if (std.meta.hasUniqueRepresentation(K)) {
|
||||
return @truncate(Wyhash.hash(0, std.mem.asBytes(&key)));
|
||||
} else {
|
||||
var hasher = Wyhash.init(0);
|
||||
autoHash(&hasher, key);
|
||||
return @as(u32, @truncate(hasher.final()));
|
||||
return @truncate(hasher.final());
|
||||
}
|
||||
}
|
||||
}.hash;
|
||||
@@ -2450,7 +2448,7 @@ pub fn getAutoEqlFn(comptime K: type, comptime Context: type) (fn (Context, K, K
|
||||
fn eql(ctx: Context, a: K, b: K, b_index: usize) bool {
|
||||
_ = b_index;
|
||||
_ = ctx;
|
||||
return meta.eql(a, b);
|
||||
return std.meta.eql(a, b);
|
||||
}
|
||||
}.eql;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user