Здравствуйте, Serginio1, Вы писали:
S>Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах. S> Правда для них и унсейв не указ.
Не кишат они там ни фига. Используются кое-где для оптимизации, и то бестолку, так как никакого толка на сегодня это не дает.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Там нет Шарпа. Там псевдокод, отличающийся только обозначением ссылок. Естественно, предполагается, что оба примера работают, и делают одно и то же, а именно модифицируют s1 через s2. Мы ж не занимаемся ерундой типа "X vs. Y", а просто обсуждаем выдвинутый тобой тезис о том, что неявные ссылки проще для обучения.
Ты в очередной раз пытаешся поспорить о сферическом коне в вакуме и тем самым подменить тему разговора.
Напомню, что в разговоре до сих пор не велось обсуждение явное задание ссылок vs. не явное. Разговор велся о указателях и ссылках. Разница между указателями и ссылками в первю очередь заключается в наличии явного разыменования, а стло быть резкого заграмождения кода.
Что же касается примера, то выброси из него ссылку и ничего ровным счетом не изменится (твой же "абстрактный" пример базируется все же на С++ и Шаре как идеомах, а и там и там по большому счету имя массива есть указатель/ссылка на его начало в памяти (если уж опускаться на такой низкий уровень)). Так что пример твой мало чего демонстрирует.
Нормальный прмер был бы на объектах:
class A { public: int i; };
...
A a1();
A * a2 = new A();
A * a3 = a2;
A & a4 = *a2;
и
class A { public int i; }
A a1 = new A();
A a2 = new A();
A a3 = a2;
A a4 = *a2;
Мне конечно прийтеся объяснить понятие ссылочного типа данных. Но тебе прийтется объяснять нмного больше. А самое печальное, что потом программисту прийдется постоянно трахаться с нагромождением всех этих указателей, ссылк и т.п., что не миноему усложнит создание программ и понизит их качество (безопасность и простоту). Собственно именно это мы и наблюдаем на практике. Хотя отдельные товарищи делают вид, что никаких проблем нет.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Дарней, Вы писали:
Д>Свитчем они могут заменены безо всяких проблем
Продемострируй!
Слепи DLL и EXE. Пусть EXE динамически загрузит DLL и что-то с ней сделает такое, что она сможет сама вызывать хоть одну процедуру из EXE.
Д>Но можно подойти к вопросу и с другой стороны. Как насчет функторов?
А что ты имеешь в виду под словом "функтор"?
Д>Как насчет декларативных языков, ФП и ЛП?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Дарней, Вы писали:
Д>>Но можно подойти к вопросу и с другой стороны. Как насчет функторов?
СГ>А что ты имеешь в виду под словом "функтор"?
Стыдно, батенька
Д>>Как насчет декларативных языков, ФП и ЛП?
СГ>Речь, между прочим, идет об императивном языке.
Кто это сказал и когда? Или декларативное программирование "вне закона"?
Здравствуйте, VladD2, Вы писали:
VD>Я просто использую терминалогию создателей языка, которая в свою очередь базируется на общепринятой терминалогии.
Как же общепринятой??????
Заметь, что не только в оберонах, а еще и в Си/Си++ ссылкой называется совсем другое:
int a = 2;
int& ref = a;
ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a".
Ссылка — это еще одно символическое имя одной и той же переменной.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a". СГ>Ссылка — это еще одно символическое имя одной и той же переменной.
Проверить ссылку на нулёвость можно: &ref == NULL
Вот только в нормальных ситуациях это недостижимо.
Чтобы получить нулевую ссылку, мы должны прибегнуть к хаку, основанному на неопределённом поведении — это, на выбор:
* разыменовать нулевой указатель
* узнать внутреннее представление ссылки и соответствующим образом зачистить область памяти, где она размещена
То, что ссылка не есть ещё одно символическое имя — видно на примерах, где ссылка получает вполне конкретное хранилище. Например, член-данное ссылочного типа.
Здравствуйте, Кодт, Вы писали:
К> Проверить ссылку на нулёвость можно: &ref == NULL
Нет, нельзя.
Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной.
Здравствуйте, Kluev, Вы писали:
K>Гы-Гы-Гы. А если вот так: K>
K>static void test( object[] values )
K>{
K> foreach( object v in values )
K> Console.Write( "{0}", v );
K>}
K>
тогда так:
PROCEDURE test(VAR values: ARRAY OF Writeable);
VAR i: INTEGER;
BEGIN
FOR i := 0 TO LEN(values) - 1 DO
L.String("{"); L.Int(i); L.String("} "); L.String(values[i].AsString)
END
END test;
TYPE
Writeable = ABSTRACT RECORD
(w: Writeable) AsString(): String, NEW, ABSTRACT;
END;
Здравствуйте, Сергей Губанов, Вы писали:
К>> Проверить ссылку на нулёвость можно: &ref == NULL
СГ>Нет, нельзя.
СГ>Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной.
Вот именно. Это и будет проверкой "значения" ссылки на нулёвость.
А чтобы получить адрес, где ссылка размещена в памяти — для этого есть разнообразные хаки. Поскольку они связаны с неопределённым поведением, я не буду их разворачивать.
Например, ссылка как член объединения.
Наконец, в С++ есть такая штука, как типы с семантикой ссылки. Конечно, синтаксически они не полностью совместимы (например, не получится обращаться к членам объекта по такой ссылке), но выступать в роли lvalue-аргумента, выдавать адрес объекта можно. Наряду с этим, можно получить и собственный адрес.
Далеко за примером ходить не надо. CComPtr<T> имеет семантику ссылки на T*. (Чтоб ему пусто было! Потому что это сильно отравляет жизнь в ряде других мест).
СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a". СГ>Ссылка — это еще одно символическое имя одной и той же переменной.
В Обероне ссылкой ничего не называют, так как нет их там. А в С++ ссылкой называют то что нужно. То что в С++ нельзя присвоить ей null_ptr — это просто особенности дизайна.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, VladD2, Вы писали:
VD>>Попробуй на досуге повторить вот этот код, и сравни его с исходным: VD>>
VD>>class A
VD>>{
VD>> static void Test()
VD>> {
VD>> object[] array = new object[] { 1, 1.2, "Wow!", new A(), RateTime.Now };
VD>> foreach (object value in array)
VD>> Console Write("'{0]'", value);
VD>> }
VD>>}
VD>>
Ты массивчик полиморфный создай. И выведи его значение в цикле. Хотя даже эта породия имеет объем кода больший чем оригинал. Причем чистый ручник. Да и с образовательной точки зрения полный ноль!
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Бред смвой кобылы. Уж извини за грубось. "{0}" — в дотнете это формат выводящий аргумент с индексом 0 из списка аргументов. Ну, и не показано как в этот загадочный ARRAY OF Writeable запихать объекты разных типов (от строенных до классов).
Хотя уже невооруженным взглядом видно, что примитивизм на лицо. Кода больше, толку меньше. И этому уродству учить детей?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Alex Reyst, Вы писали:
AR>И то, что сейчас его действительно "зашкаливает", — это отнюдь не повод относиться неуважительно к человеку, прервавшего в свое время весьма порочную ассоциацию "программирование = Фортран".
В том то и дело, что его действительно "заносит" (вообще весь этот обсуждаемый доклад — сплошной позор и вопль отчаяния, мелкие придирки вместо аргументов по существу), но память о былых заслугах действительно сильна — и стал профессор этаким знаменем, под которым продвигается нежизнеспособная муть типа Оберонов.
З.Ы. Написано под впечатлением от первого взгляда на среду BlackBox — убожество, застрявшее где-то в 1993 году.
Здравствуйте, VladD2, Вы писали:
VD>Хотя уже невооруженным взглядом видно, что примитивизм на лицо. Кода больше, толку меньше. И этому уродству учить детей?
Влад! Да как же ты не понимаешь?!? Ведь оберон это же идеальный язык программирования всех времен и народов, а Вирт величайший гуру принесший свет во тьму невежества промышленных программистов. А такие великие опостолы как Сергей Губанов помогают Вирту нести свет оберона в массы.
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн