Какой максимальный размер кода может обработать компилятор?

Существует ли (даже нереальное) ограничение на количество строк/размер кода/и т. д., которые компилятор может принять и обработать? Я не мог найти ничего об этом в документации.

Можем ли мы сказать, что возможность обработки длины/размера всего одного файла ограничена только аппаратными средствами?


person Oh nooo    schedule 01.10.2015    source источник
comment
Наше программное обеспечение, всего один исполняемый файл, содержит более 3 миллионов строк кода, но строки кода — очень расплывчатая тема в Delphi. Я помню, как видел очень простое консольное приложение, удаляющее весь ненужный код, кажется, добавляющее одну дополнительную невидимую строку кода, что также происходит на всех других устройствах. Вы также должны учитывать, что Delphi/Pascal не зависят от строки — вы можете сжать 10 строк кода в 1.   -  person Jerry Dodge    schedule 01.10.2015
comment
Более старые версии Delphi имели ограничение в 65536 строк на единицу, если честно. Современные версии этого не делают, но в какой-то момент вы, вероятно, обнаружите, что объем памяти, необходимый для компиляции слишком большого модуля (на порядки больше, чем что-либо разумное), вероятно, начнет серьезно влиять на время компиляции. Компилировать миллион LOC в одном блоке намного сложнее, чем миллион LOC, разбросанных по многим блокам. Если вы сохраняете свои отдельные блоки разумного размера, то на самом деле не существует практических ограничений, кроме ограничений вашего оборудования.   -  person J...    schedule 01.10.2015
comment
blog.marcocantu.com/blog/hundred_thousand_lines_unit.html   -  person J...    schedule 01.10.2015
comment
Кроме того, для развлечения, это всегда заставляет меня смеяться... stackoverflow.com/q/19082534/327083   -  person J...    schedule 01.10.2015
comment
Вы спрашиваете о размере кода в одном блоке? Или целый проект? Или, возможно, файл DFM/FMX? Или все, что выше?   -  person Jerry Dodge    schedule 01.10.2015
comment
Всегда приятно иметь 1300 Edits :) Я знаю, что отдельные единицы помогают решить эту проблему. Но можем ли мы сказать, что возможность обработки длины/размера всего одного файла ограничена только оборудованием?   -  person Oh nooo    schedule 01.10.2015
comment
@JerryDodge, например, один отряд.   -  person Oh nooo    schedule 01.10.2015
comment
Насколько я знаю, поскольку файлы могут быть автоматически сохранены как двоичные, когда они становятся слишком большими, чтобы оставаться в виде обычного текста, ограничение привязано к аппаратному обеспечению. Я думаю, это также во многом связано с тем, сколько памяти разрешено выделять компилятору. Насколько я помню, одной из особенностей Delphi 10 Seattle является то, что объем памяти, который он может обрабатывать, был удвоен.   -  person Jerry Dodge    schedule 01.10.2015
comment
Будет предел. Что касается того, что это такое, это, вероятно, зависит от очень многих факторов. У вас есть проблемы?   -  person David Heffernan    schedule 01.10.2015


Ответы (1)


Нет, количество строк, которые может иметь один блок, не ограничено.
Очевидно, поскольку Delphi является 32-разрядной программой, вы не можете выделить больше 2 ГБ в любом месте.

Однако:

1 IDE и скорость компиляции
Если вы откроете модуль в Delphi, IDE проанализирует модуль, что замедлит работу IDE.
Имеет смысл разделить большой проект на несколько (в основном) автономные модули и компилировать их компилятором.
Каждый модуль создаст .DCU файл, который компоновщик может использовать для сборки окончательного исполняемого файла.

Если модуль соответствует dcu, то Delphi не будет перекомпилировать модуль, а просто передаст файл dcu компоновщику.
Это приводит к гораздо более быстрой компиляции.

Даже одно редактирование в модуле приводит к полной перекомпиляции этого модуля.
В вашем гипотетическом огромном модуле это займет много времени.
Это также намного легче в любой системе SVN, которая у вас может быть.

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

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

person Johan    schedule 01.10.2015
comment
Я уверен, что есть предел. Например, количество атомов во Вселенной может дать один верхний предел. Я уверен, что можно найти меньшие верхние пределы. Я подозреваю, что вы хотите сказать, что никаких явных ограничений не применяется. Но тогда как вы можете знать, что это так? Это задокументировано? - person David Heffernan; 01.10.2015
comment
Повторяю Макро Канту, по нему нет фиксированного лимита. - person Johan; 01.10.2015
comment
Что означает, что вы не можете превышать 2 ГБ в любом распределении? Размер 32-битного адресного пространства составляет 4 ГБ. Почему единичные распределения актуальны? Вам не нужно хранить исходный файл в непрерывной памяти. Вполне возможно скомпилировать программу, которая не помещается в памяти. Раньше так делали все компиляторы. Я полагаю, что многое из того, что я имею в виду, похоже на то, что вы что-то выдумываете. Без четких ссылок на официальную документацию или заявления и не будучи инженером Embarcadero, как вы можете делать такие заявления? - person David Heffernan; 01.10.2015
comment
@DavidHeffernan До Delphi 10 Seattle среда IDE была в основном ограничена 2 ГБ памяти, потому что более старые версии IDE не использовали large memory address model, как сейчас в Delphi 10 Seattle. Также вы должны понимать, что Delphi IDE должна содержать большую часть исходного кода в памяти, чтобы некоторые из ее функций работали. Двумя наиболее известными такими функциями являются понимание кода и понимание ошибок. ... - person SilverWarior; 01.10.2015
comment
@SilverWarior Да, я знаю это. - person David Heffernan; 01.10.2015
comment
... Вы также должны понимать, что IDE должна хранить в памяти много других вещей, а не только код. Если у вас есть приложение с большим количеством визуальных компонентов, каждый из этих компонентов требует больше памяти даже во время разработки. Также различные плагины, которые можно установить в Delphi для расширения его функциональности, также требуют своего собственного участка памяти. Поэтому невозможно точно сказать, сколько строк кода может обработать среда разработки Delphi. ... - person SilverWarior; 01.10.2015
comment
... Во время RAD Studio 10 Seattle Deep Dive Session один из докладчиков упомянул примерное количество строк, которые новейший Delphi должен уметь обрабатывать, но я не могу вспомнить, что именно. Вы можете узнать это, посмотрев повторы, которые доступны здесь: community.embarcadero.com/blogs/entry/ - person SilverWarior; 01.10.2015
comment
Спасибо, @SilverWarior! Я продолжу свои исследования и сообщу вам, если что-то найду. - person Oh nooo; 02.10.2015