freenode/#lisp - IRC Chatlog
Search
2:36:46
no-defun-allowed
A lot of things in Common Lisp can have documentation strings, so you probably should be reminded by them in other languages.
2:37:19
no-defun-allowed
To generate a document with all the documentation strings, Staple <https://github.com/Shinmera/staple> could be used.
2:41:33
White_Flame
what's the proper term for a symbol's value binding outside of any dynamic binding scopes? global value, toplevel value, etc?
3:20:37
pjb
"eternal" would be a dynamic (time) notion, but it implies some level of immutability, so it would do only for defconstant…
3:20:51
White_Flame
The length of time is a scope with a definite beginning and usually definite ending
3:21:17
White_Flame
"global" means many things, and the binding in question is the shared one that everybody sees without a local private override
3:21:34
no-defun-allowed
SBCL has a macro named DEFGLOBAL, so there is some precedent to calling it a global value.
3:22:31
pjb
White_Flame: defining a variable with defparameter or defvar doesn't propagate its definition in the past. Therefore it cannot be a "global temporal" scope.
3:23:37
White_Flame
the scope is the distinction between this one and private bindings that other threads of execution create
3:27:29
White_Flame
but I did default to "global" as well, just couldn't find any specific basis for it
3:28:01
HiRE
I think its just the names of the scope. The process is intuitive but "dynamic" goofs me up for some reason.
3:28:32
Bike
the clhs entry for defvar/defparameter calls it the "value cell" but that's kinda bad for other reasons
3:28:37
pjb
If you use the same word for the two orthogonal notion, you are bound to be confused, and to confuse everybody.
3:29:03
White_Flame
and does the "value cell" point to a private location when another dynamic binding is in effect?
3:36:59
White_Flame
" A dynamic variable can be referenced outside the dynamic extent of a form that binds it. Such a variable is sometimes called a ``global variable'' but is still in all respects just a dynamic variable whose binding happens to exist in the global environment rather than in some dynamic environment. "
3:44:22
White_Flame
well, specific to the comment I'm writing, "global value" would imply the value held in symbol's said "global binding", even if there are other dynamic bindings flying around
3:48:22
White_Flame
oh, and "global variable" is in the glossary as well: "global variable n. a dynamic variable or a constant variable."
6:14:29
smokeink
how to muffle such notes? note: doing unsigned word to integer coercion (cost 20) to "<return value>"
7:14:50
White_Flame
I have a macro that generates `(locally (declare ....) ,@body) so I can easily wrap it around small operations
7:15:43
White_Flame
(declare (sb-ext:unmuffle-conditions optimization-note)) around the parameters of the subform also allows its whinings to not be muffled, just the singular form in question
8:41:49
trittweiler
White_Flame, "global binding" versus "thread-local binding" (non-standard, of course) versus "local binding" is decent terminology I would reckon
8:44:48
jackdaniel
isn't the terminology: deep binding and shallow binding (and a symbol value which is not a binding)?
8:46:14
jackdaniel
and a consequence of deep binding implementation technique are thread-local bindings, and shallow gives you bindigns which are shared across threads (n.b probably harder to synchronize )
8:51:17
beach
jackdaniel: The distinction between deep and shallow binding is just an implementation issue.
8:52:34
beach
jackdaniel: Correct implementation of shallow binding in a multi-thread context is that there must be a per-thread "value cell".
8:54:06
beach
From memory, SBCL assigns a number to a symbol as soon as it is used as a variable. This number is used as an index into a table in the reified thread.
8:54:12
jackdaniel
hm, thanks for correcting me. I'll re-read the relevant parts of LiSP then to improve my understanding
9:07:35
jackdaniel
sorry, I can't tell from top of my head (and I'm focused on McCLIM issue atm so I'm not eager to look up ECL's internals code)
9:09:07
jackdaniel
I think that the location is on the stack and the array element is updated to point at that location
9:10:49
beach
But I wasn't asking what happens when a binding is done or undone. Just what SYMBOL-VALUE does. Again, if you are busy, you don't have to answer.
9:15:57
beach
For what it's worth, my current hypothesis is to use deep binding for SICL. I.e., the dynamic environment stack contains binding entries, and there is no per-thread table. SYMBOL-VALUE then has to search the stack to find the most recent binding.
9:16:50
beach
So searching for the current value or setting that value is more expensive than with shallow binding, at least if the stack is somewhat deep. Though finding the table in the thread is not free either.
9:17:30
beach
On the other hand, binding/unbinding is cheaper in deep binding than in shallow binding.
9:19:00
beach
If it turns out that 1. Access to special variables is frequent, and 2. Those accesses are often to deeply nested bindings, then I may have to reconsider.
9:28:19
White_Flame
beach: in SBCL, the TLS is always in a register, so "finding the table in the thread" actually is free
9:30:46
LdBeth
currying is just a function (defun currying (fn) (lambda (x) (lambda (y) (funcall fn x y))))
9:36:19
beach
It is *so* inspiring to answer questions from someone who 1. does not acknowledge this fact, and 2. leaves instead.
9:42:01
phoe
beach: the channel is logged, so if they ever come again and/or ask again, you can point them towards the logs in the channel topic.
9:43:18
jackdaniel
"- hey, I remember your nick from 5months ago, you did not thank me - do you remember that? - no (leaves the channel)", pretty burdensome strategy
9:44:04
jackdaniel
and I doubt that would change the culture of a person who is reminded that they did not follow proper netiquette
9:45:44
phoe
I thought of something like more like "oh I happen to recognize that nickname, they asked a question that was answered but they left, the answer is in the channel logs"
10:40:58
ghard
Have asked this before, methinks, but anyone tried to use ZS3 with DigitalOcean with success (claims to be S3-API-compatible) ?
11:04:13
no-defun-allowed
Note that it won't work for arrays of arbitrary dimensions, but only for one-dimensional vectors.
12:21:18
pjb
selwyn: (let ((array #2A((1 2 3) (4 5 6)))) (coerce (make-array (reduce (function *) (array-dimensions array)) :displaced-to array) 'list)) #| --> (1 2 3 4 5 6) |#
12:32:33
_death
pjb: just the other day I wrote this kind of flatten-array operator.. useful if you're representing bayesian network conditional probability as multi-dimensional arrays
13:07:28
reepca
for example: (defparameter test-array (make-array 10 :adjustable t :fill-pointer 0 :element-type '(unsigned-byte 8)))
13:07:51
reepca
(let ((*print-readbly* t)) (print test-array)) => #A((10) (UNSIGNED-BYTE 8) 0 0 0 0 0 0 0 0 0 0)
13:13:44
pjb
reepca: but you cannot use print, because it is not specified whether print uses print-object or not, and you cannot define print-object methods on standard classes such as array.
13:16:03
bitmapper
debugger invoked on a COMMON-LISP:UNDEFINED-FUNCTION in thread #<THREAD "main thread" RUNNING {10005084C3}>: The function SB-C::%MORE-ARG-CONTEXT is undefined.