<geri>
won't it still be a problem if collissions are in a single file?
<abu[7]>
Yes
<abu[7]>
There is no "collision" if in the same lexical context
<geri>
hm
<abu[7]>
The program can't know that you *mean* different symbols
<geri>
is "lexical context" here meant as anything that happens before (====) is called?
<abu[7]>
Yes, for example
<abu[7]>
but ==== relates only to transients
<abu[7]>
(private) until the next one with that symbol
<geri>
how does private work exactly?
<abu[7]>
In any case, 'dolist" is better defined with transient or private Arg
<geri>
also, how does using transient symbols for arguments work exactly :D
<abu[7]>
Hmm
<geri>
or more like, if i have 2 functions in different namespaces that have argument of "Args", how does pil know they're different?
<abu[7]>
Many questions ;)
<geri>
im a very curious person ;)
<geri>
take your time
<abu[7]>
I think "doc private" and the ref for transients try to explain it
<abu[7]>
"Args" is always local within one file o until (====)
<geri>
yeah explanation in ref.html#transient is pretty telling i guess xd
<abu[7]>
(private) (A B) ... (private) A
<geri>
basically once you read the source file, the stuff is already in memory, so there's little need to refer to args as symbols for example
<abu[7]>
A is new after the second
<abu[7]>
B remains
<abu[7]>
Yes
<abu[7]>
(private) is more fine-grained than transients
<abu[7]>
Transients dp
<abu[7]>
don't need a declaration
<geri>
why is every symbol transient if i load a file with namespace setup and then inspect the namespace symbol itself?
<abu[7]>
"Transient" means not readable in the current search order
<abu[7]>
The printer simply doen not know it is intered in *some* namespach
<abu[7]>
e
<geri>
makes sense
<geri>
so with every file i load, more stuff gets interned? just in another namespace/variable
<abu[7]>
Right
<geri>
okay
<geri>
(box) is kinda like gensym in other lisps, right? :D
<geri>
just makes an uninterned symbol
<abu[7]>
Yes, pretty much the same
<geri>
very cool
<abu[7]>
optional with a value
<abu[7]>
(I think not in gensym)
<abu[7]>
'box' is 'new' without implicit 'T' sending
<abu[7]>
and without external symbol creation
<geri>
i was thinking of doing something like common lisp's use of gensyms in macros to make argument collission less of a problem (occasionally)
<geri>
should be viable, not sure if its worth it though
<abu[7]>
Yes, this would work, but more verbose than simple transients
<geri>
also more reliable...
<abu[7]>
with gensym?
<geri>
well, (box) in this case
<geri>
its not an issue if you have small source files though
<abu[7]>
Not more reliable
<abu[7]>
if you use (====) or (private)
<geri>
fair
<geri>
why is {} a reader macro instead of just using (box)?
<abu[7]>
Good question
<abu[7]>
IIRC I just did not know what to do with an empty external
<geri>
im not very knowledgeable about external symbols...
<geri>
what's the problem with {} and external symbols exactly?
<abu[7]>
I don't remember if I ever used {}
<abu[7]>
No problem
<abu[7]>
Otherwise {} would be a syntax error
<geri>
or couldve just been a part of symbol names
<abu[7]>
T
<abu[7]>
{} may be convenient to create an anonymous sym at read time
<abu[7]>
short of `(box)
<abu[7]>
: (1 {} 2)
<abu[7]>
-> (1 $177442400326654 2)
<abu[7]>
: (1 `(box) 2)
<abu[7]>
-> (1 $177442400326661 2)
<geri>
yeah, but saving 4 characters per use doesn't sound worth the (admittedly small) extra reader complexity
<abu[7]>
The reader is not much more complex, be6ause it would need to handle it somehow
<abu[7]>
(eg. issue an erro)
<geri>
typically "any other character" is just a symbol
<geri>
it'd be weird to have { be a valid symbol but not unheard of
alexshe24 has quit [Read error: Connection reset by peer]
<abu[7]>
It could return NIL, like () does
<abu[7]>
But an anon sym is more convenient
alexshe6 has joined #picolisp
alexshe6 has quit [Read error: Connection reset by peer]
<abu[7]>
If "{}" is found, it just calls (consSym ZERO $Nil)
alexshendi has joined #picolisp
<abu[7]>
No big thing
<geri>
((== C (char "{")) ...)
<geri>
in llvm~read0
<geri>
pretty horrifying
<abu[7]>
:)
<abu[7]>
Still very simple when compared to a parser of other languages
<geri>
well that's true
<geri>
unless forth
<geri>
what does that block even do?
<abu[7]>
indeed
<geri>
if {} calls box, but otherwise?
<abu[7]>
((== C (char "{")) ?
<geri>
i dont think ive seen {XYZ} syntax anywhere in docs
<geri>
yes
<geri>
the else clause
<abu[7]>
It reads an external
<abu[7]>
{ABC1234567}
<geri>
nothing about this syntax in reader macro part or in external symbols part...
<abu[7]>
"External Symbols" in @doc/ref.html
<geri>
i still dont see "{...}" there, am i blind?
<geri>
oh wait
<geri>
theres more than one external symbols headers
<abu[7]>
Yes, the second
<abu[7]>
or doc/structures
<geri>
ah, okay
<abu[7]>
Line 281 ff
<abu[7]>
cryptical
<geri>
it appears as last line for me :D
<geri>
i see {177777} though
<abu[7]>
oops
<abu[7]>
copy/pasted the wrong number from Vip st tus line
<abu[7]>
so it is 87
<geri>
honestly im not sure how exactly to use (box) for fixing symbol collissions considering if you use (let) you'll probably still use 1 or more normal symbols
<geri>
maybe ` + let that returns a list
<geri>
which do be verbose
<abu[7]>
T
<abu[7]>
it will be messy
<geri>
it is also pretty cool though :D
alexshendi has quit [Quit: -a- Connection Timed Out]