<CORDIC>
I forgot about the FAQ. IMHO this is where a self-hosting implementation is interesting.
<Regenaxer>
Good morning CORDIC
<Regenaxer>
self-hosting in which sense?
<CORDIC>
Lisp implemented in itself.
<Regenaxer>
This has nothing to do with compilation
<Regenaxer>
PicoLisp is self-hosting in that sense
<Regenaxer>
But *not* to be able to compile (to machine code) was one of the first design decisions
<Regenaxer>
It gives another architecture and language
<Regenaxer>
Try to understand the internal machinery of pil
<Regenaxer>
how primitives are executing
orivej has joined #picolisp
<Regenaxer>
And on the lang level FEXPRs don't work if they need te be compiled
<Regenaxer>
And FEXPRs are the very basic of all in PicoLisp
* CORDIC
thinks...
<Regenaxer>
*every* primitive is an FSUBR in pil
<Regenaxer>
Simply can't be compiled
<Regenaxer>
And even if it could, why? Pil is very fast
<Regenaxer>
Compilation (to pointer structures) is fast
<Regenaxer>
Probably faster than in any other system
<Regenaxer>
(see tankf33der's tests yesterday)
<Regenaxer>
So the question about compiling is at the very core of PicoLisp
f8l has quit [Remote host closed the connection]
f8l has joined #picolisp
<CORDIC>
You are talking about Inherent Complexity of FEXPRs. For example, pre-defined "cons" and "inc" are not a "fun"-"lst". "fun", not sure about FEXPR in general, have unnecessary properties for certain applications which might as well be undesired properties, by some implication.
<Regenaxer>
Not complexity
<Regenaxer>
FEXPRs are code as data
<Regenaxer>
(de foo (X Y Z . Prg) ...
<Regenaxer>
'Prg' is only known at runtime
<Regenaxer>
PicoLisp is too dynamic to be compiled
<Regenaxer>
Compilers are static by principle
<Regenaxer>
A compiler violates the equivalence of code and data
<Regenaxer>
This was much discussed here during the last decades. I'm surprised you were not aware of this and told nonsense to nullnullnull
<CORDIC>
But how do we define "inc", for example?
<Regenaxer>
How?
<Regenaxer>
As in the sources?
<CORDIC>
Sorry for the confusion.
<Regenaxer>
np :)
ubLIX has joined #picolisp
orivej has quit [Ping timeout: 246 seconds]
ubLIX has quit [Quit: ubLIX]
freemint has joined #picolisp
orivej has joined #picolisp
<freemint>
Regenaxer, which optimizations do you have in place to make the database fast?
<Regenaxer>
There are several places you can tune. Mostly by deciding which objects to put into which file
<Regenaxer>
ie. 'dbs'
<Regenaxer>
And of course clever design of the model. Indexes.
<Regenaxer>
Then if possible distribute across different servers
<freemint>
In the long run i might want to do write something similar in Julia.
orivej has quit [Ping timeout: 258 seconds]
<freemint>
So far i have seen the following tricks in PilDB:
<freemint>
- allocate in blocks of the same size not have memory fragmentation
<Regenaxer>
Not "same size", but "sufficently large" blocks. May be bigger
<Regenaxer>
But I think the differences in speed are not measurable
<freemint>
Oh yeah you can have it go one in another block. You are right
<freemint>
- have an option to load stuff lazily
<Regenaxer>
An object may occupy an unlimited number of blocks
<freemint>
limited by disk space only
<Regenaxer>
Max 2**42 (4 Tera) Blocks per file
<freemint>
Can object go on in different files too?
<Regenaxer>
no
<Regenaxer>
But you can put some of the attributes into other files
<Regenaxer>
eg with +Swap
<Regenaxer>
+Swap is for large and/or seldom used properties
<freemint>
- have an access scheme with no indirection. If you have the name of the object you want to access you can look it up directlly without having to translate the name in to a location first.
<Regenaxer>
I don't understand this
<Regenaxer>
"translate the name" you mean index lookup?
<freemint>
Yeah,
<freemint>
- make it mostly append only.
<freemint>
(to my understanding in PicoLisp you do few "in place" updates of values)
<Regenaxer>
"append" what?
<freemint>
If i have external symbol A with the value (1 2 3) and i set its value to (4 3 2 1) the (1 2 3) still stays in the database but it no longer pointed to.
<Regenaxer>
No
<Regenaxer>
Not correct
<Regenaxer>
The old value is gone, no difference between internal, transient and external symbols
<Regenaxer>
The differences between these symbols is only scope and persistence
<freemint>
Ok.
orivej has joined #picolisp
<freemint>
- Have each process have it's own local cache of the database, update the cache as needed (even if cache invalidation is hard). Provide a central way of locking the db to make larger operations atomic.
<freemint>
Experiment a litte "The old value is gone" does not seem to hold true. I think we have an misscommunication
<freemint>
(setq A (1 2 3)) (setq B A) (setq A (1 2)) (not (= (val 'B) (val 'A))) -> T
orivej has quit [Ping timeout: 246 seconds]
<freemint>
The old value stays around and is not overwritten, only the pointer in the symbol is overwritten. The data stays around but is (if nothing points to it) no longer accessable.
<Regenaxer>
"each process its own local cache" is alway given
<Regenaxer>
Yes, the old value is garbage if not referred to from some other place
<Regenaxer>
But such things are lost if the object is written to the file
<Regenaxer>
it is basically a "print"ing
<freemint>
Ahh yes, the value is part of printout of the symbol
<Regenaxer>
yep
<Regenaxer>
the value and property list are simply dumped to the block(s) in the file
<freemint>
What happens when i overwrite a swap? Does that leave garbage in the DB?
<Regenaxer>
no, +Swap is just another (non-Entity) object
<Regenaxer>
DB garbage results only if objects are deleted (with 'zap')
<freemint>
and there is no way to delete by setting another value?
<Regenaxer>
You can set another value and/or properties
<Regenaxer>
But that is not deleting
<Regenaxer>
Delete frees the block(s)
<Regenaxer>
Ah, I was wrong
<Regenaxer>
Garbage happens only when all references to an objects are gone
<Regenaxer>
The blocks are allocated and freed automatically
<freemint>
How do we know if all references are gone?
<Regenaxer>
There is only one situation where garbage *blocks* may reslult
<Regenaxer>
ie if new followed by rollback
<Regenaxer>
see 'dbgc'
<Regenaxer>
You can't easily know if all references are gone
<freemint>
Right
<Regenaxer>
like in the Lisp heap too
<freemint>
Yes, exatly.
<Regenaxer>
So 'dbgc' or @lib/dbgc.l must run
<freemint>
So if we derefence an object (overwrite an symbol with a pointer to it) it might become garberage and leaves a db block we are unable to use unless dbgc runs?
<Regenaxer>
There are no pointers in that sense
<Regenaxer>
you delete an index
<Regenaxer>
or +Link or +Joint
<Regenaxer>
In heap these are pointers, yes, but not in the DB
<Regenaxer>
If you 'lose>' an object, it *might* become garbage
<Regenaxer>
Usually not
<Regenaxer>
as it is referred to from possibly many other places usually
<freemint>
I do not grok that yet. I try my luck another day.
<Regenaxer>
With 'keep>' you can undo most of 'lose>'
<Regenaxer>
You must use it in praxis
<freemint>
Did you ever make statistics how often a symbol is referenced in a production database?
<Regenaxer>
No, does not make much sense
<freemint>
Like there are 1200 obects with reffered once, 600 with two ...
<freemint>
ok
<Regenaxer>
You see it from the model
<freemint>
i will another day
<Regenaxer>
which objects refer to which objects
<Regenaxer>
So *you* decide this
<Regenaxer>
how entities refer to each other
<Regenaxer>
multiply this with the number of relevant objects
<Regenaxer>
plus all indexes
orivej has joined #picolisp
freemint has quit [Ping timeout: 250 seconds]
ubLIX has joined #picolisp
ubLIX has quit [Quit: ubLIX]
freemint has joined #picolisp
ubLIX has joined #picolisp
ubLIX has quit [Quit: ubLIX]
freemint has quit [Ping timeout: 250 seconds]
<beneroth>
hi all
<beneroth>
old discussions warmed up, eh?
<beneroth>
CORDIC, full-featured picolisp CANNOT be compiled, impossible. you could compile a subset of the language, but mixing compilation and interpreter (as in java and .not) would violate picolisp spirit of KISS, add unnecessary complexity (= bloat), and provide little gain. as Regenaxer said, and clearly stated in the FAQ, completely ignoring compiling but instead focus on a minimal, very small and very fast interpreter is one of the basic pillars
<beneroth>
picolisp is based on.
<beneroth>
if you need extra speed in picolisp, implement the speed-critical part in pil asm (see e.g. ht.l library).
<Regenaxer>
Hi beneroth! :)
<beneroth>
the whole point of picolisp language design is to focus on pragmatic practicality, use a low number of different concepts and structures so a minimal system results which is both very flexible/powerful and (probably the more important part:) easy to hold the concepts in mind (of the language user) and easy to reason about the whole application!
<Regenaxer>
All true, and indeed cannot be compiled, not even badly or complicated or bloated or a subset
<beneroth>
in picolisp, you can often easily hold the hole application, from GUI user level down to the bit level, in your mind and reason about it. impossible in most other stacks, they're to divers and big. bloated.
<Regenaxer>
This is because all primitives cannot be called from compiled code, as they need s-exprs
<beneroth>
T
<Regenaxer>
I'm always surprised how much people still focus on compilation
<beneroth>
and freemint is gone, so I cannot tell him that the magic sauce of the pilDB is the DBMS architecture (KV/OOP/Graph all in one, plus powerful IPC) and not really the low level stuff, though the nice properties are all emergent results of the low level stuff = the picolisp datatype design...
<Regenaxer>
But anyway, as we often said here, we can consider PicoLisp's reading as compilation
<beneroth>
Regenaxer, T
<beneroth>
it is not compilation
<beneroth>
it is translation
<Regenaxer>
Yeah, freemint is a quick leaver, but he knows the irc log
<beneroth>
could be called transpiling maybe
<Regenaxer>
Cool! yel, transpiling. Did you invent that?
<beneroth>
but not compiling. compiling implicities "assemble, taking multiple parts together", that is not happening in picolisp. that is happening only at evaluation because of the lazy late binding :)
<beneroth>
Regenaxer, no
<beneroth>
Regenaxer, transpiling is usually used for automatic translation between two programming languages
<Regenaxer>
Well, the Forth compiler does a similar thing
<Regenaxer>
and they call it compiling
<beneroth>
ok
<Regenaxer>
Transform ASCII source to an internal representation
<Regenaxer>
Same case as with byte-code machines
<Regenaxer>
Pascal, Java etc.
<beneroth>
it's more like a codec, though that is kinda reserved for audio/video/data encodings. text is getting decoded and encoded as binary structure.
<Regenaxer>
ok
<beneroth>
compiling is "translating source to machine code" originally, me thinks
<beneroth>
:)
<Regenaxer>
yes, originally was no other possibility
<Regenaxer>
in fact "translating to assembly"
<Regenaxer>
then assembled and then linked
<Regenaxer>
So it is always a transformation to an equivalent code
<Regenaxer>
and Lisp's pointer structures are equivalent to the character source code
<Regenaxer>
Forth compiles ASCII to an *array* of pointers to "words" (= symbols in Lisp)
<Regenaxer>
Lisp compiles to a *linked list*
<Regenaxer>
Very similar, just a lot simpler in Forth
<beneroth>
Aye! :)
ubLIX has joined #picolisp
ubLX has joined #picolisp
ubLIX has quit [Ping timeout: 245 seconds]
xkapastel has joined #picolisp
ubLX has quit [Quit: ubLX]
freemint has joined #picolisp
mtsd has joined #picolisp
<tankf33der>
hi all
<Regenaxer>
Hi tankf33der!
<tankf33der>
im going write article on wiki about those huge function compilation.
<Regenaxer>
Great! This addresses perhaps also today's nullnullnullnull question
<tankf33der>
yea.
<Regenaxer>
He asked for faster compilation haha
<mtsd>
Hello everyone
<Regenaxer>
Helloooo mtsd!
<mtsd>
Hi Regenaxer! :)
<mtsd>
How has summer been?
<mtsd>
I know you visited Japan. I have only been in Sweden this year. Going on trips with the family
<mtsd>
And been away from computers, haha
<beneroth>
thanks tankf33der
<beneroth>
and hi :)
<beneroth>
hi mtsd :)
<beneroth>
mtsd, summer was very hot in Germany and CH
<beneroth>
how are you doing? :)
<mtsd>
Hi beneroth!
<mtsd>
We had a more normal summer here. Some warm days, some cool days. It is cooling down now, in fact.
<mtsd>
Last year was very warm though
<mtsd>
Things are good here, schools are about to start, I am about to go back to work.
<Regenaxer>
Sorry, was interrupted!
<mtsd>
No worries, Regenaxer
<Regenaxer>
Yep, in Japan and then a few days near the Danish border
<mtsd>
Oh, really?
<Regenaxer>
Except that only here in my village :)
<Regenaxer>
Near the Baltic sea to be exact, family meeting
<mtsd>
Almost here then :)
<Regenaxer>
Well, still a little far ;)
<mtsd>
Sounds nice
<Regenaxer>
In Japan I met Geo, the guy who built PilMCU
<mtsd>
Great! How is he these days?
<Regenaxer>
he came with family to Sapporo
<Regenaxer>
He seemed very well :)
<mtsd>
Did you see AW too?
<Regenaxer>
Unfortunately not. He is in Okinawa now, 3000 km to the south
<mtsd>
Ah, ok
<Regenaxer>
Perhaps next time
<mtsd>
I have read the two Forth books by Leo Brodie this summer
<Regenaxer>
My mother in law moves to Okinawa next month
<Regenaxer>
Thinking Forth and what was the other?
<mtsd>
Starting Forth
<Regenaxer>
yeah
<Regenaxer>
Very good books
<mtsd>
They were interestings. I liked them
<Regenaxer>
I played with the thought to "translate" them Forth -> PicoLisp :)
<mtsd>
Hopefully they can help me dig deeper into Pil :)
<Regenaxer>
At least Thinking ...
<Regenaxer>
I think they do in some way
<beneroth>
:)
<beneroth>
how much time does Geo have to work on pil-related stuff these days? you spoke about that, Regenaxer ?
* beneroth
is still hoping for a picolisp machine one far day
<mtsd>
hopes too
* freemint
is currently slowly starting to learn about VHDL and how to programm FPGAs
<mtsd>
Hello freemint!
* freemint
should not be talking since he has an exam tomorow and still has not understood everything there is to understand.
* freemint
wishes everyone a good bya
<freemint>
*bye
<Regenaxer>
Picture of Geo and me in Sapporo: https://app@7fach.de/pub/image-22.jpg
<mtsd>
Best of luck tomorrow, freemint!
* freemint
sees the first picture of Regenaxer he ever saw.
<Regenaxer>
Geo wants to do more in Pil he said
<Regenaxer>
freemint :)
* freemint
is supprised by the age of Regenaxer
<Regenaxer>
hehe
* freemint
is gone (probably)
<Regenaxer>
cu
<mtsd>
Good picture! You look well, Regenaxer :)
<Regenaxer>
Thanks :)
<mtsd>
I still hope I can find the time to come visit you
<Regenaxer>
That would be great
<mtsd>
Was unable to do so this summer, unfortunately. But maybe no problem, since you were in Japan
<mtsd>
And you can hear me stumbling as I try to speak German ;)
<Regenaxer>
No worries :)
<mtsd>
I used to be a lot better, but it is easier to keep English fresh. Movies and TV-shows are subtitled here.
<Regenaxer>
English is enough
<mtsd>
I should have made more of an effort to keep my German knowledge alive, but live sort of got in the way ;)
<mtsd>
As usual, haha
<Regenaxer>
T
<Regenaxer>
Haven't been there for 10 years after all
<mtsd>
Not bad
<mtsd>
Are you planning to go there soon again?
<Regenaxer>
Next year I suppose, to Okinawa, as the relatives are based there then
<Regenaxer>
My wife's brother lives there since decades
<Regenaxer>
so her mother moves there too
<Regenaxer>
It was the last time in Sapporo for me probably for the forseeable future
<Regenaxer>
still some friends there, but too far to go
<mtsd>
A friend of mine moved to Kyoto, back in 1997
<Regenaxer>
nice!
ubLIX has joined #picolisp
<mtsd>
He was supposed to stay for a year or two, but he still has not moved back :)
<Regenaxer>
I can understand him
<mtsd>
Married with two children, so I don't think he will ever return
<Regenaxer>
yeah
<beneroth>
how long is the flight for you, Regenaxer ?
<beneroth>
nice photo :)
<mtsd>
He is around 2 metres tall, blonde. Really sticks out :)
<Regenaxer>
To Tokyo about 11 hours, then another two to Sapporo
<Regenaxer>
mtsd, indeed!
<mtsd>
shoe size 46. He had some trouble finding clothes at first, haha
<Regenaxer>
He won't get lost in the masses
<beneroth>
11 hours. autsch.
<beneroth>
I've gotta go now.
<beneroth>
See you around, take care my friends:)
<beneroth>
bbl
<mtsd>
See you, beneroth!
<Regenaxer>
See you beneroth!
<Regenaxer>
I retire too
<Regenaxer>
See you mtsd!
<mtsd>
See you, Regenaxer!
<Regenaxer>
:)
<mtsd>
Nice talking to you again :)
<Regenaxer>
Good night!
<Regenaxer>
yes, for me too
<Regenaxer>
bye!
mtsd has quit [Quit: Leaving]
ubLX has joined #picolisp
ubLIX has quit [Ping timeout: 246 seconds]
kce has joined #picolisp
xkapastel has quit [Quit: Connection closed for inactivity]