OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 18 Ноябрь, 2019 11:25

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




Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Воскресенье, 03 Февраль, 2019 18:54 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 80
Откуда: Russia
Если есть управление проектом, то компиляция командой не сильно нужна, хотя она ничего не ломает. Инфа об исходном файле должна записываться в объектный модуль, так и автоматически строить список инкрементальной сборки проще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Воскресенье, 03 Февраль, 2019 19:04 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Какая разница между объектным и символьным в данном случае?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Воскресенье, 03 Февраль, 2019 19:11 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 80
Откуда: Russia
budden писал(а):
Какая разница между объектным и символьным в данном случае?

Символьный файл это интерфейс модуля в текстовом формате, а объектный это загружаемый модуль с машинным кодом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Воскресенье, 03 Февраль, 2019 20:22 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Так нормально ли будет загрузить в символьный, а не в объектный, вот в чём вопрос.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 11:55 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Вчера я частично преуспел в генерации константы (всё классно, только созданный объектный файл не загружается). Она будет жить в объектом файле, а в символьный, как я понял, сама попадёт. В связи с этим вопрос: можно ли открыть объектный файл и прочитать из него константу с заданным именем, не загружая этот файл? Тот же вопрос про символьный файл.

Но мне стала открываться глубина бездны. Чтобы перейти к определению метода, нужно найти все его реализации и показать их. Т.е. нужно индексированное хранилище, которое будет ещё и следить за изменениями в символьных файлах. В лиспе это решено проще - метаинформация берётся прямо из рантайма. Но в обероне всё по-другому и этот вариант не работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 12:24 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
budden писал(а):
Но мне стала открываться глубина бездны. Чтобы перейти к определению метода, нужно найти все его реализации и показать их.

И даже те, которые еще не написаны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 14:00 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Ирония тут неуместна. Нечего сказать - просто держитесь в стороне.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 14:42 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
А как генерируется документация? Там нет ли списка всех методов? Я нашёл в FoxBackend.Mod в конце какую-то команду,
она меня обругала и html файл не создался. Не хватает файла шаблона, файл такой нигде не нашёл.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 15:58 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
budden писал(а):
Ирония тут неуместна.

Я просто пытаюсь ускорить осознание того факта, что все реализации метода показать невозможно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 16:45 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Смотрите сами что-нибудь не осознайте :wink: Уже написанные показать можно и нужно. Потому что если есть вызов типа
переменнаяКлассаИкс.Метод, то для исчерпывающего анализа происходящего в конкретной программе нужно увидеть
методы для классаИкс и всех его известных потомков классаИкс.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 16:52 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
budden писал(а):
Вчера я частично преуспел в генерации константы (всё классно, только созданный объектный файл не загружается). Она будет жить в объектом файле, а в символьный, как я понял, сама попадёт. В связи с этим вопрос: можно ли открыть объектный файл и прочитать из него константу с заданным именем, не загружая этот файл? Тот же вопрос про символьный файл.
Можно - нужно парсить файл. Компилятор так и поступает с символьными файлами, имена которых находятся в списке импорта. Это, в отличии от разбора всего программного модуля, ускорят компиляцию и снижает нагрузку на память, так как используется только публичный интерфейс. Но этой информации недостаточно для перехода к определению, так как символьный файл не содержит информации о расположении сущностей в программном модуле.
budden писал(а):
Но мне стала открываться глубина бездны. Чтобы перейти к определению метода, нужно найти все его реализации и показать их. Т.е. нужно индексированное хранилище, которое будет ещё и следить за изменениями в символьных файлах. В лиспе это решено проще - метаинформация берётся прямо из рантайма. Но в обероне всё по-другому и этот вариант не работает.

Так модули квалифицированы, нужно лишь пройтись по списку импорта, "отматывая назад" до нахождения реализации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 18:15 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Я имею в виду виртуальные методы. Если есть БазовыйКласс.Метод, РасширенныйКласс1.Метод и РасширенныйКласс2.Метод, то единственным внятным ответом на вопрос «покажи мне определение для переменнаяБазовогоКласса.Метод» является вывод списка всех трёх этих методов, поскольку вызваться может любой из них. А чтобы получить список потомков, нужно перерыть все доступные символьные файлы, из них выбрать те, которые импортируют модуль, где определён БазовыйКласс, прямо или косвенно, и поискать в каждом.

> Компилятор так и поступает с символьными файлами, имена которых находятся в списке импорта.
Спасибо. Вопрос в том, возможно ли это сделать без побочных эффектов. Надо посмотреть.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 18:16 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Понедельник, 04 Февраль, 2019 22:21 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Похоже, что игра окончена. Вы тут обсуждали какие-то титанические изменения, а я-то понимал, насколько мало ресурсов.
Всё, что я успел - это научиться добавлять константу с именем исходника в модуль, которое работает только при компиляции командой Compiler.Compile, но не при компиляции из PET.

В объектный и символьный файл добавляется вот такая константа:
Код:
__dEfInEdInThEFilE__* = \"C:/ob/A2OS/Source/PET.Mod"\;


