Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Где и как используем Lisp?


Автор: dr_jumba 3.10.2006, 10:55
Интересно кто для чего использует Lisp

Автор: wwall 3.10.2006, 11:58
хоби. Узнать что-то новое

Автор: Cr@$h 3.10.2006, 18:08
Изучал. Хотел найти применение, не нашёл (как и с Prolog, кстати). Понимаю важность декларативного программирования, но, думаю, она начнёт, скорее, появляться, в императивных языках.

Автор: Lisp2D 6.10.2006, 00:33
Немного продвигается идея GNU насчет открых исходников
Для маленьких задач очень удобно все программировать на Лиспе (а он по сути явный интерпретатор то бишь GNU)
Может быть этот язык  будет все все более популярным

Автор: Void 7.10.2006, 17:07
Цитата(Lisp2D @  6.10.2006,  02:33 Найти цитируемый пост)
Может быть этот язык  будет все все более популярным

За более чем полвека существования Лисп так и не добился широкой популярности, и вряд ли в обозримом будущем что-то изменится. На мой взгляд, ему суждено остаться инструментом отдельных профессионалов.

А REPL чрезвычайно удобен не только для маленьких задач.

Автор: Cr@$h 7.10.2006, 19:45
Думаю, будущее за многопарадигменными языками. В императивные языки уже стали вводит функциональные средства (Python, C# 3.0, Fortran). Также имеются языки и с другой стороны: Common Lisp, Visual Prolog (VPI), которые являются многопарадишменными. Вопрос в том, с какой стороны лучше двигаться к этому. Думаю, со сороны императивных это будет легче и логичнее, как когда-то был переход asm -> FORTRAN. Это следующая серьёзная стадия эволюции импертивных языков: повышается надёжость кода, уменьшается его размер, повышается интеллектуальность компиляторов, всё больше ошибок будет проверяться на этапе компиляции, программирование приобретает декларативные черты. Что же касается CL, то, возможно, просто на его нише рядом с ним стоят другие, более "привлекательные" языки.

Автор: Амортизатор2 20.10.2006, 22:41
Мало знаком с Lispom, но видел пару исходников на нем. Сложилось впечатление, что поддерживать и сопровождать калькулятор, написанный на лиспе, сложнее, чем веб-сервер, написанный на асемблере. Думаю, в этом и кроется причина непопулярности лиспа для повседнеынх прикладных задач. Возьмите любой проект на Java, .NET, C++ - если сделано как положено, перед тобой будет четко структурированный код. На втором месте стоит, конечно же, отсутствие приличной инфраструктуры для лиспа - если сравнить с перечисленными технологиями и языками, число библиотек и пр. готовых решений ничтожно мало, а сущетсующих портов не хватает.
Видимо, применение Лиспа и в дальнейшем будет ограничено специфическими областями? Кстати, кто-нибудь не расскажет об особенностях применения Лиспа при решении задач ИИ?

Автор: Void 21.10.2006, 18:44
Цитата(Амортизатор2 @  21.10.2006,  00:41 Найти цитируемый пост)
Сложилось впечатление, что поддерживать и сопровождать калькулятор, написанный на лиспе, сложнее, чем веб-сервер, написанный на асемблере.

Совершенно неверное впечатление. Сложность восприятия в значительно большой мере определяется уровнем абстракций, которыми оперирует код, нежели синтаксисом, будь то S-выражения или привычный алголоподобный синтаксис.
Думаю, стоит почитать «http://www.paulgraham.com/onlisp.html» Пола Грэма, хотя бы первую главу.

Автор: Амортизатор2 22.10.2006, 01:26
Void, это, думаю, на любителя. Меня вот их скобочки достали через две минуты после просмотра кода. И о том, чтобы еще и писать на нем, речь даже не идет. Мне легче выпить йадуsmile

Автор: Void 22.10.2006, 01:38
Я написал комментарий к конкретной фразе, которую процитировал. Если действительно встанет такая необходимость, поддержка хорошо спроектированного ПО на Лиспе вряд ли будет сложнее, чем мегатонны индусского кода на C++/Java/whatever. Мозг адаптируется к синтаксису быстро.

Впрочем, написал и вспомнил один эпизод: когда тот же Пол Грэм ушёл из Yahoo, они вынуждены были в значительной мере переписать созданный им на Лиспе движок «Yahoo! Store» на, если не ошибаюсь, PHP. Но конкретные причины этого решения могут быть не столь очевидны.

Автор: Амортизатор2 22.10.2006, 16:35
Void, а разве Lisp имеет железную защиту от индусов? Даже если особенности функционального подхода, который реализован в Lips'e, и позволяют избавиться от распространенных ошибок, присущих императивному стилю, все равно универсальной защиты от дурака нет и быть не может. К тому же есть очень большие сомнения по поводу пригодности использования функционалки в болльших проектах. Вопрос еще спорный, что будет лучше выглядеть и легче поддерживаться - код на Lisp, пусть и свободный от слайд-эффектов, или грамотно спроектированный проект на C++/Java/.NET. Системные архитекторы ведь не зря свой хлеб жуют.

Добавлено @ 16:39 
Void, нет ли у тебя информации, насколько язык реализации влияет на эффективность проектирования ИИ? В частности, желательно бы получить сравнение какого-нибудь универсального императивного языка -cpp forexample- и того же Lisp-a?

Автор: svg 22.10.2006, 16:45
Цитата(Амортизатор2 @  22.10.2006,  01:26 Найти цитируемый пост)
Void, это, думаю, на любителя. Меня вот их скобочки достали через две минуты после просмотра кода. И о том, чтобы еще и писать на нем, речь даже не идет. Мне легче выпить йаду


Аллергия на скобки обычно проходит через 3 дня, перестаешь замечать.

Наличие редактора с подсветкой и навыками синтаксического разбора
минимально необходимо для комфортной работы, но это вроде бы не очень серьезное
ограничение. Если в природе существует секта фанатиков NotePad или строчных редакторов
мне бы было интересно познакомиться с патологией их религии.

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

Автор: Амортизатор2 22.10.2006, 16:49
Ну и вдогонку. Не стоит забывать, что стандарт ANSI Common Lisp не поддерживает инкапсуляцию - а как быть без нее, и на кой без нее нужен полиморфизм? Я даже вот так скажу: как без инкапсуляции можно эффективно реализовать объектный полиморфизм? Быть может там есть какие-то языковые особенности, которые позволяют это обойти (повторюсь, я практически не знаком с языком), но сам факт настораживает.

Добавлено @ 16:52 
Цитата
Некоторое время уходит на отказ от вредной привычки просматривать весь код целиком,
что является необходимостью в других языках. Чтение листинга на Lisp или Prolog более
декларативно - структура и отношения между частями кода легко выясняются без углубления
в детали.


Если, скажем, проект уровня предприятия?

Автор: svg 22.10.2006, 16:56
Цитата(Амортизатор2 @  22.10.2006,  16:35 Найти цитируемый пост)
Даже если особенности функционального подхода, который реализован в Lips'e


Промышленно применяемый Lisp ( Common Lisp в основном ) не является функциональным языком и даже не
пропагандирует функциональный стиль, скорее наоборот, удобство работы с динамическими переменными
и успех CLOS делают его использование более императивным чем всех прочих языков.

Единственный из известных мне языков, который успешно и  оправданно на практике следует функциональному 
стилю - Erlang.

Автор: svg 22.10.2006, 17:16
Цитата(Амортизатор2 @  22.10.2006,  16:49 Найти цитируемый пост)
как без инкапсуляции можно эффективно реализовать объектный полиморфизм?


Лучше уточнить, что именно имеется в виду. Нет ничего более запутанного, чем терминология. И на
инкапсуляцию, и на полиморфизм мне в голову приходят около десятка различных вариаций проявления
этих свойств. Одних полиморфизмов, напрягшись, можно насчитать около двадцати, из низ штук пять
точно попадут под определение "объектный".

Цитата

Если, скажем, проект уровня предприятия?


Не понял различия. Какая разница какой статус присвоен проекту?
Оперирующие "уровнями" код не читают, а читающим - наплевать на "уровень".

Автор: Walker 23.10.2006, 13:55
На практике по конструированию в институте писали расширения для AutoCAD на модификации LISP'a - AutoLISP'е аж с третьего курса и до  диплома. Некоторые даже защищались на прикладных программах.

Цитата

Сложилось впечатление, что поддерживать и сопровождать калькулятор, написанный на лиспе, сложнее, чем веб-сервер, написанный на асемблере.


Вовсе нет.  По сложности языка реализация сродни школьному BASIC.smile Мне так показалось. Во всяком случае, я его воспринял лучше, чем Фортран. Что до прикладных программ - то на языке выполняли коммерческий проект, ориентированный на инженеров, "туго" знающих конструкторское дело и требовавших быстродоступный инструмент для автоматизации разработки типовых узлов. Интерфейс получился интуитивно понятный, насыщенный всякими всплывающими окошками, менюшками, кнопочками, RADIO_BUTTON и т.д., а главное, он формируется легко.

Цитата

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


А мне понравилось.smile Зато научился ставить скобки сразу парой. И теперь при компиляции приложений на высокоуровневых языках ошибки ')' expected не получаю.;)

