Сравнение C# с Python/C++/Java: почему C# мой любимый язык программирования?

แชร์
ฝัง
  • เผยแพร่เมื่อ 7 ก.ย. 2024
  • Делюсь историей и сравниваю C# с Python/C++/Java.
    Контакты:
    E-mail:
    constantine.ryzhikov@gmail.com
    Skype:
    volibor4444
    VK:
    johnberden
    Facebook:
    / kostiantyn.ryzhykov

ความคิดเห็น • 6

  • @nanoqsh
    @nanoqsh 5 หลายเดือนก่อน +4

    В своё время ценил шарп по подобным причинам, изложенным в ролике. Это довольно хороший компромис, немного пожертвовать производительностью и памятью, но получить безопасный и удобный язык.
    Но потом я узнал про Rust. В нём не нужно жертвовать ни производительностью, ни безопасностью. Язык safe, но при этом позволяет делать всякие низкоуровневые штуки. Скажем, как и в Си ты сам решаешь, где размещать экземпляр объекта, на стеке или в куче (в C# насколько я знаю это свойство привязывается к типу). Можешь брать ссылку на объекты, где бы они ни были, хоть на стеке, хоть куче. Можешь как и в Си экономить аллокации, скажем, нужна тебе подстрока - тогда просто возьми ссылку на уже существующую без необходимости выделять новую строку в куче, а потом копировать её (в Си даже, порой, сделать это сложнее из за нул-терминации строк). И так далее, но при этом компилятор статически проверяет что всё safe. Более того, компилятор ещё и помогает писать многопоточный код, отслеживая, какие типы можно передавать в другие потоки, не будет ли где-то гонки данных из за многопоточной записи и так далее.
    И что наиболее важно для производительного языка, в расте как и в C++ есть понятие zero cost abstractions - то есть на расте можно довольно эффективно выстраивать оптимальные абстракции, которые при компиляции собираются в максимально эффективный ассемблер, словно ты руками написал одну длинную процедуру. Для примера возьмём лямбду из C# - чтобы её использовать мне нужна аллокация, мне нужно менеджить эту аллокацию сборщиком мусора, мне нужно делать виртуальные вызовы чтобы вычислить результат этой лямбды. Всё это требует какие-то дополнительные расходы памяти и перфоманса. В расте это не так. Лямбда (там это называется замыканиями/кложурами) размещает всё окружение по значению (то есть обычно в стеке) не требуя аллокации, никакой виртуальный вызов не требуется - раст статически знает тип лямбды. Сборщика мусора в расте и вовсе нет, так что ещё одно потенциальное снижение перфоманса отпадает. В итоге когда я использую разные абстракции, скажем итераторы и лямбды внутри, то в итоге компилятор генерирует мне такой же код, как если бы я написал его на обычных циклах, без какой-либо высокоуровневой магии.
    Что касается кроссплатформенности - она изумительна. Я собирал приложения под разные десктоп системы, под андроид и даже под браузер на wasm, также раст отлично подходит чтобы запускать его в embedded среде вообще без ОС. В общем, фактически, можно писать код под любую платформу.
    Но, конечно, ни один язык не обходится без недостатков. Я бы выделил два основных:
    Первое, язык довольно сложный, требует освоения довольно специфичных вещей. Скажем, лайфтаймы, система владения, понимание как работать с борроу чеккером и так далее. Основная сложность это переучиться писать код так, чтобы он лучше вписывался в систему владения и проверки заимствований. Например, по возможности избавляться от разделяемого и одновременно изменяемого состояния, что на самом деле плохо не только для раста, но и в целом сложнее отлаживать и при этом оно вредит производительности (скажем, такой код сложнее распараллелить).
    Второй недостаток: на данный момент не так много готовых библиотек, в целом язык ещё только развивается. Но потенциал у языка огромен

  • @user-jc1rd7xp1q
    @user-jc1rd7xp1q 5 หลายเดือนก่อน +1

    Мужик,удачи тебе во всем!)

  • @user-gj8fv6ol1l
    @user-gj8fv6ol1l 3 หลายเดือนก่อน

    Спасибо!

  • @ZugDuk
    @ZugDuk หลายเดือนก่อน

    Есть один фатальный недостаток, перечеркивающиц все - корпорация зла.

    • @BlackenedPoison
      @BlackenedPoison 15 วันที่ผ่านมา

      Корпорация зла в последние годы лояльная к опенсорсу, в том числе открыла .NET и C#, насколько я понимаю

  • @alexreich8711
    @alexreich8711 2 หลายเดือนก่อน

    Наконец-то адекватное сравнение ЯП