Re[36]: Что дают шаблоны?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 27.10.04 13:18
Оценка:
Здравствуйте, Дарней, Вы писали:

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


СГ>>Теперь Вы можете вызывать любую процедуру из загруженной DLL. Но сама DLL не может вызывать Ваши процедуры. Вы ее можете, а она Ваши не может. Так вот с помощью процедурных переменных можно сделать так, чтобы и загруженная Вами DLL тоже могла вызывать Ваши процедуры. Чтоб симметрично было.


Д>Если она тоже будет следовать принятым соглашениям, то сможет — никаких принципиальных проблем я здесь не вижу.


Каким соглашениям? Ваша программа загрузила DLL-ку, а не DLL-ка загрузила Вашу программу.

Д>С# тоже прекрасно обходится делегатами Только не надо говорить, что это те же самые указатели на функции — на самом деле это совсем другая вещь. Хотя где-то внутри указатели вероятно используются.


Почему только не надо говорить? Вы прям процедурных переменных, как буд-то бы боитесь.
type
  MyProcedure = procedure(s: string) of object;

  MyObject = class
    procedure DoSmth(s: string);
  end;

var
  A       : MyObject;
  A_DoSmth: MyProcedure;

...

  A_DoSmth := A.DoSmth;
  A_DoSmth('привет!'); // эквивалентно A.DoSmth('привет!');
Re[9]: Мощность...
От: Павел Кузнецов  
Дата: 27.10.04 14:47
Оценка:
Кодт:

> ПК> Скажем, в том же Паскале указатели были ближе к ссылкам в Шарпе, чем к указателям в C++. Если я, конечно, еще не окончательно Паскаль забыл


> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[9]: Указатель
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.10.04 14:53
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Еще раз повторю свою мысль, так как она до сих пор так и не была понята:

VD>В современных языках программирования не используется парадигма указателя. Вместо нее используется парадигма ссылочных- и влэлью-типов. Причем в том же Шарпе указатели оставлены в небезопасном режиме, вот только для повседневной работы они ненужны. И прежде чем учить чему-то других, нужно самому понять принципиальную разницу этих взглядов.
Это смотря у кого какая повседневная жизнь. Глядя на исходники классов Net там указатели кишат в огромных количествах.
Правда для них и унсейв не указ.
и солнце б утром не вставало, когда бы не было меня
Re[21]: Что дают шаблоны?
От: LaptevVV Россия  
Дата: 27.10.04 15:07
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

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


К>>Объясни — чем ты меряешь мощность языка? Ваттметром?


СГ>Формального определения не дам. Дам интуитивное. Мощностью ЯВУ я называю количество вариантов разных программ, которые на нем можно написать. Например, интуитивно понятно, что если убрать из ЯВУ указатели, ссылки и оператор NEW, то на таком ЯВУ нельзя будет написать ни одной программы работающей с динамическими структурами данных, то есть размерность пространства всевозможных программ, которые можно написать на таком ЯВУ уменьшиться. Я употребляю слово "мощность", чтобы обозвать, хм, эту штуковину.

Не, две ошибки
1. И без указателей прекрасно можно писать динамические структуры данных — есть даже книжка про такие на Яве.
2. Количество программ от изымания — не уменьшится. Один хрен — бесконечное количество, как правильных, так и неправильных. В этом смысле все языки эквивалентны — равномощны.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[10]: Мощность...
От: Кодт Россия  
Дата: 27.10.04 15:18
Оценка: +1
Здравствуйте, Павел Кузнецов, Вы писали:

>> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


ПК>А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?


Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"
Перекуём баги на фичи!
Re[37]: Что дают шаблоны?
От: WolfHound  
Дата: 27.10.04 16:28
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

WH>>Вот скажи мне ты с СОМ дело имел или только название слышал?

СГ>Это имеет значение?
А я бы спрашивал?
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: А Вы хоть знаете что такое WITH?
От: Astaroth Россия  
Дата: 27.10.04 17:48
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

A>>Примерно это мне всегда хотелось сказать тому, кто придумывал Perl...

ЗХ>Не флейма ради, а самообразования для: например?
ЗХ>(Еще раз: я не собираюсь спорить. Мне действительно интересно Ваше мнение.)

Постфиксный if и unless.
Эт как минимум
WinAmp играет: 1979 — Наш дом
http://livejournal.com/users/breqwas
Re[11]: Мощность...
От: Павел Кузнецов  
Дата: 27.10.04 18:45
Оценка:
Кодт:

>>> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


> ПК> А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?


> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[12]: Мощность...
От: rockandroll Казахстан  
Дата: 28.10.04 03:11
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Кодт:


