mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 18:02:05 +00:00
* Unwind just the "pseudorandom probing" (whole hash-code-keyed variable stride double hashing) part of recent sets & tables changes (which has still been causing bugs over a month later (e.g., two days ago https://github.com/nim-lang/Nim/issues/13794) as well as still having several "figure this out" implementation question comments in them (see just diffs of this PR). This topic has been discussed in many places: https://github.com/nim-lang/Nim/issues/13393 https://github.com/nim-lang/Nim/pull/13418 https://github.com/nim-lang/Nim/pull/13440 https://github.com/nim-lang/Nim/issues/13794 Alternative/non-mandatory stronger integer hashes (or vice-versa opt-in identity hashes) are a better solution that is more general (no illusion of one hard-coded sequence solving all problems) while retaining the virtues of linear probing such as cache obliviousness and age-less tables under delete-heavy workloads (still untested after a month of this change). The only real solution for truly adversarial keys is a hash keyed off of data unobservable to attackers. That all fits better with a few families of user-pluggable/define-switchable hashes which can be provided in a separate PR more about `hashes.nim`. This PR carefully preserves the better (but still hard coded!) probing of the `intsets` and other recent fixes like `move` annotations, hash order invariant tests, `intsets.missingOrExcl` fixing, and the move of `rightSize` into `hashcommon.nim`. * Fix `data.len` -> `dataLen` problem.
35 lines
574 B
Nim
35 lines
574 B
Nim
discard """
|
|
cmd: "nim c --gc:arc $file"
|
|
nimout: '''(a: true, n: doAssert)
|
|
Table[system.string, trepr.MyType](data: @[], counter: 0)
|
|
nil
|
|
'''
|
|
"""
|
|
import tables
|
|
|
|
type
|
|
NimSym = distinct NimNode
|
|
MyType = tuple
|
|
a: bool
|
|
n: NimSym
|
|
|
|
proc myproc(t: MyType) =
|
|
echo repr(t)
|
|
|
|
proc myproc2(t: MyType) =
|
|
var x = Table[string, t]()
|
|
echo repr(x)
|
|
|
|
proc myproc3(t: MyType) =
|
|
var x: TableRef[string, t]
|
|
echo repr(x)
|
|
|
|
|
|
macro dumpSym(a: typed) =
|
|
myproc((a: true, n: NimSym(a)))
|
|
myproc2((a: true, n: NimSym(a)))
|
|
myproc3((a: true, n: NimSym(a)))
|
|
|
|
dumpSym(doAssert)
|
|
|