OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 94 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 15:24 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Ярослав Романченко писал(а):
Это тяжело формализовать и верифицировать?

Хотелось бы посмотреть на такую формализацию.
На самом деле если есть рефлексия, то эта же рефлексия появится в предусловиях и постусловиях или каким-то другим способом нужно будет в предусловиях и постусловиях записывать требования к типу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 15:53 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Rifat писал(а):
На самом деле если есть рефлексия, то эта же рефлексия появится в предусловиях и постусловиях или каким-то другим способом нужно будет в предусловиях и постусловиях записывать требования к типу.
Ваша фраза звучит как сферический конь в вакууме. Есть рефлексия... Не во всём же коде она есть :lol:
Вот, первая процедура, с которой начинается обработка рефлексии в A2, выводящая все типы в модуле. Верифицируйте её, а потом точно так же все процедуры, которые она в процессе работы вызовет. w - объект, понятно, что он не должен быть равен NIL, refs - открытый массив байтов, понятно, что он должен быть не пуст, offset - начальное смещение в этом массиве байтов, понятно, что оно не должно выходить за пределы этого массива.
Люди, ваши рассуждения читать смешно, честно. Вот, правда, такое впечатление, что наиболее ярко против чего-то выступающие, не написали в жизни ни одного приложения...
Код:
   PROCEDURE Report*(w:Streams.Writer; refs: Modules.Bytes; offset: SIZE);
   BEGIN
      CASE refs[offset] OF
         sfModule: ReportModule(w, refs, offset);
         |sfVariable: ReportVariable(w, refs, offset);
         |sfProcedure: ReportProcedure(w, refs, offset);
         |sfTypeDeclaration: ReportTypeDeclaration(w, refs, offset);
      ELSE (* wrong position in stream *)
      END;
   END Report;


Последний раз редактировалось Ярослав Романченко Вторник, 19 Ноябрь, 2019 16:38, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 16:11 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Оставим коня в покое.

Какое будет предусловие и постусловие для кода, который вы привели?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 16:40 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ещё осмелюсь заметить, что в "новой" А2, после 2016 года, рефлексия, по сути, есть, судя по результату отчёта по модулю, который приводил Ярослав. Просто, возможно, не написаны инструменты, которые бы её использовали. Поэтому поднимать вопрос о неуместности добавления рефлексии в A2 уже поздновато.

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

* на входе ANY, и нужно выполнить полиморфно какие-то действия, зависящие от типа. Например, сериализовать
* десереиализация
* отладка

По сути, всё это - об одном и том же.
И ещё:

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 17:04 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
budden писал(а):
Ещё осмелюсь заметить, что в "новой" А2, после 2016 года, рефлексия, по сути, есть, судя по результату отчёта по модулю, который приводил Ярослав.
И всегда была. Феликс как-раз и изменил формат объектных модулей, что-бы привести рефлексию к более упорядоченному виду.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 17:05 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
budden писал(а):
* динамическая загрузка модулей (которые, очевидно, многими расцениваются как конкурентное преимущество оберонов). Как возможно динамически слинковать модули, если нет рефлексии?

Как мне кажется, чтобы реализовать динамическую загрузку модулей, при первом их использовании, рефексия не нужна. Рефлексия нужна, если необходимо загружать по имени.


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

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Rifat писал(а):
Какое будет предусловие и постусловие для кода, который вы привели?
Я там написал не достаточно?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 17:21 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Там у вас немного написано про предусловие при этом описано довольно неформально.
Цитата:
"Вот, первая процедура, с которой начинается обработка рефлексии в A2, выводящая все типы в модуле. Верифицируйте её, а потом точно так же все процедуры, которые она в процессе работы вызовет. w - объект, понятно, что он не должен быть равен NIL, refs - открытый массив байтов, понятно, что он должен быть не пуст, offset - начальное смещение в этом массиве байтов, понятно, что оно не должно выходить за пределы этого массива."

Постусловие не описано.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 17:35 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Rifat писал(а):
Там у вас немного написано про предусловие при этом описано довольно неформально.
Остаётся только формализовать :wink:
Rifat писал(а):
Постусловие не описано.
Приведённый код не должен ничего поменять, лишь должен что-то вывеси в лог, т.е. сместить текущую позицию в потоке вывода.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 17:54 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Значит постусловие должно описывать то, что будет выведено в лог.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 19:27 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Ручная сериалидация/десериализация это такая развесистая клюква, чреватая наличием ошибок, расплывшихся по всей экосистеме. Рефлексия, в данном случае, дает нам единый шаблон и централизованное решение. А если оно еще и автоматизировано ( например, Дельфи )… то это можно только приветствовать. Закат солнца вручную ... он того... этого... наказуем.
Всякие прокси-объекты, которые, по-сути, призваны решить проблему отсутствия рефлексии, ничего, кро е проблем не добавляют, так как являются потенциальным источником ошибок. Все, что может сделать компилятор, должен делать компилятор.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Ноябрь, 2019 19:37 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Вызов команды по имени, загрузка модуля по имени - это всё рефлексия. Если это - зло, то тогда и БлекБокс - зло.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 20 Ноябрь, 2019 00:08 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Илья Ермаков писал(а):
Иначе - прибитое гвоздями в коде типа QT.
Возможно, я неправильно понимаю, что Вы имеете ввиду под "прибитое гвоздями", но допускаю, что Вы несколько недооцениваете QT. По моему опыту вся прибитость происходит не столько из-за технических особенностей, сколько из-за понимания программистами и другими причастными, как должно строиться взаимодействие. В 2013 году для нашей приблуды в виде динамической библиотеки была сделана визуальная среда, которая в соответствии с моим видением должна была строить интерфейс, основываясь на данных, полученных от библиотеки после подключения. Я ничего не навязывал, и коллеги после некоторых экспериментов единогласно проголосовали именно за QT, на 4-й версии которого и была успешно реализована задумка. Я даже не особо вмешивался в процесс, достаточно было постановки задачи и поверхностного контроля. Может, наш подход был не совсем типичным для QT и некоторые вещи меня в нём раздражали, но, по крайней мере, framework оказался достаточно гибким и не оказывал сопротивления. Чуть позже добавилась концепция самоописываемых устройств, когда уже не просто библиотека, но и отдельные подключаемые устройства/процессы взаимодействовали через гибкие интерфейсы. Всё было сделано без рефлексии и никаких сверхестественных технических трудностей и прибитостей гвоздями я не увидел. Зато вскрылось следующее:
1. Первоначальное сопротивление и скепсис части коллег, которое было преодолено отчасти субординацией, отчасти быстрым достижением рабочего результата.
2. Когда мы попытались продвинуть решение дальше - в штаб квартиру, то сначала это вызвало полное непонимание. Когда же осознание пришло, то нам даже запретили заниматься чем-либо подобным. Несмотря на масштабируемость и высокую скорость распространения изменений в гибком решении, с их точки зрения всё должно было быть прибито гвоздями, потому что они так привыкли! Решение мы оставили неизменным, но его пришлось прятать за ширму.
3. На текущем проекте, к которому я присоединился в сложенную команду как рядовой разработчик, я показал лидеру проекта свои наработки и предложил воплотить схожий подход. И увидел равнодушный взгляд и отговорку - сложно.

Я вижу, что дело не столько в технике, сколько в психологии. Тупая жёсткость визуальной среды - это не результат незнания, который легко преодолевается, а результат сознательного выбора многих разработчиков.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 20 Ноябрь, 2019 09:59 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Comdiv писал(а):
...


Вы сами плотно в ББ работали?

Насколько я представляю QT (по 2000-м ещё годам), я не могу формировать в самом запущенном приложении интерактивно интерфейс её самой же. Открыть составной документ, например, тут же его менять. Ибо там обработка этапа компиляции.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 20 Ноябрь, 2019 13:11 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Comdiv писал(а):
Чуть позже добавилась концепция самоописываемых устройств, когда уже не просто библиотека, но и отдельные подключаемые устройства/процессы взаимодействовали через гибкие интерфейсы.

Мы можем всё же говорить честно и без манипуляций? Самоописываемые устройства - это и есть рефлексия. Вы её реализовали и продвигали в разных направлениях, и Вы же пишете, что рефлексией почти никогда пользоваться нельзя. Но вы даёте так мало деталей, что данное моё высказывание рискует оказаться ложным и Вы тут же начнёте меня критиковать, что я искажаю Ваши слова. Выглядит как системная и достаточно грамотная манипуляция. Равно как и то, что Вы пытаетесь уйти от ответственности за создание этой темы. Прямо противно, честно сказать. Уже который раз убеждаюсь, что я проиграл в тот момент, как начал реагировать на ваши наживки и крючки. Сколько времени потрачено на чтение этой темы, обдумывание ответов и проч, а его можно было бы потратить с большей пользой.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 20 Ноябрь, 2019 13:26 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ну ладно, может быть я зря так приписываю Вам манипуляции, может быть, это просто непонимание. Но в любом случае, пустая трата времени налицо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Ноябрь, 2019 01:47 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
Илья Ермаков писал(а):
Вы сами плотно в ББ работали?
Нет, плотно не работал. Это нужно?

Цитата:
Насколько я представляю QT (по 2000-м ещё годам), я не могу формировать в самом запущенном приложении интерактивно интерфейс её самой же
Не можете в каком смысле? Нет готового компонента? Наверно, и нет, как и запроса со стороны пользователей. Сколько людей приходят посмотреть на ББ и говорят, что это то, что нужно, а сколько - что им нужна "нормальная" среда с обычным текстом? А принципиальная возможность для QT есть, каркас не сопротивляется.