>>>> Указатели С/С++ точно такие же, как в Паскале, а адресная арифметика — приятный бонус


>> ПК> А можно, в таком случае, сформулировать отличия между указателями в Паскале и ссылками в C#/Java, естественно, игнорируя сборку мусора, каковой в Паскале не было?


>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


ПК>И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer
... << RSDN@Home 1.1.4 >>
Re[10]: Указатель
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.10.04 03:28
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:
СГ>В С# или в Java основным является ReferenceType = POINTER TO RECORD. А, видимо, из аналогий с Си++, Вы посчитали, что PointerType = POINTER TO ValueType; есть что-то опасное, хотя это не имеет отношения к адресам и управляется сборщиком мусора и абсолютно безопасно. В C# и Java есть value-type и есть refernce-type, а в Обероне в добавок к этому еще есть совершенно безопасный управляемый сборщиком мусора pointer-type. Кстати, из-за того что pointer-type нет в C#, там ввели такой изврат как Boxing/Unboxing.
1. В C# есть pointer-type. Как тебе уже неоднократно сказали.
2. Boxing/Unboxing никак не связан с отсутствием или наличием поинтеров (что особенно очевидно в свете 1).
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Мощность...
От: Павел Кузнецов  
Дата: 28.10.04 04:01
Оценка:
rockandroll:

>>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


> ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


> В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer


Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых В любом случае, мне было интересно услышать именно о тех радикальных семантических отличиях ссылок от указателей, на существовании которых так настаивали большевики Без привязки к определению какого-либо конкретного языка, а именно каких-то существенных "обще-программистских" отличиях, позволяющих говорить о "разнице во взгляде на жизнь".
Posted via RSDN NNTP Server 1.9 gamma
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[37]: Что дают шаблоны?
От: Дарней Россия  
Дата: 28.10.04 04:36
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Каким соглашениям? Ваша программа загрузила DLL-ку, а не DLL-ка загрузила Вашу программу.


А какая разница, кто кого загрузил? Загрузчик может вызвать любой необходимый код инициализации у каждой загруженной DLL.
Я так понял — с COM ты никогда не работал.

СГ>Почему только не надо говорить? Вы прям процедурных переменных, как буд-то бы боитесь.


Они плохи, как и любой указатель. Хотя начиналось все с того, что я сказал — указатель на функцию тоже не является необходимым для ЯВУ типом и при некотором желании без него можно обойтись. Прекрасным примером могут служить COM и .NET
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[14]: Мощность...
От: Дарней Россия  
Дата: 28.10.04 04:43
Оценка: 17 (1)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В любом случае, мне было интересно услышать именно о тех радикальных семантических отличиях ссылок от указателей, на существовании которых так настаивали большевики Без привязки к определению какого-либо конкретного языка, а именно каких-то существенных "обще-программистских" отличиях, позволяющих говорить о "разнице во взгляде на жизнь".


Указатель — это адрес некоторой области в памяти. Он может быть и чем-то более сложным, чем просто адрес, как например __closure в BCB. Но задача его от этого не меняется — указывать на какой-то участок памяти. Иными словами, это — понятие уровня реализации.
Ссылка указывает не на участок памяти, а на объект. Такое понятие как "память" здесь вообще не фигурирует. Именно поэтому не имеет смысла такая вещь как "арифметика ссылок" Понятие ссылки просто находится на более высоком уровне абстракции.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[14]: Мощность...
От: rockandroll Казахстан  
Дата: 28.10.04 04:44
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>rockandroll:


>>>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


>> ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


>> В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer


ПК>Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых В любом случае, мне было интересно услышать именно о тех радикальных семантических отличиях ссылок от указателей, на существовании которых так настаивали большевики Без привязки к определению какого-либо конкретного языка, а именно каких-то существенных "обще-программистских" отличиях, позволяющих говорить о "разнице во взгляде на жизнь".


Согласен. Принципиальных различий между ссылками и указателями (если не брать во внимание GC) я тоже не вижу. Может кто-нибудь видит?
... << RSDN@Home 1.1.4 >>
Re[38]: Что дают шаблоны?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 08:23
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Я так понял — с COM ты никогда не работал.


Да это как посмотреть. В Delphi, например, COM-интерфейсы интегрированы в сам язык, и так как я их постоянно использую (смотри, например, это: http://www.rsdn.ru/Forum/Message.aspx?mid=822951&amp;only=1
Автор: S.Yu.Gubanov
Дата: 24.09.04
), то вроде как с COM-ом я знаком. Но с другой стороны, я их использовал только в рамках одного приложения....

СГ>>Почему только не надо говорить? Вы прям процедурных переменных, как буд-то бы боитесь.


