Re[2]: Сложность C# приближается к С++
От: rudzuk  
Дата: 29.01.22 12:30
Оценка: +3 :))) :)
Здравствуйте, Serginio1, Вы писали:

S> Но вот читабельность пока значительно проще.


Ога-ога,
Автор: rudzuk
Дата: 09.09.20
читабельность прет! Надо больше сокращать! Долой синтаксический оверхед!
avalon/3.0.0
Re: Сложность C# приближается к С++
От: Shtole  
Дата: 29.01.22 15:45
Оценка: +3 -2 :)
Здравствуйте, Shmj, Вы писали:

S>Заметили ли вы, что C# уже не тот. Конечно, еще не догнал старшего собрата, но уже дофига концепций, которые вам могут показаться очевидными, но вот начинающим с нуля — доставят.


Нет, не заметил. Этот язык и всё остальное, что идёт к нему в комплекте, спроектированы так, чтобы сложность по возможности оставалась под капотом. Прямо чувствуется, что это один из принципов. Например, типичный программист не пишет алгоритмы и контейнеры, а пользуется ими. Можно всю жизнь программировать на Шарпе и не знать про ключевое слово `yield`. И не просто программировать, а продуктивно.

Что касается «старшего собрата», его нынешний дизайн определил человек, который этой границы в упор не видит. Достаточно прочесть знаменитую цитату про «методологически неверный» ООП.

А раз так, значит и сложность нечего сравнивать. Сама по себе она не решает.

Забыл сразу написать: вы сортировку в плюсах видели? Допустим, программисту надо отсортировать строки в файле. Чтобы успешно выполнить задачу, он уже должен осилить 1) концепцию итераторов и 2) дихотомию контейнеры/алгоритмы. А ведь это только вершина айсберга. Без неё можно было бы обойтись (и в других библиотеках обходились, однако стандартизировали самую упоротую). Но есть подводная часть айсберга, от которой трудно куда-то деться: например, контракт на разделение ответственности по управлению памятью. Про это программист тоже должен думать, знать и понимать, иначе он словит или утечку, или исключение.

Как можно после этого сравнивать толщину спецификаций? Какой в этом смысл? Сложность Шарпа упакована намного более разумно.
Do you want to develop an app?
Отредактировано 30.01.2022 11:32 Shtole . Предыдущая версия . Еще …
Отредактировано 30.01.2022 4:39 Shtole . Предыдущая версия .
Re[7]: Сложность C# приближается к С++
От: CreatorCray  
Дата: 31.01.22 08:50
Оценка: +4 -2
Здравствуйте, Философ, Вы писали:

Ф>Чтобы там улучшить читабельность, там надо как минимум не писать в одну строку:


Ф>
Ф>public int F() =>
Ф>   (A is B b) && (b.C is C)?
Ф>     C.D ??     1
Ф>   :FalseToNet ;
Ф>

Один хрен выглядит как perl.
Не надо так писать вообще.
Если можно написать более просто читаемый код — надо писать более просто читаемо, машине же всё равно.

Ф>Чтение и правка такого кода порождает ошибки. Поубивал бы!

Верно.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: Сложность C# приближается к С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.01.22 08:02
Оценка: 1 (1) +4
Здравствуйте, Shmj, Вы писали:

S>Заметили ли вы, что C# уже не тот. Конечно, еще не догнал старшего собрата, но уже дофига концепций, которые вам могут показаться очевидными, но вот начинающим с нуля — доставят.

Известный факт: уже в версии 3.0 спека C# была раза в полтора толще спеки С++.
Но в освоении С# всё же проще, т.к. проектировался изначально для более прикладных целей.

Вообще, опасность, конечно же, есть — сейчас язык развивается community, и многие решения принимаются не на основе взвешенного вдумчивого анализа, а просто потому, что кому-то взбрело в голову их принять, а остальным не хватило упорства противостоять энтузиазму.
Многие фичи языка, добавленные в 7/8/9/10, плохо или никак работают друг с другом.
Например, те же Expression Trees не поддерживают почти ничего из добавленного после C# 3.0.

Какие-то провалы потихонечку подтягивают — вот, к примеру, async enumerable. До него сочетать async pattern и enumerable pattern было невозможно.

Но это происходит медленнее, чем добавление новых фич.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Сложность C# приближается к С++
От: Shmj Ниоткуда  
Дата: 29.01.22 05:59
Оценка: +2 -3
Заметили ли вы, что C# уже не тот. Конечно, еще не догнал старшего собрата, но уже дофига концепций, которые вам могут показаться очевидными, но вот начинающим с нуля — доставят.

Просто смотрю С++ и уже не кажется таким уж сложным, т.к. в C# навязано множество концепций, которые тоже не просты.

Лет через 15 будет тот же вавилон, имхо.

Как то все по одному сценарию идет.
Отредактировано 29.01.2022 6:00 Shmj . Предыдущая версия .
Re[3]: Сложность C# приближается к С++
От: vsb Казахстан  
Дата: 29.01.22 09:30
Оценка: +4
Здравствуйте, Shmj, Вы писали:

vsb>>В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.


S>Язык C появился в 1972 году и до сих пор не оброс всем этим хламом.


А ты уверен, что хорошо знаешь все фичи последних версий C? Про _Generic слышал?

S>Видимо потому что его взяли под покровительство люди, умеющие думать на десятилетия вперед — Национальный институт стандартов США и Международная организация по стандартизации.


Я считаю, что C де факто умер и заменён С++. Кто его там развивает, зачем, это вообще непонятно. По сути сейчас это какое-то достаточным произвольным образом взятое подмножество С++ (с кучкой несовместимостей, я в курсе, сути это не меняет).
Re[8]: Сложность C# приближается к С++
От: Shtole  
Дата: 01.02.22 08:57
Оценка: +4
Здравствуйте, CreatorCray, Вы писали:

Ф>>
Ф>>public int F() =>
Ф>>   (A is B b) && (b.C is C)?
Ф>>     C.D ??     1
Ф>>   :FalseToNet ;
Ф>>

CC>Один хрен выглядит как perl.
CC>Не надо так писать вообще.
CC>Если можно написать более просто читаемый код — надо писать более просто читаемо, машине же всё равно.

Ф>>Чтение и правка такого кода порождает ошибки. Поубивал бы!

CC>Верно.

Долго думал, откуда у меня странное ощущение, что я одновременно согласен и не согласен.

Потом понял. Мне кажется, рассматривая псевдокод, можно доказать всё, что угодно: и что так нельзя писать, и что можно, и что нужно. Особенно такой, где заглавная A это инстанс, заглавная B — тип, а заглавная C — одновременно тип и свойство.

Ведите слонов
Автор: Sinclair
Дата: 31.01.22
!
Do you want to develop an app?
Re[3]: Сложность C# приближается к С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.01.22 12:32
Оценка: 5 (3)
Здравствуйте, Serginio1, Вы писали:

S> Ну много они добавили для увеличения скорости те же Span.

При этом Span<> и Async несовместимы. Ну, это ещё можно простить. Но вот Span<> и генерики несовместимы; то есть нельзя построить тип, параметризованный каким-нибудь Span<int>.
Так что если вы хотите описать сигнатуру "функции, которая принимает Span<char> и возвращает нужный мне тип T", то использовать Func<Span<char>, T> нельзя — надо честно писать delegate T Parse<T>(Span<char> arg):
using System;
                    
public class Program
{
    public delegate T Parse<T>(ReadOnlySpan<char> span);
    public static void Main()
    {
        Parse<DateTime> p = (ReadOnlySpan<char> c)=>DateTime.Parse(c);
        Func<ReadOnlySpan<char>, DateTime> t = p; // oops!
    }
}


S>Немерлисты так долго ждали и разочаровались в Source Generator и в PM. А вот Reles http://rsdn.org/forum/dotnet/7749568.flat
Автор: varenikAA
Дата: 08.06.20
никак не введут

Ну, не знаю. С одной стороны, роли нафиг не нужны при наличии static abstract members в интерфейсах.
С другой стороны, иногда хочется приклеить операторы к "чужим" типам.
Ну вот, скажем, если бы можно было как-то сделать B operator |(A value, Func<A, B> transform) => transform(value), то получился бы тот самый pipe operator, Math.PI | Math.Sin | Math.Cos == 1
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Сложность C# приближается к С++
От: Shmj Ниоткуда  
Дата: 29.01.22 06:59
Оценка: :)))
Здравствуйте, vsb, Вы писали:

vsb>В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.


Язык C появился в 1972 году и до сих пор не оброс всем этим хламом. Видимо потому что его взяли под покровительство люди, умеющие думать на десятилетия вперед — Национальный институт стандартов США и Международная организация по стандартизации.
Re[3]: Сложность C# приближается к С++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.01.22 09:36
Оценка: +3
Здравствуйте, Shmj, Вы писали:

vsb>>В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.


S>Язык C появился в 1972 году и до сих пор не оброс всем этим хламом. Видимо потому что его взяли под покровительство люди, умеющие думать на десятилетия вперед — Национальный институт стандартов США и Международная организация по стандартизации.


Оброс. Просто называется теперь — C++
Маньяк Робокряк колесит по городу
Re[5]: Сложность C# приближается к С++
От: rudzuk  
Дата: 29.01.22 20:01
Оценка: +1 -2
Здравствуйте, Jack128, Вы писали:

J> да дело не в скобках, а однобуквенных именах. Замени A,B,C,D на что нить типа Customer/Order/Price и всё нормально будет читаться.


Не будет. Будет нагромождение идентификаторов. Выкинуть элементы обеспечивающие семантическую связанность могут только оторванные от жизни утырки, которые кроме своих пятистрочников ничего больше не читали.
avalon/3.0.0
Re[4]: Сложность C# приближается к С++
От: Pzz Россия https://github.com/alexpevzner
Дата: 29.01.22 20:55
Оценка: +3
Здравствуйте, vsb, Вы писали:

vsb>Я считаю, что C де факто умер и заменён С++. Кто его там развивает, зачем, это вообще непонятно. По сути сейчас это какое-то достаточным произвольным образом взятое подмножество С++ (с кучкой несовместимостей, я в курсе, сути это не меняет).


А я вот, например, не вижу ниши, в которой выбор однозначно был бы в пользу C++, а ни какого-нибудь другого языка. А вот нишу для C вижу: всякое там внутриядерное программирование. В ядре редко встречаются хитрые алгоритмы и структуры данных, и в то же время, в ядре хочется очень точно понимать, что именно происходит.

Очень маловероятно, чтобы в новом проекте, не отягощенном наследственностью, в бы выбрал в качестве основного языка C++.

Так что на мой взгляд, это скорее C++ умер, а не C. Разлагатся он будет, конечно, еще очень долго.
Re: Сложность C# приближается к С++
От: vsb Казахстан  
Дата: 29.01.22 06:10
Оценка: :))
В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.
Re[4]: Сложность C# приближается к С++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.01.22 09:38
Оценка: +2
Здравствуйте, vsb, Вы писали:

S>>Язык C появился в 1972 году и до сих пор не оброс всем этим хламом.


vsb>А ты уверен, что хорошо знаешь все фичи последних версий C? Про _Generic слышал?


При этом, на тех платформах, на которых кроме Си — ничего другого нет, там и Си хорошо если соответствует стандарту Си 89, или какой там был последний лохматый стандарт
Маньяк Робокряк колесит по городу
Re[4]: Сложность C# приближается к С++
От: Jack128  
Дата: 29.01.22 17:30
Оценка: +2
Здравствуйте, Serginio1, Вы писали:

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


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


S>>> Но вот читабельность пока значительно проще.


R>>Ога-ога,
Автор: rudzuk
Дата: 09.09.20
читабельность прет! Надо больше сокращать! Долой синтаксический оверхед!

S> Ну в принципе то читабельно. Это с непривычки.
S>Но таких конструкций можно и на любом языке
S> Конечно скобочки проставить лучше
S>
S> public int F() =>
S>   (A is B b) && (b.C is C) ? C.D ?? 1:FalseToNet ;
S>


да дело не в скобках, а однобуквенных именах. Замени A,B,C,D на что нить типа Customer/Order/Price и всё нормально будет читаться.
Re[9]: offtopic
От: CreatorCray  
Дата: 31.01.22 10:45
Оценка: +1 -1
Здравствуйте, Serginio1, Вы писали:

S>читаемост только увеличивается.

Дык нет жеж

S> А то, что с непривычки не удобно, так менять мышление надо.

И опять напомню про Perl
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[10]: offtopic
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.01.22 11:12
Оценка: +2
Здравствуйте, CreatorCray, Вы писали:
S>>читаемост только увеличивается.
CC>Дык нет жеж
Увеличивается. Это — вполне органичная конструкция, значительно лучше, чем всякие "?.".
Так и читается: if (animal is Elephant e) e.Trumpet() => "если животное — это слон е, то пусть е протрубит"
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: offtopic
От: Ночной Смотрящий Россия  
Дата: 31.01.22 11:47
Оценка: +2
Здравствуйте, Sinclair, Вы писали:

S>Позволяет сократить код типа


Сократить это так, побочный эффект. Главное это позволяет заменить statement на expression.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: offtopic
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.01.22 12:41
Оценка: -1 :)
Здравствуйте, CreatorCray, Вы писали:


S>> А то, что с непривычки не удобно, так менять мышление надо.

CC>И опять напомню про Perl
Вот не надо сравнивать с перлом и регулярными выражениями!
Что тут непонятно? все прекрасно читается!

public int F() =>
   (A is B b) && (b.C is C)
  ? C.D ?? 1
  :FalseToNet ;
и солнце б утром не вставало, когда бы не было меня
Отредактировано 31.01.2022 12:42 Serginio1 . Предыдущая версия .
Re[6]: offtopic
От: Sinclair Россия https://github.com/evilguest/
Дата: 31.01.22 09:56
Оценка: 2 (1)
Здравствуйте, Лось Чтостряслось, Вы писали:
ЛЧ>Здравствуйте, Jack128, Вы писали:

S>>>
S>>> public int F() =>
S>>>   (A is B b) && (b.C is C) ? C.D ?? 1:FalseToNet ;
S>>>


ЛЧ>простите, а выделенное что значит?

Если условие A is B вычислится в true, то в b запишут A, приведённое к типу b.
Позволяет сократить код типа
var b = A as B;
if (b!=null)
{
  ...
}

или
if (A is B)
{
  var b = (B)A;
  ...
}
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: offtopic
От: alexander_r  
Дата: 31.01.22 10:00
Оценка: 1 (1)
Здравствуйте, Лось Чтостряслось, Вы писали:

ЛЧ>простите, а выделенное что значит?

if(A is B)
{
  var b = (B)A; 
  if (b.C is C)
  { //...}
{
Re: Сложность C# приближается к С++
От: blacktea  
Дата: 29.01.22 17:16
Оценка: :)
Здравствуйте, Shmj, Вы писали:

S>Заметили ли вы, что C# уже не тот. Конечно, еще не догнал старшего собрата, но уже дофига концепций, которые вам могут показаться очевидными, но вот начинающим с нуля — доставят.


C# 2.0 был практически идеален.
Re[8]: offtopic
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.01.22 10:22
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

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


S>>Позволяет сократить код типа

CC>А зачем?
Достает писать кучу if и as с is. Очень удобно и читаемост только увеличивается. А то, что с непривычки не удобно, так менять мышление надо.
Очень удобно в том же pattern matching https://docs.microsoft.com/en-us/archive/msdn-magazine/2019/may/csharp-8-0-pattern-matching-in-csharp-8-0

Нужно для удобства написания и чтения!
и солнце б утром не вставало, когда бы не было меня
Re[3]: Сложность C# приближается к С++
От: Shtole  
Дата: 31.01.22 10:57
Оценка: +1
Здравствуйте, yenik, Вы писали:

S>>Можно всю жизнь программировать на Шарпе и не знать про ключевое слово `yield`. И не просто программировать, а продуктивно.

Y>Только если програмировать в одиночку. А иначе молодые и горячие коллеги непременно ознакомят со всеми новейшими свистками и звночками.

Не соглашусь.

Это не свисток и не звонок, это языковой функционал, нужный для… как бы его назвать… менее прикладного кода (более системного или более хелперного). Перефразируя старый фильм, в командах может быть два типа людей, мой друг: одни заряжают yield, другие пользуются foreach.
Do you want to develop an app?
Re[11]: offtopic
От: Ночной Смотрящий Россия  
Дата: 01.02.22 07:43
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S> Что тут непонятно? все прекрасно читается!


У тебя с такими безумными отступами и ненужными скобками — не очень. А так да.

public int F() =>
    A is B b && b.C is C
        ? C.D ?? 1
        : FalseToNet;
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: Сложность C# приближается к С++
От: _NN_ www.nemerleweb.com
Дата: 02.02.22 06:47
Оценка: :)
Здравствуйте, Shtole, Вы писали:
.

S>Долго думал, откуда у меня странное ощущение, что я одновременно согласен и не согласен.


S>Потом понял. Мне кажется, рассматривая псевдокод, можно доказать всё, что угодно: и что так нельзя писать, и что можно, и что нужно. Особенно такой, где заглавная A это инстанс, заглавная B — тип, а заглавная C — одновременно тип и свойство.


Никогда бы не подумал, что этот пример кода вызовёт такую дискуссию
Конечно, не стоит писать в таком стиле как вы заметили
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Сложность C# приближается к С++
От: amironov79  
Дата: 03.02.22 05:15
Оценка: :)
Здравствуйте, vaa, Вы писали:

vaa>
vaa>var builder = WebApplication.CreateBuilder(args);
vaa>var app = builder.Build();

vaa>app.MapGet("/", () => "Hello World!");

vaa>app.Run();
vaa>


vaa>Вроде тоже неплохо, при этом кучу вещей(сертификат, пароль, привязки...) можно задать 3-я способами (env, cli, appsettings.json)

vaa>На практике за простотой может скрываться примитивность(т.е. банальное отсутствие кучи возможностей, доступных из коробки в других каркасах и библиотеках).

А теперь собери это дело в контейнеры. С go можно уложиться в 6-7 Мб, с .net понадобится 100-200.
Re[8]: Сложность C# приближается к С++
От: amironov79  
Дата: 03.02.22 07:37
Оценка: :)
Здравствуйте, vaa, Вы писали:

vaa>не смешите меня! 100Мб в наши дни это ни о чем. Если конечно вы хостеру за каждый байт не платите.


В целом согласен. В наши дни и гигабайты ни о чем, надо же куда-то ресурсы утилизировать.
Re[2]: Сложность C# приближается к С++
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 29.01.22 09:35
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.


Джава была убога ещё тогда, когда C++ застыл в развитии. В джава мире котлин выглядит довольно интересным, но после плюсов — тоже скучен и неудобен
Маньяк Робокряк колесит по городу
Re[2]: Сложность C# приближается к С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.01.22 10:37
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Но это происходит медленнее, чем добавление новых фич.

Ну много они добавили для увеличения скорости те же Span. Немерлисты так долго ждали и разочаровались в Source Generator и в PM. А вот Reles http://rsdn.org/forum/dotnet/7749568.flat
Автор: varenikAA
Дата: 08.06.20
никак не введут
и солнце б утром не вставало, когда бы не было меня
Re: Сложность C# приближается к С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.01.22 10:42
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Заметили ли вы, что C# уже не тот. Конечно, еще не догнал старшего собрата, но уже дофига концепций, которые вам могут показаться очевидными, но вот начинающим с нуля — доставят.


S>Просто смотрю С++ и уже не кажется таким уж сложным, т.к. в C# навязано множество концепций, которые тоже не просты.


S>Лет через 15 будет тот же вавилон, имхо.


S>Как то все по одному сценарию идет.


На самом то деле С# наверное уже сложнее. Одни деревья выражений чего стоят и еще больше хочется. Но все нововведения это увеличение скорости программирования и скорости выполнения.
Но вот читабельность пока значительно проще. Ну в конце то концов деньги то получать нужно не за сам факт программирования!
и солнце б утром не вставало, когда бы не было меня
Re[5]: Сложность C# приближается к С++
От: CreatorCray  
Дата: 29.01.22 11:25
Оценка:
Здравствуйте, Marty, Вы писали:

M>При этом, на тех платформах, на которых кроме Си — ничего другого нет

Колво таких платформ уже исчезающе мало и стремительно уменьшается.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[3]: Сложность C# приближается к С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.01.22 15:41
Оценка:
Здравствуйте, rudzuk, Вы писали:

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


S>> Но вот читабельность пока значительно проще.


R>Ога-ога,
Автор: rudzuk
Дата: 09.09.20
читабельность прет! Надо больше сокращать! Долой синтаксический оверхед!

Ну в принципе то читабельно. Это с непривычки.
Но таких конструкций можно и на любом языке
Конечно скобочки проставить лучше
 public int F() =>
   (A is B b) && (b.C is C) ? C.D ?? 1:FalseToNet ;
и солнце б утром не вставало, когда бы не было меня
Re[4]: Сложность C# приближается к С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.01.22 16:02
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


S>> Ну много они добавили для увеличения скорости те же Span.

S>При этом Span<> и Async несовместимы. Ну, это ещё можно простить. Но вот Span<> и генерики несовместимы; то есть нельзя построить тип, параметризованный каким-нибудь Span<int>.
Ну стек и Async не совместимы Memory<T>
S>Так что если вы хотите описать сигнатуру "функции, которая принимает Span<char> и возвращает нужный мне тип T", то использовать Func<Span<char>, T> нельзя — надо честно писать delegate T Parse<T>(Span<char> arg):
S>
S>using System;
                    
S>public class Program
S>{
S>    public delegate T Parse<T>(ReadOnlySpan<char> span);
S>    public static void Main()
S>    {
S>        Parse<DateTime> p = (ReadOnlySpan<char> c)=>DateTime.Parse(c);
S>        Func<ReadOnlySpan<char>, DateTime> t = p; // oops!
S>    }
S>}
S>


Угу. Но наверное это тоже контроль стека!
https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/january/csharp-all-about-span-exploring-a-new-net-mainstay
В дополнение к новому конструктору string, string теперь также имеет метод Create:

public static string Create<TState>(
  int length, TState state, SpanAction<char, TState> action);
...
public delegate void SpanAction<T, in TArg>(Span<T> span, TArg arg);

Этот метод реализован для выделения строки, а затем предоставления доступного для записи промежутка, в который вы можете писать, чтобы заполнить содержимое строки во время ее создания. Обратите внимание, что в этом случае полезна только стековая природа Span<T>, гарантирующая, что span (который относится к внутреннему хранилищу строки) перестанет существовать до завершения конструктора строки, что делает невозможным использование span для изменения строки после завершения построения:

int length = ...;
Random rand = ...;
string id = string.Create(length, rand, (Span<char> chars, Random r) =>
{
  for (int i = 0; chars.Length; i++)
  {
    chars[i] = (char)(r.Next(0, 10) + '0');
  }
});

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


S>>Немерлисты так долго ждали и разочаровались в Source Generator и в PM. А вот Roles http://rsdn.org/forum/dotnet/7749568.flat
Автор: varenikAA
Дата: 08.06.20
никак не введут

S>Ну, не знаю. С одной стороны, роли нафиг не нужны при наличии static abstract members в интерфейсах.
нее это как использоваие существующих операторов +,-,*,/,++, итд для алгеброических типов

S>С другой стороны, иногда хочется приклеить операторы к "чужим" типам.

S>Ну вот, скажем, если бы можно было как-то сделать B operator |(A value, Func<A, B> transform) => transform(value), то получился бы тот самый pipe operator, Math.PI | Math.Sin | Math.Cos == 1

Ну вот Roles для этого и нужны
и солнце б утром не вставало, когда бы не было меня
Отредактировано 29.01.2022 16:27 Serginio1 . Предыдущая версия .
Re: Сложность C# приближается к С++
От: Kolesiki  
Дата: 29.01.22 17:04
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Заметили ли вы, что C# уже не тот. Конечно, еще не догнал старшего собрата


эээ шта? КОГО ИМЕННО ты считаешь "старшим братом" C#? Жабу штоле??

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


Можно подумать, кого-то волнуют "начинающие с нуля"! Начинаешь — пиши на Васике и не прыгай!


S>Просто смотрю С++ и уже не кажется таким уж сложным


А, ну да... совсем простой! Если одни хелловорлды писать Ты чтоб так говорить, написал ХОТЬ ЧТО-ТО больше 10 тыщ строк?
Re[2]: Сложность C# приближается к С++
От: blacktea  
Дата: 29.01.22 17:18
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.


Нет, ну ты чего, 1.5 же, вроде Tiger назывался.
Re: Сложность C# приближается к С++
От: vaa  
Дата: 31.01.22 01:39
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Заметили ли вы, что C# уже не тот. Конечно, еще не догнал старшего собрата, но уже дофига концепций, которые вам могут показаться очевидными, но вот начинающим с нуля — доставят.

Сам язык простой. Еще проще процесс компиляции. Это его плюсы.
Большинство нововведений косметические. легко выводятся из базовых случаев.
Взять хотя бы новую фишку field в свойствах.
нет ничего сложного. новичок ее скорее всего не будет использовать.

S>Просто смотрю С++ и уже не кажется таким уж сложным, т.к. в C# навязано множество концепций, которые тоже не просты.

В плюсах плюсов только два
S>Лет через 15 будет тот же вавилон, имхо.

S>Как то все по одному сценарию идет.

Было бы неплохо, т.к. современные плюсы кажись попроще чем те что были в начале нулевых.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Сложность C# приближается к С++
От: Философ Ад http://vk.com/id10256428
Дата: 31.01.22 06:47
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Ну в принципе то читабельно. Это с непривычки.

S>Но таких конструкций можно и на любом языке
S> Конечно скобочки проставить лучше

прочитать можно всё что угодно. Я одно время бинари в hex-редакторе раглядывал. Только это не быстро.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[2]: Сложность C# приближается к С++
От: Философ Ад http://vk.com/id10256428
Дата: 31.01.22 06:52
Оценка:
Здравствуйте, Shtole, Вы писали:

S>Например, типичный программист не пишет алгоритмы и контейнеры, а пользуется ими. Можно всю жизнь программировать на Шарпе и не знать про ключевое слово `yield`. И не просто программировать, а продуктивно.


Даже не представляю как это возможно.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: Сложность C# приближается к С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.01.22 07:19
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>прочитать можно всё что угодно. Я одно время бинари в hex-редакторе раглядывал. Только это не быстро.


Ну это разные вещи. Давай разберем
public int F() =>
(A is B b) && (b.C is C) ? C.D ?? 1:FalseToNet ;

(A is B b) понятно есла A это тип B то b=a as B
(b.C is C) понятно

? тернарный оператор https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/conditional-operator
?? оператором null-объединения https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/null-coalescing-operator

Все очень понятно, вместо нагорождения кучи If else is as.
Просто желательно правильно форматировать, что бы взгляд быстро и правильно цеплялся
и солнце б утром не вставало, когда бы не было меня
Re[6]: Сложность C# приближается к С++
От: Философ Ад http://vk.com/id10256428
Дата: 31.01.22 07:26
Оценка:
Здравствуйте, Serginio1, Вы писали:


Ф>>прочитать можно всё что угодно. Я одно время бинари в hex-редакторе раглядывал. Только это не быстро.

S> Ну это разные вещи. Давай разберем

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

Чтобы там улучшить читабельность, там надо как минимум не писать в одну строку:

public int F() =>
   (A is B b) && (b.C is C)?
     C.D ??     1
   :FalseToNet ;


Чтение и правка такого кода порождает ошибки. Поубивал бы!
Всё сказанное выше — личное мнение, если не указано обратное.
Re[7]: Сложность C# приближается к С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 31.01.22 07:42
Оценка:
Здравствуйте, Философ, Вы писали:

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



Ф>>>прочитать можно всё что угодно. Я одно время бинари в hex-редакторе раглядывал. Только это не быстро.

S>> Ну это разные вещи. Давай разберем

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


Ф>Чтобы там улучшить читабельность, там надо как минимум не писать в одну строку:


Ф>
Ф>public int F() =>
Ф>   (A is B b) && (b.C is C)?
Ф>     C.D ??     1
Ф>   :FalseToNet ;
Ф>


Ф>Чтение и правка такого кода порождает ошибки. Поубивал бы!

Ну я говорю, что код нужно правильно форматировать. Проблема в итоге не в операторах! Не в усложнении языка.
А вот по форматированию лучше уже вырабатывать стандарты. Мне так больше нравится
public int F() =>
   (A is B b) && (b.C is C)
  ? C.D ?? 1
  :FalseToNet ;
и солнце б утром не вставало, когда бы не было меня
Отредактировано 31.01.2022 10:07 Serginio1 . Предыдущая версия .
Re[3]: Сложность C# приближается к С++
От: Shtole  
Дата: 31.01.22 08:29
Оценка:
Здравствуйте, Философ, Вы писали:

S>>Например, типичный программист не пишет алгоритмы и контейнеры, а пользуется ими. Можно всю жизнь программировать на Шарпе и не знать про ключевое слово `yield`. И не просто программировать, а продуктивно.


Ф>Даже не представляю как это возможно.


Это полбеды. Беда, когда не представляют люди из комитета по стандартизации.
Do you want to develop an app?
Re[5]: offtopic
От: Лось Чтостряслось СССР  
Дата: 31.01.22 09:42
Оценка:
Здравствуйте, Jack128, Вы писали:

S>>
S>> public int F() =>
S>>   (A is B b) && (b.C is C) ? C.D ?? 1:FalseToNet ;
S>>


простите, а выделенное что значит?
социализм или варварство
Re[2]: Сложность C# приближается к С++
От: mrTwister Россия  
Дата: 31.01.22 09:58
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.


Бери GO
лэт ми спик фром май харт
Re[7]: offtopic
От: CreatorCray  
Дата: 31.01.22 10:15
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Позволяет сократить код типа

А зачем?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[2]: Сложность C# приближается к С++
От: yenik  
Дата: 31.01.22 10:31
Оценка:
S>Можно всю жизнь программировать на Шарпе и не знать про ключевое слово `yield`. И не просто программировать, а продуктивно.

Только если програмировать в одиночку. А иначе молодые и горячие коллеги непременно ознакомят со всеми новейшими свистками и звночками.
Re[5]: Сложность C# приближается к С++
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 31.01.22 11:34
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Очень маловероятно, чтобы в новом проекте, не отягощенном наследственностью, в бы выбрал в качестве основного языка C++.

Pzz>Так что на мой взгляд, это скорее C++ умер, а не C. Разлагатся он будет, конечно, еще очень долго.

Если посмотреть, то всякие производительные библиотеки постоянно начинают писать на плюсах и нормально пишут. Потом для них пишут обёртки на Питоне и отдают математикам и data scientist'ам. С++ под капотом очень многих современных разработок, которые потом крутятся в том числе и на кластерах под управлением уже упоминавшегося Питона, но не только. И Альтернатив для плюсов тут не видно, никто ни на чём другом их и не пишет. Хотя новые языки разрабатываются под это дело регулярно.
Re[4]: Сложность C# приближается к С++
От: yenik  
Дата: 31.01.22 12:44
Оценка:
S>>>Можно всю жизнь программировать на Шарпе и не знать про ключевое слово `yield`. И не просто программировать, а продуктивно.
Y>>Только если програмировать в одиночку. А иначе молодые и горячие коллеги непременно ознакомят со всеми новейшими свистками и звночками.

S>Не соглашусь.


S>Это не свисток и не звонок, это языковой функционал, нужный для… как бы его назвать… менее прикладного кода (более системного или более хелперного). Перефразируя старый фильм, в командах может быть два типа людей, мой друг: одни заряжают yield, другие пользуются foreach.


Значит, у нас разный опыт. Я давно уже не сталкивался с теми, кто не использует yield, притом во вполне прикладном коде.
Re[5]: Сложность C# приближается к С++
От: Privalov  
Дата: 31.01.22 13:41
Оценка:
Здравствуйте, yenik, Вы писали:

Y>Значит, у нас разный опыт. Я давно уже не сталкивался с теми, кто не использует yield, притом во вполне прикладном коде.


Как я понимаю, yield тут только в качестве примера. Слово такое.

Могу привести другой пример, правда, ретроградский и из Фортрана. В нем есто несколько типов GOTO: безусловный, вычисляемый, назначаемый. О двух последних я знаю только то, что они существуют. Сам, когда работал на Фортране, их не использовал никогда. В реальном коде видел, может, дважды за всю жизнь.
Подобные редко используемые вещи можно найти в любом языке. В шарпе тоже.

P.S. yield, бесусловно, вещь очень удобная.
Re[2]: Сложность C# приближается к С++
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 31.01.22 14:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Например, те же Expression Trees не поддерживают почти ничего из добавленного после C# 3.0.


Похоже, сейчас слишком много вещей двигается коммюнити. И шота эти коммюнити большей частью как капризные дети.
Re[3]: Сложность C# приближается к С++
От: vsb Казахстан  
Дата: 31.01.22 18:02
Оценка:
Здравствуйте, mrTwister, Вы писали:

vsb>>В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.


T>Бери GO


Да, прикольный язык, если бы я сейчас начинал, возможно это был бы хороший совет, а так с 10 лет опыта на жаве уже сложно куда-то дёргаться. Хотя они там тоже шаблоны какие-то прикрутили и вроде как тоже кривовато, в общем подозреваю, что и Go не минет чаша сия, просто он пока слишком молодой.
Re[11]: offtopic
От: Философ Ад http://vk.com/id10256428
Дата: 31.01.22 18:28
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Вот не надо сравнивать с перлом и регулярными выражениями!

S> Что тут непонятно? все прекрасно читается!

Понятно всё, но читается не очень.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[12]: offtopic
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.02.22 07:55
Оценка:
Здравствуйте, Философ, Вы писали:

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


S>> Вот не надо сравнивать с перлом и регулярными выражениями!

S>> Что тут непонятно? все прекрасно читается!

Ф>Понятно всё, но читается не очень.

