Почему С# компилируется намного быстрее, чем С++?

Я замечаю на той же машине, что для С# требуется намного меньше времени, чем С++. Зачем?

ПРИМЕЧАНИЕ 1. Я не сделал никакого научного теста.

ПРИМЕЧАНИЕ 2. Прежде чем кто-нибудь скажет, что это не связано с программированием, я реализую парсер, я нахожу, что я могу сделать, начиная с увеличения скорости компиляции.

ПРИМЕЧАНИЕ 3. У меня есть аналогичный вопрос Почему компиляции занимают так много времени?. Этот вопрос задает конкретную разницу от C/С++ до С#. Очевидно, что простой язык будет быстрее компилироваться, чем сложный язык, но C и С# являются сложными языками.

мой вынос: 1) C/С++ является SLOW из препроцессора и заголовков. 2) много заголовков заставляет анализировать намного больше данных. особенно когда каждый файл может использовать препроцессор, может изменить код 3) С# отложить некоторую компиляцию до запуска программы 4) Инструкции IL простые, машина не

Ответ 2

Существует два отдельных вопроса: количество фаз обработки и сложность таргетинга.

Типичная компиляция С++ включает в себя несколько этапов (хотя они могут выполняться одновременно), где Preprocessor обрабатывает директивы и макросы, тогда сам компилятор С++ обрабатывает полученный код. Это довольно распространено для препроцессора для генерации вывода, который значительно больше, кода, который все нужно проанализировать и обработать фактическим компилятором.

Кроме того, имейте в виду, что компилятор С++ будет ориентироваться на машинный язык x86 или x64 - обрабатывать всю оптимизацию спереди и пытаться наилучшим образом использовать аппаратное обеспечение, которое не оптимизировано при разработке стиля OO.

Напротив, компилятор С# ориентирован на Microsoft Intermediate Language (MSIL) - платформу с более высоким уровнем машинного кода, предназначенную для разработки OO. Многие из конструкций, предоставляемых С#, отображаются непосредственно в инструкциях IL, что делает компиляцию очень простой. Справедливая часть оптимизации и другой деятельности откладывается до запуска фактической программы, после чего она оптимизирована для точной доступной машины.

Ответ 3

Потому что С++ компилируется в машинный код, а С# - в байтовый код. Вы заметили задержку при первом запуске своей программы .NET. Это когда байтовый код получает JITed (скомпилирован в машинный код).

Ответ 4

Я думаю, что это, вероятно, из-за AMOUNT разбора, который он должен делать, а не от скорости самого анализатора.

С++ обычно использует препроцессор C, который извлекает множество файлов include (как другие предложили, а другой вопрос содержит много таких ответов). Это раздувает количество кода для разбора.

Итак, если вы сравниваете их для написания парсера... узнайте, что у вас не должно быть файлов типа .h-style:)