Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
 
 02:46 Den Sarych
 
 
Во Флориде и в Королевстве сейчас  02:46[Войти] | [Зарегистрироваться]
Обсуждение темы:
Оберон-технология: особенности и перспективы


Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение. 

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 6256 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 1596—1587 | 1586—1577 | 1576—1567 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 468


№ 1586   10-01-2007 06:53 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1582« (pepper)
___________________________

Ответ на »сообщение 1579« (Илья Ермаков)
___________________________

(* создали слабый указатель на объект *)
...
wptr.Target((* OUT *) strongPtr);
(* когда требуется, получили опять сильный указатель.


Забыл сказать, что к "внешнему виду" такой реализации претензий нет. Ну разве что придется постоянно кастать тип при получении сильного указателя. Хотелось бы еще знать насколько эффективно будет работать ptr.Target?


PROCEDURE (w: WeakPointer) Target* (OUT ptr: ANYPTR), NEW;
VAR adr: INTEGER;
BEGIN
adr := w.adr; (* make anchor in stack, to prevent concurrent GC *)
ptr := S.VAL(ANYPTR, w.adr);
adr := 0
END Target;


Проверяются и обнуляются слабые указатели не при получении твердой ссылки, а в процессе сборки мусора. В ядре есть список адресов всех созданных слабых указателей.
После фазы маркировки проверяются все слабые указатели - те, объекты-цели которых не промаркированы как доступные, обнуляются. Точно так же, как и в .NET, копейка в копейку.
Кстати, читая Рихтера о внутреннем устройстве .NET, легко узнать механизмы ядра BlackBox. Кроме общеоберонских и сугубо блэкбоксовые - финализаторы, например.
Что не удивительно - Клеменс Шиперски-то в свое время в команду .NET ушел. ББ сделал и ушел :-)


№ 1585   10-01-2007 06:51 Ответить на это сообщение Ответить на это сообщение с цитированием
>>>Извини, но SYSTEM я отказываюсь принимать за языковое средство.
Ответ не мой, но не могу удержаться :)))
Отлично. Модули - это не языковое средство.
Но тогда давай будем последовательными до конца и не будем признавать библиотеки и классы С++ "языковыми средствами". Ибо это не язык, а то, что на нем написано. И что особо "умного" останется тогда в С++?


№ 1584   10-01-2007 06:46 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1581« (pepper)
___________________________
Я не читал от корки до корки "Сообщение о языке Component Pascal", но я сомневаюсь, что там что-то сказано про ядро среды исполнения и о предоставляемых им сервисах.
Ядро среды исполнения является обычным модулем среды, ничем не отличающимся от всех остальных, написанным на том же языке.
Слабые указатели реализованы именно в ядре, в его версии Active BlackBox, поскольку их функциональность - это аспект поведения сборщика мусора.

Никто не называет возможности подсистемы времени выполнения "языковыми средствами". Речь о том, что "в подсистеме времени выполнения" - это не криминал, в Оберонах это все равно, что сказать - "в таком-то модуле такой-то библиотеки", ничем особым кроме своей роли ядро от них не отличается. В отличие от Java, где такие штуки вводятся в стандарт языка, т.к. по сути и являются его частью, встроенной частью виртуальной машины (насколько я знаю, если ошибаюсь - то пусть спецы по Яве поправят).
SYSTEM - это именно языковое средство. Языковое средство - это то, что предоставляет компилятор. SYSTEM - это ключевое слово, группирующее в себе ряд других ключевых слов языка Component Pascal в реализации компилятора (а не среды выполнения!) BlackBox.


№ 1583   10-01-2007 06:43 Ответить на это сообщение Ответить на это сообщение с цитированием
Я все пытаюсь понять, к чему вся эта дискуссия.
Работа с динамической памятью и системными ресурсами является одной из самых сложных и опасных проблем при программировании на С++.
Для решения этой проблемы пришлось изобретать различные "подпорки" и "костыли". Один из возможных вариантов таких "костылей" - это "умные" указатели. Отлично! С этим все ясно. Не ясно другое.
Почему наличие этих "костылей" у языка, который без них слегка "хромает", делает его лучше языка, у которого и без того с безопасностью все в полном порядке. А теперь с учетом сообщения Ильи Ермакова тем более нечего обсуждать. Или переключимся на другой режим: "умные" указатели С++ умнее, чем "умные" указатели в Обероне?
Мне это уже напоминает старый анекдот:
-Грузины лучше, чем армяне.
-Чем лучше?
-Чем армяне.



№ 1582   10-01-2007 06:35 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1579« (Илья Ермаков)
___________________________