Сейчас LISP в силу специфичности не использую.

Автор: Амортизатор2 23.10.2006, 19:34
Цитата

И на инкапсуляцию, и на полиморфизм мне в голову приходят около десятка различных вариаций проявления
этих свойств. Одних полиморфизмов, напрягшись, можно насчитать около двадцати, из низ штук пять
точно попадут под определение "объектный".


Инкапсуляция - скрытие данных и реализации в общем случае, в данном случае я имелл ввиду скрытие реализации бащового класса от производных классов. Конечно, инкапсуляция и полиморфизм - сами по себе разные вещи, т к полиморфизм в общем случае - это просто способность одной функции заменять другую. Но без инкапсуляции от полиморфизма мало толку. Если он наследует все свойства и методы (т е все они публик), как это сделано в Common Lisp, тогда не удается контролировать степень общности потомка и его родителя.

Цитата

Не понял различия. Какая разница какой статус присвоен проекту?
Оперирующие "уровнями" код не читают, а читающим - наплевать на "уровень".


Ну это просто пример большого проекта. Я имел ввиду просто большой проект. Многие говорят, что функционалка под них плохо подходит.

Цитата

Вовсе нет.  По сложности языка реализация сродни школьному BASIC. Мне так показалось. Во всяком случае, я его воспринял лучше, чем Фортран. Что до прикладных программ - то на языке выполняли коммерческий проект, ориентированный на инженеров, "туго" знающих конструкторское дело и требовавших быстродоступный инструмент для автоматизации разработки типовых узлов. Интерфейс получился интуитивно понятный, насыщенный всякими всплывающими окошками, менюшками, кнопочками, RADIO_BUTTON и т.д., а главное, он формируется легко.


