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

Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).Противопоставляется парадигме императивного программирования, которая описывает

Слайд 1Языки функционального программирования Канарейкин А. И.

Языки функционального программирования  Канарейкин А. И.

Слайд 2Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой

процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательное изменение состояний (в значении, подобном таковому в теории автоматов). При необходимости, в функциональном программировании вся совокупность последовательных состояний вычислительного процесса представляется явным образом, например, как список.
Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния (в отличие от императивного, где одной из базовых концепций является переменная, хранящая своё значение и позволяющая менять его по мере выполнения алгоритма).
Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений

Слайд 3На практике отличие математической функции от понятия «функции» в императивном программировании

заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных. Таким образом, в императивном программировании при вызове одной и той же функции с одинаковыми параметрами, но на разных этапах выполнения алгоритма, можно получить разные данные на выходе из-за влияния на функцию состояния переменных. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Это позволяет средам выполнения программ на функциональных языках кешировать результаты функций и вызывать их в порядке, не определяемом алгоритмом и распараллеливать их без каких-либо дополнительных действий со стороны программиста (что обеспечивают функции без побочных эффектов — чистые функции).
Лямбда-исчисление являются основой для функционального программирования, многие функциональные языки можно рассматривать как «надстройку» над ними.
На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции

Слайд 4История
Лямбда-исчисление стало теоретической базой для описания и вычисления функций. Являясь математической

