| 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/ |
|