Интерфейс уже давно перестал быть проблемой. Все мейнстримовые платформы предоставляют прекрасные средства для построения интерфейса. А то, что ЛИСП очень специфичен - это верно подмечено. Мне кажется, если тянет на экзотику, имеет смысл обратить внимание на многопарадигменные языки - OCaml, F#, Nemerle (императивка+ООП+функционалка).

Автор: svg 24.10.2006, 00:16
Цитата(Амортизатор2 @  23.10.2006,  19:34 Найти цитируемый пост)
Если он наследует все свойства и методы (т е все они публик), как это сделано в Common Lisp, тогда не удается контролировать степень общности потомка и его родителя.


В CLOS методы являются объектами соответсвующей generic function, а не принадлежат какому-либо классу,
специализируются на типе или значении аргументов.

Смоделировать классы в стиле C++/Java в принципе не представляет труда, используя MOP и/или макросы,
но случаев, когда у кого нибудь возникала по ним тоска или необходимость я пока не встречал.


Цитата(Амортизатор2 @  23.10.2006,  19:34 Найти цитируемый пост)
Ну это просто пример большого проекта. Я имел ввиду просто большой проект. Многие говорят, что функционалка под них плохо подходит.


Опять же, Common Lisp не функциональный, а универсальный язык. Проект при его использовании может внезапно
стать из большого довольно маленьким, например у меня в CRUD-приложении около 80-ти классов, отображающих
модель базы данных и на каждый из них по три CRUD-формы (обычная MVC-модель). Весь код занимает около 50K,
так как и классы модели и формы по ним в основном генерируются макросами.

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

