OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 01:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 96 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Вторник, 16 Апрель, 2019 17:16 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Comdiv писал(а):
Всё-таки, важность 0 в позиционной системе счисления совсем несопоставима с важностью массива 0-й длины. Тут нет очевидной аналогии.

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Вторник, 16 Апрель, 2019 20:11 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Kemet писал(а):
Очевидно, что там и читать нечего.
То есть Вы признали, что фантазируете насчёт "высокоуровневых ..."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Вторник, 16 Апрель, 2019 20:29 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Если есть в языке перегрузка операторов, индексный оператор, LEN и т.д., то вполне же можно оставить встроенные массивы в покое, и реализовать любые фантазии за ваши деньги именно на структурных типах. Если поломать встроенные массивы, то 100% в каком-нибудь внешнем пакете, в который прилетел такой массив, случится что—то плохое, за которое могут и по репе настучать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Вторник, 16 Апрель, 2019 22:44 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Baikal писал(а):
Если поломать встроенные массивы, то 100% в каком-нибудь внешнем пакете, в который прилетел такой массив, случится что—то плохое, за которое могут и по репе настучать.
Что именно может случиться?

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

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

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


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

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Info21 писал(а):
Что пропущено?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Среда, 17 Апрель, 2019 09:45 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Кемет, вы не умеет читать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Среда, 17 Апрель, 2019 09:53 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Kemet писал(а):
разработчики которого следовали духу оберона, заглянув в репорт и поняли, что проблем здесь быть не может, потому то массивов состоящих только из одного дескриптора не бывает.
В репорте КП ничего такого про "массивы, состоящие только из одного дескриптора" не написано.

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

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


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

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Info21, я открою секрет - в кастрированных репортах всяческих оберонов ничего не сказано о семантике, подразумевая, что человек должен руководствоваться здравым смыслом. Это плохо, потому что когда здравый смысл отсутствует, то и появляются такие темы с собственными измышлениями.
А если посмотреть на семантику, то массивы с нулевой длинной в Обероне запрещены. Но это, если руководствоваться здравым смыслом.
Также, я так и не услышал, зачем такие массивы нужны на уровне языка. То есть конкретное применение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Среда, 17 Апрель, 2019 11:26 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Кемет, раскрою Вам секрет: то, что кажется "здравым смыслом" внутри бреда, не обязательно им (здравым смыслом) является.

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

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


Последний раз редактировалось Info21 Среда, 17 Апрель, 2019 11:41, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Среда, 17 Апрель, 2019 11:38 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Похоже, мой вопрос обеспечил срыв шаблона почти всем кроме И.Е. ))

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


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

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Так ведь всё не просто, а очень просто - закинули бы тему в раздел "Юмор" и было бы и смешно и пафосно, а так, какой вопрос в конкретной теме - такой и ответ.


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Среда, 17 Апрель, 2019 18:01 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Десятилетия -- не аргумент: языки программирования обсуждаются больше 60 лет, и что ))

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


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

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
В десятилетиях накопленный опыт, который можно использовать вместо предположительных впечатлений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Среда, 17 Апрель, 2019 23:21 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Comdiv писал(а):
В десятилетиях накопленный опыт, который можно использовать вместо предположительных впечатлений.
Это Вы про С++? Или про питона? ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Четверг, 18 Апрель, 2019 00:24 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Про десятилетия использования массивов 0-й длины в mainstream языках.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Четверг, 18 Апрель, 2019 00:45 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Это Кемет суммирует опыт? ))

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Четверг, 18 Апрель, 2019 06:41 

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


Последний раз редактировалось Kemet Четверг, 18 Апрель, 2019 09:03, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Четверг, 18 Апрель, 2019 08:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Кемет, я даже читать это не буду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массивы нулевой длины
СообщениеДобавлено: Воскресенье, 21 Апрель, 2019 20:25 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Встряну со своим замечанием.

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

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 96 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB