Когда пробелы влияют на производительность?

Это то, о чем я всегда задумывался, так что здесь.

При написании кода меня / учили расставлять строки, комментировать их и т. Д... для улучшения читабельности (как я полагаю, большинство из нас). Я, очевидно, не рассматриваю это как какую-либо проблему, но это заставило меня задуматься, если компилятор / интерпретатор игнорирует все эти пробельные и прокомментированные разделы или что-то еще, насколько это влияет на его производительность?

По общему признанию, я не знаю много о том, как работает компилятор - только основные понятия. Тем не менее, у меня есть справедливая идея, что для того, чтобы иметь возможность "игнорировать пробелы", ему сначала нужно будет его идентифицировать (по крайней мере), и это требует работы, а значит и времени.

Тогда я подумал, что насчет пробелов или комментариев на экстремальных уровнях? Скажите, миллионы или миллиарды их разделов?

Наверное, я задаю вопрос: в какой момент (т. Е. Крайний уровень) игнорируемые участки кода повлияют на способность компилятора / интерпретатора дать своевременный результат и, следовательно, повлияют на восприятие пользователя?

Благодарю.

7 ответов

Решение

Попробуй это:

Влияют ли комментарии на производительность Perl?

Редактировать для комментария.

Простой пример использования мира приветствия в Scheme с различными миллионами строк комментариев:

netbsd1# ls -l file* 
-rw-r--r--  1 root  wheel        1061 Mar 11 00:01 file.out
-rw-r--r--  1 root  wheel      102041 Mar 11 00:01 file1.out
-rw-r--r--  1 root  wheel    10200041 Mar 11 00:01 file2.out
-rw-r--r--  1 root  wheel  1020000041 Mar 11 00:03 file3.out
netbsd1# for i in file*
> do
> echo $i
> time ./scm $i
> done
file.out
hello world
    0.06s real     0.01s user     0.01s system
file1.out
hello world
    0.03s real     0.01s user     0.02s system
file2.out
hello world
    0.64s real     0.28s user     0.30s system
file3.out
hello world
   61.36s real    11.78s user    41.10s system
netbsd1# 

Очевидно, что 1 ГБ файл оказал большое влияние, что не обязательно удивительно, учитывая, что у меня только 512 МБ ОЗУ на этой коробке.

Кроме того, это скорость интерпретации / компиляции. Если вы на самом деле скомпилировали эти файлы, все среды выполнения были бы идентичны. Вы можете сделать свои собственные выводы, определяющие влияние.

Это не повлияет на скомпилированные данные, как следует из слова. Однако, пожалуйста, не идите за комментариями понос, это повлияет на производительность других программистов.

Это зависит.

В компилируемых языках компиляция может занять больше времени, но вам, вероятно, все равно, так как это делается один раз.

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

Что-то вроде JavaScript, доставляемого в браузер, вам нужно не только беспокоиться о времени разбора, но и передавать все эти комментарии в браузер вашего клиента. Из-за этого многие люди запускают свои сценарии через минификатор, который извлекает комментарии и выполняет другие приемы, чтобы уменьшить размер кода.

Что касается сильно закомментированного кода, измученного комментариями, генерируемыми генераторами кода, чрезмерно усердными системами контроля версий и "религиозными комментаторами", я бы на самом деле больше беспокоился о плохом читателе / ​​рецензенте, который должен пробираться через все это, в основном бесполезное и, вероятно, несинхронизированный текст, чтобы добраться до кода.

Компиляция (и компоновка) это фаза 1.

Исполнение - фаза 2.

Поскольку фаза 1 не меньше O(длина входа), можно ожидать, что фаза 1 займет время, пропорциональное (как минимум) длине входа. Если длина файла меньше 10^4 строк, это, вероятно, не будет беспокоить вас слишком сильно. Если длина файла составляет 10^12 строк, это может занять годы, если что-то не сломается первым.

Но это не повлияет на этап 2. Что влияет на этап 2, так это то, сколько работы выполняет программа и сколько ей нужно сделать.

Если вы говорите о скомпилированном двоичном файле, то это влияет на производительность ровно на 0 - это всего лишь последовательность выполняемых инструкций, и в этом смысле пробел в действительности не существует как концепция. Если вы говорите об интерпретируемых языках, то я предполагаю, что теоретически миллионы строк пробела могут очень незначительно повлиять на производительность, но этого недостаточно, чтобы когда-либо быть заметным.

Короче говоря, хотя интересный вопрос с академической точки зрения вам не стоит беспокоиться, используете ли вы скомпилированный или интерпретированный язык. Всегда поддерживайте читабельность и комментарии. Если вы указываете производительность по причине, по которой вы не используете пробелы или комментарии, будущие разработчики вашего кода будут рады вам помочь!

Пробелы в исходных файлах не влияют на восприятие пользователя. Как только бинарный файл скомпилирован, вот и все. Неважно, если дельта-т компилятору потребовалось больше времени для анализа вашего исходного кода, потому что там были миллионы комментариев.

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

Другие вопросы по тегам