LINUX.ORG.RU

Какую реализацию Lisp учить?


0

0

Доброго времени суток. Вот выдалось свободное время и по присутсвии оного, решил взяться за Lisp, но оказалось что существует давольно много реализаций сего чуда: Сommon Lisp, Scheme, Arc, Clojure и т.д. Прошу вашего совета за какой взяться?
Спасибо.



Последнее исправление: shk (всего исправлений: 1)

Ответ на: комментарий от yyk

SSE2 - мой Athlon XP 2600+ «пролетает как фанера над Парижем» :(


А можно, для тупых вроде меня, причем тут Athlon, JVM и SSE2?

Karapuz ★★★★★
()
Ответ на: комментарий от yyk

Ну вот то, что остановило все мои попытки поковырять его ещё раз: SSE2 - мой Athlon XP 2600+ «пролетает как фанера над Парижем» :(

Надеюсь, после этого уже никто не будет утверждать, что Common Lisp - устаревший язык ;)

mv ★★★★★
()
Ответ на: комментарий от archimag

>Хм... Сколько лет вы писали на CL, прежде чем пришли к подобному выводу?

Зачем? Я уже 7 лет уже читаю ЛОР — этого хватает! :)

V_L_A_D ★★
()
Ответ на: комментарий от Karapuz

>А можно, для тупых вроде меня, причем тут Athlon, JVM и SSE2?

JVM здесь точно ни при чём. Clozure - это бывший ccl, а не clojure. И он требует SSE2, коий отсутствует в моём стареньком Athlon XP.

yyk ★★★★★
()
Ответ на: комментарий от tia

> Лисп лучше не учить. А если учить, то CL. Если использовать(а лучше его не использовать) - Clojure.

Интересно, откуда такие познания и чем они аргументированы у человека, ненавидящего языки без инфиксных операторов. :)

Возвращайся на d@conference.jabber.ru, обсудим.

naryl ★★★★★
()
Ответ на: комментарий от anonymous

>> например, tcl

ненене. Интертрепаторы фтопку.


tcl компилируется в байткод в рантайме. Интерпретатора нет.

naryl ★★★★★
()
Ответ на: комментарий от yyk

>> Ну вот то, что остановило все мои попытки поковырять его ещё раз: SSE2 - мой Athlon XP 2600+ «пролетает как фанера над Парижем» :(

А в чем была проблема? Насколько я понял из описания с сайта, clozure cl хорощо дружит с FFI, или на тот момент дружба еще не оформилась? Я чего, собственно, спрашиваю, волею судеб понадобилось поработать на винде, в лине проблем с лиспом, точнее с реализациями, нет. А в винде темный лес, кроме лиспворкса и аллегро на горизонте ничего не просматривается. Дорого оно... Из задач минимум надо работать с ODBC, я посмотрел, что есть из открытых проектов под ODBC и чего-то поплохело.

cathode
()
Ответ на: комментарий от Zubok

>Для удаления метода по конкретным спецификаторам и квалификаторам в рантайм есть remove-method. То есть, если ты сперва добавил методод my:generic-fn :before, который специфицирован для объектов класса my:foo, например, а потом он тебе стал не нужен, то ты его можешь удалить. Для этого уже нужные ручки могут быть в IDE.

Вдогонку, чтобы было. SLIME такое умеет: slime-inspector, slime-fancy-inspector.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Вдогонку, чтобы было. SLIME такое умеет: slime-inspector, slime-fancy-inspector.

<troll-mode>
   <value>Расскажи им про Deep Space 1 и про repl на спутнике</value>
</troll-mode>

)))

cathode
()
Ответ на: комментарий от V_L_A_D

> Зачем? Я уже 7 лет уже читаю ЛОР — этого хватает! :)

Остаётся надеяться, что жизненно важных решений вы на основе прочтения ЛОР-а не принимаете ;)

archimag ★★★
()
Ответ на: комментарий от cathode

> Расскажи им про Deep Space 1 и про repl на спутнике

Ненене, Дэвид Блейн!!!1111 Этот баян уже столько раз порвали...

Дай ссылку - там интересный материал... показывает настоящее место Лиспа.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Дай ссылку - там интересный материал... показывает настоящее место Лиспа.

это там, где крутых лисперов заменили орды макак и переписали хорошую отлаженную лисп систему на кучу быдлокода на недоязычке? Так это были невменяемые быдло-манагеры.

