русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Строгая типизация

Практически все современные языки программирования являются строго ти­пи­зи­ро­ван­ны­ми языками (возможно, за исключением JavaScript и его диалектов, не существует им­пе­ративных языков без понятия "тип"). Строгая типизация обеспечивает безопасность. Прог­рамма, прошедшая проверку типов просто не может выпасть в опера­ционную сис­те­му с сообщением, подобным "access violation", особенно это касается таких языков, как C/C++ и Object Pascal, где применение указателей является типичным спосо­бом использо­ва­ния языка. В функциональных языках большая часть ошибок может быть исправлена на ста­дии компиляции, поэтому стадия отладки и общее время разработки программ сок­ра­ща­ются. Вдобавок к этому строгая типизация позволяет компилятору ге­нерировать более эф­фективный код и тем самым ускорять выполнение программ.

Рассматривая пример с быстрой сортировкой Хоара, можно увидеть, что помимо уже упо­мянутых отличий между вариантом на языке C и вариантом на функцио­нальном языке, есть ещё одно важное отличие: функция на C сортирует список значений ти­па int (целых чисел), а функция на функциональном языке — список значе­ний любого типа, который принадлежит к классу упорядоченных величин. Поэтому пос­ледняя функция может сортировать и список целых чисел, и список чисел с плавающей точкой, и список строк. Можно описать какой-нибудь новый тип. Определив для этого ти­па операции сравнения, возможно без перекомпиляции использовать quickSort и со спис­ками значений этого нового типа. Это полезное свойство системы типов называется пара­метрическим или истинным полиморфизмом, и поддерживается большинством функцио­нальных языков.

Ещё одной разновидностью полиморфизма является перегрузка функций, позволяющая давать различным, но в чём-то схожим функциям одинаковые имена. Типичным приме­ром перегруженной операции является обычная операция сложения. Функции сложения для целых чисел и чисел с плавающей точкой различны, однако для удобства они носят одно и то же имя. Некоторые функциональные языки помимо параметрического полимор­физма, поддерживают и перегрузку операций.

В языке C++ имеется такое понятие, как шаблон, которое позволяет программисту оп­ределять полиморфные функции, подобные quickSort. В стандартную библиотеку C++ STL входит такая функция и множество других полиморфных функций. Но шаблоны C++ на самом деле порождают множество перегруженных функ­ций, которые, кстати, компилятор должен каждый раз компилировать, что неблагоприятно сказывается на времени компиляции и размере кода. А в функциональных языках поли­морфная функция quickSort — это одна единственная функция.

В некоторых языках строгая типизация вынуждает программиста явно описывать тип всех значений и функций. Чтобы избежать этого, в строго типизированные функциональные языки встроен специальный механизм, позволяющий компилятору опре­делять типы констант, выражений и функций из контекста. Этот механизм называется ме­ханизмом вывода типов. Известно несколько таких механизмов, однако большинство из них являются разновидностями модели типизации Хиндли-Милнера, разработанной в на­чале 80-х годов XX века. Таким образом, в большинстве случаев можно не указывать типы фун­к­ций.

Просмотров: 685


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.