OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Понедельник, 02 Ноябрь, 2009 20:25 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Эх, долго себя сдерживал! Но эта тема стала просто последней каплей :?. Не могу больше молчать.

Портирование Блэкбокс на любую из платформ должно начинаться, ИМХО, с серьёзной переделки самого Блэкбокс. Потому что в том виде как сейчас, любой (даже самый прикладной!) модуль может бесцеремонно импортировать и модули подсистемы Host, и интерфейсные модули связи со внешними библиотеками.

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

После того, как эти правила будут строго соблюдены, портирование на любую платформу станет делом техники, и будет заключаться лишь в том, чтобы переписать только две подсистемы: Host и Win (Lin, Freebsd, Solar, ...)

PS: Перед каждым словом моё ИМХО

PS2: А ещё перед портированием очень полезно будет развязать "гордиев узел" под названием Kernel :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Понедельник, 02 Ноябрь, 2009 20:39 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Оно, касательно самого ББ, и сейчас так (только Host). Но Host в текущей версии недостаточно тонок (там много общей, платформенно независимой механики).

С Kernel эксперименты велись (разрезание на части и т.п.)
Резюме: нецелесообразно. Там слишком плотная связанность служб. 3 тыс. строк - не так много для ядра. Под платформу там тоже заменяются вполне конкретные места.

Сам же интерфейс Kernel тоже можно рассматривать как устоявшийся. Может, он и не очень "красив" (не вылизывался под "публичность"), но вполне нормален, как системное API. Если пытаться переделывать - получится "то же самое другими словами". Оно надо?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Понедельник, 02 Ноябрь, 2009 20:59 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Недавно попробовал написать HelloWorld со строгим соблюдением всех правил, обозначенных мной в предыдущем посте. Так вот! Из-за необходимости в использовании стандартной процедуры NEW, приходится импортировать Kernel, а он автоматически делает невозможным соблюсти эти правила.

О каком портировании может идти речь, если даже в банальном HelloWorld невозможно отделить мух от котлет? Ведь для портирования важны только точки соприкосновения с целевой платформой, а их то и не удаётся выделить в чистом виде.

Да, и раз уж меня сегодня так понесло :) , добавлю, что я никогда не смирюсь с тем, что для использования стандартного языкового средства, требуется импортировать какой-то эксклюзивный модуль, о котором в сообщении о языке нет ни слова.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Понедельник, 02 Ноябрь, 2009 21:08 
Модератор
Аватара пользователя

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

Интерфейс один, реализации могут быть разные. Ну да, это немного "недодинамическикомпонентно". Ну так и модуль особый. Не будем забывать, что изначальная, классическая модульность такой способ заменяемости реализаций и предполагала (один интерфейс модуля - несколько реализаций). Это уж потом был придумана разного рода виртуализация, через ООП-паттерны.

У меня вот есть приложения, в которых нет ни одной строчки платформенно-зависимого кода, при этом я могу запустить и пускач .exe, и пускач ELF+SO - и всё побежит на нужной ОС. При этом приложения не прикладного, а системного назначения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Понедельник, 02 Ноябрь, 2009 22:31 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
igor писал(а):
Портирование Блэкбокс на любую из платформ должно начинаться, ИМХО, с серьёзной переделки самого Блэкбокс.

О чём я всё время и говорю. Может на форуме не так часто, я просто не помню уж... Только не очень серьёзной переделки. Каркас почти идеален. Рефакторинг провести надо, да... Не помешает. Есть желающие заняться? :)

Про кернел ничего говорить не буду, тут Ильи хватит... считайте что это рантайм языка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 03:35 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
Вот что надо сделать в Kernel - ликвидировать все WinApi.MessageBox со товарищи. И вообще в дополнение к Log сделать модуль Err.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 05:59 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Илья Ермаков писал(а):
Я не совсем понимаю, в чём претензии к Kernel.
Если я сейчас стану объяснять, то начнуться повторы уже сказанного, и мы будем ходить по кругу. Внимательнее перечитайте мои посты в этой теме.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 06:03 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Борис Рюмшин писал(а):
Только не очень серьёзной переделки.
С этим пожалуй соглашусь. "Серьёзная" - это когда концепцию надо менять, а с ней как раз всё в порядке. На бумаге все лозунги правильные.
Слово "очень серьёзной" нужно заменить на слово "много работы", предварительно связав падежи :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 06:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
igor писал(а):
добавлю, что я никогда не смирюсь с тем, что для использования стандартного языкового средства, требуется импортировать какой-то эксклюзивный модуль, о котором в сообщении о языке нет ни слова.


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

