Сейчас делаю в Ofront+ поддержку Оберона-07 и возник такой момент. Меня удивило применение ORD к аргументу типа REAL. Что можно сказать по этому поводу?

В описании языка аргументом ORD могут быть типы CHAR, BOOLEAN и SET (кстати, тоже несимметрично: ORD(set) есть, а обратного BITS(int) нету). Есть такое объяснение: мэтру быстренько понадобился такой хак и он, не мудрствуя лукаво, свалил это на ORD, чтобы лишний раз не дёргать SYSTEM.

Я и правда не понимаю, что должен возвращать ORD(real). Если это скрытое округление или отбрасывание дробной части, тогда это не так уж и красиво. А если это замаскированный SYSTEM.VAL(INTEGER, real), то ещё хуже, ибо "числа это не биты" (Н. Вирт).

Ссылка на код (см. процедуру WriteReal):https://en.wikibooks.org/wiki/Oberon/V5/Texts.Mod

Делать ли поддержку ORD(real) в Ofront+? Плюсом будет совместимость с имеющим хождение кодом. Минусом будет нестандартное расширение языка. Компромиссом вижу: разрешить, но с предупреждением.