anonymous
()
Ответ на: комментарий от cathode

>А в чем была проблема?

Да ни в чём - при попытке запуска просто выдаётся сообщение, что ваш процессор не поддерживает SSE2. Всё - работа завершена :)

Из задач минимум надо работать с ODBC


Да с этим работают практически все. Т.е. у всех есть FFI. Библиотеки именно для работы с ODBC - от plain-sql до CLSQL http://clsql.b9.com/

Осмелюсь предположить, что, т.к. будете работать с БД, скорость работы не особенно критична. Тогда порекомендую clisp - адаптированность к винде у него наибольшая по сравнению с прочими свободными реализациями. Но нет тредов (в бинарной сборке последнего релиза). Можно попробовать собрать текущий - но это «на свой страх и риск» =)

yyk ★★★★★
()
Ответ на: комментарий от yyk

Спасибо за ссылку на clsql, я ее как-то упустил раньше.

cathode
()
Ответ на: комментарий от satanic-mechanic

> А еще нужно учесть, что JIT-компилятору особо не развернуться
java6 -server запускает JIT сразу для всего кода, без всяких раздумий.

den73 ★★★★★
()
Ответ на: комментарий от den73

И кроме того, это - «серверная» ява. Есть ещё «клиентская», которая гораздо медленнее. Сразу скажу, что я абсолютно ничего не понимаю в java, но clojure я у себя ставил и кое-какие опыты с ней проводил.

den73 ★★★★★
()
Ответ на: комментарий от yyk

>> Тогда порекомендую clisp - адаптированность к винде у него наибольшая

Последний раз когда я смотрел CLISP (где-то год назад) он не очень дружил с slime. В подсказке вместо имен параметров ф-ций выводилось что-то типа arg0 arg1 &key arg2. Это еще не пофиксили?

Но нет тредов

Это плохо, треды нужны. Там подразумевается клиент-серверное приложение, сервер без потоков - это нонсенс.

В общем пока выбор пал на Clozure CL.

cathode
()
Ответ на: комментарий от cathode

> Последний раз когда я смотрел CLISP (где-то год назад) он не очень дружил с slime. В подсказке вместо имен параметров ф-ций выводилось что-то типа arg0 arg1 &key arg2. Это еще не пофиксили?
Недавно ставил последнюю версию - все то же. Только я думал, что это так и должно быть :)

JackyTreehorn
()
Ответ на: комментарий от anonymous

> это там, где крутых лисперов заменили орды макак и переписали хорошую отлаженную лисп систему на кучу быдлокода на недоязычке?

Нет, это там, где половина крутого софта на Лиспе на самом деле оказалась беспонтовым Си.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

По памяти цитирую эту статью: «К 1995 году у нас будут хорошая ОС и хороший язык, но это будут Unix и Си++» :)

Не вышел каменный цветок...

mv ★★★★★
()
Ответ на: комментарий от cathode

> Так и не въехал, автор таки откопал или закопал лисп?

Автор рассуждает на тему «бабло (C/C++) побеждает добро (Lisp)».

naryl ★★★★★
()
Ответ на: комментарий от k_andy

> Хе-хе-хе. August 2, 2002

Да, ошибся. Это не прославленная статья «Lisp: Good News, Bad News, How to Win Big», а всего лишь послесловие к ней. А вот то, о чем я говорил: http://www.dreamsongs.com/WIB.html

<Ъ> The good news is that in 1995 we will have a good operating system and programming language; the bad news is that they will be Unix and C++. </Ъ>

Хе-хе-хе.

tailgunner ★★★★★
()
Ответ на: комментарий от cathode

>Последний раз когда я смотрел CLISP (где-то год назад) он не очень дружил с slime. В подсказке вместо имен параметров ф-ций выводилось что-то типа arg0 arg1 &key arg2. Это еще не пофиксили?

Дружат они хорошо. Это не к дружбе относится - clisp не запоминает имена параметров откомпилированных функций. Проверьте с помощью describe

yyk ★★★★★
()
Ответ на: комментарий от yyk

>Дружат они хорошо. Это не к дружбе относится - clisp не запоминает имена параметров откомпилированных функций. Проверьте с помощью describe

Все нормально запоминается.

