Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 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;
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( strongPtr);
Все.
"Аналог слабого указателя в 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++ реализуется языковыми средствами.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|