This page seems to have a lot of related info. I also think this feature would be useful if some components are not to be modified via direct component access.
To “emulate” this feature, I typically attach an underscore at the end of component names (e.g., “integer :: foo_”) so that I can recall that I should not modify this component directly (but rather I should use a proper setter routine). In my case, derived types are given a type-bound procedure set()
, which handles the assignment of all such variables via keyword arguments (in order to perform any additional things associated with each assignment).