← Архив: Common Lisp

lush

Author: · 03.01.2010 11:07
· original author: allchemist
нарыл вот забавную вещицу - lush называется. тщательно восхваляемый авторами диалект лиспа, нишей которого являются инженерные расчеты. предоставляет тесную интеграцию с Си: интерфейс к очень вкусным библиотекам, умение компилять лисп-код в stabdalone-C и даже (sic!) возможность Сишных вставок в лисп-коде. ну и возможность использования в качестве unix-shell тоже забавна.
вроде все шикарно, но завести это самое компиляние мне так и не удалось. для компиляции в Си ему нужны декларации типов, которые так и не заработали. не смог скомпилить даже пример, взятый из мануала. вероятно, в этом виновата betность версии, на которую я позарился. поставлю стабильную, посмотрю заново.
а теперь вопрос. испытываю очень большой соблазн заюзать этот lush в одном проекте, но опасаюсь потратить много времени зазря. поэтому интересуюсь, если кто-то знаком поближе с этим зверем, - какие подводные камни можно ожидать?
· original author: allchemist
несмотря на все прелести, подсознательно отталкивают
а) сложность и избыточность по сравнению с идеологической простотой коммон-лиспа
б) несовместимость с коммон-лиспом. жизнь языка зависит только от нескольких человек. если они забьют на него, мой код улетит в трубу.
в) за краткий период знакомства встретил несколько фундаментальных косяков, хотя их может не быть в стабильной версии.
· original author: marsijanin
Не знаю на счёт инженерных расчётов, но вот на счёт отсального:
  1. умение компилять лисп-код в stabdalone-C
  2. возможность Сишных вставок в лисп-коде
то ecl это умеет. Пресловутый c-inline и иже с ним.
· original author: marsijanin
clines - правильный линк.
· original author: allchemist
вот теперь завел стабильную версию, компиляция заработала.
скомпилированные функции работают в среднем в полтора раза быстрее, чем аналогичные на sbcl. однако жуткий недостаток - lush не умеет компилировать рекурсивные функции. жуть.
по сравнению с c-inline одно большое преимущество, можно сделать так:
(de harmonic (n)
    ((-double-) n)
    (let ((r 0))
      ((-double-) r)
      #{ { double i=0;
           while (i<$n){ i+=1.0; $r+=1/i; };
         
}
#} r))
вместо
(de harmonic (n)
        ((-double-) n)
        (let* ((z 0) (i 0))
         ((-double-) z i)
          (while (< i n) (incr i) (incr z (/ i)))
)
).
правда, красиво?
пощупал поближе и понял, что соблазну не поддамся, останусь на коммонлиспе
все равно его не брошу, потому что он хароший =)
· original author: allchemist
вместо этого разобрался с биндингами к gnu scientific library.
/me счастлив.
сорри за флуд, вообщем