Знайте, о чем вы говорите

Из Эти современные языки программирования заставят вас страдать, автор: Илья Суздальницкий

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

👎 Мультипарадигма?

C # утверждает, что является многопарадигмальным языком. В частности, C # утверждает, что поддерживает функциональное программирование. Я должен не согласиться, наличие поддержки первоклассных функций просто недостаточно для того, чтобы язык назывался функциональным.

Какие функциональные возможности должен иметь язык? По крайней мере, встроенная поддержка неизменяемых структур данных, сопоставление с образцом, оператор конвейера для композиции функций, алгебраические типы данных.

В C # есть полный набор неизменяемых структур, включая неизменяемые записи. Он также имеет сопоставление с образцом для простой декомпозиции выражений переключателей. Операторы каналов определенно не являются требованием для функционального программирования и, на мой взгляд, препятствуют принятию FP. Кроме того, в C # уже много лет есть кортежи, предоставляющие типы продуктов. Дискриминационные союзы по-прежнему отсутствуют, но находятся в коротком списке для C # 10.

👎 Параллелизм

C # был создан в эпоху одноядерных вычислений и, как и Java, имеет лишь элементарную поддержку параллелизма.

Это очень и очень неправильно. C # имеет async / await начиная с C # 5, это модель параллелизма, которую с тех пор добавляет весь остальной мир (кроме GO). Согласно Stack Overflow, F # представил async / await в 2010 году, а затем он был добавлен в C # в 2012 году. До этого не было известных случаев использования этого шаблона в производственном языке.

👎 нули

В C # все ссылки допускают значение NULL.

Опять же, очень и очень неправильно. В C # 8 введены «ссылочные типы, допускающие значение NULL», функция с очень плохим названием, которая фактически означает, что вы можете указать, что все ссылки не должны иметь значение NULL, если переменная не определена с помощью оператора допускающего значение NULL, который принудительно применяется компилятором. .

👎 Неизменность

Не имеет встроенной поддержки неизменяемых структур данных.

Еще раз очень неправильно. В C # есть неизменяемые объекты записи.

public record Point(float x, float y);
// or
public record Point
{
    public float X { get; init; }
    public float Y { get; init; }
}

Эти неизменяемые объекты обрабатываются сопоставлением с образцом, деконструкцией, операциями с и т. Д.

Вывод

Если вы собираетесь заявить, что C # - это мусор, то знайте, о чем вы говорите, прежде чем писать статью о кликбейтах.