OberonCore
https://forum.oberoncore.ru/

Общие вопросы по программированию для Bluebottle
https://forum.oberoncore.ru/viewtopic.php?f=22&t=916
Страница 2 из 2

Автор:  Madzi [ Воскресенье, 26 Октябрь, 2008 10:50 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Может быть глупый вопрос, но подскажите пожалуйста как запустить под A2 своё приложение?

Создаю модуль (см. ниже), IDE его успешно компилирует, но запустить его я не могу :(

Когда я пишу SomeName то среда мне говорит, что такого модуля нет.
А если я пишу SomeName.Start, то возвращается ошибка что в модуле нет такой процедуры.

В чём же секрет?

MODULE SomeName;

IMPORT ...

...

TYPE
MyApp = OBJECT(WMComponents.FormWindow)
...
PROCEDURE &New();
...
END New;
...
END MyApp;

PROCEDURE Start*(par: ANY): ANY;
VAR
App: MyApp;
BEGIN
NEW(App);
RETURN NIL;
END Start;

END SomeName.

Автор:  bohdant [ Воскресенье, 26 Октябрь, 2008 11:03 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Madzi писал(а):
Может быть глупый вопрос, но подскажите пожалуйста как запустить под A2 своё приложение?

Вполне нормальный вопрос
Нужно поменять
Код:
PROCEDURE Start*(par: ANY): ANY;

на
Код:
PROCEDURE Start*;

Естествено убрать RETURN
Еще вынеси в глобальные переменны VAR
App: MyApp;

Дальше в любом тексте, можно и в исходнике пишешь
Код:
SomeName.Start ~

Кликаешь правой кнопкой по слову Start. Появится круглая менюшка. Не отжимая кнопку мыши, выбирай "Start" в меню

Вобщем сейчас просто времени не хватает, более подробно ответить, но думаю у тебя все получится ;)

PS: А вообщето, нужно в ETH комуто дать хороший пинок :twisted: столько времени не могут примеры поправить :twisted:

Автор:  Ярослав Романченко [ Воскресенье, 26 Октябрь, 2008 11:31 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

bohdant писал(а):
Код:
PROCEDURE Start*;
Можно так, а можно ещё и с передачей контекста в приложение:
Код:
PROCEDURE Start*(context: Commands.Context);
Естественно, нужно в секцию IMPORT включить модуль Commands. Из контекста можно получить параметры командной строки и выводить с помощью него сообщения в лог. А если контекст переприсвоить глобальной переменной в модуле, то можно выводить в лог сообщения из любой процедуры.
Лучше всего изучить объект Context по исходнику модуля Commands.Mod :)

Автор:  Madzi [ Воскресенье, 26 Октябрь, 2008 11:39 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Спасибо большое. Получилось.

Да, с документацией для A2 (AOS) действительно проблемы (и не только под эту систему).
Будем эту проблему исправлять и внедрять в учебный процесс :).

Автор:  Madzi [ Вторник, 04 Ноябрь, 2008 16:30 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Ещё один глупый вопрос.
Никак не могу понять, как мне получить указатель на переменную.

Допустим у меня есть тип
Код:
TYPE
  Type = POINTER TO TypeDesc;
  TypeDesc = RECORD
    ...
  END;

и далее в тексте
Код:
VAR
  vt: ARRAY 50 OF TypeDesc;
  curt: Type;

хочется иметь возможность присваивать переменной curt адреса элементов массива vt, например:
Код:
  curt := ADDRESS(vt[10]);

Как это сделать?

Автор:  Евгений Темиргалеев [ Вторник, 04 Ноябрь, 2008 16:57 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

В Оберонах нету операции взятия адреса, адрес статического объекта получить нельзя. Указатели используются только для создания объектов динамически при помощи NEW.

Автор:  AVC [ Вторник, 04 Ноябрь, 2008 17:05 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Madzi писал(а):
Как это сделать?
Так сделать нельзя.
Указатель (если он не нулевой) может указывать только на отдельную переменную в динамической памяти (куче).
Но уверен, что можно найти подходящее для Вашей задачи другое решение.
На вскидку.
1. Кроме указателей можно использовать "курсоры" - целочисленные переменные, хранящие индексы в массиве.
2. Можно завести не массив TypeDesc, а массив Type.
3. Можно вызывать процедуры с типом аргумента VAR v: TypeDesc.
И т.д.

Автор:  bohdant [ Вторник, 04 Ноябрь, 2008 17:56 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Никогда не говори никогда :wink:
Код:
MODULE testadr;
IMPORT SYSTEM,KernelLog;
TYPE
   TypeDesc = RECORD
      a:BOOLEAN;
      b:LONGINT;
   END;
VAR
    vt: ARRAY 50 OF TypeDesc;
    testvar:LONGINT;
    adr : SYSTEM.ADDRESS;
PROCEDURE AAA*;
BEGIN
   adr:=SYSTEM.ADR(vt[3]);
   KernelLog.Address(adr);   KernelLog.Ln;
   adr:=SYSTEM.ADR(vt[14]);
   KernelLog.Address(adr);KernelLog.Ln;
   adr:=SYSTEM.ADR(vt[15]);
   KernelLog.Address(adr);KernelLog.Ln;
END AAA;
END testadr.AAA~

Автор:  bohdant [ Вторник, 04 Ноябрь, 2008 18:00 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Проверил, можно даже так:
adr:=SYSTEM.ADR(vt[15].b);

Автор:  AVC [ Вторник, 04 Ноябрь, 2008 18:13 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

bohdant писал(а):
Никогда не говори никогда :wink:
Конечно, в обход системы типов (IMPORT SYSTEM) можно многое сделать. :roll:
Но не лучше ли тогда просто использовать Си?
Теперь по сути вопроса.
Не знаю, как конкретно обстоит дело в АО, но в Обероне адрес записи еще не есть её полноценный указатель.
Дело в том, что в записях в динамической памяти содержится (скрытый) указатель на дескриптор типа (т.н. type tag), а записям в стеке и статической памяти с этим не повезло.
IMHO, если мы возьмём и передадим адрес такой записи в качестве указателя, могут случиться разные неприятности. Например, при динамической проверке типа IF p IS Type THEN ... END.

Автор:  bohdant [ Вторник, 04 Ноябрь, 2008 19:08 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

AVC писал(а):
Конечно, в обход системы типов (IMPORT SYSTEM) можно многое сделать. :roll:
Но не лучше ли тогда просто использовать Си?

А зачем использовать Си если можно и АО?
В том то и дело, что бывают "узкие" места, где важна скорость.
Конечно, нужно еще незабывать, что можно использовать секцию CODE :)

А по большому, мне АО этим и нравится: Нельзя! ....но если сильно хочется, то можно :lol:

Автор:  Wlad [ Вторник, 04 Ноябрь, 2008 22:41 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Madzi писал(а):
Код:
  curt := ADDRESS(vt[10]);

Как это сделать?

А - ЗАЧЕМ???
Обероны всячески отваживают от подобной практики и подходов.
ЧТО ТАКОЕ "указатель на элемент массива"?
Вы уже и так на него ссылаетесь через индекс.
Про аргумент "эффективность" можно забыть.
Всё может смениться при переходе на другую платформу. Даже на Си я, работая на Мегах, пришёл к заключению, что адресация через индекс ЭФФЕКТИВНЕЕ, при работе с элементами массивов, чем ПРЯМАЯ АДРЕСАЦИЯ! Просто в силу кодов проца, реализующих индексное смещение (относительную адресацию)...

Си поощряет "раннюю оптимизацию" (к чему это ведёт в учебниках и советах аксакалов хорошо описано). Обероны заставляют сначала общо решить задачу.

Решайте задачи!

Автор:  bohdant [ Вторник, 04 Ноябрь, 2008 23:44 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Я думаю, что все можно свести к такому варианту ;) и все проблемы уйдут...
Код:
VAR
  vt: ARRAY 50 OF Type;
  curt: Type;


Владимир Лось писал(а):
А - ЗАЧЕМ???
Обероны всячески отваживают от подобной практики и подходов.

Кстати поглядел я исхдохники Аоса: там сплош и рядом адрессная арихметика :))
Почему? У кого какие идеи?

Автор:  Madzi [ Вторник, 04 Ноябрь, 2008 23:59 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

bohdant писал(а):
Я думаю, что все можно свести к такому варианту ;) и все проблемы уйдут...
Код:
VAR
  vt: ARRAY 50 OF Type;
  curt: Type;


Попробую свести, но с налёту не получится, буду думать...
bohdant писал(а):
Я думаю, что все можно свести к такому варианту ;) и все проблемы уйдут...
Владимир Лось писал(а):
А - ЗАЧЕМ???
Обероны всячески отваживают от подобной практики и подходов.

Кстати поглядел я исхдохники Аоса: там сплош и рядом адрессная арихметика :))
Почему? У кого какие идеи?

Я так полагаю, что ради скорости портирования. Т.е. часть кода Аос не оригинальная, а портирована с того же Си (драйвера, например)

Автор:  Geniepro [ Среда, 05 Ноябрь, 2008 07:34 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Удалено модератором.

Автор:  Ярослав Романченко [ Среда, 05 Ноябрь, 2008 09:17 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

bohdant писал(а):
Почему? У кого какие идеи?
Нужно чётко понимать, что в системе есть жёстко-аппаратнозависимые модули, их даже снабжают префиксами вроде i386., есть возможно менее зависимые, импортирующие SYSTEM.
Импортирования SYSTEM нужно в своих модулях всячески избегать только и всего-то, если конечно это не какой-то драйвер :)

Автор:  Ярослав Романченко [ Среда, 05 Ноябрь, 2008 09:27 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

к Madzi:
Попадался-ли Вам в руки такой документик http://nativesystems.inf.ethz.ch/pub/Ma ... lgebra.pdf
Это векторно-матрично-тензорные расширения к AO.
С использованием возможно производить операции даже между частями векторов и матриц.
Код:
var
  M,N: array [* ,*] of real ;
  v: array [*] of integer;
  w: array [*] of real ;
procedure P(var a: array [* ,*] of real );
procedure Q(const a: array[*] of real );
procedure R (): array [*] of integer;
begin
  new(M ,3 ,5); NEW (w ,10); (* creation *)
  M := [[1 ,2 ,3] ,[4 ,5 ,6]]; (* (re -) allocation if necessary *)
  w [1..3] := M [1 ,*]; (* assignment *)
  P(M [0..3 ,0..3]); Q(v [*]); v := R (); (* procedure calls *)
PS. Правда, это пока не очень оптимально по скорости...

Автор:  bohdant [ Среда, 05 Ноябрь, 2008 09:33 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Madzi писал(а):
Я так полагаю, что ради скорости портирования. Т.е. часть кода Аос не оригинальная, а портирована с того же Си (драйвера, например)

Я тоже так думаю, однако иногда действительно полезно:
Код:
            ASSERT ( tail + n <= LEN( buf ) );   (* index check *)
            SYSTEM.MOVE( SYSTEM.ADR( x[ofs] ), SYSTEM.ADR( buf[tail] ), n );  INC( tail, n ); 

Кстати статистика: в каждом шестом модуле применяется :mrgreen:

Автор:  Madzi [ Среда, 05 Ноябрь, 2008 19:31 ]
Заголовок сообщения:  Re: Общие вопросы по программированию для Bluebottle

Ярослав Романченко писал(а):
к Madzi:
Попадался-ли Вам в руки такой документик http://nativesystems.inf.ethz.ch/pub/Ma ... lgebra.pdf
Это векторно-матрично-тензорные расширения к AO.
С использованием возможно производить операции даже между частями векторов и матриц.
Код:
...

PS. Правда, это пока не очень оптимально по скорости...

Да. Я видел этот документ, а также видел сайт, на котором разрабатывается математический пакет для АО.
Пока то, что там сделано для меня большого (первоочередного) интереса не представляет.
В первую очередь меня интересуют параллельные вычисления, модульная арифметика, абсолютно точные (безошибочные вычисления) и компьютерная графика, потом статистика, а уже потом общая математика.

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