beneroth changed the topic of #picolisp to: PicoLisp language | The scalpel of software development | Channel Log: https://libera.irclog.whitequark.org/picolisp | Check www.picolisp.com for more information
wineroots has joined #picolisp
aw- has joined #picolisp
emacsomancer has quit [Ping timeout: 245 seconds]
emacsomancer has joined #picolisp
<razzy> beneroth: did you compared pilDB and some other mainstream graphDB?
rob_w has joined #picolisp
<beneroth> razzy, I compared it with mainstream relational databases and their ORM frameworks (which fake OOP-DB to application badly), and worked on projects in parallel using either tech.
<beneroth> I don't have much practical experience with "other" graphDB, then again I understand no graphDB is really mainstream, closest is probably DB frameworks on top of postgres I guess.
<beneroth> pilDB is not a true graphDB I guess, pilDB is a blend of relational (indexes, ACID CP-transactions), OOP-DB (OOP objects can be stored as records natively without any additional mapping/processing) and graphDB (records can directly be linked, no indirect lookup via foreign key required as it is the case with relational)
<beneroth> when ignoring schema on db fields (practically using put function instead of 'put> method) or customizing/disabling its schema validation, then you get a document database, where you can have a custom schema in each record
<beneroth> when you ignore the pilDB schema mechanics altogether you can use it as a pure key/value-store to work with persistent symbols
<beneroth> so it is quite fluid, adaptable
<beneroth> being reasonably efficient despite having no magic under the hood, everything can be inspected and tracked. which means other DBMS might be able to pull of some optimizations automatically, which in pilDB are up to the programmer (most importantly: don't do something inefficient, not so much about having to optimize anything, efficient tools are there for above-average-number of DB special topics e.g. including UB tree)
<beneroth> then again in mainstream DB's often faulty optimizations/configurations make them slow or even losing data, such magic bad stuff cannot happen with pilDB
<razzy> beneroth: thank you.
razzy has quit [Quit: leaving]
clacke has joined #picolisp
aw- has quit [Quit: Leaving.]
mmvmm has joined #picolisp
<mmvmm> Is it possible to make pico lisp workable on 32 bit arm and how to make db migration in picolisp ?
rob_w has quit [Quit: Leaving]
alexshendi has joined #picolisp
<tankf33der> mmvmm: you could compile legacy pil32 version on your arm
<tankf33der> current pil21 is 64bit-only.
<mmvmm> hmmm but 64 version should be fine for arm right?
<tankf33der> No, your arm should be 64 too
<mmvmm> I mean arm64. Is there any kind of JIT thing which will not work on arm (or something like that)?
<tankf33der> you need just llvm eco system, should be fine. Contact me if you failed.
<tankf33der> mmvmm: what is your arm linux distro?
<mmvmm> rasbian
<tankf33der> Should be fine.
<Regenaxer> yes, arm64 is perfect
<Regenaxer> I use it on Tertux/Android
<beneroth> specific database files) might need an programmed migration to run in single user mode or even export/import. there are functions (@lib/too.l) to check database consistency and fix/rebuild indexes.
<beneroth> mmvmm, db migrations: there is not a specific way to do it, but usually you do this with some picolisp/pilog code, and usually you can do it live without special considerations. normally it's just db changes as common in the application programming, even when they might be data changes to reflect a change in schema. schema changes might need a quick restart/reload of the application. very big schema changes (like changing allocation of records to
<beneroth> so generally: needs some good understanding of the database and your use case, but then it's usually a short piece of simple code. change to break something into unusable state is low, and as the database is very transparent and can be well inspected it certainly is fixable.
<beneroth> I've found pilDB less effort and easier to do changes than in comparable applications using other DBMS.
<beneroth> I run productive pil databases for myself and commercial customers for 6 years.
razzy has joined #picolisp
alexshendi has quit [Quit: -a- Connection Timed Out]
alexshendi has joined #picolisp
<tankf33der> multi GB idx finished to run
<razzy> Good evening i wish to all :)
<Regenaxer> Good evening all! :)
<Regenaxer> tankf33der, wow, took so long?
<tankf33der> yeap.
<tankf33der> but successfully passed.
<Regenaxer> ah, not soo long
<Regenaxer> I thought several days
<Regenaxer> about 12 min
<Regenaxer> hmm, well
<Regenaxer> creation of data is 52 hours
<tankf33der> right
<Regenaxer> so indeed several days
<Regenaxer> Huge 'idx tree
<Regenaxer> That's all right probably
<tankf33der> T.
<Regenaxer> Cool, thanks for trying!
<Regenaxer> ah, razzy, btw
<Regenaxer> your idea in brkLoad is not so easy
<Regenaxer> We cannot put (eval (val $Dbg)) simply *before* the 'repl' call
<Regenaxer> It must be *inside* 'repl'
<razzy> Regenaxer: i do not understand. If we talk about debugging from PilCon, i think place i put it is good.
<Regenaxer> This place is problematic. 'repl' sets up more things
<Regenaxer> For example, the current output channel
<Regenaxer> If you debug a GUI function, the current channel goes to the Browser
<Regenaxer> or the tty may be in raw mode
<Regenaxer> so 'repl' takes care of all that
<Regenaxer> I will think about it
<Regenaxer> 'repl' needs one more argument with an optional 'prg' (which may be taken from *Dbg in brkLoad())
alexshendi has quit [Quit: -a- Connection Timed Out]
<razzy> in my ignorance, i fail to see problem. in my tests it behaved ok so far.
<razzy> I am ok if my hook is not pushed into mainstream.
<Regenaxer> What happens for exampl in (in "file1" (out "file2" (! print (read))))
<Regenaxer> We just must put it into 'repl'
<Regenaxer> *Dbg is good for this purpose
alexshendi has joined #picolisp
<Regenaxer> I think in flow.l we need:
<Regenaxer> (repl 0 ($ "! ") $Nil (if (pair (val $Dbg)) @ 0))
<Regenaxer> and
<Regenaxer> in src/io.l
<Regenaxer> (de repl (Exe (i8* . Prmt) X Exe2)
<Regenaxer> I think about it
<Regenaxer> no, better
<Regenaxer> (de repl (Exe (i8* . Prmt) X Prg)
<razzy> I am starting to feel problem you talk about. I think problem would be better talked on jitsi.
<Regenaxer> No big problem at all
<Regenaxer> Just 'Prg' needs to be 'run' in 'repl' just before (loop ...)
<razzy> I have trouble reading PilSrc
<Regenaxer> thats ok, no worry
<Regenaxer> I think I do (and Prg (not (nil? (run Prg))) (loop ...
<Regenaxer> So the return value is checked
<Regenaxer> (de *Dbg (doSomething) (case (key) ... T))
<Regenaxer> if we do what we discussed in PilCon (1) make *Dbg a prg (not just an exe) and (2) control via a return value if the repl runs or not
<Regenaxer> Today I'm too tired, I think about it the next days
<razzy> I am glad you like the idea. The idea seems clear. with implementation in PilSrc i am poor help.
<Regenaxer> No worry :)
<Regenaxer> PilSrc is not necessary to understand
<razzy> Regenaxer: btw, in PilSrc, i can return only static-konstant-number with dbg, yes? can i return "value" of something?
<Regenaxer> It depend what you return to where
<razzy> into repl
<Regenaxer> It can be the pointer to and s-expr
<Regenaxer> How to return something into repl?
<razzy> i will experiment with it and ask again :]
<Regenaxer> yes, good
<Regenaxer> 'dbg' returns simply what was passed to it
casaca has quit [Read error: Connection timed out]
casaca has joined #picolisp
<razzy> Regenaxer: Thank you.
alexshendi has quit [Ping timeout: 264 seconds]
casaca has quit [Ping timeout: 256 seconds]
casaca has joined #picolisp
razzy has quit [Ping timeout: 240 seconds]
razzy has joined #picolisp
mmvmm has quit [Quit: Client closed]
mmvmm has joined #picolisp
razzy has quit [Ping timeout: 264 seconds]
razzy has joined #picolisp
aw- has joined #picolisp
mmvmm has quit [Quit: Client closed]