Язык программирования – система типов

Целью системы типов является проверка и обычно обеспечение определенного уровня правильности написанных программ путем обнаружения неправильных операций. Любая решающая система типов предполагает компромисс: отвергая множество некорректных программ, она может также запретить некоторые правильные, даже необычные программы. В большинстве типизированных языков система типов используется только для ввода программ проверки, но некоторые языки полагаются на программиста для правильного определения типов. Формальное рассмотрение типов также называется теорией типов. Более глубоко вы можете изучить данную тему пройдя курсы программирования онлайн.

Типизированный язык против нетипизированного

Язык считается типизированным, если спецификация каждой операции определяет тип данных этой операции. Например, данные, представленные знаком « to besedilo med narekovaji », являются строкой . В большинстве языков программирования деление числа на строку не имеет значения; поэтому большинство современных языков программирования отвергают любую попытку выполнить программу, которая могла бы выполнить такую операцию. В некоторых языках любая бессмысленная операция обнаруживается при компиляции программы («статическая» проверка типа) и отклоняется компилятором; в то время как в других языках он обнаруживается только во время выполнения программы («динамическая» проверка типов), что вызывает исключения во время выполнения ( исключение времени выполнения ; программная ошибка, которая обычно указывает на «ошибки»).

Нетипизированный язык, как и большинство языков компиляции , позволяет выполнять любую операцию с любыми данными и обычно рассматривается как последовательность битов разной длины.

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

Статическая типизация против динамической


По времени проверки типов мы выделяем две группы языков программирования:

статически типизированные языки и
типы динамических языков ( динамически типизированные языки ).

Характерной чертой статической типизации является то, что каждая переменная и параметр имеет тип, указанный программистом. Проверка типа проверяется перед запуском программы, обычно во время перевода. Например, 1 и (2 + 2) - целочисленные выражения; нельзя передать функции, которая ожидает строку , нельзя сохранить в переменной, содержащей даты.

Статические языки типа либо явно вводить или тип логического вывода . В первом случае программист должен явно писать типы в определенной точке кода. Во втором случае переводчик выбирает тип терминов и деклараций в зависимости от контекста. Мы говорим о выводе типа, когда тип объекта не указан, но берется из среды. Большинство преобладающих языков со статической типизацией, таких как C ++ , C # и Java , явно типизированы. Полная типизация вывода обычно связана с недоминантными языками, такими как Haskell и ML.. Однако многие явно типизированные языки поддерживают частичную типизацию путем вывода; например, Java и C # также содержат, в ограниченной степени, типизацию вывода.

Особенностью динамической типизации является то, что только значения имеют определенный тип. Однако переменная и параметр принимают определенный тип из разных значений в разное время. Динамическая типизация определяет безопасность типов операций во время выполнения. Как и языки с логическим выводом, языки с динамической типизацией не требуют, чтобы программист писал явное определение типов выражений. Помимо прочего, это позволяет использовать одну переменную для значений разных типов на разных этапах реализации программ. Однако ошибки типа не могут быть обнаружены автоматически, пока код не будет фактически выполнен, что может затруднить отладку . Лисп , Perl , Python ,JavaScript и Ruby - это языки с динамической типизацией.

Слабый набор текста против сильного

В зависимости от типа проверки типов (независимо от времени) языки программирования делятся на:

строго типизированные языки ( строго типизированные языки ) и
слабо типизированные языки ( слабо типизированные языки ).

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

Слабая типизация позволяет рассматривать значение одного типа как значение другого типа; например, обработка строки как числа. Иногда это может быть полезно, но также может допускать необнаруженные программные ошибки во время трансляции и даже во время выполнения.

Строгая типизация предотвращает описанные выше проблемы. Попытка выполнить операцию с неверным типом значения сообщает об ошибке.

Другое определение «слабой типизации» относится к таким языкам, как Perl и JavaScript , которые допускают большее количество неявных преобразований между типами данных. В JavaScript, например, выражение 2 * xнеявно преобразуется xв число; и это преобразование прошло успешно , даже если x null, undefined, Arrayили строка. Такое неявное преобразование часто бывает полезным, но может маскировать ошибки программирования.

Некоторые используют термин сильно типизированный со значением строго, статически типизированный или, чтобы еще больше запутать, они используют этот термин со значением статически типизированным . Таким образом, C был назван как сильным, так и слабым, статически типизированным.

Стандартная библиотека


Большинство языков программирования имеют связанную базовую библиотеку (также известную как «стандартная библиотека»), которая обычно доступна для всех языковых реализаций. Базовые библиотеки обычно содержат определения для часто используемых алгоритмов, структур данных и механизмов ввода / вывода .

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