OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 14 Декабрь, 2024 23:01

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




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 17 Март, 2023 20:52 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
слушайте, а никто не пытался взять из A2 ядро, которое работает поверх ОС, стрипнуть всё остальное, взять компилятор, и запускать это из консоли? не обязательно генерировать монолитные родные бинари: этот же минимальный рантайм можно использовать и для прикладного софта. компилятор ведь хороший, умеет в кучу архитектур, мультипоточность в ядрах из коробки… финальные бинари можно делать как в BB: просто собирать все модули в кучку. зачем мучиться с транспилерами в си, если можно иметь полноценную оберон-систему со всей её модульной динамикой, всё сделано же уже?

понятно, что придётся, по сути, сделать новый рантайм (тексты, файлы, etc.) и пристыковать его к фоксу. и научить фокс генерировать модули-импорты .so/.dll. не так уж сложно. если б в сутках было хотя бы часов пятьдесят-шестьдесят, я бы и сам занялся…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Март, 2023 21:57 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 563
Откуда: Украина, Днепропетровская обл.
Так вроде в A2 уже давно не Fox в качестве компилера?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 00:59 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
вы спутали Fox и PACO, кажется. прошлый был PACO, потом его заменили на Fox.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 18:21 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 305
Откуда: Russia
оно уже давно именно так и работает.

https://t.me/A2OperatingSystem/19514


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 18:51 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
простите, не имею ни малейшего понятия что там написано, увы: не имею фсбграма.

если на свете существует возможность использовать Fox как обычный консольный комипилятор с небольшим рантаймом для написания софта не под A2, по сути — то это очень круто спрятаная фича. как, впрочем, и почти всё, что относится к A2, увы. очень жаль. так мы слона никогда не продадим. T_T


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 19:38 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 305
Откуда: Russia
не знаю, что, куда и кем "спрятано", но достаточно задать себе вопрос, а как же а2 собирается из а2 и запускается в виде обычного приложения в других ОС?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 20:26 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
я довольно криво пояснил, простите. я кагбэ понимаю, что это реализовано, однако я имел в виду совсем не то. или как минимум не совсем то. я имел в виду готовый к использованию пакет, в котором от A2 только ядро и наиминимальнейший рантайм для чтения и компиляции текстовых файлов (ну, и для складывания получившихся артефактов в заданое место). то есть, чтобы выглядело как классический консольный компилятор софта для host os, с биндингами к другим библиотекам, и так далее. плюс минимальный рантайм без подвязок к текстовой и оконной системе A2.

ну, то есть, чтобы взять этот пакет — и просто писать софт под целевую ос (а не под A2), используя минимум из A2 как рантайм. то есть, ядро, чтение текстовых файлов, запись артефактов, динамическая загрузка модулей — и всё. и дальше бинды к «родным» библиотекам.

я понимаю, что это можно оформить из того, что уже есть — но готового-то нет. а жаль. у меня, в общем, не особо праздный интерес: я бы это применил для нескольких своих проектов. но категорически не хватает длины суток, чтобы попытаться это оформить; особенно с учётом того, что с A2 я знаком весьма шапочно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 21:53 

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

Код:
module Hello;
import StdIO, Commands, Options;

procedure Run( context: Commands.Context );
var options: Options.Options;
var str: array 256 of char;
begin
  if ~context.arg.GetString( str ) then (* skip app name *)
    context.error.String("Critical error: no arg"); context.error.Update;
    context.result := Commands.CommandError;
    return;
  end;
 
  new( options );
  options.Add( "s", "show", Options.String );

  if options.Parse( context.arg, context.error ) & options.GetString( "show", str ) then
    context.out.String( str ); context.out.Ln;
    context.out.Update;
  end;
end Run;

begin
  trace("Hello, World!");
  Run( StdIO.env );
end Hello.

компиляция
oberon.exe --config=oberon.ini compile Hello.mod

линковка для вин64

