Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce and use a red-black tree implementation for sets #3261

Merged
merged 18 commits into from
Apr 24, 2024

Conversation

mtzguido
Copy link
Member

The implementation of FStar.Compiler.Set is based on lists, and is very slow. We unfortunately rely on this fact in some places, such as for keeping the order of the generalized universe variables (iirc) and we cannot just switch the implementation.

However, now with functional dependencies (#3260), we can abstract the set implementation into a setlike class, so clients can be written parametrically in the set implementation, and many can coexist.

This PR introduces an RBSet module with an implementation of sets based on red-black trees, and updates some old code to use this instead of the old set (which is now renamed FlatSet).

Further PRs should change instances of FlatSet.t to RBSet.t. I'm not trying to switch all of them right now. No big performance improvement yet.

@mtzguido mtzguido enabled auto-merge April 24, 2024 17:18
@mtzguido mtzguido merged commit 15c7ee7 into FStarLang:master Apr 24, 2024
2 checks passed
@mtzguido mtzguido deleted the rbset branch April 24, 2024 17:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant