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

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

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

Как то все по одному сценарию идет.
Отредактировано 29.01.2022 6:00 Shmj . Предыдущая версия .
Re: Сложность C# приближается к С++
От: vsb Казахстан  
Дата: 29.01.22 06:10
Оценка: :))
В Java тоже сложности накручивают потихоньку. Видимо это жизненный цикл любого языка. Я бы с удовольствием писал на Java 1.4-подобном языке. Считаю, что больше этого ничего не нужно.
Re[2]: Сложность C# приближается к С++
От: Shmj Ниоткуда  
Дата: 29.01.22 06:59
Оценка: :)))
Здравствуйте, vsb, Вы писали:

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


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

Но это происходит медленнее, чем добавление новых фич.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Сложность C# приближается к С++
От: vsb Казахстан  
Дата: 29.01.22 09:30
Оценка: +4
Здравствуйте, Shmj, Вы писали:

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


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


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

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


Я считаю, что C де факто умер и заменён С++. Кто его там развивает, зачем, это вообще непонятно. По сути сейчас это какое-то достаточным произвольным образом взятое подмножество С++ (с кучкой несовместимостей, я в курсе, сути это не меняет).
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[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[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[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[2]: Сложность C# приближается к С++
От: rudzuk  
Дата: 29.01.22 12:30
Оценка: +3 :))) :)
Здравствуйте, Serginio1, Вы писали:

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


Ога-ога,
Автор: rudzuk
Дата: 09.09.20
читабельность прет! Надо больше сокращать! Долой синтаксический оверхед!
avalon/3.0.0
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[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: Сложность 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[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: Сложность C# приближается к С++
От: blacktea  
Дата: 29.01.22 17:16
Оценка: :)
Здравствуйте, Shmj, Вы писали:

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


C# 2.0 был практически идеален.
Re[2]: Сложность C# приближается к С++
От: blacktea  
Дата: 29.01.22 17:18
Оценка:
Здравствуйте, vsb, Вы писали:

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


Нет, ну ты чего, 1.5 же, вроде Tiger назывался.
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 и всё нормально будет читаться.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.