У чому різниця C і C#

Тут усі пишуть про відмінності. Ризикну написати про подібності.

По-перше, про що б не писала Олена і Сі + і C # - обидві мови загального призначення. Навіть більше, виявляється - C# жодного разу не заточений під об'ємну бібліотеку (або фреймворк) .NET, проте з ним набагато простіше. Але якщо таки враховувати .NET, то для Сі++ є Boost і Qt, тому тут швидше паритет - бібліотек для обох вистачає. По-друге, складність розробки на Сі ++ часто перебільшена. Хіба тільки дисципліни треба якнайбільше - вистрілити в ногу тут простіше. Однак при цьому C++ буде трохи більш гнучкий і без танців з бубнами unmanaged код не запустити на C #. Якщо раптово буде потрібно. По-третє, обидві мови, якщо вони загального призначення, таки мультипарадигмальні. Тобто вони реалізують більшість практик. І хоча Сі++ розвивається досить повільно, зараз Сі++ різко наздогнав C# у плані нереалізованих фіч (тут як мінімум лямбди). Та й метапрограмування у Сі++ більше буде (нахабна брехня). По-четверте, обидві мови кросплатформені. Втім, C# буде більш кроссплатформенний, ніж Сі++. Хіба тільки той же Qt різко стер кордону, але це не означає майже нічого - C # компілюється в той же CIL для всіх платформ, Сі + + - в абсолютно різний код для різних платформ (i386, amd64, ARM Cortex-AXX). Нарешті, по-п'яте, синтаксис у них справді дуже схожий. Обидві мови належать до сімейства Алгол-подібних, так що і брейси, та решта дужок тут мають приблизно одне призначення.

Відмінності, які начебто роблять мови зовсім різними, таки менш принципові тому рівні абстракції, у якому було поставлено питання. А відмінності справді колосальні: C# - managed код, що означає, що скомпільований код буде виконуватися не на пряму в CPU, а наспеціальній віртуальній машині. Це з'їдає продуктивність, але полегшує перенесення коду. Ну і потім, C# - напівпропрієтарна відповідь Java (що цікаво, тому що виходить, що C# - більш вільний, ніж Java), яка була створена як заміна складного та небезпечного C++ у тому числі.

Загалом, як людина, яка почала давно з C#, продовживши C++ і по дорозі вивчивши Python, Java, D та іншу ООП-нісенітниця можу з упевненістю сказати, що різниці загалом і немає. Тобто доведеться трохи перейнятися трохи іншою філософією і з'ясувати, які проблеми новішу мову намагався вирішити. Але якщо підходити до цього, як підійшов lookid, то це швидше не як вивчати мови однієї мовної групи, а як вивчати ту саму мову в різний час або в різних сферах.

Чому так? Тому що ООП. Воно як би ОВП, нічого надприродного жодна мова не пропонує, це не Haskell, і тим більше не Brainfuck. Отже, принципово спільні речі в них будуть. Те підмножина, що реалізує машину Тьюринга – у них спільні. Самі подивіться: цикли, розгалуження, передача аргументів, арифметика. З невеликими правками все абсолютно однакове. Так, Дмитро має рацію, traits на C# не повториш, бо та аналогія буде вже не traits, але. Це вже [programming_language] related, тобто це спроба впоратися з особливостями.

Трохи пруфів: особисто я пруф, що ходить. Знаючи C++ і C# і трохи Java, я просто почав програмувати на Python. При тому, що Python навіть алголоподібним не належить. А все тому, що логіка одна і та ж, хоча відмінностей між Python і C(++#) набагато більше. Але не читаючи майже ніяких туторіалів, пройшовшись галопом європами з документацією зараз я знаю python достатньо для серйозного проекту.

UPD. Щодо метапрограмування. Такий рантаймрефлекшн шарпа тягне. І хоча ні макросів, ні шаблонів нічого. Але змінювати код на льоту – це вже дуже круто. По дефолту плюси так не вміють, і хоча шаблони з макросами тягнуть, сильно, дуже сильно тягнуть і витягують його, Сі++, з дна, треба визнати - рефлешн у шарпа буде цікавішим. Вибачаюсь за дезу.