Ну что мне сказать стареешь. Элементарные вещи. Это как пришли замыкания в язык. Большинство по первости были категорически против.
Прошло время и все прекрасно их используют.
Но Проще конечно Pattrn matching вместо
public int F() =>
   (A is B b) && (b.C is C)
  ? C.D ?? 1
  :FalseToNet ;


напишем так
public int F() =>
 A swith
{
 B b when b.C is C => C.D ?? 1,
 _=>FalseToNet;
};


Так понятнее? Можно посмотреть эволюцию https://docs.microsoft.com/en-us/archive/msdn-magazine/2019/may/csharp-8-0-pattern-matching-in-csharp-8-0
и солнце б утром не вставало, когда бы не было меня
Отредактировано 01.02.2022 8:25 Serginio1 . Предыдущая версия . Еще …
Отредактировано 01.02.2022 8:13 Serginio1 . Предыдущая версия .
Re[4]: Сложность C# приближается к С++
От: Ночной Смотрящий Россия  
Дата: 01.02.22 08:11
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>а так с 10 лет опыта на жаве уже сложно куда-то дёргаться


... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Сложность C# приближается к С++
От: mrTwister Россия  
Дата: 01.02.22 08:17
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Да, прикольный язык, если бы я сейчас начинал, возможно это был бы хороший совет, а так с 10 лет опыта на жаве уже сложно куда-то дёргаться. Хотя они там тоже шаблоны какие-то прикрутили и вроде как тоже кривовато, в общем подозреваю, что и Go не минет чаша сия, просто он пока слишком молодой.


Go ценен не столько даже самим языком, сколько комьюнити, сформировавшим идиомы языка, в которых простота является основной ценностью. В Go все крутится вокруг простоты: стандартные библиотеки, 3-party библиотеки, и реальный production код. Просто для примера, это код http сервера на го:
package main
import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/hello", hello)
    http.ListenAndServe(":8090", nil)
}
func hello(w http.ResponseWriter, req *http.Request) {
    fmt.Fprintf(w, "hello\n")
}


В примере нет никаких тебе IoC контейнеров, фабрик, аннотаций, фреймворков. И там весь код такой: простой и прямолинейный. Все задачи принято решать в лоб, ценится максимально простое и прямолинейное решение.
лэт ми спик фром май харт
Отредактировано 01.02.2022 9:02 mrTwister . Предыдущая версия .
Re[4]: Сложность C# приближается к С++
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.02.22 08:18
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Да, прикольный язык, если бы я сейчас начинал, возможно это был бы хороший совет, а так с 10 лет опыта на жаве уже сложно куда-то дёргаться. Хотя они там тоже шаблоны какие-то прикрутили и вроде как тоже кривовато, в общем подозреваю, что и Go не минет чаша сия, просто он пока слишком молодой.

У меня 20 лет основной 1С был. Да немного на Delphi и C# программировал. Бросил 1С перешел на C# и не жалею.
Всегда можно параллельно что то изучать и в итоге сменить ориентацию (не половую)!
и солнце б утром не вставало, когда бы не было меня
Re[5]: Сложность C# приближается к С++
От: vaa  
Дата: 02.02.22 01:48
Оценка:
Здравствуйте, mrTwister, Вы писали:


T>Go ценен не столько даже самим языком, сколько комьюнити, сформировавшим идиомы языка, в которых простота является основной ценностью. В Go все крутится вокруг простоты: стандартные библиотеки, 3-party библиотеки, и реальный production код. Просто для примера, это код http сервера на го:

T>
T>package main
T>import (
T>    "fmt"
T>    "net/http"
T>)

T>func main() {
T>    http.HandleFunc("/hello", hello)
T>    http.ListenAndServe(":8090", nil)
T>}
T>func hello(w http.ResponseWriter, req *http.Request) {
T>    fmt.Fprintf(w, "hello\n")
T>}
T>


T>В примере нет никаких тебе IoC контейнеров, фабрик, аннотаций, фреймворков. И там весь код такой: простой и прямолинейный. Все задачи принято решать в лоб, ценится максимально простое и прямолинейное решение.


var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();


Вроде тоже неплохо, при этом кучу вещей(сертификат, пароль, привязки...) можно задать 3-я способами (env, cli, appsettings.json)
На практике за простотой может скрываться примитивность(т.е. банальное отсутствие кучи возможностей, доступных из коробки в других каркасах и библиотеках).
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[10]: Сложность C# приближается к С++
От: Shtole  
Дата: 02.02.22 07:01
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Никогда бы не подумал, что этот пример кода вызовёт такую дискуссию


А нам чем не заниматься, лишь бы не делом
Do you want to develop an app?
Re[7]: Сложность C# приближается к С++
От: vaa  
Дата: 03.02.22 06:20
Оценка:
Здравствуйте, amironov79, Вы писали:

A>А теперь собери это дело в контейнеры. С go можно уложиться в 6-7 Мб, с .net понадобится 100-200.


не смешите меня! 100Мб в наши дни это ни о чем. Если конечно вы хостеру за каждый байт не платите.
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.