Однако взамен метапроблема: кто-то без нас "что-то куда-то как-то фигачит". :)
(любые неявные штуки - принятие решений машиной - и т.п. - это реально метапроблема, я не преувеличиваю...)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 07:18 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Коллеги!
Давайте без шапкозакидательства, пожалуйста...

Kernel нужен. Он нужен потому, что это run-time механизм языка.
Без него никак. Просто где-то он задан явно (Oberon), где-то неявно (C), а где-то и так, и так. Но он есть везде.

Другой разговор, что может не нравиться содержимое Kernel.
Ну так не смотрите :)

Мне (уж коль скоро я в Kernel лажу весьма бесцеремонно), не хватает только одной возможности - ограниченного импорта. Т.е. импорта в рамках фреймворка.

Пример
Модуль Init получает значение errno из загрузчика. Передает его внутрь kernel. Можно было бы просто установить значение переменной и сказать, что ее читать могут все, а устанавливать только модули фреймворка (или даже только конкретные модули фреймворка). На деле же делаю процедуру с возможностью запуска один раз и read-only экспорт.

Далее, подсистема Host локализует платформенно-зависимые вещи. Это правда. Но не вся. Самому Kernel'у необходим какой-то механизм, с помощью которого производить вывод сообщений без инициализации остального фреймворка. Поэтому и в Kernel будет в наличии платформозависимый код.

Посмотрите, как реализован Linux-вариант BB. Из него вырезана привязка к WinAPI и тексту. И что? По-прежнему в Kernel присутствует процедура printf из Libc равно как и dlopen из dl. Платформозависимость налицо.

По известной мне информации кросс-платформенные системы содержат около 20% зависимого кода. Вопрос лишь в его распределении этих 20%.

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

И очень интересно видеть, как ББ без текстового интерфейса работает. Очень сбалансированная, быстрая и надежная среда. Главное - все понятно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 10:06 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Илья Ермаков писал(а):
Другая альтернатива: компилятор всё делает сам и что-то куда-то как-то фигачит. Никаких эксклюзивных модулей не надо.

Однако взамен метапроблема: кто-то без нас "что-то куда-то как-то фигачит". :)
Kernel тоже сам "что-то куда-то как-то фигачит" :) . Почему Вы думаете, что если это будет делать не Kernel, а компилятор, то сразу возникнут метапроблемы? Напомню, что речь идёт о переносе в компилятор только NEW, а не всего рантайма.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 10:15 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Димыч писал(а):
Kernel нужен. Он нужен потому, что это run-time механизм языка.
Это одна из форм демагогии ( к сожалению, сейчас нет ссылки под рукой, но можете сами погуглить). Вы произносите очевидное утверждение, как аргумент в споре. Но спор был не об этом :) .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 10:24 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Димыч писал(а):
Другой разговор, что может не нравиться содержимое Kernel.
Ну так не смотрите :)
Нельзя говорить программисту, чтобы он не смотрел на содержимое одного из главных модулей, который он использует :lol: .

Что касается ограниченного импорта, то мне тоже его не хватает :) . Но ввести его возможно только на уровне языка. А вот нужно это или нет, пока на этот счёт есть сомнения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 10:27 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
igor писал(а):
Димыч писал(а):
Kernel нужен. Он нужен потому, что это run-time механизм языка.
Это одна из форм демагогии ( к сожалению, сейчас нет ссылки под рукой, но можете сами погуглить). Вы произносите очевидное утверждение, как аргумент в споре. Но спор был не об этом :) .

У меня туго с философией...
Могли бы и продолжить предложение "Но спор был не об этом" - а об...?

Аргумент, что можно писать Hello world без lib (без Кернел, если угодно) - бесперспективен.
"А попробуйте ка без библиотек вывести текст в позицию 0:0" (с) не мое.

