Changelog for symbolize-1.0.3.1
Changelog for symbolize
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to the Haskell Package Versioning Policy.
Unreleased
1.0.3.1
- Fix typo in documentation of 
globalSymbolTable 
1.0.3.0
- Swap internals of the global symbol table.
- Before: 
IORef (Data.IntSet (NonEmpty WeakSymbol)) - After: 
MVar (HashTable.Dictionary (HashTable.PrimState IO) U.MVector Int V.MVector NonEmptyWeakSymbol)- Reading/writing to this mutable hashtable from the 
vector-hashtablespackage scales almost linearly - The 
NonEmpty WeakSymbolis replaced by a monomorphised version of the same, reducing memory overhead by one more word per symbol. 
 - Reading/writing to this mutable hashtable from the 
 
 - Before: 
 
1.0.2.4
- Fix too eager creation of weak pointers, resulting in many needless allocations. This greatly reduces memory pressure and improves speed when inserting many symbols in a short amount of time!
 - Only calculate the SipHash hash of an incoming text once when inserting. (c.f. #8)
 
1.0.2.3
- Swaps the internal usage of lists in the global symbol table for 
NonEmptylists, since they will never be empty. (PR #5). Thank you, @Bodigrim! 
1.0.2.2
- Fixing some typos in the documentation (PR #3). Thank you, @Bodigrim!
 
1.0.2.1
- Widen dependency bounds, making the package work with the latest version of 
containersandhashable. 
1.0.2.0
- Adds 
Textual.toShortTextUnsafeand relatedinternUnsafeandinternUnsafe#; these skip UTF-8 validity checks. Very useful when working with trusted serialized data.- rename 
intern##tointernUnsafe##(the old name is marked as deprecated.) 
 - rename 
 - Cleans up 
mkWeakSymbolto be slightly less sketchy in the presence ofaccursedUnutterablePerformIO; thanks @fatho! 
1.0.1.0
- Add 
Data.Datainstance - Add 
Data.Binaryinstance 
1.0.0.4
- Minor documentation improvements
 
1.0.0.3
- Minor documentation improvements
 
1.0.0.2
- Minor documentation improvements
 
1.0.0.1
- Minor documentation improvements
 
1.0.0.0 - 2025-02-17
Completely overhauled implementation:
- The old implementation used 
newtype Symbol = Symbol Word, adding Weak-pointers to thisWord.- This was brittle, since those 
Words would often get inlined, potentially triggering weak-pointer finalization (too) early. - The symbol table had to keep track of mappings in both directions.
 - Int also meant that 
uninternrequired access to the symbol table. 
 - This was brittle, since those 
 - The new implementation uses 
newtype Symbol# = Symbol# ByteArray#, and adds weak pointers to this unliftedByteArray#.- Much safer, this is how 
mkWeakis intended to be used. - The symbol table now only needs to store 'TextHash -> Weak Symbol', and is essentially just a 'weak hashset'. Less than half the memory usage!
 - Much faster 
unintern, as it no longer needs access to the symbol table but is a simple pointer dereference. 
 - Much safer, this is how 
 
0.1.0.1 / 0.1.0.2 - 2023-11-24
Fixes in the README and package description only, for better rendering on Hackage.
0.1.0.0 - 2023-11-24
Initial version