OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Понедельник, 06 Январь, 2020 02:16 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
budden писал(а):
Есть TLS как абстракция
...
А есть TLS как конкретный механизм
Получается, что отвечая на комментарий про ненужность конкретного механизма при названных условиях, Вы пишете про нужность, уже имея ввиду абстракцию в Вашем понимании. Тогда, пожалуйста, во избежание недоразумений делайте ссылки на определения, потому что иначе мы вынуждены пользоваться первыми попавшимися
Thread-local storage (TLS) is a computer programming method that uses static or global memory local to a thread.

Цитата:
Неудобно, но задача решена
Если Вы напишете подробней, что Вам неудобно, то возможно кто-то подскажет, как сделать удобно, используя идиоматичные подходы для системы, а не борясь с ней. Вы хотите, чтобы log выглядел бы как глобальный, но работал как локальный?


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

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
budden писал(а):
... если я добавлю поле в активный объект, то чем это отличается от TLS по сути?


Если я правильно понимаю, это как раз по сути отличается: понятие "поле в активном объекте" определяется в документе Language Report, а понятия TLS там нет; оно или в Platform-Specific Issues или в документации к компилятору и рантайму.

Скажу по-другому: поле активного объекта - понятие языка (и, если постараться, определяется аксиоматически). Понятие TLS - вообще не языковое понятие, и можно даже не надеяться на аксиоматическое определение. Чтобы реализовать поля активного объекта, в А2 используется (на некоторых платформах) TLS; на других - могут обойтись без него, сделать как-то иначе.

По аналогии: процедуры могут иметь локальные переменные. И мы все знаем, что реализуется это с помощью стека. Однако, в IBM 360 не было аппаратного стека. А паскаль был. И в сообщении о языке слова "стек" вообще нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Январь, 2020 06:55 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Здесь все очень просто. Так как на хостовых версиях а2 рантайм не управляем процессами и стеком, то применяются возможности нижележащей ос, чтобы сделать доступным указатель на текущую активность, в частности, с помощью tls ( я не могу исключать того, что такое решение было принято в учебных целях). В самой a2 понятия tls нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Январь, 2020 13:27 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1447
Откуда: Киев
adimetrius писал(а):
И в сообщении о языке слова "стек" вообще нет.
Если речь про Active Oberon, то в сообщении о языке слово "стек" встречается. Если говорить про Component Pascal или, к примеру, ISO С, то в их определениях стек, действительно, не упоминается.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Январь, 2020 14:22 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
задублировалось...


Последний раз редактировалось budden Понедельник, 06 Январь, 2020 14:26, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Январь, 2020 14:22 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Цитата:
по сути отличается: понятие "поле в активном объекте" определяется в документе Language Report, а понятия TLS там нет

Это, ИМХО, как раз "по форме", т.е. Вы подходите с т.з. определений. По сути же, на достаточно высоком уровне абстракции TLS про инкапсуляцию данных в потоке выполнения, и активные объекты вроде примерно про то же. Кстати, в моей версии определения языка как-то очень туманно сказано про активности, и я бы не сказал, что я смог там найти определение "активности" или "активного объекта". Максимум, что там сказано - это про треды, которые в другом месте являются синонимами процессов, а в третьем месте используется термин "активность", который не определён. Так что опираться на документы в их нынешнем состоянии не очень здорово получается.

Но в целом для меня этот вопрос был довольно практическим, и я его уже решил. Помощь не требуется, cпасибо. Если код кому-то интересен, то он - тут: https://gitlab.com/budden/jaos/blob/подробная-печать-на-рефлексии/source/r.Mod

Всё же отмечу, что треду частенько бывает нужно узнать: "я ли заблокировал этот мьютекс". Без этого знания мьютексы просто неработоспособны. Для этого нужно уметь идентифицировать тред (процесс, активность) среди всех тредов, которые когда-либо есть или были. Умение идентифицировать тред достаточно для реализации TLS. Допустим, если тред идентифицируется числом, то создаётся хеш-таблица, где ключ - это число, а значение - таблица со значениями тред-локальных переменных.

Собственно, и в Objects.Mod есть объект Process, а в нём - поле id. Для реализации TLS не хватает только какой-то функции InitTls, которую нужно запускать до первого использования TLS, чтобы почистить таблицу от старого объекта с таким же номером. Подобные же реализации TLS есть и для Golang, одна из точек входа для поиска - https://stackoverflow.com/questions/319 ... -from-java, и вот одна из реализаций: https://github.com/jtolds/gls, хотя там несколько более тяжеловесное API, насколько я смог понять.

Итого, вывод из темы: TLS в чистом виде отсутствует, но где-то рядом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Январь, 2020 15:04 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Термины "активный объект", "активность" и отличие объекта с процессом от просесса с объектом описано в работе Мюллера.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Январь, 2020 15:17 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Гранд мерси! Ещё пара месяцев и у меня наконец наберётся полная подборка всех этих диссертаций :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 01:55 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
budden писал(а):
Гранд мерси! Ещё пара месяцев и у меня наконец наберётся полная подборка всех этих диссертаций :)

