поддержка
проекта:
разместите на своей странице нашу кнопку!И мы
разместим на нашей странице Вашу кнопку или ссылку. Заявку прислать на
e-mail
код нашей кнопки:
Транслятор (продолжение)
Программа на машинном языке, как правило, будет занимать больший
объем памяти и работать медленнее, чем та же программа, написанная
опытным программистом на автокоде. Это объясняется тем, что алгоритм
трансляции не учитывает индивидуальных особенностей реализуемого
алгоритма, а программист принимает их к сведению. Улучшение выходной
программы обычно называют ее оптимизацией, а ту часть транслятора,
которая выполняет эту функцию, - оптимизирующей частью транслятора или
оптимизатором.
Оптимизация программы осуществляется по двум основным направлениям:
устранение недостатков программы, вызванных небрежностью или низкой
квалификацией программиста, и устранение излишних вычислений, неизбежно
возникающих в процессе трансляции даже при самом тщательном написании
программ на языке высокого уровня.
Еще одной крупной задачей, решаемой в процессе трансляции, является
распределение памяти для выходной программы.
Распределение памяти в простейшем случае заключается в назначении
каждому фрагменту программы, переменным, массивам и константам своих
адресов участков памяти. Такое распределение памяти называется
статическим. Этот способ дает эффективные выходные программы, но
возможен далеко не всегда, поскольку предполагает, что, во-первых, все
размеры массивов данных и программ известны в момент трансляции и,
во-вторых, что вся программа вместе с информационными массивами
помещается в оперативной памяти.
В настоящее время практически повсеместно применяется другой подход,
получивший название динамического распределения памяти. Одним из
вариантов динамического распределения памяти является отведение для всех
фрагментов программы (блоков, функций, подпрограмм) и информационных
массивов места в общем участке памяти, организованного в виде списка.
В сложных системах (а транслятор вполне можно отнести к таким системам),
как правило, ни один из простых критериев их сложности (например,
скорость трансляции, время решения транслируемой задачи или объем
занимаемой памяти) не является однозначно определяющим качество системы.
Известны очень быстро работающие трансляторы, дающие плохие программы;
есть трансляторы, генерирующие чрезвычайно эффективные программы, но
затрачивающие много времени на оптимизацию выходной программы.
Большинство трансляторов - промежуточные между этими двумя типами. В
некоторых развитых системах математического обеспечения имеются по два
транслятора: быстрый транслятор, генерирующий малоэффективные программы
(для отладки алгоритмов), и медленный транслятор, дающий эффективные
программы для трансляции уже отлаженных задач, предназначенных для
многократных решений.