Cтраница 1
Механизм сильной типизации в языке Паскаль облегчает выявление разного рода описок, возникающих в процессе написания программ. Весьма полезны и проверки, осуществляемые на этапе выполнения, позволяющие, в частности, выявлять ошибки, связанные с выходом за границы массивов. [1]
Механизм сильной типизации приобретает все большую значимость в глазах специалистов по языку Си. Реализации языка Си становятся более строгими с точки зрения типов данных и работы с ними. [2]
Одним из следствий использования механизма сильной типизации является то, что типы формальных и фактических параметров должны совпадать. Рассмотрим пример из практики. [3]
Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ. [4]
Строго говоря, в языке Паскаль в механизме сильной типизации имеется огромная дыра в районе записей с вариантами, использование которой в совокупности с некоторыми трюками позволяет, хотя и весьма искуственно осуществлять написание программ, относящихся к вышеупомянутой категории. [5]
Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов. [6]
Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов. [7]
Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов. [8]
Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ. [9]
Ряд трансляторов с языка Паскаль допускает возможность проведения раздельной трансляции, не обеспечивая1 проведение полного контроля соответствия типов в раздельно транслируемых компонентах программы. Как курьез, связанный с этой темой, автору вспомнилась одна статья ( к счастью, ненапечатанная), в которой на странице п язык Си критиковался за отсутствие контроля соответствия типов в раздельно транслируемых компонентах программы, а на странице п 1 предлагался способ нарушения механизма сильной типизации в языке Паскаль путем введения возможности проведения раздельной трансляции без проведения полного контроля соответствия типов в раздельно транслируемых компонентах программы. [10]
Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов. [11]
Последний пункт, быть может, наиболее важный из всех перечисленных выше. Дело в том, что, обладая большим числом недостатков, язык Паскаль очень замкнут, что не позволяет избежать большинства, этих недостатков различными окольными путями. В частности, в языке Паскаль отсутствует механизм приведения типов, необходимый для контролируемого нарушения механизма сильной типизации. При использовании языка Паскаль оказывается практически невозможным заменить одно окружение, в котором обеспечивается выполнение программ, на другое, более удобное по тем или иным соображениям. Единственным способом сделать это является овладение контролем над транслятором с языка Паскаль. [12]
Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ. [13]
Противники сильной типизации утверждают, что механизм сильной типизации препятствует легкости программирования и гибкости, однако, за исключением некоторых проблем с производными типами ( обсуждаемых ниже в § 7.3.4), автору не удалось обнаружить подтверждения этого. Еще один аргумент, часто выдвигаемый противниками сильной типизации, заключается в том, что ряд программ, таких, например, как распределитель памяти, которые нарушают механизм сильной типизации, не может быть написан вообще при использовании языков программирования с сильной типизацией. В языке Ада имеется предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, представляющая собой механизм, обеспечивающий возможность нарушения явным образом механизма сильной типизации, использование которой легко позволяет писать на языке Ада программы типа распределителя памяти. К тому же программы, в которых осуществляется нарушение механизма сильной типизации, легко могут быть обнаружены по использованию в них предопределенной библиотечной настраиваемой функции UNCHECKED CONVERSION, что облегчает сопровождение и перенос таких программ. [14]
Языки программирования с сильной типизацией не могут быть использованы для решения задач системного программирования, поэтому для решения этих задач необходимо включение в язык программирования с сильной типизацией средств, обеспечивающих возможность нарушения механизма сильной типизации. Однако намного лучше включать в язык программирования одно средство, предназначенное для нарушения механизма сильной типизации, чем несколько различных средств, каждое из которых позволяет нарушать механизм сильной типизации. В таком случае все нарушения механизма сильной типизации легко локализуются и изолируются. Например, в языке Ада введена предопределенная библиотечная настраиваемая функция UNCHECKED CONVERSION, обращение к которой обеспечивает возможность нарушения механизма сильной типизации. К сожалению, в языке Си механизм сильной типизации может быть нарушен несколькими различными способами, позволяющими трактовать представление значения как данных различных типов. [15]