абстракцией, а не языком программирования, оно составило базис почти всех языков функционального программирования на сегодняшний день. Сходное теоретическое понятие, комбинаторная логика, является более абстрактным, нежели λ-исчисления и было создано раньше. Эта логика используется в некоторых эзотерических языках, например в Unlambda. И λ-исчисление, и комбинаторная логика были разработаны для более ясного и точного описания принципов и основ математики.
Первым функциональным языком был Лисп, созданный Джоном Маккарти в период его работы в Массачусетском технологическом институте в конце пятидесятых и реализованный, первоначально, для IBM 700/7000 (англ.)русск.. В Лиспе впервые введено множество понятий функционального языка, хотя при этом в языке применяется не только парадигма функционального программирования. Дальнейшим развитием Лиспа стали такие языки как Scheme и Dylan.
Язык обработки информации (Information Processing Language (IPL) иногда определяется как самый первый машинный функциональный язык. Это язык ассемблерного типа для работы со списком символов. В нём было понятие «генератора», который использовал функцию в качестве аргумента, а также, поскольку это язык ассемблерного уровня, он может позиционироваться как язык, имеющий функции высшего порядка. Однако, в целом IPL акцентирован на использование императивных понятий.
Кеннет Е. Айверсон разработал язык APL в начале шестидесятых, документировав его в своей книге A Programming Language. APL оказал значительное влияние на язык FP (англ.)русск., созданный Джоном Бэкусом. В начале девяностых Айверсон и Роджер Хуэй (англ.)русск. создали преемника APL — язык программирования J. В середине девяностых Артур Витни (англ.)русск., ранее работавший с Айверсоном, создал язык K, который впоследствии использовался в финансовой индустрии на коммерческой основе.
ИсторияЛямбда-исчисление стало теоретической базой для описания и вычисления функций. Являясь математической абстракцией, а не языком программирования, оно

Слайд 5В семидесятых в университете Эдинбурга Робин Милнер создал язык ML, а

Дэвид Тернер начинал разработку языка SASL в университете Сент-Эндрюса и, впоследствии, язык Miranda в университете города Кент. В конечном итоге на основе ML были созданы несколько языков, среди которых наиболее известные Objective Caml и Standard ML. Также в семидесятых осуществлялась разработка языка программирования, построенного по принципу Scheme (реализация не только функциональной парадигмы), получившего описание в известной работе «Lambda Papers», а также в книге восемьдесят пятого года «Structure and Interpretation of Computer Programs».
В восьмидесятых Пер Мартин-Лёф создал интуиционистскую теорию типов (также называемую конструктивной). В этой теории функциональное программирование получило конструктивное доказательство того, что ранее было известно как зависимый тип. Это дало мощный толчок к развитию диалогового доказательства теорем и к последующему созданию множества функциональных языков.
Haskell был создан в конце восьмидесятых в попытке соединить множество идей, полученных в ходе исследования функционального программирования.

История

В семидесятых в университете Эдинбурга Робин Милнер создал язык ML, а Дэвид Тернер начинал разработку языка SASL

Слайд 6Основные современные языки ФП:
Haskell — наиболее известный среди языков ФП. Вероятно, это

связано с его богатой историей. Он также повлиял на развитие других языков. «Такие вещи, как Linq, язык запросов в C#, на самом деле произошли от Haskell. Рабочие процессы F# и изменяемые состояния взяты непосредственно из его монадической структуры», — сказал главный исследователь Microsoft и ключевой контрибутор Haskell Саймон Пейтон Джонс.
Clojure — новый диалект LISP, созданный Ричем Хикки. Clojure отличается от других диалектов LISP тем, что он работает на платформе Java и компилируется в байт-код JVM, за счет чего программы на Clojure легко переносятся в любую среду с JVM. Язык также поддерживает ряд макросов, которые упрощают использование в нем существующих Java API. Структуры данных Clojure реализуют все стандартные интерфейсы Java, что делает легким запуск из Java программного кода, написанного на Clojure.
«Clojure обеспечивает легкий доступ к фреймворкам Java, с дополнительными подсказками и логикой типа, чтобы гарантировать, что вызовы Java могут избежать отражения», — объясняет Хикки. Он также говорит, что «подход Lisp к коду как данным и его макросистеме по-прежнему отличает его» от других диалектов Lisp и добавляет, что как и списки в Lisp, его карты, множества и векторы являются в Clojure первым классом. «Я думаю, что Clojure занимает уникальную нишу в качестве функционального Lisp для JVM с сильной поддержкой параллелизма», — добавил Хикки.
Elm — чисто функциональный язык, разработанный в 2012 г. Эваном Чаплицким. Он популярен среди веб-разработчиков, которым нравятся его возможности для создания пользовательских интерфейсов. Компилятор Elm предназначен для HTML, CSS и JavaScript. Он работает с библиотеками JavaScript почти так же, как Clojure — с библиотеками Java. Отличительной особенностью Elm является то, что он использует статическую проверку типов, которая помогает в устранении исключений во время выполнения, поскольку ошибки будут обнаружены на стадии компиляции. Отсутствие видимых ошибок на стороне пользователя — очевидное преимуществом этого языка.
Основные современные языки ФП:Haskell — наиболее известный среди языков ФП. Вероятно, это связано с его богатой историей. Он также повлиял

Слайд 7Elixir — динамический функциональный язык, предназначенный для построения масштабируемых и обслуживаемых приложений. Он служит для

создания систем с высокой доступностью и низкой задержкой. Elixir работает на базе экосистемы Erlang VM. Она востребована Heroku, WhatsApp, Klarna и другими проектами для распределенных, отказоустойчивых приложений. Каждый элемент приложений является выражением, функции языка Erlang могут быть вызваны без влияния на время исполнения из-за компиляции байт-кода в Erlang и наоборот.
F# — кроссплатформенный функциональный язык программирования с открытым кодом. Его разработку курирует F# Software Foundation. F# работает на Linux, Mac OS X, Android, iOS, Windows, графических процессорах и браузерах. Его можно применять свободно, он является языком с открытым исходным кодом и распространяется на условиях лицензии, одобренной OSI. F# затребован в широком спектре областей применения и активно поддерживается как со стороны сообщества Open Source, так и ведущими отраслевыми компаниями, предоставляющими профессиональные инструменты.
Idris — чисто функциональный язык программирования общего назначения, который включает особенности Haskell и метаязыка. Он характеризуется зависимыми типами, основанными на значениях, поэтому некоторые аспекты поведения программы могут быть точно определены в типе. Также реализована возможность компиляции в код на JavaScript (в том числе для Node.js) и компилирование по принципу «энергичных» вычислений (вычислять, не откладывая, все что возможно). Idris поддерживает два способа работы с системой автоматического доказательства: путем написания последовательных вызовов тактик (стиль Coq, при этом набор доступных тактик не столь богат, как в Coq, но может быть расширен штатными средствами метапрограммирования) или посредством пошаговой разработки доказательства (стиль Epigram и Agda).
JavaScript не является строго функциональным языком программирования, поскольку допускает объектно-ориентированный подход, однако у него есть компонент, который связывает его с ФП. Он включает в себя функции высшего порядка. Кроме того, новые версии стандарта ECMAScript предоставляют исправления для проблемы изменчивости.

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

Слайд 8Kotlin относится к числу новейших языков программирования. Он вышел в феврале

2016 г., но до этого в течении пяти лет проходил тестирование и активно дорабатывался. Его используют такие компании, как Amex, NBC Digital, Expedia и Gradle, но это не чисто функциональный язык. В этом отношении Kotlin можно сравнить с JavaScript, то есть с его помощью можно создавать как объектно-ориентированные, так и функциональные конструкции. Он обладает полной совместимостью с Java. К числу преимуществ Kotlin нужно отнести его лаконичность, в этом плане он более гибкий, чем Java.

Некоторые программисты считают, что он передает те же выражения, что и Java, но при этом ему требуется на треть меньше кода. Kotlin также предлагает все преимущества, связанные с функциональными языками программирования, включая функции высшего порядка, функции расширения и лямбда-выражения. Универсальность делает его подходящим для любого вида разработки, будь то серверные, клиентские веб-приложения или Android, и сейчас его создатели работают над совместимостью языка с iOS.

Scala — еще один гибридный язык, который можно применять как для объектно-ориентированного программирования, так и ФП. Статические типы Scala помогают избежать ошибок в сложных приложениях, а его среды выполнения JVM и JavaScript позволяют создавать высокопроизводительные системы с легким доступом к огромным экосистемам библиотек.

Главный специалист Telstra по аналитике больших данных Марк Молони считает, что программистам нужно обратить более пристальное внимание на функциональные языки программирования и заняться их изучением: «ФП окружает миф о его сложности или академичности, но я рассматриваю его как еще один источник информации для изучения. Чтобы освоить ФП, нужно время и практика, но этот путь ничем не отличается от того, который в конце 1980-х — начале 1990-х прошли разработчики для изучения объектно-ориентированного программирования. Технология продолжает развиваться. Это одна из причин, почему я люблю ПО. Важно уметь учиться, это равноценно тем знаниям, что у вас уже есть».
Kotlin относится к числу новейших языков программирования. Он вышел в феврале 2016 г., но до этого в

Слайд 9Функциональные языки бывают чистыми и нечистыми. Чистые функциональные языки сравнительно редки, к ним относятся

в первую очередь Haskell и Clean. В чистых языках нет побочных эффектов. На практике это означает отсутствие присваивания и ввода-вывода в том виде, к которому мы привыкли. Это создает ряд трудностей, хотя в уже упомянутых языках это решено довольно хитроумно, и на этих языках пишут код с большим количеством ввода-вывода. Языки типа Lisp, OCaml или Scala допускают функции с побочными эффектами, и в этом смысле данные языки зачастую более практичны.
Функциональные языки бывают чистыми и нечистыми. Чистые функциональные языки сравнительно редки, к ним относятся в первую очередь Haskell и Clean. В чистых языках

Что такое shareslide.ru?

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


Для правообладателей

Яндекс.Метрика

Обратная связь

Email: Нажмите что бы посмотреть