Автор Беркут задал вопрос в разделе Другие языки и технологии
Какой язык программирования лучше изучать: C++ или C# ? и получил лучший ответ
Ответ от Krab Bark[гуру]
C# проще, C++ универсальнее, поддерживается на многих платформах, скомпилированные с него программы выполняются быстрее.
Ответ от =Serge=[гуру]
Ну как бы оба надо знать.
А начать лучше с С++.Вот с этой книжки:
Ну как бы оба надо знать.
А начать лучше с С++.Вот с этой книжки:
Ответ от Александр Свиридов[гуру]
Так программы на C# совсем не медленнее чем на С++.
Что острее? Кухонная ложка или кухонный нож?
Чем лучше обрабатывать садовый участок - граблями или лопатой?
Когда вы используете приложение на C# взаимодействующее с операционной системой, то оно вызывает код написанный на С++. Вызовы транслируются к WinAPI, и следовательно никакой код на C# не сможет работать дольше чем на С++.
Исключения есть, и они понятны.
1) в C# нет ассемблера, также как в С++ нет высокоуровневого объектно-ориентированного MSIL. Следовательно в C# вы не напишете код вычисляющий хэш CRC32 в 4-5 строк ассемблерных команд. Вы его напишете на C#, получите около 45 строк на MSIL. И пожалуетесь что тормозит. И верно. Ведь даже на С++ для этого применяют ассемблерную вставку.
2) в C# все сильно стандартизовано. Вы не можете создать ссылку на byte или boolean. И не можете создать ссылку на уничтоженный объект. Пока объект жив ссылка будет существовать. Когда ссылки не будет, то и объект умрет. Плюс это или минус? Нужно ли получать Exception при доступе к не правильной ячейки памяти?
3) в C# выделение памяти происходит при помощи виртуальной машины. А в C++ все вручную. Конечно, если вы бинарные поля упакуете и сделаете из них объекты то всё будет куда компактнее чем аналогичное в C#. Вопрос в том нужно ли вам это. Современные компы имеют от 4 до 8 гигабайтов оперативной памяти. И память продолжает дешеветь. Серверы продают с 32-64 гигами и выше.
о явных преимуществах C#
1) В С++ нет ASP . NET. А это ведущая технология создания веб сайтов. Нет также и WPF, нет silverlight, нет библиотеки 300 мегабайтов.
2) выделение памяти в С# происходит быстрее чем в C++, потому что она обычно упорядочена. При выдаче блока просто выдается следующий блок, а в С++ сперва ищется свободное место.
3) разработка C# быстрее, там и отладка проще, и механизмы выбрасывания исключений упрощены. Нет множественного наследования, нет ссылок на примитивные типы данных, нет проблем с мертвыми ссылками.
итого.
Если у вас целевая аудитория машины с 2 и более гигами памяти то выбирайте C#.
Если вы хотите писать код под процессоры с 8 кб памяти то используйте Си.
Если у вас цель создание GUI - вам в C#.
Если вы делаете только консольные приложения - достаточно и C++.
Если вы сторонник стандартизации и использования готовых программ - вам в C#. Там уже 300 мегабайтов кода.
Если вы сами хотите писать сортировку, искать как реализовать SSL. как сделать HTTP сервер.. . тогда вам в C++.
Кстати, ЕХЕ-шник у C# размерами от 8 кб, а у С++ наверное того меньше. Но С++ не имеет своей библиотеки, в программу придется затолкать тонну библиотек. И ваше простое приложение обязательно будет весить 5 - 40 мб.
Для C# это не реально много. Ведь там есть 300 мб готового кода, который предустановлен на все компьютеры. Сложная программа может занимать 10-20 Кб...
Так программы на C# совсем не медленнее чем на С++.
Что острее? Кухонная ложка или кухонный нож?
Чем лучше обрабатывать садовый участок - граблями или лопатой?
Когда вы используете приложение на C# взаимодействующее с операционной системой, то оно вызывает код написанный на С++. Вызовы транслируются к WinAPI, и следовательно никакой код на C# не сможет работать дольше чем на С++.
Исключения есть, и они понятны.
1) в C# нет ассемблера, также как в С++ нет высокоуровневого объектно-ориентированного MSIL. Следовательно в C# вы не напишете код вычисляющий хэш CRC32 в 4-5 строк ассемблерных команд. Вы его напишете на C#, получите около 45 строк на MSIL. И пожалуетесь что тормозит. И верно. Ведь даже на С++ для этого применяют ассемблерную вставку.
2) в C# все сильно стандартизовано. Вы не можете создать ссылку на byte или boolean. И не можете создать ссылку на уничтоженный объект. Пока объект жив ссылка будет существовать. Когда ссылки не будет, то и объект умрет. Плюс это или минус? Нужно ли получать Exception при доступе к не правильной ячейки памяти?
3) в C# выделение памяти происходит при помощи виртуальной машины. А в C++ все вручную. Конечно, если вы бинарные поля упакуете и сделаете из них объекты то всё будет куда компактнее чем аналогичное в C#. Вопрос в том нужно ли вам это. Современные компы имеют от 4 до 8 гигабайтов оперативной памяти. И память продолжает дешеветь. Серверы продают с 32-64 гигами и выше.
о явных преимуществах C#
1) В С++ нет ASP . NET. А это ведущая технология создания веб сайтов. Нет также и WPF, нет silverlight, нет библиотеки 300 мегабайтов.
2) выделение памяти в С# происходит быстрее чем в C++, потому что она обычно упорядочена. При выдаче блока просто выдается следующий блок, а в С++ сперва ищется свободное место.
3) разработка C# быстрее, там и отладка проще, и механизмы выбрасывания исключений упрощены. Нет множественного наследования, нет ссылок на примитивные типы данных, нет проблем с мертвыми ссылками.
итого.
Если у вас целевая аудитория машины с 2 и более гигами памяти то выбирайте C#.
Если вы хотите писать код под процессоры с 8 кб памяти то используйте Си.
Если у вас цель создание GUI - вам в C#.
Если вы делаете только консольные приложения - достаточно и C++.
Если вы сторонник стандартизации и использования готовых программ - вам в C#. Там уже 300 мегабайтов кода.
Если вы сами хотите писать сортировку, искать как реализовать SSL. как сделать HTTP сервер.. . тогда вам в C++.
Кстати, ЕХЕ-шник у C# размерами от 8 кб, а у С++ наверное того меньше. Но С++ не имеет своей библиотеки, в программу придется затолкать тонну библиотек. И ваше простое приложение обязательно будет весить 5 - 40 мб.
Для C# это не реально много. Ведь там есть 300 мб готового кода, который предустановлен на все компьютеры. Сложная программа может занимать 10-20 Кб...
Ответ от Ёемен Солдатов[гуру]
как по мне, так некорректное сравнение. сами выбирайте что вам нужно. попробуйте и то и другое, а потом решите, что больше нравится. ссылки на объекты и в C# возможны. но но если они на unmanaged объекты, то чуток сложнее начинающим, путаются. насчет crc32, можно использовать Mono.SIMD, для ускорения или unmanaged код. да и вообще, на любую фразу: "а вот там это быстрее... ", можно найти решение как сделать это быстро тут. Просто знание языка хорошее нужно, знание ОС, время.
как по мне, так некорректное сравнение. сами выбирайте что вам нужно. попробуйте и то и другое, а потом решите, что больше нравится. ссылки на объекты и в C# возможны. но но если они на unmanaged объекты, то чуток сложнее начинающим, путаются. насчет crc32, можно использовать Mono.SIMD, для ускорения или unmanaged код. да и вообще, на любую фразу: "а вот там это быстрее... ", можно найти решение как сделать это быстро тут. Просто знание языка хорошее нужно, знание ОС, время.
Ответ от Norton[гуру]
Мой вам совет изучайте С++, но не на VS, а на Borland С++ builder. Потом тихонько езжайте на gcc в Линукс. А еще я бы порекомендовал в дальнешем поинтересоваться Java
Начав изучать C# после C++ (просто C# появился уже потом) , я очень долго и много плевался:
1) Постоянное битье по рукам линейкой за отсутсвие break в case, за присваивание в if и т. д. и т. п. порождают примерно те же ощущения, как после XP перейти на Vista.
2) Стояла у меня задача обрабатывать сканы чертежей на А0-А3 формате. Кучи оберток на GetPixel() изрядно отравили мне жизнь при написании фильтров.
3) Запрещенное неявное присваивание вызывает скрежет зубовный и гору рефакторинга, когда вы пытаетесь, что-либо прицепить из ранее написанного или стороннего.
4) Кроссплатформенность С# на микрософте и заканчивается.
C# хорош для: - написания мелких программок, большая часть которых занимает интерфейс пользователя. Различные утилитки, учебные задания, АРМы на достать 3 параметра из БД.
Плох для ресурсоемких приложений, для различных промышленных применений, где объем продаж мал во времени, и увы каждые 3 года вам придется переезжать на новую винду, кривая реализация алгоритмов в .NET
С++ хорош - огромные залежи открытых исходников по всему интернету, изящные конструкции максимально приближенные к машинному коду, на любую новую платформу первым делом поселяется C/C++ компилятор.
минусы - в виду своей универсальности написание пользовательских интерфейсов весьма трудоемко и мучительно.
Мой вам совет изучайте С++, но не на VS, а на Borland С++ builder. Потом тихонько езжайте на gcc в Линукс. А еще я бы порекомендовал в дальнешем поинтересоваться Java
Начав изучать C# после C++ (просто C# появился уже потом) , я очень долго и много плевался:
1) Постоянное битье по рукам линейкой за отсутсвие break в case, за присваивание в if и т. д. и т. п. порождают примерно те же ощущения, как после XP перейти на Vista.
2) Стояла у меня задача обрабатывать сканы чертежей на А0-А3 формате. Кучи оберток на GetPixel() изрядно отравили мне жизнь при написании фильтров.
3) Запрещенное неявное присваивание вызывает скрежет зубовный и гору рефакторинга, когда вы пытаетесь, что-либо прицепить из ранее написанного или стороннего.
4) Кроссплатформенность С# на микрософте и заканчивается.
C# хорош для: - написания мелких программок, большая часть которых занимает интерфейс пользователя. Различные утилитки, учебные задания, АРМы на достать 3 параметра из БД.
Плох для ресурсоемких приложений, для различных промышленных применений, где объем продаж мал во времени, и увы каждые 3 года вам придется переезжать на новую винду, кривая реализация алгоритмов в .NET
С++ хорош - огромные залежи открытых исходников по всему интернету, изящные конструкции максимально приближенные к машинному коду, на любую новую платформу первым делом поселяется C/C++ компилятор.
минусы - в виду своей универсальности написание пользовательских интерфейсов весьма трудоемко и мучительно.
Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Какой язык программирования лучше изучать: C++ или C# ?