OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:48

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




Начать новую тему Ответить на тему  [ Сообщений: 154 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8
Автор Сообщение
СообщениеДобавлено: Вторник, 03 Февраль, 2009 01:26 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
1) Не учтён случай когда искомый элемент находится в позиции begin = end.
2) Программа выдаёт неправильный ответ если искомый элемент находится в позиции end.


[begin, end)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 02:24 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
А вот себе б я не доверял, если бы написал такой цикл. Разбираться, когда он из какого места изволит выпрыгнуть - брр. (там и без break, кстати, достаточно и одного условия begin < end).


Откуда он выпрыгнет и по какому условию - четко обозначено. Простым условием, а не трехэтажным.

Илья Ермаков писал(а):
Я лично знаю, что процесс линейного поиска - это процесс стягивания границ отрезка, таким образом, что держим внутри искомый элемент или его потенциальное место (значит - это и есть инвариант цикла. Если я проговорил это свойство вслух - значит, я знаю инвариант,


И что вам тогда не нравится? "begin != end" как раз и отражает процесс стягивания. Пока стягиваем - проверяем, не нашли ли то, что искали.

P.S. Будь моя воля (не C++) я бы вообще через рекурсию все это написал. Было бы еще понятнее и никаких циклов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 02:37 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Владимир Лось писал(а):
Помните я носился с библиотекой libao, потом перестал?


Что за библиотека?

Владимир Лось писал(а):
Таки примерно из-за такой ошибки, тока зеркально отражённой из другого места. Просто потому, что система поддержки времени исполнения на Си++ и современные ОС про сборку мусора и объекты ничего не знают, за то они знают про "потоки" вне контекста каких-либо объектов... А лочить всё на уровне ОСи, на время инициализации локальных указателей, системе, для которой собсна и создавалась libao было ОЧЕНЬ накладно...


А можно по-подробнее? Что за проблема с инициализацией локальных указателей и почему надо что-то лочить?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 10:33 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Vlad писал(а):
А можно по-подробнее? Что за проблема с инициализацией локальных указателей и почему надо что-то лочить?

Потому, что между выделением фрейма стека для вызываемой функции и заполнением в нём всех локальных, для этой функции, указателей нулями может проснуться сборщик мусора...

У меня же проблема была прямо противоположная: объект может быть уничтожен (в системе поддержки времени исполнения Си++), а ссылка на него (через цепочку контекстов вызванных функций из активности этого объекта) ещё "жива". То есть, менеджер памяти Си++ (условно говоря!) уже считает все поля, занимавшееся экземпляром свободными, а в системе поддержки многопотоковости мне ещё нужно обращаться к полям этого объекта... Это только один из случаев... Там ещё интересней есть казусы.
Без поддержки сборки мусора в ОСи это никак не разгребсти. На boost или ACE "решения" прошу не указывать. Там - не то, что мне надо. Я хотел полностью влить синтаксис АО в Си++. Не получилось. В смысле синтаксис-то я обеспечил, но семантика "поплыла". Да что там поплыла? - на Си++ просто НЕЛЬЗЯ АО-подобные активные объекты получить. Только - обрезки и обёртки а ля указанные библиотеки.

ЗЫ ... И, без переделки языка, не получится ни у кого.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 11:00 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Код:
ASSERT(bool(first) == bool(last));
last = last->next;

1) В этих местах не компилируется.
2) Как освобождается память?
3) Почему first и last имеют тип обычного указателя Item*, а не ненулевого ref<Item>? Это же идёт против идеологии ненулевых ссылок?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 12:05 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Владимир Лось писал(а):
ЗЫ ... И, без переделки языка, не получится ни у кого.

Однозначно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 16:46 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Владимир Лось писал(а):
Vlad писал(а):
А можно по-подробнее? Что за проблема с инициализацией локальных указателей и почему надо что-то лочить?

Потому, что между выделением фрейма стека для вызываемой функции и заполнением в нём всех локальных, для этой функции, указателей нулями может проснуться сборщик мусора...


Я не понимаю какое отношение это имеет к C++, пусть даже и с прикрученным к нему GC? Ну лежит в стэке мусор, самое худшее что может случиться - какой-нибудь объект "случайно" останется живым. В BB с его консервативным GC можно то же самое наблюдать.

