packages feed

symbolize-1.0.0.2: CHANGELOG.md

# Changelog for `symbolize`

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to the
[Haskell Package Versioning Policy](https://pvp.haskell.org/).

## Unreleased

## 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 this `Word`.
  - This was brittle, since those `Word`s 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 `unintern` required access to the symbol table.
- The new implementation uses `newtype Symbol# = Symbol# ByteArray#`, and adds weak pointers to this unlifted `ByteArray#`.
  - Much safer, this is how `mkWeak` is 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.

## 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