872 karma · joined January 30, 2015
Rich has written about the history and motivation behind Clojure here: https://dl.acm.org/doi/pdf/10.1145/3386321
Discussion: https://news.ycombinator.com/item?id=12120752
> During the consing of (9) the pointer offset is compared with the last used offset, LastUsed. If it is the same and less than the block size then it is simply incremented, the new entry made and LastUsed updated. This would have occurred as the integers (6), (7), (8) were added. If on the other-hand the pointer offset is less than the LastUsed a cons is being applied to the tail of a longer list, as is the case with the (9). In this case a new list block must be allocated and its Base-Offset pointer set to the tail contained in the original list.
If I'm understanding correctly, cells are only mutated in place if they are not the tails of other lists (meaning they aren't shared). If the cell is already the tail of another list, the consing is accomplished by creating a new cell to avoid modifying the other list.
Tracking issue for overall progress on the self-hosted compiler: https://github.com/ziglang/zig/issues/89
Zig's New Relationship with LLVM: https://kristoff.it/blog/zig-new-relationship-llvm/
[0] https://crystal-lang.org/reference/syntax_and_semantics/type...
The about page also has some links to more popular articles on the old blog: https://astralcodexten.substack.com/about