LINUX.ORG.RU

Common Lisp - заготовка для portable define-advice

 , , ,


1

2

Не совсем portable, но заметно расширяет возможности для SBCL и CCL и приводит их к общему знаменателю. Для остальных реализаций возможно не более одного «совета» на функцию и реализация не завязана на родные возможности реализаций, а просто перешибает defun.

https://bitbucket.org/budden/cl-advice

В CCL не просто можно вызвать предыдущую функцию (с помощью (:do-it)), но и подменить ей аргументы.

В SBCL можно найти определения самой функции и её «советов» с помощью SWANK.

Говоря холиварно, это позор, что в EMACS и в питоне декораторы есть, а в CL - нет. Уж лет 20, как пора было это исправить и вот я сделал к этому шаг наконец-то.

На самом деле код ещё довольно сырой - для CCL я написал его сегодня и не факт, что завтра что-то не всплывёт. Для SBCL уже несколько месяцев пользуюсь - вроде всё нормально.

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

У тебя, видимо, более новая версия гугла.

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

Впрочем как и любой тупой язык для масс, типа Go или Python

Go единственная из практичных платформ со встроенным CSP. First class functions, closures, multiple return values. Нормальный RTTI, reflection. Простая интеграция C кода(cgo) без libffi. Slices(растущие массивы), статические массивы. Рекомендация вендорить сторонние библиотеки(меньше неопределённости). Стандарт индентинга(gofmt) - меньше возни в GIT между разработчиками. Стандарт базовой структуры проекта.

IPython это образец REPL какого нет ни в одной реализации CL или Scheme.

В Common Lisp две относительно сложные концепции - макросы и рестарты. Остальное ничем не выделяется в реализация(может быть только загрузка кода в процесс). К тому же многие считают что динамические языки unmaintainable в больших системах.

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

Большое количество buzzwords.

К тому же многие считают что динамические языки unmaintainable в больших системах.

Побольше СЛУШАЙ. Я участвовал в нескольких БОЛЬШИХ проектах со static typed языками, C++ frontend, OpenJDK и тд. Врагу не пожелаю.

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

IPython это образец REPL какого нет ни в одной реализации CL или Scheme.

А это вообще... слов нет, учи матчасть, пионер, что-ли.

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

IPython это образец REPL какого нет ни в одной реализации CL или Scheme.

А это вообще... слов нет, учи матчасть, пионер, что-ли.

Даю подсказку напоследок. Ты можешь «прикрутить» «REPL» хоть к C++, только что оно тебе даст когда система ни обращения к компилятору не имеет, ни сама система не предназначена для инкрементальной разработки.

И сваливаю НА отсюда. Очень тупорылые дискуссии тут у вас, друзья.

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

Hint - в программировании, с 80-x _ничего придумано не было_.

Никто и не спорит.

Да, CL элитная система. И чтобы понять это и научиться ее использовать для себя придется потратить время.

Нет, это просто инструмент.

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

Я не нашел ничего оверсложного в самом языке, в его концепциях.

Сам язык не плох, просто все вокруг него протухло.

nihirash ★★★
()

Whiners gonna whine.

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

Ну, кстати, последнее время стало несколько лучше. Видимо, проблема осознана.

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

Матчасть бы подучил, действительно, преджде чем, хм, безосновательно врать, скажем так

dotnet подучить наверное? Я вообще не использую это.

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

Даю подсказку напоследок. Ты можешь «прикрутить» «REPL» хоть к C++

Нет, не могу. И не только я.

tp_for_my_bunghole
()
Ответ на: комментарий от no-such-file

IPython это образец REPL какого нет ни в одной реализации CL или Scheme

Вот набросил, так набросил.

А представь ещё что не пользуешься Emacs(вроде бы есть такие), и Slime отпадает.

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

и по факту на любом проекте могу любой язык втащить

А поддерживать потом кому? Так бы много кто интересного повтаскивал, и лиспы, и цацкели и чёрт знает чего ещё. Но приходится морозиться на каком нибудь компромиссном решении. Например, на говне каком нибудь вроде питона, где чуть пробел не так поставил и лови потом осечку просирая полдня в никуда. Сделал бота на нём для телеги, больше не хочу.

Обычный хайп

Да не сказать особо, что там какой-то хайп. По цацкелю со скалой ещё да, можно. Скобок у кложи меньше, чем у CL со схемами, но народ с них всё равно бомбит. А по моему дизайн получился отличный. Особенно деструктуризация, офигенная фича. Концепцию трансдюсеров толком только не смог понять, не успел. Жутко устал от того, что стартует кложа подолгу, запускает несколько vm, которые выжирают всё, особенно если ещё сессию с ClojureScript запустить, туши свет. -Xms -Xmx помогали не везде и не всегда.

Hertz ★★★★★
()
Последнее исправление: Hertz (всего исправлений: 1)
Ответ на: комментарий от den73

Похоже, адвайсы в CCL тоже плохонькие - работают только в пределах стандарта. Т.е. если сохранить #'f в переменную, потом обсоветить f, потом запустить (funcall переменная), то вызовется старое тело f. Я попался на неправильном понимании того, как компилируется код (funcall #'f ...)

Ну ничего, для практики и этих хватает пока. Хотя, конечно, довольно неуютное ощущение, т.к. это ненадёжно. Более надёжно было бы подменять собственно инструкции в теле функции, но с этим, как я понимаю, есть ряд проблем - это уже «самомодифицирующийся код».

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