Re[4]: .NET 10 улучшения
От: _NN_  
Дата: 23.03.25 18:17
Оценка:
Здравствуйте, Философ, Вы писали:

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


_NN>>Начинать сегодня писать код сервисов на .NET это действительно будет странным выбором.

_NN>>Экосистема Go ушла далеко вперёд.

Ф>Смотря что писать: го — очень слабенький, невыразительный язык, почти ассемблер.


Слабенький, да.
Но у него есть другие преимущества.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: .NET 10 улучшения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.03.25 07:22
Оценка: -1 :)
Здравствуйте, _NN_, Вы писали:

_NN>Вынужден согласиться.

_NN>Для Линукс сегодня я есть Rider, но это не от MS.
_NN>От MS есть только VSCode и закрытый DevKit.

Ну вообще то есть прекрасно работающий WSL2

Отладка приложений .NET в WSL с помощью Visual Studio

Установка Linux в Windows с помощью WSL
и солнце б утром не вставало, когда бы не было меня
Re[5]: .NET 10 улучшения
От: novitk США  
Дата: 24.03.25 19:13
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Слабенький, да.

_NN>Но у него есть другие преимущества.

Раньше был АОТ, а сейчас где преимущества?
Re[6]: .NET 10 улучшения
От: _NN_  
Дата: 25.03.25 10:18
Оценка:
Здравствуйте, novitk, Вы писали:

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


_NN>>Слабенький, да.

_NN>>Но у него есть другие преимущества.

N>Раньше был АОТ, а сейчас где преимущества?

Я про преимущества Go.
Native .NET недостаточно зрел, чтобы можно пользоваться в продакшне.
У него достаточно ограничений.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: .NET 10 улучшения
От: novitk США  
Дата: 25.03.25 13:08
Оценка: +2
Здравствуйте, _NN_, Вы писали:

N>>Раньше был АОТ, а сейчас где преимущества?

_NN>Я про преимущества Go.
И я про них. Недостатков по сравнению с .NET там полный набор.

_NN>Native .NET недостаточно зрел, чтобы можно пользоваться в продакшне.

_NN>У него достаточно ограничений.
Все эти ограничения есть и в GoLang. Он что умеет C++ CLI или runtime Linq code gen?
Re[8]: .NET 10 улучшения
От: _NN_  
Дата: 25.03.25 15:41
Оценка: +1
Здравствуйте, novitk, Вы писали:

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


N>>>Раньше был АОТ, а сейчас где преимущества?

_NN>>Я про преимущества Go.
N>И я про них. Недостатков по сравнению с .NET там полный набор.

_NN>>Native .NET недостаточно зрел, чтобы можно пользоваться в продакшне.

_NN>>У него достаточно ограничений.
N>Все эти ограничения есть и в GoLang. Он что умеет C++ CLI или runtime Linq code gen?

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

А в Go изначально так нельзя и поэтому каждый решает проблему как может.
Бесспорно у нас будет .NET Native 20 , где всё будет работать, а Go уже сегодня работает десяток лет.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[9]: .NET 10 улучшения
От: novitk США  
Дата: 25.03.25 19:56
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Дело в библиотеках, которые адаптированы под эти ограничения.

_NN>В .NET не все библиотеки могут так работать. Ну и количество работы не так уж мало.
+1. Надо бы флажок в nuget добавить — AOP supported.
Re: .NET 10 улучшения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.04.25 09:15
Оценка: 117 (1)
Здравствуйте, _NN_, Вы писали:

.NET 10 Preview 3 is now available!

Stack Allocation of Small Arrays of Reference Types


C# 14 updates in .NET 10 Preview 3 — Release Notes

Today you may have an extension method that follows the pattern:

public static class Extensions
{
    public static IEnumerable<int> WhereGreaterThan(this IEnumerable<int> source, int threshold) 
        => source.Where(x => x > threshold);
}

The receiver is the parameter prefaced by the this keyword — source in this case. Property declarations do not have a similar location to declare the receiver. Thus, C# 14 introduces extension blocks. These are blocks with a scope that exposes the receiver to its contained members. If we switch the WhereGreaterThan extension method to the new syntax and add an IsEmpty property the extension block would be:

public static class Extensions
{
    extension(IEnumerable<int> source) 
    {
        public IEnumerable<int> WhereGreaterThan(int threshold)
            => source.Where(x => x > threshold);

        public bool IsEmpty
            => !source.Any();
    }
}

To use these members, you just call them:

var list = new List<int> { 1, 2, 3, 4, 5 };
var large = list.WhereGreaterThan(3);
if (large.IsEmpty)
{
    Console.WriteLine("No large numbers");
}
else
{
    Console.WriteLine("Found large numbers");
}


Generics are supported and the resolution rules are the same as for extension methods. For example, you could make WhereGreaterThan and IsEmpty generic:

extension<T>(IEnumerable<T> source)
    where T : INumber<T>
{
    public IEnumerable<T> WhereGreaterThan(T threshold)
        => source.Where(x => x > threshold);

    public bool IsEmpty
        => !source.Any();
}

The constraint to INumber<T> allows the greater than operator to be used.

Static methods and properties don't have a receiver, so the extension block list the type without a parameter name:

extension<T>(List<T>)
{
    public static List<T> Create()
        => [];
}

Extension blocks can seamlessly coexist with the extension methods you have today. There's no requirement to switch to the new syntax — both execute in exactly the same way. Just add extension blocks to the static classes that contain your existing extension methods.

The choice is entirely yours. If you prefer to leave your existing extension methods untouched, you absolutely can. But if you’d rather update your code for a consistent look and take advantage of the new syntax, that option is available too. And with tools like Visual Studio, converting to your preferred form has never been easier!

You'll see more extensions in upcoming previews, but we'd love to hear your feedback, so join the team and others in the community in the discussion Extensions.


Null-conditional assignment
Null-conditional assignment assigns a value to a property or field only if the containing instance exists. Imagine you have a code similar to:

public class Customer
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class UpdateCustomer
{
    public static void UpdateAge(Customer? customer, int newAge)
    {
        if (customer is not null)
        {
            customer.Age = newAge;
        }
    }
}

You can simplify the UpdateAge method:

public static void UpdateAge(Customer? customer, int newAge)
{
    customer?.Age = newAge;
}

If the customer is not null, Age will be updated. If customer is null, nothing will happen.

The IDE will help you by recommending this change via a lightbulb.

We'd love your feedback on this feature so join us and others in the community in the discussion on Null-conditional assignment.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 15.04.2025 9:34 Serginio1 . Предыдущая версия .
Re: .NET 10 улучшения
От: BlackEric http://black-eric.lj.ru
Дата: 03.05.25 16:34
Оценка:
Здравствуйте, _NN_, Вы писали:

.NET 10: Key Features and Enhancements

Table of Contents:
What’s New in .NET 10: Overview
Key Features and Essential Enhancements of .NET 10
How Can You Migrate to .NET 10 From Previous Versions?
End Note

Вот не плохая статья о нововведениях.
https://github.com/BlackEric001
Re[2]: .NET 10 улучшения
От: karbofos42 Россия  
Дата: 04.05.25 08:36
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Thus, C# 14 introduces extension blocks.


Какая же дичь... Какой-то блок внутри класса, чтобы сэкономить на спичках.
Не знаю насколько реализуемо, но удобнее было бы что-то типа:
public static class Extensions extend IEnumerable<int>
{
  public IEnumerable<int> WhereGreaterThan(int threshold)
    => this.Where(x => x > threshold);

  public bool IsEmpty
    => !this.Any();
  }
}

Их этот блок extension внутри класса как-то так себе выглядит и больше походит на высасывание синтаксического сахара, чтобы было.

S>Null-conditional assignment


Тоже как-то такое себе. По-моему это не такой уж частый случай, чтобы нужно было оптимизировать в плане написания.
А вот с поисками багов подозреваю, что будут проблемы.
Имелся опыт на проекте, где любили наркоманские свойства вида:
public int Value
{
  get { CalcValue(); }
  set {}
}

и:
public int Value
{
  get { return _value; }
  set
  {
    if (value < 0) return;
    _value = value;
  }
}

Меня это дико бесило и переделывал нормально, где дотягивались руки (периодически выплывали баги, т.к. разработчики по привычке не смотрели что у свойства пустой сеттер или он не всегда значения меняет, а потом удивлялись чего это они записывают в него одно значение, а фактически оказывается другое).
Тут конечно не такая наркомания, но сомневаюсь, что предлагаемая конструкция будет правильно читаться и не получится так, что ей просто NRE заглушится и ошибка тихо улетит куда-то дальше.
Отредактировано 04.05.2025 12:24 karbofos42 . Предыдущая версия .
Re[2]: .NET 10 улучшения
От: syrompe  
Дата: 04.05.25 11:38
Оценка:
BE>Вот не плохая статья о нововведениях.

Статья какое-то рекламное говно, простите. Похоже просто сгенерирована чатГПТ.
Все перечисленные фичи взяты еще с .net8.
Из десятки ничего собственно нету.
Re[2]: .NET 10 улучшения
От: _FRED_ Черногория
Дата: 06.05.25 13:45
Оценка: +1 -1
Здравствуйте, BlackEric, Вы писали:

BE>Вот не плохая статья о нововведениях.


Без комментариев Как можно рекомендовать что-то, как "не плохое" даже не разобравшись?

Before:

var numbers = new List { 1, 2, 3, 4, 5 };


After (.NET 10 with C# 14):
var numbers = [1, 2, 3, 4, 5];


Приведённый выше для C#14 код не компилируется и не должен. Пока что collection expressions что назывется только target-typed, то есть должен быть известен тип, в который выражение необходимо преобразовать. Планов изменить это в C#14 пока нет.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: .NET 10 улучшения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.05.25 09:43
Оценка:
Здравствуйте, Serginio1, Вы писали:

Чуть больше про расширения
https://devblogs.microsoft.com/dotnet/csharp-exploring-extension-members/
и солнце б утром не вставало, когда бы не было меня
Re[4]: .NET 10 улучшения
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.25 20:44
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Изначально, приоритет отдавался простоте кода и удобству, а не скорости.


Ну или просто не осилили по началу. А потом конкуренты стали на пятки наступать.

C>А сейчас они делают оптимизации в ущерб нужным вещам, которые никак не могут сделать уже почти десяток лет.


Это что же такого важного никак не могут реализовать?

Я вот только закрытие АлгТД могу вспомнить. И вряд ли это из-за того, что на оптимизации переключились.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: .NET 10 улучшения
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.25 20:51
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Ну во первых об этом уже писали и не раз.


Второй ссылки нет, а первая какие-то спекуляции.

_NN>Были у них утилиты на .NET Framework, которые перевели на .NET, но тут выяснилось, что он не является частью ситсемы и поэтому стартует гораздо медленней.

_NN>В последних .NET улучшили это дело с Ready2Run и следующим шагом работают над Native AOT, но когд это будет реально готово в производстве никто не знает.
_NN>Посему решили, что раз это утилиты и не что-то мегасложное можно и переписать на Rust, тем более когда такое движение вокруг языка.
_NN>Что там дальше с этим я не в курсах, не интересовался.

Ну т.е. мелкую утилиту переписали, а ты уже далеко идущие выводы сделал?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: .NET 10 улучшения
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.25 20:54
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Например, подчистить всякие нелепые косяки. https://github.com/dotnet/runtime/issues/31001


А причём тут язык и платформу? Очень разумное предложение, но это изменения в библиотеке.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: .NET 10 улучшения
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.05.25 21:18
Оценка: :)
Здравствуйте, _FRED_, Вы писали:

_FR>Приведённый выше для C#14 код не компилируется и не должен. Пока что collection expressions что назывется только target-typed, то есть должен быть известен тип, в который выражение необходимо преобразовать. Планов изменить это в C#14 пока нет.


Спакуха. К C# 20 в МС на Расте напишут ИИ, который прочтёт исходники Немерла из 2005 года и реализует в C# 20 вывод типов из использования.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: .NET 10 улучшения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.05.25 10:12
Оценка:
Здравствуйте, VladD2, Вы писали:

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


_FR>>Приведённый выше для C#14 код не компилируется и не должен. Пока что collection expressions что назывется только target-typed, то есть должен быть известен тип, в который выражение необходимо преобразовать. Планов изменить это в C#14 пока нет.


VD>Спакуха. К C# 20 в МС на Расте напишут ИИ, который прочтёт исходники Немерла из 2005 года и реализует в C# 20 вывод типов из использования.


Ну вот переменная может быть списком и массивом.
var numbers = [1, 2, 3, 4, 5];


затем я вызываю интеллисенс numbers.
Подсказка должна показывать свойства и методы списка и массива.

Кстати а как в TypeScript с объединениями

let id : number | string;
и солнце б утром не вставало, когда бы не было меня
Re[5]: .NET 10 улучшения
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.05.25 00:51
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Ну вот переменная может быть списком и массивом.

S>
S>var numbers = [1, 2, 3, 4, 5];
S>


В Шарпе? Не может.

S> затем я вызываю интеллисенс numbers.

S> Подсказка должна показывать свойства и методы списка и массива.

S>Кстати а как в TypeScript с объединениями


S>
S>let id : number | string;
S>


Ты тёплое с мягким путаешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: .NET 10 улучшения
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.05.25 06:58
Оценка:
Здравствуйте, VladD2, Вы писали:

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


S>>Ну вот переменная может быть списком и массивом.

S>>
S>>var numbers = [1, 2, 3, 4, 5];
S>>


VD>В Шарпе? Не может.


А в немерле какой тип выберет?

S>> затем я вызываю интеллисенс numbers.

S>> Подсказка должна показывать свойства и методы списка и массива.

Так и не ответил какая подсказка нужна?
S>>Кстати а как в TypeScript с объединениями

S>>
S>>let id : number | string;
S>>


VD>Ты тёплое с мягким путаешь.


Я спросил какая подсказка будет в TS.
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.