Zarutian_HTC has quit [Remote host closed the connection]
sts-q has joined #forth
dave0 has joined #forth
_whitelogger has joined #forth
proteus-guy has quit [Ping timeout: 260 seconds]
proteus-guy has joined #forth
gravicappa has quit [Ping timeout: 256 seconds]
gravicappa has joined #forth
dave0 has quit [Ping timeout: 256 seconds]
_whitelogger has joined #forth
proteus-guy has quit [Ping timeout: 264 seconds]
pointfree has quit [Quit: Connection closed for inactivity]
hosewiejacke has joined #forth
<veltas>
Does anyone here have experience with 4 byte name fields, i.e. only 3 characters and length are stored, and how much of a pain is it?
<veltas>
To do the same thing would it be totally mad to store a 32-bit hash instead?
hosewiejacke has quit [Ping timeout: 256 seconds]
<patrickg>
it has the advantage of using more bits of these 4 bytes. 3 characters means that ~6 bits go unused (and the length byte is also very unevenly distributed), a problem you likely wouldn't have with a hash function.
<MrMobius>
seems like it would be harder for the user though if two completely different words coincidently got the same hash and it inserted the wrong one
<veltas>
MrMobius: I think you need to have a redefinition warning, and try and figure it out based on SEE
<veltas>
But the chances of a collision are e.g. extremely low with a decent 31-bit hash and less than 10000 definitions
<veltas>
In the choice between the 1-byte length + 3-byte prefix encoding and hash encoding, you're wayyyy less likely to get collisions with the hash
<MrMobius>
veltas, so if you tried to make a new word that conflicted with an existing hash, it would tell you to use a different name for the new word?
<veltas>
I think for an interactive forth it would give a warning, like just print "<name> is a redefinition" or something
<MrMobius>
i guess you couldnt tell the difference between redefinitions and different words with the same hash
<veltas>
Nope
<MrMobius>
you must be running on an ultra tiny system :)
<veltas>
If you have the source handy and use SEE on the word you were trying to define, you could figure it out
<MrMobius>
hmm, if you had defined the word earlier the same day
<MrMobius>
not if you hadnt defined it or its built in or its been a year since you looked at it
<veltas>
Well the current system I'm working on has 48KB for code+data
<veltas>
If you did "SEE <newname>" and saw ": <newname> DROP ;" or something you'd be a bit out of luck lol
<veltas>
Well you could figure it out with FIND
<veltas>
It's a constraint but you'd be extremely unlucky to get a collision
gravicappa has quit [Ping timeout: 246 seconds]
gravicappa has joined #forth
gravicappa has quit [Ping timeout: 264 seconds]
hosewiejacke has joined #forth
hosewiejacke has quit [Ping timeout: 256 seconds]
cantstanya has quit [*.net *.split]
cantstanya has joined #forth
lispmacs[work] has quit [Ping timeout: 240 seconds]