implementing table optimization (ch30)
This commit is contained in:
parent
031ca59a07
commit
7e216dd382
@ -20,7 +20,7 @@ While reading [Crafting Interpreters](https://craftinginterpreters.com/), after
|
||||
- [x] 27 - Classes and Instances
|
||||
- [x] 28 - Method and Initializers
|
||||
- [x] 29 - Superclasses
|
||||
- [ ] 30 - Optimization
|
||||
- [x] 30 - Optimization (without NaN boxing/NaN tagging)
|
||||
|
||||
## Build & run
|
||||
|
||||
|
@ -10,14 +10,14 @@ pub const UINT8_COUNT = UINT8_MAX + 1;
|
||||
pub const FRAMES_MAX = 64;
|
||||
pub const STACK_MAX = (FRAMES_MAX * UINT8_MAX);
|
||||
|
||||
pub const DEBUG_PRINT_CODE = true;
|
||||
pub const DEBUG_TRACE_EXECUTION = true;
|
||||
pub const DEBUG_PRINT_CODE = false;
|
||||
pub const DEBUG_TRACE_EXECUTION = false;
|
||||
pub const DEBUG_PRINT_INTERNAL_STRINGS = false;
|
||||
pub const DEBUG_PRINT_GLOBALS = false;
|
||||
|
||||
pub const DEBUG_STRESS_GC = true;
|
||||
pub const DEBUG_LOG_GC = false;
|
||||
|
||||
pub const USE_CUSTON_ALLOCATOR = false;
|
||||
pub const USE_CUSTON_ALLOCATOR = true;
|
||||
|
||||
pub const GC_HEAP_GROW_FACTOR = 2;
|
||||
|
@ -61,7 +61,8 @@ pub const Table = struct {
|
||||
|
||||
pub fn find_entry(entries: []Entry, key: *Obj.String) ?*Entry {
|
||||
var tombstone: ?*Entry = null;
|
||||
var index = key.hash % entries.len;
|
||||
// var index = key.hash % entries.len;
|
||||
var index = key.hash & (entries.len - 1);
|
||||
|
||||
while (true) {
|
||||
const entry = &entries[index];
|
||||
@ -84,7 +85,8 @@ pub const Table = struct {
|
||||
return entry;
|
||||
}
|
||||
|
||||
index = (index + 1) % entries.len;
|
||||
// index = (index + 1) % entries.len;
|
||||
index = (index + 1) & (entries.len - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -179,7 +181,8 @@ pub const Table = struct {
|
||||
return null;
|
||||
}
|
||||
|
||||
var index = hash % self.capacity;
|
||||
// var index = hash % self.capacity;
|
||||
var index = hash & (self.capacity - 1);
|
||||
while (true) {
|
||||
const entry = &self.entries[index];
|
||||
if (entry.key == null) {
|
||||
@ -191,7 +194,8 @@ pub const Table = struct {
|
||||
return entry.key;
|
||||
}
|
||||
|
||||
index = (index + 1) % self.capacity;
|
||||
// index = (index + 1) % self.capacity;
|
||||
index = (index + 1) & (self.capacity - 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user