A2 & Oberon » Программирование » Общеe » вопросы по синтаксису языка

Страниц (2): [1] 2 »
 

1. lit-uriy - 15 Ноября, 2008 - 21:28:34 - перейти к сообщению
Требуется ликбез. В файлах А2 имеются такие символы справой стороны от идентификаторов (переменные, процедуры ...) :
1) *
2) -
3) &
4) (стрелка в верх)

первый я знаю - означает экспортируемость идентификатора за пределы модуля, а вот остальные незнаю.
2. BohdanT - 16 Ноября, 2008 - 11:38:34 - перейти к сообщению
1) "*" - экпорт для процедур переменных. В Объекте, кроме экспорта позволяет модифицировать переменную (в отличии от "-" )
2) "-" - экспорт только для чтения.
в случае если стоит перед имене процедуры обозначает, что это инлайн процедура.
Т.е. код процедуры будет вставлен в непосредственно в место вызова
Пример:
PROCEDURE -ANY2MYTYPE(CONST a:ANY):MYTYPE;
CODE{SYSTEM.i386}
POP EAX;
POP EAX;
END ANY2VKey;

3) "&" - конструктор объекта.
4) "^" - разименование переменной. Например если у нас есть переменная name типа String (PChar в Си), то при записи name^ у нас получается ARRAY OF CHAR

Еще одно применение: вызов предка. Если вы наследовали какой то объект и перекрыли например метод DrawBackground. То запись DrawBackground^; вызовет метод предка.
3. lit-uriy - 16 Ноября, 2008 - 13:08:02 - перейти к сообщению
BohdanT пишет:
4) "^" - разименование переменной


Вот крышечка она со времен паскаля, признак указателя (при обявлении, или его разименование)

А я напоролся именно на стрелку "->" только указывающую в верх. Даже не представляю как ее ввели.
4. BohdanT - 16 Ноября, 2008 - 13:34:14 - перейти к сообщению
Цитата:
А я напоролся именно на стрелку "->" только указывающую в верх. Даже не представляю как ее ввели.



С шрифтом "Оберон" все как в другом измерении.... Я напиример был в шоку когда увидел, что символ "_" отображается, как "-" - это просто пипец.

Установи нормальный шрифт и все будет нормально...
Я говорил уже, что залог нормального программирования по Аос - шрифт "cour" Хорошо
5. lit-uriy - 22 Ноября, 2008 - 20:34:33 - перейти к сообщению
BohdanT пишет:
{SYSTEM.i386}
А это что за запись? В дельфях в фигурных скобках, если я ничего не путаю, писались коментарии.
6. BohdanT - 22 Ноября, 2008 - 21:47:31 - перейти к сообщению
Да в делфе есть 2 вида коментариев, но не поддерживаются вложенные.
В обероне поддерживаются вложенные коменты.


{} - директивы компилятора.
{SYSTEM.i386} - Директива компилятору, здесь указывается под какой процессора ассемблер.
Есть еще:

{ACTIVE}
Определение объекта может включать StatBlock, названное телом объекта (object body). Тело — это активность объекта, которая исполняется после того, как экземпляр объекта размещен и инициализатор (если он есть) завершил свое исполнение; тело объекта помечается модификатором ACTIVE. Во время размещения объекта так же размещается новый процесс, который исполняет тело параллельно; такой объект называется активным объектом (active object).

{EXCLUSIVE}
Каждый экземпляр объекта защищен и единицей защиты является произвольный блок операторов от отдельного оператора до целого метода. Блок операторов может быть защищен от одновременного доступа при помощи модификатора EXLUSIVE. Активность остается на входе в эксклюзивный блок до тех пор, пока другая активность находится в эксклюзивном блоке того же экземпляра объекта.

Активность не может заблокировать объект более одного раза, повторный вход не допускается.

Каждый модуль считается объектным типом с единственным экземпляром (singleton instance), таким образом его процедуры тоже могут быть защищены. Областью видимости защиты является модуль целиком как и вслучае мониторов
{DELEGATE}
Делегаты подобны процедурным типам; они совместимы как с процедурами так и с методами, в то время как процедурные типы совместимы только с процедурами.

Делегаты процедурных типов помечаются модификатором DELEGATE. Делегатам могут быть назначены процедуры и методы. Пусть даны переменная с процедурным типом t, экземпляр объекта o и метод M связанный с o, тогда можно записать o.M в t, если конечно метод и t обладают совместимыми сигнатурами. Ссылка на сам объект исключается из сигнатуры процедурного типа. Всякий раз при вызове t назначенный объект o явно передается в self-ссылку (self-reference). Присваивания и вызовы процедур остаются совместимыми с описанием Oberon.
Нетрассируемые указатели — это указатели, которые не отслеживаются сборщиком мусора. Структура или объект, на которые ссылаются только нетрассируемые указатели, могут быть в любой момент утилизированы сборщиком мусора.
{UNTRACED}
Нетрассируемые указатели — это указатели, которые не отслеживаются сборщиком мусора. Структура или объект, на которые ссылаются только нетрассируемые указатели, могут быть в любой момент утилизированы сборщиком мусора.
Нетрассируемые указатели определяются при помощи модификатора UNTRACED.
TYPE Untraced = POINTER {UNTRACED} TO T;
7. lit-uriy - 30 Ноября, 2008 - 06:35:53 - перейти к сообщению
Опять про значки, имеется такой код:

PROCEDURE &Init*(w, h : LONGINT; alpha : BOOLEAN);
BEGIN
Init^(w, h, alpha);
NEW(img);
IF alpha THEN Raster.Create(img, w, h, Raster.BGRA8888) ELSE Raster.Create(img, w, h, Raster.BGR565) END;
NEW(canvas, img);
END Init;

в теле процедуры вызывается другая процедура Init с крышечкой, какой смысл имеет эта крышечка здесь?
(Добавление)
хех этож вызов метода предка Улыбка
(Добавление)
А вот такая запись:
canvas.SetClipRect(r); canvas.SetClipMode({WMGraphics.ClipRect});

где аргумент WMGraphics.ClipRect взят в фигурные скобки, это что такое?
8. BohdanT - 30 Ноября, 2008 - 11:19:02 - перейти к сообщению
lit-uriy
Я уже писал Улыбка
BohdanT пишет:
Еще одно применение: вызов предка. Если вы наследовали какой то объект и перекрыли например метод DrawBackground. То запись DrawBackground^; вызовет метод предка.

(Добавление)
lit-uriy пишет:
{WMGraphics.ClipRect}

Это конструктор множества (SET).
Т.е. в качестве параметра передается множество, в данном случае состоящее из одного элемента.
9. lit-uriy - 30 Ноября, 2008 - 11:29:41 - перейти к сообщению
BohdanT пишет:
Это конструктор множества (SET).
чем множество отличается от масива?
10. BohdanT - 30 Ноября, 2008 - 12:17:29 - перейти к сообщению
Хм.. в таком сравнении даже никогда не думал Улыбка

Я отвечу как я множества понимаю, не так как в книгах пишут.
Если я не прав то поправьте:

Множество - в моем понимании это скорее работа с битами.
Т.е. можно без них обойтись, но есть нюансы. Например у нас есть какие то флаги
fl1 = 1;
fl2 = 2;
fl3 = 4;
fl4 = 8;
fl5 = 16;
и т.д.
Такое встречается в винде сплошь и рядом, для описания стилей и т.п.

можно было бы писать(да и пишут) без множеств:
state = fl1 OR fl3 OR fl4;

естественно и проверку на зажженый бит сделать не сложно.

Вот и все, а зачем множества я не знаю....

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0201]     [ Gzipped ]