Size: a a a

2020 February 28

a

akater in Lisp Forever
Vλadimir (Hawthorne the Toolmaker)
Хочу строить замыкания по шаблону, и чтоб у них был свой тип. Вот
Итого, это можно сделать через member или через satisfies (который будет по сути member item list, только list будет дополняться). Но тут большой вопрос, зачем. Потому что это правда эксперимент на уровне около компилятора по сути, и выглядит так, что тут лучше CLOS.
источник

V(

Vλadimir (Hawthorne the Toolmaker) in Lisp Forever
akater
У CLOS, кстати, есть некоторые тонкие внутренние проблемы с типами. Я читал статью, где они обсуждались, и в частности, там утверждалось, что следовало предусмотреть non-instantiatable classes. А когда я экспериментировал со своим define-predicate применительно к CLOS-объектам на SBCL, там тоже открылись нетривиальные особенности. У SBCL все не так хорошо с CLOS, как могло бы быть.
Любопытно. Еще и потому что мне замчательно подходит замыкание вроде dlambda, смотрится проще и органичней чем юзать CLOS.
источник

V(

Vλadimir (Hawthorne the Toolmaker) in Lisp Forever
И можно определить для них предикат и им одним обойтись.
источник

a

akater in Lisp Forever
Vλadimir (Hawthorne the Toolmaker)
Любопытно. Еще и потому что мне замчательно подходит замыкание вроде dlambda, смотрится проще и органичней чем юзать CLOS.
Информация о типах активно используется при компиляции. Если тип динамически переопределяется, это означает, что для корректности вообще всего необходима корректная динамическая перекомипиляция. По моему опыту (да и из общих соображений), это очень ненадежно.
источник

V(

Vλadimir (Hawthorne the Toolmaker) in Lisp Forever
Я просто еще не понимаю как в принципе в  CL (sbcl) работают типы и ассерты. сбцл кидает иногда ворнинги типа "у тебя на месте, где эта функция ждет список, стоит байда, осторожней!"
источник

V(

Vλadimir (Hawthorne the Toolmaker) in Lisp Forever
Как такого поведения добиться для собственных определений?
источник

a

akater in Lisp Forever
Vλadimir (Hawthorne the Toolmaker)
Как такого поведения добиться для собственных определений?
Выставить (declare (type list x)) где x это аргумент.

Помимо этого могут быть нужны optimize декларации. У меня в шаблоне проекта системы есть
(asdf:defsystem
   ..
   :around-compile
 (lambda (next)
   (proclaim '(optimize
 (compilation-speed 0)
               (debug 3)
               (safety 3)
               (space 0)
               (speed 0)))
   (funcall next))
 ..)

так что SBCL максимально жесток.
источник

V(

Vλadimir (Hawthorne the Toolmaker) in Lisp Forever
akater
Итого, это можно сделать через member или через satisfies (который будет по сути member item list, только list будет дополняться). Но тут большой вопрос, зачем. Потому что это правда эксперимент на уровне около компилятора по сути, и выглядит так, что тут лучше CLOS.
Спасибо!
источник

a

akater in Lisp Forever
Ну вообще это стремно выглядит. То есть, там define-my-dlambda, и оно пихает свежесозданную функцию в список всех наших функций. В определении типа будет либо satisfies my-dlambda-p, а my-dlambda-p проверяет на принадлежность глобально определенному списку (по eq), либо в определении типа будет (member ,@dlambdas), и тогда это определение (типа!) каждый раз перевычисляется внутри define-my-dlambda.

Я не интересовался, каковы гарантии динамического переопределения типов в CL. Но из общих соображений понятно, что тут мало на что можно рассчитывать. Если пойти путем satisfies, то предупреждения о том, что my-dlambda не попало в какой-то аргумент, почти наверняка будут появляться без каких-то проблем, но никакого inference не будет.
источник

a

akater in Lisp Forever
Stygian Serpent 🏴‍☠️
ребят, а вы свои кроме академических проектов делаете на лиспе?
На Emacs Lisp я пишу часто, чтобы помогать себе в повседневных делах. На Common Lisp такого нет, потому что нету среды типа Emacs. Люди, которые используют stumpwm, скорее всего будут писать себе что-то повседневное на CL. Я не использую stumpwm, но пишу один патч, который внесет для меня CL в список языков, помогающих в повседневных делах.
источник

IZ

Ilia Zviagin in Lisp Forever
akater
Ну вообще это стремно выглядит. То есть, там define-my-dlambda, и оно пихает свежесозданную функцию в список всех наших функций. В определении типа будет либо satisfies my-dlambda-p, а my-dlambda-p проверяет на принадлежность глобально определенному списку (по eq), либо в определении типа будет (member ,@dlambdas), и тогда это определение (типа!) каждый раз перевычисляется внутри define-my-dlambda.

Я не интересовался, каковы гарантии динамического переопределения типов в CL. Но из общих соображений понятно, что тут мало на что можно рассчитывать. Если пойти путем satisfies, то предупреждения о том, что my-dlambda не попало в какой-то аргумент, почти наверняка будут появляться без каких-то проблем, но никакого inference не будет.
Это как это "динамического переопределения типов" ?
источник

IZ

Ilia Zviagin in Lisp Forever
akater
Ну вообще это стремно выглядит. То есть, там define-my-dlambda, и оно пихает свежесозданную функцию в список всех наших функций. В определении типа будет либо satisfies my-dlambda-p, а my-dlambda-p проверяет на принадлежность глобально определенному списку (по eq), либо в определении типа будет (member ,@dlambdas), и тогда это определение (типа!) каждый раз перевычисляется внутри define-my-dlambda.

Я не интересовался, каковы гарантии динамического переопределения типов в CL. Но из общих соображений понятно, что тут мало на что можно рассчитывать. Если пойти путем satisfies, то предупреждения о том, что my-dlambda не попало в какой-то аргумент, почти наверняка будут появляться без каких-то проблем, но никакого inference не будет.
Как бы если они там переопределяются, то типа просто нет... Или он более широкий.
источник

a

akater in Lisp Forever
Vλadimir (Hawthorne the Toolmaker)
Любопытно. Еще и потому что мне замчательно подходит замыкание вроде dlambda, смотрится проще и органичней чем юзать CLOS.
Обращаю внимание, что в CLOS MOP есть funcallable objects, и это выглядит более разумно. См. например обсуждение на точно такую же тему: https://stackoverflow.com/questions/27558980
источник

a

akater in Lisp Forever
Ilia Zviagin
Это как это "динамического переопределения типов" ?
Я даже не удивлюсь, если это в итоге будет работать. Но рассчитывать не стал бы, и не удивлюсь если и не будет. :-) Надо смотреть, что написано в спецификации.
источник

IZ

Ilia Zviagin in Lisp Forever
akater
Я даже не удивлюсь, если это в итоге будет работать. Но рассчитывать не стал бы, и не удивлюсь если и не будет. :-) Надо смотреть, что написано в спецификации.
так не будешь включать оптимизацию -- и вообще ВСЁ будет работать!
источник

a

akater in Lisp Forever
Если не включать оптимизацию, то снова встает вопрос, почему для идентификации dlambda предлагается использовать тип, а не класс.

Я воздерживался бы от динамического переопределения типов или предикатов, от которых они зависят, за исключением тех случаев, когда это эксперимент непосредственно по динамическому переопределению типов, и экспериментатор готов вручную перекомпилировать все функции, которые зависят от определения типа, когда определение этого типа меняется.
источник

IZ

Ilia Zviagin in Lisp Forever
akater
Если не включать оптимизацию, то снова встает вопрос, почему для идентификации dlambda предлагается использовать тип, а не класс.

Я воздерживался бы от динамического переопределения типов или предикатов, от которых они зависят, за исключением тех случаев, когда это эксперимент непосредственно по динамическому переопределению типов, и экспериментатор готов вручную перекомпилировать все функции, которые зависят от определения типа, когда определение этого типа меняется.
Я не понимаю ни одного слова, что ты тут написал...

В смысле слова понимаю, смысл -- нет.
источник

a

akater in Lisp Forever
Ilia Zviagin
Я не понимаю ни одного слова, что ты тут написал...

В смысле слова понимаю, смысл -- нет.
Странно; я очень хорошо и понятно пишу. Но я переписал.

Если серьезно, то люди на это мне жалуются в последнее время. Буду следить.
источник

V(

Vλadimir (Hawthorne the Toolmaker) in Lisp Forever
Stygian Serpent 🏴‍☠️
ребят, а вы свои кроме академических проектов делаете на лиспе?
Так и есть, повседневное для stumpwm. Плюс пилю свой грааль который должен помочь в академии неслабо.
источник

V(

Vλadimir (Hawthorne the Toolmaker) in Lisp Forever
Алсо радует наличие (возможность создания) тонких клиентов для всяких гнутых утилит типа гнуплота. И сравнительная легковесность сбцл. Результат: можно быстро вкорячить условного бота для телеги на raspberry.
источник