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

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

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


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

Архив

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


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

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

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

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

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

 
   
С Л С

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

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

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

Квинтана

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

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

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

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

 
  
АРХИВЫ

 
 

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

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

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

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

 Jack Of Shadows

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

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

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


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

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

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


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

  • <<<... | 532—523 | 522—513 | 512—503 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 499


    № 522   28-07-2006 11:11 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 515« (Артем)
    ___________________________
    Вообще-то, в просторечии у программистов препроцессор, макрос, прекомпилятор – суть одно и то же.

    Визуальная среда, макросы, препроцессоры, кодогенераторы - суть одно и тоже - мета-программирование. Однако заявлять на этом основании что IDE Delphi и макросы это одно и тоже потому что видите ли решают одну и ту же задачу - генерируют код до компиляции, было бы не верно.


    Другое дело, что препроцессоры бывают разных видов.


    Кирка и отбойный молоток решают абсолютно одну и ту же задачу, но ведь никто не ставит между ними знак равенства.
    Техническое различие имеет решающее значение. И никто не буджет говорить "Кирки бывают разных видов, но все это одно и тоже" :))

    Да, макросы и препроцессоры решают одну и ту же задачу. Но технически это совершенно разные инструменты.


    Давайте намалюем стандартную схему макроса:

    ПРОГРАММА+МАКРОС ---(прекомпилятор)--->ОКОНЧАТЕЛЬНЫЙ ТЕКСТ ПРОГРАММЫ ---(стандартный компилятор)--->БИНАРНЫЙ КОД(ИЛИ ПСЕВДО КОД)


    Артем, вы не понимаете. Я не имею в виду препроцессоры ДЛЯ СОЗДАНИЯ БИБЛИОТЕКИ.
    Я имею в виду препроцессоры КАК ЧАСТЬ БИБЛИОТЕКИ.
    То есть если вы захотите дать своим пользователям возможность самим использовать ваши макросы, то вам придется поставлять препроцессор вместе с библиотекой, а также документацию, как его использовать.

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


    № 521   28-07-2006 10:57 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 520« (Max Belugin)
    ___________________________
    Макс, абсолютно верно :)) Мне просто нечего добавить.


    № 520   28-07-2006 09:39 Ответить на это сообщение Ответить на это сообщение с цитированием
    Насколько я понял, корень этой лиспомакровой крутизны в следующем:
      *Язык простой и довольно тупо мепится на AST (не уверен, что именно AST тут правильный термин может "Модель программы")
      *Программе доступен свой AST
      *AST сделано из тех же структур что и обычная программа - из списков
      *Есть традиции и библиотеки для работы со списками
     

    В результате можно использовать уже готовый траслятор для написания макроса. Макрос не работает с текстом, а только с AST при этом не обязан работать со всей AST, а может быть вызван как обычная функция относительно некоторого кусочка программы.

    В итоге можно легко сделать практически любой язык, правда с синтаксиом лиспа.

    Джек поправьте, если я ошибся


    № 519   28-07-2006 08:05 Ответить на это сообщение Ответить на это сообщение с цитированием
    сообщение от модератора

    Я тоже был в отпуске, поэтому, к сожалению, пропустил момент, когда здесь началась вся эта ерунда. Но теперь я здесь и, если что, буду вырезать всё сразу.

    1. Артём получает строгое предупреждение за систематические оскорбительные провокации (например, сободезнования, с которых началось »сообщение 515«, я безусловно отношу к таким провокациям). И внимательнее надо быть к аргументам противников, чтобы не обвинять их в том, чего они не говорили. С этого момента любое подобное сообщение будет удаляться.

    2. Jack of Shadows получает благодарность за то, что в течение всего этого времени не поддавался на провокации и отвечал сдержанно и корректно, хотя это, видимо, было непросто.


    № 518   28-07-2006 05:05 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 517« (Сергей Перовский)
    ___________________________
    Очень правильное замечание :)


    № 517   28-07-2006 04:27 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 512« (Jack Of Shadows)
    ___________________________
    По сути Вы утверждаете очень простую вещь: в лиспе проще написать препроцессор и можно поставлять его прямо в составе программы.
    Это все тот же разговор об использовании универсального или специализированного инструмента.
    Когда Вы говорите - "можно использовать внутри лисп-программы любой язык", надо не забывать добавить "если напишете его компилятор".
    Если у меня есть готовый инструмент для SQL запросов, меня не слишком привлечет перспектива  написать его самому, даже если в лиспе это проще, чем в других языках.


    № 516   28-07-2006 03:46 Ответить на это сообщение Ответить на это сообщение с цитированием
    Простите за мои описки. Все время путаю с [Qoute]. Обещаю в своем Ворде сделать кнопочки-макросы, как  на сайте :)


    № 515   28-07-2006 03:42 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 512« (Jack Of Shadows)
    ___________________________
    Вагиф, мои соболезнования. После отдыха на озере Тахо вам придется  снова созерцать бурчание этих несносных "непонимателей" Лиспа, вернее уже не Лиспа, а макросов и препроцессоров (действительно, уже пора открывать макросную ветку форума). Итак, Вагиф, приступим.
    Приведу цитату из вашего поста. 

    Ну я так и знал. :)) Начинали с того что в дельфи макросы сделали, а выяснилось, что до дельфи, текст программы обрабатывает ваша программа.
    Это не макросы, Артем, это препроцессор. Их полно, наиболее известные это это SQL/J и AspectJ. Разница между препроцессорами и макросами колоссальная.
    У меня сейчас нет времени, надо бежать. Но если вас интересует мы попозже эту тему раскроем. А пока что скажу вам что премия Тюринга за препроцессор вам не светит :))


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


    В информатике, препроцессор — это компьютерная программа, принимающая данные на входе, и выдающая данные, предназначенные для входа другой программы, например, такой как компилятор. О данных на выходе препроцессора говорят, что они находятся в препроцессированной форме. Наиболее частый случай использования препроцессора — обработка исходного кода перед передачей его на следующий шаг компиляции. Языки программирования C/C++ и система компьютерной вёрстки TeX используют препроцессоры, занчительно расширяющие их возможности. Название широко распространенного скриптового языка программирования PHP является рекурсивным акронимом "PHP: Hypertext Preprocessor".

    Макрос — программный объект, при обработке «развёртывающийся» в последовательность действий и/или команд. В языке ассемблера, а также в некоторых других языках программирования, макрос — символьное имя, заменяемое при обработке препроцессором на последовательность программных инструкций. Для каждого компилятора (ассемблера) существует специальный синтаксис объявления и вызова макросов.
    При этом внутри макроса могут быть условные операторы препроцессора, многие компиляторы поддерживают при вызове макросов передачу аргументов. В этом случае один и тот же макрос может «разворачиваться» в различные последовательности инструкций при каждом вызове — в зависимости от сработавших разветвлений внутри макроса и переданных ему аргументов.


    Итак, в сухом остатке препроцеесор – это программа, обрабатывающая макросы, Вагиф. Т.е. две составляющие ОДНОЙ сущности. Так что говорить о том, что препроцессор и макрос это разные вещи, извините, неправильно. Другое дело, что препроцессоры бывают разных видов. Я уже говорил ранее об этом, почитайте внимательней.

    Давайте намалюем стандартную схему макроса:

    ПРОГРАММА+МАКРОС ---(прекомпилятор)--->ОКОНЧАТЕЛЬНЫЙ ТЕКСТ ПРОГРАММЫ ---(стандартный компилятор)--->БИНАРНЫЙ КОД(ИЛИ ПСЕВДО КОД)



    Бывает, что по разным причинам (например, чтобы попробовать втюрить свой продукт большему количеству пользователей) эта схема редуцируется в следующую:

    ПРОГРАММА+МАКРОС ---( стандартный компилятор + прекомпилятор)-->БИНАРНЫЙ КОД(ИЛИ ПСЕВДО КОД)



    А вот, схема интерпретационного макроса:

    ПРОГРАММА+{МАКРОС-РЕСУРС|МАКРОС-АТРИБУТ|МАКРОС-ФУНКЦИЯ|…}+БИБЛИОТЕКА-ИНТЕРПРЕТАТОР)--(стандартный компилятор)-->БИНАРНЫЙ КОД(ИЛИ ПСЕВДО КОД)




    А вот, схема «инжекторного» макроса:

    ПРОГРАММА+{МАКРОС-РЕСУРС|МАКРОС-АТРИБУТ|МАКРОС-ФУНКЦИЯ)--(стандартный компилятор)-->ПРОМЕЖУТОЧНЫЙ БИНАРНЫЙ КОД(ИЛИ ПСЕВДО КОД) -->)--(инжекторный посткомпилятор)--> ОКОНЧАТЕЛЬНЫЙ БИНАРНЫЙ КОД(ИЛИ ПСЕВДО КОД)



    И это еще не все возможные схемы. Но, самая употребляемая – первая.


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


    № 514   Удалено модератором


    № 513   28-07-2006 00:28 Ответить на это сообщение Ответить на это сообщение с цитированием
    Ответ на »сообщение 508« (Елена Филиппова)
    ___________________________
    Уважаемые господа! Прошу не превращать обсуждение в банальную ругань.
    Уважаемая Королева. Режьте их нещадно :)) На вас вся надежда.


    <<<... | 532—523 | 522—513 | 512—503 | ...>>>
    Всего сообщений в теме: 5502; страниц: 551; текущая страница: 499


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

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

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

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

    Перейти на конкретную страницу по номеру
      
    Время на сайте: 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» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

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