using UsingAlias<T>=NameSpace2.MyClass<T>
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 12.02.21 09:59
Оценка: +2
Может кто знает, какие были причины не добавлять в C# штуку из %subj%?

using UsingAlias<T>=NameSpace2.MyClass<T>


В плюсах такая штука уже лет десять как есть.

Могли бы и позаимствовать

---
Или она таки есть?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: using UsingAlias<T>=NameSpace2.MyClass<T>
От: ksg71 Германия  
Дата: 12.02.21 10:46
Оценка: 10 (2)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Может кто знает, какие были причины не добавлять в C# штуку из %subj%?


КД>
КД>using UsingAlias<T>=NameSpace2.MyClass<T>
КД>


КД>В плюсах такая штука уже лет десять как есть.


КД>Могли бы и позаимствовать


КД>---

КД>Или она таки есть?


ну вот тут расписано, где Complications
https://github.com/dotnet/csharplang/issues/1239
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[2]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Kolesiki  
Дата: 14.02.21 09:14
Оценка: :)
Здравствуйте, ksg71, Вы писали:

КД>>Может кто знает, какие были причины не добавлять в C# штуку из %subj%?


K>ну вот тут расписано, где Complications


Ерунда! Там расписаны высосанные из пальца проблемы, которые компилер решает на раз.
В элиасе нет вообще НИЧЕГО проблемного, ибо это, грубо говоря, символьная подстановка в обычный, существующий тип.

Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ. Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.

Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)

// Вместо тысячи слов....
var myVeryLargeUnsqueezableVariable = new SomeClass();
// здесь идёт некоторый код, т.е. мы НЕ МОЖЕМ использовать "инициализацию-при-создании". Далее...
myVeryLargeUnsqueezableVariable.field1 = 1;
myVeryLargeUnsqueezableVariable.field2 = 2;
myVeryLargeUnsqueezableVariable.OnFart += SomebodyFarts;

// ...элементарная конструкция:
with(var myVeryLargeUnsqueezableVariable = new SomeClass()) {
    // здесь тоже может идти посторонний код, неважно
    .field1 = 1;
    .field2 = 2;
    .OnFart += SomebodyFarts;// sic!
}


Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!
Re: using UsingAlias<T>=NameSpace2.MyClass<T>
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.02.21 12:54
Оценка: 6 (1) +1
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Может кто знает, какие были причины не добавлять в C# штуку из %subj%?


Никаких. В Немерле не только это поддерживается, но и даже такие алиасы в библиотеки попадаю. Возможно это решение спорно. Но никаких осмысленных аргументов против придумать нельзя.
https://github.com/rsdn/nemerle/blob/db4bc9078f1b6238da32df1519c1957e74b6834a/lib/Nemerle.Collections.n#L47
namespace Nemerle.Collections
{
  public type Seq[T] = SCG.IEnumerable[T];
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.02.21 12:58
Оценка: +1
Здравствуйте, Kolesiki, Вы писали:

K>Ерунда! Там расписаны высосанные из пальца проблемы, которые компилер решает на раз.


+1

K>В элиасе нет вообще НИЧЕГО проблемного, ибо это, грубо говоря, символьная подстановка в обычный, существующий тип.


Это как реализовывать. Но можно и так сделать.

K>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ. Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.


Поставил бы плюс, если бы не этот бред. Прямо те кто делает Шарпа тупые макаки, а один ты тут такой крутой инженер. Тфу...

Просто есть упертость у людей. Неприемлят они многое. Зал бы ты сколько полезных фич в Майкрософт завалили или тянули с ними десятки лет! Прототип того, что сейчас называется C# 9.0 был готов в 2006 году. И имя ему Nemerle. Но даже тут нашлась масса хейтеров, которые и по сей день не могут признаться себе, что боролись с прогрессом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.02.21 13:00
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)


K>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!


Они сделали инициализаторы. Вполне себе не плохое решение.

Тебе же советую освоить http://nemerle.org/
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Ночной Смотрящий Россия  
Дата: 14.02.21 13:12
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ.


Можно узнать примеры применения твоей квалификации?

K> Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.


Вот только незадача, в language design team представителей танцоров мало, если вообще есть. Андерс датчанин, Мэдс норвежец, Гафтер, насколько я знаю, в США родился и индийских корней не имеет, Жульен француз. Из тех кто оказал на шарп сильное влияние — Дон Сайм австралиец, Эрик Мейер — датчанин. Команда там интернациональная, знаю поляков, русских, даже одного негра. А вот индусов чего то не припоминаю. Приведешь пример?

K>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)


Гугли и обрящешь. Пропозал есть, ровно как и длинное обсуждение к нему.

