1. Функциональное прошлое и будущее
Выдержки из учебного пособия:
bq. На функциональном языке программист не должен описывать порядок вычислений. Нужно просто описать желаемый результат как систему функций.
В чистом функциональном программировании оператор присваивания отсутствует, объекты нельзя изменять и уничтожать, можно только создавать новые путём разбора и сбора существующих.
Каковы же преимущества чистых функциональных языков? Помимо упрощения анализа программ есть ещё одно — параллелизм. Раз все функции для вычислений используют только свои параметры, мы можем вычислять независимые функции в произвольном порядке или параллельно, на результат вычислений это не повлияет. Причём параллелизм этот может быть организован не только на уровне компилятора языка, но и на уровне архитектуры.
Так, значит получается, что распараллеливание возможно, а следовательно, непременно последует. В свете современной тенденции к облачным вычислениям - самое то. Вопрос параллельной обработки строго завязан на парадигме. Есть парадигма функционального программирования - будут конкретные приложения. В этом наверняка и заключается переход к функциональным языкам - подготовить платформу, тип мышления для будущего.
1.1 Происхождение
Lisp как первый функциональный язык придуман давно, диалектов создано тоже предостаточно. Императивные языки, в основной массе которые объектно ориентированные, начинаю разрастаться лямбда расширениями. Что это даёт: мешанину мух и котлет, вопросы по типу "А чем пользоваться?", разрываться. Переходный момент? Возможно. Что останется? Если будущее за параллельными вычислениями - функциональные, а потом и другие, более совершенные, более абстрактны, человеко-ориентированные. Если провести параллель с искусственным интеллектом - самое то: распределённая сеть функциональных узлов, завязанная на знании, опыте.
1.2 Концепция
Центральным понятием является функция, она же атрибут, она же цель вычисления. Пример ниже, я думаю, раскрывает логику.
2. Совмещение
2.1 Java
Что есть здесь? А здесь пожалуйста: тот же scheme в ре-инкарнации kawa: (пишите на scheme, компилируете в байт-код, исполняемый на виртуальной машине java; плюс ко всему доступ к бесчисленным библиотекам).
Нашёлся ещё один язык для jvm - Clojure. Подробное введение описано здесь. Ну и scala не будь дурой также для jvm.
2.2 CSharp
В .net 3.0 появились безымянные функции, придумали даже F#. Тенденция, однако.
2.3 Others
Насколько я помню, собираются лямбда расширение прикрутить и к PHP. Ну что ж, весьма. Ребята не отстают.
3. Web
Для web-сервисов применение функциональных языков более, чем оправданно. Наткнулся на пример выполнения скрипта на scheme. Интересно дико. А главное - прозрачно и открывает глаза на то, как доступно и понятно можно описать. Однозначно - не зря мигрируют на эту парадигму. Если кого заинтересовало, то вот проект PLT-Scheme в состав которого входят IDE, JIT, web server, библиотеки и документация. Кросс-платформенный. Кроме того, имеются хорошее пособие по scheme и книга рецептов.
3.1 CGI
Запускать веб-приложения можно как fastCGI, или же "нативно" - посредством PLT-Scheme.
4. ПО
Scheme как самостоятельный продукт - используем DrScheme, входящий в PLT-Scheme.
Ниже окно программы: лаконичное, минимальный функционал. Пример такой: нужно добавить к слову заданную последовательность символов дважды. В данном случае - к "hello" дважды восклицательный знак. Сверху функции, снизу исполнение.
Комментариев нет:
Отправить комментарий