(* создали слабый указатель на объект *)
...
wptr.Target((* OUT *) strongPtr);
(* когда требуется, получили опять сильный указатель.


Забыл сказать, что к "внешнему виду" такой реализации претензий нет. Ну разве что придется постоянно кастать тип при получении сильного указателя. Хотелось бы еще знать насколько эффективно будет работать ptr.Target?


№ 1581   10-01-2007 06:31 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1579« (Илья Ермаков)
___________________________

Pointers.Pointer также реализован языковыми средствами Component Pascal.


Т.е., приведенное решение реализации слабых ссылок будет работать в любой реализации Component Pascal? Извини, но мне кажется, что ты лукавишь. Я не читал от корки до корки "Сообщение о языке Component Pascal", но я сомневаюсь, что там что-то сказано про ядро среды исполнения и о предоставляемых им сервисах.


Ядро BlackBox и весь BlackBox реализован языковыми средствами Component Pascal.


Извини, но SYSTEM я отказываюсь принимать за языковое средство. Так же как я отказываюсь под языковым средством понимать среду исполнения только потому, что она написана на том же языке. Иначе можно зайти очень далеко - можно написать среду исполнения на C++ и заявлять, что предоставляемые ей средства это стандартные средства языка C++.


№ 1580   10-01-2007 06:24 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1576« (Alexey Veselovsky)

Кстати, я вот читал те самые 16-30 страниц описания Оберона, и, честно говоря, рефлексивности в нем не заметил... Быть может слишком невнимательно читал... Т.е. не больше в нем рефлексивности чем скажем в С++, или (тем более) в расширения С++ от Борланда.

В сообщении о языке Component Pascal по этому поводу (в самом конце сообщения) написано:

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


№ 1579   10-01-2007 06:15 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1577« (pepper)
___________________________


IMPORT Pointers;
...
VAR wptr: Pointers.WeakPointer;
...
wptr := Pointers.NewWeakPointer(strongPtr);
(* создали слабый указатель на объект *)
...
wptr.Target((* OUT *) strongPtr);
(* когда требуется, получили опять сильный указатель.
Если к этому времени объект уже собран сборщиком, вернется NIL *)


Все.

"Аналог слабого указателя в C++ реализуется языковыми средствами."
Pointers.Pointer также реализован языковыми средствами Component Pascal.
Ядро BlackBox и весь BlackBox реализован языковыми средствами Component Pascal.
По поводу рефлексивности - Оберон подразумевает, как минимум, обязательные теги типов.
В стандарте Component Pascal рефлексивность и метамеханизмы помечены обязательным требованием к реализации. Однако сами интерфейсы, действительно, оставлены на умотрение реализации.
С одной стороны, язык определен без дополнительных рантайм-средств.
С другой стороны, в той же Java многие стандартные классы реализованы на уровне виртуальной машины, а не на самом языке.
В Обероне нет ничего кроме языка + небольшой стандартизированный псевдомодуль SYSTEM (правда, его определение пока несколько "плавает" от версии к версии, но тем не менее...). Все остальное - на нем же, любая среда компилирует себя сама.


№ 1578   10-01-2007 06:11 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1574« (Владимир Лось)
___________________________

Если это вырожденный случай работы клиентов/серверов в одном процессе, то не будешь ли столь любезен пояснить мне логику работы сборщика мусора, который ничего не знает о размерах и типах затребованных объектов в каждом из новых требований, как ему действовать?


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

Теперь бы ещё студент смог объяснить а на кой они ему, по большому гамбургскому счёту?...


А это уже задача препода (или книжки). Если ты, используя в работе C++ (как понял), не знаешь зачем нужны смарт-поинтеры, то очень рекомендую ознакомится. Можешь начать с элементарного стандартного std::auto_ptr. Уверяю тебя, это сильно упростит твою жизнь до лучших времен (когда на работе можно будет использовать оберон, а не C++).


Уход от ручного управления ресурсами (в том числе памятью) и временем жизни объектов.
Браво! :о)))))))))))))))))))))))))))))))


Что вызвало такой восторг? Какие средства управления ресурсами (помимо памяти) нам  предлагает оберон? По-старинке, ручками, как в древнем C?


№ 1577   10-01-2007 06:00 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 1575« (Илья Ермаков)
___________________________

1) Мне приходят на ум задачки, в которых они весьма и весьма полезны, однако это никак не кольцевые буфера...


Кольцевые буфера действительно не причем.


Именно в прицеле на подобного рода системные сервисы мы и ввели Weak Pointers в Active BlackBox


Можно увидеть пример использования такого указателя?


2) Простите, а в каком языке слабые ссылки являются частью языка? В .NET, например, это также внеязыковое средство, особый класс Framework'а.


Аналог слабого указателя в C++ реализуется языковыми средствами.


<<<... | 1596—1587 | 1586—1577 | 1576—1567 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 468


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования