List & ref
От: VjcheslavV  
Дата: 14.06.22 07:12
Оценка:
Очень надо от содержимого List взять ссылку
но вот проблема — ссылка не берётся да и ссылку в List не засунешь
Может можно как-то выкрутится?
заранее благодарен.
Re: List & ref
От: Muxa  
Дата: 14.06.22 07:38
Оценка: +4
VV>Очень надо от содержимого List взять ссылку
VV>но вот проблема — ссылка не берётся да и ссылку в List не засунешь
VV>Может можно как-то выкрутится?
VV>заранее благодарен.

А какую проблему ты решаешь таким способом?
Отредактировано 14.06.2022 7:38 Muxa . Предыдущая версия .
Re[2]: List & ref
От: VjcheslavV  
Дата: 14.06.22 12:46
Оценка:
M>А какую проблему ты решаешь таким способом?

хочу передавать просто переменные и значения из List в подпрограмму для изменения
но не хочу городить 2 подпрограммы одну для просто переменных другую для List...
Re[3]: List & ref
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 14.06.22 13:02
Оценка: 1 (1)
Здравствуйте, VjcheslavV, Вы писали:
VV>хочу передавать просто переменные и значения из List в подпрограмму для изменения
VV>но не хочу городить 2 подпрограммы одну для просто переменных другую для List...
Нужен пример.
Потому, что если, к примеру, вы говорите об изменяемом списке, то подпрограмма должна принимать IList<T>. И в неё можно будет отдавать и List<T>, и обычный массив T[].
Если же у вас там не список, а именованный набор переменных, которые вы передаёте по ref, то так оно и делается:
var (a, b, c) = (list[0], list[1], list[3]);
Subprogram(ref a, ref b, ref c);
(list[0], list[1], list[3]) = (a, b, c)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[4]: List & ref
От: IT Россия linq2db.com
Дата: 14.06.22 21:28
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>
var (a, b, c) = (list[0], list[1], list[3]);
Subprogram(ref a, ref b, ref c);
(list[0], list[1], list[3]) = (a, b, c)


Тюплы уже оптимизировали? Или тут будет создание пары ненужных переменных?
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: List & ref
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 15.06.22 06:13
Оценка: 107 (3)
Здравствуйте, IT, Вы писали:
IT>Тюплы уже оптимизировали? Или тут будет создание пары ненужных переменных?
Оптимизировали.
https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBLANgHwAEAmARgFgAoQgBgAJDSUBuKwgZgeLoGE6BvKnWENOhFHQCyACgCUAoSKUA3AIZQ6ubAGcMdALx0AdjADudADI6MAHmxGMAPjn90dAKxo6SLwHYAvswiikrCahrSql7AXmDyhtJaugDaNAC6XkkYyaQZmtbJ7GmyrJShIgDKAK7AAA5QEADmUKoAttKwAGZ0UXRddDF9MN1xpeXCiQXpmQW5MylF8XSR0bElIaGMAJzSjDQAdABSEPbSAEReF/m6sutlIv4bHAwS1XUNzW0dw3T2eghefp/OgAT0BP2BAC9ZBtBPdypCDHQEABqEFjcaolEY8oguBwHF0R6UfxAA=
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[6]: List & ref
От: _NN_ www.nemerleweb.com
Дата: 15.06.22 07:54
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

IT>>Тюплы уже оптимизировали? Или тут будет создание пары ненужных переменных?
S>Оптимизировали.

Может подскажете почему этот код создаёт временные переменные
(list[0], list[1], list[3]) = (a, b, c);


==>
List<int> list2 = list;
List<int> list3 = list;
num2 = num4;
num = num5;
int num7 = num6;
int num9 = (list2[0] = num2);
num9 = (list3[1] = num);
num9 = (list[3] = num7);


И в этом случае также:
var (a, b, c) = (list[0], list[1], list[3]);
                
return a+b+c;


==>

int num = list[0];
int num2 = list[1];
int num3 = list[3];
int num4 = num;
int num5 = num2;
int num6 = num3;
return num4 + num5 + num6;


А так ничего лишнего не будет сгенерировано:
list[0] = a;
list[1] = b;
list[3] = c;
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: List & ref
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 15.06.22 10:10
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Может подскажете почему этот код создаёт временные переменные

IL там так себе, но его устраняет JIT.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[6]: List & ref
От: IT Россия linq2db.com
Дата: 15.06.22 13:40
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

IT>>Тюплы уже оптимизировали? Или тут будет создание пары ненужных переменных?
S>Оптимизировали.
S>https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBLANgHwAEAmARgFgAoQgBgAJDSUBuKwgZgeLoGE6BvKnWENOhFHQCyACgCUAoSKUA3AIZQ6ubAGcMdALx0AdjADudADI6MAHmxGMAPjn90dAKxo6SLwHYAvswiikrCahrSql7AXmDyhtJaugDaNAC6XkkYyaQZmtbJ7GmyrJShIgDKAK7AAA5QEADmUKoAttKwAGZ0UXRddDF9MN1xpeXCiQXpmQW5MylF8XSR0bElIaGMAJzSjDQAdABSEPbSAEReF/m6sutlIv4bHAwS1XUNzW0dw3T2eghefp/OgAT0BP2BAC9ZBtBPdypCDHQEABqEFjcaolEY8oguBwHF0R6UfxAA=

Т.е. они на уровне джита оптимизировали? Тоже нормально. Я смотрел как-то ПМ, но в переводе на старый C#. Там ничего оптимизировано не было. Но так тоже сойдёт.
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: List & ref
От: IT Россия linq2db.com
Дата: 15.06.22 13:46
Оценка: 40 (1)
Здравствуйте, IT, Вы писали:

IT>Т.е. они на уровне джита оптимизировали? Тоже нормально. Я смотрел как-то ПМ, но в переводе на старый C#. Там ничего оптимизировано не было. Но так тоже сойдёт.


Странно. Вот тут и на уровне C# туплы убрали. Может надо что-то посложнее или ILSpy чудит?
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: List & ref
От: _NN_ www.nemerleweb.com
Дата: 15.06.22 14:54
Оценка: 190 (2)
Здравствуйте, Sinclair, Вы писали:

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


_NN>>Может подскажете почему этот код создаёт временные переменные

S>IL там так себе, но его устраняет JIT.

Увы JIT не всемогущ пока ещё, поэтому лучше сгенерировать сразу нормальный код.

int

DateTime

https://github.com/dotnet/roslyn/issues/53300
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[8]: List & ref
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 16.06.22 03:39
Оценка:
Здравствуйте, IT, Вы писали:
IT>Странно. Вот тут и на уровне C# туплы убрали. Может надо что-то посложнее или ILSpy чудит?
Нет, там прямо такой IL и генерится. Во что там компилируется ПМ — я вообще не в курсе. На первый взгляд, там адъ и израиль.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[9]: List & ref
От: romangr Россия  
Дата: 16.06.22 05:48
Оценка: 93 (2)
Здравствуйте, _NN_, Вы писали:

_NN>Увы JIT не всемогущ пока ещё, поэтому лучше сгенерировать сразу нормальный код.


_NN>DateTime


Для x64 JIT генерит нормальный код:
DateTime
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[9]: List & ref
От: IT Россия linq2db.com
Дата: 17.06.22 01:56
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Нет, там прямо такой IL и генерится. Во что там компилируется ПМ — я вообще не в курсе. На первый взгляд, там адъ и израиль.


ПМ нормально генерируется. Мне даже показалось, что получше, чем в Немерле было. Повторяющиеся куски паттернов вполне себе объединяются, поэтому можно смело писать не думая о производительности.
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: List & ref
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 17.06.22 02:27
Оценка:
Здравствуйте, IT, Вы писали:
IT>ПМ нормально генерируется. Мне даже показалось, что получше, чем в Немерле было. Повторяющиеся куски паттернов вполне себе объединяются, поэтому можно смело писать не думая о производительности.
Я имею в виду исходники Roslyn в той части, где они обрабатывают ПМ. Результат-то у них получается норм.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[11]: List & ref
От: IT Россия linq2db.com
Дата: 17.06.22 13:33
Оценка: 80 (1)
Здравствуйте, Sinclair, Вы писали:

S>Я имею в виду исходники Roslyn в той части, где они обрабатывают ПМ. Результат-то у них получается норм.


Ты про это. Там да. Не знаю как в Рослине, в Немерле изспользовались алгоритмы построения дерева решений, по которым похоже была защищена не одна серьёзная диссертация.
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.