Цитата(Амортизатор2 @  23.10.2006,  19:34 Найти цитируемый пост)
Интерфейс уже давно перестал быть проблемой. 


Всегда был и будет. Особенно сейчас, когда приложения становятся все более конкурентными и GUI является 
результатом взаимодействия десятков параллельных процессов. 
GUI легче всего программируется в объектном стиле, взаимодействие - в функциональном, а парадигмы/языка,
удобного для обоих случаев я пока не встречал.

Автор: farm 26.10.2006, 05:25
Цитата(svg @ 24.10.2006,  00:16)
например у меня в CRUD-приложении около 80-ти классов, отображающих
модель базы данных и на каждый из них по три CRUD-формы (обычная MVC-модель). Весь код занимает около 50K,
так как и классы модели и формы по ним в основном генерируются макросами.


а возможно посмотреть твой код?

Автор: svg 26.10.2006, 13:35
Цитата(farm @  26.10.2006,  05:25 Найти цитируемый пост)
а возможно посмотреть твой код? 


Секретного ничего нет, но для стороннего использования я код не готовил, соотвественно есть только голые исходники.

иллюстративно, все выглядит так:
Код

(gen-view-class agent-type (freeside-db-object)
   ()
   (:metaclass freeside-db-class))
(gen-set-view-defaults-from-db agent-type)


что генерирует следующее определение класса для CLSQL и метод для установки начальных значений слотов из словаря PostgreSQL:

Код

(def-view-class agent-type (freeside-db-object)
  ((typenum :accessor typenum
            :db-kind :key
            :type integer
            :initarg :typenum)
   (atype :accessor atype
          :db-constraints :not-null
          :type (varchar 80)
          :initarg :atype)
   (agents :accessor agents
           :db-kind :join
           :db-info
           (:join-class agent
            :home-key typenum
            :foreign-key typenum
            :set t))
   (packages :accessor packages
           :db-kind :join
           :db-info
           (:join-class type-pkgs
            :home-key typenum
            :foreign-key typenum
            :set t)))
  (:base-table agent-type)
  (:metaclass freeside-db-class))


Данные макросы генерируют формы просмотра, редактирования и поиска по сгенерированному выше классу:
Код

(define-form-from-view (fs.agent-type agent-type) ()
  ()
  (:default-initargs
    :data-src *freeside-src*))

(define-set-from-view (fs.agent-type-set agent-type)
  ()
  (:default-initargs
     :data `(:fetch-order (([typenum] :asc))
                       :data-src ,*freeside-src*)))


Конечный результат выглядит так:
user posted image

так
user posted image
и так:
user posted image

Автор: farm 26.10.2006, 16:19
спасибо за ответ, идея примерно понятна, 
есть написанный mvc-crud на пхп, вот думаю какие выгоды можно получить переписав его на лиспе

кстати, а использует ли кто лисп для web-а, какой web-сервер, что насчет шаблонов, mvc, как лисп внедрять в html, используете ли какой фреймворк?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)