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:
-
Move
src/game/tree to have asrc/game/<name of abstract game>/<contents here>structure, so I can represent other games. - Extract the
PositionMetadatastruct to this new location for thechesssubdirectory. -
Move
board/interfaceto the top level. -
Move
compiles_toto 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.