00:03:29 -!- variable has quit (Ping timeout: 276 seconds). 00:03:56 -!- tromp has quit (Ping timeout: 244 seconds). 00:08:38 -!- nfd9001 has joined. 00:13:03 -!- LKoen has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”). 00:18:16 -!- erkin has quit (Quit: Ouch! Got SIGIRL, dying...). 00:31:00 -!- variable has joined. 00:34:21 -!- trout has quit (Ping timeout: 240 seconds). 00:39:15 -!- tromp has joined. 00:41:44 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 00:44:09 -!- tromp has quit (Ping timeout: 264 seconds). 00:51:17 -!- XorSwap has joined. 00:54:54 -!- nfd9001 has quit (Ping timeout: 260 seconds). 01:03:03 -!- trout has joined. 01:05:53 -!- variable has quit (Ping timeout: 276 seconds). 01:08:19 -!- brandonson has quit (Ping timeout: 260 seconds). 01:09:43 -!- brandonson has joined. 01:32:55 -!- tromp has joined. 01:34:06 -!- sftp has joined. 01:34:22 -!- variable has joined. 01:37:21 -!- tromp has quit (Ping timeout: 240 seconds). 01:37:44 -!- trout has quit (Ping timeout: 276 seconds). 01:42:28 [[BF instruction minimalization]] https://esolangs.org/w/index.php?diff=56686&oldid=56678 * A * (-117) /* Good news */ 02:02:11 [[User talk:A]] https://esolangs.org/w/index.php?diff=56687&oldid=56684 * A * (+60) /* Turing-completeness */ 02:05:23 -!- trout has joined. 02:08:56 -!- variable has quit (Ping timeout: 276 seconds). 02:12:39 [[Special:Log/upload]] upload * A * uploaded "[[File:Brainloller Truth machine.gif]]" 02:14:07 [[Truth-machine]] https://esolangs.org/w/index.php?diff=56689&oldid=56601 * A * (+61) /* brainfunct */ 02:22:42 -!- olsner has quit (Ping timeout: 260 seconds). 02:26:17 -!- tromp has joined. 02:28:30 -!- olsner has joined. 02:28:43 -!- sebbu2 has joined. 02:30:08 -!- sebbu has quit (Ping timeout: 256 seconds). 02:30:40 -!- tromp has quit (Ping timeout: 244 seconds). 02:36:26 -!- variable has joined. 02:40:08 -!- trout has quit (Ping timeout: 276 seconds). 02:42:21 -!- olsner has quit (Ping timeout: 240 seconds). 02:49:38 -!- olsner has joined. 03:02:04 -!- olsner has quit (Ping timeout: 260 seconds). 03:05:49 [[Shorten your Brainfuck code]] https://esolangs.org/w/index.php?diff=56690&oldid=56474 * A * (+502) /* An improvement */ 03:07:36 -!- trout has joined. 03:10:41 -!- variable has quit (Ping timeout: 276 seconds). 03:14:37 -!- trout has quit (Quit: /dev/null is full). 03:14:43 -!- olsner has joined. 03:19:33 -!- olsner has quit (Ping timeout: 256 seconds). 03:24:19 -!- variable has joined. 03:41:27 -!- variable has quit (Quit: Found 1 in /dev/zero). 03:48:37 -!- olsner has joined. 03:52:14 [[Shorten your Brainfuck code]] https://esolangs.org/w/index.php?diff=56691&oldid=56690 * A * (+210) /* Explanation */ 04:09:50 [[Truth-machine]] https://esolangs.org/w/index.php?diff=56692&oldid=56689 * A * (+86) /* brainfuck */ 04:12:19 [[Truth-machine]] https://esolangs.org/w/index.php?diff=56693&oldid=56692 * A * (-86) /* brainfuck */ 04:12:51 -!- tromp has joined. 04:14:19 [[Truth-machine]] https://esolangs.org/w/index.php?diff=56694&oldid=56693 * A * (+76) /* brainfuck */ 04:17:06 -!- tromp has quit (Ping timeout: 244 seconds). 04:35:50 [[Special:Log/upload]] upload * A * uploaded "[[File:Shorer Brainloller Truth Machine.gif]]" 04:35:51 [[Special:Log/upload]] overwrite * A * uploaded a new version of "[[File:Shorer Brainloller Truth Machine.gif]]" 04:36:54 [[Truth-machine]] https://esolangs.org/w/index.php?diff=56697&oldid=56694 * A * (+80) /* Brainloller */ 04:37:33 [[Special:Log/upload]] upload * A * uploaded "[[File:Shorter Brainloller Truth machine.gif]]" 04:39:00 [[Special:Log/upload]] overwrite * A * uploaded a new version of "[[File:Shorter Brainloller Truth machine.gif]]" 05:06:58 -!- tromp has joined. 05:11:27 -!- tromp has quit (Ping timeout: 240 seconds). 05:51:14 Probably the duplicate file "Shorer Brainloller Truth Machine.gif" should be deleted. (Converting to PNG and avoiding the dithering, is also good to have) 06:04:05 -!- variable has joined. 06:29:17 -!- tromp has joined. 06:33:51 -!- tromp has quit (Ping timeout: 240 seconds). 06:37:20 -!- trout has joined. 06:39:44 -!- variable has quit (Ping timeout: 265 seconds). 07:07:35 -!- tromp has joined. 07:08:24 -!- variable has joined. 07:11:11 -!- trout has quit (Ping timeout: 276 seconds). 07:12:54 -!- XorSwap has quit (Ping timeout: 260 seconds). 07:39:13 -!- trout has joined. 07:42:23 -!- variable has quit (Ping timeout: 276 seconds). 08:01:05 -!- imode has quit (Ping timeout: 248 seconds). 08:06:47 -!- nfd9001 has joined. 08:09:53 -!- variable has joined. 08:13:35 -!- trout has quit (Ping timeout: 276 seconds). 08:33:13 -!- AnotherTest has joined. 08:41:55 -!- trout has joined. 08:44:47 -!- variable has quit (Ping timeout: 276 seconds). 09:13:41 -!- variable has joined. 09:16:20 -!- trout has quit (Ping timeout: 265 seconds). 09:17:06 -!- SopaXorzTaker has joined. 09:44:25 -!- trout has joined. 09:47:50 -!- variable has quit (Ping timeout: 276 seconds). 09:58:36 -!- sebbu has joined. 10:00:04 -!- sebbu2 has quit (Ping timeout: 256 seconds). 10:15:33 -!- variable has joined. 10:19:02 -!- trout has quit (Ping timeout: 276 seconds). 10:26:19 -!- Phantom_Hoover has joined. 10:47:17 -!- trout has joined. 10:50:14 -!- variable has quit (Ping timeout: 276 seconds). 11:11:20 -!- S_Gautam has joined. 11:17:55 -!- variable has joined. 11:21:31 -!- trout has quit (Ping timeout: 265 seconds). 11:49:07 -!- trout has joined. 11:52:38 -!- variable has quit (Ping timeout: 276 seconds). 11:57:01 -!- sebbu2 has joined. 11:58:30 -!- sebbu has quit (Ping timeout: 256 seconds). 12:20:12 -!- variable has joined. 12:23:23 -!- trout has quit (Ping timeout: 265 seconds). 12:48:31 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds). 12:52:19 -!- trout has joined. 12:55:17 -!- variable has quit (Ping timeout: 265 seconds). 13:16:00 -!- aloril__ has joined. 13:18:26 -!- aloril_ has quit (Ping timeout: 276 seconds). 13:20:57 -!- S_Gautam has quit (Quit: Connection closed for inactivity). 13:23:10 -!- variable has joined. 13:23:32 -!- erkin has joined. 13:26:53 -!- trout has quit (Ping timeout: 276 seconds). 13:27:27 -!- S_Gautam has joined. 13:29:21 -!- SopaXorzTaker has quit (Ping timeout: 240 seconds). 13:30:06 -!- Phantom_Hoover has joined. 13:33:42 -!- SopaXorzTaker has joined. 13:48:05 -!- SopaXT has joined. 13:49:03 -!- SopaXorzTaker has quit (Ping timeout: 244 seconds). 13:53:34 -!- Phantom_Hoover has quit (Read error: Connection reset by peer). 13:54:52 -!- trout has joined. 13:56:14 -!- SopaXT has changed nick to SopaXorzTaker. 13:58:05 -!- variable has quit (Ping timeout: 276 seconds). 14:27:31 -!- variable has joined. 14:30:21 -!- trout has quit (Ping timeout: 240 seconds). 14:32:17 -!- LKoen has joined. 14:57:49 -!- trout has joined. 15:01:47 -!- variable has quit (Ping timeout: 276 seconds). 15:29:47 -!- variable has joined. 15:32:59 -!- trout has quit (Ping timeout: 276 seconds). 16:01:03 -!- trout has joined. 16:03:47 -!- variable has quit (Ping timeout: 265 seconds). 16:13:23 -!- ais523 has joined. 16:20:55 -!- imode has joined. 16:25:51 int-e: imode: re efficiency of tarpits, Minsky machines are inherently slow if you execute them a step at a time but tend to be fairly easy to optimise 16:26:11 meanwhile, Turing machines are missing a capability that most implementations of Turing machines in lower-level languages have: the ability to insert and delete tape elements 16:26:40 so a Minsky machine is probably going to be more efficient than a Turing machine if you have a good optimiser 16:26:48 I was working on one a while back but never finisehd it 16:31:16 ais523: my question is, to do anything useful, you need to use godel numbering. 16:31:26 this means I need arbitrarily large numbers. 16:31:54 I think any language needs arbitrarily large data structures 16:32:03 numbers are a good choice for a tarpit because they're so flexible 16:32:18 right, but what does it buy me? 16:32:30 the ability to treat a number as an opaque object 16:32:47 you can't really do that with, say, a tape section in a Turing machine, you need to know things about its structure and the like 16:33:00 -!- variable has joined. 16:33:04 with numbers, you can just store them inside other numbers using exponents of primes or whatever 16:33:28 it's massively inefficient if you look at the size of the numbers, but a sufficiently smart compiler can reverse that and decompose them back into the actual data structures 16:33:29 what does that buy you practically, though? it also relies on arithmetic. 16:34:07 well, the simplest tarpits we know of either use numbers directly to store data, or else counts of things to store data (which is very comparable to using numbers) 16:34:11 I think I'd rather just work on strings of symbols. if I have to build something "sufficiently smart" to hack around the inefficiencies of the automata/model I'm working with... 16:34:33 apart from maybe cyclic tag, which arguably uses strings 16:34:33 ais523: So basically you'd be working with a stack machine then? 16:34:39 (multi-stack machine that is) 16:35:15 int-e: right, nearly always counter-machine tarpits, the TC proof starts by implementing a stack machine (or another counter machine that implements a stack machine, etc.) 16:35:47 imode: well, again looking at tarpits, they tend to have an (implicit or explicit) data pointer, which means that dealing with a string has similar performance properties to dealing with a number 16:35:51 -!- trout has quit (Ping timeout: 240 seconds). 16:35:54 as you have to move the pointer along it to accomplish anything 16:36:14 right but they admit to a mechanical representation. 16:36:24 one discrete location to the next. 16:36:45 a number's just a string of digits, though, right? 16:37:15 the only real difference between a string and a number is that the string enforces what base it's in, and a number doesn't inherently have opinions on that 16:40:23 -!- imode1 has joined. 16:40:24 -!- imode1 has quit (Read error: Connection reset by peer). 16:40:27 -!- imode has quit (Ping timeout: 240 seconds). 16:46:00 -!- XorSwap has joined. 17:04:32 -!- trout has joined. 17:07:53 -!- variable has quit (Ping timeout: 276 seconds). 17:17:14 -!- XorSwap has quit (Ping timeout: 260 seconds). 17:18:56 -!- XorSwap has joined. 17:21:29 -!- tromp has quit (Remote host closed the connection). 17:27:33 [[Special:Log/delete]] delete * Ais523 * deleted "[[File:Shorer Brainloller Truth Machine.gif]]": Duplicated file: this is the unused copy out of the two; both were uploaded by the same user at about the same time 17:29:42 -!- tromp has joined. 17:35:39 -!- variable has joined. 17:38:51 -!- trout has quit (Ping timeout: 240 seconds). 17:41:18 -!- tromp has quit (Remote host closed the connection). 18:05:52 -!- tromp_ has joined. 18:07:17 -!- trout has joined. 18:07:50 -!- LKoen has quit (Remote host closed the connection). 18:10:17 -!- variable has quit (Ping timeout: 276 seconds). 18:27:07 -!- imode has joined. 18:27:16 ais523: sorry I dropped out earlier, lemme review the logs. 18:27:24 damn cell service. 18:37:42 -!- tromp_ has quit (Remote host closed the connection). 18:37:50 ais523: right, but when I consider writing an algorithm for dealing with structures like adjacency matrices, 2D arrays, and other structures, I don't think "wow, that could be represented as a number", I think of the transformations required to work on parts of the structure. 18:38:15 -!- variable has joined. 18:38:16 I guess I don't see how transformations via arithmetic are somehow more suitable than just simple string substitutions. 18:39:03 especially when you need glorified bignums to do it.. 18:39:08 I guess I like the transformations to be built out of the smallest building blocks possible, because it makes them more general and places fewer assumptions about what they can be used for 18:39:25 smallest building blocks possible? what about things like thue? 18:39:34 what about things like fractran? 18:39:49 based on arbitrary arithmetic operations. 18:39:54 that's basically "Thue for numbers" and is more general/elegant (a Fractran program will normally be shorter than a Thue program for the same thing) 18:40:10 I'm not sure how you can say that unless you have an example. 18:40:27 fractran is multiset rewriting, not string rewriting. 18:40:45 afk. 18:41:34 Thue is very bad at moving data from one place to another because the use of a string inherently gives the data locations 18:42:08 that said, I don't have a concrete example of Fractran being golfier than Thue because few people have tried to golf either, it's more an educated guess 18:42:08 -!- trout has quit (Ping timeout: 276 seconds). 18:42:36 a Fractran self-interpreter is pretty short, though, and a Thue self-interpreter isn't even possible unless you limit the alphabet a bit, in which case the size is at least quadratic in the size of the alphabet 18:56:09 -!- tromp has joined. 19:00:57 -!- imode has quit (Ping timeout: 264 seconds). 19:03:08 -!- imode has joined. 19:03:26 ais523: I'm actually working on that... by using special prefixes. 19:04:33 -!- lambdabot has quit (Remote host closed the connection). 19:05:44 -!- int-e has quit (Quit: leaving). 19:06:53 I don't think that giving data a location is a bad thing. in fact I think it as required in order to... do useful things. you're going to be doing the same thing with FRACTRAN. 19:07:02 only you're just wrapping it up in a sequence of arithmetic options. 19:07:23 -!- lambdabot has joined. 19:08:00 well, it's about visibility 19:08:04 in Fractran, the data is just kind-of there 19:08:08 you don't have to move it to the right place first 19:08:24 but you're going to end up doing that anyway. I get that you strip ordering but.. 19:08:32 -!- LKoen has joined. 19:10:15 it's amazing how much more efficient a few global variables can make a program 19:10:24 -!- trout has joined. 19:11:33 if you really wanna convince me, translate this into FRACTRAN: https://ptpb.pw/qrUV/text 19:12:30 it's my variant of thue, and I have an interpreter for it. I'd be interested to see how you'd do it with a queue as well. 19:12:50 or this, which is a pseudo-drawing program: https://ptpb.pw/vO8Q/text 19:12:51 -!- variable has quit (Ping timeout: 240 seconds). 19:13:56 that first one is, what, unary RPN? 19:14:14 yup. 19:14:21 but it parses a command set. 19:14:24 I might have a go later, there are more important things I'm supposed to be doing first 19:14:29 also, it's not parsing 19:14:39 you're using Thue tokens directly as commands 19:14:48 pedantic, aren't we. 19:15:22 nah, it's relevant here, because it's important for getting the equivalence between the two programs right 19:15:43 that doesn't disqualify the fact that you have to.. do that. 19:16:16 imode: you'd have to do that in either direction! 19:16:36 define how the I/O works, that is 19:18:14 right, so "given a sequence of commands, simulate a stack machine with addition and subtraction." 19:18:29 yep 19:19:58 -!- int-e has joined. 19:20:04 I'd like to see how it ends up being... so-called better. 19:20:17 it's not hard to reason about these transformations. 19:20:30 but I cannot imagine what it's like in multiset rewriting systems like FRACTRAN. 19:21:10 come to think of it I'd imagine that program fits Thue very well because it uses exactly two stacks in a way that doesn't require an extra encoding layer 19:21:19 if you were trying to implement a TC language (i.e. program plus /two/ stacks) it'd be a lot messier 19:21:32 workin' on that. 19:22:16 planning on having a "label" stack. on a return, seek back to the return stack, fetch a label, and seek forward until you hit your label. 19:22:59 that's not even the only way to do it. I like the way you can use "signals" to carry information. 19:23:05 -!- XorSwap has quit (Quit: the creeping crawling chaos will return.). 19:26:21 -!- SopaXorzTaker has quit (Remote host closed the connection). 19:28:22 I'm also working on a preprocessing pass that'll add some additional features that makes the language a little easier to use. for example, the addition of "stateful strings" indicated by prefixes on every symbol. so certain rules only apply to symbols prefixed with a given "state". 19:29:37 [[Special:Log/upload]] upload * Zzo38 * uploaded "[[File:Brainloller Helloworld.png]]": Small version of Brainloller_Helloworld.gif 19:29:49 aaaaaaaaargh. 19:30:41 (colors) 19:31:08 rainbow. 19:32:00 [[Brainloller]] https://esolangs.org/w/index.php?diff=56701&oldid=56673 * Zzo38 * (+37) 19:33:00 imode: I usually hide in an attempt to keep what is left of my sanity. 19:33:15 entering this place implies a lack of it. 19:33:17 ;) 19:39:54 uh, I meant to write "I usually hide colors" there 19:40:09 But the omission worked rather nicely. 19:41:41 -!- variable has joined. 19:42:03 > let variable = variable in variable 19:42:07 *Exception: <> 19:45:11 -!- trout has quit (Ping timeout: 276 seconds). 19:55:14 -!- wob_jonas has joined. 19:56:17 int-e: hi 19:56:18 ais523: re numbers, yes, a very good example for that is Amycus, which is nominally defined to work on numbers, but actually works with binary trees, and an efficient implementation would have to use binary trees as the representation, becuase otherwise the numbers would grow too large 19:56:33 as in, not just exponentially large, but tetration large 19:58:20 Numbers are neat 19:59:00 and yes, the Turing-completeness proof of Consumer Society and the proof that it can also efficiently simulate a register machine (up to polylog slowdown) both use a two-stack machine 19:59:52 the two-stack machine can directly simulate a one-tape Turing machine, and you use the two stacks to store arbitrarily large numbers which you use as addresses to simulate a register tree manipulation machine 20:00:35 you're actually simulating a RAM machine with addresses, but I don't like RAM machines because there's too many different ways to define them and no one nice canonical one 20:01:28 Thue is pretty similar to a Turing machine with insertion and deletion 20:01:31 as is a two-stack machine 20:02:09 interestingly, there are at least two proofs though that I can use to simulate a two-stack machine, and both are interesting because either of them don't use the full power of Consumer Society, but it's two different things that they don't use 20:02:46 Consumer Society doesn't seem to be on Esolang 20:02:54 but Consumer Society is not a tarpit, it's not easy to simulate 20:03:04 ais523: yes, it's a future language that I'll write up at some point 20:03:14 and I'm keeping its actual mechanics a secret until that 20:03:54 is it covered under ITAR? 20:04:08 what's an ITAR? 20:05:03 international traffic in arms regulations. 20:05:23 that joke about national secrets fell flat. 20:06:00 is that the thing why the license of some commercial software says that you can't sell them to Cuba or North Korea? 20:06:09 kinda yeah. 20:06:39 What is Consumer Society? 20:06:46 Not an esolang I can find on the wiki 20:06:56 Lymia: a future esolang that I will document eventually 20:07:07 I've had it in my head for like a year 20:07:32 I consider it very elegant, but YMMV 20:08:25 it's not like the tarpit languages of ais523 which try to be easy to simulate and hard to program, but it's like ais523's languages in that it has only very few operations because the programmer can just simulate everything else. 20:08:53 mine vary in how hard they are to program in 20:09:02 being hard to program in isn't an end goal, it's just a side effect 20:09:38 I have never actually designed an esolang for the sake of being an esolang 20:09:39 hmm 20:10:16 what do you mean as "the sake of being an esolang"? 20:10:23 ais523: yes, exactly 20:10:50 Lymia: me neither. this just popped out as I examined non-eso languages and what operations they can do and noticed that a certain few operations are enough to do everything 20:11:10 "increment target" and "dereference" :-P 20:11:50 or "increment counter" and "try to decrement counter if nonzero, conditional goto depending on whether it was zero" 20:11:58 S, K, and I? 20:12:09 ais523, I did a dumb thing for a Minecraft server plugin back in the day 20:12:14 it was an esolang because it had to fit on Minecraft signs 20:12:22 which are the two operations that Minsky or StackFlow have 20:12:53 If I was to do it again, I'd just implement Golfscript. :P 20:13:05 -!- trout has joined. 20:13:10 wob_jonas: the typical counter machine has four operations (increment, decrement, zero test, goto), which can be minimized by grouping them in various ways 20:13:21 Lymia: I doubt it, GolfScript is an "environment-execution-tied" language 20:13:38 i.e. its semantics inherently rely on the language it's implemented in (IIRC Ruby?) 20:13:48 and implementing it in anything else would require a Ruby interpreter 20:14:05 I personally consider these languages very inelegant but it's common among golfing languages 20:14:10 (and I have one of my own, A Pear Tree, which is tied to Perl) 20:14:22 (but it doesn't try to hide it, like, e.g. GolfScript does) 20:14:37 . o O (JVM/CLR esolang that retains the esolang flavor) 20:15:02 Oh wait, that's just Clojure 20:15:16 ais523: yeah, I sort of prefer to assume the kind of counter machine that has no linear order of statements, but just states and one or two next state pointers in each state 20:15:19 Lymia: just try to tarpit the JVM 20:15:33 and that's how I imagine the heap-allocating tree machine too 20:15:35 it's close to an esolang in its own right, but it more resembles those BF derivatives that add far too many commands than anything else 20:15:45 Turing machines are usually defined that way too 20:15:55 JVM/CLR assembly themselves are... surprisingly reasonable. 20:16:09 the odd thing is that you can't use its stack for TCness as you need to statically bound how high it is at every point in the program 20:16:16 There's 0 magic, unlike our friend SPIR-V 20:16:18 please don't call JVM bytecode reasonable :-( 20:16:23 -!- variable has quit (Ping timeout: 276 seconds). 20:16:29 I have worked with it for my day job, it's one of the more unreasonable ASMs I've seen 20:16:49 why use a stack for most things, but registers for local variables and arguments, for example? (this is the exact opposite of how most asms do it) 20:17:37 ais523: hehe. whereas lua uses a stack for the local variables and function arguments, just like typical C to real processor compilers do 20:17:55 why require that a pointer uses one stack slot and a 64-bit integer uses two? on any non-32-bit system, that's just going to require special cases to implement that behaviour specifically 20:18:17 (Because it was defined before 64-bit was a thing) 20:18:31 I think JVM actually still has 32-bit pointers on 64-bit too? Via some deep magic 20:19:32 ais523, what I should say is 20:19:37 It's not unreasonable or tarpitty to use. 20:19:49 not tarpitty, sure 20:19:53 I consider it to be unreasonable though 20:21:08 I suspect it's an encoding size concession, actually 20:21:25 The way Java/C# expressions work pretty easily translate into RPN, basically. 20:22:10 Since it's stack-based, there's no basically redundant location operands in every opcode. 20:22:23 In effect, it has local variables and expressions in RPN. 20:22:45 the way modern Java toolchain work is to basically translate the Java into JVM as literally as they can 20:22:55 and then decompile it and recompile it into something that's remotely optimised within the runtime 20:23:05 can you suggest interesting runs of games that aren't too well-known from either SGDQ 2018 or ESA Germany 2017? I don't have time to watch everything, but I'd like to see cool runs of games I don't yet know. 20:23:20 I have a huge suspicion that the reason why Java JITs ended up becoming so good is that the AOT compilation is so bad 20:23:38 Don't bother with the weell-known games like Super Metroid or Super Mario 64 that is, I can already guess which of those I can watch. 20:23:40 wob_jonas: I personally like Axiom Verge, the SGDQ run of it is perfectly adequate 20:24:11 Axiom Verge, ok, will look at that 20:24:22 in general though you'll prefer the run more if you like the game / its genre 20:24:22 ais523, I wish Scala didn't take after javac's model of compilation 20:24:23 because 20:24:34 I'm not sure the JVM can really optimize some of the stuff it outputs. 20:24:48 Lymia: I've lost track of just how bad javac's optimisation is 20:24:55 it is comparable to gcc -O0, probably a bit worse 20:24:55 ais523: sure. I don't like fast-paced 3D games for example. 20:25:05 real 3D that is, where the player moves in 3D 20:25:13 but you're OK if it's slower? 20:25:29 ais523: yes, in particular I like GTA Vice City runs because they're slower paced 20:25:58 There are the Pokemon RBY runs. 20:26:01 Which are....... 20:26:03 well 20:26:19 Lymia: I've already seen the two game one controller Pokemon blue and yellow 20:27:43 I remember there being a glitched 151 pokemon race? 20:28:00 Lymia: wasn't that last year? or winter? 20:28:07 idk 20:28:16 oh 20:28:17 no wait, that was the blindfolded glitched race 20:28:24 It wasn't this year, no 20:28:27 that one is amazing 20:28:41 ais523, a JVM/CLR tarpit would be interesting. 20:28:41 they did all the menu manipulation glitches blindfolded 20:28:55 It'd need to be still a tarpit while capable of... 20:29:10 At minimum: Defining classes with supertypes, implementing interfaces, overriding methods, doing basic OO operators 20:29:14 I'm trying to figure out what properties of JVM bytecode even give it its TCness 20:29:31 this year was blue and yellow glitchless with the same controller 20:29:46 I don't think it's possible to create two stacks without using objects to create linked lists, assuming integers have capped sizes 20:29:54 (otherwise you can realloc arrays to get your storage) 20:30:20 I believe the JVM is only TC with the use of objects 20:30:27 ais523: isn't it the built-in classes like arrays that give it TC-ness the easiest way, just like in smalltalk on ruby? 20:30:40 arrays aren't classes 20:30:52 this sentence has caused several /months/ of additional work for one of my coworkers 20:31:03 arrays aren't a class? 20:31:07 no 20:31:08 What do you work on, such that this is an issue for you? 20:31:09 I don't actually know JVM 20:31:10 or, well 20:31:12 array classes exist 20:31:18 but arrays themselves don't act like objects of a standard class 20:31:45 Lymia: well, part of my job is low-level JVM hacking 20:32:21 oh man, you don't want to know the ugly details I found out about VBA (Visual Basic Automation) recently. it's a very old language, but still used, and it's very ugly. 20:32:28 As in, like, what does your company do that necessitates that? 20:32:48 wob_jonas: VBA is something like the third programming language I learned 20:32:52 and it was my main language for years 20:32:52 they have a dictionary type in its standard library, but no easy way to sort a fucking array. the dictionary doesn't help because it's not a sorted one, it's an unordered one. 20:32:56 at the time I didn't know better 20:33:11 -!- xa0 has quit (Excess Flood). 20:33:20 ais523: I'm luckier, I learned word basic, the original macro language from words 2 and word 6. 20:33:29 Lymia: I'm a research programmer, my job's basically to implement ideas for new programming languages / techniques that other researchers come up with 20:33:36 .. ah. 20:33:45 And you've targeted the JVM before? 20:33:48 That makes sense. 20:33:56 it's kind-of mindblowing that I effectively ended up with a job in esoprogramming 20:34:06 -!- xa0 has joined. 20:34:08 My first real programming language was Java. 20:34:20 I don't use Java anymore unless I need to 20:34:30 in this case I'm working with existing Java code and attempting to transform it in ways that preserve its semantics 20:35:18 ais523: and I ended up with a job (that I think of as temporary) where I program VBA. it's not like I wanted to program VBA, but that's the programming interface a certain commercal program offers, so I have to use it at least in part. 20:35:25 Ooooh 20:35:43 there are a lot of people working on this, though; I'm mostly working on the runtime 20:35:44 Idea for a JVM tarpit: The only thing the language can do are field accesses, and method calls. 20:35:50 I partly use it to export data to a file and then parse that file with a saner programming language, but this still involves a lot of digging around in VBA and its interface 20:36:04 Lymia: isn't that javascript? 20:36:17 Javascript still has math operators :P 20:36:18 And such 20:36:32 "math operations" 20:36:53 I'm a mathematician and I don't think javascript addition and subtraction are math operations 20:37:22 you know, like the php == operator, but even more weird 20:38:06 So. 20:38:24 []+=` 20:38:28 Can you create a useful Java program with only if(), field accesses, and method calls? (Not even literals) 20:38:30 but yeah, it also has builtin while loops and such 20:38:36 That could be reduced into an esolang, I think 20:38:38 Lymia: you don't need if 20:38:51 Church booleans are the way to go here 20:38:59 oh right 20:39:18 If this language can define objects 20:39:30 ais523: so just embed lambda calculus in it, creating functions from strings with the same trick that jsfuck does? 20:39:40 It can make implicit branches via virtual methods. 20:39:44 So, no need for if. 20:39:50 public class ChurchTrue implements ChurchBoolean { @Override public if_(Supplier ifFalse, Supplier ifTrue) { return ifTrue.get(); }} 20:40:05 oh wait, you mean java 20:40:08 not javascript 20:40:10 sorry 20:40:16 wob_jonas: you cannot use the same trick as JSFuck in Java 20:40:24 yeah 20:40:26 although []+=` is the minimum known TC character subset of JavaScript 20:40:31 sorry, I just thought of javascript 20:40:50 Lymia: do you mean without method definitions? 20:40:51 this mostly relies on how hideously overloaded + is 20:40:56 as in, you only call built-in methods? 20:40:58 eventually we start using it to call functions 20:41:09 wob_jonas: where would you put the calls? 20:41:11 hrm 20:41:21 ais523: a single main method, I'd say 20:41:33 I don't think this is doable without some access to method definitions. 20:41:38 But, maybe. 20:41:48 in Java you can't even write any code without defining a method 20:42:00 but you'd use the built-in library and call standard methods from it 20:42:00 Also, we need a sufficiently esoteric syntax. :B 20:42:18 You need some way to get access to "machine" bools/ints 20:42:23 To call into the stdlib and do anything useful. 20:42:46 I think "Church Java" might be more interesting 20:42:55 but it's basically just typed lambda calculus with a ridiculously verbose syntax :-D 20:43:29 That sounds Java-like 20:43:40 well, yes 20:43:41 -!- variable has joined. 20:43:43 "ridiculously verbose" is sure an description of that language 20:45:03 modern Java isn't as bad as it used to be, but it's still quite bad 20:45:32 instead of defining the ChurchTrue class you could just write «(f,t)->t.get()» whenever you wanted to use it 20:45:37 as long as the type was clear from context 20:45:43 I do kinda want this to be "OOP taken ridiculously far" in how it feels. 20:45:52 But reducing it to actually FP concepts implemented using OOP functions is... 20:45:54 not that 20:46:17 isn't smalltalk already OOP taken ridiculously far? 20:46:25 Too much OOP, and you have 100 classes that each do nothing. This is a language where classes can't do anything but call other stuff. 20:47:01 -!- trout has quit (Ping timeout: 265 seconds). 20:47:27 A perverse enough language that BigInteger.ONE may be your best way of actually getting your hands on the ability to do math. 20:48:18 you could probably wrangle up something out of the streams API 20:50:13 Syntatically, a method body can just be a list of method/function/etc names. 20:50:49 java.math.BigInteger.ONE; java.math.BigInteger.ONE; java.math.BigInteger.add(java.math.BigInteger); 20:51:51 this language seems to have a severe lack of being able to store things long-term, due to the lack of a dup 20:52:07 there's no way to produce more than one of a value 20:52:25 which means that you can't, say, use an array to store things because once you read one of the elements, all the others will be lost 20:52:27 Right, since there's also no multiple return. 20:54:49 The simplest escape clause is the ability to reference method arguments multiple times, right? 20:55:52 It acts as a dup without there being an obviously "doesn't belong here" operation 20:56:38 Lymia: yes, but that's not enough 20:57:03 What would be missing? 20:57:57 I was thinking of a language that only has function definitions, where functions call other functions or conditionals, but no currying or function pointers, and it's not TC in itself, you need some way to store data, such as arrays or heap-allocated pairs or something 20:58:07 you'd only have a call stack, which isn't TC in itself 20:58:37 you can compile any program to a single-stack machine with limited depth 20:58:40 um 20:58:48 limited depth of how deep you can reach the stack that is 20:58:59 you know, just the ordinary one-stack machines 20:59:36 Isn't this enough to implement some subset of lambda calculus? (Assuming there's access to defining/implementing JVM interfaces) 20:59:45 Or, well. 20:59:48 All of it, basically 20:59:55 Lymia: no, because there are no function pointers or closures 21:00:15 of partially bound functions 21:00:19 wob_jonas: apart from the "separate way to store data" you're thinking of https://esolangs.org/wiki/Splinter 21:00:29 Objects in Java can have virtual methods, and ctors effectively create closures. 21:00:36 (Assuming you can treat constructors as static methods) 21:02:46 Lymia: that might be enough 21:03:15 Lymia: constructors are instance methods in the JVM, IIRC 21:03:26 you construct an uninitialised object first then call the ctor on it 21:03:40 The language implementation can paper over this minor quibble :P 21:05:37 ais523: if you learned VBA, can you tell if I'm missing something stupid, or it really doesn't have any easy way to sort an array? 21:06:04 I learned it when I was much younger and less understanding of programming style 21:06:11 I've seen actual sort implementations online on stack overflow or something 21:06:14 I don't think I even /used/ arrays 21:06:28 I mostly used it with Excel and placed values into the cells to do an array-like storage 21:06:28 which seems to suggest that there is no built in 21:06:42 I see 21:14:11 https://pastebin.com/bLLqghKq 21:14:18 A quick sketch of how this language could look 21:15:29 -!- trout has joined. 21:16:15 They are soon adding big integer arithmetic into JavaScript though, I think it is a good idea because then 64-bit integer arithmetic is possible (it is also helpful when you need unbounded integers, but they can also be used as 64-bit integers when that is what you need). 21:18:47 -!- variable has quit (Ping timeout: 276 seconds). 21:19:49 -!- tromp has quit (Remote host closed the connection). 21:32:05 -!- moei has quit (Quit: Leaving...). 21:38:43 -!- LKoen has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”). 21:45:53 -!- variable has joined. 21:49:47 What are some cool implications of the continuum hypothesis (or its negation)? 21:49:59 -!- trout has quit (Ping timeout: 276 seconds). 21:51:41 I don't know 21:57:01 -!- variable has quit (Quit: /dev/null is full). 21:58:14 -!- variable has joined. 21:58:33 -!- variable has quit (Client Quit). 21:59:19 -!- variable has joined. 21:59:20 -!- variable has quit (Client Quit). 21:59:51 -!- variable has joined. 22:00:06 -!- variable has quit (Client Quit). 22:04:10 -!- tromp has joined. 22:08:27 -!- tromp has quit (Ping timeout: 240 seconds). 22:09:08 -!- XorSwap has joined. 22:26:19 -!- imode has quit (Quit: WeeChat 2.1). 22:28:59 -!- AnotherTest has quit (Ping timeout: 276 seconds). 22:37:20 -!- tromp has joined. 22:41:27 -!- tromp has quit (Ping timeout: 240 seconds). 22:47:37 Surely this exists somewhere as an esolang. 22:48:04 A language with no explicitly defined text representation, and a well-defined IPA pronouncation 23:13:07 -!- imode has joined. 23:19:50 -!- moei has joined. 23:30:36 -!- tromp has joined. 23:35:49 -!- tromp has quit (Ping timeout: 260 seconds).