> According to O'Keefe [1,2], char_coversion/2 was a mistake.
For one, O'Keefe was not involved in the ISO process. Nevertheless,
in preparation of Cor.2 his pllib-page got its own column [1].
He did, however, pioneer many language features much before actual
standardization took place. In fact, his 1984 Draft Proposed Standard
for Prolog Evaluable Predicates [2] not only included logically correct
definitions for many built-ins like functor/3, but also proposed
call/N for the first time.
As for char_conversion/2 and related features, these were meant for
specific character sets, "for example" Japanese JIS. On CNC machines
with barely any operating system present - except the Prolog which was
the operating system. To my understanding, it is of less use for,
say, code development in general.
For its current support by actual implementations, there is IF/Prolog,
GNU and SICStus. Other implementations do some hearsay-ish
implementation, if at all. Supporting it with a JIS PCS (Processor
Character Set) does make sense, and definitely on those machines. In
any case, the two built-ins, and the name of the Prolog flag all are
taken "forever".
?- current_char_conversion(a,a). % 8.14.6
true, unexpected. % in SWI
false. % 8.14.6.1 (2) which reads
My concern is less this one feature than what "forever" implies for the conformance criterion itself. ISO conformance is binary (a feature is required or it is not) so any conformance measure built on it must weight char_conversion/2, meant for 1980s JIS character sets, exactly as the features used in every program. A standard that can only add to its mandatory set and never retire from it has a conformance bar that necessarily drifts from practical relevance over time. Without proper documentation, users and implementors have no way to distinguish "missing something central" from "missing something vestigial".
Obsolescence is the mechanism that addresses precisely this. That is, not removing a feature anyone dislikes, but letting the criterion say "still provide it if you must, but it no longer counts against you". If I am not wrong, Fortran's obsolescent annex and C's future-directions clause serve this purpose. So my question behind "forever": is it a procedural fact about ISO Prolog that a core feature can never be marked obsolescent? If it is fixed for Prolog in a way it is not for those languages, I would like to understand whether that is specific to WG17's situation or to ISO standards generally.
> and (2) `In_char` is not equal to `Out_char`.
[1] https://www.complang.tuwien.ac.at/ulrich/iso-prolog/built-in_predicates
[2] https://www.complang.tuwien.ac.at/ulrich/iso-prolog/#pllib