
Знайте, о чем вы говорите
Из Эти современные языки программирования заставят вас страдать, автор: Илья Суздальницкий
Если вы собираетесь уничтожить язык программирования, вы должны знать, о чем говорите. В связанной статье автор говорит о 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 # - это мусор, то знайте, о чем вы говорите, прежде чем писать статью о кликбейтах.