Size: a a a

2020 March 03

VL

Valeriy L in Lisp Forever
Или символ
источник

PG

Pïg Grëënëst in Lisp Forever
ловите питониста!
источник

VL

Valeriy L in Lisp Forever
Фу таким быть
источник
2020 March 04

a

akater in Lisp Forever
Valeriy L
Парень который написал elfeed советует юзать defstruct вмечто eieio. Это не просто структ как в Common'е. Он создает куча бойлерплейта еще
Все-таки надеюсь, что появятся обычные фичи CLOS. Я хотел (по крайней мере) мультиметод, диспатч по EQL, методокомбинатор.

К тому же, в EIEIO есть instance tracking и persistence — это, однако, приятно.
источник

a

akater in Lisp Forever
Alexey Egorov
Если у нас в файле есть (defpackage :foo ...) (in-package :foo ...) (defun bar ...), как именно оно выполняется?
То есть как мне например сделать такое же при помощи eval и read-from-string?
Непонятно, при чем здесь read-from-string-то. Вряд ли ведь задача в том, чтобы сделать нечто обязательно с использованием read-from-string?

Выполняется все всегда одинаково, независимо от того, в файле это или нет. Компилируется, вообще говоря, неодинаково: есть compile-file и есть compile.
источник

a

akater in Lisp Forever
Valeriy L
А список
«Форму»!
источник

AE

Alexey Egorov in Lisp Forever
akater
Непонятно, при чем здесь read-from-string-то. Вряд ли ведь задача в том, чтобы сделать нечто обязательно с использованием read-from-string?

Выполняется все всегда одинаково, независимо от того, в файле это или нет. Компилируется, вообще говоря, неодинаково: есть compile-file и есть compile.
Ну, меня интересует неодинаковость.
источник

AE

Alexey Egorov in Lisp Forever
Собственно феномен, который я наблюдаю, это как раз разное поведение.
источник

AE

Alexey Egorov in Lisp Forever
Которое заключается в том, что если в файле есть defpackage, in-package и defun, то последний defun помещает символ в тот пакет, который был указан в in-package.
источник

AE

Alexey Egorov in Lisp Forever
При этом если делать load/read в репле, то получается, что defun создаёт символ вовсе не в пакете, который был указан в in-package, а в текущем для репла.
источник

VM

Vyacheslav Mikushev in Lisp Forever
Valeriy L
Фу таким быть
Простите. 😁 Перепутал с js'ным эвалом.
источник

AE

Alexey Egorov in Lisp Forever
Vyacheslav Mikushev
Но, говорят, что использование eval - это антипаттерн.
На самом деле нет. Просто он редко бывает нужен.
источник

AE

Alexey Egorov in Lisp Forever
А сделать им можно очень многое.
источник

AE

Alexey Egorov in Lisp Forever
Поэтому считается что лучше обходиться без него.
источник

AE

Alexey Egorov in Lisp Forever
Vyacheslav Mikushev
Наверное, как-то так:
(eval "(defpackage :foo ...)")
(let ((*package* (find-package...)))
 (eval "(defun bar ...)")))
Да, на самом деле примерно так и есть.
источник

AE

Alexey Egorov in Lisp Forever
In-package биндит *package*.
источник

a

akater in Lisp Forever
Alexey Egorov
Которое заключается в том, что если в файле есть defpackage, in-package и defun, то последний defun помещает символ в тот пакет, который был указан в in-package.
defun не помещает символы в пакеты. defun приписывает символу функцию, и символ уже прочтен в тот момент, когда defun это делает. Пакет определяется в read-time. Пакеты используются только ридером! (или функциями типа intern, но это понятно)
источник

VM

Vyacheslav Mikushev in Lisp Forever
Alexey Egorov
На самом деле нет. Просто он редко бывает нужен.
И проблемы бывают с безопасностью. 😁 Его же часто используют для вычисления какого-то пользовательского кода. Когда лень писать свой интерпретатор.
источник

AE

Alexey Egorov in Lisp Forever
Vyacheslav Mikushev
И проблемы бывают с безопасностью. 😁 Его же часто используют для вычисления какого-то пользовательского кода. Когда лень писать свой интерпретатор.
Часто?
Вот такого я ни разу не видел, если честно.
источник

VM

Vyacheslav Mikushev in Lisp Forever
Я только пару раз видел. Но использовали именно для этого. Других вариантов просто не знаю. 😁
источник