K>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!


Так давай, сделай свой язык. Если все так печально с дизайном шарпа — все быстро твою задумку подхватят, как это произошло с тем же Котлином.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Kolesiki  
Дата: 14.02.21 23:09
Оценка:
Здравствуйте, VladD2, Вы писали:

K>>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ. Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.


VD>Поставил бы плюс, если бы не этот бред. Прямо те кто делает Шарпа тупые макаки, а один ты тут такой крутой инженер. Тфу...


Вместо слова "бред", мог бы (как квалифицированный инженер) объяснить — я что, какую-то фигню предлагаю в качестве with? Аргументируй! И плеваться здесь не надо — тебе здесь не параша.

VD>Просто есть упертость у людей.


Упёртость — это и есть синоним тупости. И да, если я знаю решение лучше — я "крутой инженер".
Re[4]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Kolesiki  
Дата: 14.02.21 23:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Они сделали инициализаторы. Вполне себе не плохое решение.


Для студентов — да. Для команды "типа профи" — нет, ибо это "половинчатая фича", приводящая к кривому дизайну языка. Хуже того — эти бараны таки задействовали with, но для другой херни.

VD>Тебе же советую освоить http://nemerle.org/


Осваивал, Влад, осваивал! Давно, ещё лет 5 назад. Но ты сам знаешь, сколько там сейчас проблем, так что в продакшн я такое не потащу. Смешно сказать, но уже год-полтора как нет поддержки VS2019. Шёл 2021 год... Это не то, что претензия, а скорее "причина, почему НЕТ". Язык хороший, перспективный, за ним однозначно будущее, но вот не на всемогутере Нитра, а нужен тупо "компилятор одного языка". И чтоб без легаси говна типа VS2010.
Короче, Немерлю надо полировать, фич уже и так навалом.
Re[4]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Kolesiki  
Дата: 14.02.21 23:29
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

K>>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ.


НС>Можно узнать примеры применения твоей квалификации?


Что, опять надо как ребёночка, тыкать в текст выше? Я описал реализацию with, как её бы сделал настоящий инженер. А вот спускание на личности — это уже твой прокол, мальчик-айтишник!

K>> Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.


НС>Вот только незадача, в language design team представителей танцоров мало, если вообще есть.


"Индусский код" — это обобщённое понятие, мне их папы-мамы не важны. Если проектируешь дизайн с явными дырами и несуразицами, значит ты "индус по призванию"! После 40 лет такое безалаберное проектирование неприемлемо. А нытьё всхЛипперта "почему мы сидим на костылях и ничего не меняем" вообще на уровне детсада.

K>>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)


НС>Гугли и обрящешь. Пропозал есть, ровно как и длинное обсуждение к нему.


Нафиг мне пропозал? (его кстати я писал) Мне в коде нужен with, причём это не какая-то новомодная фича, а аж с Дельфи пришло! (может и ещё раньше) За 19 лет не реализовать элементарный оператор — это уже даже не "индусы", а вообще уровень тюленей, которые в офис тупо за зарплатой ходят.


K>>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!


НС>Так давай, сделай свой язык.


Сравнил — добавить в C# простую фичу или запилить новый язык! Мы точно тут инженеров собрали?
Собственно, в этом и состоит НИЗКАЯ КВАЛИФИКАЦИЯ перечисленных тобой "шарподелов" — за деревьями не видят леса. Реально нужные вещи висят годами, а галиматья типа primary constructors — пожалуйста, прям кипит процесс! А проектирование языка по количеству лайков за фичи... это уже просто "секс в большом городе"!
Re: using UsingAlias<T>=NameSpace2.MyClass<T>
От: varenikAA  
Дата: 15.02.21 01:50
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Или она таки есть?


Уже есть. Правда в F#.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Ночной Смотрящий Россия  
Дата: 15.02.21 08:22
Оценка: 1 (1) +1
Здравствуйте, Kolesiki, Вы писали:

НС>>Можно узнать примеры применения твоей квалификации?

K>Что, опять надо как ребёночка, тыкать в текст выше?

Ну что ж поделать, если ты ведешь себя как ребеночек? Приходится тыкать.

K> Я описал реализацию with, как её бы сделал настоящий инженер.


Отвратно.

K>>> Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.

НС>>Вот только незадача, в language design team представителей танцоров мало, если вообще есть.
K>"Индусский код" — это обобщённое понятие

Ты не про индусский код писал, а конкретно про индусов.

K>А нытьё всхЛипперта "почему мы сидим на костылях и ничего не меняем" вообще на уровне детсада.


Липперт уже много лет не работает в MS.

