30-NOV-2024

1049 - familiars

I’m thinking about some reorg. Part of the process of building Familiar has made it clear that what I have is quite capable of representing pretty generically any kind of abstract perfect information game, and I’d like to preserve that property and make it more explicit in the organization. I’m thinking of these changes:

  1. Move src/game/ tree to have a src/game/<name of abstract game>/<contents here> structure, so I can represent other games.
  2. Extract the PositionMetadata struct to this new location for the chess subdirectory.
  3. Move board/interface to the top level.
  4. Move compiles_to to the interface section, though presently it’s unused and may remain there, I may leave this on a twig and remove it from the trunk, haven’t decided yet.

Hazel can then have (ideally) a relatively abstract idea of what a game is, and can hopefully lead to some reuse with some of the scaffolding (e.g., whatever alpha-beta/minimax/mcts/nnue bullshit I come up with) with other games. I’m thinking primarily for fairychess, but also even something like nim for testing purposes could be handy. nim is an extremely simple game, so it’s possibly valuable for debugging and testing purposes, remains to be seen.

All of this should also provide a nice place to put a Game structure that can then implement Play, this should be generic with respect to board representation and metadata representation, but canonically should use the PositionMetadata struct for metadata, and any Query + Alter capable rep.

1114 - familiars

As of now, all but #2 is done, tests are passing, so time for a big commit.

2321 - familiars

I’m working on the last move from above, and I’m thinking of some further tweaks I want to consider.

In particular, I think I’m going to want to build an ‘Index’/‘Cache’ system for Log. Eventually I want to be able to refer to different parts of the log by different criteria. For instance, I might want to search the log for a specific turn’s position in a specific variation, I need to find the place in the log where that is, and I may want to cache that position for later use, so I’m starting to think of what that might look like. In particular I suspect something like the familiar system would be used to maintain that index and cache. Ultimately this sort of works as a file format for a database, and hazel acts as an interface to that database.