OberonCore
https://forum.oberoncore.ru/

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

Автор:  Сергей Оборотов [ Понедельник, 02 Ноябрь, 2009 00:14 ]
Заголовок сообщения:  Re: Компиляция в Linux

Info21 писал(а):
Евгений Темиргалеев писал(а):
Дружно кидаем скалу в огород макросов.
Много мелких камней лучше, чем один большой :)
Для случая Linux - систем как раз один большой configure решает.

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

Описание компиляции текстовых файлов в ББ под Linux доступно в списке рассылки.

Автор:  Димыч [ Четверг, 19 Ноябрь, 2009 18:45 ]
Заголовок сообщения:  wxWidgets

Мне удалось запустить приложение, написанное на Oberon-2 (XDS) в связке с wxWidgets.

Вот код:
Код:
<* +MAIN *>
<* +O2EXTENSIONS *>
MODULE Test;

IMPORT
  wx := wxc,
  T := wxTypes;

VAR
  cl: wx.wxClosure;
  buffer: T.StrBuffer;

PROCEDURE ["C"] AppInit(fun, data, evt: T.VoidPTR);
VAR
  wnd: wx.wxFrame;
  z: ARRAY 20 OF CHAR;
  i: INTEGER;
BEGIN
  (* suppress warnings *)
  IF fun  = NIL THEN END;
  IF data = NIL THEN END;
  IF evt  = NIL THEN END;
  (* suppress warnings *)

  (* заголовок - строка в Юникоде *)
  z := 'Hello, world!';
  NEW(buffer, LEN(z));
  i := 0;
  WHILE i < LEN(z) DO
    buffer^[i] := ORD(z[i]);
    INC(i);
  END;

  (* Создние фрейма *)
  wnd := wx.wxFrame_Create(NIL, -1, wx.wxString_Create(buffer), -1, -1, -1, -1, wx.wxDEFAULT_FRAME_STYLE);

  (* Демонстрация фрейма*)
  wx.ELJApp_SetTopWindow(wnd);
  wx.wxWindow_Show(wnd);
END AppInit;

BEGIN
  (* Инициализация приложения *)
  cl := wx.wxClosure_Create(AppInit, NIL);
  wx.ELJApp_InitializeC(cl, 0, NIL);
END Test.

Оно еще не красиво, нет объектной обвязки, но оно работает!
На Линукс еще не проверял, но абсолютно уверен, что это будет работать и там.
Подробности в списке рассылки.

Вложения:
screenshot.PNG
screenshot.PNG [ 8.08 КБ | Просмотров: 8854 ]

