digitalio: Improve DigitalInOut constructor, add finaliser #9795
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Now it's possible to construct outputs or enable pulls immediately:
The finaliser means that if a pin object is allowed to go out of scope, then it will be deinitialized automatically when GC runs. this is a potential incompatibility: some hypothetical code that intentionally leaked a pin might function differently, i.e.
as a way to stick a pin in output mode indefinitely will no longer work (but may still appear to work "for awhile" because gc doesn't run right away).
I made this change in part because it simplifies error handling in the constructor: An incorrect argument would otherwise have left the pin stuck in allocated state until the interpreter was reset; with this change, it's available again though not until the GC runs so it would remain perplexing in interactive situations: