Comdiv писал(а):
Всё-таки, важность 0 в позиционной системе счисления совсем несопоставима с важностью массива 0-й длины. Тут нет очевидной аналогии.
Ну..., да, к примеру, некий нуль-вектор предметно может интерпретироваться как содержащий нулевые координаты (все) согласно заданной системе. И обращаться к компонентам вектора нет смысла.
Если Вы имеете ввиду, что корректно задавать операцию NEW для указателя-динамического массива с явными нулевыми "измерениями", то вполне может быть. Собственно то, если нет иной технической возможности, то рассуждать тут особо и нечего. Ведь и предметки "в большом" как-то необходимо моделировать. Напр., пусть необходимо ввести некоторые "нейтральные" элементы или частные случаи -- какие-то спецвекторы, спецматрицы или "таблицы БД" и пр. Для чего создаются пустые массивы, указатели на них применяются в том числе для сравнения (сопоставления объектов) и т.д.
Другой путь -- использовать семейство record-ов как иерархию расширяемых записей для эмуляции enum-ов, где часть типов символизируют нейтральные элементы (вместо явных пустых массивов), остальные -- с возможными прикладными данными-массивами. Соответственно применяется тестирование типов и т.д.
Но в любом случае, если где-то применяется динамический массив с потенциалом отсутствия данных, то возникнет "малая" предметка "на низком уровне" по отношению к моделированию "в большом" -- как задать "unit" для кортежа/массива как такового (в случае, когда вся предметка редуцирована к условному "есть или нет данных").
(любопытно, как же работает расширение для Active Oberon. Там есть явная операция NEW для объектов-массивов, и подозреваю, что, скорее всего, нули для "измерений" не допускаются согласно имеющимся положениям в языке как для статических, так и для динамических массивов. Но там декларируются иные средства для дефиниции unallocated-массивов и их "измерений" -- таковы есть по-умолчанию, плюс константные выражения вида "[...]" с перераспределение памяти и корректировкой измерений, и "динамические" измерения для тензоров).