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
pablo_escoberg has quit [Quit: Client closed]
geri has joined #picolisp
<geri> hey, is there any writeup about the (make) functions?
<abu[7]> Hi geri, only the normal ref
<geri> i dont understand what's workflow with it...
<abu[7]> Nothing special
<geri> is it just cons/append but in pipeline format?
<abu[7]> I would not call it a pipeline
<abu[7]> The point is that it is more efficient than 'append'
<geri> pipeline as in instead of being (cons Y (append (list X))), etc it goes sequentially
<geri> it reuses the cells? abu[7]
<geri> so less gc'ing
<abu[7]> It keeps pointers to the start and end
<geri> in addLine, which cond statement is responsible for setting attributes for transient symbols?
<geri> (vi '@lib/vip.l)
<geri> also, how do i open @lib/ paths in vip
<abu[7]> It is (gt0 (val C))
<geri> that's comment face though
<abu[7]> What is special with those paths in Vip?
<geri> i cannot do :e @lib/..., at least it doesnt tab complete
<abu[7]> Yes, strings
<abu[7]> set in 'status'
<geri> it just doesnt complete nvm
<geri> ah wait
<abu[7]> No, should work
<geri> @ doesnt complete
<geri> @lib/c does
<abu[7]> Yes
<geri> (c on accident)
<abu[7]> needs a path
<geri> @ is path though
<abu[7]> : (path "@mi")
<abu[7]> Forget that
<abu[7]> Vip needs a dir to search iirc
<abu[7]> : (load "@mi
<abu[7]> Will not complete
<abu[7]> It is how 'path' works
<geri> actually i only see ULINE being referenced in term.l
<geri> weird
<geri> trying to change string color in vip
<geri> (color + no underline)
<geri> tat's probably (=T (val C))
<geri> or not...
<abu[7]> (vi 'vip~status)
<abu[7]> no
<abu[7]> (vi 'vip~markup)
<abu[7]> sets the values
<geri> markup decides what goes where
<geri> addLine actually adds colors, no?
<abu[7]> Right
<geri> in that i dont understand what actually sets colors for strings
<abu[7]> markup determines the type
<abu[7]> (string (and (= "\"" C) 'text)
<geri> it seems (attr NIL T) adds underlines, but editing it doesnt change anything
<abu[7]> (set C T) )
<geri> i only care about the colors, everything is marked up properly
<geri> i just want cyan strings :D
<geri> no underline
<abu[7]> Underline is the second ang
<abu[7]> arg
<geri> to attr, yes
<abu[7]> T
<geri> but only functions that seem to have T in second arg dont seem to do anything
<geri> its still underlined
<geri> like in addLine, theres only 2 calls to attr with T as second argument
<geri> and neither of those seems to change anything if i replace them with (attr CYAN)
<abu[7]> Did you load all properly?
<abu[7]> (pp 'addLine)
<geri> apparently not
<abu[7]> or :v addLine
<geri> okay, only problem left is the quotation marks themselves are white
<abu[7]> Modify on the fly
<geri> i guess that one is on markup, huh
<tankf33der> Morning
<tankf33der> hi all
<geri> おはよう :)
<tankf33der> fast question: how to create a lot of garbage?
<abu[7]> Hi tankf33der
<geri> allocate lists in a loop?
<abu[7]> (do 99999999 (cons))
<geri> there
<geri> :D
<tankf33der> Ok
<tankf33der> and (gc 0) to force collector, right?
<abu[7]> T
<abu[7]> or just (gc)
<tankf33der> afk
<abu[7]> o/
<geri> is there a way to de without message about redefinition?
<geri> ik i can use setq but its kinda ugly
<abu[7]> You can (redef 'foo) or (off foo)
<abu[7]> Then (de foo
<abu[7]> 'setq' also does not set debug info
<abu[7]> so 'de' or 'def' is better usualuy
<geri> okay good
<geri> now just gotta hack markup to grab double quotes as a part of string...
<abu[7]> ok
<geri> are opened files always in memory in text editors?
<geri> like, the whole file gets read into a buffer and then you operate on that
<abu[7]> Correct
<geri> so if you try to open a 4 gigabyte file, it'll take 4 gigabytes of ram?
<abu[7]> after opened in a buffer
<abu[7]> A lot more!
<abu[7]> Each char takes a cell
<geri> well, in pil cause lists
<geri> yeah
<geri> but usually?
<abu[7]> usually?
<geri> in like vim
<abu[7]> Ah
<abu[7]> Depends
<abu[7]> I mean
<abu[7]> depends on the impl
<geri> what are other options?
<abu[7]> Just load the visible parts
<abu[7]> a kind of your own virtual memory
<geri> hm
<geri> itd be good for large files, but likely slower for smaller ones, right?
<abu[7]> Yeah
<geri> okay, good to know
<abu[7]> I think Vim and especially old Vi are very clever in this regard
<geri> it probably had to do that to work on those 70s systems
<abu[7]> Indeed
<abu[7]> Especiall without memory management and swap, like CP/M or DOS
<tankf33der> I am playing with as deep as i can with gc+co
<abu[7]> Very good
<abu[7]> Hairy stuff ;)
<tankf33der> in different combinations
<geri> in C, is there a difference between a char and a char[1]?
<abu[7]> Yes
<geri> shouldn't they occupy as much space in ram?
<abu[7]> On the machine they are the same
<geri> then i guess you can cast them into one another
<abu[7]> Yes, char[1] is already a pointer
<abu[7]> like &char
<geri> oh
<abu[7]> Syntactically only
<geri> so char[1] occupies char width + pointer width, no?
<abu[7]> No
<abu[7]> On the hardware they are the same
<abu[7]> on the stack
<abu[7]> or heap
<abu[7]> It is just syntax
<geri> like compiler will optimize the pointer away if its a 1 char wide array?
<geri> cause if its char[2] you do need the pointer
<abu[7]> There is nothing to optimize
<abu[7]> It is an address
<abu[7]> "char c;" and "char b[1];" both allocate one byte
<abu[7]> (plus padding)
<abu[7]> &c is a pointer
<abu[7]> = an address
<abu[7]> b is a pointer already
<abu[7]> Just syntax
<geri> if b is already a pointer, shouldn't it take 8 bytes on 64bit machines?
<abu[7]> It is not stored anywhere
<abu[7]> because the address is known
<abu[7]> At link time
<abu[7]> &c is the "name" of a memory location
<geri> okay
<geri> now its a bit clearer
<abu[7]> ☺
rob_w has joined #picolisp
<geri> my emacs theme is mostly black and white except comments and strings
<geri> so adjusting it for vip is not all that hard :D
<abu[7]> Cool 😎
<geri> i just think grayscale looks very elegant
<abu[7]> T
<abu[7]> I dislike verbose coloring
<geri> my strings are cyan though for easier visual parsing
<geri> yeah, overly verbose is bad
<geri> or too many colors
<abu[7]> T
<geri> but no coloring at all is eh
<abu[7]> The underlining is a left over from older pil versions
<geri> pre-color versions? :D
<abu[7]> They had "transient symbol markup"
<abu[7]> *Tsm
<abu[7]> in the REPL
<geri> ah
<geri> removed cause extra complexity?
<abu[7]> and in .vimrc
<abu[7]> Yeah
<geri> what do you think about "simplicity and efficiency often dont go hand in hand"?
<abu[7]> I don't think so
<abu[7]> They are not strongly related
<abu[7]> No
<abu[7]> They are often related, but not necessarily
<geri> yeah like
<geri> you didnt need to implement vectors/arrays for pil, at a cost of vip costing quite a bit more to run
<geri> i find situations like this something that happens more often than id like
<abu[7]> Agreed
<abu[7]> Complexity only if *really* needed
<abu[7]> No premature optimizations!
<abu[7]> !
<geri> ah yes, the root of all evil!
<abu[7]> And don't fix something if it is not broken ;)
<geri> but its fun :(
<abu[7]> True
<abu[7]> But I regret it then
<geri> gotta unlearn feeling regret for trying to improve
<tankf33der> (co 'a (co 'a))
<tankf33der> crashes
<abu[7]> I see
<abu[7]> Not sure if this is ok
<abu[7]> "coroutine cannot resume itself", applies also to stopping
<tankf33der> crash is not stop, right ?
<abu[7]> How do you mean that?
<tankf33der> i am expecting no crash here
<tankf33der> just stop
<abu[7]> Stopping itself should not crash, yes, but give an error
<abu[7]> I'll add a check
<tankf33der> good, thanks.
<abu[7]> Thanks for finding
nat-418 has quit [*.net *.split]
teddydd has quit [*.net *.split]
nat-418 has joined #picolisp
teddydd has joined #picolisp
<abu[7]> Done
<tankf33der> works now, thanks.
<abu[7]> Great
<abu[7]> fuxoft_mobile, I wonder if you need coroutines at all, or if a simple 'job' would suffice
<abu[7]> Typically via 'curry'
<abu[7]> This would automatically clean up
<abu[7]> Coroutines in Pil are independent execution contexts
<abu[7]> They should not depend on their originator
fuxoft has joined #picolisp
<fuxoft> abu[7] probably not. One of the typical simple cases for my coroutine is e.g.: (co 'envelope (for N 100000 (yield N)) (loop (yield 100000)))
<abu[7]> Yeah, could be a simple closure
<fuxoft> You mean using (job)?
<abu[7]> Coroutines are more fun though
<abu[7]> Yes
<abu[7]> 'curry' is a frontend to 'job'
<abu[7]> Each context could maintain a set of generaton functions
<abu[7]> No need to stop anything
<fuxoft> You mean like (job '((N . 0)) (inc 'N) (if (< N 100000) N 100000)) ...?
<abu[7]> T
<abu[7]> A coroutine is more flexible
<abu[7]> yield at any (nested) place
<fuxoft> Good idea, I will think abou thits. Until now I didn't know about (job), I am total beginner.
<abu[7]> Let me think of an example
<fuxoft> I've read everything about transient symbols that's in the documentation but I am still struggling with understanding when to use them instead of normal symbols. E.g. some functions in the PL libraries are declared as (de foo (X "Y") .... Why is the second one a transient symbol and the first one normal symbol? Can I see some really simple example
<fuxoft> where this matters?
<fuxoft> (I think I understand (job) now, I've read the docs 5 minutes ago. I just didn't know that it existed before.)
<abu[7]> To avoid conflicts
<abu[7]> An implicit local namespace
<abu[7]> file-local
<fuxoft> Aren't all function parameters local to the function?
<abu[7]> It is like static identifiers in C
<abu[7]> The *bindings* are local
<fuxoft> Yeah, I've read that and I don't know what that is. I went from Z80 assembler straight to high-level scripts, skipping C :)
<abu[7]> *Symbols* are global
<abu[7]> No problem
<abu[7]> It is easy :)
<abu[7]> A symbol is a physically existing thing
<abu[7]> and it has a value
<abu[7]> The value is "bound" to it
<abu[7]> and may change
<fuxoft> I think I understand all that.
<fuxoft> This is true for all symbols, transient or not
<abu[7]> Exactly
<tankf33der> this are a lot of coroutines patterns
<fuxoft> So I am still not sure in which situation (de foo (X) ... would be a problem and (de foo ("X") ... solves this problem
<abu[7]> It is explained a bit in @doc/faq.html#problems
<fuxoft> Oh great, I was looking for something exactly like that
<abu[7]> You use transients, or now better (private)
msavoritias has joined #picolisp
<abu[7]> Old pils did not have namespaces
<fuxoft> So... If my program is in one big file for some reason, using transients as function parameters does not help?
<abu[7]> You can separate areas in the file with '===='
<abu[7]> Or (private) several times
<fuxoft> OK, that's something to study further, thank you
<abu[7]> You could grep for (private) in the distro to get an idea
<fuxoft> Yeah. It's great that I can study the PicoLisp libraries sources...
<abu[7]> @lib/simul.l is a good example for namespaces
<abu[7]> or @lib/svg.l
<fuxoft> (y)
fuxoft has quit [Quit: Client closed]
<abu[7]> fuxoft_mobile, here 'curry' as a frontend to 'job': http://pb1n.de/?6729e5
<abu[7]> Oh, I just see I forgot to pass a max value
<abu[7]> Should be like (def 'f (mkInc 0 999999))
<abu[7]> But you get the idea
<tankf33der> abu[7]: does my game illegal?
<tankf33der> or bug
<abu[7]> Hmm, interesting :)
<abu[7]> T is the main routine
<abu[7]> : (co T) gives "Can't stop main routine"
<abu[7]> But there is no check for starting it
<abu[7]> (yield 1 T) works correct
<abu[7]> ie. either "No coroutines" or goes to main
<abu[7]> Not sure what is correct
<tankf33der> find this was tricky too
<abu[7]> I think the 'T' in your code is not the problem
<beneroth_> thanks for the deep testing, tankf33der :)
<abu[7]> I wonder what exactly the bug is
<beneroth_> fuxoft_mobile, the transient symbols used for parameters in function definitions are usually to prevent name clashes (of the parameter) when the function is an FEXPR (a function which evaluates its arguments during run-time, and some of its argument may be code that has binding to other symbols in a higher/outer scope which then is evaluated within the FEXPR function)
<abu[7]> The steps by themselves are OK. Perhaps the handling *inside* the error handler?
<abu[7]> Because if an error is happening is inside a co it is not cleaned up yet to allow inspection of the context
fuxoft has joined #picolisp
<fuxoft> Is there a special meaning when you name the function variable (de foo (@Max)... instead of just (de foo (Max)... ?
<geri> that youll use it with fill or macro or something like that?
<geri> idk if its legal as per rules, but i do it like that
<fuxoft> I mean specifically in abu's example at 10:15
<beneroth_> it's complete legal.
<abu[7]> Right, it is for 'fill' used by 'curry'
<beneroth_> see (pat?) and (fill)
<fuxoft> Yeah, but it has no special meaning in this specific cast?
<fuxoft> case
<abu[7]> It is significant here
<geri> it makes it fill-able without extra boilerplate
<abu[7]> @Var is *replaced*
<abu[7]> other vars go into 'job'
<beneroth_> it is not the symbol itself that is special, but the code doing things with it using (pat?) to handle them differently than normal symbols
<beneroth_> see also (match)
<fuxoft> I see neither (pat?) or (fill) in that example
<abu[7]> Right
<geri> fill is in curry
<abu[7]> T
<beneroth_> fuxoft, oh I meant go look in the reference https://software-lab.de/doc/index.html
<geri> (vi 'curry)
<beneroth_> or (doc 'pat?) or (help 'pat?)
<fuxoft> Oh yeah, now I understand.
<geri> good)
<fuxoft> But just doing eg (de sum (@X @Y) (+ @X @X)) has no special meaning?
<geri> ye
<abu[7]> Corre6t
<geri> not good style though
<abu[7]> @ is often special
<geri> is "@X" expanded the same way as @X abu[7]
<abu[7]> T
<abu[7]> a pat
rob_w has quit [Quit: Leaving]
<abu[7]> ref.html pat - Pattern: A symbol whose name starts with an at-mark "@"
<fuxoft> I've seen the chapter on @ being special but I was not aware of it being used like this in the function definition, hence my confusion
<abu[7]> It is special most importantly in 'match' and 'fill'
<abu[7]> So in all functions that call them
<abu[7]> macro curry test
<abu[7]> : (who 'fill)
<abu[7]> : (who 'fill)
<abu[7]> -> (curry redef macro "pipeN" datStr pico)
<abu[7]> : (who 'match)
<abu[7]> -> ("patMatch" "vipDat" "_match" docs what test patch strDat expDat pico)
<geri> if you absolutely had to add arrays to picolisp, how would you do it abu[7]
<abu[7]> C calls
<abu[7]> integers only
<geri> like allocate arrays in C level and dont add it to pil itself?
<abu[7]> 'buf'
<abu[7]> Adding to the base lang is a complete redenign
<abu[7]> Starting from the pointen tag bits
<geri> so technically, if youre willing enough, picolisp does have arrays?
<geri> :D
<abu[7]> I won't
<geri> not you
<geri> you as in user
<abu[7]> No bits free first of all
<abu[7]> @doc/structures
<geri> i meant the C level arrays
<abu[7]> Ah, ok
<geri> is it accurate in that context?
<abu[7]> accurate?
<geri> <geri> so technically, if youre willing enough, picolisp does have arrays?
<abu[7]> You mean already now?
<geri> yes
<abu[7]> I would not say, the support is too weak
<abu[7]> I see 'enum' as a better way
<abu[7]> eg. for vip
msavoritias has quit [Ping timeout: 264 seconds]
<geri> im wondering exactly cause of vip
<geri> i guess youd need tons of wrappers to actually enable proper support via C
<abu[7]> If the edited file gets large, performance would be better
<abu[7]> No, I mean via 'enum'
<geri> what's used right now?
<geri> in vip
<abu[7]> instead of lists of lists
<geri> ah
<geri> list of lists for simplicity too?
<abu[7]> Yes
<abu[7]> And 'enum' is newer
<geri> fair
<geri> ah, also that
<abu[7]> Perhaps enum with lines as lists
<abu[7]> Still, current is easiest
<abu[7]> List processing functions
<abu[7]> 'enum' is a very cool datastructure
<abu[7]> Needs not so much more space than a list
<abu[7]> About 1.5 cells per element
<geri> from how are enum and idx different
<abu[7]> But has o(log n) access
<abu[7]> idx have their own key
<beneroth_> geri, what would be use of arrays? except for bitmaps in visual or audio context, where picolisp will anyway not work with it but just hand it over to other libraries?
<geri> beneroth_: vip being faster lol
<beneroth_> how so?
<geri> but again, clash of simplicity and efficiency
<geri> it takes way more memory, storing the buffer in lists
<beneroth_> I don't think that has to do with arrays. vip could be made faster in other ways.
<abu[7]> Accessing the millionth line
<beneroth_> geri, well ok, but you gain easier editing than in arrays.
<abu[7]> so the lines could be in an enum
<abu[7]> In practice most edited files are not soooo long
<geri> yeah
<geri> beneroth_: you win some you lose some
<beneroth_> vip is made for editing picolisp source code, not general text files, I'd assume
<abu[7]> T
<geri> abu uses it as system editor
<beneroth_> geri, there is always a trade-off. if someone tells you there is no trade-off with their stuff, they're either stupid or scamming you
<abu[7]> Log files may be long
<geri> at least you can grep through them
<abu[7]> T
<geri> or less
<abu[7]> Most logs cycle or are archived in smaller chunks
beneroth_ has quit [Quit: Leaving]
beneroth has joined #picolisp
<abu[7]> I have no problem currently
<geri> beneroth_: or sometimes there isnt even a compatition, one side is just so pathetic lol
<abu[7]> and I don't hesitate to call Vim
<geri> considering enums and idx trees are easily available in picolisp, id say its more of a tradeoff than the latter
<geri> (im still confused how to use either, waiting for a wiki page :))
<abu[7]> Good point
<beneroth> enum is balanced and idx is not necessary so (unless created with (balance)) ?
<abu[7]> Yes
<beneroth> I haven't used enum yet, it is rather new xD
<abu[7]> It is useful only for small integer indexes
<beneroth> ah, keys is also number
<beneroth> ok
<abu[7]> T
<geri> like fixnums?
<beneroth> no
<beneroth> like the use case for enums in other languages
<beneroth> I think
<abu[7]> Like array indexes
<geri> fixnum is basically the opposite of bignum
<abu[7]> Not really opposite
<beneroth> in most cases where other languages have enums (you want a symbolic name to program with but store it as numeric because the language cannot use symbols) you would use symbols directly in Lisps
<abu[7]> You can have big fixnums
<geri> 🤔
<abu[7]> Ah, thats anothes enum
<geri> ^
<geri> another*
<abu[7]> T
<beneroth> fixnum is the opposite of float/decimal numbers, no
<beneroth> ?
<beneroth> nothing to do with how big
<geri> fixnum is whatever fits without extra pointers
<beneroth> ah okay
<beneroth> so in picolisp a matter of cell size
<abu[7]> In enum the bits of the key determine how the tres is navigated
<geri> uno, dos!
<abu[7]> Pil fixnums can be arbitrarily big
<abu[7]> no limit in size and precision
<geri> thats bignums
<abu[7]> eg. one million digits after th point
<geri> if it needs extra consing its a bignum, if it doesnt its a fixnum
<abu[7]> No
<abu[7]> if it doesnt its a short num
<geri> ._.
<beneroth> there is no explicit consing for the programmer
<abu[7]> a 'cnt'
<geri> it happens in the background beneroth
<beneroth> but that is not limited to numbers
<beneroth> is there also a term fixstring then?
<geri> in pil probably lol
<geri> was it 17 char limit?
<beneroth> I didn't know fixnum as a term. only fixpoint calculation, which is opposite of float calculating.
<geri> before it needs a next chain to contain the rest of the symbol name
<beneroth> technically symbol names are stored same as numbers
<abu[7]> beneroth right
<geri> well, it might just be cl lingo
<abu[7]> "only fixpoint calculation" I mean
<geri> bignums are right though
<beneroth> geri, cl and ruby lingo probably
<geri> never used ruby
<geri> Fixnum. Holds Integer values that can be represented in a native machine word (minus 1 bit).
<geri> that sounds about right
<beneroth> never used CL. I went looking for a lisp, learned that CL has multiple compilers and platform-specific libraries, me was like "no thanks, had enough of that in C/C++"
<geri> most people just use sbcl
<geri> platform-specific libraries wont ever go away
<beneroth> most people is not a measure for quality. see php.
<geri> true
<geri> but sbcl is the most performant cl compiler in general
<beneroth> no platform problems with picolisp. either it runs (posix/unix) or it doesn't at all (windows) xD
<abu[7]> geri "Holds Integer values that can be represented in a native machine word (minus 1 bit)" is CL terminology?
<geri> im not sure if its a good thing, but at least its simple
<beneroth> geri, yeah, but picolispers think compiling is wrong for many cases :P
<beneroth> abu[7], basically it just means that "fixnums are values fitting into a single cell"
<abu[7]> T
<geri> beneroth: wrong
<abu[7]> So a 'cnt' in Pil
<geri> compiling isnt wrong
<beneroth> not very useful terminology, only matters for implementation details
<geri> compiling lisp is
<geri> :)
<beneroth> I said "most cases"
<beneroth> neither picolisp nor lisp is the best thing for everything
<geri> fair, mind filtered the second part out
<beneroth> people making claims their language is best for everything are, again, either dumb or scammers :-)
<geri> yeah, i won't use cl for scripting cause its either very slow if not pre-compiled or 50 mb binary cause sbcl just dumps the whole core image into it
<beneroth> oh wow
<beneroth> picolisp is well suited for scripting
<geri> i know :)
<beneroth> the funniest I find the functional languages, claiming functional purity for the benefit of parallelization, but then nearly all so-claimed "functional" languages are really shit in parallelization
<geri> are they really?
<beneroth> as far as I know
<beneroth> erlang is still the king, afaik
<bjorkintosh> but erlang strives for concurrency. is it the same as parallelization?
<beneroth> it is not. concurrency is weaker form or parallelization.
<beneroth> afaik Erlang also works well in parallelization = putting the program parts on several CPUs or separate physical servers
<beneroth> but I'm not very familiar with it, so I could likely be totally wrong
<geri> thats +- what ive heard about erlang too
<geri> (elden ring language, obviously)
<beneroth> elden ring is done in erlang? or just a word play?
<geri> very bad wordplay
<beneroth> haha
<beneroth> they would have enough parallel stuff and the network parts which would lend itself to erlang, I'd guess
<beneroth> but they're probably not very good programmers, seeing the security holes they had in their network code and didn't manage to fix for Dark Souls 1
fuxoft36 has joined #picolisp
<geri> they've opened network for all the games on pc i think
fuxoft36 has quit [Client Quit]
<beneroth> I think Dark Souls 1 is still down and will not be opened again
<beneroth> the rest they fixed
<geri> on pc, both ptde and remastered seem to be up, at least if you believe the comments
<beneroth> most gamedev programmers are .. in a weird way at the same time very good programmers, making insane optimizations, but also very bad, often lacking fundamentals and re-inventing everything themselves in a bad way.
<beneroth> oh ok, good to know, I need to check out
<fuxoft> I am experimenting with floating point math and math.l and when I change *Scl after loading math.l, the math results suddenly become wrong. Am I not supposed to do that?
<geri> you gotta use (scl ...)
<geri> not sure if itll fix your problem though
<geri> beneroth: they sound like me, except i cant do optimizations either)
<beneroth> the Guild Wars 1 programmers were told to use a (SQL) database for their MMO backend. They used a database, but they never really understood it. So they ended up saving player inventories in their own binary bitmap formatin blob fields in the database.
<abu[7]> fuxoft, yes, needs a reload of math.l
<fuxoft> Reload = just doing (load '@lib/math.l") again?
<abu[7]> T
<beneroth> which had a lot of impact in the long run, as they couldn't implement ingame item action house (for trading items) because their data architecture just didn't lend itself to properly track ownership of items
<beneroth> geri, I'm sure you can do optimizations. all that is needed is time and discipline and REALLY thinking about WHAT EXACTLY is going on.
<fuxoft> FYI at https://software-lab.de/doc/ref.html#num-io it only uses (setq *Scl ...) and does not mention (scl ...)
<beneroth> programmers often just overlook the forest for the trees, optimizing the wrong meaningless parts, and at other places only able to see the forest (or the magic of another library or system) without understanding what is going on on the detail level.
<geri> I actually like optimizing like everything i can, but it's not usually on huge scale
<geri> like rewriting my bootstrap script from sh to picolisp + C calls boosted performance like 30 fold lol
<abu[7]> fuxoft, true
<geri> why is that? because it doesnt need to call as many processes
<abu[7]> probably
<beneroth> geri, oh wow, impressive
<abu[7]> must be
<geri> i try to avoid subshell calls when possible in my shell scripts because of that
<geri> its just hella slow
<geri> beneroth: if i use 'call to call "test -d" it'd be like same speed as bash
<beneroth> I feel bad when I do such calls in pil because it is just the handy quick dirty solution in many cases
<beneroth> the CLI wrapping in picolisp is really nice to work with
<beneroth> I also use (pipe) for long running wrappings, than it's quite optimal
<geri> very quick, very dirty
<bjorkintosh> no no. 'results oriented'.
<beneroth> only somewhat dirty overhead is the text interface instead of pure data
<geri> :) bjorkintosh
<beneroth> bjorkintosh, hehe, yeah.
<beneroth> in the end it's the only thing that counts - the consequences
<beneroth> or to say it differently: only the side effects count (just to make the FP purists angry)
<geri> lmao
<geri> i dont like being forced into any paradigms
<geri> kinda wanna write something purely functional just to see if i can get it to be fast with parallelism though
<beneroth> they're useful handrails for people who are not skilled and disciplined enough to handle freedom
<beneroth> geri, do it and tell me about it :)
<geri> if i ever get around to it, sure
<geri> )
* beneroth gives geri a round
<geri> ahaha
<geri> lovely puns
<geri> i love all the higher order functions and an occasional class sometimes, but being forced into stuff is ew
<beneroth> yeah same
<geri> (looking at you, java & clojure)
<geri> funny that both are jvm languages
<geri> jvm makes language designers into tyrants
<beneroth> I do C# for clients. Pisses me off every time, how much it restricts me and demands highest verbosity. (e.g. editing a list while iterating over it is forbidden, and doing some more than just basic abstractions in OOP ends up half of the code being bloated casting)
<geri> never got into C# cause got into programming after becoming a linux main
<beneroth> well I see the jvm/java and C# benefits for bigcorps to be able to work with masses of bad programmers and still have some minimum productivity. but it also introduces a maximum productivity for good programmers.
<beneroth> and I consider working with masses of programmers on the same project being a big fault anyway
<geri> > but it also introduces a maximum productivity for good programmers.
<geri> >
<geri> ?
<geri> if it restricts you it reduces your productivity
<beneroth> C# is same as Java. They made a few mistakes less than Java, and recently they mixed in a lot of other stuff (even lambda expressions). but the result now is that it is no longer a single language but a mix of dialects you cannot write without a autocompleting editor.
<beneroth> geri, yep
<geri> ah you meant like
<geri> it introduces a productivity cap for good programmers
<beneroth> yes!
<beneroth> my english is a bit of a mess sometimes. productivity cap I meant, exactly.
<geri> its okay, i use it every day and still, sometimes my brain goes into a meltdown and i get the most hardcore accent imaginable
<geri> its somewhat funny
<geri> and somewhat painful
<beneroth> my vocabulary comes largely from reading, so my pronunciations are sometimes quite off haha
<geri> back it school i used to think new is pronounced as nev
<geri> painful...
<geri> reading + listening is the best
<beneroth> T
<bjorkintosh> 'nev'. the more you know.
<geri> ill tell you more, imo most of the time, understanding the language is way more important than speaking it
<geri> nev!
<bjorkintosh> and 'jan' is pronounced 'dzan' not 'yan' right?
<geri> that's just ян
<geri> :)
<bjorkintosh> haha.
<beneroth> geri, T
<geri> except in japanese it would indeed be more like dzhan
<abu[7]> じゃん ☺
<geri> はい!
<geri> そうだよねえ!!
<geri> (my japanese is very bad)
<abu[7]> 👍
<geri> need to keep on working on my vocab
<abu[7]> I forgot all
<geri> i doubt its *that* bad
<abu[7]> It is
<geri> 🤧
<abu[7]> Did not use for 30 years
<geri> remembering shouldn't be all that difficult
<geri> if you have time for it ofc
<abu[7]> I can talk, but not write
<geri> i kinda doubt ill ever learn writing japanese by hand haha
<geri> can you read?
<geri> and hear
<geri> /listen to
<abu[7]> Reading also got bad
<geri> aw
<geri> i mean, its hard, lets be real
<abu[7]> T
<abu[7]> So many dialects and levels of talking
<abu[7]> men vs. women
<geri> 2k+ characters w/ multiple readings, 3 writing systems and very little words like in native language
<geri> keigo and casual too
msavoritias has joined #picolisp
geri has quit [Remote host closed the connection]
geri has joined #picolisp
<geri> gotta go for now, enjoy
<geri> (or for today)
<abu[7]> ☺/
<geri> o7
geri has quit [Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.3)]
pablo_escoberg has joined #picolisp
fuxoft has quit [Ping timeout: 250 seconds]
msavoritias has quit [Ping timeout: 256 seconds]
pablo_escoberg has quit [Quit: Client closed]
fuxoft has joined #picolisp
<fuxoft> When I want to divide two float numbers, do I have to do (*/ 1.0 X Y) ?
<abu[7]> Correct
<tankf33der> Can not find my tutorial
<tankf33der> Found :)
<abu[7]> 👍
fuxoft has quit [Ping timeout: 250 seconds]
aw- has quit [Ping timeout: 268 seconds]
aw- has joined #picolisp