Re[11]: Хорошо ли, что свойство нельзя передать по ссылке
От: stalcer Россия  
Дата: 27.12.05 13:23
Оценка:
Здравствуйте, GlebZ, Вы писали:

S>>Во-первых, где ты увидел "ref на reference type".

S>>Во-вторых, мы обсуждаем как сделать чтобы работало. А ты говоришь "не будет". Дык, значит твой алгоритм не правильный. Так? Тогда чего его обсуждать...
GZ>Вобщем штука примерно получится такая. У нас есть некоторый тип делегат который может ссылаться на несколько методов. Хороший или он плохой — вопрос второй. Делегат сущность типизированная. Вместо типизированного метода, типизируем проперть.(ну информация о типе будет типа есть setter/getter, какой тип). Желательно чтобы компилятор C# делал это сам, как и статическую проверку при использовании. На входе в JIT у нас будет переменная и ее тип(а может так-же как и в делегате объект). Его задача — просто подставить вызов сеттера или геттера. Вот и все.

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

Метод с параметром-ссылкой, например:

void P(ref int i)
{
    i = 7; // ???
}

должен ведь уметь работать с обоими случаями. Т.е. в этот метод я могу передать как ссылку на свойство, так и ссылку на переменную. В случае со свойством, хорошо пусть будет твой делегат. А в случае с переменной?
Re[12]: Хорошо ли, что свойство нельзя передать по ссылке
От: GlebZ Россия  
Дата: 27.12.05 13:51
Оценка:
Здравствуйте, stalcer, Вы писали:

S>должен ведь уметь работать с обоими случаями.

А теперь понял что ты имел ввиду. Извини плохо прочитал предыдущий текст. Нет функциональный тип и тип данных не могут и не должны быть одинаковыми. Может использование и может быть похожим, но не одинаковый тип — это точно. Компилятором такая вещь просто нереализуемая(как ты уже описал). Тут нужна другая конструкция(или объект) для описания таких типов.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Хорошо ли, что свойство нельзя передать по ссылке
От: stalcer Россия  
Дата: 27.12.05 14:04
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, stalcer, Вы писали:


S>>должен ведь уметь работать с обоими случаями.

GZ>А теперь понял что ты имел ввиду. Извини плохо прочитал предыдущий текст. Нет функциональный тип и тип данных не могут и не должны быть одинаковыми. Может использование и может быть похожим, но не одинаковый тип — это точно. Компилятором такая вещь просто нереализуемая(как ты уже описал). Тут нужна другая конструкция(или объект) для описания таких типов.

То есть вместо существующего сейчас ключевого слова ref, сделать два слова, например, vref и pref (для переменных и свойств, соответственно). Это да, реализуемо. Только мне не нравится. Плохо это.

Хотя vref нам нужен только для оптимизации производительности, поскольку pref будет работать медленнее. Но, в принципе, реализуемо, чтобы переменные можно было передавать и через pref (посредством фиктивного делегата). Таким образом получим vref только для переменных, зато быстро, а pref — для обоих случаев, пусть не так быстро, зато универсально. Вот .
Re[14]: Хорошо ли, что свойство нельзя передать по ссылке
От: GlebZ Россия  
Дата: 27.12.05 14:31
Оценка:
Здравствуйте, stalcer, Вы писали:

S>То есть вместо существующего сейчас ключевого слова ref, сделать два слова, например, vref и pref (для переменных и свойств, соответственно). Это да, реализуемо. Только мне не нравится. Плохо это.

Нельзя.
int и ссылка на проперть это два разных типа. Такое даже языки типа JavaScript не пропустят.
Примерно так
PropertyRef myProperty=new PropertyRef<int>(a.Prop);
int func(PropertyRef<int> myProp)
{
Prop=10;
}


S>Хотя vref нам нужен только для оптимизации производительности, поскольку pref будет работать медленнее. Но, в принципе, реализуемо, чтобы переменные можно было передавать и через pref (посредством фиктивного делегата). Таким образом получим vref только для переменных, зато быстро, а pref — для обоих случаев, пусть не так быстро, зато универсально. Вот .

не пройдет
void v(pref int a)
{
  v1(a);//и что здесь компилировать? Вызов проперти или передачу значения?
}
void v1(int a){};


С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Хорошо ли, что свойство нельзя передать по ссылке
От: stalcer Россия  
Дата: 27.12.05 15:20
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>не пройдет

GZ>
GZ>void v(pref int a)
GZ>{
GZ>  v1(a);//и что здесь компилировать? Вызов проперти или передачу значения?
GZ>}
GZ>void v1(int a){};
GZ>


Компилировать вируальный вызов getter'а. В случае свойства вызовется getter свойства, а в случае переменной — специальный фиктивный getter, который возвратит значение переменной.

А передавать в метод в любом случае нужно делегат, только это будут два разных делегата, но совместимых по интерфейсу.
Re[4]: Хорошо ли, что свойство нельзя передать по ссылке
От: vdimas Россия  
Дата: 27.12.05 19:06
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Да, хотелось бы услышать. Что же такое ссылка?

V>Неужели только последовательность байт шириной в адрессную шину?

В общем, Влад не отвечает, отвечу сам. ИМХО ссылка — это proxy по терминологии GoF.

-----------
Как там в классике, переменная — это именованная ячейка памяти (или группа ячеек).
Переменные ссылочного типа (в .Net, например) хранят не сам объект, а ссылку на оный. Как именно представлена эта ссылка — не суть важно. Для некоторых реализаций GC ссылочные переменные хранят ссылку не на объект, а на дескриптор, который фиксирован в памяти в отличие от блуждающего целевого объекта.

Так что, если отнести ссылку к прокси (заместителю), то, на мой взгляд, у нас нет никаких ограничений на физическую реализацию механизма этого прокси.
Re[12]: Чего не хватает в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.12.05 11:29
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Ну да. Правда почему абсурд? Если ссылку реализовать как обращение к переменной, то что тут абсурдного.


Какой переменной? Ты не забыл что речь шла о свойстве?

VD>>Ссылка это фактически типизированный указатель на память повзоялющий менять эту память.

GZ>Ссылка или типизированный указатель неважно. Насчет менять память, верно только частично. В терминах процессора, нет понятия ссылки и типа. В менеджед MSIL, нет понятия памяти.

Куда же оно делось?

GZ> Ссылка — это понятие компиляторов.


Ссылка — это общечеловеческое поняите. И в МСИЛ оно тоже есть.

GZ>Мне интересно иметь возможность сохранять ссылку на любую облать программы. Независимо от того что это, метод, type, field, property или ссылка на экземпляр.


Ссылка может быть только на ячейку памяти. Ты же придумал себе некую локальную абстракцию и пыташся обсуждать ее с теми кто не так хорошо владеет телепатией.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Хорошо ли, что свойство нельзя передать по ссылке
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.12.05 11:29
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Не обязательно. Вводим в JIT новый тип — propertyType. При компиляции в asm — переменная этого типа переводится в реальный адрес.


Адрес чего? Ты не забыл, что свойство — это набор методов?
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Хорошо ли, что свойство нельзя передать по ссылке
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.12.05 11:29
Оценка:
Здравствуйте, vdimas, Вы писали:

V>>Да, хотелось бы услышать. Что же такое ссылка?

V>>Неужели только последовательность байт шириной в адрессную шину?

V>В общем, Влад не отвечает, отвечу сам. ИМХО ссылка — это proxy по терминологии GoF.


Прокси и есть прокси, т.е. посредник/агент. А ссылка в C#, да и в 99% других языков означает указатель на память. В Шарпе есть ссылка на объект и ссылка на поле объекта.

Ну, а прокси — это скорее делегат.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Хорошо ли, что свойство нельзя передать по ссылке
От: VladD2 Российская Империя www.nemerle.org
Дата: 31.12.05 11:29
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Мне нравится идея что я могу адресовать все и вся в рамках инкапсуляции. Нужно меньше думать о подпорках.


Не можишь ты ничего адресовать кроме памяти.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Чего не хватает в C#?
От: GlebZ Россия  
Дата: 01.01.06 17:13
Оценка:
Здравствуйте, VladD2, Вы писали:

GZ>>Ну да. Правда почему абсурд? Если ссылку реализовать как обращение к переменной, то что тут абсурдного.

VD>Какой переменной? Ты не забыл что речь шла о свойстве?
А что, у переменной не может быть тип свойство? Пока действительно нет. Но почему бы такой и не быть.

GZ>> Ссылка — это понятие компиляторов.

VD>Ссылка — это общечеловеческое поняите. И в МСИЛ оно тоже есть.
А что MSIL больше не компилируется?

GZ>>Мне интересно иметь возможность сохранять ссылку на любую облать программы. Независимо от того что это, метод, type, field, property или ссылка на экземпляр.

VD>Ссылка может быть только на ячейку памяти. Ты же придумал себе некую локальную абстракцию и пыташся обсуждать ее с теми кто не так хорошо владеет телепатией.
Не путай с указателем. Он действительно только на ячейку памяти. А ссылка — это типизированная абстракция. И типизация(поведение для типа) может подразумевать разное. Например указатель на метод с инициализацией this, или что-то еще.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Хорошо ли, что свойство нельзя передать по ссылке
От: GlebZ Россия  
Дата: 01.01.06 17:13
Оценка:
Здравствуйте, VladD2, Вы писали:

GZ>>Не обязательно. Вводим в JIT новый тип — propertyType. При компиляции в asm — переменная этого типа переводится в реальный адрес.

VD>Адрес чего? Ты не забыл, что свойство — это набор методов?
Реальный адрес метода в зависимости от операции и this. Такое не так уж сложно.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Хорошо ли, что свойство нельзя передать по ссылке
От: GlebZ Россия  
Дата: 01.01.06 17:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, GlebZ, Вы писали:


GZ>>Мне нравится идея что я могу адресовать все и вся в рамках инкапсуляции. Нужно меньше думать о подпорках.


VD>Не можишь ты ничего адресовать кроме памяти.

Функции тоже имеют адрес.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Хорошо ли, что свойство нельзя передать по ссылке
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.01.06 12:55
Оценка:
Здравствуйте, GlebZ, Вы писали:

VD>>Не можишь ты ничего адресовать кроме памяти.

GZ>Функции тоже имеют адрес.

Для функций уже есть делегаты. Только вот сской они не явлются. Ссылка — это вполне определенное понятие в раках C#.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Хорошо ли, что свойство нельзя передать по ссылке
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.01.06 12:55
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Реальный адрес метода в зависимости от операции и this. Такое не так уж сложно.


Делегат? Ну, и причем тут ссылки?
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Чего не хватает в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.01.06 12:55
Оценка:
Здравствуйте, GlebZ, Вы писали:

VD>>Какой переменной? Ты не забыл что речь шла о свойстве?

GZ>А что, у переменной не может быть тип свойство?

Для меня это звучит как бред.

GZ> Пока действительно нет. Но почему бы такой и не быть.


Потому-что не ясно, что ты хочешь и зачем.

GZ>>> Ссылка — это понятие компиляторов.

VD>>Ссылка — это общечеловеческое поняите. И в МСИЛ оно тоже есть.
GZ>А что MSIL больше не компилируется?

Ты утверждал что в MSIL-е нет понятия "ссылка".

VD>>Ссылка может быть только на ячейку памяти. Ты же придумал себе некую локальную абстракцию и пыташся обсуждать ее с теми кто не так хорошо владеет телепатией.

GZ>Не путай с указателем.

Я ничего не путаю. Если мы ведем речь о C#, то в нем понятие "ссылка" четко специфицирована. То что ты пыташся назвать ссылкой называется делегатом.

Если бы ты сразу сказал, что хочешь иметь возможность создавать делегаты на свойства во время компиляции, то и вопросов бы не возникло.
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Чего не хватает в C#?
От: GlebZ Россия  
Дата: 03.01.06 23:51
Оценка:
Здравствуйте, VladD2, Вы писали:

GZ>>>> Ссылка — это понятие компиляторов.

VD>>>Ссылка — это общечеловеческое поняите. И в МСИЛ оно тоже есть.
GZ>>А что MSIL больше не компилируется?

VD>Ты утверждал что в MSIL-е нет понятия "ссылка".

Нет. Я говорил что у процессора нет понятия ссылка.

VD>>>Ссылка может быть только на ячейку памяти. Ты же придумал себе некую локальную абстракцию и пыташся обсуждать ее с теми кто не так хорошо владеет телепатией.

GZ>>Не путай с указателем.
VD>Я ничего не путаю. Если мы ведем речь о C#, то в нем понятие "ссылка" четко специфицирована. То что ты пыташся назвать ссылкой называется делегатом.
VD>Если бы ты сразу сказал, что хочешь иметь возможность создавать делегаты на свойства во время компиляции, то и вопросов бы не возникло.
Я хотел оставить детали реализации на потом. Говоря о делегатах, мы подразумеваем уже строгии детали реализации. Но в общем-то верно.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Чего не хватает в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.01.06 10:57
Оценка:
Здравствуйте, GlebZ, Вы писали:

VD>>Ты утверждал что в MSIL-е нет понятия "ссылка".

GZ>Нет. Я говорил что у процессора нет понятия ссылка.

менеджед MSIL, нет понятия памяти. Ссылка — это понятие компиляторов.

... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Чего не хватает в C#?
От: GlebZ Россия  
Дата: 04.01.06 21:37
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>

менеджед MSIL, нет понятия памяти. Ссылка — это понятие компиляторов.

Не так прочел.

В терминах процессора, нет понятия ссылки и типа. В менеджед MSIL, нет понятия памяти.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Чего не хватает в C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.01.06 13:47
Оценка:
Здравствуйте, GlebZ, Вы писали:

VD>>

менеджед MSIL, нет понятия памяти. Ссылка — это понятие компиляторов.

GZ>Не так прочел.
GZ>

GZ>В терминах процессора, нет понятия ссылки и типа. В менеджед MSIL, нет понятия памяти.


Нет понятия памяти? А каже ldfld, newobj и т.п.? С чем они по-твоему оперируют?
... << RSDN@Home 1.2.0 alpha rev. 620>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.