oberon.exe --config=oberon.ini link --fileName=hello.exe --fileFormat=PE64CUI --extension=GofWw --displacement=401000H Trace Traps Hello


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 18 Март, 2023 22:10 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
Sergej Durmanov писал(а):
a2 как приложение запускается в виде консольной программы-командной оболочки, из которой стартует gui (или не стартует, если соответствующие команды отсутствуют). Куда уж меньше ужимать?
если я верно понимаю — то там вся среда почти заводится, просто без гуёв. то есть, вся механика: текстовые модели, fs translation layer, интерпретаторы команд, etc., etc. то есть, по факту, весь фрэймворк — который в принкладном софте (лично мне) не нужен.

а я бы хотел, чтобы там было только ядро, загрузчик модулей, Files, и Reader для plain text, чтобы кормить компилятор. и всё. а, ну и сам компилятор, конечно. ;-) остальное выкусить и выкинуть. то есть, совсем-совсем минимальный рантайм. а я поверх построю свой, без всего, что делает A2 хорошей. ;-)

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 19 Март, 2023 22:41 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
собственно, до меня дошло, что я опять ни разу не пояснил, зачем оно мне надо.

во-первых, я хочу делать индюшатные видеоигори. хитрый план: поставлять вместе с ними тот же компилер, который был использован для написания, и все модули игоря. соответственно, любой игорь автоматически поставляется с SDK для модов, причём полноценным. минимальные изменения в компилере (запрет на импорт SYSTEM и ещё мелочи для ограничения доступа к другим опасным модулям) — и SDK становится безопасным, хоть и компилируемым в машинный код. причём не надо делать никаких скриптовых языков, JIT, обвязок для экспорта кишок игры в скрипты… киллер фича, ни у кого такой нет.

соответственно, для этой задачи мне не нужно ничего из A2 кроме ядра и минимальной читалки plain text, чтобы завести компилятор. остальное я себе сделаю сам, под конкретные нужды.

а во-вторых, если приделать к фоксу парзер компонентного паскаля, то на это ядро можно пересадить BlackBox. и получить столь желаемую поддержку кучи архитектур в нём. а парзер CP можно будет вернуть обратно в основную A2, он там никому ж не помешает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 23 Март, 2023 05:42 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 305
Откуда: Russia
Fox работает со Streams, а не с Texts. Поэтому и отвязывать ничего не нужно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 23 Март, 2023 06:16 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
понял. я довольно давно смотрел в A2, простите. в любом случае: я ваш пример линковки себе схоронил, спасибо. когда появится возможность — полезу разбираться нормально. если у меня хватит терпения хотя бы на PoC, то обязательно сообщу на форуме.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 25 Март, 2024 19:56 

Зарегистрирован: Вторник, 12 Март, 2024 20:31
Сообщения: 25
А что такое TRACE? В описании языка это ключевое слово не встречается, только в примерах.

И что можно прочитать, чтобы понять вот эту строку?
Код:
oberon.exe --config=oberon.ini link --fileName=hello.exe --fileFormat=PE64CUI --extension=GofWw --displacement=401000H Trace Traps Hello

Хочу сделать так же, но под Linux64.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 25 Март, 2024 23:51 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1618
в ЯОС немного описано, "трассируй" = "TRACE": https://tvoygit.ru/budden/ja-o-s/src/branch/главная/док/язык-и-библиотека/описание-языка.md#12b111-отладочная-печать-ппиши-трассируй

Чтобы понять эту строку, нужно читать изрядные куски компилятора и линкера, Compiler.Mod, FoxIntermediateBackend.Mod, FoxAMDBackend.Mod, Linker.Mod - не уверен, что эти строчки где-то описаны, хотя Сергей может знать лучше.

Примеры уже готовых строк для настройки компилятора для разных платформ можно найти в конце Compiler.Mod.

Строки линкера можно найти в скриптах сборки A2, если таковые существуют. В ЯОС они существуют для всех платформ, например, вот скрипт для пересборки платформы Linux64

https://tvoygit.ru/budden/ja-o-s/src/branch/главная/Linux64/skripty-sborki/Linux64-iz-Linux64/собери-яос-linux64.баш