Исходник - тут: https://github.com/budden/ch115

Различие - вот:
Код:
 source/FoxParser.Mod | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/source/FoxParser.Mod b/source/FoxParser.Mod
index b4302bc7c..78c7a1862 100644
--- a/source/FoxParser.Mod
+++ b/source/FoxParser.Mod
@@ -2273,6 +2273,22 @@ TYPE
          IF Trace THEN E( "TypeDeclaration" ) END;
       END TypeDeclaration;
 
+      (** Compiler-generated constant *)
+      PROCEDURE GenerateStringConstantDeclaration*(parentScope: SyntaxTree.Scope
+        ; name: SyntaxTree.Identifier
+        ; position: Position
+        ; value: Scanner.StringType );
+      VAR constant: SyntaxTree.Constant;
+      BEGIN
+      IF Trace THEN S( "GenerateStringConstantDeclaration" ) END;
+      constant := SyntaxTree.NewConstant( position, name );
+      constant.SetAccess(SyntaxTree.Public + SyntaxTree.Protected + SyntaxTree.Internal);
+      constant.SetValue(SyntaxTree.NewStringValue( position, value ));
+      parentScope.AddConstant( constant );
+            
+      IF Trace THEN E( "GenerateStringConstantDeclaration" ) END;
+      END GenerateStringConstantDeclaration;
+
       (** ConstDeclaration = IdentifierDefinition '=' Expression. **)
       PROCEDURE ConstDeclaration(parentScope: SyntaxTree.Scope );
       VAR name: SyntaxTree.Identifier;  position: Position; constant: SyntaxTree.Constant;  expression: SyntaxTree.Expression;  access: SET;
@@ -2387,8 +2403,11 @@ TYPE
       **)
 
       PROCEDURE Module*(): SyntaxTree.Module;
-      VAR moduleName, context: SyntaxTree.Identifier;  module: SyntaxTree.Module;  position: Position; isCellNet: BOOLEAN;
+      VAR moduleName, context: SyntaxTree.Identifier; 
+        sourceFileNameConstName: SyntaxTree.Identifier;
+         module: SyntaxTree.Module;  position: Position; isCellNet: BOOLEAN;
          scannerDiagnostics: Diagnostics.Diagnostics; modifiers: SyntaxTree.Modifier; (* c: SyntaxTree.Comment; *)
+         
       BEGIN
          IF Trace THEN S( "Module" ) END;
          position := token.position;
@@ -2425,6 +2444,13 @@ TYPE
 
             WHILE Optional(Scanner.Import) DO ImportList(moduleScope) END;
             DeclarationSequence( moduleScope);
+
+            StringPool.GetIndex("__dEfInEdInThEFilE__", sourceFileNameConstName);
+            GenerateStringConstantDeclaration(currentScope
+               , sourceFileNameConstName   
+               , position
+               , scanner.source);
+            
             IF Peek(Scanner.Begin) OR Peek(Scanner.Code) THEN
                moduleScope.SetBodyProcedure(BodyProcedure(moduleScope)); (* insert empty body procedure if necessary *)
             END;


Больше всего меня бесят пока что две вещи - это сложность сборки (вместо подачи одной команды нужно проделать эн манипуляций мышью), её хрупкость (это можно было бы решив, продублировав компилятор) и строки. Это всё можно было бы решить, если бы было на это время. Ну и со шрифтами какой-то ад. Шрифт Оберон мне не нравится, а сделать иной шрифт по умолчанию
мне не удалось - там явно что-то не в порядке с кодом чтения-записи модулей. Я поставил курьер и всё вроде бы работало, но в самый неудачный момент, когда надо было собирать систему, сломался этот вот CompileCommand.Tool . Пришлось вернуться к шрифту Оберон.

По ходу дела переставил конфликтующие Ctrl-Tab и Ctrl-Shift-Tab в PET на Ctrl-7 и Ctrl-Shift-7, на это было потрачено драгоценное время, а зря.

Я придумал костыльный обходной путь для установки шрифта курьер, но на каждое открытие файла приходится несколько раз нажимать мышью, точно попадая в определённые места экрана. Это ад. И, конечно, данный проект достаточно масштабный, чтобы перед его началом избавиться от такого ада. Но не получилось.

От этой константы до решения по поиску определения ещё пахать и пахать, конечно же. Вряд ли у меня есть на это время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Вторник, 05 Февраль, 2019 05:54 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
budden писал(а):
Больше всего меня бесят пока что две вещи - это сложность сборки (вместо подачи одной команды нужно проделать эн манипуляций мышью), её хрупкость (это можно было бы решив, продублировав компилятор) и строки. Это всё можно было бы решить, если бы было на это время. Ну и со шрифтами какой-то ад. Шрифт Оберон мне не нравится, а сделать иной шрифт по умолчанию
мне не удалось - там явно что-то не в порядке с кодом чтения-записи модулей.Я поставил курьер и всё вроде бы работало, но в самый неудачный момент, когда надо было собирать систему, сломался этот вот CompileCommand.Tool . Пришлось вернуться к шрифту Оберон.
Компилировать можно из командной оболочки Menu->Tools->Shell, или убрав в файле конфигурации загрузку всего, что связано с графикой и рабочим столом, и останешься в текстовом режиме с тем же Shell'ом.
Системный шрифт меняется в конфигурации Menu->System->Confuguration - ищем ветку WindowManager/FontManager/DefaultFont.
Код:
<Section name="DefaultFont">
   <Setting name="Name" value="Vera"/>
   <Setting name="Size" value="14"/>
</Section>

Но это шрифт не работает с документами в формате Oberon, куда зашит шрифт Oberon и даже кодировка Oberon ( почти KOI8 )).
Файл конфигурации можно разместить в рабочем каталоге и тогда именно он будет подхватываться при загрузке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Вторник, 05 Февраль, 2019 10:01 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Kemet, большое спасибо за помощь, которую Вы оказывали! Можете пошарить в моих изменениях - я пополнил туториал, правда, частично на русском, и перевёл в текстовый формат, так что он теперь менее симпатичен. Там явно не хватало многого про сочетания клавиш. Теперь не хватает меньше.

Шрифты я пытался исправить не только в файле конфигурации, см. историю TextUtilities. Но шрифт Оберон оказался прибит большим количеством гвоздей и не успел разобраться со всеми из них. Поскольку в таком виде текст (для меня) очень мелкий, приходилось увеличивать абсолютно каждый открываемый документ. Это - болезнь многих систем из 90-х - зерно современных мониторов намного меньше и без возможности быстро всё увеличить пользоваться такими системами я не могу - здоровье дороже. Масштабирование всего экрана плохо дружит с Alt-Enter, поэтому им тоже пользоваться нельзя. Хотя было бы проще, наверное, починить Alt-Enter. Но умная мысля приходит опосля. Короче, тут явно не хватает настроек в системе, и мне не удалось решить эту проблему, а время я на неё потратил.

Шрифт по умолчанию в PET вроде ставился из файла конфигурации, но при попытке увеличить шрифт в текстовом окне опять сбрасывается на оберон. В итоге приходится постоянно держать на экране инструмент выбора шрифтов и при открытии каждого документа помечать весь текст и применять шрифт курьер 18.

В общем, со шрифтами какой-то крупный непорядок.

Shell в данной системе уступает идеологии «текст как набор команд». Добавить бы в него хранение истории в файле - и он был бы вполне приемлем (я шеллы люблю больше, чем «текст как набор команд»). А так приходится каждый раз после старта системы все команды набирать заново - это неэффективно.

Теперь мне надо думать о поиске работы, и мне некогда заниматься этой игрушкой. Игрушка славная, жаль, что я не знал про неё года 3-4 назад. Но монетизировать её в ближайшем будущем не представляю как. Поэтому пришлось сделать волевое усилие и прекратить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Вторник, 05 Февраль, 2019 11:20 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
В текстовом окне работают сочетания Ctrl+MouseWheel для масштабирования шрифта текста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Вторник, 05 Февраль, 2019 15:05 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
budden писал(а):
Уже написанные показать можно и нужно.

Ладно, подожду пока встретите процедурную переменную.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Вторник, 05 Февраль, 2019 18:41 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 623
Kemet писал(а):
В текстовом окне работают сочетания Ctrl+MouseWheel для масштабирования шрифта текста.

Я уже сейчас не буду это повторять, но в моём случае я устанавливал шрифт по умолчанию в cour. Дальше открывался PET со шрифтом cour, и при масштабировании превращался в Оберон. Я об этом уже написал в прошлом большом сообщении, хотя, возможно, недостаточно детально:
Цитата:
Шрифт по умолчанию в PET вроде ставился из файла конфигурации, но при попытке увеличить шрифт в текстовом окне опять сбрасывается на оберон. В итоге приходится постоянно держать на экране инструмент выбора шрифтов и при открытии каждого документа помечать весь текст и применять шрифт курьер 18.


Цитата:
Ладно, подожду пока встретите процедурную переменную.

Ждать долго придётся - этот проект заморожен, если кто-то ещё не понял, т.к. я сейчас занят поиском работы. Однако для процедурной переменной можно показать только исходник самой переменной, а не функции, которая в ней "сейчас" записана (показать функцию, которая записана, в версии - это отдельная задача, хотя, возможно, и решаемая) и уж тем более не всех определённых процедур, имеющих такой же процедурный тип. Хотя - почему бы и нет? Тоже имеет смысл. Но это ничего не значит для методов, которые устроены по-другому.


Последний раз редактировалось budden Вторник, 05 Февраль, 2019 18:51, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переход к определению
СообщениеДобавлено: Вторник, 05 Февраль, 2019 18:50 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 80
Откуда: Russia
Да вроде зум шрифта в текстовых полях работат, сейчас тоже проверил ' активировать окно pet и ctrl +wheel работает . Изменяется размер шрифта а не виджетов.


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

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


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

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


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

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