It seems like "implementation-defined" (and also "implementation-approximated") things must be defined somehow by implementations, because the definition of those terms say "one that defers its definition to an external source".
But then... in the definition for host-defined, it is implied that implementations can also be hosts:
"Implementations that are not hosts may also provide definitions for host-defined facilities."
Hmm... how can something be both a host and an implementation? Thought process:
- Implementation defined or approximated facilities have to be defined by implementations
- A host cannot define those facilities
- The only way an implementation can also be a host is if it doesn't define those facilities.
- But then if an implementation doesn't define those facilities, what does?
- Oh I get it, "host" is a subset of "implementation".
- So "implementations that are not hosts" define "implementation-defined" facilities.
Even though I understood at the end, I still think it's confusing.
Especially since the last sentence of section 4.2 says
"Both hosts and implementations may interface with this specification via the language types, specification types, abstract operations, grammar productions, intrinsic objects, and intrinsic symbols defined herein."
even though as mentioned, "host" is a subset of "implementation", right?
Is it possible for a host to not be an implementation? I don't see how it could be. What am I missing?
(The definitions make it seem that an implementation is just a host, but which could also define implementation-defined / implementation-approximated facilities)
- Host: A host is an external source that further defines facilities listed in Annex D but does not further define other implementation-defined or implementation-approximated facilities.
- Implementation: An implementation is an external source that further defines facilities enumerated in Annex D or those that are marked as implementation-defined or implementation-approximated.