Re[10]: Указатель
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 09:33
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах.

S> Правда для них и унсейв не указ.

Не кишат они там ни фига. Используются кое-где для оптимизации, и то бестолку, так как никакого толка на сегодня это не дает.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Мощность...
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 09:33
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Там нет Шарпа. Там псевдокод, отличающийся только обозначением ссылок. Естественно, предполагается, что оба примера работают, и делают одно и то же, а именно модифицируют 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>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Что дают шаблоны?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 10:54
Оценка: :)
Здравствуйте, Дарней, Вы писали:

Д>Свитчем они могут заменены безо всяких проблем


Продемострируй!
Слепи DLL и EXE. Пусть EXE динамически загрузит DLL и что-то с ней сделает такое, что она сможет сама вызывать хоть одну процедуру из EXE.

Д>Но можно подойти к вопросу и с другой стороны. Как насчет функторов?


А что ты имеешь в виду под словом "функтор"?

Д>Как насчет декларативных языков, ФП и ЛП?


Речь, между прочим, идет об императивном языке.
Re[41]: Что дают шаблоны?
От: Курилка Россия http://kirya.narod.ru/
Дата: 28.10.04 10:59
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, Дарней, Вы писали:


Д>>Но можно подойти к вопросу и с другой стороны. Как насчет функторов?


СГ>А что ты имеешь в виду под словом "функтор"?


Стыдно, батенька

Д>>Как насчет декларативных языков, ФП и ЛП?


СГ>Речь, между прочим, идет об императивном языке.


Кто это сказал и когда? Или декларативное программирование "вне закона"?
Re[13]: Ссылка vs Указатель
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 11:03
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я просто использую терминалогию создателей языка, которая в свою очередь базируется на общепринятой терминалогии.


Как же общепринятой??????
Заметь, что не только в оберонах, а еще и в Си/Си++ ссылкой называется совсем другое:
int  a = 2;
int& ref = a;

ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a".
Ссылка — это еще одно символическое имя одной и той же переменной.
Re[11]: Указатель
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 11:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>Спор о терминологии.


VD>Так изучи ее. java.sun.com http://msdn.microsoft.com/vcsharp/team/language/default.aspx


- Будете у нас на Колыме...
— Спасибо, лучше Вы к нам!

Re[14]: Ссылка vs Указатель
От: Кодт Россия  
Дата: 28.10.04 11:33
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a".

СГ>Ссылка — это еще одно символическое имя одной и той же переменной.

...Думаете вы. (© Один переводчик-синхронист с немецкого — когда в конце длинной ветвистой фразы услышал неожиданное kann nicht).

Проверить ссылку на нулёвость можно: &ref == NULL
Вот только в нормальных ситуациях это недостижимо.
Чтобы получить нулевую ссылку, мы должны прибегнуть к хаку, основанному на неопределённом поведении — это, на выбор:
* разыменовать нулевой указатель
* узнать внутреннее представление ссылки и соответствующим образом зачистить область памяти, где она размещена

То, что ссылка не есть ещё одно символическое имя — видно на примерах, где ссылка получает вполне конкретное хранилище. Например, член-данное ссылочного типа.
Перекуём баги на фичи!
Re[11]: Указатель
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 11:50
Оценка: :)))
Здравствуйте, 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>


Вот, решил задачу:
MODULE Vlad2;
IMPORT L := StdLog, D := MyDateTime;
BEGIN
  L.String("1) "); L.Int(1);
  L.String("2) "); L.Real(1.2);
  L.String("3) "); L.String("Wow!");
  L.String("4) "); L.String("Class A");
  L.String("5) "); L.String(D.NowDateTimeAsString)
END Vlad2.

А хочешь я еще цифирки от 0 до 9 через запятую распечатаю? Вот, пожалуйста:
MODULE Vlad2;
IMPORT StdLog;
BEGIN
  StdLog.String("0, 1, 2, 3, 4, 5, 6, 7, 8, 9");
END Vlad2.
Re[12]: Указатель
От: Kluev  
Дата: 28.10.04 12:37
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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>>


СГ>Вот, решил задачу:

СГ>
СГ>MODULE Vlad2;
СГ>IMPORT L := StdLog, D := MyDateTime;
СГ>BEGIN
СГ>  L.String("1) "); L.Int(1);
СГ>  L.String("2) "); L.Real(1.2);
СГ>  L.String("3) "); L.String("Wow!");
СГ>  L.String("4) "); L.String("Class A");
СГ>  L.String("5) "); L.String(D.NowDateTimeAsString)
СГ>END Vlad2.
СГ>

СГ>А хочешь я еще цифирки от 0 до 9 через запятую распечатаю? Вот, пожалуйста:
СГ>
СГ>MODULE Vlad2;
СГ>IMPORT StdLog;
СГ>BEGIN
СГ>  StdLog.String("0, 1, 2, 3, 4, 5, 6, 7, 8, 9");
СГ>END Vlad2.
СГ>


Гы-Гы-Гы. А если вот так:

static void test( object[] values )
{
    foreach( object v in values )
        Console.Write( "{0}", v );
}
Re[15]: Ссылка vs Указатель
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 12:37
Оценка:
Здравствуйте, Кодт, Вы писали:

К> Проверить ссылку на нулёвость можно: &ref == NULL


Нет, нельзя.

Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной.
Re[13]: Указатель
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 12:45
Оценка: :)
Здравствуйте, 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;
Re[16]: Ссылка vs Указатель
От: Кодт Россия  
Дата: 28.10.04 12:58
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

