Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  15:41[Войти] | [Зарегистрироваться]
Обсуждение темы:
Функциональное программирование

Функциональное программирование всегда привлекало меня в противопоставлении к императивному.
Я очень часто обсуждаю различные аспекты функционального программирования на различных ветках на Базарной площади.
Но хотелось бы собрать всех заинтересованный этой темой в одной ветке.
Я думаю что настало время открыть такую тему. И вот почему.

Исторически функциональное программирование появилось практически вместе с императивным.
Вторым языком после фортрана был лисп.
Но увы, функциональное программирование надолго было уделом исследовательских институтов или специализированных приложений (Искусственный Интеллект)
Конечно не надо считать весь мир дураками из за того что развитие пошло по пути языков Алгол семейства.
Для этого были вполне обьективные причины. Функциональные языки слишком близки к человеку и слишком далеки от машины.
Они сьедают в десятки раз больше рессурсов чем императивные языки.
Вспомните претензии, предявляемые к java - первому императивному языку с виртуальной машиной и сборщиком мусора, толкаемому большими корпорациями в mainstream.
Жутко тормозит, и жрет всю память какая есть. А ведь функциональные языки (далее ФЯ) все без иключения имеют сборщик мусора, виртуальную машину.
Многие из них (семейство лисп) еще и динамические, что только усугубляет положение.
Вполне естественно что появившись более полусотни лет назад они надолго опередилли свое время.

Для широкого распространения ФЯ нужны гигабайты дешевой памяти и гигагерцы дешевых процессоров.
Прошло более 50 лет, прежде чем такие требования к железу стали реальностью.
Это время наступило. СЕЙЧАС.
Добро пожаловать в новую эру программирования.

 Jack Of Shadows

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 5502 сообщения

Добавить свое сообщение

Отслеживать это обсуждение


Смотрите также обсуждения:
Средства разработки. Языки программирования.
  • Delphi 4 or Delphi 5
  • Что приобрести в качестве средства разработки?
  • Delphi6
  • Delphi vs PowerBuilder
  • Сравнение компиляторов
  • Вот и вышла Delphi 7... Вы рады?

  • <<<... | 712—703 | 702—693 | 692—683 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 481


    № 702   13-08-2006 04:51 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 701« (Артем)
    ___________________________
    Пардон, не Фиббоначи, а факториала. Совсем заработался


    № 701   13-08-2006 04:50 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 700« (Артем)
    ___________________________
    не GiantSt, а GiantInt


    № 700   13-08-2006 04:45 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 699« (hugi)
    ___________________________
    Да и вообще, как-то странно Вы переводите, с идеологическим уклоном.

    Однако Вы пропустили мимо ушей моё замечание

    А я-то боялся, что это только я и вижу. Меня тут раньше даже провокатором обозвали по отношению к  Jack of Shadows...


    Кстати, hugi, посмотрите ссылку  http://delphi-faq.zoxt.net/c39.htm?id=70021
    И попробуйте сделать, например вычисление чисел фиббоначи (см. ниже), используя модуль UmathServices


    function GiantFactorial(n:string):string;
    begin
      if n='0' then Result:='1'
      else Result:=ulMPL(n,GiantFactorial(ulSub(n,'1')));
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo1.Lines.Add(GiantFactorial('2000'));
    end;



    В C# можно написать специальный класс GiantSt и переопределить для него операторы, так что будет еще красивее.


    № 699   13-08-2006 03:19 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 693« (Jack Of Shadows)
    ___________________________
    Перевести на русский ? Полиморфизм это центральная концепция ЦЕЛЬ, которая реализуется при помощи СРЕДСТВА ООП.
    Не могли бы Вы назвать автора Вашего Англо-Русского Словаря? Просто интересно, кто это додумался перевести слово "concept" как "цель"? Я и в словарь синонимов заглянул: "концепция -- понятие, идея". Странно...
    Да и вообще, как-то странно Вы переводите, с идеологическим уклоном. Вот Вам эта же фраза в официальном переводе:
    И, как мы увидим в следующих главах, полиморфизм играет очень важную роль в объектно-ориентированном проектировании.
    Конечно, тоже не дословный перевод, но более близок к оригиналу, чем Ваш. Тем более, что в оригинале и намёка на слова: "ЦЕЛЬ, которая реализуется при помощи СРЕДСТВА ООП", -- нет!
    Но это ещё ничего! Читаем дальше!
    Basically, polymorphism is a concept in type theory wherein a name (such as the parameter d) may denote instances of many different classes as long as they are related by some common superclass.
    И Вы утверждаете, что теория типов ничего не говорит об ООП. Постойте, а откуда в этой цитате взялись такие термины, как "instance", "class", "superclass"? А дальше опять отсебятина: ООП это механизм (средство реализации) этих концепций.
    Единственная мысль из всего Вашего сообщения, с которой я согласен, так это:
    Все эти private, public, protected - механизм, средство реализации концепции инкапсуляции.
    Да, это средства реализации инкапсуляции, но что?.. неужели они тождественны ООП в целом? Нет, конечно же! Средства реализации инкапсуляции различаются для каждого ОО языка. Так в C# есть ещё internal, а в Smalltalk этих слов вообще нет: все методы -- открытые, все поля -- закрытые, но тем не менее и C# и Smalltalk -- это ОО языки.
    Существуют и другие механизмы реализации этих концепций.
    Про type classes уже слышали. Однако Вы пропустили мимо ушей моё замечание, о том, что это очень уж напоминает родные программистам на Delphi, C#, Java интерфейсы.

    А как Вам такая цитата из Буча:
    Каждый стиль программирования имеет свою концептуальную базу. Каждый стиль требует своего умонастроения и способа восприятия решаемой задачи. Для объектно-ориентированного стиля концептуальная база - это объектная модель. Она имеет четыре главных элемента:
        * абстрагирование;
        * инкапсуляция;
        * модульность;
        * иерархия.

    Разве Буч называет эти элементы целями? Нет! Объектная модель ВКЛЮЧАЕТ в себя эти элементы, цели же не могут ВКЛЮЧАТЬСЯ в объектную модель, да и в какую либо другую.
    Главная же цель у ООП одна: борьба со сложностью. Всё остальное -- средства!
     hugi


    № 698   12-08-2006 17:35 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 697« (Артем)
    ___________________________

    Кошмар! Я тут подумал, что кое-у-кого могут возникнуть аллюзии насчет Марии Антуанетты и всю нашу лавочку быстро накроют. Ужас! Лисп в опасности!
    :)))

    Ну здрассте! С чего это прикрывать?
    Матом друг друга не кроем, очень даже интеллигентно общаемся... :-)
    Опыт оберонщиков не пропал даром... :-))

    Революция Лиспа? хм... длиной в полвека? :-))


    А вообще, Geniepro, переходите на Лисп.

    Кстати, этот вопрос я как раз и изучаю. Вот как-раз закачал LispWorks Personal, буду посмотреть, чем он хорош...

    Но вообще-то, в свете многоядерности Лисп имеет мало перспектив, увы... :-(

    И ваще надо возродить OCCAM - он как раз был заточен под параллельные процессы.
    Жаль, нет толковых компиляторов для Win32 и особенно .NET. Я как раз коллекционирую компилеры для Visual Studio... :-))


    В общем, и на марсе будут яблони цвести (если технологическая сингулярность не бабахнет :) )

    Яблони на Марсе будут, вот только проведём геотрансформацию Марса (или как там?)
    А в сингулярности я не верю... :-))


    № 697   12-08-2006 16:39 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 696« (Артем)
    ___________________________
    Кошмар! Я тут подумал, что кое-у-кого могут возникнуть аллюзии насчет Марии Антуанетты и всю нашу лавочку быстро накроют. Ужас! Лисп в опасности!
    :)))


    № 696   12-08-2006 16:35 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 695« (Geniepro)
    ___________________________
    Почему Я должен увеличивать размер стека??? :-x
    Почему компилятор об этом не заботится??? :-x

    Опять 25. Мы же указываем минимальный и максимальный размер стека. Если текущего размера мало, то он автоматически увеличивается. Верхний лимит - MAXSTACKSIZE. Не нравится, как это сделано в Дельфи - переходите на .net.  Другое дело, если рекурсия у вас неправильная, то она даст переполнение и в Delphi, и в .net, и в ФЯ.

    Как не устаёт повторять Jack - наступает время, когда мы сможем себе позволить возлагать рутину на компьютер и решать свои задачи, не отвлекаясь на ненужные мелочи типа чьих-то старых глюков... ;-)
    Пусть даже ценой небольшой потери производительности программ...


    Как сказал великий... В общем, и на марсе будут яблони цвести (если технологическая сингулярность не бабахнет :) )
    А вообще, Geniepro, переходите на Лисп. Расскажете нам о своих впечатлениях. Может, устроим тогда в королевстве Дельфи революцию. И Jack of Shadows будет нашим Робеспьером.
    :)))


    № 695   12-08-2006 15:11 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 688« (Артем)
    ___________________________

    По умолчанию максимальный размер стека - {$MAXSTACKSIZE $0100000}.
    Увеличьте его - {$MAXSTACKSIZE $01000000}. И ваша программа отработает. Вообще, по умолчанию размер стека в Дельфи маленький. Если будут интенсивно использоваться рекурсивные функции – его надо увеличивать.

    Теперь о том, почему у меня все отработало и при стеке по умолчанию. Потому, что у меня более оптимальная и правильная рекурсивная функция. Посмотрите на нее внимательнее. :)

    Вот об этом и речь в этой теме - традиционные системы программирования заставляют слишком много времени тратить на решение проблем, не имеющих отношения к основной задаче...

    Почему Я должен увеличивать размер стека??? :-x
    Почему компилятор об этом не заботится??? :-x
    Почему программа в скомпилированном виде сама не увеличит стек при необходимости? :-x

    Как не устаёт повторять Jack - наступает время, когда мы сможем себе позволить возлагать рутину на компьютер и решать свои задачи, не отвлекаясь на ненужные мелочи типа чьих-то старых глюков... ;-)
    Пусть даже ценой небольшой потери производительности программ...

    ЗЫ. За совет, конечно, спасибо... ;0)


    № 694   12-08-2006 14:54 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 691« (Jack Of Shadows)
    ___________________________

    На вопрос почему в дельфи не реализована оптимизация рекурсии, он ответил буквально следующее:
    "Рекурсию ПРАКТИЧЕСКИ НИКТО НЕ использует, и мы не будем тратить свое время на фичу, которая НИКОМУ НЕ НУЖНА.


    Как видим, дело в лени Борланда (из-за какой они уже доигрались до продажи средств разработки), а не в том, что оптимизацию рекурсии нельзя сделать в ИЯ. Я уже говорил, чтов некоторых  ИЯ-реализациях эта оптимизация выполнена.

    The .NET CLR provides a tail call instruction. The following MSIL
    method (from [MM01]) will loop forever instead of overflowing the
    stack.
    .method public static void Bottom() {
    .maxstack 8
    tail. call void Bottom(); ret
    }
    – “If the call is from untrusted code to trusted code the frame
    cannot be fully discarded for security reasons.” [MM01]
    _ Some Java Virtual Machines optimize recursive tails calls. (The
    IBM and Microsoft SDK do, but SUN’s JDK does not [SO01]).

    Наcчет Java 1.5 – может уже реализовали.
    Кстати, не факт, что в BDS2006 еще нет оптимизации рекурсии. Лень проверять. Да дело и не в этом. Дело в другом. Вы снова приводите тут мне рекурсивную функцию и просите вычислить ее от миллиона. Вагиф, я могу установить минимальный размер стека в 16М, а максимальный в 1Г и никакого переполнения стека не будет. Будет просто долгое вычисление. Я опять повторяю, что рекурсивные (да и итеративные тоже) функции надо уметь писать. И опыт с быстрой сортировкой это хорошо показал. Кстати, моя функция быстрой сортировки сортирует не только 50 000, но и 500 000 элементов при стеке по умолчанию.



    Неужели при использовании нехвостовой рекурсии в неудачно спроектированной функции в ФЯ не возникает переполнение стека? 

    Конечно возникает. Чудес не бывает. Стек он и в Африке стек.


    Вот и чудно.


    № 693   12-08-2006 14:18 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 667« (hugi)
    ___________________________
    Вот это да! Вдруг выяснилось, что инкапсуляция и полиморфизм -- ЦЕЛИ ООП! А я то, несведущий человек, всю жизнь думал, что инкапсуляция и полиморфизм -- это СРЕДСТВА ООП, а ни как не цели!!! Я, конечно, понимаю, что нынче модно критиковать Буча, но всё же не потрудитесь прочитать (или перечитать?), чтобы впредь не допускать подобных... эээ... будем называть это оговоркой.

    Hugi, давайте вместе почитаем Буча :))

    Polymorphism exists when the features of inheritance and dynamic binding interact. It is
    perhaps the most powerful feature of object-oriented programming languages next to their
    support for abstraction, and it is what distinguishes object-oriented programming from more
    traditional programming with abstract data types. As we will see in the following chapters,
    polymorphism is also a central concept in object-oriented design.

    Перевести на русский ? Полиморфизм это центральная концепция ЦЕЛЬ, которая реализуется при помощи СРЕДСТВА ООП.

    Читаем дальше:

    Basically, polymorphism is a concept in type theory wherein a name (such as the parameter d) may denote instances of many different classes as long as they are related by some common superclass.

    Перевести на русский ? Полиморфизм это концепция из теории типов.
    Теория типов не говорит ничего об ООП.
    Но говорит о полиморфизме и говорит о инкапсуляции.
    ООП это механизм (средство реализации) этих концепций.

    Все эти private, public, protected - механизм, средство реализации концепции инкапсуляции.

    Существуют и другие механизмы реализации этих концепций.
    Я вам настоятельно рекомендую ознакомиться с ними.
    Это позволит вам обьективно судить об ООП. Судить на своем опыте, а не по откровениям пророков.



    <<<... | 712—703 | 702—693 | 692—683 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 481


    Добавить свое сообщение

    Отслеживать это обсуждение

    Дополнительная навигация:
    Количество сообщений на странице

    Порядок сортировки сообщений
    Новое сообщение вверху списка (сетевая хронология)
    Первое сообщение вверху списка (обычная хронология)

    Перейти на конкретную страницу по номеру
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования