Skip to content

Add notes to Dictionary, HashMap and Array. #10914

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

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Ivorforce
Copy link
Member

@Ivorforce Ivorforce commented May 1, 2025

I noticed these after #10873 was merged:

  • HashMap and Dictionary do preserve insertion order.
  • Dictionary and Array use HashMap and Vector internally, respectively.
  • I think we should link to the types in the FAQ entry where people may look for them.

Add a link to Godot's container types to relevant FAQ entry.
@Ivorforce Ivorforce added enhancement area:contributing Issues and PRs related to the Contributing/Development section of the documentation cherrypick:4.4 labels May 1, 2025
@Ivorforce Ivorforce requested a review from Calinou May 1, 2025 12:34
@Ivorforce Ivorforce added this to the 4.5 milestone May 1, 2025
@@ -99,7 +102,7 @@ scripting API.
| | | This means it's generally slower but can be copied around almost for free. |
| | | The performance benefits of ``VSet`` aren't established, so prefer using other types. |
+------------------------+--------------------------+---------------------------------------------------------------------------------------+
| ``HashMap`` | ``std::unordered_map`` | **Use this as the "default" map type.** Does not preserve insertion order. |
| ``HashMap`` | ``std::unordered_map`` | **Use this as the "default" map type.** Preserves insertion order. |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is std::unordered_map still the closest analogue? Or does std have a map type that preserves insertion order?

On a related note. I have very vague memories that the fact that HashMap preserves insertion order was an implementation detail and we didn't want that fact to be part of the contract with users.

I'll do a quick search on RC and see if I can find some discussion about it to refresh my memory

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I couldn't find anything conclusive, but it seems that we use HashMap in a lot of places that rely on preserving insertion order.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's also documented behavior:

Dictionaries will preserve the insertion order when adding new entries.

I think the window to change this has closed 😅

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only for exposed APIs, but yeah. I think considering that both JS and Python do also preserve insertion order on their dicts (with some caveats) and the low barrier we aim for with GDScript, this seems fine.

@skyace65 skyace65 removed this from the 4.5 milestone May 2, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:contributing Issues and PRs related to the Contributing/Development section of the documentation cherrypick:4.4 enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants