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 Россия https://github.com/evilguest/
Дата: 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)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
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)


Тюплы уже оптимизировали? Или тут будет создание пары ненужных переменных?
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: List & ref
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.06.22 06:13
Оценка: 107 (3)
Здравствуйте, IT, Вы писали:
IT>Тюплы уже оптимизировали? Или тут будет создание пары ненужных переменных?
Оптимизировали.
https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBLANgHwAEAmARgFgAoQgBgAJDSUBuKwgZgeLoGE6BvKnWENOhFHQCyACgCUAoSKUA3AIZQ6ubAGcMdALx0AdjADudADI6MAHmxGMAPjn90dAKxo6SLwHYAvswiikrCahrSql7AXmDyhtJaugDaNAC6XkkYyaQZmtbJ7GmyrJShIgDKAK7AAA5QEADmUKoAttKwAGZ0UXRddDF9MN1xpeXCiQXpmQW5MylF8XSR0bElIaGMAJzSjDQAdABSEPbSAEReF/m6sutlIv4bHAwS1XUNzW0dw3T2eghefp/OgAT0BP2BAC9ZBtBPdypCDHQEABqEFjcaolEY8oguBwHF0R6UfxAA=
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
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 Россия https://github.com/evilguest/
Дата: 15.06.22 10:10
Оценка:
Здравствуйте, _NN_, Вы писали:

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

IL там так себе, но его устраняет JIT.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
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#. Там ничего оптимизировано не было. Но так тоже сойдёт.
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: List & ref
От: IT Россия linq2db.com
Дата: 15.06.22 13:46
Оценка: 40 (1)
Здравствуйте, IT, Вы писали:

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


Странно. Вот тут и на уровне C# туплы убрали. Может надо что-то посложнее или ILSpy чудит?
Если нам не помогут, то мы тоже никого не пощадим.
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 Россия https://github.com/evilguest/
Дата: 16.06.22 03:39
Оценка:
Здравствуйте, IT, Вы писали:
IT>Странно. Вот тут и на уровне C# туплы убрали. Может надо что-то посложнее или ILSpy чудит?
Нет, там прямо такой IL и генерится. Во что там компилируется ПМ — я вообще не в курсе. На первый взгляд, там адъ и израиль.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
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 и генерится. Во что там компилируется ПМ — я вообще не в курсе. На первый взгляд, там адъ и израиль.


ПМ нормально генерируется. Мне даже показалось, что получше, чем в Немерле было. Повторяющиеся куски паттернов вполне себе объединяются, поэтому можно смело писать не думая о производительности.
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: List & ref
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.06.22 02:27
Оценка:
Здравствуйте, IT, Вы писали:
IT>ПМ нормально генерируется. Мне даже показалось, что получше, чем в Немерле было. Повторяющиеся куски паттернов вполне себе объединяются, поэтому можно смело писать не думая о производительности.
Я имею в виду исходники Roslyn в той части, где они обрабатывают ПМ. Результат-то у них получается норм.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: List & ref
От: IT Россия linq2db.com
Дата: 17.06.22 13:33
Оценка: 80 (1)
Здравствуйте, Sinclair, Вы писали:

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


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