Документации под рукой нет, на память скажу, что кернел, по сути, можно и заменить, однако этот модуль, как минимум должен предоставлять две процедуры - New и NewArr и все остальные должны эти механизмы использовать. Это - из документации (не уверен насчет сообщения о языке).
Ну и напоследок. А как без кернела (модуля Kernel) будет производится динамическая загрузка других модулей, в том числе и HelloWorld?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 10:46 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Димыч писал(а):
Далее, подсистема Host локализует платформенно-зависимые вещи. Это правда. Но не вся. Самому Kernel'у необходим какой-то механизм, с помощью которого производить вывод сообщений без инициализации остального фреймворка. Поэтому и в Kernel будет в наличии платформозависимый код.
Повторю, что проблема не в том, что Kernel содержит платформозависимый код, а в том, что этот код не выделен из него и не помещён в отдельный модуль, о котором никакому другому модулю знать нет нужды. Замечу также, что весь фреймворк модулю Kernel и не нужен, а для тех целей, которые Вы обозначили, вполне хватит своего минифреймворчика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 11:04 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Димыч писал(а):
У меня туго с философией...
Хорошо, оставим философию в покое :)
Димыч писал(а):
"А попробуйте ка без библиотек вывести текст в позицию 0:0" (с) не мое.
Позицию чего? Окна? Экрана? Так это не проблема! И то и другое в грамотно построенной системе описано абстрактными интерфейсами.
Димыч писал(а):
Документации под рукой нет, на память скажу, что кернел, по сути, можно и заменить, однако этот модуль, как минимум должен предоставлять две процедуры - New и NewArr и все остальные должны эти механизмы использовать. Это - из документации (не уверен насчет сообщения о языке).
Уточню: должен экспортировать NewRec и NewArr. Как только компилятор встречает в исходнике NEW(), он встраивает в код вызов одной из этих процедур из модуля Kernel. Кстати, об этом и был спор: прав ли компилятор, что поступает именно так, а не генерит код самостоятельно?
Димыч писал(а):
А как без кернела (модуля Kernel) будет производится динамическая загрузка других модулей, в том числе и HelloWorld?
Динамическую загрузку из Кернела я "вынул" много месяцев назад. Мой Кернел не занимается динамической загрузкой :wink: . Нельзя всё сваливать в одну кучу.


Последний раз редактировалось igor Вторник, 03 Ноябрь, 2009 19:06, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: конкурс
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 11:16 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
igor писал(а):
Что касается ограниченного импорта, то мне тоже его не хватает :) . Но ввести его возможно только на уровне языка.
Задачка. Придумать механизм, эквивалентный сказанному ограниченному импорту (см. посты), оставаясь внутри ББ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 11:21 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
igor писал(а):
проблема не в том, что Kernel содержит платформозависимый код, а в том, что этот код не выделен из него и не помещён в отдельный модуль

Странное на первый взгляд требование.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Blackbox on OpenSolaris or Linux?
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 12:07 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Димыч писал(а):
Пример
Модуль Init получает значение errno из загрузчика. Передает его внутрь kernel. Можно было бы просто установить значение переменной и сказать, что ее читать могут все, а устанавливать только модули фреймворка


Вот в таких случаях (системных) я ставлю экспорт только на чтение, а устанавливаю значение через Kernel.ThisObject + SYSTEM.PUT.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: конкурс
СообщениеДобавлено: Вторник, 03 Ноябрь, 2009 12:12 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Info21 писал(а):
igor писал(а):
Что касается ограниченного импорта, то мне тоже его не хватает :) . Но ввести его возможно только на уровне языка.
Задачка. Придумать механизм, эквивалентный сказанному ограниченному импорту (см. посты), оставаясь внутри ББ.


Можно так:
В заголовке модуля пишем 'OF "Framework"', где "Framework" - некий аналог namespace.

При экспорте вместо "-" и "*" пишем "--" и "**" соответственно.

Для тех, кто в "Framework" смысл не меняется - экспорт r/o, экспорт r/w.
Второй символ в лексеме - для чужих (не входящих в "Framework").
Возможен еще вариант "*-".

Если нет второго символа, тогда экспорта вне "Framework" нет.

И даже без добавления лексем :)


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

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


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

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


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

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