Ой, а запишите меня, пож, в очередь в вашу библиотеку! Когда она наберется полная, то будет бесценна! Когда читаю диссертации, чувствую себя причастником Науки! 8)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 10:19 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Мне кажется, они все легкодоступны, в т.ч. на данном сайте. Просто есть ЭН списков, в т.ч. и у меня есть свой список, и все они кажутся неполными. Надо пройти по всем и сделать объединение множеств.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 15:16 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1488
Откуда: Украина, Киев
Я тоже собирал списочек в порядке хронологии https://gitlab.com/YarRom/a2os/tree/mod


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 15:41 

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

И всё это положить на ныне не существующую a2.oberon.org :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 15:49 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Если уж хвалиться, то мой список - тут:

http://вики-ч115.программирование-по-русски.рф/Ч115/ИсточникиИнформацииОбА2

Хотя единственный эксклюзив в нём - это ссылка на размеченные починенной TF* исходники (размечает она далеко не идеально, не стоит в неё слепо верить, да и версия исходников одиозная).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 17:10 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Спасибо, добавил себе закладку.

ПС
Покрова на Нерли прекрасны!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 21:11 
Модератор
Аватара пользователя

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

TLS в прикладном смысле - это, по сути, возможность каждому потоку иметь свои личные синглтоны, когда это нужно.

Архитектурно для А2 это будет чуждо, я думаю - тут надо, что Владимир Лось включился и "раздал люлей" нам всем, как это он умеет :) - вот почему:
- в модели активных объектов нет вообще понятия "поток", оно элиминировано. Есть обращающиеся друг к другу активные объекты.
В момент, когда объект А вызвал EXCLUSIVE-метод объекта B - в абстрактной модели А2 не "поток объекта А зашёл в метод объекта B" (как в низкоуровневой модели "потоки и крит. секции/мониторы"). А просто объект А попросил объект B что-то сделать, при этом язык гарантирует безопасную семантику (а будет ли это реализовано аля рандеву, когда поток объекта А замер и ждёт, пока поток объекта B дойдёт до обслуживания этого запроса - или это реализовано так, как реализовано - что внутренний поток А входит в критич. секцию объекта B и вызывает метод - это уже варианты реализации).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 22:09 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Январь, 2020 23:04 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
Илья Ермаков писал(а):
Вставлю пять копеек:...


Для меня познавательно, спасибо!


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

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Но это ведь можно обсудить в отдельной теме, например, такой: "почему модель активных объектов делает TLS неактуальной". В данной теме приведена конкретная задача, когда не объект просит кого-то, а сама система (механизм отладочной печати) хочет сделать что-то. Собрана конкретная инфа о том, как реализованы некоторые вещи. Получен конкретный ответ, что TLS нету. Придуман обходной путь. Но чем дальше, тем больше она разбавляется общими рассуждениями. Неужели задача форума состоит в том, чтобы делать компот с селёдкой?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Январь, 2020 07:13 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 293
Откуда: Russia
Илья Ермаков писал(а):
Вставлю пять копеек:
ну, Владим р, Лось не использует оберон, он пишет на си/си++ используя библиотеку с сушностями, которые он, почему-то, называет активными объектами. Что касается того, есть в а2 процессы или нет, и стоит ли их называть только активности и никак иначе, я исхожу из того, что в ETH совершенно не гнушаются употреблять термины процесс, поток, когда говорят об активностях.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 15 Ноябрь, 2021 23:01 

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

Выясняю. По всех *.Objects.Mod есть пр-ра CreateProcess, к-рая создаёт процесс, привязанный к активному объекту. Там проверяется, что заголовок объекта имеет тип Heaps.ProtRecBlock. Но в кооперативной версии этого нет. Если бы он играл ту же роль, можно было бы добавить в эту запись одно поле (их и так там уже 6 штук, от ещё одного не лопнет).

Но похоже, что вместо Objects.CreateProcess вызывается Activities.Create и при этом любой объект является "наследником" от BaseTypes.Object, в котором уже есть как минимум два поля. Можно добавить третье.

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

Более тупой способ - это посмотреть, из каких объектов может вызываться нужная мне процедура и завести для них общего предка, содержащего, в конце концов, нужное поле. При необходимости обратиться к TLS мы пытаемся привести тип текущего активного объекта к данному базовому и тут мы либо рухнем, либо получим доступ. Например, это могут быть:
  • Commands.Runner (использует Modules) - мне нужен только вызов компилятора, пока только он везде при запуске, прямо или косвенно, из UI, в т.ч. из чёрной консоли и по системной горячей клавише.
  • WMMessages.MsgSequencer - использует Modules
  • WMStandardComponents.Timer - растёт от WMComponents.Component (можно было бы запихнуть TLS и туда, но не будем) - использует Modules - не будем, т.к. придётся в базовые классы добавлять.
  • Shell.Оболочка - не использует Modules, но зависит от них через Commands - можно использовать
  • StdIOShell.Executor - использует Modules

Ну и хватит пока.


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

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


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

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


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

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