OberonCore https://forum.oberoncore.ru/ |
|
Связи системных модулей; ограниченный импорт https://forum.oberoncore.ru/viewtopic.php?f=2&t=2013 |
Страница 1 из 3 |
Автор: | igor [ Понедельник, 02 Ноябрь, 2009 20:25 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Эх, долго себя сдерживал! Но эта тема стала просто последней каплей ![]() Портирование Блэкбокс на любую из платформ должно начинаться, ИМХО, с серьёзной переделки самого Блэкбокс. Потому что в том виде как сейчас, любой (даже самый прикладной!) модуль может бесцеремонно импортировать и модули подсистемы Host, и интерфейсные модули связи со внешними библиотеками. В идеале подсистема Host должна представлять собой платформозависимые модули реализации некоторых абстактных интерфейсов, и только эта подсистема имеет право импортировать интерфейсные модули связи со внешними библиотеками. А саму подсистему Host не должен импортировать ни один другой модуль из вне этой подсистемы. После того, как эти правила будут строго соблюдены, портирование на любую платформу станет делом техники, и будет заключаться лишь в том, чтобы переписать только две подсистемы: Host и Win (Lin, Freebsd, Solar, ...) PS: Перед каждым словом моё ИМХО PS2: А ещё перед портированием очень полезно будет развязать "гордиев узел" под названием Kernel ![]() |
Автор: | Илья Ермаков [ Понедельник, 02 Ноябрь, 2009 20:39 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Оно, касательно самого ББ, и сейчас так (только Host). Но Host в текущей версии недостаточно тонок (там много общей, платформенно независимой механики). С Kernel эксперименты велись (разрезание на части и т.п.) Резюме: нецелесообразно. Там слишком плотная связанность служб. 3 тыс. строк - не так много для ядра. Под платформу там тоже заменяются вполне конкретные места. Сам же интерфейс Kernel тоже можно рассматривать как устоявшийся. Может, он и не очень "красив" (не вылизывался под "публичность"), но вполне нормален, как системное API. Если пытаться переделывать - получится "то же самое другими словами". Оно надо? |
Автор: | igor [ Понедельник, 02 Ноябрь, 2009 20:59 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Недавно попробовал написать HelloWorld со строгим соблюдением всех правил, обозначенных мной в предыдущем посте. Так вот! Из-за необходимости в использовании стандартной процедуры NEW, приходится импортировать Kernel, а он автоматически делает невозможным соблюсти эти правила. О каком портировании может идти речь, если даже в банальном HelloWorld невозможно отделить мух от котлет? Ведь для портирования важны только точки соприкосновения с целевой платформой, а их то и не удаётся выделить в чистом виде. Да, и раз уж меня сегодня так понесло ![]() |
Автор: | Илья Ермаков [ Понедельник, 02 Ноябрь, 2009 21:08 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Я не совсем понимаю, в чём претензии к Kernel. Он есть - и везде есть, вот и всё. Интерфейс один, реализации могут быть разные. Ну да, это немного "недодинамическикомпонентно". Ну так и модуль особый. Не будем забывать, что изначальная, классическая модульность такой способ заменяемости реализаций и предполагала (один интерфейс модуля - несколько реализаций). Это уж потом был придумана разного рода виртуализация, через ООП-паттерны. У меня вот есть приложения, в которых нет ни одной строчки платформенно-зависимого кода, при этом я могу запустить и пускач .exe, и пускач ELF+SO - и всё побежит на нужной ОС. При этом приложения не прикладного, а системного назначения. |
Автор: | Борис Рюмшин [ Понедельник, 02 Ноябрь, 2009 22:31 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
igor писал(а): Портирование Блэкбокс на любую из платформ должно начинаться, ИМХО, с серьёзной переделки самого Блэкбокс. О чём я всё время и говорю. Может на форуме не так часто, я просто не помню уж... Только не очень серьёзной переделки. Каркас почти идеален. Рефакторинг провести надо, да... Не помешает. Есть желающие заняться? ![]() Про кернел ничего говорить не буду, тут Ильи хватит... считайте что это рантайм языка. |
Автор: | Иван Горячев [ Вторник, 03 Ноябрь, 2009 03:35 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Вот что надо сделать в Kernel - ликвидировать все WinApi.MessageBox со товарищи. И вообще в дополнение к Log сделать модуль Err. |
Автор: | igor [ Вторник, 03 Ноябрь, 2009 05:59 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Илья Ермаков писал(а): Я не совсем понимаю, в чём претензии к Kernel. Если я сейчас стану объяснять, то начнуться повторы уже сказанного, и мы будем ходить по кругу. Внимательнее перечитайте мои посты в этой теме.
|
Автор: | igor [ Вторник, 03 Ноябрь, 2009 06:03 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Борис Рюмшин писал(а): Только не очень серьёзной переделки. С этим пожалуй соглашусь. "Серьёзная" - это когда концепцию надо менять, а с ней как раз всё в порядке. На бумаге все лозунги правильные.Слово "очень серьёзной" нужно заменить на слово "много работы", предварительно связав падежи ![]() |
Автор: | Илья Ермаков [ Вторник, 03 Ноябрь, 2009 06:43 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
igor писал(а): добавлю, что я никогда не смирюсь с тем, что для использования стандартного языкового средства, требуется импортировать какой-то эксклюзивный модуль, о котором в сообщении о языке нет ни слова. Другая альтернатива: компилятор всё делает сам и что-то куда-то как-то фигачит. Никаких эксклюзивных модулей не надо. Однако взамен метапроблема: кто-то без нас "что-то куда-то как-то фигачит". ![]() (любые неявные штуки - принятие решений машиной - и т.п. - это реально метапроблема, я не преувеличиваю...) |
Автор: | Димыч [ Вторник, 03 Ноябрь, 2009 07:18 ] |
Заголовок сообщения: | Связи системных модулей; ограниченный импорт |
Коллеги! Давайте без шапкозакидательства, пожалуйста... 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%. В ББ в целом баланс соблюдается. Платформо-зависимые части хорошо локализованы. Важное замечание (и для меня это самая большая претензия) - "текст как интерфейс" является "единственно правильным" в ББ, остальное сложно (хорошо, сложнее) реализовать. И текстовый интерфейс, на мой взгляд размазан по системе сильнее, чем платформо-зависимые части. И очень интересно видеть, как ББ без текстового интерфейса работает. Очень сбалансированная, быстрая и надежная среда. Главное - все понятно ![]() |
Автор: | igor [ Вторник, 03 Ноябрь, 2009 10:06 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Илья Ермаков писал(а): Другая альтернатива: компилятор всё делает сам и что-то куда-то как-то фигачит. Никаких эксклюзивных модулей не надо. Kernel тоже сам "что-то куда-то как-то фигачит" Однако взамен метапроблема: кто-то без нас "что-то куда-то как-то фигачит". ![]() ![]() |
Автор: | igor [ Вторник, 03 Ноябрь, 2009 10:15 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Димыч писал(а): Kernel нужен. Он нужен потому, что это run-time механизм языка. Это одна из форм демагогии ( к сожалению, сейчас нет ссылки под рукой, но можете сами погуглить). Вы произносите очевидное утверждение, как аргумент в споре. Но спор был не об этом ![]() |
Автор: | igor [ Вторник, 03 Ноябрь, 2009 10:24 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Димыч писал(а): Другой разговор, что может не нравиться содержимое Kernel. Нельзя говорить программисту, чтобы он не смотрел на содержимое одного из главных модулей, который он использует Ну так не смотрите ![]() ![]() Что касается ограниченного импорта, то мне тоже его не хватает ![]() |
Автор: | Димыч [ Вторник, 03 Ноябрь, 2009 10:27 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
igor писал(а): Димыч писал(а): Kernel нужен. Он нужен потому, что это run-time механизм языка. Это одна из форм демагогии ( к сожалению, сейчас нет ссылки под рукой, но можете сами погуглить). Вы произносите очевидное утверждение, как аргумент в споре. Но спор был не об этом ![]() У меня туго с философией... Могли бы и продолжить предложение "Но спор был не об этом" - а об...? Аргумент, что можно писать Hello world без lib (без Кернел, если угодно) - бесперспективен. "А попробуйте ка без библиотек вывести текст в позицию 0:0" (с) не мое. Документации под рукой нет, на память скажу, что кернел, по сути, можно и заменить, однако этот модуль, как минимум должен предоставлять две процедуры - New и NewArr и все остальные должны эти механизмы использовать. Это - из документации (не уверен насчет сообщения о языке). Ну и напоследок. А как без кернела (модуля Kernel) будет производится динамическая загрузка других модулей, в том числе и HelloWorld? |
Автор: | igor [ Вторник, 03 Ноябрь, 2009 10:46 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Димыч писал(а): Далее, подсистема Host локализует платформенно-зависимые вещи. Это правда. Но не вся. Самому Kernel'у необходим какой-то механизм, с помощью которого производить вывод сообщений без инициализации остального фреймворка. Поэтому и в Kernel будет в наличии платформозависимый код. Повторю, что проблема не в том, что Kernel содержит платформозависимый код, а в том, что этот код не выделен из него и не помещён в отдельный модуль, о котором никакому другому модулю знать нет нужды. Замечу также, что весь фреймворк модулю Kernel и не нужен, а для тех целей, которые Вы обозначили, вполне хватит своего минифреймворчика.
|
Автор: | igor [ Вторник, 03 Ноябрь, 2009 11:04 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Димыч писал(а): У меня туго с философией... Хорошо, оставим философию в покое ![]() Димыч писал(а): "А попробуйте ка без библиотек вывести текст в позицию 0:0" (с) не мое. Позицию чего? Окна? Экрана? Так это не проблема! И то и другое в грамотно построенной системе описано абстрактными интерфейсами.Димыч писал(а): Документации под рукой нет, на память скажу, что кернел, по сути, можно и заменить, однако этот модуль, как минимум должен предоставлять две процедуры - New и NewArr и все остальные должны эти механизмы использовать. Это - из документации (не уверен насчет сообщения о языке). Уточню: должен экспортировать NewRec и NewArr. Как только компилятор встречает в исходнике NEW(), он встраивает в код вызов одной из этих процедур из модуля Kernel. Кстати, об этом и был спор: прав ли компилятор, что поступает именно так, а не генерит код самостоятельно?Димыч писал(а): А как без кернела (модуля Kernel) будет производится динамическая загрузка других модулей, в том числе и HelloWorld? Динамическую загрузку из Кернела я "вынул" много месяцев назад. Мой Кернел не занимается динамической загрузкой ![]() |
Автор: | Info21 [ Вторник, 03 Ноябрь, 2009 11:16 ] |
Заголовок сообщения: | конкурс |
igor писал(а): Что касается ограниченного импорта, то мне тоже его не хватает Задачка. Придумать механизм, эквивалентный сказанному ограниченному импорту (см. посты), оставаясь внутри ББ.
![]() |
Автор: | Info21 [ Вторник, 03 Ноябрь, 2009 11:21 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
igor писал(а): проблема не в том, что Kernel содержит платформозависимый код, а в том, что этот код не выделен из него и не помещён в отдельный модуль Странное на первый взгляд требование. |
Автор: | Илья Ермаков [ Вторник, 03 Ноябрь, 2009 12:07 ] |
Заголовок сообщения: | Re: Blackbox on OpenSolaris or Linux? |
Димыч писал(а): Пример Модуль Init получает значение errno из загрузчика. Передает его внутрь kernel. Можно было бы просто установить значение переменной и сказать, что ее читать могут все, а устанавливать только модули фреймворка Вот в таких случаях (системных) я ставлю экспорт только на чтение, а устанавливаю значение через Kernel.ThisObject + SYSTEM.PUT. |
Автор: | Димыч [ Вторник, 03 Ноябрь, 2009 12:12 ] |
Заголовок сообщения: | Re: конкурс |
Info21 писал(а): igor писал(а): Что касается ограниченного импорта, то мне тоже его не хватает Задачка. Придумать механизм, эквивалентный сказанному ограниченному импорту (см. посты), оставаясь внутри ББ.![]() Можно так: В заголовке модуля пишем 'OF "Framework"', где "Framework" - некий аналог namespace. При экспорте вместо "-" и "*" пишем "--" и "**" соответственно. Для тех, кто в "Framework" смысл не меняется - экспорт r/o, экспорт r/w. Второй символ в лексеме - для чужих (не входящих в "Framework"). Возможен еще вариант "*-". Если нет второго символа, тогда экспорта вне "Framework" нет. И даже без добавления лексем ![]() |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |