Функциональное программирование |
Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.
Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.
Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.
Jack Of Shadows
Всего в теме 5502 сообщения
Добавить свое сообщение
Отслеживать это обсуждение
- Средства разработки. Языки программирования.
- Delphi 4 or Delphi 5
- Что приобрести в качестве средства разработки?
- Delphi6
- Delphi vs PowerBuilder
- Сравнение компиляторов
- Вот и вышла Delphi 7... Вы рады?
№ 1072 31-08-2006 14:04 | |
... что вы, все-таки, думаете о Java и C#3.0 в смысле функциональных возможностей?
А есть ещё интересный язык Nemerle - типа C# - с уже доступными возможностями функционального и метапрограммирования, а также ООП. Есть variants, pattern matching, type inference and parameter polymorphism (aka generics), tail recursion. Поддерживает aspect-oriented programming...
Некая смесь C# и ML...
http://nemerle.org/
Что думаете об этом магическом земноморском чуде? :))
№ 1071 31-08-2006 11:44 | |
Кстати, здесь http://eclipsefp.sourceforge.net/ неплохой плагин к eclipse для программирования на haskell. Интегрируетс с GHC и HUGS. Заявлена интеграция с iGHC, но у меня что-то не получилось. Встраивается в eclipse версии 3.1 и 3.2 (проверено), а может и в другие тоже. Развивается, на мой взгляд достаточно приличными темпами.
№ 1070 31-08-2006 10:06 | |
Ответ на »сообщение 1068« (hugi)
___________________________
А все-таки, неплохо было бы написать на Delphi пример для сложения чисел произвольной длины ;)
№ 1069 31-08-2006 10:02 | |
Ответ на »сообщение 1068« (hugi)
___________________________
ОК. Почитаю позже - я сейчас очень занят :(
№ 1068 31-08-2006 09:04 | |
Ответ на »сообщение 1066« (Артем)
___________________________
Артем, Вы не хотите подумать.
Так проблема в том и заключается, что библиотеки эмуляции n-разрядных чисел рассчитаны на конечное, ОПРЕДЕЛЕННОЕ ПРИ РАЗРАБОТКЕ БИБЛИОТЕКИ число битов
Там же написано: список "цифр", а список -- это динамическая структура. Можно в неё запихнуть какое угодно число.
И забудьте Вы про эти биты. В описанном способе не используется двоичная арифметика.
Если мы эмулируем 128-битовое число, то в Delphi его можно задавать, как TMy128Bit = packed record i3,i2,i1,i0:cardinal end;
Число, полученное способом, описанным Коутинхо, будет равно числу, полученному Вашим способом, если только основание b будет равно MAXINT + 1. Но у меня складывается впечатление, что Вы не поняли, в чём там соль. Советую почитать в оригинале, там всего одна глава небольшая, но если всю её цитировать здесь, займёт слишком много места. Кстати весит книга совсем немного: чуть больше 2,5 мегабайт.
№ 1067 31-08-2006 08:45 | |
Ответ на »сообщение 1065« (Сергей Перовский)
___________________________
Что касается примечания переводчика про B^2, то оно на мой взгляд не совсем корректно, с умножением можно справится алгоритмически и при В равном MAXINT.
Согласен. Но количество кода и проблем должно при этом увеличиться.
№ 1066 31-08-2006 07:23 | |
Ответ на »сообщение 1065« (Сергей Перовский)
___________________________
Если Вам приходилось эмулировать 32 разрядный integer на байтовом (или 4 битном) процессоре, то легко представить, что с помощью тех же алгоритмов можно эмулировать целое произвольной длины с помощью достаточного количества integer-ов. Так проблема в том и заключается, что библиотеки эмуляции n-разрядных чисел рассчитаны на конечное, ОПРЕДЕЛЕННОЕ ПРИ РАЗРАБОТКЕ БИБЛИОТЕКИ число битов. Во всяком случае, я не видел таковых для произвольного числа. Если мы эмулируем 128-битовое число, то в Delphi его можно задавать, как TMy128Bit = packed record i3,i2,i1,i0:cardinal end;
Но и 128 бит в строковом представлении - это не так и много. А как же работать с числами, представление которых размером с простыню?
№ 1065 31-08-2006 06:43 | |
Ответ на »сообщение 1063« (Артем)
___________________________
Там конечно опечатка: основанием является MAXINT+1.
В таком случае последовательность integer значений представляет собой по сути увеличенный integer. Если Вам приходилось эмулировать 32 разрядный integer на байтовом (или 4 битном) процессоре, то легко представить, что с помощью тех же алгоритмов можно эмулировать целое произвольной длины с помощью достаточного количества integer-ов. Скорость этих алгоритмов будет заметно выше, чем при использовании десятичных строк.
№ 1064 31-08-2006 06:11 | |
Ответ на »сообщение 1062« (hugi)
___________________________
Большое спасибо за ссылку, книга замечательная.
Что касается примечания переводчика про B^2, то оно на мой взгляд не совсем корректно, с умножением можно справится алгоритмически и при В равном MAXINT.
№ 1063 31-08-2006 06:06 | |
Ответ на »сообщение 1062« (hugi)
___________________________
Обозначим через b наибольшую степень числа 10 => b=9, для Integer, если 10 здесь - десятичное число, или b=32 (31 для знакового),если 10 здесь - двоичное. В приведенной мною библиотеке чсла обрабатываются как десятичные строки, а вы хотите обрабатывать их, как 9-ричные. Ну хорошо, как 32-ричные. Ладно, для ANSI-строк как 256-ричные (больше нельзя). Но, после получения результата, нам надо будет их (полученные n-ичные строки) проконвертировать в удобочитаемый 10-ричный формат. Я только, вот, не понимаю, что вы хотите доказать? Что процессор умеет складывать n-ичные числа, когда байт памяти есть символьное выражение числа в произвольной n-ичной системе? Кажется, процессорная арифметика рассчитана только на 2-ичную (про BCD не будем вспоминать). Все иное - суть работа со строками.
В конце концов, у вас есть мой пример работы с бесконечными числами в Delphi (теоретически, там длина числа в 10-чном выражении может быть до 2-х миллиардов с хвостиком чисел, хотя, на практике, естественно, компьютер при таких огромных значениях, просто, зависнет). Если вы считаете, что ваш дежавю файл позволяет вам более оптимально работать с числами любого размера - приведите хотя бы свой пример сложения. А читать про числа у меня сейчас нет времени - в институте начитался :)
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|