This implementation has several phases/versions (perhaps abstracted by traits for different implementation/representation choices):
A reference version, implemented the way a competent Rust programmer would implement the analysis, with collections from the standard Rust library, and while/for loops for iteration.
An Adapton version, implemented against traits that abstract over IODyn collections for maps and sets. Some of the finite map representations will come from PRs for https://github.com/cuplv/iodyn.rust/issues/20, of which one is ready now.
Phase 1: Reference implementation, with initial run times
[x] The reference implementation runs over small test examples.
[x] The reference implementation runs on synthetic data, of variable size.
[ ] Plot: The median times for the reference implementation, across different sizes.
Phase 2: Adapton version, with initial run times
[ ] Same steps as above, but for Adapton version, with different finite map representations. By comparing the results, we estimate the overhead of the Adapton version.
Phase 3: Incremental changes, with update times
[ ] Implement a variation of Andersen's that uses a "black list" for edges that are known not to exist
[ ] Experiment with varying the black list randomly, for the reference and Adapton versions
Phase 4: Real datasets; find "statement lists" from real programs
Implement Andersen's algorithm for points-to analysis.
This implementation has several phases/versions (perhaps abstracted by traits for different implementation/representation choices):
A reference version, implemented the way a competent Rust programmer would implement the analysis, with collections from the standard Rust library, and while/for loops for iteration.
An Adapton version, implemented against traits that abstract over IODyn collections for maps and sets. Some of the finite map representations will come from PRs for https://github.com/cuplv/iodyn.rust/issues/20, of which one is ready now.
Phase 1: Reference implementation, with initial run times
Phase 2: Adapton version, with initial run times
Phase 3: Incremental changes, with update times
Phase 4: Real datasets; find "statement lists" from real programs
TODO