Re[13]: Welcome to C# 9.0
От: rameel https://github.com/rsdn/CodeJam
Дата: 01.06.20 10:23
Оценка: 146 (2) +1
Здравствуйте, Serginio1, Вы писали:

S>Из немерля мне не хватало толька патерн матчинга.


То, что в шарпе появился паттерн-матчинг хорошо, теперь ждем 9 версию, в которой может устранят куцость текущего.

S>Макросы заменяли T4 и использование рослина для генерации классов.


Вы делаете мне смешно... Если мощностей T4 хватало бы, в команде шарпа не задумались бы о source generator. Только сколько времени теперь пройдет, когда мы увидим квазицитаты для этого?

S>То, что появилось и нет в Nemerle больше нужно. Один async awaite чего стоит.


async/await есть в немерле. Я говорил об async streams, которые только вот появились в шарпе

S>Все таки говорить, что C# это недоделанный немерль неправда!


ЗЫ. Вы зачем так агритесь на то, что кто-то указал на недостатки шарпа?!

Ты спросил, что было, а что нет в немерле, я тебе написал. Шарп — это всего лишь инструмент, которым пользуюсь и я каждый день, но это не мешает мне видеть плюсы и минусу моего инструмента.

ЗЫ. Несколько лет назад у нас в команде были джависты, которым тоже все эти var, foreach, структуры, linq и expression trees, properties не нужны были, излишними и чужеродными. Но стоило некоторым вещам появится в джаве как вдруг это все надо и удобно. Или вот, одному из команды джавистов нужно было пересесть на шарп, то скажем так, проникся, особенно поработав с linq2db. Да, по началу плевался, чертыхался, здесь не так и тут не эдак, но позже возвращаясь обратно было досадно, что нельзя как в шарпе. При том, что и джаве было/есть что предложить шарпу — те же реализации методов интерфейса по умолчанию. Или к примеру, анонимные классы с реализацией интерфейса по месту. Или вот, поддержка tiered compilation в джите. Разве плохо, что плюсы и возможности других языков и платформ появляются в твоем любимом языке или платформы?! Или теперь нельзя обсуждать недостатки/недоделки языка/платформы потому что чьи чувства будут задеты, потому что в моем инструменте все прекрасно, все идеально. Нет не все, иначе язык не развивался бы так как сейчас.

Только здесь на форуме не мало копий было сломано об этом, не хочу повторяться, но взять хотя бы паттерн-матчинг. Много было тут людей, которым и обычного switch хватало, а теперь посмотри как наличие только одного паттерн-матчинга облегчает работу https://github.com/igor-tkachev/Linq.Expressions.Deconstruct/blob/master/Tests/Tests.cs#L156-L183

Expression<Func<int,int>> f = i => i * 0 + 0 + i + 10 * (i * 0 + 2);

var f1 = f.TransformEx(ex => ex switch
{
    Multiply(Constant(0) e,   _)               => e,               // 0 * e => 0
    Multiply(_,               Constant(0) e)   => e,               // e * 0 => 0
    Multiply(Constant(1),     var e)           => e,               // 1 * e => e
    Multiply(var e,           Constant(1))     => e,               // e * 1 => e
    Divide  (Constant(0) e,   _)               => e,               // 0 / e => 0
    Divide  (var e,           Constant(1))     => e,               // e / 1 => e
    Add     (Constant(0),     var e)           => e,               // 0 + e => e
    Add     (var e,           Constant(0))     => e,               // e + 0 => e
    Subtract(Constant(0),     var e)           => Negate(e),       // 0 - e => -e
    Subtract(var e,           Constant(0))     => e,               // e - 0 => e
    Multiply(Constant(int x), Constant(int y)) => Constant(x * y), // x * y => e
    Divide  (Constant(int x), Constant(int y)) => Constant(x / y), // x / y => e
    Add     (Constant(int x), Constant(int y)) => Constant(x + y), // x + y => e
    Subtract(Constant(int x), Constant(int y)) => Constant(x - y), // x - y => e
    _                                          => ex
});

Console.WriteLine(f);
Console.WriteLine(f1);

Assert.IsTrue(f1.EqualsTo(i => i + 20));
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.