OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: Понедельник, 29 Июнь, 2020 14:35 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
В рамках базовой функциональности (а МультиОберон за точку отсчета брал объем функциональности компилятора BlackBox) практически все важные проблемы решены. Есть компилятор, есть кросс-платформенность, есть 32/64 бит, есть оптимизатор, есть динамическая загрузка, есть диверсификация бэкендов. Все, кроме обработки исключительных ситуаций.
Напомню, что было исследование уважаемого коллеги X512 https://community.blackboxframework.org/viewtopic.php?f=32&t=123#p678, в котором он абсолютно точно обозначил проблему structured exception handling (SEH) и проблему адресной арифметики в различных модулях.

Вторая проблема обусловлена использованием INTEGER адресов в модулях типа Meta, ...
В рамках МультиОберона я не ставил цели переносить всю инфраструктуру BlackBox (Dialog Stores Sequencers Models Services Fonts Meta Converters Ports Views Controllers Properties Mechanisms Containers Printers Printing ...) на 64-бит. В рамках моей необходимости появились 64-битные версии Kernel, например.

Первая проблема существует. Это не означает, что нет обработчика исключений. Есть в модулях Runner свои версии TrapViewer. И они работают
Код:
c:\suok5\test\Mob>Blwe\omlsh run OmtestMkTraps -trap a
*** trap # 21 19CDD8
OmtestMkTraps.RunOpt<OmtestMkTraps.MAIN<OmcCoffLoader.RunModule<OmcCoffLoader.Re
adModule<OmcLoader.LoadMod<OmcLoader.ThisMod<Runner.ThisMod<Kernel.ThisMod<OmcSh
ell.RunModule<OmcShell.Run<OmlSh.Run<Runner.RunModule<Runner.EntryPoint<Runner.S
etRun<OmlSh._body<OmlSh._main

Пример OmtestMkTraps при опции -trap a выдает реакцию на ASSERT(,21)
Обработчик выдает на консоль печать стека. Но:
1.данная информация слишком минималистична;
2.отслеживание стека неэффективно использует ресурсы процессора.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Июнь, 2020 14:40 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Механизм отслеживания стека взят из OFront. Мне кажется, для C придумать лучше ничего нельзя было.
Возьмем код теста OmtestMkTraps
Код:
void OmtestMkTraps_RunOpt (SHORTCHAR *str, INTEGER str__len)
{
   INTEGER iv, nv;
   struct CHAR_ARRAY *ps = NIL;
   __ENTER("OmtestMkTraps.RunOpt");
   iv = -1;
   nv = 2;
   ps = NIL;
   switch (str[0]) {
      case (SHORTCHAR)'a':
         __ASSERT(iv >= 0, 21);
         break;
      case (SHORTCHAR)'h':
         __HALT(22);
         break;
      case (SHORTCHAR)'z':
         nv = __DIVF(nv, iv + 1);
         break;
      case (SHORTCHAR)'p':
         (ps->data)[0] = (_CHAR)L'A';
         break;
      default:
         (*OLog_String)((_CHAR*)L"-- unknown choice -- ", 22);
         (*OLog_SString)(str, str__len);
         (*OLog_Ln)();
         __ASSERT(iv >= 0, 63);
         break;
   }
   (*OLog_String)((_CHAR*)L"*** unreachable statement! ***", 31);
   (*OLog_Ln)();
   __EXIT;
}

В данной процедуре неэффективное использование реализуется в __ENTER("OmtestMkTraps.RunOpt") на входе и __EXIT на выходе. Эти процедуры обновляют список, соответствующий текущему состоянию стека.

Это используется в Omf OFront, аналогичное решение, за неимением лучшего, я применил и в Oml LLVM бэкенде.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 29 Июнь, 2020 14:48 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Механизмы обработки для LLVM бэкенда известны:

Но проблема заключается в какой-то там неимоверности реализаций (welcome to C++ world). Поэтому решение пока не сложилось.
А пока оно не сложилось, используются те варианты обработчиков, которые используются.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Июль, 2020 18:11 

Зарегистрирован: Вторник, 22 Май, 2007 15:38
Сообщения: 220
Откуда: Питер
Как на счёт поддержки комплексных чисел?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 06 Июль, 2020 19:57 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
GameHunter писал(а):
Как на счёт поддержки комплексных чисел?

