Cтраница 3
При раздельной трансляции не производится контроля соответствия типов параметров раздельно транслируемых компонентов. При осторожном использовании раздельная трансляция может применяться при создании больших программных комплексов. Однако раздельная трансляция оказывается практически бесполезной для создания библиотек подпрограмм вследствие ограничений, связанных с размерами массивов, которые должны быть известны на этапе трансляции. [31]
Обеспечивается ли в этом языке программирования контроль соответствия типов в раздельно транслируемых программных единицах. За исключением очень маленьких программ, возможность раздельной трансляции разных программных единиц и последующей компоновки полученных объектных модулей имеет чрезвычайно большое значение. Возможность компоновки объектных библиотек из предварительно оттранслированных программных единиц имеет большое значение даже в случае очень маленьких программ. [32]
Ниже описан один из возможных вариантов раздельной трансляции описаний и операторов процедур. Сущность этого способа, который является наиболее общим способом раздельной трансляции операторов и описаний процедур, состоит в следующем. Тело процедуры программируется как подпрограмма и обычно оформляется в виде модуля загрузки, подобно стандартной библиотечной подпрограмме. В ходе трансляции оператор процедуры заменяется обращением к телу процедуры, а каждый фактический параметр в операторе процедуры заменяется подпрограммой, которая либо вычисляет значение этого параметра, либо фиксирует его имя ( адрес), либо, наконец, делает то и другое. Во всех случаях подпрограмма фактического параметра фиксирует также его класс и тип. [33]
В языке Паскаль отсутствует возможность проведения раздельной трансляции, и по этой причине язык Паскаль очень плохо приспособлен для решения больших и очень больших задач, о которых шла речь выше. Поэтому и было предложено ввести в язык Паскаль возможность проведения раздельной трансляции, что и было сделано в ряде реализаций транслятора с языка Паскаль. [34]
Проблемы, связанные со строгим контролем типов при раздельной трансляции в языке Паскаль, удается избежать, запретив раздельную трансляцию. И хотя значительное число реализаций трансляторов с языка Паскаль допускает раздельную трансляцию, в каждом отдельном случае при этом используются различные пути достижения этого, обеспечивающие различную степень строгости проверки типов. [35]
Строгий контроль типов на этапе трансляции является обязательным требованием, предъявляемым к современному языку программирования. Более того, строгий контроль типов должен осуществляться и в случае раздельной трансляции, причем как для разделяемых данных, так и для параметров. [36]
При попытке воспользоваться описанным выше механизмом раздельной трансляции у программиста возникает ощущение, аналогичное ощущению мелкого воришки, надеющегося на сппю сообразительность и удачу. Во-первых, опция Е не используется в нормальном режиме работы, а используется только для случаев раздельной трансляции. Если случится, что две процедуры будут иметь одно и то же имя ( что, вообще говоря, допустимо, если эти процедуры имеют непересекающиеся области действия), то в результате раздельной трансляции с опцией Е обе эти процедуры будут иметь точки входа с совпадающим именем. Соответственно все обращения к обеим этим процедурам будут проинтерпретированы как обращения к одной, поскольку компоновщик откажется производить компоновку второй. Поэтому ( как сказано в документации) на самом деле в таких ситуациях следует пользоваться опцией Е -, обеспечивающей генерацию уникальных имен точек входа для всех процедур. На первый взгляд все кажется понятным. Однако возникает интересная ситуация. Предположим, что необходимо произвести раздельную трансляцию группы процедур. Однако так сделать нельзя, поскольку транслятор с языка Паскаль генерирует одни и те же уникальные имена точек входа для каждого случая раздельной трансляции. [37]
Язык МОДУЛА-2 является языком высокого уровня, который унаследовал от ПАСКАЛЯ структурные операторы, структуру данных и многое другое. Наиболее важным отличием этого языка является концепция модуля, позволяющая эффективно использовать все возможности аппаратуры машины и осуществлять раздельную трансляцию. В языке МОДУЛА-2 устранены некоторые недостатки языка ПАСКАЛЬ. Рассмотрим кратко основные особенности языка МОДУЛА-2, отмечая его отличия от языка ПАСКАЛЬ. [38]
Язык Ада предоставляет стандартные средства для конструирования различных программных единиц - подпрограмм, пакетов, задач. В соответствии с [163] язык Ада предоставляет также удобные средства для создания больших и развивающихся программных комплексов, включая возможности раздельной трансляции, спецификации контекста и сильную типизацию. [39]
Язык Паскаль не обеспечивает возможности проведения раздельной трансляции. Поэтому авторы каждой реализации транслятора с языка Паскаль принимают на свой страх и риск решение о включении ( или не включении) в осуществляемую ими реализацию возможности проведения раздельной трансляции. Например, многие трансляторы с языка Паскаль не допускают возможности проведения раздельной трансляции ( как, например, интерпретатор языка Паскаль для мини - ЭВМ семейства VAX-11, разработанный в Калифорнийском университете ( г. Беркли), упоминавшийся в разд. ЮЛ), что соответствует и духу и букве языка Паскаль. Ряд трансляторов с языка Паскаль обеспечивает возможность описания того, что тело некоторой подпрограммы описано где-то в другом месте. Однако, как бы то ни было, все механизмы такого рода являются нестандартными и отличаются от реализации к реализации. [40]
Ряд трансляторов с языка Паскаль допускает возможность проведения раздельной трансляции, не обеспечивая1 проведение полного контроля соответствия типов в раздельно транслируемых компонентах программы. Как курьез, связанный с этой темой, автору вспомнилась одна статья ( к счастью, ненапечатанная), в которой на странице п язык Си критиковался за отсутствие контроля соответствия типов в раздельно транслируемых компонентах программы, а на странице п 1 предлагался способ нарушения механизма сильной типизации в языке Паскаль путем введения возможности проведения раздельной трансляции без проведения полного контроля соответствия типов в раздельно транслируемых компонентах программы. [41]
При раздельной трансляции не производится контроля соответствия типов параметров раздельно транслируемых компонентов. При осторожном использовании раздельная трансляция может применяться при создании больших программных комплексов. Однако раздельная трансляция оказывается практически бесполезной для создания библиотек подпрограмм вследствие ограничений, связанных с размерами массивов, которые должны быть известны на этапе трансляции. [42]
В ячейку г; заносится значение фактического параметра, а в следующую ячейку r, i всегда записывается имя ( адрес) фактического параметра, а также его класс и тип. Одна из записей ( имя или значение), очевидно, излишняя. Однако при раздельной трансляции операторов и описаний процедур приходится фиксировать как значения фактических параметров, так и их имена, поскольку в момент трансляции оператора процедуры не известно, какие параметры вызываются по значению, а какие - по наименованию. Класс и тип фактического параметра фиксируется для проверки соответствия фактических и формальных параметров, которая осуществляется при исполнении оператора процедуры. [43]
При этом появляется возможность определенного рода защиты данных и проведения раздельного ( автономного) тестирования. Кроме того, возможность проведения раздельной трансляции является важным источником экономии времени трансляции в процессе разработки и реализации программных комплексов. [44]
Авторы сознательно исключили из настоящего исследования две категории вопросов, непосредственно связанных со сравнением языков программирования: вопросы, связанные с особенностями реализации и с особенностями областей применения. По этой причине, например, в ядро языка Кобол не попал раздел оборудования, который очень сильно зависит от используемой операционной системы - в ряде случаев функции раздела оборудования частично реализуются средствами языков управления заданиями и файловыми системами. Аналогично не обсуждаются экстралингвистические проблемы, связанные с раздельной трансляцией и компоновкой, хотя влияние языков программирования на модульность обсуждается достаточно подробно. Наконец, не обсуждаются такие специфичные для конкретных областей применения особенности, как средства форматирования в языке Кобол и организация доступа к библиотекам научных подпрограмм в языке Фортран. [45]