нарыл вот забавную вещицу - lush называется. тщательно восхваляемый авторами диалект лиспа, нишей которого являются инженерные расчеты. предоставляет тесную интеграцию с Си: интерфейс к очень вкусным библиотекам, умение компилять лисп-код в stabdalone-C и даже (sic!) возможность Сишных вставок в лисп-коде. ну и возможность использования в качестве unix-shell тоже забавна.
вроде все шикарно, но завести это самое компиляние мне так и не удалось. для компиляции в Си ему нужны декларации типов, которые так и не заработали. не смог скомпилить даже пример, взятый из мануала. вероятно, в этом виновата betность версии, на которую я позарился. поставлю стабильную, посмотрю заново.
а теперь вопрос. испытываю очень большой соблазн заюзать этот lush в одном проекте, но опасаюсь потратить много времени зазря. поэтому интересуюсь, если кто-то знаком поближе с этим зверем, - какие подводные камни можно ожидать?
несмотря на все прелести, подсознательно отталкивают
а) сложность и избыточность по сравнению с идеологической простотой коммон-лиспа
б) несовместимость с коммон-лиспом. жизнь языка зависит только от нескольких человек. если они забьют на него, мой код улетит в трубу.
в) за краткий период знакомства встретил несколько фундаментальных косяков, хотя их может не быть в стабильной версии.
Не знаю на счёт инженерных расчётов, но вот на счёт отсального:
- умение компилять лисп-код в stabdalone-C
- возможность Сишных вставок в лисп-коде
то
ecl это умеет. Пресловутый
c-inline и иже с ним.clines - правильный линк.
вот теперь завел стабильную версию, компиляция заработала.
скомпилированные функции работают в среднем в полтора раза быстрее, чем аналогичные на 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))))).
правда, красиво?
пощупал поближе и понял, что соблазну не поддамся, останусь на коммонлиспе
все равно его не брошу, потому что он хароший =)
вместо этого разобрался с биндингами к gnu scientific library.
/me счастлив.
сорри за флуд, вообщем