Здравствуйте, 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!
}
Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!
Здравствуйте, Kolesiki, Вы писали:
K>Ерунда! Там расписаны высосанные из пальца проблемы, которые компилер решает на раз.
+1
K>В элиасе нет вообще НИЧЕГО проблемного, ибо это, грубо говоря, символьная подстановка в обычный, существующий тип.
Это как реализовывать. Но можно и так сделать.
K>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ. Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.
Поставил бы плюс, если бы не этот бред. Прямо те кто делает Шарпа тупые макаки, а один ты тут такой крутой инженер. Тфу...
Просто есть упертость у людей. Неприемлят они многое. Зал бы ты сколько полезных фич в Майкрософт завалили или тянули с ними десятки лет! Прототип того, что сейчас называется C# 9.0 был готов в 2006 году. И имя ему Nemerle. Но даже тут нашлась масса хейтеров, которые и по сей день не могут признаться себе, что боролись с прогрессом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Kolesiki, Вы писали:
K>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)
K>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!
Они сделали инициализаторы. Вполне себе не плохое решение.
Здравствуйте, Kolesiki, Вы писали:
K>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ.
Можно узнать примеры применения твоей квалификации?
K> Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.
Вот только незадача, в language design team представителей танцоров мало, если вообще есть. Андерс датчанин, Мэдс норвежец, Гафтер, насколько я знаю, в США родился и индийских корней не имеет, Жульен француз. Из тех кто оказал на шарп сильное влияние — Дон Сайм австралиец, Эрик Мейер — датчанин. Команда там интернациональная, знаю поляков, русских, даже одного негра. А вот индусов чего то не припоминаю. Приведешь пример?
K>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)
Гугли и обрящешь. Пропозал есть, ровно как и длинное обсуждение к нему.
K>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!
Так давай, сделай свой язык. Если все так печально с дизайном шарпа — все быстро твою задумку подхватят, как это произошло с тем же Котлином.
Здравствуйте, VladD2, Вы писали:
K>>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ. Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.
VD>Поставил бы плюс, если бы не этот бред. Прямо те кто делает Шарпа тупые макаки, а один ты тут такой крутой инженер. Тфу...
Вместо слова "бред", мог бы (как квалифицированный инженер) объяснить — я что, какую-то фигню предлагаю в качестве with? Аргументируй! И плеваться здесь не надо — тебе здесь не параша.
VD>Просто есть упертость у людей.
Упёртость — это и есть синоним тупости. И да, если я знаю решение лучше — я "крутой инженер".
Здравствуйте, VladD2, Вы писали:
VD>Они сделали инициализаторы. Вполне себе не плохое решение.
Для студентов — да. Для команды "типа профи" — нет, ибо это "половинчатая фича", приводящая к кривому дизайну языка. Хуже того — эти бараны таки задействовали with, но для другой херни.
VD>Тебе же советую освоить http://nemerle.org/
Осваивал, Влад, осваивал! Давно, ещё лет 5 назад. Но ты сам знаешь, сколько там сейчас проблем, так что в продакшн я такое не потащу. Смешно сказать, но уже год-полтора как нет поддержки VS2019. Шёл 2021 год... Это не то, что претензия, а скорее "причина, почему НЕТ". Язык хороший, перспективный, за ним однозначно будущее, но вот не на всемогутере Нитра, а нужен тупо "компилятор одного языка". И чтоб без легаси говна типа VS2010.
Короче, Немерлю надо полировать, фич уже и так навалом.
Здравствуйте, Ночной Смотрящий, Вы писали:
K>>Почему MS этого не сделала? Элементарно ОТСУТСТВИЕ КВАЛИФИКАЦИИ.
НС>Можно узнать примеры применения твоей квалификации?
Что, опять надо как ребёночка, тыкать в текст выше? Я описал реализацию with, как её бы сделал настоящий инженер. А вот спускание на личности — это уже твой прокол, мальчик-айтишник!
K>> Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз.
НС>Вот только незадача, в language design team представителей танцоров мало, если вообще есть.
"Индусский код" — это обобщённое понятие, мне их папы-мамы не важны. Если проектируешь дизайн с явными дырами и несуразицами, значит ты "индус по призванию"! После 40 лет такое безалаберное проектирование неприемлемо. А нытьё всхЛипперта "почему мы сидим на костылях и ничего не меняем" вообще на уровне детсада.
K>>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)
НС>Гугли и обрящешь. Пропозал есть, ровно как и длинное обсуждение к нему.
Нафиг мне пропозал? (его кстати я писал) Мне в коде нужен with, причём это не какая-то новомодная фича, а аж с Дельфи пришло! (может и ещё раньше) За 19 лет не реализовать элементарный оператор — это уже даже не "индусы", а вообще уровень тюленей, которые в офис тупо за зарплатой ходят.
K>>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо!
НС>Так давай, сделай свой язык.
Сравнил — добавить в C# простую фичу или запилить новый язык! Мы точно тут инженеров собрали?
Собственно, в этом и состоит НИЗКАЯ КВАЛИФИКАЦИЯ перечисленных тобой "шарподелов" — за деревьями не видят леса. Реально нужные вещи висят годами, а галиматья типа primary constructors — пожалуйста, прям кипит процесс! А проектирование языка по количеству лайков за фичи... это уже просто "секс в большом городе"!
Здравствуйте, Kolesiki, Вы писали:
НС>>Можно узнать примеры применения твоей квалификации? K>Что, опять надо как ребёночка, тыкать в текст выше?
Ну что ж поделать, если ты ведешь себя как ребеночек? Приходится тыкать.
K> Я описал реализацию with, как её бы сделал настоящий инженер.
Отвратно.
K>>> Там, где инженер видит обобщённое и мощное решение, макака из страны танцоров лишь решает местечковую проблему. Сталкивался не раз. НС>>Вот только незадача, в language design team представителей танцоров мало, если вообще есть. K>"Индусский код" — это обобщённое понятие
Ты не про индусский код писал, а конкретно про индусов.
K>А нытьё всхЛипперта "почему мы сидим на костылях и ничего не меняем" вообще на уровне детсада.
Липперт уже много лет не работает в MS.
K>>>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!) НС>>Гугли и обрящешь. Пропозал есть, ровно как и длинное обсуждение к нему. K>Нафиг мне пропозал?
Чтобы понять что с ним не так. Но тебя, похоже, это и не интересует. У тебя в мире есть ровно один гениальный инженер — это ты. Выхлоп, правда, почему то примерно никакой.
K> (его кстати я писал)
Да я в курсе откуда этот маразм проистекает. Большинство, правда, тянут эту мегафичу из VB, где оно тоже есть.
K>>>Т.е. додуматься сделать упрощённую инициализацию после конструктора — им ума хватило (и то обосрались с назначением делегатов), а сделать ОДНУ УНИВЕРСАЛЬНУЮ инициализацию — неееееее! Это ж мозг применять надо! НС>>Так давай, сделай свой язык. K>Сравнил — добавить в C# простую фичу или запилить новый язык!
Зачем добавлять фичу в C#, если он все равно весь сделан индусами? А так будет свой новый мегаязык, созданный мегаинженером. Повергнешь всех своих критиков в прах.
K>Собственно, в этом и состоит НИЗКАЯ КВАЛИФИКАЦИЯ перечисленных тобой "шарподелов" — за деревьями не видят леса.
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>В плюсах такая штука уже лет десять как есть.
Она там есть, но стандарт не описывает, как она должна взаимодействовать с template template parameters (я обнаружил это пару лет назад, когда много работал с C++, но это оказалась известная проблема), и компиляторы ведут себя там как попало.
Здравствуйте, nikov, Вы писали:
КД>>В плюсах такая штука уже лет десять как есть.
N>Она там есть, но стандарт не описывает, как она должна взаимодействовать с template template parameters (я обнаружил это пару лет назад, когда много работал с C++, но это оказалась известная проблема), и компиляторы ведут себя там как попало.
Ни разу не использовал это в своем коде на плюсах. Не дорос еще
А в простейшем варианте template<>using реально упростил жизнь ...
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Kolesiki, Вы писали:
K>Заранее извините за оффтоп, но вот что мешало этим смуглым пи.... пижонам реализовать классический(!) оператор with? (который даже в VB есть!)
У них много Proposal на эту тему. Но не набирают достаточного количества лайков. То ли не было приемлемого.
Это даже не все, скорее всего:
Мне бы здесь больше понравилось со специальным скобками, чтобы не путать. Условно обозначил "{{"
var myVeryLargeUnsqueezableVariable = new SomeClass()
{{
// здесь тоже может идти посторонний код, неважно
.field1 = 1;
.field2 = 2;
.OnFart += SomebodyFarts;// sic!
}}
Там единственный разумный аргумент против — то что это можно сделать на лямбдах с существующими фичами. Но это оверхед, и синтаксический и вычислительный, и 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;
}};
// Вместо тысячи слов....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;
});
Кстати, от символа '_' для имен лучше отказаться сейчас.
Большая вероятность, что его запретят в следующей версии:
[Proposal]: Only Allow Lexical Keywords in the Language: https://github.com/dotnet/csharplang/issues/4460
Когда имена не желательны, неплохой кандидат на замену 'v'