К>> Проверить ссылку на нулёвость можно: &ref == NULL


СГ>Нет, нельзя.


СГ>Проверьте, &ref — не даст Вам адреса ссылки, а даст Вам адрес переменной, на которую эта ссылка ссылается потому, что ЛЮБОЕ обращение к ссылке ЭКВИВАЛЕНТНО обращению к самой переменной.


Вот именно. Это и будет проверкой "значения" ссылки на нулёвость.

А чтобы получить адрес, где ссылка размещена в памяти — для этого есть разнообразные хаки. Поскольку они связаны с неопределённым поведением, я не буду их разворачивать.
Например, ссылка как член объединения.

Наконец, в С++ есть такая штука, как типы с семантикой ссылки. Конечно, синтаксически они не полностью совместимы (например, не получится обращаться к членам объекта по такой ссылке), но выступать в роли lvalue-аргумента, выдавать адрес объекта можно. Наряду с этим, можно получить и собственный адрес.
Далеко за примером ходить не надо. CComPtr<T> имеет семантику ссылки на T*. (Чтоб ему пусто было! Потому что это сильно отравляет жизнь в ряде других мест).
Перекуём баги на фичи!
Re[14]: Ссылка vs Указатель
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 13:18
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Как же общепринятой??????


http://en.wikipedia.org/wiki/Reference

СГ>Заметь, что не только в оберонах, а еще и в Си/Си++ ссылкой называется совсем другое:

СГ>
СГ>int  a = 2;
СГ>int& ref = a;
СГ>

СГ>ref — нельзя проверить на NIL, так как любое обращение к ref ЭКВИВАЛЕНТНО обращению к "a".
СГ>Ссылка — это еще одно символическое имя одной и той же переменной.

В Обероне ссылкой ничего не называют, так как нет их там. А в С++ ссылкой называют то что нужно. То что в С++ нельзя присвоить ей null_ptr — это просто особенности дизайна.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Указатель
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 13:18
Оценка: :)
Здравствуйте, Сергей Губанов, Вы писали:

СГ>

СГ>- Будете у нас на Колыме...
СГ>- Спасибо, лучше Вы к нам!


В дев-нал такие ссылки.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Указатель
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 13:18
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, 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>>


СГ>Вот, решил задачу:

СГ>
СГ>MODULE Vlad2;
СГ>IMPORT L := StdLog, D := MyDateTime;
СГ>BEGIN
СГ>  L.String("1) "); L.Int(1);
СГ>  L.String("2) "); L.Real(1.2);
СГ>  L.String("3) "); L.String("Wow!");
СГ>  L.String("4) "); L.String("Class A");
СГ>  L.String("5) "); L.String(D.NowDateTimeAsString)
СГ>END Vlad2.
СГ>


Решил, блин.

Ты массивчик полиморфный создай. И выведи его значение в цикле. Хотя даже эта породия имеет объем кода больший чем оригинал. Причем чистый ручник. Да и с образовательной точки зрения полный ноль!
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Указатель
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 13:18
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>тогда так:


СГ>
СГ>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;
СГ>


Бред смвой кобылы. Уж извини за грубось. "{0}" — в дотнете это формат выводящий аргумент с индексом 0 из списка аргументов. Ну, и не показано как в этот загадочный ARRAY OF Writeable запихать объекты разных типов (от строенных до классов).

Хотя уже невооруженным взглядом видно, что примитивизм на лицо. Кода больше, толку меньше. И этому уродству учить детей?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Ссылка vs Указатель
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 13:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В Обероне ссылкой ничего не называют, так как нет их там.


А давайте поспорим что есть?
Re[13]: *
От: Schade Россия  
Дата: 28.10.04 13:33
Оценка: 25 (3)
Здравствуйте, Alex Reyst, Вы писали:

AR>И то, что сейчас его действительно "зашкаливает", — это отнюдь не повод относиться неуважительно к человеку, прервавшего в свое время весьма порочную ассоциацию "программирование = Фортран".


В том то и дело, что его действительно "заносит" (вообще весь этот обсуждаемый доклад — сплошной позор и вопль отчаяния, мелкие придирки вместо аргументов по существу), но память о былых заслугах действительно сильна — и стал профессор этаким знаменем, под которым продвигается нежизнеспособная муть типа Оберонов.

З.Ы. Написано под впечатлением от первого взгляда на среду BlackBox — убожество, застрявшее где-то в 1993 году.
... << RSDN@Home 1.1.4 @@subversion >>
Re[15]: Указатель
От: WolfHound  
Дата: 28.10.04 14:15
Оценка: :))) :)
Здравствуйте, VladD2, Вы писали:

VD>Хотя уже невооруженным взглядом видно, что примитивизм на лицо. Кода больше, толку меньше. И этому уродству учить детей?

Влад! Да как же ты не понимаешь?!? Ведь оберон это же идеальный язык программирования всех времен и народов, а Вирт величайший гуру принесший свет во тьму невежества промышленных программистов. А такие великие опостолы как Сергей Губанов помогают Вирту нести свет оберона в массы.
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Указатель
От: Кодт Россия  
Дата: 28.10.04 14:24
Оценка: :))
Здравствуйте, WolfHound, Вы писали:

WH>А такие великие опостолы...


Прости, ты имел в виду "апостолы" или "осто..."
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.