00:08:29 -!- variable has quit (Quit: /dev/null is full). 00:15:24 [[Surtic]] https://esolangs.org/w/index.php?diff=55601&oldid=55598 * Digital Hunter * (+65) 00:16:12 [[User talk:Galaxtone]] https://esolangs.org/w/index.php?diff=55602&oldid=55244 * Digital Hunter * (+139) /* Chat */ 00:52:30 -!- doesthiswork has joined. 02:34:57 -!- Naergon has quit (Read error: Connection reset by peer). 02:50:42 So I came up with something that should find languages that reduce bugs sort of like how code golf finds languages that are more expressive. 02:55:13 I don't know? I think the program can have bugs in most programming languages though, anyways 02:55:38 Person A sets a task and all the challengers provide both a program that does it and the smallest edit to that program that causes it to do it incorrectly (but without compile or runtime errors) The challenger's score is the size of the edit divided by the size of the program 02:58:02 O, OK, you can try that? 03:03:49 `le/rn exponentially//"exponentially" is a word that means "a lot". 03:03:51 Learned 'exponentially': "exponentially" is a word that means "a lot". 03:04:43 expomentially 03:05:29 `?acute 03:05:30 ​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: ?acute: not found 03:07:42 -!- Naergon has joined. 03:24:44 I guess I should give up trying to make my tree-rewriting system variable-less. 03:39:30 -!- variable has joined. 03:40:34 imode: I like how variable joined after you said that. 03:41:59 hi 04:19:40 lmfao. 04:20:22 The one constant in this channel is variable 04:20:45 -!- variable has changed nick to constant. 04:22:57 doesthiswork: The variable just changed, it cannot be constant 04:28:15 There is no variable only constant. And because as you say constants never change, variable must have always been constant,. 04:33:53 -!- Naergon has quit (Ping timeout: 268 seconds). 05:32:50 -!- Naergon has joined. 05:35:31 <\oren\> I don't have any ginger tea so Ijust used ginger powder in the espresso machine. it worked surprisingly well 05:41:44 brilliant! 05:44:19 <\oren\> therefore, espresso machine can potentially be used to decoct all kinds of herbal liquids 06:33:10 -!- ais523 has joined. 06:48:22 -!- xkapastel has quit (Quit: Connection closed for inactivity). 06:56:12 -!- ais523 has quit (Quit: sorry for my connection). 06:56:27 -!- ais523 has joined. 07:14:13 -!- AnotherTest has joined. 07:23:20 doesthiswork, in most languages, commenting out some print command does so perfectly. 07:23:35 Its output will be incorrect and there will be no crash. 07:24:45 The features to avoid this aren't... really good features in practice. 07:25:11 The golfiest ways to make a program stop working are usually not what actually cause bugs (in my experience). 07:25:34 And the things that prevent them (dead code hard errors, unused variable hard errors, etc) are bad ideas in practice 07:27:46 Haskell is one of the safest languages out there right now. 07:28:31 no code - no harm :P 07:28:56 And still, with basically any program, you can make it stop working with s/main =/main = const(return())$/ 07:30:08 -!- AnotherTest has quit (Ping timeout: 255 seconds). 07:32:35 -!- doesthiswork has quit (Quit: Leaving.). 07:50:50 <\oren\> therefore, espresso machine can potentially be used to decoct all kinds of herbal liquids <-- interesting, though I assume there might still be coffee taste left in the machine? 07:51:29 why not 07:51:43 just get a press brewer or something 07:52:13 also you could probably just crush the ginger and use a reusable infuser if you have one 07:55:59 I use a large reusable cloth tea bag when making tea 08:12:27 Vorpal: Been a while since we last swapped these -- https://zem.fi/tmp/florence.jpg 08:14:25 fizzie: I haven't done any in a while though :/ 08:14:41 but that is pretty 08:14:56 I've mostly been lazy and used the phone's tool for them, though that one was done in the traditional Hugin way. 08:15:35 hm have hugin improved any in recent years? haven't looked at it for a while 08:16:06 I think some of the UI elements had moved places, but I don't think it's much different. 08:17:29 I had somehow managed to make the default lens type something non-rectilinear, had real trouble with stitching before I realized that. I think it probably remembers that setting, and maybe I had played around with it. 08:20:44 heh 08:21:27 Not sure if I mentioned, but I also bought a fisheye lens. 08:22:36 oh, neat 08:23:30 oh, some neighbor is using a hammer drill I think 08:23:42 https://zem.fi/tmp/duomo1.jpg https://zem.fi/tmp/duomo2.jpg fun, but not exactly all that practical 08:26:44 very narrow? 08:26:53 expected a circular viewport 08:28:37 It's one of those where for APS-C it fills the frame. Something like 167° diagonal FOV. 08:30:12 I think if you stick it on a full-frame camera it's almost a circle, but not quite. 08:33:20 https://drkrishi.com/wp-content/uploads/2013/07/panorama-using-8mm-fisheye-01.jpg -- the (faintly visible) circle is what the image would be on a full-frame, but there's a hood that's been cut so that it doesn't obstruct the APS-C rectangle. 08:33:46 (In my version it's removable, in the original model it wasn't.) 08:36:08 that is some intense colour fringes 08:36:35 now when I look closely I see some in your photo too, but not as bad 08:37:17 did you correct for it in post processing? 08:37:59 No. I wonder if that has something to do with how well the light/dark edge is is focus. The lens hood in that picture would be very out-of-focus. 08:39:19 (Or maybe it's just better near the middle of the frame.) 08:40:25 colour fringing is generally worse towards they edges yes iirc 08:42:52 It's manual aperture and manual focus, though really if everything's more than about 1-2 metres away, you just set the focus to the 'infinity' marker and don't worry about it. 08:43:51 neat 08:46:45 (re the Lymia/doesthiswork conversation) in programming competitions you sometimes have to design programs to be resistant to being changed 08:46:55 this lead to the development of languages with checksums 08:47:16 although something like https://esolangs.org/wiki/A_Pear_Tree can only be resistant to 3-4 bytes being changed 08:47:22 you could make a language that could handle more 08:49:54 I guess most programming languages where small changes are still valid different programs (as opposed to syntax errors) are chaotic, since usually the result is completely different 08:51:07 though there is an argument against that too since often a small change can still lead to no observed behaviour change (e.g. code is never actually executed, or it is still an infinite loop, just with a slightly different condition) 08:51:11 right, some are intentionally designed like that, e.g. Incident 08:51:30 where you can effectively remotely delete any part of the program by making an edit anywhere 08:51:50 heh 08:52:56 the intent was to make it able to polyglot with /anything/ 08:52:59 as long as you had an editable portion 08:53:21 -!- laerling has joined. 08:55:11 heh 08:55:14 yeah that is neat 08:55:45 but that are some really hard to use operations 08:57:10 yes 08:57:17 it's actually worse than it looks at first 08:58:13 actually, control flow is pretty easy in Incident, the main problem is data storage and transfer 08:59:08 hm really? Okay 08:59:19 bbl 09:00:56 the language is basically entirely made of call stacks 09:05:52 -!- erkin has joined. 09:09:18 Vorpal, how would you design a programming language that's not chaotic in such a manner? 09:09:30 I suspect the answer is probably: see neural networks 09:11:44 There's simple tricks you could use to make any valid program very distant (in a byte-by-byte sense) from any valid program (any cryptographic AONT on a conventional language works) 09:11:55 But there's still an underlying logic where a small change can create a huge difference. 09:21:52 -!- imode has quit (Ping timeout: 245 seconds). 09:22:09 Even Malbroge is that way 09:22:22 Though, it doesn't reject anything I guess 09:23:36 Malbolge rejects almost everything 09:23:53 IIRC there are only 8 valid options for each character position in the program, anything else is a syntax error 09:23:58 (what those options are depends on the location) 09:24:19 this makes Malbolge programs quite easy to recognise, they tend to have long sequences that run backwards through ASCII as a result of the syntactic restrictions 10:03:04 -!- arseniiv has joined. 11:36:27 -!- erkin has quit (Quit: Ouch! Got SIGIRL, dying...). 11:41:17 -!- laerling has quit (Quit: Leaving). 11:48:23 -!- jix has joined. 12:08:05 -!- APic has quit (Ping timeout: 240 seconds). 12:53:33 -!- oerjan has joined. 13:00:32 -!- doesthiswork has joined. 13:02:54 -!- SopaXorzTaker has joined. 13:12:23 -!- xkapastel has joined. 13:15:14 -!- Naergon has quit (Ping timeout: 276 seconds). 13:27:54 -!- xkapastel has quit. 13:28:12 -!- xkapastel has joined. 13:31:40 -!- SopaXorzTaker has quit (Remote host closed the connection). 13:58:43 -!- ineiros has joined. 14:39:41 Is there a control flow structure more flexible than delimited continuations (which seem to be rare in an esolang)? 14:41:21 aren't non-deliminted continuations more flexible than delimited continuations? 14:42:52 something I discovered a whlie back in INTERCAL is that you can emulate continuations using threads that can be paused 14:42:57 although they're fairly heavy 14:43:24 given that continuations have no obvious way to do pre-emptive (as opposed to cooperative) parallelism, threads may be more flexible 14:46:55 Delimited continuations can easily emulate undelimited continuations with a single 'reset' that wraps around the whole program and some kind of 'halt program' instruction at the end 14:47:12 ('at the end' being still within the 'reset') 14:48:08 Well, there is Forth; some implementations may be more flexible 14:48:49 I wonder if pausable threads can emulate delimited continuations 14:49:28 I don't know 14:51:29 I guess you could just expose the call stack 14:53:02 well, the call stack is pretty exposed in INTERCAL 14:54:26 Or maybe a call spaghetti stack 14:55:08 -!- oerjan has quit (Quit: Later). 15:16:56 If you allow the manipulation of stack frames (invoking it with values, modifying the frame it returns to, and cloning it) you can emulate delimited continuations fairly easily, I think 15:17:37 in addition to passing them around as first-class citizens (Communism: The Esolang) 15:31:37 Scala lets you serialize delimited continuations 15:31:45 So you can send control flow through the network :D 15:34:20 hmm, I wonder if you can implement delimited continuations using undelimited continuations in a simple way 15:34:57 I tried, but I don't think it's possible 15:34:59 something like "calling a delimited continuation takes you back to the old stack frame, but records where you called it from, and then reset can take you back to where you called it" 15:36:23 Is there a control flow structure more flexible than delimited continuations (which seem to be rare in an esolang)? 15:36:24 actually, wait 15:36:25 I got it 15:36:32 computed goto 15:36:57 nah, not harmful enough 15:37:02 oh, computed next from is pretty powerful 15:37:10 next from? 15:37:18 it's like come from except it allows you to go back again 15:37:46 hm 15:37:53 it lets you do things like implementing a single-stepping debugger within the language itself, by nexting from the IP as long as it isn't in the debugger itself 15:38:33 interesting 15:39:10 it's not used in any mainstream language I'm aware of, though, because it's ridiculously inefficient 15:39:12 I've noticed that some implementations of reset/shift only allow 'shift' to interact with the 'reset' nearest to the top of the stac 15:39:17 s/stac/stack/ 15:39:48 hmm, Perl has the option to replace the main loop of the bytecode interpreter 15:40:04 that strikes me as pretty insanely flexible as operations go, and it doesn't seem to fall into any category other than "control flow" 15:40:44 do any esolangs have computed next from? 15:41:07 INTERCAL does 15:41:11 probably not any others, though :-D 15:41:12 Maybe CLC-INTERCAL does 15:41:23 both CLC-INTERCAL and C-INTERCAL do 15:41:27 OK 15:42:04 C-INTERCAL allows you to write the computed next from in a C or Befunge-98 program, but it'll only capture lines with INTERCAL line numbers 15:42:26 (which means that you need to explicitly give an INTERCAL line number to part of the C or Befunge-98 program or you can't do anything with it) 15:43:29 hm, if I understand this, come from is to goto as next from is to call 15:46:09 yes 15:46:49 could we extend the analogy to continuations? 15:47:30 well, continuations are a generalisation of exceptions 15:47:36 and resumable exceptions are something that exists 15:47:40 so this seems maybe doable? 15:47:57 What programming language has powerful enough macros to implement next from and continuations and all of those things? 15:47:58 presumably the continuation gets two arguments, the "payload" you passed it, but also a continuation to go right back where you were before 15:48:40 What do you mean by "resumable exceptions"; is that like the RESUME command in BASIC? 15:49:22 it's a bit like a cross between RESUME from BASIC and catch from Java 15:49:42 zzo38: for something like come from or next from to work, every line you'd have to check each come/next from to see if the instruction pointer matches 15:49:45 I think 15:50:05 the idea is that when an exception occurs, the program looks for an exception handler in the normal way (stack-unwinding-like) but doesn't actually unwind the stack, instead the exception handler runs on top of the stack 15:50:40 and then can choose to unwind back to its own location in the code (in the usual way), but can also choose to correct the issue and then return back to the code that errored 15:51:11 rdococ: For computed come from, yes I would think (if not computed then it is simpler to do), but I ask if it can be implemented by use of macros. 15:54:47 presumably, to implement come froms or next froms within the language itself you'd have to define something that runs before/after every line 15:57:03 continuations could be implemented in the form of lexical goto (goto out of anonymous function scope), I wonder if you could have a similar "lexical come from" 16:06:18 If threads can be cloned, paused and unpaused, they would be more flexible than *undelimited* continuations at least 16:06:58 now I'm trying to work out what operation a delimited thread would support 16:07:05 presumably you could pause it, change the bottom of the call stack, and unpause it 16:07:41 unless you'd already returned past that point, so perhaps they have a marker "don't go past this point" 16:09:05 you could try the opposite route, and work out how concurrent continuations could work 16:09:16 concurrent delimited ones, that is 16:11:51 thread X could 'call' thread Y so that if Y returns with a value as opposed to just unpausing another thread and pausing itself, control would return to X? 16:14:09 that seems similar to coroutines 16:23:45 How about this: Thread X could "invoke" Threads Y and Z by unpausing both of them, passing itself along with arguments to them, and pausing itself. Then when either Thread Y or Z "returns", one of them could unpause X and pause itself? 16:24:48 -!- SopaXorzTaker has joined. 16:25:00 If Y "returns" first, though, what happens when Z "returns"? 16:25:29 Or would X wait for both Y and Z to return by pausing itself twice? 16:35:53 -!- erkin has joined. 16:47:42 -!- constant has quit (Quit: Found 1 in /dev/zero). 16:55:40 -!- laerling has joined. 17:12:39 ais523: Since delimited continuations are essentially functions in that you can pass values to them, and they can return values, perhaps you could simply implement a way to call them concurrently? 17:15:25 > Yay 17:15:28 error: Data constructor not in scope: Yay 17:15:31 sorry 17:20:57 Another way to think about it is that functions are like thread generators, and to call a function would be similar to creating and resuming a new thread passing the caller's continuation to it. 17:21:28 Well, you wouldn't need to pass a continuation, just pass the caller itself if it's a thread. 17:28:38 [[User:Kaa-kun]] https://esolangs.org/w/index.php?diff=55603&oldid=55000 * Kaa-kun * (-18) Blnk'd out page 17:32:27 And if you can clone a thread, functions can then be thread prototypes, which you clone to create threads from. 17:33:21 [[Esolang talk:Community portal]] https://esolangs.org/w/index.php?diff=55604&oldid=49676 * Kaa-kun * (+290) /* How do you make userboxen? */ new section 17:33:48 -!- imode has joined. 17:35:36 Hello imode. ais523 and I were discussing control flow structures that could be more powerful than delimited continuations. 17:36:17 -!- ATMunn has quit (Excess Flood). 17:36:30 -!- ATMunn has joined. 17:37:58 -!- Naergon has joined. 17:41:18 . o O ( computed COME FROM ) 17:43:45 int-e: Computed COME FROM is maybe more or less powerful than undelimited continuations, but I don't think it's as powerful as delimited ones. 17:45:49 Although, computed COME FROM enables pre-emptive multitasking (something which even delimited continuations seems to lack), and if two COME FROM statements coming from the same line is supported then that would result in concurrency. 17:47:12 Even non-computed COME FROM supports pre-emptive multitasking (to an extent?) and concurrent threads. 17:48:56 there is a multi-threaded intercal, where this is indeed how threads are spawned 17:49:31 [[User:Kaa-kun]] https://esolangs.org/w/index.php?diff=55605&oldid=55603 * Kaa-kun * (+834) Bio 17:51:09 How about multi-threaded "next from"? 17:57:18 that works too 17:57:24 at least in C-INTERCAL 18:00:00 Having shift, reset and a fork instruction would probably be sufficient for concurrent delimited continuations... 18:03:11 Or perhaps if 'reset' could act as a forking instruction as well, which would be somewhat analogous to supporting multiple goto labels with the same name. 18:07:54 what, y'all aren't content with FSM-based control? :P 18:10:13 Yeah, it's kind of moot when even just vanilla structured programming languages can be turing complete. 18:10:52 expressiveness does matter. 18:11:01 buuuut.. yeah. 18:14:19 Quantum Malbolge should hash the program securely before executing it, so programming in it would require calculating reverse hashes (with current, classic cryptography, it's easy for quantum computers but not classical ones). 18:20:09 -!- SopaXorzTaker has quit (Remote host closed the connection). 18:28:24 JavaScript has no goto command. All of the stuff that can be done with it you can avoid goto, and in many cases in JavaScript what it does have does help better anyways than in C, but in some cases nevertheless would be more nicer program to have goto sometimes. 18:30:35 -!- fractal_ has quit (Ping timeout: 240 seconds). 18:32:21 (BLISS also does not have a goto command.) 18:39:46 I feel like you could delimit threads in the same way that you can delimit continuations. 18:41:01 -!- AnotherTest has joined. 18:44:47 -!- wob_jonas has joined. 18:45:47 ais523: hi. in that brainfuck variant you invented, where the - command multiplies the cell by -2 instead of subtracting 1 from it, what sort of numbers is it support to use? modulo 256? bignums? something else? 18:45:54 I think in that case it matters 18:46:27 bignum is my default 18:46:36 ok 18:46:42 it doesn't matter unless you have a limited length tape though 18:46:46 because brainfuck minus - is TC 18:46:48 in that case I wonder if that variant is even turing-complete 18:46:53 what? 18:46:59 https://esolangs.org/wiki/Brainfuck_minus_- 18:46:59 brainfuck on bignums without - is TC? 18:47:08 even without bignums 18:47:15 although bignums makes it harder 18:47:30 yes, without bignums it's easy, that's why I'm asking 18:47:35 With integers mod 256 it's pretty trivial, really. 18:47:41 -!- fractal_ has joined. 18:47:49 (or mod any number) 18:48:06 Since you just need to do + a number of times congruent to -1. 18:50:01 brainfuck without - is demonstrably turing complete whether the integers are modular or not as seen in the article 18:50:31 rdococ: yeah, ais just told 18:51:07 Yeah, that article suffices to prove it, but it's pretty non-trivial. 18:57:11 What would occur if you replaced > and + with }, which is equivalent to >+? 18:58:47 rdococ: I think that variant is already invented under some name and on the wiki 18:59:00 without - too? then it's at most a PDA, and probably less powerful than that 18:59:06 Ah. 18:59:14 you can just write > as }- and + as <} 18:59:41 wob_jonas: We're talking about a derivative where >, +, - don't exist while } does. 19:00:00 ah 19:00:01 + is fairly trivial, as it's just <}. > on the other hand is most likely impossible. 19:00:47 the problem is that you can never read any data to the right of the pointer 19:01:55 -!- AnotherTest has quit (Ping timeout: 245 seconds). 19:02:02 Would it be so limited? If it's mod-256, then > is <} 256 times. 19:02:25 I was assuming bignum 19:02:52 Yeah, that might be a PDA. 19:03:23 it obviously can't be stronger than a PDA, but I suspect it's weaker 19:03:35 Yeah. 19:04:18 Not quite an FSA because it definitely has infinite states, but 19:04:29 I think it's a single-counter machine 19:04:37 specifically, the number of 1s to the left of the pointer 19:04:41 ^ 19:04:55 I don't even think it's that 19:05:05 Quite possibly, yeah. 19:05:11 nah, it is, you can increment with } and decrement with < 19:05:26 ah, perhaps 19:05:28 Interesting that making it mod-256 makes it more powerful. 19:06:06 only the first cell will ever be 0 when the cell pointer is on it 19:06:28 Well, unless it's unbounded to the left. 19:06:33 and if you can't go to the left of the first cell you can't make it anything other than 0. the tape is effectively fixed. 19:06:41 you can also consider making it 0 to 255 inclusive, or -128 to 127 inclusive 19:06:47 where overflows lead to undefined behavior 19:07:09 then its computational class would depend on its undefined behavior 19:07:43 "i=i++; // makes the language Turing-complete" 19:08:12 or overflow causes the cell pointer to move to the right 19:09:28 no no. overflow just causes the machine gives control to a malicious adversary with unlimited computing power, who'll want to make your program behave incorrectly 19:09:36 that's what undefined behavior means 19:10:02 wob_jonas: technically speaking, that could be TC too 19:10:04 or even uncomputable 19:10:15 it's like an oracle machine except the oracle is evil 19:11:02 it's not turing complete, because you can't easily translate any program from some other TC language to a program that always does the samd 19:11:18 there's no "easily" requirement 19:11:36 all you have to do is be very good at making it look like a specific course of action would be the most destructive to what you were trying to achieve 19:11:37 it has to be somewhat easily, otherwise you'd put all the computation in the translation 19:11:46 hmm, I feel a new esolang coming on 19:12:22 that said, the adversary has to be somewhat gullible or else they could just always return 0, or implement https://esolangs.org/wiki/Baby_Language, or something 19:13:23 ah, an monkey with typewriter language 19:14:40 s/ an m/ a m/ 19:15:50 I'm interested in its computational class, actually 19:16:09 this is more a question of how computational class is defined than anything else, though 19:17:03 sure 19:22:10 -!- variable has joined. 19:42:42 -!- APic has joined. 19:43:14 -!- Phantom_Hoover has joined. 19:59:14 I'm still in the midst of a crisis. any other automata I look at that's been proposed either need to abstract upwards to a TM or are extensional equivalents to a TM. 20:00:19 ? 20:02:41 ais523: so I've been looking into different kinds of automata. queue automata, 2-stack PDAs, tag systems, etc. 20:04:05 -!- laerling has quit (Quit: Leaving). 20:04:34 imode: isn't that because the queue stuff is even more inefficient than a one-tape turing machine, as in, sometimes you have to spend squared the amount of time? 20:05:01 imode: although you should of course look at counter machines and all their strange variations, those are even more inefficient 20:05:14 and from what I can see, using queue automata as an example, you're always going to just overlay a tape over whatever datastructure you've tacked on in order to do any algorithmic work. 20:05:35 wob_jonas: I figured, but you'd at least find some algorithms where you don't have to loop through the queue all the damn time, right? 20:05:53 like why else would you bother with any automata other than TMs then if you're just going to abstract upwards to a TM's tape? 20:06:25 I'd like to see something as trivial as binary addition on a queue automata. 20:07:13 I thought tag systems would be different but, sure enough, they rely on the same methods.. 20:09:17 imode: normally I end up going to counter machines (which can be programmed in directly) rather than tape machines 20:09:42 e.g https://esolangs.org/wiki/The_Waterfall_Model maps much more naturally onto a counter machine 20:09:54 and trying to simulate a TM into it you'd go via counteres 20:09:58 *counters 20:11:59 -!- imode1 has joined. 20:12:34 ais523: right, but throwing away just proofs of turing completeness, what the hell is the purpose of these automata other than just proving they're turing complete? 20:12:58 proving that other things are Turing complete 20:13:51 okay, that's fine, but you'd think that there are some classes of "native algorithms" that don't just resort to a simulation of a damn tape. :\ 20:14:25 -!- imode has quit (Ping timeout: 245 seconds). 20:14:36 It's sort of a funny hierarcy if you take a one-queue machine, a one-tape machine, a 2-tape machine, a 3-tape machine, a 4-tape machine, etc, and a pointer machine. there's only like a squaring slowdown (O(t**(2+epsilon)) steps for the slower when t steps on the bigger) between the top and the bottom one, but each one in the hierarcy can only simul 20:14:36 ate the next one with that square slowdown 20:14:50 imode1: a while back I was working on an optimised interpreter for counter machines 20:15:14 they are easier to optimise than Turing machines are, and counter machine programs ran faster than the equivalent Turing machine programs would have done post-optimisation 20:15:41 right, but I don't... care much about optimizations. I'm saying that there just doesn't exist a non-tape-oriented set of algorithms for shit like queue automata. 20:16:24 do you consider Thue to be tape-based? 20:16:37 that's pretty easy to implement on a general queue automaton 20:17:13 it is, and I've done it (queues are nice because they're effectively cyclical strings). 20:17:39 whereas with the tape you have to keep going back and forth 20:18:15 right. queues seem good for models of computation that require some rewriting rules. 20:18:45 but I've not really gone into translating things like "traditional algorithms" into thue-like rewrite systems. 20:19:12 the queue model also feels essentially concurrent 20:19:20 how so? 20:19:23 as you can do things on multiple places in the queue as easily as you can in just one place 20:19:26 ah. 20:19:31 whereas with a tape+tape head model, it's easier to stay in one place 20:19:42 -!- sebbu2 has joined. 20:19:46 so there are problems you can solve more efficiently on a 101-tape turing machine than on a 100-tape one, but they get rare above 3 tapes 20:20:18 "101-way diff", for example 20:20:20 something that I've been wanting to do is extend a queue automata with I/O. I feel that's easier than a traditional TM. 20:20:34 ais523: um, what's "101-way diff" 20:21:08 -!- sebbu has quit (Ping timeout: 256 seconds). 20:21:34 imode1: interactive IO? 20:21:34 wob_jonas: it's like a 3-way diff but bigger 20:21:42 wob_jonas: interactive, yeah. 20:21:45 ais523: yes, but what's 3-way diff in this sense? 20:22:04 this is just a guess, it seems like a reasonable one though 20:22:58 because with stuff like rewrite rules simulated on top of a queue automata, you can just do something easy like "request_for_input1 -> and you could also consider multi-stack machines, where every 2n-stack machine can simulate an n-tape machine efficiently, and every n-tape machine can simluate an n-stack machine efficiently 20:23:59 so it's sort of a different hierarchy probably 20:24:34 ais523: the obvious problem for that is simulating a 101-tape turing machine program, but that's sort of artificial 20:25:14 ais523: the problem with thue is also the intuition behind it. I can only speak from my ignorance but I don't see how you could create an algorithm that should be "intuitive" on a TM that's intuitive in a semi-thue system. 20:25:38 like it's fairly mechanical when you're working in a TM. you work on the basis of seeks and searches, and you can compose larger machines from smaller ones. can you do that in Thue easily? 20:28:31 Thue is best thought of as a combination of a) data pointers (somewhat TM-like), and b) pieces of data moving through other pieces of data (not at all TM-like) 20:28:45 composition is done at the level of unique symbols 20:29:00 i.e. you have some symbol that isn't used for data, and put that in all the rewrite rules that have a particular purpose 20:29:14 then they can't clash with each other, and that symbol in the string says where "that rule" is currently working 20:29:19 but you can have multiple heads, etc. 20:29:30 my interest is piqued. 20:30:18 oh, I think I see what you mean by 101-way diff, although that would be really hard to prove the complexity, but you can probably generate some slightly more tricky problem like that that's more believable to be provable 20:30:29 anyway, I have to leave now 20:30:38 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client). 20:30:42 I like the idea of multiple heads. 20:31:09 but my question is, you're essentially just simulating a traditional TM at that point right? states and all? 20:36:59 hm.. you could encode the state of the TM and the tape head as just a string of two (or more!) characters. then you could just plonk surrounding characters around that. 20:42:07 shoot, I gotta run. if you're alright with it, I'll be back in an hour ais523. I'd like to pick your brain if you're around! :) 20:43:25 cheers. 20:43:25 -!- imode1 has quit (Quit: WeeChat 2.1). 21:03:44 -!- arseniiv has quit (Ping timeout: 255 seconds). 21:06:05 -!- variable has quit (Quit: /dev/null is full). 21:09:03 Hm, I bet there's already an esolang where the code is the data... 21:09:20 I did have an idea for planar brainfuck... 21:13:25 [[Surtic]] https://esolangs.org/w/index.php?diff=55606&oldid=55601 * Digital Hunter * (-218) 21:33:52 -!- oerjan has joined. 21:41:39 -!- AnotherTest has joined. 21:48:39 -!- AnotherTest has quit (Ping timeout: 268 seconds). 21:49:32 I implemented a lot more stuff in Free Hero Mesh now, including the class loading, and functions to read the levels/solutions from those files or the user cache as applicable, and the SQL execute mode, etc. If you like to, you can help too such as to draw the logo, to write the picture editor program (it would be an external program, probably), and/or to write complaints about it. 21:52:22 (And I am glad they added upsert now in SQLite, since Free Hero Mesh internally uses it in one function.) 21:53:34 Also I got a message with valgrind that one of the loss records says zero bytes are definitely lost (and then specifies what function); it is supposed to do that, and if so, why? 21:54:01 [[Esolang talk:Community portal]] https://esolangs.org/w/index.php?diff=55607&oldid=55604 * Oerjan * (+256) /* How do you make userboxen? */ Mostly you don't 21:54:13 > userboxen 21:54:15 error: Variable not in scope: userboxen 21:54:56 . o O ( someone will now link a userbox on the wiki i don't know about ) 21:55:33 On what wiki? Does esolang wiki have a user box? 21:55:54 no, but Kaa-Kun asked about them. 21:56:36 and there are enough pages on the wiki i haven't looked at or don't remember, that someone _may_ have made one. 21:56:58 Still it should be possible to do without needing to add any additional extensions. 21:57:08 (I think) 21:57:15 . o O ( also upsert totally looks like someone made a typo ) 21:58:09 Userboxen should be the official plural. 21:58:48 Maybe, but it does not seem to be a typo. It means a INSERT command that also has a ON CONFLICT ... DO UPDATE afterward to update instead of insert in case there already is such a record in the table. Apparently it was from PostgreSQL at first, but now SQLite has it too. 21:59:24 ok 22:00:02 rdococ: OKAY 22:00:30 * oerjan didn't notice the plural until you mentioned it 22:04:11 of course i'm old enough to know about it. but these days we need to be gender neutral, so clearly the plural should be userbcattle hth 22:05:08 `? bcow 22:05:09 bcow? ¯\(°​_o)/¯ 22:08:54 -!- erkin has quit (Quit: Ouch! Got SIGIRL, dying...). 22:10:10 Having shift, reset and a fork instruction would probably be sufficient for concurrent delimited continuations... <-- does intercal have SPOON or KNIFE? 22:10:25 That is problem of English (and many other) language, not having suitable gender neutral pronoun and someother gender neutrals sometimes 22:10:32 oerjan: Not any version I know. 22:10:37 PLEASE ABSTAIN FROM KNIVING SPOONS 22:10:37 Make it up if you like to do so. 22:10:49 oerjan: those sound like Snowflake instructions 22:11:06 …it's probably a good thing this language is implemented or else they might not exist any more 22:11:10 *is unimplemented 22:11:27 hmm, it seems that Snowflake has SPOON and FORK but not KNIFE 22:11:37 Brachylog has a knife instruction, but it doesn't do flow control 22:12:24 in Snowflake, fork … spoon is quite close to a parallel map 22:12:39 but you can run them unpaired if you want to 22:16:06 (the point of having a map instruction is that Snowflake needs to do complicated calculations in a reversible way, so it's "main" flow control commands must be ones that are inherently terminating) 22:18:14 -!- imode-desktop1 has joined. 22:18:40 -!- imode-desktop1 has quit (Client Quit). 22:18:59 -!- imode-desktop1 has joined. 22:19:04 Quantum Malbolge should hash the program securely before executing it, so programming in it would require calculating reverse hashes (with current, classic cryptography, it's easy for quantum computers but not classical ones). <-- i don't think that's easy for quantum computers. 22:19:24 -!- imode-desktop1 has quit (Client Quit). 22:19:42 -!- imode-desktop has joined. 22:20:08 you could get a square root speedup with grover's algorithm, but nothing enormous. 22:21:36 hi imode-desktop 22:21:48 hey ais523. just testing out the new weechat. 22:21:59 as scott aaronson mentions in his latest blog post, cryptography _other_ than public-key isn't really cracked easily with QC. 22:22:31 imode-desktop: a good example of something that Thue-alikes are good at is bracket matching 22:23:37 if you just want to check for matchedness and not preserve the data, you can replace () with the null string, which is something that's much more complex in a Turing machine 22:23:45 but suppose you want to preserve the pattern too 22:24:19 you can do something like replace ) with x], ]x with x], )x with x), [x with x[, and (x with [ 22:24:44 the idea is that each ) spawns an x, and the x's flow to the left until they reach an open parenthesis, at which point they're consumed 22:25:22 if any escape to the left, there are unmatched ), and if there are unmatched (, one of them will be left unchanged without becoming [ 22:25:53 the x's here act like miniature data pointers which are just looking for a bracket to match 22:27:39 that's... beautiful. 22:28:39 the #1 most annoying thing about writing Thue is that if you want characters in group 1 to be able to move past characters in group 2, you have to write all the cases out individually 22:28:47 apart from that it's a really beautiful language 22:29:00 that makes sense. almost like wire crossing. 22:29:13 you could auto-generate that. 22:29:25 yes, or just generate a variant that has wildcards 22:29:44 I suppose I should just look into naive string rewriting, ala Thue. do you have any resources/literature you could point me to? 22:31:23 not really, I've mostly just been figuring things out myself as I go 22:31:35 makes sense. it struck me as a relatively unexplored area. 22:32:57 I've just been wondering about scaling upwards. I wonder what a simulation of a random access machine would look like in Thue. that's one step to getting somewhere close to "usable". 22:33:28 same with a thue interpreter in... thue. 22:34:59 you'd have to limit the character set, thue suffers from not escaping its input 22:35:48 that said, thue would be quite bad at self-interpreting because it's not normally very good with handling two different things at the same time (as you need to keep moving them through each other to get them to the right relative positions) 22:36:03 and when interpreting thue, you have three things to handle at once (working string, search string, replacement string) 22:37:20 I assume you'd have to have the equivalent of a tape division. 22:38:42 construct the equivalent of a multi-tape turing machine and map each tape to each component, scanning through the input one cell at a time.. but then you're back to abstracting towards a TM. 22:38:44 the queue model also feels essentially concurrent <-- did you see my update to the underload construction in fueue, that's relevant 22:39:36 I think I might have /seen/ it but I can't remember what it was 22:40:06 imode-desktop: well you can make use of the nondeterminism, if it is genuine nondeterminism 22:40:11 but most thue interps don't implement that 22:41:41 ah yes, I remember now 22:41:47 (now that I've looked at it) 22:42:50 [[SimPPLe]] https://esolangs.org/w/index.php?diff=55608&oldid=53107 * Kaa-kun * (-13) Reedireect 22:43:50 ais523: I guess there's potential. what I'm looking to do is stupid but I'm exploring translating traditional game models (like roguelikes, text adventures, anything that involves some abstract interaction between entities that may contain arbitrary codes) to different models of computation, and I've been on a descent to find the most "convenient" one to use. 22:44:40 imode-desktop: you might want to talk to Lymia (who was trying something quite similar) about this 22:45:01 but that's a good idea, I'm also interested in the results of this 22:45:43 the possibility of interactive I/O and "clean extendability" of whatever model I choose would also mean I get to work with the multiplayer aspect. 22:46:13 much like how many people have extended brainfuck with I/O and network capabilities. 22:46:38 I've been thinking about this from the other direction (i.e. creating a new paradigm for games programming) 22:46:52 I combined something like three old languages I was working on and am really happy with the direction it's going in 22:46:59 Hm. idea: call spaghetti queue 22:47:04 but it's all ideas so far, and possibly will be forever as this is daunting to spec, let alone implement 22:47:35 I feel that. the hardest part for me is trying to translate different object behaviors to moves of a TM tape head. 22:48:42 it's kind of degraded into a "multi-user programming environment" based on really small automata. 22:49:45 because when I started taking into account the behaviors that MUDs offer, for example, it turns out that you just need the ability to execute arbitrary programs that respond to the world state and external player/object events. 22:50:16 the basic idea is a) objects can be created and persist even when not referenced, they have to be explicitly deleted; b) object fields cannot be directly modified but you can attach modifiers to them, some fields are calculated, and some fields are calculated as integrals of other fields so you can store data in the constant of integration; c) collisions between objects (with a simple or maybe even complex collision-detection algo) are a first-class 22:50:17 part of the language, and are the only way to do "discrete" operations like creating and deleting objects; d) collisions may be based on things other than positions but they occupy a sort of "conceptual space" which has a speed of light (thus "distances" are actually measured in time, with c=1) 22:51:24 that last bit is interesting to me in particular, have you ever seen this?: https://mitpress.mit.edu/books/conceptual-spaces 22:52:02 I haven't 22:52:13 from the abstract it's unclear if the book is describing the same thing as me or not 22:52:16 the tl;dr is "guy tries to map properties of objects to quality dimensions, and starts sketching out figures that represent concepts and individuals." 22:52:16 I guess they might be different but similar 22:53:20 probably different, but you're the only other person I've seen using the term "conceptual space", so I had to at least ask. ;) 22:53:53 Hm. idea: call spaghetti queue <-- . o O ( call FSM ) 22:54:03 it's more similar than I thought it would be 22:54:22 my method is intended as a model of computer thought, though, not a model of human thought, so it's much simpler 22:56:06 oerjan: Perhaps stack frames with multiple parents could return to all of them concurrently, or maybe the stack frame would be able to choose which parent to return to. 22:58:19 A "call FSM" would be, most likely, a call directed graph, which would allow for cycles of stack frames that return to eachother. I'm unsure of the uses for it, though. 22:58:43 `le/rn call cthulhu//Call Cthulhu is the most destructive calling convention. 22:58:45 Learned 'call cthulhu': Call Cthulhu is the most destructive calling convention. 22:59:34 "call finite state machine" is basically how Verity works 22:59:41 it doesn't support (non-tail) recursion for obvious reasons 22:59:51 "DEALLOCATE THE KRAKEN!" 23:00:02 -!- danieljabailey has quit (Quit: ZNC 1.6.5+deb2build2 - http://znc.in). 23:00:21 -!- danieljabailey has joined. 23:00:29 ais523: what I'm noticing is the "ultimate game" turns out to be something akin to Ready Player One's oasis, or the Metaverse. not something that has any specific game behavior, but a simple multi-user environment (can be single user as well) that starts off as a simple shell, but can evolve to contain different kinds of interactive game objects. 23:01:05 so basically a codenomic 23:01:14 if you wanted to build a forest with some birds in it that hunt and peck for seeds on the ground, you could plop some graph nodes down, write some behavior for the bird, write some behavior for seed growth, and bam. 23:01:32 kinda, yeah! 23:03:10 I think that things like the old MUDs/MOOs probably got closest to that 23:03:14 Ooh, a codenomic 23:03:14 modern games tend to be a lot more controlled 23:03:19 yeah. 23:03:50 I don't know why they never took off. there are ways to make those types of worlds graphical, more interactive. 23:04:02 the closest thing I can see is Second Life. 23:04:04 but that's a barn fire. 23:07:32 probably because it conflicts with the usual monetisation model 23:07:42 charging for skins and emotes is not really worth much when players can create anything 23:07:52 you'd have to do something like charging for anything that's blue, or the like 23:08:09 There is still the MUDs that you don't need any graphics 23:09:44 right, but I've not really seen any that are too terribly "out there". let's face it, a lot of the languages that these things are built with suck. and their toolkits are largely game-focused (at least the ones I've seen are.) 23:10:55 I think you're right that Second Life is close to what you're looking for, at least in concept 23:11:08 the execution, of course, could be much better 23:11:23 definitely. imho their first mistake was trying to work within 3D space. 23:12:14 starting with 3D is not the way to go in my eyes. that kind of abstraction is best left to the logic you define later, not a job for your core systems to manage. 3D mesh data should be an afterthought, and well-considered one at that... 23:12:58 the early MUDs had it right. flat objects in memory with a loose communication mechanism that tied them all together, so you could have abstract rooms or entire spaces full of interacting objects and players. 23:13:02 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 23:13:45 the next logical step is the graph of rooms, as with many MUDs. dedicated door objects that can speak to eachother and whoever uses them, so you can coordinate teleportation at the object level, _not_ have it as an engine builtin. 23:14:24 after that, you can add positional movement on top of the room layout, and even things like SL's grid, just by tying rooms together and being smart about prefetching objects from a certain range out in your renderer. 23:15:20 What I know is how ifMUD works; there are many objects having locations, and fields on objects, and exits on both items and rooms 23:15:25 I think the killer there is "choose your interaction". you can either have room-based movement, or location-based movement within rooms, or positional movement as well. 23:16:39 but imagine you're just using this thing for collaberation? you can pull 4 people into a room, 2 of them create objects, and the other 2 act as QA, trying to break what's been made. 23:18:32 these kinds of environments aren't just suited towards game-like content, they're essentially multi-agent systems, where the players are the agents and the programmers! 23:23:05 -!- olsner has quit (Ping timeout: 240 seconds). 23:23:26 the starting point to all of that, I guess, is finding a solid base, which is why I've been concerned with automata. 23:27:48 -!- oerjan has quit (Quit: Nite). 23:36:13 -!- sebbu2 has changed nick to sebbu. 23:38:27 -!- doesthiswork has quit (Ping timeout: 256 seconds). 23:40:44 -!- imode has joined. 23:42:34 -!- olsner has joined. 23:52:56 Hm, might start trying to design my own b{markup language}. 23:55:24 https://esolangs.org/wiki/Start-reset_markup_language is fairly inaccurate - the IRC control codes for formatting are toggles, so \b turns bold off if it's already on.