Делать замечания медленнее компилируемых языках?


Этот вопрос был задан здесь несколько раз об интерпретируемом языке или R, но я ничего не нашел о скомпилированном языке, в частности C#.

Судя по тому, что я читаю, это кажется незначительным, но все же вызывает очень небольшую задержку в интерпретации языка: замедляют ли комментарии интерпретируемый язык?

Как насчет скомпилированных языков?! замедляют ли они только процесс компиляции, но не выполнение?

4 5

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();
    }
}

Нет компилятор не замедляет работу программы, он игнорирует все комментарии и берет сырой код.