.NET 7 is Available Today
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.11.22 09:00
Оценка: 9 (2)
.NET 7 is Available Today
и солнце б утром не вставало, когда бы не было меня
Re: .NET 7 is Available Today
От: vaa  
Дата: 09.11.22 14:12
Оценка: 9 (1)
Здравствуйте, Serginio1, Вы писали:

S>.NET 7 is Available Today


Костылей все больше и больше:

Given the following C# data type:

public sealed class Person
{
public int Id { get; init; }
public int Name { get; set; }
public int Surname { get; set; }
public Person Set() => this;
}

Before, in F# 6, the following code would’ve compiled and mutated the property Id of the Person:

let person = Person(Id = 42, Name = "John", Surname = "Doe")
person.Id <- 123
person.set_Id(123)
person.Set(Id=123)

по AOT для F# "еще работают". Видать слишком много метапрограммистской магии.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: .NET 7 is Available Today
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.11.22 08:32
Оценка: 36 (1)
Здравствуйте, Serginio1, Вы писали:

S>.NET 7 is Available Today


Понравилось https://devblogs.microsoft.com/dotnet/welcome-to-csharp-11/
Шаблоны списков

Pattern matching is one of the ongoing stories in C# that we just keep filling out. Pattern matching was introduced in C# 7 and since then it has grown to become one of the most important and powerful control structures in the language.

C# 11 adds list patterns to the story. With list patterns you can apply patterns recursively to the individual elements of list-like input – or to a range of them. Let’s jump right in with the generic algorithm from above, rewritten as a recursive method using list patterns:


T AddAll<T>(params T[] elements) where T : IMonoid<T> => 
    elements switch
{
    [] => T.Zero,
    [var first, ..var rest] => first + AddAll<T>(rest),
};


There’s a lot going on, but at the center is a switch expression with two cases. One case returns zero for an empty list [], where Zero is defined by the interface. The other case extracts the first element into first with the var first pattern, and the remainder is extracted into rest using the .. to slice out all the remaining elements into the var rest pattern.

Read more about list patterns in the docs. https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/patterns#list-patterns


Ну вот и на стороне фунциональщиков праздник!
и солнце б утром не вставало, когда бы не было меня
Отредактировано 10.11.2022 9:15 Serginio1 . Предыдущая версия . Еще …
Отредактировано 10.11.2022 8:47 Serginio1 . Предыдущая версия .
Re[2]: .NET 7 is Available Today
От: Jack128  
Дата: 10.11.22 08:44
Оценка: +3
Здравствуйте, Serginio1, Вы писали:

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


S>>.NET 7 is Available Today


S>Понравилось https://devblogs.microsoft.com/dotnet/welcome-to-csharp-11/

S>Шаблоны списков
S>

S>Сопоставление шаблонов — это одна из постоянных историй в C #, которую мы просто продолжаем заполнять. Сопоставление с образцом было введено в C # 7, и с тех пор оно превратилось в одну из самых важных и мощных управляющих структур в языке.

S>C # 11 добавляет шаблоны списков в историю. С помощью шаблонов списков вы можете рекурсивно применять шаблоны к отдельным элементам ввода, подобного списку, или к их диапазону. Давайте сразу перейдем к описанному выше общему алгоритму, переписанному как рекурсивный метод с использованием шаблонов списков:


S>

S>T AddAll<T>(params T[] elements) where T : IMonoid<T> =>
S> elements switch
S>{
S> [] => T.Zero,
S> [var first, ..var rest] => first + AddAll<T>(rest),
S>};

S>

S>Там много чего происходит, но в центре находится выражение switch с двумя падежами. Один случай возвращает ноль для пустого списка[], где Zeroопределяется интерфейсом. В другом случае первый элемент извлекается firstс var firstпомощью шаблона, а оставшаяся часть извлекается с restпомощью.., чтобы вырезать все оставшиеся элементы в var restшаблоне.

S>Подробнее о шаблонах списков читайте в документации. https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/patterns#list-patterns


Как это можно читать?? Ну ведь реально кровь из глаз течёт. Какие нафиг элементы ввода, подобные списку?? Что за switch с падежами?

Re[3]: .NET 7 is Available Today
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 10.11.22 08:47
Оценка: +2
Здравствуйте, Jack128, Вы писали:

Исправил!
и солнце б утром не вставало, когда бы не было меня
Re[2]: .NET 7 is Available Today
От: vaa  
Дата: 13.11.22 01:24
Оценка: 20 (1)
Здравствуйте, vaa, Вы писали:

интересные тесты производительности с АОТ https://programming-language-benchmarks.vercel.app/rust-vs-csharp
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: .NET 7 is Available Today
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 15.11.22 20:39
Оценка:
Кстати понравилось Welcome to C# 11

Raw string literals
A lot of what gets put in string literals is “code” of some sort – not just program text, but also JSON and XML data, HTML, regular expressions, SQL queries, etc. It’s really unhelpful when many of the special characters that show up in such text have special meaning in C# string literals! Noteworthy examples include \ and ", joined in interpolated strings by { and }. Having to escape all of those is a real bummer, and an ongoing source of pain an bugs.

Why not have a form of string literals that has no escape characters at all? That’s what raw string literals are. Everything is content!

A raw string literal is delimited by at least three double-quotes:


var raw1 = """This\is\all "content"!""";
Console.WriteLine(raw1);

This prints:

This\is\all "content"!
If you need three or more "s to be part of your content, you just use more "s on the outside. The beginning and end just have to match:


var raw2 = """""I can do ", "", """ or even """" double quotes!""""";

This makes it really easy to paste in, maintain and read at a glance what the literal contains.

Multi-line raw string literals can also truncate leading white space: The position of the end quote determines where white space starts to be included in the output:


var raw3 = """
    <element attr="content">
      <body>
        This line is indented by 4 spaces.
      </body>
    </element>
    """;
//  ^white space left of here is removed

Since there are four spaces to the left of the end quote, four spaces will be removed from the beginning of every line of content, yielding this output:

<element attr="content">
<body>
This line is indented by 4 spaces.
</body>
</element>
There’s much more to raw string literals than this – for instance they support interpolation! Read more about raw string literals in the docs.

Необработанные строковые литералы

Начиная с C# 11, можно использовать необработанные строковые литералы для упрощения создания строк, которые являются многостроочными, или использовать любые символы, требующие escape-последовательностей. Необработанные строковые литералы удаляют необходимость использования escape-последовательностей. Вы можете написать строку, включая форматирование пробелов, как она будет отображаться в выходных данных. Необработанный строковый литерал:

Начинается и заканчивается последовательность не менее трех символов двойной кавычки ("""). Для поддержки строковых литералов, содержащих три повторяющихся символа кавычки, разрешено начинать и заканчивать последовательность более трех последовательных символов.
Однострочные необработанные строковые литералы требуют символов открывающей и закрывающей кавычки в одной строке.
Многострочный необработанные строковые литералы требуют как открывающих, так и закрывающих символов кавычки в собственной строке.
В многострочных строковых литералах все пробелы слева от закрывающих кавычек удаляются.


string jsonString = """
{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
  "Summary": "Hot",
  "DatesAvailable": [
    "2019-08-01T00:00:00-07:00",
    "2019-08-02T00:00:00-07:00"
  ],
  "TemperatureRanges": {
    "Cold": {
      "High": 20,
      "Low": -10
    },
    "Hot": {
      "High": 60,
      "Low": 20
    }
            },
  "SummaryWords": [
    "Cool",
    "Windy",
    "Humid"
  ]
}
""";
и солнце б утром не вставало, когда бы не было меня
Re: .NET 7 is Available Today
От: vaa  
Дата: 16.11.22 01:22
Оценка: 12 (2)
Здравствуйте, Serginio1, Вы писали:

S>.NET 7 is Available Today


https://fable.io/ сломали
будьте внимательны!

fable не компилится по 7ку
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 16.11.2022 6:09 Разраб . Предыдущая версия .
Re: .NET 7 is Available Today
От: _NN_  
Дата: 16.11.22 14:21
Оценка: 27 (3)
Здравствуйте, Serginio1, Вы писали:

S>.NET 7 is Available Today


Спешу предостеречь от поспешного перехода.
К сожалению есть достаточно мелких недоработок, которые могут подпортить вам жизнь в самый неподходящий момент.
Например сломался парсер JSON на некоторых документах
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: .NET 7 is Available Today
От: hi_octane Беларусь  
Дата: 16.11.22 18:53
Оценка: 1 (1) +1
_NN>Например сломался парсер JSON на некоторых документах
А сломался парсер на генераторах, или тот который на рефлексии?
Re[2]: Ссылка на проблему с парсером JSON
От: Qbit86 Кипр
Дата: 16.11.22 19:05
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Например сломался парсер JSON на некоторых документах :))


А можно ссылку на issue?
Глаза у меня добрые, но рубашка — смирительная!
Re[3]: .NET 7 is Available Today
От: Ночной Смотрящий Россия  
Дата: 17.11.22 09:20
Оценка:
Здравствуйте, hi_octane, Вы писали:

_NN>>Например сломался парсер JSON на некоторых документах

_>А сломался парсер на генераторах, или тот который на рефлексии?

STJ сломали.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[3]: Ссылка на проблему с парсером JSON
От: Ночной Смотрящий Россия  
Дата: 17.11.22 09:20
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>А можно ссылку на issue?


https://github.com/dotnet/runtime/issues/77173
https://github.com/dotnet/runtime/issues/71784
https://github.com/dotnet/runtime/issues/60560
https://github.com/dotnet/runtime/issues/60082
https://github.com/dotnet/runtime/issues/56212
https://github.com/dotnet/runtime/issues/51165
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Не регрессии
От: Qbit86 Кипр
Дата: 17.11.22 09:34
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>https://github.com/dotnet/runtime/issues/77173

НС>https://github.com/dotnet/runtime/issues/71784
НС>https://github.com/dotnet/runtime/issues/60560
НС>https://github.com/dotnet/runtime/issues/60082
НС>https://github.com/dotnet/runtime/issues/56212
НС>https://github.com/dotnet/runtime/issues/51165

Пять из этих шести ссылок относятся к старым тикетам (.NET 5 и .NET 6, 2021 год), и не связаны с регрессией в .NET 7.
Не очень соответствует заявлению:
НС>Спешу предостеречь от поспешного перехода.
НС>Например сломался парсер JSON на некоторых документах
Глаза у меня добрые, но рубашка — смирительная!
Re[3]: Ссылка на проблему с парсером JSON
От: _NN_  
Дата: 17.11.22 10:13
Оценка:
Здравствуйте, Qbit86, Вы писали:

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


_NN>>Например сломался парсер JSON на некоторых документах


Q>А можно ссылку на issue?


К сожалению, ссылки пока нет.
Баг открыт во внутренней системе.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Ссылка на проблему с парсером JSON
От: _NN_  
Дата: 20.11.22 17:50
Оценка: 14 (1)
Здравствуйте, Qbit86, Вы писали:

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


_NN>>Например сломался парсер JSON на некоторых документах


Q>А можно ссылку на issue?


Похоже исправление уже подоспело: https://github.com/dotnet/runtime/pull/78221
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.