Действительно ли там какой-либо причиной является программист окон .NET потребности больше изучать C или C++?

Кто-то может описать то, что способствует C, или программист на C++ имел бы по программированию .NET при разработке для Windows?

19
задан codaddict 26 February 2010 в 04:41
поделиться

14 ответов

Есть поговорка, что каждое достаточно сложное приложение C в конечном итоге переопределяет части C ++. То же самое и с программами C ++ и более высокими языками. Изучение C и C ++ косвенно сделает вас лучшим программистом, помогая глубже понять, как на самом деле работает .Net и почему дизайнеры сделали свой выбор.

Программист настолько хорош, насколько хорошо разбирается в нижележащих слоях. .Net довольно хорошо абстрагирует многие проблемы архитектуры машины, но это не идеально. На уровне абстракции все еще есть утечки, когда понимание проблем более низкого уровня поможет вам принимать правильные решения на уровне .Net.

Краткий неполный список этих проблем включает:

  1. Взаимодействие с машинным кодом, особенно с Windows API
  2. Согласованность кэша ЦП (если вы мне не верите, погуглите слайды из презентации PLINQ на PDC '09)
  3. Производительность типа значения по сравнению с производительностью ссылочного типа (это прочно укоренилось в мире .Net, но изучение C / C ++ делает различия между выделением стека и кучи в некоторых отношениях более явными).
  4. Проблемы с планированием ядра (например, почему выделять 1000 потоков - плохая идея).
  5. Понимание сборщика мусора также лучше всего достигается путем написания нескольких схем управления памятью на языках, не использующих сборщик мусора.
29
ответ дан 30 November 2019 в 02:29
поделиться

C ++ часто более безопасен из-за автоматического управления ресурсами. Разница в производительности (в пользу C ++) обычно не имеет значения, но использование памяти на самом деле может (GC тратит много RAM).

-1
ответ дан 30 November 2019 в 02:29
поделиться

Если вы планируете выполнить нетривиальное взаимодействие, вам может потребоваться изучение языка C + +/CLI.

-121--2182179-

Функция os.popen просто возвращает файлообразный объект. Вы можете использовать его так:

import os

process = os.popen('gcc -E myHeader.h')
preprocessed = process.read()
process.close()

Как говорили другие, вы должны использовать подпроцесс.Popen . Он разработан как более безопасная версия os.popen . Документы Python содержат раздел , описывающий способ переключения .

-121--2368876-

Другие стороны сообщили о необходимости взаимодействия с Windows API, но я также нахожу ошибку в предположении, что вы можете гарантировать (или что вы обязательно захотите быть ограниченным) разработку .NET на всю оставшуюся карьеру.

.NET - отличная рамка, но маловероятно, что она будет последней. И, как бы хорошо это ни было, это не лучший выбор для каждого проекта.

Изучение основ - и я бы рассмотрел основные основы C/C + + - открывает путь для любого количества путей, включая .NET и все, что представляет собой Next Great Framework.

2
ответ дан 30 November 2019 в 02:29
поделиться

В C ++ есть лучшие библиотеки для многих менее распространенных задач. В частности, связанные с математикой, где большое преимущество дает доступ к SSE и некоторым другим оптимизациям для конкретного процессора. Существует множество протоколов и стандартов, основанных на C ++, COM в ближайшее время никуда не денется, а сложное взаимодействие требует даже более эзотерических знаний, чем просто написание C ++.

C ++ становится устаревшим, но путь будет долгим.

Что касается общей производительности - хотя можно писать более быстрый код C ++, чем эквивалент .NET, большинство программ на C ++ этого не делают, а многие на самом деле работают медленнее.

А для ответов на «понимание основ» ... выберите для этого язык без метапрограммирования шаблонов. Пожалуйста.

0
ответ дан 30 November 2019 в 02:29
поделиться

Вот несколько слов, которые сразу приходят мне в голову:

  1. Скорость.
  2. Переносимость.
  3. Избегайте установки .NET.
  4. В зависимости от того, что вы делаете, C ++ может быть более продуктивным.
  5. Вам никогда не придется спорить, что ваш стоматолог более болезнен, чем P / Invoke.
4
ответ дан 30 November 2019 в 02:29
поделиться

Возможно, вам захочется изучить C ++ / CLI, если вы планируете выполнять какое-либо нетривиальное взаимодействие.

0
ответ дан 30 November 2019 в 02:29
поделиться

.NET отлично подходит для проектов на стороне сервера, но использование .NET для кода на стороне клиента (приложения WinForm или службы Windows) может быть уместным не во всех случаях. .NET имеет большую среду выполнения, занимает значительный объем памяти и требует значительного времени для загрузки. Поэтому, если ваше приложение или сервис не является основным инструментом для конечного пользователя (например, программное обеспечение для резервного копирования), .NET может быть не лучшим выбором.

1
ответ дан 30 November 2019 в 02:29
поделиться

Если вы программист .Net Windows и хотите когда-нибудь работать в Google (не так ли?), То вам будет полезно изучить C ++.

1
ответ дан 30 November 2019 в 02:29
поделиться

Хотя я взял на себя обязательство впредь программировать только на .NET, я знаю, что будут случаи, когда мне придется использовать interop для использования библиотек сторонних производителей, и, вероятно, мне также понадобится возможность копаться в их коде для исправления ошибок.

3
ответ дан 30 November 2019 в 02:29
поделиться

Честно говоря, это будет полезно только тогда, когда вам нужно получить доступ к Win32 API, но большинство таких сигнатур доступны в Интернете (например, pinvoke.net), и каждая новая версия .NET framework включает все больше оберток для часто используемых вызовов Win32 API.

Знание языка C/C++ имеет смысл в общей схеме вещей, но если вы не используете его каждый день, вы быстро потеряете знания!

3
ответ дан 30 November 2019 в 02:29
поделиться

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

10
ответ дан 30 November 2019 в 02:29
поделиться

Если вы когда-нибудь захотите быть чем-то большим, чем пони с одной уловкой, изучите C и C ++.

Однажды Windows уйдет, потому что это то, что происходит с корпорациями и продуктами. Возможно, мы получим Skylights вместо Microsoft, и .NET преобразуется в другое - .NEW. ( как хотите, назовите его ).

Где тогда ваш .NET? Его больше нет, как и весь ваш опыт - вы стали программистом нового поколения на COBOL, программистом, работающим только с устаревшими технологиями.

Единственный способ оставаться на вершине кривой - это знать принципы всего, от сборки до SQL.

Но это , затем . А как насчет сейчас ? Вы получаете возможность программировать игры Triple-A для Windows, уметь писать драйверы для Windows, уметь понимать мир Windows на уровне ядра, уметь разбираться в деталях недостатков безопасности для Windows. в состоянии поддерживать старых приложений для Windows, чтобы иметь возможность работать с фирмами, использующими C ++.

И этих причин - ИМО - достаточно.

0
ответ дан 30 November 2019 в 02:29
поделиться

Насколько я понимаю, .NET - это основа для поддержки языков программирования, и она сама по себе, а не язык. Существует Visual Basic .NET , Visual C .NET и т. Д.

Я предлагаю продолжить работу с C и C ++, поскольку вы никогда не узнаете, когда .NET будет заменена другой технологией. Пока что C и C ++ меняются медленно и требуют утверждения изменений в языке консорциумом. Вы также можете не ограничивать себя и изучать другие полезные языки, такие как Java, Perl, PHP и LISP. Я настоятельно рекомендую LISP, поскольку он полностью отличается от C или C ++ и просветит вас.

0
ответ дан 30 November 2019 в 02:29
поделиться

Понимание C и C ++ действительно заставляет вас больше ценить .NET и быть более осторожными и осознавать ответственность за объект, управление памятью и концепцию производительности. Вы лучше почувствуете, что может произойти под капотом, когда вы вызовете метод во фреймворке, и он просто сделает всю работу за вас.

Некоторое параллельное программирование для максимизации мощности оборудования, такого как многоядерный ЦП и графический процессор, по-прежнему ограничено языками более низкого уровня, такими как C / C ++. Чтобы выбрать один для изучения сейчас, я займусь C ++. C ++ является преемником C и имеет более продвинутые и современные концепции, встроенные в него. Я лично изучаю C ++ и обнаружил, что переключаться и работать в сложной среде C было довольно легко.

1
ответ дан 30 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: