Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Kemet

Страницы: 1 ... 36 37 [38] 39 40
556
Ха, Вирт крут - его WITH работает так, как надо - после разыменования указателя, т.е. получения адреса записи (ссвлки) мы работаем с данной конкретной областью памяти, и пофигу нам какаие-то указатели - ну присвоим мы глобальному поинтеру другое значение, но в блоке WITH мы работаем со ссылкой на старый участок памяти. Проблемы-то и нет никакой, ну за исключением возможной утери этой области памяти по причине отсутствия ссылок на нее, но это уже совсем другая история.

557
...
                xtyp := x.typ; OCE.TypTest(x, y, FALSE); x.obj.typ := x.typ
...
ilovb, это реальный (правильно)работающий код или это просто копипаст из книжки, и там возможны ошибки?
Ага, нашел, сразу не увидел - то что мне нужно было и ожидалось в данном месте обнаружилось в другом месте. Весь код лопатить времени нет, но сдается мне что преобразование динамики в статику здесь тоже есть, т.е. происходит разыменование указателя, и далее, полученный адрес используется как сылка, а ссылка это не указатель, вот она и статика.

558
...
                xtyp := x.typ; OCE.TypTest(x, y, FALSE); x.obj.typ := x.typ
...
ilovb, это реальный (правильно)работающий код или это просто копипаст из книжки, и там возможны ошибки?

559
Так вот же единственный вызов
xtyp := x.typ; OCE.TypTest(x, y, FALSE); x.obj.typ := x.typ
это парсинг и проверка времени компиляции, надо генерируемый код смотреть

560
А какой у вас набор управляющих операторов?
Есть foreach?
Да стандартные, IF с ELSIF, WITH - многоветочный, WITH/CASE с веткой ELSE.
все циклы, кроме foreach
RETURN

561
Так вы про свою реализацию?
Я говорил про Оберон, а в нем это так сделано:
...
]
[/quote]
Ну да о Сириусе.
А в Обероне нужно смотреть генератор, в парсере откуда возьмется

562
Это окончательная версия языка или допускаются внесения изменений?
Х86-64 будет в открытом доступе?
Для конторы окончательная - там много кода, завязанного на имеющуюся реализацию, в паблике будет открытая. x86-64 на данный момент нет.

563
Так в WITH тоже никаких физических процессов не выполняется. Это тоже просто трактовка, и ничего более.
если у нас есть
R1 = POINTER TO RECORD(R1Desc) END;
R1Desc= RECORD
  a:INTEGER
END;

VAR
 v: R1Desc;
 p: R1;
Здесь v - Статика, а p - динамика, при КАЖДОМ обращении к p происходят некоторые телодвижения, связанные с получением адреса R1, на которую он указывает, а блок WITH позволяет сделать это один раз, а далее работать с ним как со статикой (v), используя полученный адрес. я об этом на 1-й странице написал. В этом и есть профит.

564
Нельзя сказать, что оно разрешено - ведь явного разрешения в описании нет, я также могу сказать, что запрещено. Этот спор не имеет смысла, потому что основан на нашем индивидуальном восприятии. Здесь уместней было бы уточнение языка, а так зависит от реализации.

565
...динамический тип оным и останется.
Остается каким? Каким был до TYPECAST SAFE?
Если так то DIzer правильно заметил, что это в точности WITH получается
Динамическим.
Это просто трактовка типа и ничего более, никаких физических процессов, кроме пробы типа не выполняется. Ещё раз - это растянутая в пространстве трактовка типа, либо с контролем допустимости такой трактовки (по умолчанию), либо без оной, а WITH позволяет работать с динамикой как сос статикой, имея на этом профит по причине отсутствия лишних разыменований.

566
Вижу.. SYSTEM.VAL
Т.е. реально UNSAFE....
А модули содержащие unsafe код помечаются как-то?
Помечаются, причем не только весь модуль, но и экспортируемые процедуры, имеющие такой код, а также помечаются как unsafe объекты у которых  есть ансейфный код.

567
А какая логика у TYPECAST UNSAFE если приведение невозможно? Как в додиезовском "as" NIL возвращается?
Какая может быть логика у тупого SYSTEM.VAL?
А вот SAFE режим формирует исключение, которое или стандартно трапает или, если в блоке есть секция exception, обрабатывается ручками.

568
Т.е., после эпилога, в котором осуществляется настройка, код идентичен тому, как если бы мы смогли определить в блоке статическую запись и работать с ней.
Таки нет, код не совсем идентичен, это не принципиально, да и идентичным его можно сделать, но главное в другом - динамика как статика. И синтаксически и физически.

569
Таки уточните - правильно ли я понял, что TYPECAST с модификатором SAFE делает тоже что фактический (обращаю внимание фактический - не декларированный) WITH в Обероне? - если так, то зачем это нужно? логичнее было бы добавить модификаторы и возможность мультикаста в WITH?
Изначально у нас не было ни WITH, ни TYPECAST, у нас был GUARD, который только замораживал возможность подмены экземпляра, перераспределения памяти и т.п.
На базе этого механизма был сделан WITH - во-первых, как мы его поняли, во-вторых с наименьшими затратами. Ведь WITH в нашей реализации, как я уже писал, основан на механизме GUARD (для защиты типа переменной) и, в тоже время работает с динамическим типом как со статическим, т.е. после входа в WITH уже никаких разыменований указателей не происходит, поскольку WITH получает конкретный адрес переменной и в блоке оперирует уже им.
Т.е., после эпилога, в котором осуществляется настройка, код идентичен тому, как если бы мы смогли определить в блоке статическую запись и работать с ней.

А TYPECAST это просто трактовка типа и ничего более. Да, он проверяет , в сэйврежиме, допустимость приведения, но и только, динамический тип оным и останется.

570
Так и думал... TYPECAST - значит эквивалент Паскалевского WITH или нет?  выглядит как охрана по синтакису....
SAFE - перед приведением выполняется проверка типа как во время компиляции (если возможно), так и во время исполнения (одноразово, при входе в блок), UNSAFE режим похож на SYSTEM.VAL - ничего не контролируется при приведении.
Это очень простой каст - сама переменная остается неизменна, т.е. это растянутая в пространстве трактовка типа.
Для преобразования же типов у объектов могут быть соответствующие операторы для конвертации.

а что разнотипные формальные параметры в процедурах у вас отделяются запятыми?
Нет, это мой косяк - там сначала пример был без рекордов, с двумя объектами, а потом я его скопировал чтоб не писать и накопипастил бездумно. Надо бы поправить

Страницы: 1 ... 36 37 [38] 39 40