Zubok ★★★★★
()
Ответ на: комментарий от yyk
(defun test (var-a var-b var-c &key key-a) ())
CL-USER> (describe 'test)

TEST это символ TEST, находится в #<PACKAGE COMMON-LISP-USER>, и доступен в 1
пакетах COMMON-LISP-USER, именует функция., имеет 1 свойств(о) SYSTEM::DOC.
Для получения дополнительной информации выполните (SYMBOL-PLIST 'TEST).

 #<PACKAGE COMMON-LISP-USER> это пакет с именем COMMON-LISP-USER. Его 2
 псевдоним(ов) CL-USER, USER.
 Он импортирует внешние символы из 2 пакетов COMMON-LISP, EXT и не
 экспортирует символы, но ни один пакет их не использует.

 #<COMPILED-FUNCTION TEST> это откомпилированная функция.
 Список аргументов: (VAR-A VAR-B VAR-C &KEY KEY-A)
 Для получения дополнительной информации выполните (DISASSEMBLE #'TEST).

документация:
SYSTEM::FILE:
((SYSTEM::DEFUN/DEFMACRO #P"/home/zubok/test.fas" 6 6))
Zubok ★★★★★
()
Ответ на: комментарий от cathode

>Последний раз когда я смотрел CLISP (где-то год назад) он не очень дружил с slime. В подсказке вместо имен параметров ф-ций выводилось что-то типа arg0 arg1 &key arg2. Это еще не пофиксили?

Это касается только тех функций, которые не были объявлены на уровне Common Lisp, т. е. тех, которые реализованы в CLISP на Си. Обязательные параметры обычно у них так вот и идут arg0, arg1... Ключи &key, кстати, нормально показываются. Так о них CLISP сообщает. HyperSpec в этом случае поможет, если забылось что-то. По-моему, я даже видел код для Emacs, который решает эту проблему в хуке при выводе подсказки. Он просто заменяет вывод в подсказке на нормально оформленный шаблон. В целом и общем эта ситуация только для некоторой части стандартных функций имеет место, но не для всех.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Попробуй

CL-USER> (describe 'compiler-macro-function)

yyk ★★★★★
()
Ответ на: комментарий от Zubok

>Это касается только тех функций, которые не были объявлены на уровне Common Lisp, т. е. тех, которые реализованы в CLISP на Си.

Я тоже так думал. Попробуй «отдескрайбить» любую библиотечную лисп-функцию.

yyk ★★★★★
()
Ответ на: комментарий от yyk

возможно информация теряется при сохранении функций в memory image

Нет. Все нормально. Загружаюсь с сохраненным image:

(describe 'xlib:draw-point)

DRAW-POINT это символ XLIB:DRAW-POINT, находится в #<PACKAGE XLIB>, и доступен
в 5 пакетах GL, GLX, XLIB, XLIB.XINERAMA, XTEST, именует функция., имеет 1
свойств(о) SYSTEM::DOC.
Для получения дополнительной информации выполните
(SYMBOL-PLIST 'XLIB:DRAW-POINT).

 #<PACKAGE XLIB> это пакет с именем XLIB.
 Он импортирует внешние символы из 1 пакетов COMMON-LISP и экспортирует 650
 символ(ов) в 4 пакетов XLIB.XINERAMA, XTEST, GL, GLX.

 #<COMPILED-FUNCTION DRAW-POINT> это откомпилированная функция.
 Список аргументов: (XLIB:DRAWABLE XLIB:GCONTEXT XLIB::X XLIB::Y)
 Для получения дополнительной информации выполните
 (DISASSEMBLE #'XLIB:DRAW-POINT).

Zubok ★★★★★
()
Ответ на: комментарий от yyk

Я тоже так думал. Попробуй «отдескрайбить» любую библиотечную лисп-функцию.

А какую? Стандартную функцию CLOS можно, например?

..поскипал...

 #<STANDARD-GENERIC-FUNCTION MAKE-INSTANCE> это родовая функция.
 Список аргументов: (CLASS &REST CLOS::INITARGS &KEY &ALLOW-OTHER-KEYS)

Другая:

 #<STANDARD-GENERIC-FUNCTION CHANGE-CLASS> это родовая функция.
 Список аргументов: (CLOS::INSTANCE CLOS::NEW-CLASS &KEY &ALLOW-OTHER-KEYS)

И подсказки, соотв., нормальные имею.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Хм, странно...

Возможно важен порядок загрузки fasl-файлов при создании первоначального image. Функции, загруженные из loadform.fas и «позднее» (порядок загрузки - в Makefile) хранят имена параметров. Те что были загружены «раньше» - нет.

yyk ★★★★★
()
Ответ на: комментарий от Zubok

>А какую?

Пример без имен:

(describe 'system::print-condition) (describe 'compiler::orig-fundef) (describe 'system::fill-stream-line-position)

и с именем

(describe 'system::current-time)

yyk ★★★★★
()
Ответ на: комментарий от yyk

>Возможно важен порядок загрузки...

Неа, CLOS-файлы загружаются раньше, а имена имеют. Загадка :)

yyk ★★★★★
()
Ответ на: комментарий от yyk

Возможно важен порядок загрузки fasl-файлов при создании первоначального image. Функции, загруженные из loadform.fas и «позднее» (порядок загрузки - в Makefile) хранят имена параметров. Те что были загружены «раньше» - нет.

Имеются в виду стандартные функции? Ну так а я и не вижу, где у них хоть где-нибудь объявлены имена параметров. Вот берем remove-if-not. Сишная — это remove_if_not. Там нет. Похоже, что есть просто процедура, которая тупо заменяет имена параметров у стандарнтых функций на нумерованные arg0, arg1,... Число параметров получает и тупо рисует нам эти arg. А вот наименования ключей хранит (в subr.d) почему-то. И правильно выводит их. Предупреждаю, что в коде не копался слишком.

#<SYSTEM-FUNCTION REMOVE-IF-NOT> это встроенная системная функция.
 Список аргументов: (#:ARG0 #:ARG1 &KEY :FROM-END :START :END :KEY :COUNT)
Zubok ★★★★★
()
Ответ на: комментарий от Zubok

>А вот наименования ключей хранит (в subr.d) почему-то.

В constsym.d только.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Имеются в виду стандартные функции? Ну так а я и не вижу, где у них хоть где-нибудь объявлены имена параметров.


Я выше привёл выше несколько функций, которые определены в lisp-файлах и не имеют имён параметров.

[2]> (describe 'system::print-condition)
...
#<COMPILED-FUNCTION SYSTEM::PRINT-CONDITION> это откомпилированная функция.
Список аргументов: (#:ARG0 #:ARG1)
Для получения дополнительной информации выполните (DISASSEMBLE #'SYSTEM::PRINT-CONDITION).

документация:
SYSTEM::FILE:
((SYSTEM::DEFUN/DEFMACRO #P"C:\\gnu\\home\\src\\clisp\\clisp\\build-full-mt\\condition.fas" 76 80))

yyk ★★★★★
()
Ответ на: комментарий от yyk

или вот в condition.lisp

;; MAKE-CONDITION, CLtL2 p. 901
(defun make-condition (type &rest slot-initializations)
...

[3]> (describe 'make-condition)
...
#<COMPILED-FUNCTION MAKE-CONDITION> это откомпилированная функция.
Список аргументов: (#:ARG0 &REST SYSTEM::OTHER-ARGS)
Для получения дополнительной информации выполните (DISASSEMBLE #'MAKE-CONDITION).

документация:
CLHS:
«Body/f_mk_cnd.htm»
SYSTEM::FILE:
((SYSTEM::DEFUN/DEFMACRO #P"C:\\gnu\\home\\src\\clisp\\clisp\\build-full-mt\\condition.fas" 159 186))

yyk ★★★★★
()
Ответ на: комментарий от Zubok

Имеются в виду стандартные функции? Ну так а я и не вижу, где у них хоть где-нибудь объявлены имена параметров.


Опять про суслика?

[4]> (describe 'apropos-list)
...
#<COMPILED-FUNCTION APROPOS-LIST> это откомпилированная функция.
Список аргументов: (STRING &OPTIONAL (PACKAGE NIL))
Для получения дополнительной информации выполните (DISASSEMBLE #'APROPOS-LIST).

исходник

(defun apropos-list (string &optional (package nil))
...

yyk ★★★★★
()
Ответ на: комментарий от yyk

>Имеются в виду стандартные функции? Ну так а я и не вижу, где у них хоть где-нибудь объявлены имена параметров.

Опять про суслика?

Ну, как можно заметить, я про сишные функции тут говорю, раз привожу примеры оттуда.

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.