Traits

“Ingredients” are the bits of data that are stored within the database to make salsa work. Each jar will define some number of ingredients that it requires. Each use salsa macro (e.g., #[salsa::tracked], #[salsa::interned]) adds one or more ingredients to the jar struct that together are used to create the salsa concept. For example, a tracked struct defines a crate::interned::InternedIngredient to store its identity plus crate::function::FunctionIngredient values to store its fields. The exact ingredients are determined by IngredientsFor implementations generated by the macro.
Defines a const indicating if an ingredient needs to be reset each round. This const probably should be a member of Ingredient trait but then Ingredient would not be dyn-safe.