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 комуто дать хороший пинок столько времени не могут примеры поправить |
Автор: | Ярослав Романченко [ Воскресенье, 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 |
Никогда не говори никогда Код: 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 писал(а): Никогда не говори никогда Конечно, в обход системы типов (IMPORT SYSTEM) можно многое сделать. Но не лучше ли тогда просто использовать Си? Теперь по сути вопроса. Не знаю, как конкретно обстоит дело в АО, но в Обероне адрес записи еще не есть её полноценный указатель. Дело в том, что в записях в динамической памяти содержится (скрытый) указатель на дескриптор типа (т.н. type tag), а записям в стеке и статической памяти с этим не повезло. IMHO, если мы возьмём и передадим адрес такой записи в качестве указателя, могут случиться разные неприятности. Например, при динамической проверке типа IF p IS Type THEN ... END. |
Автор: | bohdant [ Вторник, 04 Ноябрь, 2008 19:08 ] |
Заголовок сообщения: | Re: Общие вопросы по программированию для Bluebottle |
AVC писал(а): Конечно, в обход системы типов (IMPORT SYSTEM) можно многое сделать. Но не лучше ли тогда просто использовать Си? А зачем использовать Си если можно и АО? В том то и дело, что бывают "узкие" места, где важна скорость. Конечно, нужно еще незабывать, что можно использовать секцию CODE А по большому, мне АО этим и нравится: Нельзя! ....но если сильно хочется, то можно |
Автор: | 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 PS. Правда, это пока не очень оптимально по скорости...
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 *) |
Автор: | 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 ); Кстати статистика: в каждом шестом модуле применяется |
Автор: | 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/ |