Концептуально МультиОберон состоит из уровней, причем базовый уровень - объем функций BlackBox. Другие уровни будут получаться дополнительными запретами и иногда разрешениями операторами RESTRICT. К такому уровню может относиться и тип COMPLEX со всей арифметикой. Это разумно. Но пока планируется доделать версию 1.0 базового уровня, после чего определить приоритеты в части развития других уровней. В ближайшем будущем комплексных чисел в планах нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Июль, 2020 15:24 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
Не хватает выбора АО в качестве базового уровня функционала.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Июль, 2020 21:12 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
В качестве альтернативы внедрению типа COMPLEX предлагаю рассмотреть реализацию математического расширения OberonX (уже реализованного для OP2 в ETH Oberon, так что остаётся только перенести код, подглядывая туда). Тогда можно будет легко сконструировать комплексный тип и операции над ним средствами самого расширения. Да и не только комплексный тип, а и много чего другого. Хотя с точки зрения идеально сбалансированной простоты это всё-таки уже уход в синтаксический сахар.


Я бы хотел реализовать это в Ofront+, может со временем сделаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Июль, 2020 23:14 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 519
Откуда: Украина, Днепропетровская обл.
Нашёл в сети такое обсуждение:


Ниже дурной машинный перевод, но мне так читать полегче, чем на инглише.
Цитата:
>От: BlackBox [mailto:BLACKBOX {([at]}) нигде.ху
>Марк Мартин
> Отправлено: понедельник, 29 июня 2009 г., 1:36 утра
>To: BLACKBOX {([at]})нигде.ху
>Тема: Re: [BLACKBOX] BlackBox 1.6 final version?
>
>> У меня есть вопрос: есть ли шанс, что сложные типы данных, как
> > обсуждаемые в руководстве по дубраве для Оберона-2, будут
>выполненный в черном ящике?
>
>Я занимаюсь математическим программированием, и мне всегда казалось, что это нормально.
>мне кажется, что комплексные числа могут быть определены пользователем с помощью записи
>типы. Хотя если вы хотите использовать операторы со сложными
> типы, возможно, вам действительно следует просить о возможности
>определить операторы? Некоторые языки позволяют вам сделать это,
>включая Зоннон, который, кажется, является Обероном / модулем-2/Паскалем
> * без * философии "держи все просто".

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

Единственные недостатки этого подхода, которые я могу придумать, это:

а) сгенерированный код может быть менее эффективным, чем если бы комплекс был нативными данными тип, распознанный компилятором.

б) "умный" программист мог бы изобрести несколько "странных и замечательных" применений
в результате получается неясный / недостижимый код.

Пользовательские операторы также были частью ETH" keep it simple".
Оберон уже некоторое время. Первоначально они были определены как часть
Система Оберон-х в 2000 году.

http://www-old.oberon.ethz.ch/native/co ... ators.html

Особенно интересно то, что ссылка выше также ссылается на источник
код реализации сложной арифметики с использованием определяемого пользователем кода
операторы. Это было написано Аланом Фридом, "гуру" математики Оберона:

http://www-old.oberon.ethz.ch/native/co ... omplex.txt

Однако вам не нужен Oberon-X, чтобы попробовать их, как это сделали эти расширения
также был доступен в стандартной ETH родной системе Oberon с момента выпуска
2.2.3. Версию подключаемого модуля Windows можно загрузить с сайта:

http://www.oberon.ethz.ch/archives/syst ... ve/windows

С уважением,
Крис Берроуз

Ссылки в приведённом письме битые. Файл complex.txt с реализацией комплексной математики с сайта ETH (Complex arithmetic by Alan Freed) недоступен на archive.org, я его разыскиваю. У кого вдруг сохранился — прикрепите, пожалуйста.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 09 Июль, 2020 11:46 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
На сегодня через "пользовательские операторы" даже, вроде бы, в Delphi можно удобно внедрить какой-нибудь нужный "big numeric".
В новой Ada собираются вводить нечто вроде перегрузки операторов и для комплексных константных выражений, к примеру, "[1, 2 ,3]" для некоего типа set трансформируется в серию вызовов заданной процедуры, какой-то include например.
Вложение:
complex.txt [5.1 КБ]
Скачиваний: 224


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 09 Июль, 2020 11:56 

Зарегистрирован: Понедельник, 11 Сентябрь, 2017 13:23
Сообщения: 1557
В Активном Обероне тоже есть определение операций пользователем и там встроено какое-то математическое расширение. Матрицы, что ли. Хотя я не уверен, что мне нравится, как оно там сделано. Ну и в учебниках пишут, что определение операций пользователем снижает надёжность языка. Я думаю, что на самом деле пользоваться можно, просто нужно определять необходимый минимум операций и каждый раз думать, как влияет на надёжность языка конкретно вот это определение в комплексе со всеми остальными уже существующими определениями.

Я воспользовался этой возможностью для типов широких строк:

"https://gitlab.com/budden/jaos/-/blob/яос/source/UCS32.Mod#L126"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 21 Июль, 2020 22:34 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Видимо нам надо попробовать свою кодовую базу загнать на ваш компилятор, чтобы что-то повылезало и можно было обсудить вопрос. Руки чешутся, но на это время выделить надо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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


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

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


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

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