Автор:  Роман М. [ Пятница, 22 Январь, 2010 19:35 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Мне кажется, что нужен промежуточный этап: создание кроссплатформенного дистрибутива BlackBox. Если не отвязаться от WinAPI, то BlackBox для Linux на свет не появится. Даже подсистема Dev зависима от подсистемы Win.
Вывод: абстракция компонентов ББ недостатоточна для отвязки от платформы Windows.

Мне кажется, что если целиться на будущее, то стоит выбирать платформу .NET/Mono. Есть даже порт wxWidgets для .NET (правда, документации мало). Таким образом, можно будет запускать программу на любой ОС с платформой .NET/Mono без перекомпиляции BlackBox.

Автор:  Сергей Губанов [ Суббота, 23 Январь, 2010 00:58 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Роман М. писал(а):
Мне кажется, что если целиться на будущее, то стоит выбирать платформу .NET/Mono.
Рантайм система Оберонов (и Блэкбокса в частности) не может быть эфективно реализована на платформе .Net, поскольку в платформе .Net в отличие от оберонов структуры нерасширяемы, массивы не являются value-type, сборки невыгружаемы.

Ещё проверка типов в .Net не очень эффективная (в 5-6 раз медленнее чем в оберонах), то есть паттерн generic-message-bus там несколько кривоватым будет.

Автор:  Роман М. [ Четверг, 25 Февраль, 2010 16:13 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

http://forum.oberoncore.ru/viewtopic.php?f=28&p=43498#p43498
Иван Горячев писал(а):
Цитата:
1. Так получилось, что я занимаюсь как раз консольным компилятором, с прицелом на использование в Линуксе (да и, вообще, систем, понимающих ELF). Конкретно: переписываю DevElfLinker, чтобы "отучился" от StdLog, подсистемы Text и других зависимостей, пытаясь абстрагировать от операций вывода. По большому счёту, для консольного компилятора в Win32 всё готово - осталось только соединить компилятор и компоновщик в один связующий модуль.

О, ещё направление забыл. Линукс и 64 бита до кучи. А зачем линкер от подсистемы Text отучать? Если уж получится линкер, то остальной (неграфический) ББ перетащить под линуха труда не составит. Тем более что оно и так уже есть вроде.

Вся фишка в том, что подсистема Text тянет за собой весь каркас, который пока не спортирован в Линукс. На данный момент ElfLinker работает из под Win32.

Автор:  Иван Горячев [ Четверг, 25 Февраль, 2010 16:22 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Text тянет за собой абстрактный каркас. При этом реализации требуют только Files, Ports и Fonts. И только для Files нужна полноценная реализация (которая у Димыча есть кажись), для остальных вполне подойдут примитивные заглушки, благо в консоли отрисовывать ничего не надо.

Автор:  Роман М. [ Четверг, 25 Февраль, 2010 16:32 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Иван Горячев писал(а):
Text тянет за собой абстрактный каркас. При этом реализации требуют только Files, Ports и Fonts. И только для Files нужна полноценная реализация (которая у Димыча есть кажись), для остальных вполне подойдут примитивные заглушки, благо в консоли отрисовывать ничего не надо.

А при компоновке в .so разве не понадобится реализация тех абстракций? Хотя бы тот же HostPorts.

Автор:  Иван Горячев [ Четверг, 25 Февраль, 2010 17:22 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

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

Автор:  Роман М. [ Вторник, 13 Апрель, 2010 12:50 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Я тут подумал намедни и у меня возникла такая мысль (возможно, дикая :) ): изменить Hosts так, чтобы он пользовался библиотекой Wine. И потихоньку поменять все составные части Hosts на родные для Линукса.
Вот такой изврат. :roll:

Автор:  Иван Горячев [ Вторник, 13 Апрель, 2010 13:42 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

А что это даст и чем оно проще непосредственного перевода под Линукс?

Автор:  Роман М. [ Вторник, 13 Апрель, 2010 14:17 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

"Лучше" - понятие относительное, конечно. Однако, из плюсов основы на Wine:
  1. простота постепенной интеграции с Linux/UNIX.
  2. возможность прямых вызовов Linux/UNIX API.
  3. статическая сборка с Wine(?) - тогда на целевой машине не нужно его устанавливать.
Можно поставить ББ на Wine и таким образом отлаживать работу новых частей прямо в Линуксе. Трудно охватить всё сразу. Можно ведь по чуть-чуть.

Автор:  Info21 [ Вторник, 13 Апрель, 2010 17:41 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Звучит неплохо.

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

Я может чего-то не понимаю?

Чего хотим сделать? ББ, работающий в Линукс и производных.
Чего не хватает на текущий момент? ГУИ.

Какие есть варианты ГУИ в Линукс?
Родные: X Window, GTK, построенный поверх X Window.
Производные: wxWidgets, Qt (это all-in-one)
FLTK, FOX и еще с десяток разной степени живучести и проработки.

Я перепробовал X, GTK, wxWidgets.
Остановился на последней. Потому что это фреймворк, позволяющий на высоком уровне управлять окнами и виджетами. И этого достаточно, чтобы заложить основу для каркаса ББ в Линукс.

Очевидно, что надо заходить с подсистемы Hosts, но гораздо важнее произвести запуск GUI-программ в консольном варианте. Сегодня буквально наткнулся на wxLua. Там для консольного lua.exe сделано так, что можно запустить программму (*.lua) и получить работающую ГУИ-программу.

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

Автор:  Иван Кузьмицкий [ Вторник, 13 Апрель, 2010 18:00 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

[грызёт край стола от невозможности оставить текучку и броситься на помощь Димычу перетаскивать ББ на линукс]

Димыч, а Qt сразу отпадает или Вы его ещё не пробовали? (ничего из вышеперечисленного я не пробовал, спрашиваю лишь из желания угадать единственный, но самый верный вектор приложения усилий)

Автор:  kemiisto [ Вторник, 13 Апрель, 2010 18:04 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Димыч писал(а):
Я перепробовал X, GTK, wxWidgets.

Qt зря не попробывали. Сейчас вспоминаю wxWidgets и Swing как страшный сон.

Автор:  Илья Ермаков [ Вторник, 13 Апрель, 2010 20:22 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Qt, вроде, не применим за пределами С++. Qt - это система препроцессинга на основе С++. К тому же, слишком много соединений, насколько я помню, делаются статически.

Автор:  kemiisto [ Вторник, 13 Апрель, 2010 21:00 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Илья Ермаков писал(а):
Qt, вроде, не применим за пределами С++. Qt - это система препроцессинга на основе С++. К тому же, слишком много соединений, насколько я помню, делаются статически.

Лично трогал привязки к Ada, Ruby, Python, Free Pascal. Вполне работоспособно.
Списко "привязок" в Вики.
Или Вы не про то?

Насчёт статических соединений - не понял. :oops:

Автор:  Илья Ермаков [ Вторник, 13 Апрель, 2010 21:10 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Хы, у меня воспоминания про Qt в С++ - там расширен язык был специально - и надстроен препроцессор.
Видимо, в других языках они обошлись без этого.

Про статику: ну, например, я соединяю компоненты А и Б, чтобы от А к Б шли какие-то сообщения. Нужно понимать, делается ли это на этапе компиляции, или можно это свободно делать и при выполнении. Из-за всех этих негибких препроцессоров и наследований Qt производил впечатление мощной, но не динамичной штуки. Насколько помню... 3 года назад крутился немного среди людей, его применявших.

Автор:  Иван Кузьмицкий [ Вторник, 13 Апрель, 2010 21:50 ]
Заголовок сообщения:  Re: Перевод BlackBox под Linux

Гм. Если даже для FPC есть привязка, то пуркуа бы и не па? То есть, Qt?

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