OberonCore
https://forum.oberoncore.ru/

Перевод BlackBox под Linux
https://forum.oberoncore.ru/viewtopic.php?f=34&t=1280
Страница 1 из 15

Автор:  Иван Кузьмицкий [ Пятница, 12 Декабрь, 2008 11:20 ]
Заголовок сообщения:  Перевод BlackBox под Linux

Для начала, хотелось бы проявить эти самые проблемы. Но сначала, наверное, стоит обозначить цели.

На мой взгляд, их две. Попробую сформулировать.

1. Нужно запускать BlackBox под линуксом напрямую, без участия эмуляторов винды.
2. Нужна более развитая поддержка оконного интерфейса (контроль над окнами, тулбары, не-MDI и пр.).

Для достижения 1-й цели необходимо переделать Host-часть. А вторая цель требует серьёзного перетряхивания абстрактной прослойки между хостом и документами ББ. Поправьте, если не так.

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

Автор:  Edward Ivanov [ Пятница, 12 Декабрь, 2008 12:09 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Для пункта № 2.
На FreePascal есть хорошие гуевые библиотеки, могу привести одну из них - FPGUI http://opensoft.homeip.net/fpgui/
1. Сама отрисовывает себя.
2. Кроссплатформенна.
3. Есть дизайнер форм.
4. Читабельные исходники.

Автор:  Димыч [ Пятница, 12 Декабрь, 2008 18:11 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Мне очень понравилась библиотека Ultimate++, понравилась своей архитектурой.
В частности, в описании приводится такой текст:

Цитата:
Everything belongs somewhere

In Ultimate++, most objects are bound to some logical scope. As a result, you will not see many new operators in code using Ultimate++ and almost no delete operators outside the implementation of containers.

That of course does not mean you are not allowed to use pointers, but it is good practice to use pointers just to point to things, never to manage heap resources. This also avoids all confusion regarding ownership of the underlying object, time of its deletion etc. If you need to manage data sets of variable size or polymorphic type, you should prefer using one of Ultimate++ containers.

Speaking about it, there are no shared smart pointers (like boost::shared_ptr) in Ultimate++ used to manage heap resources at interface level. They are not needed and considered bad practice.

In C++, this approach proves to be equally good or better than garbage collected languages like Java or C#. While those languages are able to provide automatic management of heap resources, U++ approach provides very deterministic automatic management of all resources.

Представляется очень интересным, близко по духу к Оберонам.
Да и исходники (для конечного пользователя, правда) выглядят не страшно. :)

Автор:  Valery Solovey [ Пятница, 12 Декабрь, 2008 18:26 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Ко всему прочему не хотелось бы видеть зацикленность только лишь на Линуксе. У меня дома FreeBSD. Было бы неплохо, чтобы и на ней всё работало. В неё встроена поддержка бинарников Линукса, но предупреждается: не факт, что всё линуксовое будет работать. Так что у меня есть пожелание не использовать что-то, что может хотя бы показаться редкоиспользуемым (и что, естественно, на других Юниксах может не заработать).

Автор:  Пётр Кушнир [ Пятница, 12 Декабрь, 2008 18:59 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Димыч писал(а):
Мне очень понравилась библиотека Ultimate++, понравилась своей архитектурой.


и

Edward Ivanov писал(а):
На FreePascal есть хорошие гуевые библиотеки, могу привести одну из них - FPGUI http://opensoft.homeip.net/fpgui/

Ну а вот зачем это нужно?

Иван Кузьмицкий писал(а):
1. Нужно запускать BlackBox под линуксом напрямую, без участия эмуляторов винды.
Ну, то есть сделать ББ "*nix-приложением", для этого как я понимаю, и нужен OpenBugs, f конкретно - встроенный в него линкер. Ну а для этого хотелось бы понять, как запустить ядро ББ в линуксе, что из себя представляет линуксовый бинарник(формат ELF, если я не ошибаюсь).
Иван Кузьмицкий писал(а):
2. Нужна более развитая поддержка оконного интерфейса (контроль над окнами, тулбары, не-MDI и пр.).
Я думаю, это последняя, завершающая часть работы. Я думаю, никто не будет возражать против мнения, что функциональности модуля Windows недостаточно даже для повседневных нужд(пример: отлов закрытия окна и прочие уже обсуждались на форуме), поэтому довольно вероятно, что его интерфейс будет дополнен и расширен.

В добавление к переписыванию Host-части, как я понимаю, понадобится подсистема, аналогичная подсистеме Win. Ну а вот например, подсистема Comm не имеет Host-части, модули реализации протоколов используют напрямую WinAPI, придётся значит, писать по новой.

Valery Solovey писал(а):
Ко всему прочему не хотелось бы видеть зацикленность только лишь на Линуксе. У меня дома FreeBSD.
А мне вот на КПК хочется увидеть ББ. :) Если вы разбираетесь, подскажите, а как обеспечить такую "незацикленность"?
Создать набор взаимозаменяемых Host-подсистем, как вариант.

Автор:  Димыч [ Пятница, 12 Декабрь, 2008 20:44 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Пётр Кушнир писал(а):
Ну а вот зачем это нужно?


Это нужно для того, чтобы посмотреть, как народ вообще решает вопросы кроссплатформенности и какие решения принимает, чтобы обеспечить единообразие кода в разных системах.

Пётр Кушнир писал(а):
А мне вот на КПК хочется увидеть ББ. :) Если вы разбираетесь, подскажите, а как обеспечить такую "незацикленность"?
Создать набор взаимозаменяемых Host-подсистем, как вариант.

В имеющихся библиотеках это, как правило, решается с помощью ifdef-ов.
Вопрос в том, где они расположены - в файлах проекта (или makefile'ах).
Иногда это решается путем прямой подмены модулей.
В случае с ББ это, скорее всего, будет решаться подменой систем.

Автор:  Иван Кузьмицкий [ Пятница, 12 Декабрь, 2008 22:26 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Valery Solovey писал(а):
Ко всему прочему не хотелось бы видеть зацикленность только лишь на Линуксе.

Линукс тут выступает как самый ближний. Насколько я понимаю, как минимум, надо перетащить Host. Если смотреть на другие аппаратные платформы, то и компилятор.

Что касается ifdef, то Илья Ермаков как-то высказывался по этому поводу, что в компонентной системе такие штуки просто не нужны. Вопрос решается перекоммутацией платформенно-зависимой части среды. Вот как быть с переключением на другую аппаратную платформу, я не до конца понимаю.

Автор:  Илья Ермаков [ Пятница, 12 Декабрь, 2008 23:03 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Тут без перекомпиляции никак. + нужно типы данных собирать в отдельном модуле и некоторые системные операции объявлять там же, как inline-кодовые-процедуры (например, манипулирование с тегом типа у объекта).
+ IFDEF использовать. Обычный IF от булевых констант, работает как раз таким образом, как IFDEF.

Автор:  Madzi [ Суббота, 13 Декабрь, 2008 18:40 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Если я себе правильно представляю модульную архитектуру приложений, то необходимо переписать платформенно зависимые модули (части системы) и среду (runtime). Все остальные модули должны работать без перекомпиляции или пересборки.

Автор:  Илья Ермаков [ Суббота, 13 Декабрь, 2008 18:52 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Да, но в случае одного оборудования.
Не забывайте, что в ББ модули компилируются в native-код.
И, увы, привязка к особенностям 32-бит раскидана по среде гораздо шире, чем привязка к ОС.
Предположения о том, что размер адреса 4 байт, например.
В начале 90-х казалось, что 32 - это надолго ))

Автор:  Иван Горячев [ Понедельник, 15 Декабрь, 2008 10:51 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Отсюда следует, что рядом с Линуксом пристроилось ещё одно направление - кроссплатформенность. На начальном этапе - x86-64 (и возможно ARM). Нужно нарыть и вычистить все проблемные места, типа указанных Ильёй. Прикрутить к компилятору инфраструктуру для поддержки разных платформ. Ну и заполировать всё это slim-binaries :)

Автор:  Сергей Оборотов [ Понедельник, 15 Декабрь, 2008 22:13 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Valery Solovey писал(а):
У меня дома FreeBSD. Было бы неплохо, чтобы и на ней всё работало. В неё встроена поддержка бинарников Линукса, но предупреждается: не факт, что всё линуксовое будет работать.
Есть предложение высылать рабочие версии модулей Валерию Соловей для тестирования под FreeBSD.

Автор:  Wlad [ Понедельник, 15 Декабрь, 2008 23:27 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Иван Горячев писал(а):
Отсюда следует, что рядом с Линуксом пристроилось ещё одно направление - кроссплатформенность. На начальном этапе - x86-64 (и возможно ARM). Нужно нарыть и вычистить все проблемные места, типа указанных Ильёй. Прикрутить к компилятору инфраструктуру для поддержки разных платформ. Ну и заполировать всё это slim-binaries :)

Тогда, в качестве перенимания опыта, лучше консультироваться на счёт РЕАЛЬНОЙ кроссплатформенности по исходникам именно NetBSD!!!
Вот уж где архитектура и приёмы работы с кодом и структурами реально обкатаны на ТАКИХ, порой, РАЗНЯЩИХСЯ архитектурах, что - диву даёшься!!!

Автор:  QWERTYProgrammer [ Понедельник, 15 Декабрь, 2008 23:28 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Кстати, по-поводу кроссплатформенности: ведь была же версия ББ для Мак'a, как там решались проблемы с прослойкой между хостом и документами ББ?

Автор:  Илья Ермаков [ Понедельник, 15 Декабрь, 2008 23:33 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Да не нужно никакой прослойки. Достаточно, ещё раз повторяю, реализовать под целевую ОС все модули подсистемы Host (или какие угодно другие, которые втыкают те же разъёмы реализации, которые втыкает Host). Всё. Остальные подсистемы ничего не заметят.

Автор:  Димыч [ Вторник, 16 Декабрь, 2008 17:25 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Запустил я ББ на Линукс. Это оказалось несколько сложнее, чем я ожидал, но все же не так страшно, как казалось. :)

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

За основу были взяты модули из OpenBUGS.

Что сделано
Запущен модуль ElfLinker от ОМИНК
Создан стартовый файл для ББ на линукс
Создан минимальный набор модулей для запуска
Слинкован минимальный запускаемый набор

Что НЕ сделано
Не сделана динамическая загрузка.
Я так и не понял, как происходит инициализация ББ, поэтому попытка загрузки неслинкованного модуля у меня стабильно приводила к трапу.

Не произведена подмена модулей из System.
Это надо делать раскруткой, но только, как будет запущен ElfLinker на линукс (что, естественно, требует работы динамической загрузки).

Как это воспроизвести
Сборка осуществляется на Windows.
Откройте модуль Lin\Docu\build-tool.odc и выполните подряд обе команды.
Должен появиться файл libBB.so
Теперь скопируйте это все в Linux (путь не важен).
Если не запустится файл BlackBox, его можно пересобрать, файл BlackBox.c прилагается.

Если все сработает, при запуске BlackBox должны быть две строчки Hello world.

Автор:  Димыч [ Вторник, 16 Декабрь, 2008 19:16 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Владимир Лось писал(а):
Вот уж где архитектура и приёмы работы с кодом и структурами реально обкатаны на ТАКИХ, порой, РАЗНЯЩИХСЯ архитектурах, что - диву даёшься!!!

Там можно поучиться механизмам кросс-компиляции, я думаю.

Автор:  Сергей Оборотов [ Вторник, 16 Декабрь, 2008 22:02 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Димыч писал(а):
Я так и не понял, как происходит инициализация ББ, поэтому попытка загрузки неслинкованного модуля у меня стабильно приводила к трапу.
В модуле Kernel выделение памяти управляется функциями библиотеки calloc/free, а для динамической загрузки память должна отображаться mmap с флагом PROT_EXEC. Попробуйте добавить её и munmap в модуль Libc.

Автор:  adimetrius [ Вторник, 16 Декабрь, 2008 22:11 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

Я думаю, совсем нет резона раздувать интерфейс модуля Windows какими-то дополнительными возможностями.
1) сейчас в ББ эти доп. возможности предоставляет HostWindows
2) если нужны такие возможности, которые есть в операционке, но отсутствуют даже в HostWindows, то можно воспользоваться прямыми вызовами WinAPI

Такое "разделение труда" делает ББ в целом:
- более простым для понимания и использования (если приложению не нужно сильно погружаться в особенности работы с окнами - то остаешься на более абстрактном уровне)
- более переносимым и адаптируемым

Далеко не всем программам нужны изыски пользовательского интерфейса. Если нужно контролировать положение окна на экране, делайте это вызовами WinAPI, или помогите сообществу - напишите модуль-утилиту с парой процедур, который будет гонять окна типа HostWindows.Window. Кому надо - будут пользоваться, кому нет - не будут загружаться, и модуль Windows останется простым. На личном опыте: мне удалось сделать прогу, успешно манипулирующую окнами ББ (даже прячется строка заголовка, если надо!), изменяющую размер клиентской области ББ, а также сделать модуль, позволяющий произвольный View открыть в качестве тулбара вверху окна ББ. См. подсистему Amisc в коллекции Helmut'а Zinn'а.

Автор:  Пётр Кушнир [ Вторник, 16 Декабрь, 2008 22:43 ]
Заголовок сообщения:  Re: Проблемы перевода BlackBox под Linux

adimetrius писал(а):
Я думаю, совсем нет резона раздувать интерфейс модуля Windows какими-то дополнительными возможностями.
Очень не хочется поднимать этот субъективный вопрос, скажу только одно: отлов закрытия окна зачастую необходим. И отмена закрытия тоже. А нету (я кстати тоже сделал своё ;-)).
Но, в любом случае, решать все вместе будут, я лишь внёс предложение по улучшению.

Страница 1 из 15 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/