Сильная типизация - Большая Энциклопедия Нефти и Газа, статья, страница 3
Прошу послать меня на курсы повышения зарплаты. Законы Мерфи (еще...)

Сильная типизация

Cтраница 3


Язык Ада предоставляет стандартные средства для конструирования различных программных единиц - подпрограмм, пакетов, задач. В соответствии с [163] язык Ада предоставляет также удобные средства для создания больших и развивающихся программных комплексов, включая возможности раздельной трансляции, спецификации контекста и сильную типизацию.  [31]

Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов.  [32]

Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ.  [33]

Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ.  [34]

Ряд трансляторов с языка Паскаль допускает возможность проведения раздельной трансляции, не обеспечивая1 проведение полного контроля соответствия типов в раздельно транслируемых компонентах программы. Как курьез, связанный с этой темой, автору вспомнилась одна статья ( к счастью, ненапечатанная), в которой на странице п язык Си критиковался за отсутствие контроля соответствия типов в раздельно транслируемых компонентах программы, а на странице п 1 предлагался способ нарушения механизма сильной типизации в языке Паскаль путем введения возможности проведения раздельной трансляции без проведения полного контроля соответствия типов в раздельно транслируемых компонентах программы.  [35]

Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов.  [36]

Следовательно, типы двух объектов совпадают тогда и только тогда, когда оба этих объекта описаны с помощью одного и того же идентификатора типа. Это правило строго выполняется в языке Ада, облегчая определение принадлежности двух объектов к одному и тому же типу как для того, кто захочет прочитать программу, так и для транслятора с языка Ада. Это удивительно, но в языке Паскаль, популяризировавшем сильную типизацию, вопросы установления эквивалентности типов оказались нерассмотренными. Это привело к ряду проблем, связанных с мобильностью программ, написанных на языке Паскаль, поскольку в различных трансляторах с него были использованы различные правила установления эквивалентности типов.  [37]

Типовые возможности языка Ада очень богаты, очень мощны и очень сложны. Разнообразие средств совмещения, которые, в частности, позволяют одной и той же подпрограмме выступать в различных ипостасях ( под одним и тем же именем) в зависимости от типов фактических параметров, затрудняет понимание того, как будет использована эта подпрограмма в том или ином случае, и для программиста и для транслятора с языка Ада. Более того, средства совмещения ( по крайней мере до некоторой степени) уничтожают некоторые преимущества сильной типизации, поскольку определенные выражения, которые в случае отсутствия средств совмещения, трактовались бы как ошибочные ( вследствие несоответствия типов), трактуются при наличии средств совмещения как корректные. Автор считает, что язык Ада в этой его части излишне богат, по крайней мере, если рассматривать его с точки зрения решения задач системного программирования.  [38]

Последний пункт, быть может, наиболее важный из всех перечисленных выше. Дело в том, что, обладая большим числом недостатков, язык Паскаль очень замкнут, что не позволяет избежать большинства, этих недостатков различными окольными путями. В частности, в языке Паскаль отсутствует механизм приведения типов, необходимый для контролируемого нарушения механизма сильной типизации. При использовании языка Паскаль оказывается практически невозможным заменить одно окружение, в котором обеспечивается выполнение программ, на другое, более удобное по тем или иным соображениям. Единственным способом сделать это является овладение контролем над транслятором с языка Паскаль.  [39]

Язык Паскаль почти соответствует приведенному выше определению языка программирования с сильной типизацией. Убрать слово почти из предыдущего предложения не позволяют, например, следующие два обстоятельства: наличие в языке Паскаль механизма записей с вариантами и возможность передачи в качестве параметров имен процедур и функций. Хотя в язык Си введены типы данных, тем не менее он очень далеко отстоит от языков программирования с сильной типизацией. Язык Си был разработан для того, чтобы дать возможность программисту активно использовать механизм трактовки представления значения как данных различных типов. Поэтому в языке Си обеспечивается несколько различных способов, позволяющих трактовать представление значения как данных различных типов, например, такие механизмы, как объединения, указатели, передача параметров, именование компонентов ( полей) структур.  [40]

Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ.  [41]

Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ.  [42]

Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов.  [43]

Язык Паскаль почти является языком программирования с сильной типизацией. Грубо говоря, это означает, что в программе, написанной на языке Паскаль, каждый объект имеет тип, определяющий допустимые значения этого объекта и набор операций, применимых к этому объекту. При этом транслятор с языка Паскаль гарантирует невозможность присваивания объектам недопустимых значений и применения к объектам недопустимых операций за счет некоторой совокупности проверок, осуществляемых как на этапе трансляции, так и на этапе выполнения. Однако, конечно же, реальные трансляторы с языка Паскаль могут не обеспечивать проведения всех без исключения проверок, являющихся обязательными с точки зрения языка Паскаль. Более того, не следует путать сильную типизацию с анализом размерности.  [44]

Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов.  [45]



Страницы:      1    2    3    4