Д>Они плохи, как и любой указатель. Хотя начиналось все с того, что я сказал — указатель на функцию тоже не является необходимым для ЯВУ типом и при некотором желании без него можно обойтись. Прекрасным примером могут служить COM и .NET


А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной. COM-интерфейс — это другая из возможных реализаций. Делегаты — еще одна из возможных реализаций процедурной переменной.

Теперь внимательно перечитаем сообщение http://www.rsdn.ru/Forum/Message.aspx?mid=863958&amp;only=1
Автор: Дарней
Дата: 22.10.04
с которого началась наша дисскусия о процедурных переменных:

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

СГ>А что есть ООП? В узком смысле, ООП-ом можно обозвать процедурные переменные. Процедурные переменные (или в терминологии Си/Си++ — указатели на функцию) добавляют мощности языку (динамический полиморфизм). Кстати в самом первом обероне виртуальных функций не было, полиморфизм достигался благодаря процедурным переменным, тем не менее язык являлся ОО языком. Что касается расширения типов (наследования), наверное, напрямую мощность языка от этого не увеличивается (хотя утверждать этого не буду), но зато это позволяет сохранить в языке строгую статическую типизацию одновременно как бы и нарушая ее в каком-то более высоком смысле...

Указатели на функции тоже не являются абсолютно необходимыми. Их при желании можно заменить на большой такой switch, который в зависимости от полученного числа будет вызывать разные функции. Значит, они тоже не добавляют языку "мощности"?
То же самое касается и наследования. С помощью copy-paste и такой-то матери без него тоже можно прекрасно обойтись


Ну и в чем, собственно, смысл дискуссии? switch-ем не заменишь, а COM интерфейс — это и есть (много)процедурная переменная.
Re[14]: Мощность...
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 08:39
Оценка: -2
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>rockandroll:


>>>> Э... "отличия те же, что и между указателями в Си и ссылками в C#|Java"


>> ПК> И в чем они, если отбросить сборку мусора и адресную арифметику, которой в Паскале, если я правильно помню, не было?


>> В паскале была адресная арифметика, но не в явном виде, а через приведения типа pointer к integer


ПК>Если я не ошибаюсь, это не Паскаль, а его расширения от фирмы Борланд aka Turbo-Pascal. Впрочем, настаивать не буду: точно уже не помню. Да и не важно это, т.к. не адресная это арифметика, а арифметика целых В любом случае, мне было интересно услышать именно о тех радикальных семантических отличиях ссылок от указателей, на существовании которых так настаивали большевики Без привязки к определению какого-либо конкретного языка, а именно каких-то существенных "обще-программистских" отличиях, позволяющих говорить о "разнице во взгляде на жизнь".



Если разложить по полочкам отдельно
1) адрес
2) указатель (указатель это не адрес!)
3) ссылка

то указатель отличается от ссылки тем, что указатель может быть связан с объектом, а может быть не связан с объектом, то есть быть равным NIL. В то время как ссылка всегда связана с объектом, не бывает ссылок не связанных с объектом. Именно поэтому операция проверки ссылки на NIL не имеет смысла — любое обращение к ссылке есть обращение к объекту. Ссылка прозрачна для программиста.

TYPE
  MyRecord = RECORD (* ... *) END;

