00:03:54 -!- mtm has quit (Ping timeout: 246 seconds). 00:06:01 -!- mtm has joined. 00:14:18 [[Onesharp]] https://esolangs.org/w/index.php?diff=151161&oldid=151160 * Jburns22 * (+1346) 00:14:32 [[Fungeball]] https://esolangs.org/w/index.php?diff=151162&oldid=151158 * Lykaina * (+57) adding link to python file 00:14:56 [[Onesharp]] M https://esolangs.org/w/index.php?diff=151163&oldid=151161 * Jburns22 * (-2) 00:15:21 [[Onesharp]] M https://esolangs.org/w/index.php?diff=151164&oldid=151163 * Jburns22 * (+6) 00:15:36 [[Onesharp]] https://esolangs.org/w/index.php?diff=151165&oldid=151164 * Jburns22 * (+0) 00:16:04 how does https://esolangs.org/wiki/Fungeball now? 00:16:35 [[Onesharp]] https://esolangs.org/w/index.php?diff=151166&oldid=151165 * Jburns22 * (+206) 00:16:45 I mean, how does https://esolangs.org/wiki/Fungeball look now? 00:19:34 [[Onesharp]] https://esolangs.org/w/index.php?diff=151167&oldid=151166 * Jburns22 * (-64) 00:21:13 [[Onesharp]] M https://esolangs.org/w/index.php?diff=151168&oldid=151167 * Jburns22 * (+3) 00:27:33 [[Snub]] M https://esolangs.org/w/index.php?diff=151169&oldid=151150 * Buckets * (+2) 01:22:56 -!- ais523 has joined. 01:23:24 [[Fungeball]] https://esolangs.org/w/index.php?diff=151170&oldid=151162 * Lykaina * (+658) Added some content, self-unmarking as stub. 01:24:43 I'll add more to https://esolangs.org/wiki/Fungeball in a little bit 01:26:33 [[User talk:Hsxiaobai]] https://esolangs.org/w/index.php?diff=151171&oldid=151138 * Hsxiaobai * (+85) 01:26:58 [[User talk:Hsxiaobai]] https://esolangs.org/w/index.php?diff=151172&oldid=151171 * Hsxiaobai * (+89) 01:31:13 [[User:Hsxiaobai/Sandbox]] N https://esolangs.org/w/index.php?oldid=151173 * Hsxiaobai * (+78) Created page with "'''Bold text''' ''Italic text'' [https://github.com A external link to Github]" 01:32:16 [[User:Hsxiaobai/Sandbox]] https://esolangs.org/w/index.php?diff=151174&oldid=151173 * Hsxiaobai * (+8) 01:34:04 [[User:Hsxiaobai/Sandbox]] https://esolangs.org/w/index.php?diff=151175&oldid=151174 * Hsxiaobai * (+86) 01:34:36 [[User:Hsxiaobai/Sandbox]] https://esolangs.org/w/index.php?diff=151176&oldid=151175 * Hsxiaobai * (-6) 01:36:09 [[User:Hsxiaobai/Sandbox]] https://esolangs.org/w/index.php?diff=151177&oldid=151176 * Hsxiaobai * (+6) 01:38:32 [[User:Hsxiaobai/Sandbox]] https://esolangs.org/w/index.php?diff=151178&oldid=151177 * Hsxiaobai * (+1) 01:46:17 [[Onesharp]] M https://esolangs.org/w/index.php?diff=151179&oldid=151168 * Jburns22 * (-4) 01:50:32 [[User talk:Hsxiaobai]] M https://esolangs.org/w/index.php?diff=151180&oldid=151172 * Aadenboy * (+1) add line break 01:57:21 [[Brainfffffuck]] N https://esolangs.org/w/index.php?oldid=151181 * Hsxiaobai * (+23) Created page with "[[:Category:Languages]]" 01:57:55 [[Brainfffffuck]] https://esolangs.org/w/index.php?diff=151182&oldid=151181 * Hsxiaobai * (-1) 01:59:45 -!- Artea has quit (Ping timeout: 246 seconds). 02:02:24 [[]] https://esolangs.org/w/index.php?diff=151183&oldid=151120 * None1 * (+20) /* Simple Example */ 02:04:22 -!- amby has quit (Quit: so long suckers! i rev up my motorcylce and create a huge cloud of smoke. when the cloud dissipates im lying completely dead on the pavement). 02:05:17 `learn The password of the month is 99.964% 02:05:24 Relearned 'password': The password of the month is 99.964% 02:06:42 [[User talk:Hsxiaobai]] https://esolangs.org/w/index.php?diff=151184&oldid=151180 * PrySigneToFry * (+1225) 02:10:55 [[Fungeball]] https://esolangs.org/w/index.php?diff=151185&oldid=151170 * Lykaina * (+540) /* Implementation Notes */ 02:12:30 found a bug in Fungeball 1.0b0 02:12:39 a big one 02:13:50 gotta patch it 02:20:47 hmm, Fungeball may be Turing-complete, even though Befunge-93 isn't 02:21:05 I think you can use the multiple threads' stacks as a way to store unlimited amount of data, and the playfield for them to communicate with each other 02:22:50 right, it's fairly easy to implement The Waterfall Model in that – you use one thread for each waterclock plus a separate control thread that tells the other threads when to run (by changing >< infinite loops into >> to release the thread) – it'd be TC even if there were no timing guarantees 02:23:35 Lykaina: you should probably clarify whether q and @ quit the entire program or the current thread 02:25:54 this needs a memory model 02:26:40 int-e: isn't it just shared playfield and thread-specific stacks? 02:28:31 [[Fungeball]] https://esolangs.org/w/index.php?diff=151186&oldid=151185 * Lykaina * (+31) Updated url 02:29:45 well you still need something like g and p of all threads being sequenceable and respecting their thread's order of operations (to start at the strong end) don't you 02:30:42 what's a "cycle" 02:33:08 I guess that means threads synchronize after every operation? 02:34:22 The thing is, I feel that I'm reading between the lines to try to figure that out so it's grossly underspecified. 02:34:57 [[Fungeball]] https://esolangs.org/w/index.php?diff=151187&oldid=151186 * Lykaina * (+225) /* Instructions */ Clarified q and @ 02:36:24 Not that it'll matter for TC-ness; you can make two threads manage a stack each to get a Turing machine. Or a counter, which IIUC is essentially what you're suggesting for TWM 02:38:20 right – using the stack as a stack gets you StackFlow rather than The Waterfall Model, but why bother with the excess complexity (except for performance reasons, I guess) 02:38:22 Lykaina: Anyway. Assuming lockstep execution, what do you want to happen if two threads write or write and read the same location? 02:38:55 I'm assuming a sequentially consistent model, due to the assumed lockstep execution 02:38:58 ais523: The only reason is working closer to traditional computability theory (two stacks = one tape) 02:39:14 well, two counters = four counters = two stacks = one tape 02:39:22 sure 02:39:32 assuming you have a state machine for control flow in both cases 02:39:41 getting rid of that state machine has been one of my main innovations in TCness proving 02:39:47 I don't care. When I first read what you wrote I thought you're creating an unbounded horde of threads. 02:40:00 ah, I see 02:40:01 Which would have severe issues. 02:40:16 that needs better synchronisation requirements for TCness, I thiink 02:41:02 like, if you have a gate that lets just one thread through, it's probably doable (although even then it seems nontrivial) 02:41:38 Anyway. I still feel that it's worth saying something about simultaneous writes and reads... having them crash the program (undefined behavior) is an option of course. 02:42:14 let's say we have a fungeoid with normal <>^v# IP movement commands, a thread split command, and a door that can be opened (maybe by hitting it from the side) that lets one thread through then closes 02:43:05 Yeah. I was looking for something that would synchronize threads in that way, and there's nothing. :) 02:43:07 [[Fungeball]] https://esolangs.org/w/index.php?diff=151188&oldid=151187 * Lykaina * (+261) /* Threading */ Added more about threading. 02:43:17 assuming randomly ordered sequentially consistent execution, and no stacks/values on the threads, I think that probably *isn't* enough but am not totally sure 02:43:43 int-e: fwiw, with threaded esolangs, I typically assume alternating lockstep execution (i.e. there is one command run from thread 0, then one command from thread 1, etc.) 02:43:50 which doesn't have any trouble with simultaneous actions 02:43:56 Lykaina: thanks. "in series" -- I assume the order is unspecified though? 02:44:06 correct 02:44:09 cool 02:48:39 each tread has it's own stack 02:48:45 *thread 02:49:39 Somehow I got that. I guess that's because that matches the standard notion of threads in mainstream OSs. 02:49:44 OK, so the model I just discussed is sub-TC because if you removed a thread mid-program-execution, the program would have no reliable way to determine that you had done that – any code that might check for that might instead have been running continuously without the removed thread running 02:50:37 they are not actual threads 02:50:38 thus, the program would have to be written in such a way that removing any subset of threads would cause it to enter an infinite loop, which effectively gives it only finite data storage 02:51:27 they are 'threads'. 02:51:28 it reminds me of unordered Fractran (and may in fact actually be equivalent) 02:53:45 OK, yes, this trivially compiles into unordered Fractran and thus can't be TC – and the compilation still works even if the threads can carry values, as long as they have only finite storage 02:55:07 (unordered Fractran is a bounded-storage machine – it can implement regular Fractran given some hardcoded limit on how high each factor can go, but can't handle unlimited storage) 02:55:43 stacks have no max length yet 02:56:13 Lykaina: So I'd like to suggest two minor clarifications. 1) say "with a copy of its parent's thread's stack" instead of "the same stack as its parent thread" to avoid possible confusion about sharing, and 2) add "in some unspecified order" after "in series". 02:56:59 int-e: doing that now 03:01:59 [[Fungeball]] https://esolangs.org/w/index.php?diff=151189&oldid=151188 * Lykaina * (+18) /* Implementation Notes */ made the edits to the threading section that were recommended to me. 03:03:49 do i need to add a full command list or let people reference the Befunge-93 list on the wiki? 03:04:06 I actually prefer the reference 03:04:42 so, the way it is now? 03:05:04 (The downside of making a copy is that it means you have to check for differences if you want to be really sure about semantics.) 03:05:04 -!- op_4 has quit (Remote host closed the connection). 03:05:34 -!- op_4 has joined. 03:06:16 Yeah the way it's now is good, in my opinion. 03:06:49 Maybe if the reference was three levels deep rather than one I'd change my mind? I don't know. 03:07:47 Hmm. 03:08:43 If you downloaded 1.0b0, you need to replace it with 1.0b1. 03:08:57 I just realized that you reference Funge-98 and I never followed *that* link. 03:09:51 -!- Sgeo has quit (Read error: Connection reset by peer). 03:10:10 (That's a me problem.) 03:12:09 Fungeball is backwards compatible with Befunge-93, but not forwards compatible with Funge-98. 03:12:57 Ugh, do the Funge-98 threads share a stack? This IP list description is tricky. 03:13:13 i don't know 03:17:27 "When a child IP is borne unto Funge-Space thus, its location, storage offset, and stack are all copied verbatim from the parent IP's." https://codeberg.org/catseye/Funge-98/src/branch/master/doc/funge98.markdown#user-content-concurrent-funge-98 03:17:50 So the wiki section is incomplete, good to know. 03:18:16 (Or maybe I'd have to cross-reference what exactly an IP is.) 03:20:25 [[Fungeball]] https://esolangs.org/w/index.php?diff=151190&oldid=151189 * Lykaina * (+244) /* Implementation Notes */ added notes about compatibility. 03:21:30 Fungeball doesn't have a storage offset 03:22:48 That's a Funge-98 thing 03:24:43 Lykaina: I got that :) 03:25:07 Each Fungeball thread has a stack, a location, a direction, and an indicator for whether String Mode is active. 03:25:16 At that point I was looking for clarification about what Funge-98 does with the stack. 03:25:30 Fungeball is clear about that. 03:25:41 (And different which is fine.) 03:27:52 Hmm, does it actually only copy the top stack of the stack stack (in Concurrent Funge-98)? 03:28:19 A sentence elsewhere in the spec: "In the case of Funge-98, however, /the stack/ refers to the topmost stack on the stack stack." 03:28:47 i couldn't understand the stack stack of Funge-98 03:31:19 fizzie: for sake of sanity I'd assume that this particular "stack" that's copied means the full stack stack. 03:34:11 That seems to be what cfunge does, duplicates the entire stack stack. 03:34:38 It's just that, the other part seems to be very... definition-y, for /the stack/. 03:34:50 -!- Artea has joined. 03:35:07 it would be interesting to know in which order these sections were added 03:36:36 (They could be independent additions? And then this interaction between them was missed... I don't know!) 03:37:41 I really don't know how many cooks Funge-98 had. 03:38:47 -!- Lykaina has quit (Read error: Connection reset by peer). 03:39:03 -!- Lykaina has joined. 03:39:04 I'm not a huge fan of how Funge-98 combines the stack stack operations with the storage offset ones. 03:40:23 I don't think fungot uses anything except the topmost stack. 03:40:24 fizzie: how do you know who taht was? is 03:41:18 Hmm I didn't fancy "taht" being common enough to make it into the dictionary. 03:41:48 `" 03:41:51 1/1:808) The reason it isn't more popular is because I wrote it today. \ 851) [on Diplomacy] man, that doesn't even mention greece at all [...] oh, this is about a game, not world war i. 03:43:15 -!- SGautam has quit (Quit: Connection closed for inactivity). 03:43:45 -!- Lykaina has quit (Ping timeout: 248 seconds). 03:46:02 -!- Lykaina has joined. 03:46:20 fsck 03:46:32 my router just died 03:47:22 connected via phone wifi 03:47:41 fun :/ 03:51:32 -!- Lykaina_ has joined. 03:52:11 -!- Lykaina has quit (Killed (NickServ (GHOST command used by Lykaina_))). 03:52:21 -!- Lykaina_ has changed nick to Lykaina. 03:56:06 ugh 04:04:03 Hm. So threads can't communicate after spawning? It would seem to be the same sort of non-determinism as when simulating automata, where each different thread is essentially a separate subinterpreter that doesn't know about the others. 04:04:24 there's shared storage 04:04:42 shared playfield 04:05:33 Sorry, forgive my extreme weakness with Befunge. I thought that the playfield was immutable? Are `g` and `p` the shared storage? Shared stack? 04:06:06 g and p access the playfield 04:07:20 Huh, okay. Well, then ais523's point about memory models is still relevant. Suppose that we have threads X and Y. During a single cycle, suppose X executes before Y; X does a write and then Y does a read. Does Y always read what X wrote? 04:07:36 IOW what does the playfield look like *during* a cycle? 04:07:41 Well, it's been clarified. 04:07:49 (And that wasn't ais523 :P) 04:08:29 Operations are sequentialized. 04:09:12 Oh, I misread, sorry. int-e, you're entirely correct. But even with sequential threading, it's not clear whether access to the playfield is uncached, and the current phrasing even warns against doing multiple `p` per cycle. 04:10:01 well that's just because you won't know which one of them "sticks" 04:10:03 * int-e shrugs 04:11:25 I believe they're not threads but 'threads' for a reason... the resulting execution is single-threaded and you don't need a memory model for that, or rather, there's a standard memory model for that where all writes are visible to future reads but not past ones.. 04:11:52 totally ordered memory or whatever the proper terminology is 04:12:42 Yeah, with LWW ("last write wins"). 04:13:51 also a read concurrent with writes will see the original value or one of the values written 04:13:57 but you don't know which 04:17:18 Hmm I didn't fancy "taht" being common enough to make it into the dictionary. ← my list of "all words that appear anywhere in Google Ngrams, sorted by frequency" has it at #494442, appearing 5584 times ("that" is at #12, appearing 3870260345 times) – note that the first entry is the empty string, so you might want to subtract 1 from the positions 04:18:00 three billion different uses of the word "that" is hard to comprehend, even though it is a very common word 04:19:45 that includes "flathat", doesn't it :) 04:19:57 (no I don't think that explains the high number) 04:20:12 int-e: no, compound words and superstrings have separate entries 04:20:31 although, "flathat" did not appear often enough to make the list 04:20:36 So it's not n-gram frequency? 04:20:55 it's 1-gram frequency 04:21:10 oh 04:21:14 I just downloaded all the 1gram data from Google Ngrams and added it together 04:21:33 sorry, I assumed letter-based, not word-based frequencies 04:21:51 that'd be ngraphs rater than ngrams, wouldn't it? 04:22:10 I don't know. 04:22:31 (It's a distinction I've never made) 04:23:26 My exposure to this is a bit weird... coming from Markov chains and data compression with no strong linguistic connection. 04:23:50 the reason I got hold of the data was to inform the creation of compression algorithms, especially for golfing languages 04:24:15 I realised that "every word in Google Ngrams apart from likely OCR errors" would make for a good dictionary to use for compressed strings 04:24:36 especially as it has things like foreign words in there, just at lower frequency 04:24:56 FWIW, Wikipedia says "An n-gram is a sequence of n adjacent symbols in particular order." Which matches my understanding... you have to agree on a set of symbols (and if you assume it you can get it wrong) 04:25:14 It even says that using whole words is rare ;-) 04:30:23 fair enough 04:30:34 probably on letters, both "n-gram" and "n-graph" are correct, in that case 04:32:40 -!- craigo has joined. 04:33:31 I believe I've never heard the term "n-graph" for this. 04:33:45 well, "digraph" and "trigraph" are commonly used 04:34:06 although, by following the usual rules, the general term would be "polygraph" which already means something else 04:34:22 a digraph is a directed graph... scnr 04:34:48 I mean the terminology makes sense 04:36:13 Hehehe, more confusion: https://www.sciencedirect.com/science/article/pii/0012365X88902282 05:15:25 -!- Guest25 has joined. 05:15:40 -!- Guest25 has quit (Client Quit). 05:29:58 night 05:30:10 -!- Lykaina has quit (Quit: Leaving). 05:37:19 -!- HackEso has quit (Ping timeout: 260 seconds). 05:37:31 -!- dbohdan has quit (Quit: ZNC 1.8.2+deb3.1 - https://znc.in). 05:37:32 -!- m5zs7k has quit (Quit: m5zs7k). 05:37:49 -!- dbohdan has joined. 05:38:05 -!- m5zs7k has joined. 05:55:09 -!- HackEso has joined. 05:56:25 -!- Lykaina has joined. 05:57:56 wifi clearly works again 05:58:14 morning? ;-) 05:59:11 (FWIW I'd probably play with the router too instead of going to bed.) 06:01:06 i made variants of both the befunge-93 and the fungeball interpreters that use print() and input() instead of opening file streams. 06:02:13 course, with those, execution pauses on input... 06:05:10 they were made for micropython, not cpython 06:06:25 i have them on my new Pico 2 W 06:41:34 -!- Sgeo has joined. 06:51:10 -!- Sgeo has quit (Read error: Connection reset by peer). 06:53:13 -!- Sgeo has joined. 07:03:11 -!- myname has quit (Quit: WeeChat 3.8). 07:05:33 -!- myname has joined. 07:14:43 [[Brainfffffuck]] https://esolangs.org/w/index.php?diff=151191&oldid=151182 * Hsxiaobai * (+939) 07:29:26 [[User:Tommyaweosme/bf self interpreter]] https://esolangs.org/w/index.php?diff=151192&oldid=151156 * I am islptng * (+101) 07:29:27 [[User:Tommyaweosme/bf self interpreter]] https://esolangs.org/w/index.php?diff=151193&oldid=151192 * I am islptng * (+0) Replaced content with "Obfuscating dbfi is definitely not a good idea! ~~~~" 07:31:31 [[25 bytes o:]] https://esolangs.org/w/index.php?diff=151194&oldid=143452 * Ractangle * (-2) /* python intepreter */ the interpreter doesn't like the unnecessary semicolons 07:32:11 [[25 bytes o:]] https://esolangs.org/w/index.php?diff=151195&oldid=151194 * Ractangle * (+2) /* python intepreter */ nvn 07:46:43 [[Language list]] https://esolangs.org/w/index.php?diff=151196&oldid=151149 * Hsxiaobai * (+20) /* B */ 09:04:29 [[Brainfffffuck]] https://esolangs.org/w/index.php?diff=151197&oldid=151191 * Hsxiaobai * (+27) 09:15:03 Lykaina: opening? the standard streams are open already, and python has its io wrappers open to them already by default. 09:20:10 ais523, int-e: I have considered the question of inter-thread memory model for multi-threaded Consumer Society. I concluded that I won't define it, whoever makes a multi-threading extension can figure it out, all I need to define is one very simple library function that allows me to write thread-safe code, where that library function is trivial to implement in single-threaded consumer society (it's 09:20:16 basically a no-op), and if someone implements multi-threaded Consumer Society then it won't be hard for them to implement this function as a built-in in their interpreter. 09:20:59 Whoever wants a multi-threaded Consumer Society will have to define the actual memory model, some inter-thread synchronization functions, and probably a way to create threads. 09:24:30 (You could have something low-level where you can't create threads, you have a fixed number of threads, and you just need a way to initialize them so they start executing your code.) 09:24:46 -!- chomwitt has joined. 09:25:23 But this is easier than this befunge-variant because Consumer Society is already Turing-complete in a single thread. 09:25:40 (In theory, obviously; a practical implementation will have a memory limit.) 09:29:01 I guess my view on memory limits is along the lines of "my interpreter is written in a theoretically TC language and would define a Turing-complete language if run in an implementation of the outside language that actually implemented that language correctly" 09:29:36 I struggled so much with whether or not to add -Mbigint to my Perl implementation of Three Star Programmer and the I/D machine 09:30:10 (the point being that the memory is formed entirely of addresses, so there's no reason to use a bigint because the total amount of memory used will overflow before the value in any particular cell of it does) 09:32:02 For that you'll want a bigint implementation that's more efficient in the special case when most of your numbers are fixints. In this case you'd use fixints but when you incrememnt a cell you check if it's (close to) overflowing and replace it with a bigint if it is. 09:32:24 The bigint module won't do that. 09:33:08 (There's also a semantic difference in that Math::Bigint's methods won't be available for fixints, but that shouldn't be a problem for your applications.) 09:33:09 b_jonas: so in the I/D machine, once you increment a cell, you can't leave that cell without dereferencing it 09:33:29 Yeah, but you can dereference it twice to get to zero again 09:33:38 and thus any value overflow necessarily also indicates a memory overflow, because Perl scalars are large enough to hold all memory addresses 09:34:02 b_jonas: ah, so your idea is to treat the values above the memory space as all zero unless you try to increment them, to save memory 09:34:14 for I/D machine yes 09:34:32 I guess this is one of those cases where an implementation really wants to be an optimising decompiler, so that it can run the program more efficiently in time and space 09:35:29 yes, if you're not optimizing then you can use 64-bit fixints, they won't have time to overflow if you only increment them by small numbers 09:35:46 so it would be pointless to have the upgrade to bigints 09:37:18 oh right, that optimisation 09:37:22 I really want to formalise it some day 09:37:41 it is something that could potentially make a lot of programs in safe languages more efficient, but it is hard to formalise the situations under which it's sound 09:38:40 one thing I noticed in Rust is that the overflow check on Rc is actually pretty slow; and, if Rcs were unleakable, it would be impossible for it to ever matter (because you'd run out of memory due to it being full of Rcs before the counter would overflow) 09:39:07 so it might be possible to get a decent performance boost by optimising it out, but Rust has a rule that allows anything to leak, and creating and leaking Rcs in a loop would be able to overflow it on 32-bit systems 09:40:02 yeah, that's two slightly different cases, one where you guarantee no overflow by incrementing a counter only by 1 and only from a single thread; the other where the reference count counts distinct real references from other objects and that's why it can't overflow 09:40:26 wait, you mean Rc and not Arc? 09:40:37 so it's incremented from single-thread only 09:40:40 well, either, I'm just more used to Rc 09:40:58 yeah, I guess it doesn't make a difference 09:41:07 it's rare for me to want to access refcounted things from multiple threads at once, multithreading only really gives significant savings if there's no contention 09:41:24 because it's a single atomic reference count value, not multiple values incremented separately and then added together 09:42:00 yep 09:42:13 the savings would be bigger for arc, I think 09:43:01 if you have a function that clones and then drops an arc, it has to read and test the refcount in order to preserve the panic behaviour when the refcount is almost maxed out, so it can't optimise out the refcount changes 09:43:22 I see 09:43:22 and atomic adjusting of memory is actually really slow by CPU instruction standards, it's somewhere around 40 arithmetic instructions IIRC on modern processors 09:44:08 [[Postrado]] https://esolangs.org/w/index.php?diff=151198&oldid=150270 * Ractangle * (+270) /* Truth-machine */ 09:44:09 when relying on the "this *can't* overflow" model, you can just leave the refcount alone as long as you have at least one strong reference to ensure that changes in other threads can't set the value to 0 09:44:21 isn't that because it has to access main memory or L3 cache, can't be done locally in the L2 cache, and that's slow even if not atomic? 09:44:35 (Rc has a "number of strong references" method; I'm not sure whether Arc does too; those methods would hae to be removed for this optimistion to work) 09:45:18 I think ideally you'd want to change that to a method that tells you if the strong reference count is exactly 1 09:45:26 [[Postrado]] https://esolangs.org/w/index.php?diff=151199&oldid=151198 * Ractangle * (+8) /* With functions */ 09:45:55 [[Postrado]] https://esolangs.org/w/index.php?diff=151200&oldid=151199 * Ractangle * (+2) /* With functions */ 09:46:41 [[Brainfffffuck]] https://esolangs.org/w/index.php?diff=151201&oldid=151197 * Ractangle * (+0) /* Syntax */ 09:47:03 I haven't realized that rust had this problem because I was thinking of reference counts mostly in the context of a high-level language where, although you might be able to leak a refernece, you can do so only if the object that holds the reference actually consumes memory 09:47:18 so leaking doesn't make it much easier to overflow the reference count 09:52:20 I guess this would be a problem with C++'s shared_ptr too 09:52:48 [[Queue-based esolang]] https://esolangs.org/w/index.php?diff=151202&oldid=151147 * Ractangle * (+0) /* See also */ oops 09:53:08 or not because maybe there you don't need to insist on always panicing on overflow 10:06:12 though I also wasn't thinking much about eliding overflow checks. more like keeping overflow checks but allowing to panic when the counter overflows. eg. suppose I have a simulation videogame that is not distributed, the game state is computed on a single core of a single server (there may still be multiple players on the network with their machines rendering UI separately, that doesn't matter). in the 10:06:18 game state sometimes an object is created. then I'm allowed to just use a single 63-bit counter that I increment whenever an object is created, and use that counter as the unique ID of the object that I use in representation. then I don't have to handle that counter overflowing, even if objecs can be destroyed and the game state can be saved and later loaded. 10:06:36 that can simplify the code even if I do check for overflow, because handling the overflow could be harder to implement. 10:07:13 obviously this isn't always how you want to assign IDs, sometimes you want them to be a 32-bit index into an array for example, but sometimes the single counter can be useful. 10:08:06 it's useful if you want to make sure that an object id isn't ever reused, so a weak reference can just be an object id. 10:09:21 or the weak reference can be a pointer that you can safely dereference even if it's stale (eg. an array index) plus the object id, and you store the object id in the representation of the object, when you dereference you check if the object the pointer points to is alive and that the object id matches and if it does then the weak pointer is still alive. 10:13:42 another case is if I'm caching something in every object, and sometimes I do a change that means I have to invalidate the cache in all objects, and when I access the cached value I need to know if it's up to date, then I can have a single global invalidate counter whose value I store with the cache, and since that invalidate counter is never reused this works 10:13:54 a value for the invalidate counter is never reused 10:26:50 -!- Sgeo has quit (Read error: Connection reset by peer). 10:30:14 -!- DOS_User_webchat has joined. 10:30:31 -!- Sgeo has joined. 10:30:48 -!- DOS_User_webchat has quit (Remote host closed the connection). 10:38:05 [[Special:Log/newusers]] create * Syuparn * New user account 10:38:22 b_jonas: yes, I like those use-cases too; it would be great to have some way a compiler could prove they were safe 10:38:38 probably along the lines of some sort of "this counts as a tick" annotation and a global limit for how many ticks there could be 10:44:36 you could have the programmer annotate with a specific type, a 64-bit integer that you can only set to zero or increment by one or convert to a normal integer 10:44:43 or clone 10:45:37 I guess that would help the programmer, not the compiler 10:46:00 for the compiler we already have an addition that's undefined behavior if it overflows 10:48:37 [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=151203&oldid=151159 * Syuparn * (+172) 10:59:26 [[25 bytes o:]] https://esolangs.org/w/index.php?diff=151204&oldid=151195 * PrySigneToFry * (+138) 10:59:29 b_jonas: so the issue here is that we're talking about an "inherently unsound optimisation" in that it always changes the semantics of the program, by adding a time limit 10:59:43 so we need to make sure that the time limit is actually not going to be a problem in the actual application 11:00:57 [[Talk:25 bytes o:]] https://esolangs.org/w/index.php?diff=151205&oldid=147860 * PrySigneToFry * (+886) /* sqrt(25) bytes o: */ new section 11:01:40 it's the extreme ultrafinitist approach to programming 11:02:52 Hi 11:07:33 [[+]] https://esolangs.org/w/index.php?diff=151206&oldid=128515 * PrySigneToFry * (+229) 11:08:06 b_jonas: so my main concern is with things like «for _ in 0..1000000000 { x.add_one() }» which the compiler will optimise into a single addition, but then the number can overflow 11:09:04 [[]] M https://esolangs.org/w/index.php?diff=151207&oldid=151133 * PrySigneToFry * (+164) 11:09:23 [[]] https://esolangs.org/w/index.php?diff=151208&oldid=151207 * PrySigneToFry * (+0) 11:11:54 ais523: I see! so would a specific integer type help with that? it's not easy because the compiler would need to propagate some of the info all the way down to the backend 11:13:24 you could do "an addition that can't be optimised" but at least in the Rc example, that's not actually what you want 11:13:52 I don't have a solution to this (and in fact I'm not 100% sure I fully understand nature of the problem) 11:15:23 [[Infinite commands???]] https://esolangs.org/w/index.php?diff=151209&oldid=151125 * PrySigneToFry * (+235) 11:18:19 [[Infinite commands???]] https://esolangs.org/w/index.php?diff=151210&oldid=151209 * PrySigneToFry * (+163) 11:19:10 sure, you don't just want a black-box addition 11:23:03 [[]] https://esolangs.org/w/index.php?diff=151211&oldid=147613 * PrySigneToFry * (+328) 11:23:15 there's also the cryptographic version of these optimizations, like when you assume that an adversary can't find hash collisions in a 256-bit hash, or if I generate any number of 224-bit long random keys and insert it into a database and replicate the database to any number of my servers and an adversary can query those database servers in parallel then they'll never guess any keys of which I don't 11:23:21 reveal information (this probably still works with 192 bits) 11:25:52 those sort of optimisations are hard to automatically apply to programs to get "free" performance gains, though 11:26:07 other than, perhaps, the "if we use sufficiently many bits in a random number we'll never generate the same one twice" optimisation 11:26:36 [[-25 bytes (O o)]] https://esolangs.org/w/index.php?diff=151212&oldid=144546 * PrySigneToFry * (-245) 11:27:12 the one that disturbs me the most is how big an authentication tag you need to validate a message 11:27:34 sure, they're not automatic optimizations for free performance gains 11:28:17 but at some point you need to decide what sizes you need, and most of the time it doesn't matter if you use a too large size but sometimes for a large service it can matter 11:29:42 when it comes to cryptography, the problem is that the sizes you need depend on a) your adversaries' brute-forcing performance and b) what breaks in the cryptography they will become aware of through the useful life of the service 11:29:58 and both of those are hard to predict, which is why it's usual to rely on very large safety marginsg 11:30:39 yes, the numbers I mentioned only work if the cryptographic primitives that you use don't have weaknesses 11:30:50 [[Talk:-25 bytes (O o)]] https://esolangs.org/w/index.php?diff=151213&oldid=144571 * PrySigneToFry * (+1623) 11:31:04 and there are multiple different numbers because you have to assume that your adversary may have much more computing power than you do 11:31:18 [[Talk:-25 bytes (O o)]] https://esolangs.org/w/index.php?diff=151214&oldid=151213 * PrySigneToFry * (+1) 11:34:41 [[O()]] https://esolangs.org/w/index.php?diff=151215&oldid=146088 * PrySigneToFry * (+143) 11:36:59 [[Free Esolang]] https://esolangs.org/w/index.php?diff=151216&oldid=151048 * PrySigneToFry * (+52) 11:43:18 -!- Sgeo has quit (Read error: Connection reset by peer). 11:55:19 [[Cholc]] N https://esolangs.org/w/index.php?oldid=151217 * Syuparn * (+4874) Created page with "'''Cholc''' is an esoteric programming language made up of sequences of musical chords. ==Examples== ===Hello world=== A A A A A A A A A |: F G E Am :| F Fm |: C C C C C C C C A A A B Em :| C Cm X |: Db Eb Eb Eb Eb Eb C C C Fm :| C C X |: C C#m :| Cm Cm X X C 12:02:47 -!- mtm has quit (Ping timeout: 244 seconds). 12:05:39 -!- mtm has joined. 12:49:37 [[Talk:25 bytes o:]] https://esolangs.org/w/index.php?diff=151218&oldid=151205 * PkmnQ * (+338) 13:07:58 [[Recursive]] https://esolangs.org/w/index.php?diff=151219&oldid=150854 * PkmnQ * (+285) /* Example programs */ Just realized that this is also a thing Recursive can do 13:17:35 [[User:Unname4798]] https://esolangs.org/w/index.php?diff=151220&oldid=151030 * Unname4798 * (+2) 13:18:21 -!- amby has joined. 13:18:36 [[User:Unname4798]] https://esolangs.org/w/index.php?diff=151221&oldid=151220 * Unname4798 * (-10) 14:27:04 [[Cholc]] https://esolangs.org/w/index.php?diff=151222&oldid=151217 * MihaiEso * (-3) 14:39:38 [[PythBrSc]] https://esolangs.org/w/index.php?diff=151223&oldid=144022 * MihaiEso * (+1) 15:09:52 -!- ais523 has quit (Quit: quit). 15:14:16 [[3switchBF]] https://esolangs.org/w/index.php?diff=151224&oldid=88530 * Ractangle * (-5) /* Translator to brainfuck */ sorted variables by type 15:15:07 [[3switchBF]] https://esolangs.org/w/index.php?diff=151225&oldid=151224 * Ractangle * (+5) /* Translator to brainfuck */ c gets redefined so 15:19:11 [[Postrado]] https://esolangs.org/w/index.php?diff=151226&oldid=151200 * Ractangle * (-104) /* Commands */ 15:20:15 [[Postrado]] https://esolangs.org/w/index.php?diff=151227&oldid=151226 * Ractangle * (+11) /* Without functions */ 15:31:01 [[Bitwise Scanner]] https://esolangs.org/w/index.php?diff=151228&oldid=60454 * Kaveh Yousefi * (+183) Added a hyperlink to my implementation of the Bitwise Scanner programming language on GitHub and altered the Unimplemented category tag to Implemented. 15:35:51 [[Bitwise Scanner]] M https://esolangs.org/w/index.php?diff=151229&oldid=151228 * Kaveh Yousefi * (+308) Reformatted the instruction listing as a table, introducing the operations' expected arguments. 15:46:15 [[User:TheCanon2]] M https://esolangs.org/w/index.php?diff=151230&oldid=150403 * TheCanon2 * (+31) 16:05:24 [[Fungeball]] https://esolangs.org/w/index.php?diff=151231&oldid=151190 * Lykaina * (+46) Updated url and version info 16:14:38 [[Fungeball]] https://esolangs.org/w/index.php?diff=151232&oldid=151231 * Lykaina * (+159) /* Threading */ added a little clarification here about I/O being shared. 16:50:36 -!- ais523 has joined. 17:02:48 [[Fungeball]] https://esolangs.org/w/index.php?diff=151233&oldid=151232 * Lykaina * (+65) Updated url and version info, current version is 1.0b3 17:03:44 [[User talk:Calculus is fun]] M https://esolangs.org/w/index.php?diff=151234&oldid=151139 * Calculus is fun * (+197) reply to user "I am islptng" 17:07:46 split the fungeball script file into two: library and wrapper 17:16:34 -!- mich181189 has quit (Ping timeout: 248 seconds). 17:16:45 -!- mich181189 has joined. 17:18:58 [[MoreMathRPN]] M https://esolangs.org/w/index.php?diff=151235&oldid=151082 * Calculus is fun * (+294) Added query command, reorganized to match website 17:33:31 the library is compatible with micropython and cpython 17:33:47 the wrapper is designed for cpython 18:07:48 [[Special:Log/newusers]] create * Compiler12o * New user account 18:13:04 [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=151236&oldid=151203 * Compiler12o * (+173) /* Introductions */ 18:13:24 [[Fungeball]] https://esolangs.org/w/index.php?diff=151237&oldid=151233 * Lykaina * (-41) Changed url to match the repository on my personal gitea. 18:14:34 [[+-]] https://esolangs.org/w/index.php?diff=151238&oldid=98506 * Compiler12o * (+3015) /* Interpreters */ 18:16:53 [[+-]] https://esolangs.org/w/index.php?diff=151239&oldid=151238 * Compiler12o * (-3015) /* C++ 20 */ 18:17:44 [[+-]] https://esolangs.org/w/index.php?diff=151240&oldid=151239 * Compiler12o * (+3019) /* Interpreters */ 18:18:09 [[+-]] https://esolangs.org/w/index.php?diff=151241&oldid=151240 * Compiler12o * (-4) /* C++ 20 */ 18:18:44 [[+-]] https://esolangs.org/w/index.php?diff=151242&oldid=151241 * Compiler12o * (+21) /* C++ 20 */ 18:23:27 fungeball has it's own git repository now 18:24:05 -!- Lord_of_Life_ has joined. 18:24:44 -!- Lord_of_Life has quit (Ping timeout: 265 seconds). 18:25:27 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 18:34:22 Good times. 18:47:19 [[+-]] https://esolangs.org/w/index.php?diff=151243&oldid=151242 * Compiler12o * (-3036) /* C++ 20 */ 19:04:19 [[MoreMathRPN]] M https://esolangs.org/w/index.php?diff=151244&oldid=151235 * Calculus is fun * (+208) Added breakpoints 19:11:35 [[MoreMathRPN]] M https://esolangs.org/w/index.php?diff=151245&oldid=151244 * Calculus is fun * (+90) Added error command 19:14:31 [[MoreMathRPN]] M https://esolangs.org/w/index.php?diff=151246&oldid=151245 * Calculus is fun * (-7) /* Checks and comparisons */ 19:22:25 [[MoreMathRPN]] M https://esolangs.org/w/index.php?diff=151247&oldid=151246 * Calculus is fun * (+24) Changed 2nd sentence 19:32:32 [[Funciton]] M https://esolangs.org/w/index.php?diff=151248&oldid=151079 * Timwi * (+71) sort function 19:35:53 -!- Sgeo has joined. 20:00:18 hi Sgeo 20:26:41 [[Fungeball]] https://esolangs.org/w/index.php?diff=151249&oldid=151237 * Lykaina * (-7) Updating url due to moving public repo to GitHub 20:35:08 Hi Lykaina 20:36:43 -!- chomwitt has quit (Ping timeout: 252 seconds). 20:44:51 copied the repo from my private gitea to github 20:52:08 [[6 bytes of useless element]] https://esolangs.org/w/index.php?diff=151250&oldid=149153 * Ractangle * (-60) /* Interpreters */ 20:55:32 -!- Lord_of_Life has quit (Excess Flood). 20:56:29 -!- Lord_of_Life has joined. 21:14:26 -!- DOS_User_webchat has joined. 21:26:51 I've been playing Redactle again recently, at https://redactle.net/ , in case anyone's interested 21:27:38 -!- DOS_User_webchat has quit (Remote host closed the connection). 22:06:44 -!- moony7 has quit (Quit: Ping timeout (120 seconds)). 22:07:23 -!- moony has joined. 22:14:12 [[Fungeball]] M https://esolangs.org/w/index.php?diff=151251&oldid=151249 * Lykaina * (+0) Changed a url from the GitHub Repository to the GitHub Pages site. 22:16:26 -!- ais523 has quit (Quit: quit). 22:52:03 [[Fungeball]] https://esolangs.org/w/index.php?diff=151252&oldid=151251 * Lykaina * (+173) /* Versions */ Adding distinction between GitHub Versions and Pre-GitHub Versions 23:06:09 -!- craigo has quit (Ping timeout: 260 seconds). 23:38:36 [[6 bytes of useless element]] M https://esolangs.org/w/index.php?diff=151253&oldid=151250 * Calculus is fun * (+203) /* Interpreters */ 23:53:16 -!- supercode has joined. 23:54:52 [[Fun Video Game]] M https://esolangs.org/w/index.php?diff=151254&oldid=135671 * Calculus is fun * (+149) MoreMathRPN example 23:58:27 -!- molson_ has joined.