00:06:41 -!- oerjan has joined.
00:07:12 -!- craigo[m] has joined.
00:22:59 -!- moony has changed nick to moon.
00:23:16 -!- moon has changed nick to bi.
00:34:48 <oerjan> <imode> maybe you'd need to do forward two, backward 3? <-- i think any such scheme with bounded jump length is going to have trouble handling arbitrarily nested loops because you cannot fit all the necessary paths through a bounded instruction region
00:35:20 <imode> yeahh.. that's probably why you have "arbitrary" relative jump offsets in brainflop.
00:35:40 <oerjan> otoh you don't need arbitrarily deep nesting for turing completeness.
00:35:54 -!- ais523 has joined.
00:36:22 <oerjan> ais523 and i got it down to just two sets of brackets
00:36:42 <ais523> this was just coincidence, I wasn't even logreading this time
00:37:02 <ais523> I came here to complain about memory allocation and freeing
00:37:34 <ais523> specifically, I realised that free() is often called in a loopish thing to free a recursive data structure, but a general-purpose free() is inherently really slow
00:38:09 <ais523> because it requires a minimum of two atomic operations (either taking and releasing a lock, or for a lock-free algorithm), and atomic operations are inherently much slower than just about any other CPU instruction
00:38:37 <imode> oerjan: two sets of brackets? what were the semantics of each?
00:38:48 <imode> I'd like to get mine down that far.
00:38:56 <oerjan> *two pairs of brackets
00:38:56 -!- SpikeHeron has quit (Quit: WeeChat 3.3).
00:39:08 <oerjan> as in, the whole program needs just two [ and two ]
00:40:04 <imode> so you're using BF's instruction set, but any program only needs two of each bracket type.
00:40:08 <ais523> this basically means that there's not much point in implementing a malloc algorithm; taking and releasing the lock is going to be slower than the rest of the algorithm put together, if it's even remotely efficient
00:40:14 <imode> I assume you simulate stuff using a register machine?
00:40:20 <imode> or a simulated register machine.
00:40:31 <ais523> it's a counter machine (the construction we have requires unbounded cells)
00:41:05 <oerjan> specifically, ais523's Waterfall Model
00:41:09 <imode> wonder if that construction holds for boolfuck or something.
00:41:32 -!- dutch has joined.
00:41:34 -!- ais523 has quit (Quit: sorry about my connection).
00:41:49 -!- ais523 has joined.
00:42:04 <imode> probably not because the "size" is just a bit.
00:42:18 <imode> I'm trying to whittle 01<> down to just four instructions.
00:42:41 <imode> https://hastebin.com/raw/ilebolucoy
00:43:55 <imode> so far I've worked out how to eliminate `>`.
00:44:37 <b_jonas> ais523: I could argue the opposite. since you usually call free many times in a loop, most of the time you will be calling free when you already have the lock, so locking and unlocking will be fast
00:44:44 <oerjan> i'd imagine you'd need to combine them somehow
00:44:56 <oerjan> like, drop 1 by having some other command do a NOT
00:45:38 <b_jonas> but you're also true that if you want to do a lot of memory allocations, you should try to write your program so that it needn't call a general-purpose malloc and free a lot
00:45:44 <ais523> b_jonas: that's not how actual implementations work, though
00:46:05 <ais523> they take and drop the lock for each individual free-ing, because free is typically in a shared library and compilers don't optimise across shared library boundaries
00:46:48 <nakilon> 19:09:20 <Corbin> Your nick made me recall "WebTV", a TV/computer hybrid product from the late 90s.
00:46:50 <ais523> it's possible that taking and dropping the same lock repeatedly is fast-ish if no other CPU is trying to touch the memory where the lock is held, I need to check the numbers for that
00:46:54 <nakilon> sounds like something that didn't exist here
00:47:02 <imode> guess I'm trying to find a substitution for each command that doesn't alter program structure, and can be "dropped in".
00:47:11 <imode> like similar brainfuck-to-X mappings.
00:47:47 <b_jonas> ais523: yes, but the CPU can do the lock very quickly if your core already has exclusive ownership of the cache line in which your lock is, and that should be the case if you just called free and it locked and unlocked the lock
00:48:19 <imode> maybe have `]` enqueue a 0 or something.
00:48:23 <nakilon> I just realised that I know a huge amount of the first digits of Pi
00:48:41 <b_jonas> don't cpus do that very fast, in the expense of being slower in the uncommon case when multiple cores want to write to the same cache line?
00:48:45 <esolangs> [[Pokecontest]] https://esolangs.org/w/index.php?diff=88351&oldid=88335 * Maikeru51 * (+173) Yeah added definitions and fixed some of the formatting.
00:48:48 <ais523> actually these numbers don't look *that* bad, Ice Lake can lock 8 bytes per 23 processor cycles or 16 bytes per 32 processor cycles, if the thing being locked is in memory already
00:48:49 <nakilon> just don't remember the exact order
00:49:04 <ais523> err, in exclusive cache
00:49:36 <ais523> for Zen 3 it's 10 and 15
00:49:46 <ais523> (these are the most recent numbers I could find for Intel and AMD respectively)
00:50:21 <ais523> still not great, but at least not the hundreds or thousands of cycles I was fearing
00:51:27 <imode> I also know quite a few digits of pi. just don't know the order.
00:52:00 <imode> 8412398419328412394129356123 <-- that's in there somewhere.
00:52:25 <nakilon> oerjan I know the first million of them
00:52:32 <oerjan> imode: probably. it's not been proved. (unless you copied that from an actual digit list)
00:53:07 <oerjan> nakilon: the _exact_ first million? (even out of order)
00:53:34 <b_jonas> ais523: are those cycle numbers for every time you set the lock, or only once when you change the cache line from owned for writing to owned for exclusive locking, after which exclusive locking the same lock is free for as long the page is in the cache and another CPU doesn't try to access it?
00:53:36 <ais523> it wouldn't be too hard to memorise the frequencies of the digits 0-9 within the first million digits of pi
00:53:40 <imode> 84123984 is there though.
00:53:54 <ais523> b_jonas: these are for repeated locked accesses to the same memory location, when no other CPU is reading or writing it
00:54:02 <ais523> like, LOCK CMPXCHG16B called in a loop
00:54:16 <ais523> i.e. that's how long it takes in the best ase
00:54:53 <b_jonas> that's probably not a bottleneck for a general purpose impl of free though
00:55:06 <velik> x86_64 -- type of instruction set which is a 64-bit version of the x86 instruction set https://en.wikipedia.org/wiki/X86-64
00:55:16 <oerjan> ais523: true, i would just be surprised if nakilon actually had
00:55:48 <ais523> whereas a simple MOV to/from L1 is, on most modern processors, typically 3 cycles latency (and 1 cycle for 1 execution unit in terms of throughput)
00:56:19 <oerjan> imode: i wonder what's the shortest digit sequence they haven't found yet
00:56:32 <oerjan> (probably several tied)
00:56:48 <ais523> nakilon: CMPXCHG16B works on two consecutive 64-bit values in memory; you give expected and new values for each of them, if they have the expected value already then they're replaced with the new values, if they don't then nothing happens, either way it returns the old values
00:57:21 <ais523> with the LOCK prefix, this is atomic with respect to all CPU cores, and it's a universal building block for building both locks and lock-free algorithms
00:57:38 <ais523> (locks don't generally need the full power – a single 64-bit value is enough – but lock-free algorithms generally do)
00:58:49 <b_jonas> I believe only efficient lock-free algorithms need that, you can build inefficient but correct lock-free algorithms without the two-word thing
00:59:20 <oerjan> https://oeis.org/A228988 seems relevant
01:00:01 <imode> eh, `]` pushing a zero means that you could never actually erase a 1 bit, it just nots everything at worst and inflates the queue at best.
01:00:04 <nakilon> you read the jokes too seriously
01:00:05 <oerjan> (found through https://www.reddit.com/r/math/comments/co25xs/smallest_number_not_found_in_pi/)
01:00:08 <nakilon> but http://www.eveandersson.com/pi/precalculated-frequencies
01:00:37 <oerjan> nakilon: that's the best way to read them hth
01:00:53 <ais523> b_jonas: I'm not sure, I was trying to solve a specific lock-free problem in my head a while back and couldn't do without a double-compare-and-swap
01:01:09 <b_jonas> ok, I could be wrong about that then
01:01:18 <b_jonas> I don't usually care much about lock-free stuff
01:01:46 <b_jonas> and try to do multithreading at the largest scale possible to avoid all the synchronization
01:02:19 <ais523> I like lock-free algorithms from a usability point of view – lock-based algorithms don't work from signal handlers
01:02:33 <ais523> and this was an actual problem for NH4 once (when trying to write the SIGHUP handler)
01:03:20 <ais523> mallocs don't work from signal handlers in practice, but there's no inherent reason for that (in particular, the lock-free implementation of malloc doesn't seem substantially less efficient than the lock-based algorithm)
01:04:43 <b_jonas> but then I definitely almost never want signal handler reentrancy
01:04:59 <ais523> basically nothing works from signal handlers :-(
01:05:06 <ais523> but I don't see any reason not to make that case work if you can
01:09:08 <ais523> one interesting thing I realised while working on my lock-free malloc is that the generic double-compare-and-swap lock-free algorithm actually gives you the potential to get an rwlock-equivalent for free (it isn't any harder to implement or slower to run than an exclusive lock)
01:12:41 -!- bi has changed nick to moony.
01:14:02 -!- ais523 has quit (Remote host closed the connection).
01:18:58 <nakilon> what does the "-- Troy Dana" dude say on that Pi digits page, wtf
01:20:38 <nakilon> that's not how you convert the base
01:23:02 <nakilon> oh he replies to "-- Steve Baldamus"
01:27:21 <esolangs> [[Spellcaster]] N https://esolangs.org/w/index.php?oldid=88352 * Maikeru51 * (+732) Basically just started making my first turning tarpit!
01:40:21 <esolangs> [[Special:Log/upload]] upload * Threesodas * uploaded "[[File:Sufferung.png]]"
01:46:21 <oerjan> nakilon: i think "that's not how you convert the base
01:46:34 <oerjan> " is pretty much what e's saying
01:55:00 -!- Everything has joined.
02:15:03 <fizzie> Huh, weird. https://en.wikipedia.org/wiki/Vernier_acuity
02:15:06 <fizzie> I thought those scales were just generally easier to use because you don't have to guesstimate where exactly in the gap the marker is. Didn't realize you actually get a suepr-resolution kind of a thingie going in there.
02:32:48 <keegan> trying to think of where else i've seen this effect used
03:18:51 <fizzie> Hmm, another Zach-y game. Wonder if it's any good. https://store.steampowered.com/app/1577620/The_Signal_State/
03:28:32 <nakilon> can't finish it because it's too complex, and the tasks somehow too artificial no matter how much dialogs they put in "cutscenes"
03:29:32 <nakilon> though each of their games had some own kind of boringness for me
03:29:45 <zzo38> I don't want game too many cutscenes (even without any cutscenes, can be OK)
03:30:02 <nakilon> opus magnum was satisfying but repetitive I guess
03:30:32 <nakilon> and Infinifactory was probably the one I got the farther through
03:31:41 <nakilon> 3d is appealing and t he plot made it interesting to see what's next
03:32:48 <nakilon> fizzie oh, that's not Zach?!
03:32:59 <nakilon> that's cool, need more different developers
03:44:37 -!- hendursaga has quit (Remote host closed the connection).
03:45:02 -!- hendursaga has joined.
04:49:03 -!- delta23 has quit (Quit: Leaving).
06:45:17 -!- tromp has joined.
06:47:47 -!- oerjan has quit (Quit: Nite).
07:14:16 -!- imode has quit (Ping timeout: 252 seconds).
07:17:45 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
07:27:31 -!- tromp has joined.
07:36:22 -!- Everything has quit (Quit: leaving).
08:01:43 -!- Sgeo has quit (Read error: Connection reset by peer).
08:32:51 -!- Koen has joined.
10:16:03 -!- riv has joined.
10:16:24 -!- river has quit (Quit: Leaving).
10:56:44 <esolangs> [[Special:Log/newusers]] create * Soyuzguy123! * New user account
10:59:03 <esolangs> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=88354&oldid=88350 * Soyuzguy123! * (+215) just adding some stuff
11:00:47 <esolangs> [[SRlang]] N https://esolangs.org/w/index.php?oldid=88355 * Soyuzguy123! * (+109) just holding the fort
11:25:00 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
11:32:15 <nakilon> TIL: Slavo-Serbia and New Serbia https://en.wikipedia.org/wiki/File:New_serbia_slavo_serbia.png
12:21:15 -!- arseniiv has joined.
12:45:46 -!- tromp has joined.
13:35:24 <esolangs> [[OREO]] M https://esolangs.org/w/index.php?diff=88356&oldid=88317 * Kaveh Yousefi * (-2) Altered the category tag Unimplemented to Implemented in the face of now existing implementations.
14:28:35 -!- spruit11 has quit (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.).
14:52:17 -!- Sgeo has joined.
15:33:32 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
15:43:41 <Corbin> I've been reading https://arxiv.org/abs/1904.10805 and pondering whether [[reversible]] can be improved. Has anybody else looked at this paper, "The Way of the Dagger"?
15:43:43 <velik> https://esolangs.org/wiki/Category:Reversible_computing
15:56:54 -!- tromp has joined.
16:02:57 <esolangs> [[User:InfiniteDonuts]] https://esolangs.org/w/index.php?diff=88357&oldid=72554 * InfiniteDonuts * (-273) update profile
16:12:06 <esolangs> [[Category talk:Total]] https://esolangs.org/w/index.php?diff=88358&oldid=73877 * Corbin * (+301) /* Refactoring with complexity classes */ new section
16:17:52 <Corbin> I want to add categories for descriptive logics (Cartesian closed, dagger compact, etc.; first-order, second-order, etc.) and physical machine architechtures (Harvard, Von Neumann, etc.)
16:18:18 <Corbin> But I would like guidance in the form of bright-line rules about when we should simply refer folks to WP or nLab.
16:29:31 -!- imode has joined.
16:48:27 <esolangs> [[User:Talbi]] N https://esolangs.org/w/index.php?oldid=88359 * Talbi * (+393) Created page with "== Hi! I'm Talbi == * You can find my GitHub [https://github.com/talbii here]. * You can find my Esolangs implementations [https://github.com/talbii/talbis-golfing-languages..."
17:05:44 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
17:11:50 <esolangs> [[Boom]] N https://esolangs.org/w/index.php?oldid=88360 * Talbi * (+461) Created page with "Boom is a very simple language, created by [[User:Talbi]]. It is so simple, in fact, that you have (probably) already written a valid program for Boom, which is: <pre> </pre>..."
17:12:28 <esolangs> [[User:Talbi]] https://esolangs.org/w/index.php?diff=88361&oldid=88359 * Talbi * (+44)
17:14:35 <esolangs> [[Kolmogorov]] M https://esolangs.org/w/index.php?diff=88362&oldid=88043 * Kaveh Yousefi * (+79) Amended an example for the output command by adding a backslash to the byte value and reformatted further examples.
17:18:20 -!- tromp has joined.
17:30:39 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
17:32:26 <Corbin> ...I'm going to go ahead and do the descriptive-logic stuff on nLab. I've unstubbed https://ncatlab.org/nlab/show/complexity+theory for starters.
17:46:17 -!- sprock has quit (Ping timeout: 264 seconds).
17:51:54 -!- tromp has joined.
17:56:42 -!- spruit11 has joined.
18:11:04 <esolangs> [[Kolmogorov]] M https://esolangs.org/w/index.php?diff=88363&oldid=88362 * Kaveh Yousefi * (+54) Reformatted the examples by aligning comments.
18:28:48 <esolangs> [[Special:Log/newusers]] create * Nanobot567 * New user account
18:41:31 -!- Koen has quit (Remote host closed the connection).
18:58:07 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88364&oldid=88354 * Larryrl * (+153)
19:53:24 -!- sprock has joined.
20:46:35 <esolangs> [[User:Larryrl]] N https://esolangs.org/w/index.php?oldid=88365 * Larryrl * (+2283) Created page with "'''6673846770''' is an esoteric programming language created by user Larryrl, in 2021, whose name is an ASCII representation of the word bitch, which has already been used for..."
20:48:57 <esolangs> [[User:Larryrl]] https://esolangs.org/w/index.php?diff=88366&oldid=88365 * Larryrl * (+0)
20:53:25 <esolangs> [[User:Larryrl]] https://esolangs.org/w/index.php?diff=88367&oldid=88366 * Larryrl * (+93)
20:58:10 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=88368&oldid=88297 * Larryrl * (+17)
20:59:13 <esolangs> [] N https://esolangs.org/w/index.php?oldid=88369 * Larryrl * (+2376) Created page with "'''6673846770''' is an esoteric programming language created by user Larryrl, in 2021, whose name is an ASCII representation of the word bitch, which has already been used for..."
20:59:46 <esolangs> [[User:Larryrl]] https://esolangs.org/w/index.php?diff=88370&oldid=88367 * Larryrl * (-2376) Blanked the page
21:04:18 <esolangs> [[User:Larryrl]] https://esolangs.org/w/index.php?diff=88371&oldid=88370 * Larryrl * (+183)
21:04:41 -!- arseniiv has quit (Ping timeout: 245 seconds).
21:08:34 <esolangs> [] https://esolangs.org/w/index.php?diff=88372&oldid=88369 * Larryrl * (+0)
21:12:44 -!- Lord_of_Life_ has joined.
21:13:58 -!- Lord_of_Life has quit (Ping timeout: 252 seconds).
21:15:31 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:28:26 -!- sprock has quit (Ping timeout: 246 seconds).
21:29:44 <esolangs> [] https://esolangs.org/w/index.php?diff=88373&oldid=88372 * Larryrl * (+9)
21:42:00 -!- delta23 has joined.
21:42:01 -!- delta23 has quit (Remote host closed the connection).
21:43:20 -!- dutch has quit (Quit: WeeChat 3.3).
22:25:58 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
23:00:03 -!- oerjan has joined.
23:29:22 -!- sprock has joined.