Владимир Лось писал(а):
У меня же проблема была прямо противоположная: объект может быть уничтожен (в системе поддержки времени исполнения Си++), а ссылка на него (через цепочку контекстов вызванных функций из активности этого объекта) ещё "жива".


Не понял. Как GC умудряется прибить объект, если ссылка на него (через цепочку контекстов или как угодно) еще жива?

Владимир Лось писал(а):
То есть, менеджер памяти Си++ (условно говоря!) уже считает все поля, занимавшееся экземпляром свободными, а в системе поддержки многопотоковости мне ещё нужно обращаться к полям этого объекта...


В такой формулировке - это очень странное желание обращаться к полям удаленного объекта.

Владимир Лось писал(а):
На boost или ACE "решения" прошу не указывать. Там - не то, что мне надо. Я хотел полностью влить синтаксис АО в Си++. Не получилось. В смысле синтаксис-то я обеспечил, но семантика "поплыла". Да что там поплыла? - на Си++ просто НЕЛЬЗЯ АО-подобные активные объекты получить. Только - обрезки и обёртки а ля указанные библиотеки.


Ну и зачем вам копия синтаксиса AO? Суть концепций AO замечательно выражается на C++. Да, форма будет немного другая, зато родная для C++. Глядишь и с GC тогда не будет проблем (хотя лично я бы очень сильно подумал, прежде чем прикручивать к C++ GC).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 17:00 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Vlad писал(а):
ASSERT(bool(first) == bool(last));


ASSERT - не стандартный макрос. Замените на assert.

Сергей Губанов писал(а):
last = last->next;


Добавьте в ref<T> "operator T* () const {return p;}".

Сергей Губанов писал(а):
2) Как освобождается память?


Это имеет какое-то отношение к контролю инициализации ненулевых ссылок? :) GC освобождает. Или деструктор статического объекта модуля чистит все от first до last.

Сергей Губанов писал(а):
3) Почему first и last имеют тип обычного указателя Item*, а не ненулевого ref<Item>? Это же идёт против идеологии ненулевых ссылок?


Вы вообще читали про что я писал? На "псевдоязыке" эти указатели помечены как OPTIONAL. Они могут быть нулевыми по сути задачи (список пуст). Если в данном примере отказаться от глобальных переменных и от понятия пустого списка - можно избавится и от обычных указателей.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 19:14 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Февраль, 2009 21:04 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да, и гарантии есть что она не уйдёт "налево" (не запомнят, т.к. взять адрес нельзя).
Была у меня ситуация, где именно этот инвариант сильно помог. Вводил понятие описателя объекта (просто RECORD без всего) - и его разыменование возможно только с указанием процедуры, в которую он закидывается по VAR. Правда, это нужно было на уровне до сборщика мусора.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Март, 2009 02:57 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 372
Владимир Лось писал(а):
выдающуюся систему управления DeepSpace One (не смотря на все грандиозные заделы и результаты) с Лиспа на Си++ перевели просто по причине неудовлетворения РТ-требованиям

Ой, как интересно! А ссылку можно?
Спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 01 Март, 2009 03:05 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 372
Владимир Лось писал(а):
Это я в сотне байт управление заслонками движка по совокупности нескольких параметров делаю. Но системы уровня RAX — это совсем другое дело. Там на порядки параметров и состояний больше и пермалывающих это всё исполняемых сущностей

Не преувеличивайте, Владимир :wink:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Март, 2009 13:48 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
TAU писал(а):
Владимир Лось писал(а):
Это я в сотне байт управление заслонками движка по совокупности нескольких параметров делаю. Но системы уровня RAX — это совсем другое дело. Там на порядки параметров и состояний больше и пермалывающих это всё исполняемых сущностей

Не преувеличивайте, Владимир :wink:

Делалось здесь: http://www.avionika.com/oao_aviakontrol/about/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 02 Март, 2009 13:50 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
TAU писал(а):
Ой, как интересно! А ссылку можно? Спасибо.

http://www.flownet.com/gat/jpl-lisp.html
ЗЫ это я ссылку дал, как обзор, а личное письмо от него никак не могу отыскать... :(


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

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


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

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


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

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