OberonCore
https://forum.oberoncore.ru/

Массивы нулевой длины
https://forum.oberoncore.ru/viewtopic.php?f=27&t=6374
Страница 3 из 5

Автор:  PSV100 [ Вторник, 16 Апрель, 2019 17:16 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Comdiv писал(а):
Всё-таки, важность 0 в позиционной системе счисления совсем несопоставима с важностью массива 0-й длины. Тут нет очевидной аналогии.

Ну..., да, к примеру, некий нуль-вектор предметно может интерпретироваться как содержащий нулевые координаты (все) согласно заданной системе. И обращаться к компонентам вектора нет смысла.

Если Вы имеете ввиду, что корректно задавать операцию NEW для указателя-динамического массива с явными нулевыми "измерениями", то вполне может быть. Собственно то, если нет иной технической возможности, то рассуждать тут особо и нечего. Ведь и предметки "в большом" как-то необходимо моделировать. Напр., пусть необходимо ввести некоторые "нейтральные" элементы или частные случаи -- какие-то спецвекторы, спецматрицы или "таблицы БД" и пр. Для чего создаются пустые массивы, указатели на них применяются в том числе для сравнения (сопоставления объектов) и т.д.
Другой путь -- использовать семейство record-ов как иерархию расширяемых записей для эмуляции enum-ов, где часть типов символизируют нейтральные элементы (вместо явных пустых массивов), остальные -- с возможными прикладными данными-массивами. Соответственно применяется тестирование типов и т.д.

Но в любом случае, если где-то применяется динамический массив с потенциалом отсутствия данных, то возникнет "малая" предметка "на низком уровне" по отношению к моделированию "в большом" -- как задать "unit" для кортежа/массива как такового (в случае, когда вся предметка редуцирована к условному "есть или нет данных").

(любопытно, как же работает расширение для Active Oberon. Там есть явная операция NEW для объектов-массивов, и подозреваю, что, скорее всего, нули для "измерений" не допускаются согласно имеющимся положениям в языке как для статических, так и для динамических массивов. Но там декларируются иные средства для дефиниции unallocated-массивов и их "измерений" -- таковы есть по-умолчанию, плюс константные выражения вида "[...]" с перераспределение памяти и корректировкой измерений, и "динамические" измерения для тензоров).

Автор:  Info21 [ Вторник, 16 Апрель, 2019 20:11 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Kemet писал(а):
Очевидно, что там и читать нечего.
То есть Вы признали, что фантазируете насчёт "высокоуровневых ..."

Автор:  Sergej Durmanov [ Вторник, 16 Апрель, 2019 20:29 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Если есть в языке перегрузка операторов, индексный оператор, LEN и т.д., то вполне же можно оставить встроенные массивы в покое, и реализовать любые фантазии за ваши деньги именно на структурных типах. Если поломать встроенные массивы, то 100% в каком-нибудь внешнем пакете, в который прилетел такой массив, случится что—то плохое, за которое могут и по репе настучать.

Автор:  Info21 [ Вторник, 16 Апрель, 2019 22:44 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Baikal писал(а):
Если поломать встроенные массивы, то 100% в каком-нибудь внешнем пакете, в который прилетел такой массив, случится что—то плохое, за которое могут и по репе настучать.
Что именно может случиться?

Все существующие пакеты имеют подразумеваемое предусловие LEN()>0.
Передавать иное -- ошибка того, кто передаёт.

Обращения к элементам out of range защищены дважды: в коде и в проверках, встроенных компилятором.
Если обнаруживается, что они не защищены в коде, то нужно сказать спасибо массивам нулевой длины, позволившим найти эту ошибку.
Проверки второго типа сработают в любом случае.

Что пропущено?

Автор:  Kemet [ Среда, 17 Апрель, 2019 05:40 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Info21 писал(а):
Что пропущено?

Да вроде коллега всё правильно сказал - не все пакеты одинаково полезны, поэтому некоторые распространяются в бинарном виде. И если программа начала падать, потому что кому-то потребовались массивы нулевой длины ( при этом нет никакого обоснования, зачем бы это реально было нужно ), и, как всегда внезапно, они залетели в этот пакет. И проблема не в пакете, разработчики которого следовали духу оберона, заглянув в репорт и поняли, что проблем здесь быть не может, потому то массивов состоящих только из одного дескриптора не бывает.
Так что я согласен с коллегой - не трогайте массивы. а если кому-то моча в голову удалила, так, если не хочется в язык вводить операторы, то введите новый тип, ну, например VECTOR, который ведет себя почти как массив, но может иметь нулевую длину, а также вполне можно сделать его ( в случае размещения в куче ) с автоматически делающего RESHAPE, если обратились к несуществующему индексу, ну и ограничитель нужен на диапазон индексов, чтобы из-за автоматического решейпа всю память не загадить в случае ошибки. Насколько я помню, что-то подобное есть в GPCP, не пора ли синхронизировать реализации?

Автор:  Info21 [ Среда, 17 Апрель, 2019 09:45 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Кемет, вы не умеет читать.

Автор:  Info21 [ Среда, 17 Апрель, 2019 09:53 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Kemet писал(а):
разработчики которого следовали духу оберона, заглянув в репорт и поняли, что проблем здесь быть не может, потому то массивов состоящих только из одного дескриптора не бывает.
В репорте КП ничего такого про "массивы, состоящие только из одного дескриптора" не написано.

Запрета на нулевую длину массива тоже нет.

Вы не умеете читать, Кемет, и просто что-то выдумываете и, не различая реальности и собственных домыслов, разговариваете по сути с самим собой.
Это называется "бредить".

Автор:  Kemet [ Среда, 17 Апрель, 2019 10:34 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Info21, я открою секрет - в кастрированных репортах всяческих оберонов ничего не сказано о семантике, подразумевая, что человек должен руководствоваться здравым смыслом. Это плохо, потому что когда здравый смысл отсутствует, то и появляются такие темы с собственными измышлениями.
А если посмотреть на семантику, то массивы с нулевой длинной в Обероне запрещены. Но это, если руководствоваться здравым смыслом.
Также, я так и не услышал, зачем такие массивы нужны на уровне языка. То есть конкретное применение.

Автор:  Info21 [ Среда, 17 Апрель, 2019 11:26 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Кемет, раскрою Вам секрет: то, что кажется "здравым смыслом" внутри бреда, не обязательно им (здравым смыслом) является.

Раскрою и второй секрет: если Вы чего-то не понимаете, то это что-то -- не обязательно глупость: проблема может быть в Вашей понималке. (Trurl когда-то цитировал Козьму Пруткова на сей счёт.)

В данном случае Вы в дым не поняли мой вопрос -- ни его смысл, ни пафос. И видите в этом лишь способ повысить свою доминантность. Вот не знаю, как послать Вас отсюда.

Автор:  Info21 [ Среда, 17 Апрель, 2019 11:38 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Похоже, мой вопрос обеспечил срыв шаблона почти всем кроме И.Е. ))

Но чемпион тут однозначно Кемет ))

Автор:  Kemet [ Среда, 17 Апрель, 2019 12:09 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Так ведь всё не просто, а очень просто - закинули бы тему в раздел "Юмор" и было бы и смешно и пафосно, а так, какой вопрос в конкретной теме - такой и ответ.

Автор:  Comdiv [ Среда, 17 Апрель, 2019 12:13 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Info21 писал(а):
Похоже, мой вопрос обеспечил срыв шаблона почти всем
Как-бы, этот срыв шаблона в mainstream языках используется уже десятилетия. Хоть в Java, хоть в Fortran. Опыт использования у многих имеется.

Автор:  Info21 [ Среда, 17 Апрель, 2019 18:01 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Десятилетия -- не аргумент: языки программирования обсуждаются больше 60 лет, и что ))

Не, ну диспут хоть куда )) Коллекционный материал )) Особенно Кемет мне понравился ))

Автор:  Comdiv [ Среда, 17 Апрель, 2019 18:54 ]
Заголовок сообщения:  Re: Массивы нулевой длины

В десятилетиях накопленный опыт, который можно использовать вместо предположительных впечатлений.

Автор:  Info21 [ Среда, 17 Апрель, 2019 23:21 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Comdiv писал(а):
В десятилетиях накопленный опыт, который можно использовать вместо предположительных впечатлений.
Это Вы про С++? Или про питона? ))