K>>>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)

НС>>Гугли и обрящешь. Пропозал есть, ровно как и длинное обсуждение к нему.
K>Нафиг мне пропозал?

Чтобы понять что с ним не так. Но тебя, похоже, это и не интересует. У тебя в мире есть ровно один гениальный инженер — это ты. Выхлоп, правда, почему то примерно никакой.

K> (его кстати я писал)




Вова Ланцов с Украины это ты? Ну так, как велыкый инжынэр, должен был заметить, что тебе ткнули на то что твой "пропозал" (на самом деле оно даже на фича реквест не тянет) уже был — https://github.com/dotnet/csharplang/discussions/1534. Оттуда есть ссылка на документ — https://docs.microsoft.com/en-us/archive/blogs/csharpfaq/why-doesnt-c-have-vb-nets-with-operator

K>Мне в коде нужен with, причём это не какая-то новомодная фича, а аж с Дельфи пришло!


Да я в курсе откуда этот маразм проистекает. Большинство, правда, тянут эту мегафичу из VB, где оно тоже есть.

K>>>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!

НС>>Так давай, сделай свой язык.
K>Сравнил — добавить в C# простую фичу или запилить новый язык!

Зачем добавлять фичу в C#, если он все равно весь сделан индусами? А так будет свой новый мегаязык, созданный мегаинженером. Повергнешь всех своих критиков в прах.

K>Собственно, в этом и состоит НИЗКАЯ КВАЛИФИКАЦИЯ перечисленных тобой "шарподелов" — за деревьями не видят леса.


Так покажи всем класс!
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: using UsingAlias<T>=NameSpace2.MyClass<T>
От: nikov США http://www.linkedin.com/in/nikov
Дата: 15.02.21 23:24
Оценка: 22 (2)
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>В плюсах такая штука уже лет десять как есть.


Она там есть, но стандарт не описывает, как она должна взаимодействовать с template template parameters (я обнаружил это пару лет назад, когда много работал с C++, но это оказалась известная проблема), и компиляторы ведут себя там как попало.
Re[2]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 16.02.21 06:48
Оценка:
Здравствуйте, nikov, Вы писали:

КД>>В плюсах такая штука уже лет десять как есть.


N>Она там есть, но стандарт не описывает, как она должна взаимодействовать с template template parameters (я обнаружил это пару лет назад, когда много работал с C++, но это оказалась известная проблема), и компиляторы ведут себя там как попало.


Ни разу не использовал это в своем коде на плюсах. Не дорос еще

А в простейшем варианте template<>using реально упростил жизнь ...
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[3]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Silver_S Ниоткуда  
Дата: 16.02.21 18:14
Оценка: 8 (1) :)
Здравствуйте, Kolesiki, Вы писали:

K>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)


У них много Proposal на эту тему. Но не набирают достаточного количества лайков. То ли не было приемлемого.
Это даже не все, скорее всего:

Proposal: Add the ability to execute arbitrary code in instance initializers: https://github.com/dotnet/csharplang/issues/2556
Update several properties of a single object: https://github.com/dotnet/csharplang/issues/1449
Proposal: Beyond property initialization to code block initialization : https://github.com/dotnet/csharplang/issues/1243
[Proposal] Object initializers for factory methods #803 : https://github.com/dotnet/csharplang/issues/803

K>// ...элементарная конструкция:

K> with(var myVeryLargeUnsqueezableVariable = new SomeClass()) {

Мне бы здесь больше понравилось со специальным скобками, чтобы не путать. Условно обозначил "{{"
var myVeryLargeUnsqueezableVariable = new SomeClass()
{{
    // здесь тоже может идти посторонний код, неважно
    .field1 = 1;
    .field2 = 2;
    .OnFart += SomebodyFarts;// sic!
}}
Отредактировано 16.02.2021 18:17 Silver_S . Предыдущая версия . Еще …
Отредактировано 16.02.2021 18:16 Silver_S . Предыдущая версия .
Re[6]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Silver_S Ниоткуда  
Дата: 16.02.21 19:53
Оценка: 8 (1)
Здравствуйте, Ночной Смотрящий, Вы писали:


НС> Оттуда есть ссылка на документ — https://docs.microsoft.com/en-us/archive/blogs/csharpfaq/why-doesnt-c-have-vb-nets-with-operator


Там единственный разумный аргумент против — то что это можно сделать на лямбдах с существующими фичами. Но это оверхед, и синтаксический и вычислительный, и initonly property так не инициализировать.

Expr.With(x =>
    {
        x.Property1 = 1;        
    });


А в остальном, против те, кто собрались не по назначению применять.

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


Можно было бы просто
Expr with x{ x.Property1 = 1; }
вместо существующего
Expr.With( x => { x.Property1 = 1; });

Синтаксисов для with можно придумать много. Здесь вариант без ключевых слов, просто с другими скобками "{{", типа инициализатора: Expr{{ .Property1 = 1;}}


var outerVar = 3;  
var lst = new List<C>()
{
    new C{InitOnlyProperty1 = 1},
    new C{InitOnlyProperty1 = 2},
    new C()
    {{      
        if(outerVar < 10) {} //can have any code as in the normal block
        .InitOnlyProperty1 = outerVar; // If the expression before the block is the constructor (without initializer) it is allowed to modify "initonly"
    }},
    new C{InitOnlyProperty1 = 4},
};



var v1 = 1;
objLevel1.objLevel2.objLevel3
{{
    .Member1 = v1;
    .Member2 = v1;    
    for(i=0;i<v1;i++) {} //can have any code as in the normal block
    .objLevel4
    {{
        .Member1 = v1;
        .Member2 = v1;
        .objLevel5 
        {{ 
            .Member20 = 1;
            //...
        }};
        .obj2Level5 = new Cl(){{ .Member = 10;}};
    }};
    .Member20 = v1;
}};
Отредактировано 16.02.2021 20:21 Silver_S . Предыдущая версия . Еще …
Отредактировано 16.02.2021 20:14 Silver_S . Предыдущая версия .
Отредактировано 16.02.2021 19:57 Silver_S . Предыдущая версия .
Re[3]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Silver_S Ниоткуда  
Дата: 24.02.21 13:29
Оценка: 6 (1)
Здравствуйте, Kolesiki, Вы писали:

K>
// Вместо тысячи слов....
var myVeryLargeUnsqueezableVariable = new SomeClass();
// здесь идёт некоторый код, т.е. мы НЕ МОЖЕМ использовать "инициализацию-при-создании". Далее...
myVeryLargeUnsqueezableVariable.field1 = 1;
myVeryLargeUnsqueezableVariable.field2 = 2;
myVeryLargeUnsqueezableVariable.OnFart += SomebodyFarts;


Пока With отсутствует, надо хотя бы используя то что есть, приближать к тому что хочется. Лучше такие куски заключать в скобки — видна структура, особенно если больше одного уровня, и для промежуточных переменных ограничивается видимость. И не обязательно придумывать имена, подойдет "_". Для вложенного уровня можно двойной "__".
var myVeryLargeUnsqueezableVariable = new SomeClass();
{ 
    var _ = myVeryLargeUnsqueezableVariable; 
    _.field1 = 1;
    _.field2 = 2;
    _.OnFart += SomebodyFarts;// sic!
}


Или даже форматировать так. Поначалу может показаться криво, потом это "{var _=" воспринимается как ключевое слово With, хорошо выделяется заголовок, более читабельно.
var myVeryLargeUnsqueezableVariable = new SomeClass();
{var _= myVeryLargeUnsqueezableVariable; 
    _.field1 = 1;
    _.field2 = 2;
    _.OnFart += SomebodyFarts;// sic!
}


Аналогично для синтаксиса выражений. Если отформатировать без пробелов "}.With(_=>{" , когда привыкнешь, оно выглядит как ключевое слово в виде символа-иероглифа. Означает продолжение инициализации с синтаксисом без ограничений.

 new A
 {
     Field1 = 1,
     FieldN = 1,
 }.With(_=>{
     _.Event1 += F1;
 });
Отредактировано 25.02.2021 10:22 Silver_S . Предыдущая версия . Еще …
Отредактировано 24.02.2021 23:06 Silver_S . Предыдущая версия .
Re[4]: using UsingAlias<T>=NameSpace2.MyClass<T>
От: Silver_S Ниоткуда  
Дата: 07.03.21 16:19
Оценка:
S_S>
S_S> }.With(_=>{
S_S>


Кстати, от символа '_' для имен лучше отказаться сейчас.
Большая вероятность, что его запретят в следующей версии:
[Proposal]: Only Allow Lexical Keywords in the Language: https://github.com/dotnet/csharplang/issues/4460

Когда имена не желательны, неплохой кандидат на замену 'v'
obj.Select( v => v.Field1}
Re: using UsingAlias<T>=NameSpace2.MyClass<T>
От: varenikAA  
Дата: 09.03.21 07:30
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>---
КД>Или она таки есть?

Алиасы типов есть везде, кроме C#.
И чем глубже знакомишься с другими ЯП тем больше понимаешь какой он примитивный.
сравните с тем же немерле или F#.
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.