alpha-asp / Alpha

A lazy-grounding Answer-Set Programming system
BSD 2-Clause "Simplified" License
58 stars 10 forks source link

Refactoring: Handle Term interning implementation in a single place #343

Open madmike200590 opened 2 years ago

madmike200590 commented 2 years ago

Currently, all Term implementations have their own private static Interner which provides a per-class instance cache. By interning, we ensure that for all terms t1 and t2, it holds that t1.equals(t2) iff t1 == t2, i.e. we save memory by avoiding multiple equivalent instances. Since this is a rather essential feature in order to keep Alpha's memory footprint manageable, it should be ensured that every implementation of Term follows this pattern. It would therefore make sense to have interning handled in a central place (constructor of AbstractTerm?) rather than copy the same code in every Term implementation. (Note: Maybe we could also do something "fancy" like aspect-oriented intercepts of constructor calls, etc.)