Автор работы: Пользователь скрыл имя, 20 Февраля 2013 в 07:16, статья
В 1965 году (через шесть лет после изобретения интегральной схемы) один из основателей Intel Гордон Мур в процессе подготовки выступления обнаружил закономерность: появление новых моделей микросхем наблюдалось спустя примерно год после предшественников, при этом количество транзисторов в них возрастало каждый раз приблизительно вдвое. Мур пришел к выводу, что при сохранении этой тенденции мощность вычислительных устройств за относительно короткий промежуток времени может вырасти экспоненциально. Это наблюдение получило название закона Мура.
УДК004 КогайГ.Д. (Караганда, КарГТУ)
СпановаБ.Ж. (Караганда, КарГТУ)
Кряжев В.В. (Караганда, КарГТУ)
ФУНКЦИОНАЛЬНОЕ
В 1965 году (через шесть
лет после изобретения
Ни одна другая область человеческой деятельности еще не развивалась такими бурными темпами. Примерно в 2005 – 2007 годах был достигнут предел по количеству транзисторов на одном чипе, что привело к появлению многоядерных процессоров. Многопоточное (concurrent) и параллельное (parallel) программирование это те проблемы, которые встают сейчас, если мы хотим сейчас воспользоваться преимуществами многоядерной архитектуры.
В приложениях, оптимизированных под многопоточность, наблюдается прирост производительности на многоядерном процессоре. Однако, если приложение не оптимизировано, то оно не будет получать практически никакой выгоды от дополнительных ядер, а может даже выполняться медленнее, чем на процессоре с меньшим количеством ядер, но большей тактовой частотой.
На текущий момент императивное программирование это наиболее распространенный подход в написании программного обеспечения. Императивное программирование - это парадигма программирования, которая описывает процесс вычисления в виде инструкций, изменяющих состояние программы. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер. Программа состоит из инструкций, изменяющих память и исполняемых процессором.
В случае когда мы имеем дело с множеством потоков, изменение памяти должно быть согласованным. Нельзя допустить, чтобы несколько потоков попытались изменить один и тот же участок памяти одновременно. Написание программ используемых многопоточность занятие сложное, так как ошибки очень легко допустить, но сложно обнаружить. Тестирование таких приложений еще одна нетривиальная задача, так как ошибки могут возникать только в определенных условиях.
Функциональное
Определение функции в функциональном программировании очень близко к определению функции в математике. При вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат: выходные данные зависят только от входных. Чистые (purefunction) не имеющие побочных эффектов (sideeffects). В этом основное отличие от функций в императивном программировании, где функции могут опираться не только на аргументы, но и на состояние внешних переменных, а также иметь побочные эффекты и менять состояние внешних переменных.
Отсутствие побочных эффектов ведет к тому, что порядок проведения вычислений становится несущественным: поскольку на вычисляемый результат не влияют никакие побочные эффекты, не важно, когда вычислять этот результат. Это позволяет средам выполнения программ на функциональных языках распараллеливать их без каких-либо дополнительных действий со стороны программиста.
Тестирование программ написанных в функциональном стиле, тоже намного проще. Так как результат вычисления функции зависит только от входных параметров, то тестирование любой функции достаточно простая задача. Например, написание мольных тестов.
Развитие современной многоядерной архитектуры привели к тому что современные языки и платформы программирования становятся мульти-парадигменными, поддерживающими не только императивный, объектно-ориентированный но и функциональный подход. Примеры языков поддерживающих программирование в функциональном стиле: C#, Scala, Groovy, Python, Ruby. Язык F# ставший уже полноценным языком в платформе .NET способствует только функциональному программированию. Хотя написание на этом языке в императивном стиле и возможно язык этому не способствует. На текущий момент есть договоренность добавление функциональных возможностей в ближайший релиз JavaSE 8. Такие функциональные языки такие как: Haskell, Clojure, Erlang тоже получают все большую популярность и находят все большее применение.
Итак,почему же функциональное программирование важно?
Достоинства:
Недостатки:
Вывод: В связи с развитием
компьютерной архитектуры практически
все современные языки