Делать замечания медленнее компилируемых языках?
Этот вопрос был задан здесь несколько раз об интерпретируемом языке или R, но я ничего не нашел о скомпилированном языке, в частности C#.
Судя по тому, что я читаю, это кажется незначительным, но все же вызывает очень небольшую задержку в интерпретации языка: замедляют ли комментарии интерпретируемый язык?
Как насчет скомпилированных языков?! замедляют ли они только процесс компиляции, но не выполнение?
4 ответа:
При компиляции программы компилятор фактически выполняет:
- лексический анализ (токенизация)
- синтаксический анализ (парсинг)
- семантический анализ (проверка языковых правил)
- [Промежуточная] Генерация Кода
- оптимизация кода (необязательно)
Что касается комментариев, то они должны быть извлечены как лексемы на этапе лексического анализа и отброшены на этапе синтаксического анализа (разбора). Так что вы можете замедлить компилятор , но некод, сгенерированный .
Многиеинтерпретируемые языки часто выполняют первые два или три этапа и только затем выполняют, поэтомукомментарии не обязательно замедляют дажеинтерпретируемые языки .
Компиляторы имеют следующие фазы:
- лексический анализ
- синтаксический анализ
- семантический анализ
- генерация машинного независимого кода
- оптимизация кода
- генерация конечного кода
В лексическом анализе комментарии пропускаются, это в основном похоже на то, что вы ничего не писали.
Так что нет, они никак не влияют на производительность.
Комментарий будет исключен из лексического анализа фазы
Но если код с комментариями разбирается в фазе лексического анализа , это может занять больше времени, чем сравнение кода без комментариев, но комментарии не влияют на время выполнения
Почему бы вам не попробовать самим, посмотрите на приведенный ниже пример и запустите его.
class Program { static void Main(string[] args) { DateTime StartTime; DateTime EndTime; TimeSpan ExecutionTime; StartTime = DateTime.Now; for (int i = 0; i < 10000;) { i++; for (int j = 0; j < 100000;) { j++; } } EndTime = DateTime.Now; ExecutionTime = (EndTime - StartTime); Console.WriteLine("Phase 1 without comment done."); Console.WriteLine("Phase 1 start time : " + StartTime.ToString()); Console.WriteLine("Phase 1 end time : " + EndTime.ToString()); Console.WriteLine("Phase 1 Execution Seconds : " + ExecutionTime.TotalSeconds); Console.WriteLine("\r\n---------------------------------------------\r\n"); StartTime = DateTime.Now; for (int i = 0; i < 10000;) { i++; for (int j = 0; j < 100000;) { j++; // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. // SOME COMMENT. } } EndTime = DateTime.Now; ExecutionTime = (EndTime - StartTime); Console.WriteLine("Phase 2 with comment done."); Console.WriteLine("Phase 2 start time : " + StartTime.ToString()); Console.WriteLine("Phase 2 end time : " + EndTime.ToString()); Console.WriteLine("Phase 2 Execution Seconds : " + ExecutionTime.TotalSeconds); Console.ReadKey(); } }