Цитата:
Ибо там обработка этапа компиляции.
А что для этого нужно, кроме обычного ООП? Вы считаете, что возможность задействовать неявный обработчик через рефлексию даёт принципиальное преимущество перед явно зарегистрированным? Тогда нужен пример, желательно очищенный от излишней специфики.

Кстати, я нахожу это забавным в контексте нашей беседы, но в QT есть своя рефлексия


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Ноябрь, 2019 02:00 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
budden писал(а):
Но вы даёте так мало деталей, что данное моё высказывание рискует оказаться ложным и Вы тут же начнёте меня критиковать, что я искажаю Ваши слова. Выглядит как системная и достаточно грамотная манипуляция. Равно как и то, что Вы пытаетесь уйти от ответственности за создание этой темы.
Могу предложить lifehack. Если кажется, что дано мало информации, то вместо того, чтобы рефлексировать на тему возможных коварных многоходовочных манипуляций, можно попросить уточнить интересующие Вас данные.

budden писал(а):
Вы пытаетесь уйти от ответственности за создание этой темы. Прямо противно, честно сказать
То есть, Вы не оценили, что я не захотел замусоривать созданную Вами тему для обсуждения другого вопроса?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Ноябрь, 2019 12:08 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Ну я-то вполне чётко выразился, как мне казалось. Выделить тему - это хорошо. Проблема - в формулировке этого отростка темы. Вы, кстати, так и не ответили, что Вы имели в виду этой формулировкой. В целом мне не столь важно обсуждение того, что Вы предлагаете, я сразу написал своё отношение: рефлексия нужна для отладки, а её роль в безопасности, конечно, требует обсуждения и я это запомнил, но пока это обсуждение протекает вяло, если считать по существу. И мне сейчас не до этого, сейчас я не пытаюсь создать прототип защищённой ОС из А2, а всего лишь показать, что может существовать маленькая полноценная ОС. О защищённости в случае А2, понятное дело, речь не идёт. Всего лишь Оберон, как язык более надёжный, чем Си, выступает тут в качестве защищённости.

В качестве самого простого ответа, рефлексия может быть более безопасной, чем рукописные обёртки, или чем автоматически сгенерированные обёртки. Для случаев, когда безопасность должна быть повышена, рефлексию можно отключать с помощью Дагаевских RESTRICT-ов. Без них Активный Оберон, в общем-то и не является безопасным языком, т.к. в нём есть адресная арифметика, на которую компилятор не ругается.


Последний раз редактировалось budden Четверг, 21 Ноябрь, 2019 12:30, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 21 Ноябрь, 2019 12:12 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Comdiv писал(а):
Илья Ермаков писал(а):
Вы сами плотно в ББ работали?
Нет, плотно не работал. Это нужно?

Цитата:
Насколько я представляю QT (по 2000-м ещё годам), я не могу формировать в самом запущенном приложении интерактивно интерфейс её самой же
Не можете в каком смысле? Нет готового компонента? Наверно, и нет, как и запроса со стороны пользователей. Сколько людей приходят посмотреть на ББ и говорят, что это то, что нужно, а сколько - что им нужна "нормальная" среда с обычным текстом? А принципиальная возможность для QT есть, каркас не сопротивляется.


Не компонента нет, а архитектуры нет.
https://yadi.sk/i/u6K6PETHS22OsQ

Это - и среда, и приложение, границы нет. Рядом один и тот же документ-форма и в дизайн-режиме, и в боевом. Комбинация всего со всем.

Всё ведь просто: интепретируемые гибкие языки (LISP, Smalltalk) за счёт метаперехода (программа сама собой может оперировать, нет границы между временем разработки и выполнения и т.п.) дали прорыв для сложных задач - и, в частности, в случае Smalltalk - в визуальных операционных средах.

Вирт после стажировки в Паоло-Альто сделал из Модулы-2 Оберон и Оберон-среду, в которой получил все свойства интерпретаторов и языков "без синтаксиса и типов" в типизированном, классическом, компилируемом языке.

Потом рефлексия уже оттуда стала нормой в Java, далее - в .NET - и вообще стандартом. Хотя концептуально в плане UI они так до сих пор и не вкурили опыт Оберона.

Вы вместо просто грамотных акцентов на аспектах безопасности критикуете сам метапереход (переход к программе, оперирующей в рантайме своими сущностями - и за счёт этого имеющей адаптивность, гибкую архитектуру и т.п.). Методологически Вы неправы - вот о чём речь.

В том, что многое можно и хорошо перенести на этап компиляции (только не ценой раздувания синтаксиса языка мета-средствами аля в С++ или Scala или Haskell) - я с Вами согласен. Не отменяя рефлексию как мощный мета-уровень в архитектуре.


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

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


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

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


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

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