Автор Тема: Чем Вирту WITH не угодил?  (Прочитано 85772 раз)

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #30 : Апрель 26, 2012, 08:42:53 pm »
Умом Вирта и Ко не понять. Просрали практически идеальные условия для успеха Оберонов. Вместо того, чтобы отдать в массы ББ, сидят на своих глюках, ни миру ни себе.

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #31 : Апрель 26, 2012, 08:46:33 pm »
но конечно понятно, что отследить возможное изменение  довольно трудно... например, если в охране вызывается процедура юзающая  оный указатель (изменение идет внутри нее), так  что is и as вполне адекватны
« Последнее редактирование: Апрель 26, 2012, 08:48:17 pm от DIzer »

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #32 : Апрель 26, 2012, 08:52:18 pm »
выбор Вирта (между запрещением  опасных процедур  использующих охраняемую  переменную и удалением невнятной конструкции)  предсказуем...

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Чем Вирту WITH не угодил?
« Ответ #33 : Апрель 26, 2012, 08:57:54 pm »
Но, по моему, тот же финт ушами в GPCP не прокатывает и ничего там завалить не выйдет.
GPCP сэйфный и использует родное-дотнетное приведение типов, оно в 7 раз медленнее нативного оберонистого приведения типов. GPCP эмулирует оберонистые value-типы дотнетными ссылочными, то есть там где в обероне было бы размещение записи на стэке в GPCP будет размещение в динамической памяти. Короче, GPCP - это такое огромное недоразумение.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #34 : Апрель 26, 2012, 09:04:36 pm »
Но, по моему, тот же финт ушами в GPCP не прокатывает и ничего там завалить не выйдет.
GPCP сэйфный и использует родное-дотнетное приведение типов, оно в 7 раз медленнее нативного оберонистого приведения типов. GPCP эмулирует оберонистые value-типы дотнетными ссылочными, то есть там где в обероне было бы размещение записи на стэке в GPCP будет размещение в динамической памяти. Короче, GPCP - это такое огромное недоразумение.
Оно может конечно и недоразумение, но тут это вообще не к месту упомянуто. Я к тому, что там и рантайм-ошибку получить не удастся (например исключение).

PS. Вообще, эти 7 раз в куче приложений никогда не всплывут.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #35 : Апрель 26, 2012, 09:08:20 pm »
Оно может конечно и недоразумение, но тут это вообще не к месту упомянуто. Я к тому, что там и рантайм-ошибку получить не удастся (например исключение).


В смысле.. нельзя указатель загнать в процедуру и сделать там  рекаст ,  или не дает это компилятор?

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #36 : Апрель 26, 2012, 09:34:58 pm »
Умом Вирта и Ко не понять. Просрали практически идеальные условия для успеха Оберонов. Вместо того, чтобы отдать в массы ББ, сидят на своих глюках, ни миру ни себе.
   :) Не они сидят(создатели), а коровцы - и им очень даже нравится это.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #37 : Апрель 26, 2012, 09:47:04 pm »
Оно может конечно и недоразумение, но тут это вообще не к месту упомянуто. Я к тому, что там и рантайм-ошибку получить не удастся (например исключение).


В смысле.. нельзя указатель загнать в процедуру и сделать там  рекаст ,  или не дает это компилятор?
Если мне склероз не изменяет, оно не даст (на этапе компиляции просто не скомпилится) изменить то что накастил.
Цитировать
The semantics of the WITH statement have been slightly modified so as to strengthen
the guarantees on the properties of the selected variable. In the code —
WITH x : TypeTi DO
... (* guarded region *)
| x : TypeTj DO
... (* guarded region *)
END;
the variable x is asserted to have the specified type throughout the so-called guarded
region. The base language guarantees that the type of the selected variable cannot be
“widened” in the guarded region, but might possibly be narrowed. In gpcp the selected
variable is treated as a constant, and neither the type nor the value can be modified
either directly or indirectly. Any attempt to do so attracts a compile-time error message.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #38 : Апрель 26, 2012, 09:57:15 pm »
Не  я говорю  про другое
WITH A:childtype DO Dowithparent(A) ;
где  Dowithparent обьявлена как PROCEDURE Dowithparent(VAR A:parenttype) ; -в ней идет рекаст аргумента несовместимый с охраняемым childtype

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #39 : Апрель 26, 2012, 10:03:45 pm »
Не  я говорю  про другое
WITH A:childtype DO Dowithparent(A) ;
где  Dowithparent обьявлена как PROCEDURE Dowithparent(VAR A:parenttype) ; -в ней идет рекаст аргумента несовместимый с охраняемым childtype
Что-то я под вечер туго соображаю. Дай пожалуйста полный код с тем самым рекастом.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #40 : Апрель 26, 2012, 10:50:41 pm »
Нет у австралийцев не прокатит "In gpcp the selected
variable is treated as a constant, and neither the type nor the value can be modified
either directly or indirectly. Any attempt to do so attracts a compile-time error message." выделенное я пропустил я пропустил впрочем это ясно и из "variable is treated as a constant"

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #41 : Апрель 26, 2012, 10:53:11 pm »
то есть там работает это как надо... а уж насколько это эффективно реализовано... это другой вопрос.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Чем Вирту WITH не угодил?
« Ответ #42 : Апрель 26, 2012, 10:55:36 pm »
Нет у австралийцев не прокатит "In gpcp the selected
variable is treated as a constant, and neither the type nor the value can be modified
either directly or indirectly. Any attempt to do so attracts a compile-time error message." выделенное я пропустил я пропустил впрочем это ясно и из "variable is treated as a constant"
Ну, я ж говорю что они коварные и радостно дырочку прикрыли. И пофик через какое место там каст делается - через механизмы .net/java или же быстрый нативный оберон-стайл каст.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #43 : Апрель 26, 2012, 11:24:32 pm »
я имел ввиду нечто вроде этого
MODULE mm;
IMPORT  Log := StdLog,  In := i21sysIn,  Math;

TYPE
T0 = EXTENSIBLE RECORD x: INTEGER END;
T1 = RECORD (T0) y: REAL END;
T2 = RECORD (T0) z: INTEGER END;
P0=POINTER TO T0;
P1=POINTER TO T1;
P2=POINTER TO T2;
VAR p:P0; pp:P1;
PROCEDURE Do(VAR P:P0);
VAR pt:P2;
BEGIN
NEW(pt);
pt.z:=4;
P:=pt;
END Do;

BEGIN
NEW(pp);
p:=pp;
WITH p:P0 DO Do(p);  END;
WITH p:P1 DO p.y:=4.5  END;
END mm.
прекрасно компилирующееся и выполняющееся в ББ
« Последнее редактирование: Апрель 26, 2012, 11:27:19 pm от DIzer »

DIzer

  • Гость
Re: Чем Вирту WITH не угодил?
« Ответ #44 : Апрель 27, 2012, 02:37:44 am »
 :) поправка - загрузка таки дает трап.