История изменений
Исправление monk, (текущая версия) :
Круто. А почему не развиваете? Нашлись какие-то принципиальные сложности?
Устал пилить в одиночку. Тем более, что по ходу дела пришлось сделать https://github.com/Kalimehtar/cffi-objects/blob/master/redefines.lisp , а это как раз то, что делает CFFI в присутствии GTK-FFI и без него слегка разным.
В процессе, пытался бороться с неудобствами лиспа (пакетам нельзя дать псевдонимы в рамках одного пакета или файла, обобщённые функцие не могут иметь реализации с разным количеством аргументов, ...). Сделал пачку костылей: https://github.com/Kalimehtar/advanced-readtable https://github.com/Kalimehtar/message-oo .
А потом обнаружил, что есть Racket, где все эти проблемы решены + решено ещё несколько, о которых я не задумывался (гигиена в макросах: например, можно сделать нормальный aif; раздельная компиляция: в CL есть XCVB, но под него нет пакетов; продолжения; нормальные финализаторы: в SBCL нельзя ссылаться на финализируемый объект; ...). Поняв, что, например, продолжения и финализаторы я точно сам не напишу, я ушёл на Racket.
Кстати, CLOS в Racket сделать можно (ради эксперимента сделал аналог CLOS на типах, а не классах: https://github.com/Kalimehtar/gls/blob/master/gls/test.rkt). Там кроме специализатора EQL можно специализировать по любому условию и нет запрета на разное число аргументов:
(defgeneric fact)
(add-method fact
(method ((x (and? integer? (>/c 1))))
(* x (fact (- x 1)))))
(add-method fact
(method ((x integer?))
1))
(add-method fact
(method ((x integer?) y)
2))
> (fact 5)
120
> (fact 5 1)
2
Исходная версия monk, :
Круто. А почему не развиваете? Нашлись какие-то принципиальные сложности?
Устал пилить в одиночку. Тем более, что по ходу дела пришлось сделать https://github.com/Kalimehtar/cffi-objects/blob/master/redefines.lisp , а это как раз то, что делает CFFI в присутствии GTK-FFI и без него слегка разным.
В процессе, пытался бороться с неудобствами лиспа (пакетам нельзя дать псевдонимы в рамках одного пакета или файла, обобщённые функцие не могут иметь реализации с разным количеством аргументов, ...). Сделал пачку костылей: https://github.com/Kalimehtar/advanced-readtable https://github.com/Kalimehtar/message-oo .
А потом обнаружил, что есть Racket, где все эти проблемы решены + решено ещё несколько, о которых я не задумывался (гигиена в макросах: например, можно сделать нормальный aif; раздельная компиляция: в CL есть XCVB, но под него нет пакетов; продолжения; нормальные финализаторы: в SBCL нельзя ссылаться на финализируемый объект; ...). Поняв, что, например, продолжения и финализаторы я точно сам не напишу, я ушёл на Racket.
Кстати, CLOS в Racket сделать можно (ради эксперимента сделал аналог CLOS на типах, а не классах: https://github.com/Kalimehtar/gls/blob/master/gls/test.rkt). Там кроме специализатора EQL можно специализировать по любому условию и нет запрета на разное число аргументов:
(defgeneric fact)
;(defmethod m1 ((x (and? integer? (> x 1)))) 1)
(add-method fact
(method ((x (and? integer? (>/c 1))))
(* x (fact (- x 1)))))
(add-method fact
(method ((x integer?))
1))
(add-method fact
(method ((x integer?) y)
2))
> (fact 5)
120
> (fact 5 1)
2