Автор:  Comdiv [ Четверг, 18 Апрель, 2019 00:24 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Про десятилетия использования массивов 0-й длины в mainstream языках.

Автор:  Info21 [ Четверг, 18 Апрель, 2019 00:45 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Это Кемет суммирует опыт? ))

Я презираю мейнстрим. Стадо баранов.

Автор:  Kemet [ Четверг, 18 Апрель, 2019 06:41 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Info21 писал(а):
Это Кемет суммирует опыт? ))
Конечно, и именно поэтому я говорю, что в Оберонах оно не нужно. И не возможно. По крайней мере в том виде, как это делается, например в С++, где массив с нулевой длиной - это лишь соглашение, о том, что вот с адреса переменной-массива, находящейся в конце структуры, начинается некая типизированная последовательность неопределенной длины, что даёт возможность обращаться к элементам такой последовательности. Так как контроля индекса нет, то это возможно. и в таком случае можно вообще дел наворотить. Нужно такое в обероне? Думаю нет. А если нужно, то должна быть специальная форма объявления, чтобы было видно, что это просто небезопасное соглашение. В ББ в таких случаях где-то там в самом низу используется конструкция с массивом очень большой длины, чтобы уж наверняка перекрыть возможный диапазон и в то-же время хоть как-то ограничить доступ. в целом это всё равно небезопасно и используется только при общении с хостом.
Но да, каким-то образом пометить, что это небезопасно нужно-бы.
В Активном Обероне можно использовать фиктивные поля и небезопасные указатели на фиктивное поле в этом случае, ну или напрямую фиктивный массив. Но определенной длины и диапазон тоже будет контролироваться.
Мне в лс пришло сообщение, что массивы нулевой длины полезны, когда мы передаём их в качестве аргумента параметра типа открытый массив, но это вряд-ли - так можно поломать весь оберон.

Автор:  Info21 [ Четверг, 18 Апрель, 2019 08:52 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Кемет, я даже читать это не буду.

Автор:  Александр Ильин [ Воскресенье, 21 Апрель, 2019 20:25 ]
Заголовок сообщения:  Re: Массивы нулевой длины

Встряну со своим замечанием.

В Delphi (Object Pascal) строка нулевой длины (массив) равна nil. Все такие строки, соответственно, тождественны, что логично.
Length(nil) = 0.
SetLength(s, 15), где s = nil, вызовет выделение памяти в переменную s.
s[0] -> Access Violation, если проверка диапазонов не дремлет.

Всё прекрасно работает и никаких проблем не вызывает.

Идея выделить память, но иметь в ней ноль элементов, - несколько экстравагантная, на мой взгляд. Да, тогда все пустые строки будут неравны друг другу, если это зачем-то нужно. В остальном же семантика будет необычная. Самое главное, пользы от множества таких объектов будет столько же, сколько от одного, ведь мы не сможем их модифицировать, чтобы добавить элементов. Но и один такой объект - это слишком особый случай, лучше использовать nil, он и так уже достаточно особый.

Страница 3 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/