- читая его и открывая используемые файлы, можно понять, что к чему. Пересборка делается из графической среды, потому что там проще работать с ошибками. Однако, если написать SystemTools.DoCommands и в конце System.PowerDown, можно сделать скрипт сборки чего угодно, который будет в случае успешной компиляции выгружать графическую среду. А если что-то упало, то он останется в графической среде и будет более удобно диагностировать проблему.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Март, 2024 22:59 

Зарегистрирован: Вторник, 12 Март, 2024 20:31
Сообщения: 25
Написал модуль
Код:
MODULE hello;

IMPORT StdIO, Commands;

PROCEDURE Run(context: Commands.Context);
BEGIN
    context.out.String('Привет!');
    context.out.Ln;
    context.out.Update
END Run;

BEGIN
        Run(StdIO.env)
END hello.

Скомпилировал командой
Код:
./oberon --config=oberon.ini compile hello.Mod

Скомпилировалось. Появились соответствующие файлы с расширениями .GofUu и .SymUu.

Слинковал командой (подсмотрел в исходном тексте модуля Linker.Mod)
Код:
./oberon --config=oberon.ini link --fileName=hello --fileFormat=Raw --extension=.GofUu --displacement=08048000H hello

Слинковалось. Появился файл hello. Сделал его исполняемым и запустил. В консоль прописалось
Код:
Привет!

Однако команда почему-то завершилась с кодом ошибки 1. А ещё я не смог понять, что там за колдовство происходит с StdIO.env и contecxt.out. У объекта Commands.Context нет никакой процедуры out.

Пока так.

А сборщик мусора при запуске отдельно скомпилированной программы будет работать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Март, 2024 23:31 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1618
Можно попробовать Context.result поставить в 0, хотя я не спец.
context.out - это не процедура, а поле объекта Commands.Context


Линкер составляет лог, там видно, какие модули включены в программу. То, что я изучал о процессе запуска ОС, я записал вот тут:

https://tvoygit.ru/budden/ja-o-s/src/branch/главная/док/запуск-ос-2.md
https://tvoygit.ru/budden/ja-o-s/src/branch/главная/док/о-загрузке-модуля.md

Соответственно, повторив это исследование, можно понять, как работает Ваша программа. Там совершенно точно многое происходит под капотом. Осмелюсь предположить, что если у Вас используется NEW, то и сборщик мусора будет работать, т.к. он является частью NEW. Но это не точно, лучше провести эксперимент (написать программу, которая создаст оооочень много временных объектов, ссылки на которые будут постепенно исчезать).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Март, 2024 03:29 

Зарегистрирован: Вторник, 12 Март, 2024 20:31
Сообщения: 25
arisu писал(а):
простите, не имею ни малейшего понятия что там написано, увы: не имею фсбграма.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Март, 2024 07:03 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1550
если я верно помню, то собрать без GC вообще будет проблематично, потому что это часть Kernel — который включается безусловно.

кстати имею сказать, что в свете своих последних изысканий я сильно охладел к идее иметь в такой позиции именно лису. CP2 выдернуть намного проще, и его вполне хватит.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Март, 2024 12:44 

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


Последний раз редактировалось budden Среда, 27 Март, 2024 12:57, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Март, 2024 12:56 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1618
Release.Tool - это файл описания конфигурации - это обычный обероновский текстовый документ (может быть в формате utf, bbt или оберон, но это текст). Строчка import release.tool говорит, что надо прочитать всё содержимое файла release.tool, подобно #include в Си. В файле release.tool описаны все конфигурации A2 и это файл в высшей степени содержательный.

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

https://tvoygit.ru/budden/ja-o-s/src/branch/главная/док/файл-описания-конфигураций.md - здесь есть кое-какой анализ. Соответствие между русскими и английскими ключевыми словами в файле описания конфигурации - где-то начиная отсюда и далее:

https://tvoygit.ru/budden/ja-o-s/src/branch/главная/source/СборщикВыпускаЯОС.ярм#L3012

Сам по себе файл Release.Tool в ЯОС назван ЯОС.фок.


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

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


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

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


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

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