Строгая типизация - Функциональные языки программирования
Практически все современные языки функционального программирования являются строго типизированными языками. Строгая типизация обеспечивает безопасность. Программа, прошедшая проверку типов просто не может выпасть в OS с сообщением подобным "segmentationviolation". Большая часть ошибок может быть исправлена на стадии компиляции, поэтому стадия отладки и общее время разработки программ сокращаются. Вдобавок к этому строгая типизация позволяет компилятору генерировать более эффективный код и тем самым ускорять выполнение программ. Вернемся к примеру, с быстрой сортировкой Хоара. Помимо уже упомянутых отличий между вариантом на языке C и вариантом на Haskell есть еще одно важное отличие: функция на C сортирует список значений типа int (целых чисел), а функция на Haskell - список значений любого типа, который принадлежит к классу упорядоченных величин Ord. Поэтому функция на Haskell может сортировать и список целых чисел, и список чисел с плавающей запятой, и список строк. Мы можем описать какой-нибудь новый тип. Определив для этого типа операции сравнения и cделав его тем самым экземпляром класса Ord, мы без перекомпиляции сможем использовать qsort и со списками этого нового типа. Это полезное свойство системы типов называется параметрическим или истинным полиморфизмом, и поддерживается большинством функциональных языков.
Еще одной разновидностью полиморфизма является перегрузка операций (overloading), позволяющая давать различным, но в чем-то схожим функциям одинаковые имена. Типичным примером перегруженной операции является обычная операция сложения. Функции сложения для целых чисел и чисел с плавающей запятой различны, однако для удобства они носят одно и то же имя. Некоторые функциональные языки, например, все тот же Haskell, помимо параметрического полиморфизма, поддерживают и перегрузку операций.
Программист, знакомый с C++, может возразить: "Да, все это хорошо, но я могу легко определить такую же полиморфную функцию qsort и на C++, воспользовавшись механизмом шаблонов". Да, это так. В стандартную библиотеку C++ STL входит такая функция и множество других полиморфных функций. Но шаблоны C++, как и родовые функции Ada, на самом деле порождают Множество перегруженных функций, которые, кстати, компилятор должен каждый раз компилировать, что неблагоприятно сказывается на времени компиляции и размере кода. А в Haskell полиморфная функция qsort это Одна функция.
В некоторых языках, например, в Ada, строгая типизация вынуждает программиста явно описывать тип всех значений и функций. Чтобы избежать этого, в строго типизированные функциональные языки встроен специальный механизм, позволяющий компилятору определять типы констант, выражений и функций из контекста. Этот механизм называется механизмом Вывода Типов (Typeinference). Известно несколько таких механизмов, однако большинство из них являются разновидностями модели типизации Хиндли-Милнера, разработанной в начале 80-х. Таким образом в большинстве случаев можно не указывать типы функций. Однако в примерах, приводимых в этой статье, типы функций указаны явно. Это позволяет компилятору дополнительно контролировать корректность типов определяемых функций.
Похожие статьи
-
Строгая типизация - Основные свойства функциональных языков программирования
Практически все современные языки программирования являются строго типизированными языками (возможно, за исключением языка JavaScript и его диалектов, не...
-
Свойства функциональных языков, Краткость и простота - Функциональные языки программирования
Краткость и простота Программы на функциональных языках обычно намного короче и проще, чем те же самые программы на императивных языках. Как стандартный...
-
Краткость и простота - Основные свойства функциональных языков программирования
Программы на функциональных языках обычно намного короче и проще, чем те же самые программы на императивных языках. Для примера можно сравнить программы...
-
История функционального программирования - Основные свойства функциональных языков программирования
Широко известно, что теоретические основы императивного программирования были заложены еще в 30-х годах XX века учеными Аланом Тьюрингом и Джоном фон...
-
История возникновения функциональных языков - Функциональные языки программирования
Теоретические основы императивного программирования были заложены в 30-х годах Аланом Тьюрингом и Джоном фон Нейманом. Теория положенная в основу...
-
Заключение - Основные свойства функциональных языков программирования
Основной особенностью функционального программирования, определяющей как преимущества, так и недостатки данной парадигмы, является то, что в ней...
-
Чистота (отсутствие побочных эффектов) - Основные свойства функциональных языков программирования
В императивных языках функция в процессе своего выполнения может читать и модифицировать значения глобальных переменных и осуществлять операции...
-
Модульность, Функции - это значения - Основные свойства функциональных языков программирования
Механизм модульности позволяет разделять программы на несколько сравнительно независимых частей (модулей) с четко определенными связями между ними. Тем...
-
Отложенные (ленивые) вычисления - Основные свойства функциональных языков программирования
В традиционных языках программирования (например, C++) вызов функции приводит к вычислению всех аргументов. Этот метод вызова функции называется...
-
Введение - Основные свойства функциональных языков программирования
Созданная в 1998 году спецификация языка Haskell (названного так в честь ученого Хаскелла Карри, одного из основоположников функционального...
-
Введение - Функциональные языки программирования
Функциональное программирование ставит своей целью придать каждой программе простую математическую интерпретацию. Эта интерпретация должна быть...
-
Функциональное программирование - Функциональные языки программирования
Функциональное программирование ставит своей целью придать каждой программе простую математическую интерпретацию. Эта интерпретация должна быть...
-
Выбор языка программирования Язык С++ является в настоящее время наиболее распространенным и перспективным языком промышленного программирования. Он...
-
Основы функционального программирования - Основные свойства функциональных языков программирования
Функциональное программирование - раздел дискретной математики и парадигма программирования (совокупность идей и понятий, определяющая стиль написания...
-
Технология программирования Для реализации поставленной задачи наиболее удобной парадигмой программирования будет являться объектно-ориентированная...
-
Подпрограммы - Язык программирования PERL. Сфера применения
Как и все структурированные языки программирования, Perl поддерживает подпрограммы. Подпрограмма может быть определена с помощью ключевого слова sub, как...
-
Скалярные переменные - Язык программирования PERL. Сфера применения
Как отмечалось, скалярная переменная может содержать единственное значение. В языке Perl имена скалярных переменных всегда начинаются со знака ($). В еле...
-
Для программирования агентов могут применяться: универсальные языки (Java, C++ , Visual Basic и др.), языки представления знаний (SL, KIF), языки...
-
Использование языка PERL для написания CGI-cкриптов - Язык программирования PERL. Сфера применения
Как вы узнали из предыдущей главы, CGI обеспечивает узлам Web вoзмoжнoсть интерактивной работы с клиентскими программами, в качестве которых обычно...
-
Обзор языков программирования высокого уровня - Теоретические основы информационных технологий
Fortran (Фортран) Это первый компилируемый язык, созданный в 50-е годы. Программисты, разрабатывавшие программы исключительно на ассемблере, выражали...
-
Алгоритм работы декодера кода Рида - Маллера будем разрабатывать на основе уже приведенных выше уравнений. Алгоритм приведен на рисунке 12. В начале...
-
У каждого языка программирования есть свои преимущества и недостатки, и их стоит рассматривать в контексте тех принципов, на которых строился язык, а так...
-
Завершив выбор схемы работы системы и общего принципа работы ее частей и выбрав тип базы данных, следует перейти к выбору языка программирования....
-
Особенности языка программирования С++ - Разработка видеолекций по программированию С++
Язык С++ был создан Бьерном Страуструпом в 1979 году в компании Bell Laboratories и сначала имел название "С с классами". Страуструп утверждает, что...
-
МОДУЛИ - Язык программирования Паскаль
Наличие модулей в Turbo Pascal позволяет программировать и отлаживать программу по частям, создавать библиотеки подпрограмм и данных, воспользоваться...
-
Принципы SOLID - Программирование на языке C++
SOLID - мнемонический акроним, введенный Майклом Фэзерсом ( Michael Feathers ) для первых пяти принципов, названных Робертом Мартином в начале 2000-х,...
-
Платформа. NET Framework - Программирование на языке C++
.NET Framework - программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является общеязыковая среда исполнения Common...
-
Разработка приложения на языке C++ - Программирование на языке C++
C++ - объектно-ориентированный язык программирования. Разработан в 1998--2001 годах группой инженеров под руководством Андерса Хейлсберга в компании...
-
Циклы в языке программирования Pascal
Цель: Познакомить учащихся с программированием циклических алгоритмов. pascal циклический алгоритм Методическая разработка рассчитана на учащихся 9-х...
-
ПРОЦЕДУРЫ - Язык программирования Паскаль
Delete (St, Pos, N) - удаление N символов строки St, начиная с позиции Pos. Если значение Pos > 255, возникает ошибка. Значение St Выражение Результат...
-
CoDeSys -- универсальный инструмент разработки прикладных программ для программируемых логических контроллеров на языках стандарта IEC 61131-3. Данный...
-
В нашей курсовой работе была поставлена задача создания обучающей программы по информатике, с помощью которой студенты смогут проверить свои знания в...
-
При создании программ и формировании структур баз данных нередко применяются формальные способы их представления - формальные нотации, с помощью которых...
-
Языки программирования для Интернета - Теоретические основы информационных технологий
С активным развитием глобальной сети было создано немало популярных языков программирования, адаптированных специально для Интернета. Все они отличаются...
-
Языки программирования баз данных - Теоретические основы информационных технологий
Эта группа языков отличается от алгоритмических языков, прежде всего решаемыми задачами. База данных - это файл (или группа файлов), представляющий собой...
-
При извлечении текста из Интернета, он не имеет никой разметки и представлен в виде сплошного набора предложений. Для дальнейшего использования...
-
Поколения языков программирования Языки программирования принято делить на пять поколений. В первое поколение входят языки, созданные в начале 50-х...
-
Языки и методы параллельного программирования - Администрирование параллельных процессов
Применение параллельных архитектур повышает производительность при решении задач, явно сводимых к обработке векторов. Автоматическое распараллеливание...
-
Основные типы данных языка Си - Основы программирования
Язык Си относится к языку с жестко определенными типами данных: каждое имя всегда обозначает объект некоторого типа, причем этот тип нельзя изменить до...
-
Правила записи программы на языке Си - Основы программирования
Как указывалось выше, программа перед обработкой компьютером должна быть помещена в файл на диске. Обычно этот файл имеет расширение <.c>. Рассмотрим...
Строгая типизация - Функциональные языки программирования