Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1062 31-08-2006 05:23 | |
Сразу извинюсь за то, что поднимаю старую дискуссию, но я не смог тогда привести аргументы в пользу своей точки зрения по причине отсутствия литературы, поэтому хочу сделать это сейчас.
Артем, не так давно Вы критически отнеслись к возможности работы с большими числами, представляя их в N-ичной системе счисления. Так вот, я нашёл книгу, в которой приводится этот алгоритм. Это уже упомянутая мной книга С. Коутинхо "Введение в теорию чисел. Криптосистема RSA". Вот, что он пишет:
Обозначим через b наибольшую степень числа 10, представимую
в виде целого числа с простой точностью [под целым числом с
простой точностью подразумевается максимальное число,
представимое в данном языке с помощью целочисленного типа
данных, например, int или long, однако в примечаниях
редакции уточняется, что квадрат b должен принадлежать
интервалу, определённому этим типом] в этом языке. Тогда b
будет основанием системы счисления, в которой мы будем
записывать числа с многократной точностью. Для любого
целого числа n > 0 существует единственный набор целых
чисел а0, а1, ..., ak между 0 и b—1 такой, что
n = ak * b^k + а2 * b^2 + a1 * b + а0.
Позиционное представление числа n по основанию b — это
запись
n = (ak...a1a0)b
Целые числа а0, ... ,аk представляют собой «цифры»
представления числа n по основанию b. В компьютере числу n
отвечает список, каждый элемент которого содержит цифру
представления числа n по основанию b.
<...>
Сложение чисел в системе счисления с основанием b можно вы-
выполнять точно так же, как и сложение в десятичной системе.
Нужно позаботиться только о переносе в следующий разряд.
Нужно ли говорить, что операции с таким представлением больших чисел будут значительно быстрее, чем с представлением последних как строк?!
Я нашёл эту книгу (да не покарают меня модераторы! :)) здесь: http://slil.ru/22632714/416174724/KoutinhoRSA.djvu. Если хотите, можете ознакомиться получше, книжка очень интересная, и написана чрезвычайно увлекательно.
№ 1061 30-08-2006 09:05 | |
Ответ на »сообщение 1060« (Geniepro)
___________________________
Вот и Прологу и Лиспу мы уже кости сто раз перемывали и эти реализации называли :)
P# , по большому счету, не совсем то, что нужно.
№ 1060 30-08-2006 08:01 | |
Ответ на »сообщение 1059« (Jack Of Shadows)
___________________________
Ну, правда, для особо специфических частей все-равно придется использовать Prolog. :)
Для .NET тоже есть Пролог - P# http://www.dcs.ed.ac.uk/home/jjc/psharp/
Правда, последняя версия 1.1.3 аж 2003 года...
Лиспы для .NET тоже есть: L#, dotLisp, dotScheme...
№ 1059 30-08-2006 02:01 | |
Ответ на »сообщение 1058« (Артем)
___________________________
Пока ничего не думаю.
И сишарп и java еще только заявляют о том что функциональные возможности появятся.
В java минимум через 2 года (заявлено в 7 версии, 6 еще даже не вышла)
А сишарп 3 видимо превращается в долгострой.
К тому времени когда они выйдут, я уже наверное 2-3 года как на lispworks работать буду.
Да и F# вон на месте не стоит.
Так что введение функциональных возможностей в java и сишарп теряют свою актуальность (для меня) из за неспешности MS и Sun и появления ФЯ на dotnet (F#) с доступом ко всему богатству библиотек.
Чего гадать о том что через 2-3 года только появится.
№ 1058 30-08-2006 01:39 | |
Ответ на »сообщение 1057« (Jack Of Shadows)
___________________________
Так что у те кто работает на dotnet (а среди дельфистов таких все больше и больше) кажись появляется возможность использовать ФЯ и при этом не потерять ни IDE ни визуальные компоненты, ни ASP Совершенно верно. И самым удобным на данный момент кандидатом являетя F#. Я сам тоже подумываю, чтобы специфические части .net-приложений писать на нем, а остальные на C#. Ну, правда, для особо специфических частей все-равно придется использовать Prolog. :)
Вагиф, извините за назойливость, но что вы, все-таки, думаете о Java и C#3.0 в смысле функциональных возможностей?
№ 1057 30-08-2006 01:25 | |
Ответ на »сообщение 1056« (Артем)
___________________________
Да, я был неправ по поводу команды F#. Она тоже весьма представительна.
Да и Apress как видно из этой заметки http://blogs.msdn.com/dsyme/archive/2006/02/18/534863.aspx похоже весьма заинтересована в выпуске книги по F#
Так что у те кто работает на dotnet (а среди дельфистов таких все больше и больше) кажись появляется возможность использовать ФЯ и при этом не потерять ни IDE ни визуальные компоненты, ни ASP
Новых проектов на dotnet у меня в ближайшее время не предвидится.
Но F# буду иметь в виду.
№ 1056 30-08-2006 01:13 | |
Ответ на »сообщение 1053« (Jack Of Shadows)
___________________________
По F# нет ни одной книги. Есть книги по OCAML. Да и коммьюнити сайты, в принципе, предоставляют неплохие материалы. И книги, вроде, конкретно по F# тоже собираются выпускать.
Во вторых на F# пока вообще ничего не написано. Он нигде не используется. <- ? -> A few of the projects using F#:
JunGL
Abstract IL
A Security Analysis for Libraries
Verified interoperable implementations of security protocols
A verifier for Singularity
Chinese Ches
У F# нет вообще ничего кроме туманно очерченного желания сделать "что то типа ocaml"
Соответственно, каждая версия сопровождается добавлением очень сильных изменений. Не изменений, а дополнений. Согласитесь, это несколько разные вещи.
Из сообщения №1051:
Это гораздо сильнее поддержка чем того же F# над которым работает один единственный человек Don Syme. <- ? -> http://research.microsoft.com/fsharp/community.aspx
№ 1055 29-08-2006 16:37 | |
Ответ на »сообщение 1054« (Geniepro)
___________________________
Интерес чисто академический.
Кому нужна еще одна java ? Уже есть три - Sun, IBM, и BEA. Есть еще и opensource какие то реализации.
А вот по поводу использования ФЯ сегодня, совсем не обязательно ждать язык в упаковке от MS.
Ocaml - вполне практичный язык. Куча современных библиотек, мощнейший компилятор, выдающий код быстрее сишного.
Много книг. Например вот эта: http://caml.inria.fr/pub/docs/oreilly-book/ Developing Applications With OCAML
Есть свой web farmework http://www.ocsigen.org/index
Далее Erlang - тоже очень практичный ФЯ. С книгами, библиотеками, широким использованием в промышленном программировании (Ericsson)
Web server YAWS написанный на erlang http://yaws.hyber.org/ оставляет далеко позади такие промышленные стандарты как Apache и IIS в плане производительности.
Посмотрите на сравнительные тесты - впечатляют.
Про лисп упоминать не буду. Уже приводил и книги и библиотеки.
Короче ФЯ можно использовать сегодня для повседневной работы. Как минимум в web разработке.
№ 1054 29-08-2006 16:23 | |
Ответ на »сообщение 1053« (Jack Of Shadows)
___________________________
Интересный проект: http://www.cis.upenn.edu/~stse/javac/
Fjavac: a functional Java compiler
Fjavac is a Java 5 compiler implemented in the functional language OCaml. Currently the compiler can parse and pretty-print all JDK 1.5 files (including generics and wildcards). Basic type checking and bytecode compilation are implemented, but supports for generics (type inference and capture conversion) are still underway.
Цель проекта - создание полной формальной спецификации Java с использованием ФЯ Ocaml/F#.
№ 1053 29-08-2006 15:56 | |
Ответ на »сообщение 1052« (Артем)
___________________________
Но, согласитесь, F# уже можно использовать в промышленном программировании. И лицензия, в принципе, позволяет.
Define промышленное программирование.
Во первых язык нельзя использовать в промышленном программировании (массы быстрообучаемых программистов) без литературы. По F# нет ни одной книги. По хаскелю уже изданы несколько.
Во вторых на F# пока вообще ничего не написано. Он нигде не используется.
На хаскеле уже написаны и используются несколько программ. Например весьма популярый CVS darcs
В третьих никакой язык не получит широкого распространения, пока не устоится какой то базовый костяк.
У хаскеля такой костяк есть - стандарт haskell 98
У F# нет вообще ничего кроме туманно очерченного желания сделать "что то типа ocaml"
Соответственно, каждая версия сопровождается добавлением очень сильных изменений.
Например в последней - значимые отступы и active patterns.
В таких условиях даже книгу написать невозможно. Приходится ждать, пока язык не устоится.
В четвертых лицензия GHC позволяет использовать его безо всяких ограничений и требований.
Что касается того почему MS так боится афишировать свою связь с хаскелем, то мы можем только гадать.
Ответа я не знаю.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|