PROCEDURE Proc(VAR t: MyRecord); (* t - передается по ссылке, обращение к t есть обращение к переменной типа MyRecord, нельзя проверить t # NIL *)


Однако, в языках С# и Java под ссылкой (refernce) и указателем (pointer) понимают совсем другое. В этих языках ссылкой называют то, что выше я назвал указателем, а указателем в них называют то, что выше я назвал адресом. Ссылок в вышеизложенном смысле в них нет.

Предлагаю обсуждения перенести в отдельную ветку:
http://www.rsdn.ru/Forum/Message.aspx?mid=870921&amp;only=1
Автор: Сергей Губанов
Дата: 27.10.04
Re[22]: Что дают шаблоны?
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 28.10.04 08:43
Оценка: -1
Здравствуйте, LaptevVV, Вы писали:

LVV>1. И без указателей прекрасно можно писать динамические структуры данных — есть даже книжка про такие на Яве.


Сколько раз повторять!!! Объектные переменные Java это не сами объекты (не value-type), а указатели на них (reference-type).

http://www.rsdn.ru/Forum/Message.aspx?mid=870921&amp;only=1
Автор: Сергей Губанов
Дата: 27.10.04



LVV>2. Количество программ от изымания — не уменьшится. Один хрен — бесконечное количество, как правильных, так и неправильных. В этом смысле все языки эквивалентны — равномощны.


Хорошо, скажем так: уменьшается размерность пространства всевозможных программ.
Re[39]: Что дают шаблоны?
От: Дарней Россия  
Дата: 28.10.04 08:46
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Да это как посмотреть. В Delphi, например, COM-интерфейсы интегрированы в сам язык, и так как я их постоянно использую (смотри, например, это: http://www.rsdn.ru/Forum/Message.aspx?mid=822951&amp;only=1
Автор: S.Yu.Gubanov
Дата: 24.09.04
), то вроде как с COM-ом я знаком. Но с другой стороны, я их использовал только в рамках одного приложения....


Вот я и вижу, что знаний о принципах его работы у тебя нет никаких.

СГ>А указатель на функцию — это всего лишь одна из возможных реализаций процедурной переменной. COM-интерфейс — это другая из возможных реализаций. Делегаты — еще одна из возможных реализаций процедурной переменной.


Чушь. Это совершенно разные вещи, хотя цель их применения действительно одна.

СГ>Ну и в чем, собственно, смысл дискуссии? switch-ем не заменишь, а COM интерфейс — это и есть (много)процедурная переменная.


Свитчем они могут заменены безо всяких проблем, ты просто не хочешь или не в состоянии это понять. Хотя, если брать исключительно абстрактное понимание, предложенный мной вариант тоже можно назвать в некотором роде процедурной переменной, хотя там и не используется указатель.
Но можно подойти к вопросу и с другой стороны. Как насчет функторов?
Как насчет декларативных языков, ФП и ЛП? Вероятно, их тоже не должно существовать, если там нет процедурных переменных?
Ну так я тебя огорчу — они существуют и прекрасно себя чувствуют.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: Ссылка vs Указатель
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 09:33
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


VD>>Моежт сам таки запонишь и не будшь потом рассказывать, что в Яве или Шарпе переменная — это указатель?


СГ>Ссылка отличается от указателя тем, что она совершенно прозрачна для программиста.


+1

СГ> Указатель можно проверить на NIL, а ссылку нельзя проверить на NIL,


Неверное утверждение. Не нужно путать ссылки в С++ и ссылки в целом. Я уже какжется давал тут ссылку на Википедию. Там было все подробно рассмотрено.

СГ> так как любое обращение к ссылке полностью равноценно обращению к самому объекту на который она ссылается. Вы просто используете термин "ссылка" обзывая им указатели в Java и в C#.


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

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


СГ>Еще раз про ссылку:

...
СГ>Переменная типа MyRecord занимает много места в памяти, для того чтобы передать ее по быстрому в процедуру можно не копировать ее, а передать по ссылке

Вот по этому я и говорю, что вам лучше не учить детей. Ну, как можно рассказывая про абстракцию спускаться до объемов занимаемой памяти? Да еще говорить об этом, как о главном аспекте?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Указатель
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.10.04 09:33
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

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


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

СГ>В С# или в Java основным является ReferenceType = POINTER TO RECORD. А, видимо, из аналогий с Си++, Вы посчитали, что PointerType = POINTER TO ValueType; есть что-то опасное, хотя это не имеет отношения к адресам и управляется сборщиком мусора и абсолютно безопасно.


Вредна сама возня с указателями. Это абстракция более никого уровня. Идиома ссылочного типа и типа-значения в купе с понятием ссылки дают намного более высокий уровень восприятия кода. Код практически не отличается при использовании ссылочных типов и вэлью-типов.

СГ> В C# и Java есть value-type и есть refernce-type, а в Обероне в добавок к этому еще есть совершенно безопасный управляемый сборщиком мусора pointer-type.


Вот это и есть вред. Язык обрублен до предела с понтом дела для урощения, и при этом он использует идиомы 70-ых говод.

СГ> Кстати, из-за того что pointer-type нет в C#, там ввели такой изврат как Boxing/Unboxing.


Нда, и этот человек рассуждает о чужой компетенции! В Шарпе таки есть указаетели! И они никак не мешают наличию или отсуствию боксинга. Например, в Яве вообще нет указателей, но так же нет боксинга и анбоксинга (вренее небыло, в Ява 1.5 они введены).

Боксинг был введен чтобы сгладить разницу между вэлью-типами и объектами. В Шарпе можно приводить встроенные типы, перечисления и структуры к object и обратно. Таким образом поддерживается полиморфизм для всех типов. Извратом, причем полнейшим, является наличие указателей в языке рассчитаном на сборку мусора.

Попробуй на досуге повторить вот этот код, и сравни его с исходным:
class A
{
    static void Test()
    {
        object[] array = new object[] { 1, 1.2, "Wow!", new A(), RateTime.Now };
        foreach (object value in array)
            Console Write("'{0]'", value);
    }
}
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.