00:11:49 -!- tromp has quit (Remote host closed the connection). 00:16:52 -!- FreeFull has quit. 00:51:53 -!- tromp has joined. 00:53:00 -!- 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:56:02 -!- tromp has quit (Ping timeout: 246 seconds). 02:01:01 -!- oerjan has joined. 02:23:59 i am not sure Dart interpreted ` correctly, but then i'm not sure there is a correct interpretation - the author is A under a previous alias. 02:24:58 it made no sense before, no it sort of makes sense 02:25:00 *now 02:47:35 `slwd moony//s,moony,moon,;s,moon,moony, 02:47:37 moony//moony is often named the following: moonthedwarf moonythehuman moonheart08 moony moon__ noomy computing and luxon, making porthellos and @tells a real pain. 02:47:46 oops 02:47:48 `revert 02:47:49 Done. 02:48:23 `slwd moony//s,moony ,moon ,;s,moon,moony, 02:48:25 moony//moony is often named the following: moonythedwarf moonythehuman moonheart08 moon moon__ noomy computing and luxon, making porthellos and @tells a real pain. 02:51:36 TODO: request rename on esolangs <-- not sure that's supported 02:51:55 awww 02:52:07 could just dump my account and make another 02:53:10 I think it might be. 02:53:54 Or at least I think I thought about it. There's a Renameuser extension, which we probably don't have installed at the moment, but I remember it came up. 02:54:36 Well, there's a Renameuser extension, and there's a UserMerge extension, I don't think we have either. 02:55:34 UserMerge is probably slightly more general, because you can decompose "rename A to B" into "create B, merge A into B", but not the other way around. 02:56:31 moony: your backlink from wikipedia should use https twh 02:58:34 it'a not? 02:58:38 whoops 02:58:41 will fix 02:59:35 also, you remain the only member of "Wikipedians who like empty categories". 02:59:44 I know 03:04:44 =8ball test 03:04:44 Outlook not so good 03:04:46 =8ball test 03:04:47 Outlook not so good 03:04:50 =8ball test 03:04:51 Outlook not so good 03:04:57 looks deterministic. 03:05:16 i conclude that kspalaiologos cheated even more than i thought to get the last quote 03:05:43 also, i am now capable of typing his name without rechecking *MWAHAHAHA* 03:14:29 -!- kingoffrance has joined. 03:48:02 erm, nick. 03:48:33 his wretched polish name is still beyond me. maybe the first part. 04:09:00 -!- xkapastel has joined. 04:45:52 [[LogOS]] https://esolangs.org/w/index.php?diff=67518&oldid=67486 * IFcoltransG * (+342) Added truth machine example program 04:45:57 =8ball test 04:45:58 Outlook not so good 04:50:38 =8ball tset 04:50:39 Outlook not so good 04:53:17 [[Truth-machine]] https://esolangs.org/w/index.php?diff=67519&oldid=67235 * IFcoltransG * (+339) /* Implementations */ Added logOS 04:55:04 [[LogOS]] M https://esolangs.org/w/index.php?diff=67520&oldid=67518 * IFcoltransG * (+12) Linked to the pages for each implemented program 04:57:00 [[LogOS]] M https://esolangs.org/w/index.php?diff=67521&oldid=67520 * IFcoltransG * (+25) Restructured page and headings 05:02:35 [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=67522&oldid=67459 * IFcoltransG * (+82) Added logOS 05:04:49 -!- elliemae has joined. 05:05:38 -!- Lord_of_Life_ has joined. 05:05:43 -!- Lord_of_Life has quit (Ping timeout: 245 seconds). 05:06:59 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 05:17:18 =8ball foo 05:17:19 Concentrate and ask again. 05:19:41 =8ball foo 05:19:46 =8ball foo 05:19:47 Concentrate and ask again. 05:19:55 yeah determinism at its finest. 05:23:54 ^8ball is deterministic 8ball bad? 05:23:54 Yes. 05:24:18 there you go. 05:47:57 they better hope trogulus doesn't have more nefarious intentions involving those people (alternative 1: to kill off the remaining dome survivors, alternative 2: they're secretly sea creatures like him) 06:10:41 hm are _both_ petey and the pa'anuri trying to trick the other into thinking they are stupid? 06:11:01 and is anyone succeeding? 06:11:39 and is this a proper way to use "both"? 06:36:16 -!- tromp has joined. 06:45:47 [[LogOS]] https://esolangs.org/w/index.php?diff=67523&oldid=67521 * IFcoltransG * (+285) Added etymology 06:48:14 -!- imode has quit (Ping timeout: 268 seconds). 07:03:02 -!- tromp has quit (Remote host closed the connection). 07:10:50 -!- ellie_ has joined. 07:13:27 -!- elliemae has quit (Ping timeout: 250 seconds). 07:17:13 -!- tromp has joined. 07:20:17 [[Special:Log/newusers]] create * Scoopta * New user account 07:26:17 [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=67524&oldid=67503 * Scoopta * (+237) Introducing myself 07:26:34 [[Text]] https://esolangs.org/w/index.php?diff=67525&oldid=60949 * Scoopta * (+139) Added information about computers that use text as their native language 07:30:35 -!- ellie_ has quit (Quit: Leaving). 08:18:09 -!- b_jonas has quit (Remote host closed the connection). 08:46:58 [[List of ideas]] https://esolangs.org/w/index.php?diff=67526&oldid=65778 * IFcoltransG * (+46) /* Implementation */ 09:00:29 -!- heroux has quit (Ping timeout: 276 seconds). 09:21:45 -!- heroux has joined. 09:33:11 [[Special:Log/newusers]] create * Arial * New user account 09:33:49 [[List of ideas]] https://esolangs.org/w/index.php?diff=67527&oldid=67526 * IFcoltransG * (+108) /* General Ideas */ 09:37:42 [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=67528&oldid=67524 * Arial * (+252) /* Introductions */ 09:40:10 [[MagiStack]] https://esolangs.org/w/index.php?diff=67529&oldid=44698 * Arial * (+1) /* 99 bottles of beer */ 09:42:16 [[User:Arial]] N https://esolangs.org/w/index.php?oldid=67530 * Arial * (+43) Created page with "Just a computer science student passing by~" 10:13:16 -!- oerjan has quit (Quit: Nite). 11:42:32 -!- ais523_ has joined. 11:42:52 int-e: modern CPUs have integer vector units in addition to floating-point vector units 11:43:06 I'd expect them to either be the same speed, or else the integer operations to be faster 11:45:05 moony: renaming accounts on MediaWiki installations requires extensions that Esolang doesn't have, so it's normally easier to just create a new account (although persuading fizzie to install an account-renaming extension is an interesting alternative) 11:51:07 [[`]] https://esolangs.org/w/index.php?diff=67531&oldid=67513 * Ais523 non-admin * (-33) this is a finite state automaton, because it has a bounded number of accessible cells and a bounded value for each cell 11:56:41 [[Talk:The Temporary Stack]] N https://esolangs.org/w/index.php?oldid=67532 * Ais523 non-admin * (+194) I don't think that's a real quine 11:56:50 [[Talk:The Temporary Stack]] M https://esolangs.org/w/index.php?diff=67533&oldid=67532 * Ais523 non-admin * (+30) timestamp 11:58:29 -!- ais523_ has quit (Remote host closed the connection). 12:10:28 what is a non-real quine? 12:29:27 -!- arseniiv has joined. 12:55:05 myname: in this case, it's a non-quine. 12:59:52 It may be an attempt at a cat program but it falls short even for that. 13:02:01 i agree 13:02:10 what is the v100 at the end even supposed to do 13:03:26 it just pushes a number of 100s onto the stack depending on the length of the user input? 13:06:02 I don't know, maybe the idea was to squeeze everything currently on the stack? 13:06:24 -!- ArthurStrong has joined. 13:06:43 But I don't really care either... the squeezing mechanic is cute, but there isn't much to actually work with in that language. 13:08:38 fungot: are you squishy? 13:08:39 int-e: why do laptops suck for webdev? they run vim as graphical, although it hints at the areas elsewhere, but cmcs might well offer the motivation to do it 13:13:45 -!- ArthurStrong has quit (Quit: leaving). 13:15:41 what do you mean by squeezing? 13:16:54 squishing 13:43:52 =8ball Is this my lucky day? 13:43:53 Signs point to yes. 14:20:52 -!- kritixilithos has joined. 14:51:46 oerjan wins again 14:55:33 -!- ArthurStrong has joined. 15:01:53 fungot: can you say "predicament"? 15:01:54 int-e: ummm......what were we talking about on an irc channel because a) it's the first program to access the value 864000 15:05:59 -!- kspalaiologos has joined. 15:14:17 -!- Cale has quit (Remote host closed the connection). 15:15:46 -!- Cale has joined. 15:52:46 -!- imode has joined. 16:36:24 `grwp accident 16:36:26 locale:Locales are just frames, which are just complete Heyting algebras. Taneb accidentally invented them by asking about lattices. The only locale available in #esoteric is en_NZ.UTF-8. \ poutine:Poutine was Pouti and boily's sister until the tragic cheese accident. 16:36:55 -!- int-e has left ("SURVIVING CHICKEN"). 16:36:55 -!- int-e has joined. 16:37:40 -!- ArthurStrong has left. 17:05:15 -!- Lord_of_Life_ has joined. 17:07:52 -!- Lord_of_Life has quit (Ping timeout: 265 seconds). 17:08:06 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 17:26:11 -!- imode has quit (Ping timeout: 250 seconds). 17:28:11 -!- imode has joined. 17:31:36 -!- tromp has quit (Remote host closed the connection). 17:35:57 -!- b_jonas has joined. 17:37:07 `just 17:37:08 https://hack.esolangs.org/tmp/just 17:37:31 Just checking. (No pun intended.) 17:37:34 . o O ( `learn Baba is you ) 17:37:42 I’ve seen just the other day 17:38:08 -!- tromp has joined. 17:38:13 Baba is just you. 17:38:56 `just xor 17:38:57 https://hack.esolangs.org/tmp/just 17:39:05 whats this 17:39:21 It just greps all the 'is just' / 'are just' factoids and give you the link. 17:39:22 -!- tromp has quit (Remote host closed the connection). 17:39:23 `cbt just 17:39:24 grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > $HACKENV/tmp/just && url $HACKENV/tmp/just 17:39:24 grwp '(is|are) just' | sed -e 's/:/ :No such command. Try =help. 17:40:22 `? locale 17:40:24 Locales are just frames, which are just complete Heyting algebras. Taneb accidentally invented them by asking about lattices. The only locale available in #esoteric is en_NZ.UTF-8. 17:40:25 wait 17:40:26 what 17:40:28 bfbot 17:40:30 The part about en_NZ.UTF-8 is not strictly speaking true any more. 17:40:31 what the heck 17:40:39 `cbt jusrt 17:40:40 cat: /hackenv/bin/jusrt: No such file or directory 17:40:41 `cbt just 17:40:41 grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > $HACKENV/tmp/just && url $HACKENV/tmp/just 17:40:41 grwp '(is|are) just' | sed -e 's/:/ :No such command. Try =help. 17:40:49 how did that happen 17:40:51 `echo xyz 17:40:52 xyz 17:41:01 a = b 17:41:05 `locale -a 17:41:05 ::= 17:41:05 No such command. Try =help. 17:41:06 C \ C.UTF-8 \ en_GB.utf8 \ en_NZ.utf8 \ en_US.utf8 \ POSIX 17:41:09 umm what? 17:41:17 =list ::=echo xd 17:41:18 :=list xd 17:41:28 =echo dx ::=echo xd 17:41:29 :=echo dx xd 17:41:41 what the heck 17:44:38 arseniiv: hmm, more like Baba was you. 17:52:09 -!- tromp has joined. 18:03:46 -!- FreeFull has joined. 18:07:17 -!- LKoen has joined. 18:12:19 `which revert 18:12:20 No output. 18:13:09 -!- tromp has quit (Remote host closed the connection). 18:14:50 `help revert 18:14:51 ​`revert " can be used to revert to a revision. See . It is a builtin command so cannot be called from other commands. 18:21:32 <3 "the physical world, whose significance pales in comparison to the Platonic world of mathematical objects" 18:23:44 -!- kritixilithos has quit (Quit: quit). 18:24:59 int-e: I’m not done with that game yet :P 18:25:23 But the hype is over. :P 18:25:28 today I figured out the level with ghosts and skulls 18:25:48 Also, I've already forgotten everything. 18:26:36 int-e: the hype is transient, why should we take it into account?.. 18:26:37 I certainly don't recall individual levels :) 18:26:52 arseniiv: because Time is Move. 18:26:56 int-e: good, then you can play it once again! 18:27:17 Nah, too many other things to play. 18:27:33 like Noita? ;) 18:27:58 Currently, Broken Sword 2. 18:28:16 okay I’ll play BiY one level a week and will tease you each time about inconsequential things :P 18:28:20 I'm not into roguelikes at all. 18:28:36 arseniiv: You can do the latter without doing the former. 18:28:45 fungot: Are you of any consequence? 18:28:45 int-e: with my computer, brb later 18:28:57 I think I’m too, I tried Nethack and, well, I tried it and not much more afterwards 18:30:38 arseniiv: ghosts and skulls? you have to kill Phantoon and they disappear. 18:30:42 Uhm, did I just mix up Broken Sword and Gabriel Knight... they're not even remotely the same beyond being click&point adventures in a modern time fantasy setting. 18:31:46 b_jonas: which one this is from? :) 18:31:52 Anyway... it's just what I'm currently playing (GK2), not a recommendation (there are better click&point adventures around). 18:32:34 arseniiv: SNES Super Metroid 18:35:19 ah 18:35:22 [[Special:Log/newusers]] create * Lorlouis * New user account 18:35:34 arseniiv: heard about that but not played ever 18:36:18 more accurately, heard “Metroid” somewhere and that’s all 18:37:25 arseniiv: it's a very good game 18:37:30 best of the Metroid series 18:39:07 b_jonas: mm maybe I’ll give it a look in an emulator! 18:39:36 [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=67534&oldid=67528 * Lorlouis * (+177) /* Introductions */ 18:40:04 [[B sharp]] M https://esolangs.org/w/index.php?diff=67535&oldid=67092 * Lorlouis * (+1) /* Introduction */ 18:42:21 metroid prime is also a great member of the series. 18:42:30 still my favorite. 18:45:34 -!- tromp has joined. 18:57:50 -!- MDude has quit (Quit: Going offline, see ya! (www.adiirc.com)). 19:18:51 constructing an infix or a postfix parser using processes might be an interesting task. 19:23:11 -!- arseniiv has quit (Ping timeout: 276 seconds). 19:33:54 -!- MDude has joined. 20:00:26 =echo a\déx. 20:00:27 ad..x. 20:00:40 :( 20:15:31 I'm looking for a turing complete two-instruction-set computer that isn't a turning tarpit and doesn't operate on RAM. 20:24:10 [[Special:Log/newusers]] create * RGSW * New user account 20:31:45 imode: I think that's impossible. Non-tarpit implies that it offers you a nice variety of useful instructions, so you need at least six different instructions. 20:33:20 turning tarpit, not turing tarpit. 20:33:29 totally okay with a turing tarpit, that's kind of the point. 20:33:42 I don't know what a turning tarpit is then 20:34:03 https://esolangs.org/wiki/Turning_tarpit 20:34:36 you have a wheel of instructions, and your commands are "move to next instruction on the wheel" or "execute the currently selected instruction on the wheel". 20:34:42 or some variant thereof. 20:36:28 imode: in that case, combinator calculus with SK base, aka unlambda with only the s and k builtins 20:36:43 or lambda calculus, where the two instructions are lambda and function call 20:39:16 imode: or a Turing-machine with one tape and two tape symbols, where the two instructions are (0) move left, (1) flip the symbol under the head then move right 20:39:51 how is that TC? 20:39:56 there's a brainfuck variant like that, iirc invented by the bbc norvegian village, but a turing machine works better 20:40:10 I wanna see that BF variant. 20:40:27 imode: if you want to keep the symbol unchanged and move right, you can move right then left then right again 20:40:43 imode: and if you want to flip the symbol and move left, you can move right, then move left twice 20:40:58 so you can translate to this from an ordinary one tape two symbol turing machine 20:41:07 by replacing some of the instructions by a sequence of two or three instructions 20:41:30 yeah, I get that. I was thinking you had a minimal TM that you could chain together to form something that could simulate another TM or something. 20:41:39 what's that BF variant you mentioned, out of curiosity? 20:43:30 dunno, look at https://esolangs.org/wiki/BF_instruction_minimalization or something. or maybe P'' already does this 20:43:39 I think this combination was discovered independently by multiple people 20:43:45 two instructions? 20:44:01 no, for brainfuck it's more instructions because you count the control flow instructions [ and ] too 20:44:04 so that would be four 20:44:11 but for a TM, you could the control flow as not instructions 20:44:19 mm, true. 20:44:35 yeah, P'' already has such a combined move and write 20:44:41 https://esolangs.org/wiki/P%27%27 20:44:45 -!- zzo38 has joined. 20:44:48 then it was not invented by the bbc 20:44:56 the reason I 20:45:09 I'm asking is because my language is TC with only 4 instructions. 20:45:19 but I'm wondering if I can reduce that into two somehow.. don't see a possible way. 20:46:40 [[User talk:Zzo38]] https://esolangs.org/w/index.php?diff=67536&oldid=67510 * Zzo38 * (+217) 20:48:39 what are the instructions? 20:49:21 []01 20:49:40 [ is "dequeue a symbol. if it's a 0, jump to matching ]. otherwise, go to next instruction." 20:49:40 imode: |open quote 20:49:40 imode: | is "dequeue a symbol. if it's a 0, jump to matching ]. otherwise, go to next instruction." 20:49:40 imode: | ^ 20:49:45 oof. 20:49:48 sorry. 20:50:14 ] is "jump to matching [". 0 and 1 enqueue a 0 and a 1 respectively. so there's no movement instructions. 20:51:50 lol j-bot 20:53:16 -!- kspalaiologos has quit (Quit: Leaving). 21:01:05 [[User:PythonshellDebugwindow]] https://esolangs.org/w/index.php?diff=67537&oldid=67380 * PythonshellDebugwindow * (+12) 21:07:29 -!- Frater_EST has joined. 21:07:45 -!- Frater_EST has left. 21:12:32 -!- ais523 has joined. 21:12:48 I'm looking for a turing complete two-instruction-set computer that isn't a turning tarpit and doesn't operate on RAM. ← minimized https://esolangs.org/wiki/Brainpocalypse 21:13:28 ooo. 21:13:32 thanks! 21:13:50 it uses a finite circular tape of bignums, and two commands: - decrements the current tape element or restarts the program if it's 0; } moves to the next tape element then increments it 21:17:35 imode: you can also have a pointer machine with just two instructions. take a fixed number of registers, say 32 of them, one of them is initialized to the empty list at the start of the program. one instruction takes three register operands creates a new cons cell from two of them and puts it into the third. another instruction unconses a register, has three register operands and a jump target, if the 21:17:41 input operand is an empty list it jumps to the target, otherwise it puts the car and crd of that input to the two output registers. 21:18:43 -!- xkapastel has quit (Quit: Connection closed for inactivity). 21:19:18 (by "restarts the program" I mean "goto the first instruction", you don't reset memory or the tape pointer) 21:20:04 Karn disagrees with that 21:21:28 b_jonas: I assumed the instructions couldn't take arguments 21:21:37 otherwise it's trivial, e.g. https://esolangs.org/wiki/Tip does it with only one instruction 21:24:12 b_jonas: this reminds me: I will be unemployed for 1 day on Sunday; do you have any specific requests for changes to ayacc while I have the chance to work on it? 21:24:35 ais523: release it with the license to distribute it clarified 21:24:59 I'd prefer a license that allows anyone to distribute modified versions 21:25:54 Move left or flip and move right is P'', I think. 21:26:03 zzo38: yes 21:26:17 I eventually figured it out 21:26:21 took me too much time 21:26:32 b_jonas: it's GPLv3, and has been for ages 21:26:41 are you confusing it with something else? 21:26:44 ais523: in that case I don't have any request about ayacc 21:27:36 What are differences ayacc with yacc? 21:28:05 indeed, it has a header command saying GPLv3 now 21:28:30 -!- Frater_EST has joined. 21:29:00 zzo38: the output it writes is a more readable C program than the one that traditional table-based programs provide; it has a somewhat saner alternate api for how it integrates to a C program; 21:29:28 it allows for multiple backends so it can output programs in a language other than C or with a different api (eg. stackless), you can add your own; 21:29:51 it provides better error messages in case of a shift-reduce or reduce-reduce conflict in the language 21:30:02 (sometimes at least, it depends on the language) 21:30:10 and... there was something more but I forgot 21:31:10 -!- Frater_EST has left. 21:32:09 zzo38: see its documentation for details 21:32:16 `? ayacc 21:32:17 ayacc is ais523's yacc parser generator implementation, get it from darcs clone http://nethack4.org/projects/ayacc 21:37:13 ais523: so do you want to tell us what new job you're going to get? 21:37:21 OK I will look 21:38:03 I don't have darcs, is there another way? 21:38:53 I don't know 21:39:23 (other than installing darcs, obviously) 21:46:24 I have the common free software version control clients installed on my machine because people sometimes distribute files through version control repositories. So I have cvs, svn, git, bzr, hg, darcs, fossil. 21:57:11 -!- LKoen has quit (Remote host closed the connection). 22:04:17 -!- LKoen has joined. 22:12: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.”). 22:16:14 -!- ais523 has quit (Ping timeout: 265 seconds). 22:16:45 -!- ais523 has joined. 22:17:12 fizzie, ais523: do you mind when I add to the wiki articles about programming languages that are unusual and interesting and definitely not notable for Wikipedia, but technically not esoteric because the author used them for something constructive? https://esolangs.org/wiki/SIMPLE_(preprocessor) is such an article for example. 22:18:15 https://esolangs.org/wiki/MIX is even worse of course, for it's definitely not esoteric and it's notable enough for Wikipedia 22:18:25 argh, wrong link 22:18:29 https://esolangs.org/wiki/MIX_(Knuth) 22:18:30 ^^^ Same question from me 22:18:31 a language intentionally named after a lesser-known programming language almost certainly counts 22:18:43 that's some sort of "intention" to make a language esoteric 22:18:54 in general, though, this is an apparently major debate that I've always been wary of wading into 22:19:18 yeah, I wouldn't be surprised if you didn't want to give an answer to this, because other people may consider it an official position 22:19:46 and just keep the policy that such articles shouldn't be there but fail to enforce it when the language and article is interesting enough 22:20:30 I was also considering http://www.vttoth.com/CMS/index.php/projects/49 but I decided it wasn't esoteric enough 22:20:49 What is the Definition of „esoteric“? 22:20:55 `? esoteric 22:20:57 This channel is about programming -- for the other kind of esoterica, try #esoteric on EFnet or DALnet. 22:20:58 `?? esoteric 22:20:59 I must confess, I know not of what you are speaking. 22:21:00 `?? esolang 22:21:01 Esoteric languages. Usually refers to programming languages designed to be unique, difficult to program in, or just plain weird. See https://esolangs.org for more. 22:21:07 no, not that either 22:21:09 lol 22:21:14 https://esolangs.org/wiki/Esoteric_programming_language 22:21:24 It would rock if the Definition of „esoteric“ was esoteric. 22:21:26 that isn't a good description either 22:21:44 anyway, it's esoteric if it's designed without the intention that anyone will use it for any productive purpose 22:22:17 which would make MIX and Olvasható and SIMPLE non-esoteric 22:22:23 Yes, although MIX (Knuth) may still be notable enough for esolang wiki as well as Wikipedia, so is MMIX. I think if it is unusual and interesting in some ways and is not the stuff which is the commonly using programming language, it might be put in, either an article by itself or a short note on a user page. (Actually even VAX can have many mentions on a user page; see [[User:Ian/Computer_architectures]]; there is interest to have some details of it 22:22:26 Ok 22:22:32 fwiw, one of the reasons I haven't taken a strong stand on which languages are esoteric is that I have trouble defining it myself 22:22:45 Good 22:22:47 it's quite easy to intentionally create languages close to the boundary line, and then do so again if people move it 22:22:57 *nod* 22:23:10 My position can't be construed as official because I have pretty little to do with the wiki content, but I don't mind a relatively relaxed definition of esolang. 22:23:18 i know it when i see it 22:23:33 oh, that reminds me, this one is definitely esoteric so I'll add a TODO 22:23:36 there are accidental esoteric languages of course 22:23:39 Yes, intentionally creating languages close to the boundary line can be done. 22:23:43 [[User:B jonas]] https://esolangs.org/w/index.php?diff=67538&oldid=67386 * B jonas * (+11) /* Todo */ 22:23:49 like C++ templates or ROP gadget sets or other weird machines 22:23:50 I think there are some esolangs with intent for people to use them like normal languages (e.g. Funge-98), and some languages that are probably esoteric but are useful in practice (e.g. Retina) 22:23:59 exploit programming is pretty similar to esoprogramming 22:24:09 I think "I know it when I see it" is not a good policy for administrations. 22:24:16 true 22:24:18 there have been cases where I've wanted to write programs and an esolang (or wimpmode version of it) has been the best choice to write them in 22:24:24 ais523: yeah, Mouse was also definitely intended to be useful 22:24:35 but is removing things from the wiki particularly important? 22:24:42 Byt, yes, there is stuff like ROP, exploit programming, C++ templates, and other stuff like that. 22:24:44 fungot: Are you proving Funge-98 a non-esoteric language by being useful? 22:24:44 fizzie: did i have emacs which is basically... l(x) 1 x*l(x) fnord x) 22:24:48 ais523: can you give an example for that? 22:24:53 kmc: I think exploit programming is an example of a "found language", those tend to be similar to esolangs but with the difference that they aren't being actively designed by a human 22:24:54 I don't think that's Emacs. 22:24:59 ais523: yeah 22:25:05 what I called 'accidental esoteric languages' above 22:25:09 C++ templates are somewhere in the middle 22:25:12 fizzie: no no 22:25:21 TMP was first discovered and then augmented 22:25:27 fizzie: just because it's useful doesn't make it non-esoteric, as long as it was originally not intended as useful 22:25:31 b_jonas: the test driver for the CGCC polyglot is partially written in A Pear Tree (which was more convenient than Perl because I needed the repr builtin) 22:25:41 I put Qoppa on the wiki. I designed it to demonstrate an interesting concept, and as a sort of tarpit version of scheme, and because it tickles my happy place 22:25:47 I think stuff should not be removed from the wiki unless it is a waste of disk space or if it is clearly just "lakjselk jaslg" and not any proper writing that is meaningful in any possible kind of way. 22:25:47 it wasn't particularly designed to be difficult to program in 22:26:03 and I wrote the original Forte interpreter in a wimpmode version of Thutu, because it seemed like the easiest language to use 22:26:05 but it has an evaluation model very different from almost all extant languages 22:26:05 Funge-98 has the smell of being designed to be basically "Befunge, but useful". 22:26:11 lol 22:26:20 (well, maybe there are a few other possibilities, too) 22:26:25 zzo38: the spam pages should be made into real languages 22:26:33 likewise, there's at least one language that I implemented in Jelly, although competition languages are a little different from esolangs 22:26:34 my opinion is this: Languages everyone uses, like Rust, C++, Java, etc, and are explictly designed for everyone to use, do not belong on esolangs 22:26:43 like RFNHS3SDD 22:26:56 kmc: Yes, if you are able to do so. 22:27:04 ais523: yeah, and I suspect that blsq was used usefully as well 22:27:17 (in that they're designed for accomplashing a specific purpose, but are optimized for very different goals than normal languages are) 22:27:33 *accomplishing 22:27:34 moony: I think that is (mostly) reasonable. 22:28:06 zzo38: note i make an exception for languages intended for everyone to use, but not ment to be used in this universe 22:28:12 because why not 22:28:14 ais523: competition languages like the ones for ICFP? 22:28:26 b_jonas: no, languages designed for winning competitions 22:28:39 like Jelly is ment for winning codegolf competitions 22:28:42 mostly golfing languages, although in theory they aren't the only examples of the genre 22:28:45 moony: OK, although I do not quite understand how that is. 22:28:47 I see 22:28:51 „Every Input is a Program“ 22:29:32 the ideal competition language has a huge number of builtins and a lot of ability to cope with incompletely specified programs 22:29:57 the ICFP langs are very interesting too 22:30:00 I think they would count as eso- 22:30:05 if you're trying to come up with a working program as quickly as possible, for example, you want to be able to just translate the problem you're given into a working version of it 22:30:07 zzo38: i.e. languages ment to be used in fictional universes, like a programming language that was made for use in a sci-fi book 22:30:20 moony: O, OK. 22:30:24 Ook! 22:30:32 ais523: how about when someone asks a homework programming question on a forum, and I write an obfuscated program as a solution with the hope that they'll submit it for the homework, and that program involves an interpreter of a new domain-specific language? is that language esoteric then? 22:31:10 b_jonas: is anyone else going to use the DSL? No? Then I think it counts for esolangs. 22:31:12 b_jonas: I'm not sure whether domain-specific languages are automatically esoteric 22:31:27 ais523: it's not the domain-specific part that's relevant here 22:31:38 it could be a general purpose but small language 22:31:39 I think sometimes you will not know for now if anyone else is going to use the DSL 22:31:44 I think being a DSL is relevant here 22:31:53 possibly a write-only one that requires an assembler to use 22:31:53 because those are a language category of their own 22:31:59 DSLs are icky territory 22:32:02 is C-INTERCAL's internal DSL OIL an esolang, for example? 22:32:04 and I don't publish the assembler 22:32:06 because they can easily fall under my rules 22:32:29 something like https://esolangs.org/wiki/Help,_WarDoq! is definitely both a DSL and an esolang, just because the domain in question is so ridiculous 22:32:59 oh, you can certainly have a domain-specific esolang in general 22:33:30 the ICFP ant brain is one such language, 22:33:58 the issue is, I can imagine a language that's very similar to Help, WarDoq but invented for a much more practical purpose 22:34:04 I thought of making a esolang that's a DSP DSL 22:34:28 for example, there's a very simple programming language used as an on-the-wire format for telling electronic traffic signs what sign they should be showing 22:34:30 some strange eso way of defining signal processing pipelines 22:34:33 for audio and RF applications 22:34:33 which is basically the same thing 22:34:45 i thought of it being sort of concatenative 22:34:47 but I'm not sure that's even definable as a language, let alone an esolang 22:34:56 so you'd have a stack of things which are signals or matrices or filters or whatever 22:34:57 kmc: Yes lets see please 22:35:00 and you can apply them 22:35:03 idea: something that is definitely esoteric but only questionably a programming language 22:35:10 (esoteric in the programming sense, that is) 22:35:28 but instead of a normal step by step execution model it compiles into a streaming, possibly real-time process 22:35:39 I think once I did make a stack-based programming language for defining .XI instruments 22:35:41 ais523: there are a lot of esoteric/obfuscated programs that are clearly not languages 22:35:45 the only DSP I've ever used was entirely imperative 22:35:53 b_jonas: oh right, one-off programs 22:36:09 like the 99 bottles of beer program in Malbolge 22:36:13 primitive types would be complex numbers, matrices, and timeseries data 22:36:27 how do you make something like that /ambiguously/ a language, though? 22:36:28 (The data types are numbers, strings, audio samples (with an optional loop point), and functions (which can be built from other functions, too).) 22:36:30 an example program would be something like a FM broadcast radio decoder 22:36:49 it's easy to get I/Q samples from a RTL-SDR 22:37:11 and dump PCM data to a sound card 22:37:17 so the hardware aspect would be relatively accessible 22:37:18 fwiw, it would be nice to document more found languages on the wiki 22:37:32 ais523: how about a one-off program that has an interpreter in it for compression, but the interpreter is very specialized (DSL) that it's unclear if it's even an interpreter or just a nice table or compression format? 22:37:33 Yes, I would like to see how to do with that radio decoding and that stuff 22:37:45 things like the x86 (or was it x86_64) MMU, which is a bounded-storage machine 22:38:10 b_jonas: hmm, now you're reminding me of quines 22:38:20 b_jonas: If it is Turing-complete (even if not intended to be) then it might be notable. 22:38:31 oh yeah 22:38:41 ais523: how about OTTD signals? 22:38:42 a quine is a description of itself, but because it can't be a literal quote of itself (assuming it isn't a literal-only quine) it needs to define some shorthand for describing itself 22:38:50 b_jonas: OTTD? 22:39:02 open transport tycoon deluxe, the game with railway tracks 22:39:24 the signals (traffic signals to direct trains on railways) became quite capable and can evaluate boolean expressions 22:39:35 quine sounds like munchausen number 22:39:44 http://wiki.openttd.org/Main_Page 22:39:56 oh, that normally gets abbreviated to OpenTTD 22:40:02 yeah 22:40:03 I just didn't recognise the abbreviation you were using 22:40:45 then there's the unpack template language in perl, which happens to be way more powerful thank it should be https://www.perlmonks.com/?node_id=1008395 22:41:00 not turing-complete alone, but quite powerful 22:41:19 let me guess, you overwrite the format string while it's being decoded using some sort of pointer unpack? 22:42:03 no 22:42:21 aww 22:42:23 I don't think unpack can do that easily, it can only read from pointers, not write to it 22:42:24 although that might /actually/ be TC 22:42:33 (printf is TC for this reason) 22:42:38 yeah, C printf 22:42:48 although the arguments you have to give it are insanely undefined behaviour 22:43:50 Something I learned the other day: the 'l' and 'll' length modifiers are also applicable to %n, to convert the required argument from `int *` to `long *` or `long long *` respectively. 22:44:17 Someone over on ##c was complaining because their implementation's printf was unable to write more than INT_MAX characters of output. 22:44:49 that could in theory be a problem that comes up in a sane program 22:44:56 did you know that the XC8 compiler for PIC supports a "short long int" type? 22:45:17 glibc stops processing the format string and returns -1 with errno set to EOVERFLOW when the output exceeds INT_MAX. 22:45:23 kmc: wtf is short long? 22:45:23 fun, https://codegolf.stackexchange.com/a/112163 is still the only perl answer to the game of life interpreter question, even though it wouldn't be hard to write a more straightforward golfier implementation 22:45:34 imode: it's shorter than a long but longer than a short. 22:45:36 files bigger than 2GB aren't ridiculous, and using a printf("…%s…") to output them wrapped in a header and footer is mildly ridiculous but not indefensible 22:45:39 24 bits 22:45:39 kmc: that is awesome. 22:45:43 yeah 22:45:43 I think I remember a "short long" from somewhere. 22:45:49 and actually useful on embedded 22:45:55 ais523: Yeah, the program in question was unreasonable, though. 22:46:07 I wonder if avr-gcc has anything comparable 22:46:14 I'd expect long short to be shorter than int, and short long to be longer 22:46:22 ais523: yes, but these days, every C compiller has a long long type that's at least 64 bit long, and intmax_t must be at least that long 22:46:35 fwiw, Algol 68 lets you write arbitrarily many long or short, but not to mix them 22:46:45 seems it does have it, as __uint24 22:46:51 (there's the equivalent of a preprocessor definition you can consult to discover how many repeats will actually do something useful) 22:47:20 but any algol 68 impl should support long long long long long, even if it's just equivalent to long long 22:47:21 ais523: the old borland C compiler that targets 16-bit x86_32 lets you write any number of long, and interprets it as just long. it's a nice way to get programs silently break if they try to use long long. 22:47:41 `` echo 'long long long x;' | gcc -c -x c /dev/stdin 22:47:42 ​/dev/stdin:1:11: error: ‘long long long’ is too long for GCC 22:47:45 and it implies that choosing "long long" as the name of that type was a bad idea, but it's too late to undo that now 22:48:08 `` echo 'long short x;' | gcc -c -x c /dev/stdin 22:48:10 ​/dev/stdin:1:6: error: both ‘long’ and ‘short’ in declaration specifiers 22:48:21 `` echo 'short short x;' | gcc -c -x c /dev/stdin 22:48:22 ​/dev/stdin:1:7: error: duplicate ‘short’ 22:48:44 hmm, IMO the error messages should have had consistent levels of humour 22:48:59 `` gcc -c -x c <(echo 'long long long x;') # seems like a nicer way actually 22:49:00 ​/dev/fd/63:1:11: error: ‘long long long’ is too long for GCC 22:49:11 `! c long long long x; 22:49:12 Does not compile. 22:49:16 I keep forgetting about <(...). it's pretty great 22:49:36 `cc long long long x; 22:49:37 :1:11: error: ‘long long long’ is too long for GCC \ compilation terminated due to -Wfatal-errors. 22:49:41 `cbt cc 22:49:42 ​#!/bin/sh \ echo "$@" | sed 's/\\/\n/g' | gcc -w -Wfatal-errors -std=c11 -O2 -x c - -o /tmp/a.out && /tmp/a.out 22:49:43 ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c <<<$'int main(void) { signed unsigned x = {0}; return 0; }' 22:49:44 gcc: warning: '-x c' after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. 22:49:51 ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { signed unsigned x = {0}; return 0; }' 22:49:52 : In function 'main': \ :1:25: error: both 'signed' and 'unsigned' in declaration specifiers \ :1:34: warning: unused variable 'x' [-Wunused-variable] 22:49:58 `` gcc -c -x c <<<'long long long x;' 22:49:58 gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. 22:50:02 what's <<<$ 22:50:12 how did gcc's color output disappear by the way? 22:50:13 `` gcc -c -x c /dev/stdin <<<'long long long x;' 22:50:16 ``` type -a gcc 22:50:17 ​/dev/stdin:1:11: error: ‘long long long’ is too long for GCC \ long long long x; \ ^~~~ 22:50:19 gcc is /usr/bin/gcc 22:50:28 hmm 22:50:32 kmc: <<< pipes a literal into standard input 22:50:40 ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short char x = {0}; long char y = {0}; return 0; }' 22:50:41 : In function 'main': \ :1:24: error: both 'short' and 'char' in declaration specifiers \ :1:43: error: both 'long' and 'char' in declaration specifiers \ :1:48: warning: unused variable 'y' [-Wunused-variable] \ :1:29: warning: unused variable 'x' [-Wunused-variable] 22:51:01 ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float [[unused]] x = {0}; return 0; }' 22:51:03 : In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:30: error: expected identifier or '(' before '[' token 22:51:15 ``` gcc -Wall -std=c11 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float [[unused]] x = {0}; return 0; }' 22:51:16 : In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:30: error: expected identifier or '(' before '[' token 22:51:19 I think $'' is some sort of escaped string 22:51:27 `` gcc -c -x c <(echo 'short void x;;') 22:51:27 what? why doesn't it allow an attribute there? 22:51:28 ​/dev/fd/63:1:7: error: both ‘short’ and ‘void’ in declaration specifiers 22:51:42 ais523: yes, allows backslash escapes. useful because C needs newlines sometimes. 22:51:42 b_jonas: does C11 support that attribute syntax? 22:51:49 kmc: I think so 22:52:02 I think it's a C++ism 22:52:05 let me check 22:52:05 No, [[unused]] is C18. 22:52:18 there's a C18? 22:52:29 Yes, there's a C18. 22:52:35 ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float [[unused]] x = {0}; return 0; }' 22:52:35 : In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:30: error: expected identifier or '(' before '[' token 22:52:47 Was it even C18, or was it just in the latest C2x draft? 22:52:49 is this a major release like C11 was? or is it more of a C92 (or was it C94?) type of thing? 22:52:50 ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { [[unused]] short float x = {0}; return 0; }' 22:52:51 : In function 'main': \ :1:18: error: expected expression before '[' token \ :1:20: error: 'unused' undeclared (first use in this function) \ :1:20: note: each undeclared identifier is reported only once for each function it appears in 22:53:05 ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float x [[unused]] = {0}; return 0; }' 22:53:05 : In function 'main': \ :1:24: error: both 'short' and 'float' in declaration specifiers \ :1:33: error: expected expression before '[' token \ :1:34: error: 'unused' undeclared (first use in this function) \ :1:34: note: each undeclared identifier is reported only once for each function it appears in \ :1:30: warning: unused variable 'x' [-Wunused-variable] 22:53:13 ``` gcc -Wall -std=c18 -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { volatile short float x = {0}; return 0; }' 22:53:14 : In function 'main': \ :1:33: error: both 'short' and 'float' in declaration specifiers \ :1:39: warning: unused variable 'x' [-Wunused-variable] 22:53:36 fizzie: seriously, how did the colors of gcc output disappear? 22:53:39 ais523: It's more of a bugfix-only release with no new features. 22:53:45 `` gcc -fdiagnostics-color=always -x c <<<'int eger = x;' 22:53:46 ​[01m[Kgcc:[m[K [01;35m[Kwarning: [m[K‘[01m[K-x c[m[K’ after last input file has no effect \ [01m[Kgcc:[m[K [01;31m[Kfatal error: [m[Kno input files \ compilation terminated. 22:53:47 C18 addressed defects in C11 without introducing new language features. 22:53:56 OK, that would explain why there's no big fanfare about it 22:54:01 bugfix releases are good too, though 22:54:03 fizzie: yes, but how come it doesn't do that by default now? 22:54:13 b_jonas: It's probably because I made stderr piped into the same cat as stdout. 22:54:17 ah! 22:54:19 that's great 22:54:20 thanks 22:54:21 I assume previously it used isatty on 2. 22:54:48 Or, well, still does, but with a different result. 22:56:44 `` strace -e trace=ioctl gcc -x c <<<'int eger = x;' 22:56:45 ioctl(2, TCGETS, 0x7fbff589e0) = -1 ENOTTY (Inappropriate ioctl for device) \ ioctl(2, TCGETS, 0x7fbff58a00) = -1 ENOTTY (Inappropriate ioctl for device) \ gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. \ +++ exited with 1 +++ 22:57:27 I was idly wondering how isatty worked, then noticed fstat in the see also on the man page, so I was guessing it statted the file descriptor and looked at the device numbers 22:57:46 It does a tcgetattr() != -1. 22:57:55 `` strace -e trace=fstat gcc -x c 22:57:56 fstat(3, {st_mode=S_IFREG|0644, st_size=1579448, ...}) = 0 \ fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0 \ fstat(3, {st_mode=S_IFREG|0644, st_size=3040656, ...}) = 0 \ gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated. \ +++ exited with 1 +++ 22:58:27 (And tcgetattr devolves to ioctl.) 22:58:51 that seems broken, mightn't some other device use the same ioctl number? 22:59:06 ais523: there are several ioctls that work only on terminals, and yes, the one that implements tcgetattr is among them 22:59:20 ais523: that won't happen on Linux 22:59:25 I only know how it works because I was trying to figure out if there was a way to fake it that wouldn't involve running a cat process. 22:59:28 The second argument is a device-dependent request code. 22:59:29 and glibc can rely on linux-internal stuff like that 22:59:48 ais523: glibc. this doesn't need to be portable to all systems. 22:59:55 if it works on linux and hurd it's enough 23:00:11 glibc depends on a lot of linux-specific stuff 23:00:13 has to really 23:00:18 does Linux have an actual rule of "no sharing ioctl numbers between different types of devices"? 23:00:22 no 23:00:30 and I think some of the small numbers are shared 23:00:34 I guess patches would probably be rejected if you tried to use a widely used ioctl number like that for something else 23:00:40 but it doesn't share numbers in any newly introduced ioctls 23:00:46 all the sharing are for historical reasons 23:00:50 IIRC ioctl numbers are namespaced to some extent 23:00:56 yes 23:01:19 the namespace tells the size of the struct that its argument points to, and whether it's used for input or output 23:01:33 but this too is true only for new ioctl numbers, old ones remain for historical reasons 23:02:12 Documentation/ioctl/ioctl-number.txt has a the range assignments. 23:02:14 http://man7.org/linux/man-pages/man2/ioctl_list.2.html has some docs 23:02:16 A lot of "conflict!"s. 23:02:55 right, TCGETS is 0x5401, and 0x54 == 'T' 23:05:02 Anyway, might as well ask y'all -- let's suppose I have a tty device, and I want the things a program writes get written there, but if the program does isatty(1) I want it to return 0. Is there a more elegant way than redirecting the program's output to a fifo, and having another process copy all the data from the fifo to the device? 23:06:37 fizzie: that sounds esoteric. why would you want that? if you just want programs not to write color codes, try TERM=dumb 23:06:49 (some programs will still write carriage returns then) 23:06:55 there's seccomp_filter but that's likely less elegant rather than more elegant 23:06:57 (and some programs will write color codes anyway) 23:07:14 It's not for me, it's for HackEso. 23:07:45 HackEso having TERM=dumb would make sense though 23:07:46 Did you figure out what was going on with the bizarreness a while ago? 23:08:01 alternatively, HackEso translating ASCII color codes to IRC color codes would also make sense 23:08:04 The idea is, what /dev/tty1 is *actually* connected is a pipe outside the UML kernel, and shouldn't be treated as a TTY. Cf. that gcc color output, for example. 23:08:08 ais523: using a custom terminfo that has IRC color and format codes would be even better for esoteric value 23:08:14 shachaf: the ::=echo weirdness? 23:08:15 :shachaf: the weirdness? 23:08:34 The HackEso output being truncated thing. 23:08:38 ais523: Having TERM=dumb would make sense, though I think most programs do the TTY check. 23:08:49 shachaf: Yes, I think I did, but I can't remember. At least it got fixed. 23:08:51 TODO self: make such a terminfo; make a better ! c and ! c++ wrapper; make an addwhatis command 23:08:53 Some programs support a NO_COLOR environment variable to disable colours. 23:09:04 fizzie: right, but many programs also use terminfo and friends to work out how to display colors 23:09:17 so if they conclude that stdout is a terminal but doesn't support color, they'll do the right thing 23:09:23 fizzie: programs do those two checks for different reasons 23:09:34 ais523: Well, for the color part. 23:09:46 But I think there's more behavioral changes they can do when it's not a terminal. 23:09:55 it's unclear whether we want the terminal or non-terminal output, though 23:10:03 HackEso is effectively a terminal wrt the way it's used 23:10:16 um :=echo hi 23:10:17 :um hi 23:10:18 we want the output programs produce when used interactively, not the batch-process output 23:10:21 what the 23:10:27 ais523: Well... not if it's a progress bar or a spinner. 23:10:31 is bfbot parsing IRC messages wrong? 23:10:41 foo :=echo bar :qux 23:10:41 :foo :=echo bar bar :qux 23:10:45 weird 23:10:53 I suspect it's parsing IRC messages wrong 23:11:07 like searches for " :=" in it 23:11:07 like searches for " :No such command. Try =help. 23:11:14 foo:=echo bar 23:11:14 bar 23:11:14 fizzie: well, the only reason that's bad is that the cursor movement (even \r or \b) doesn't work correctly 23:11:16 hmm 23:11:19 that's even worse 23:11:45 there's probably half a command in bfbot's output that got eaten by the ircd 23:11:54 =echo 23:11:54 echo 23:12:05 =echo 23:12:06 echo 23:12:20 what? 23:12:24 hmm, I bet the ircd added the colon anyway 23:12:35 (the second =echo was sent without the colon) 23:12:49 sure, ircd fixes the messages so that clients are easy to write 23:12:52 there's always a colon 23:13:02 it's technically only needed to escape multi-character arguments, though 23:13:14 but always adding it is probably easier for consistency 23:13:16 *multi-word 23:13:26 technically yes, but the ircd wants to accept more and produce less to make clients easy to write 23:13:27 ais523: I just think it's not trivial to make it look enough "like a terminal", esp. when programs start to use more than one line of output, or ask about terminal width/height to draw a dialog in the middle of the screen. 23:13:52 well, take a program like apt 23:13:56 it also changes MODE and KICK commands so that MODE commands set at most four modes and KICK kick at most one nick when it outputs them, even though it accepts more on input 23:14:02 and more things like that 23:14:04 it complains whenever its output isn't a terminal 23:14:17 I think it canonicalizes the capitalization of channel anmes 23:14:20 because it's not intended to have stable output 23:14:35 so that clients don't have to casefold channel names to find which channel they're receiving something in 23:14:36 Yes, I don't really like that complaint. 23:14:36 but the use via HackEso is interactive 23:14:56 (I use "apt search ... | grep ..." semi-often.) 23:15:14 fizzie: in that case we'll pass the right command-line argument to programs so that they don't do those things 23:15:40 fizzie: eg. we'll use git status -bs because the output of git status would be unreadable 23:16:06 Anyway, sure, there might some benefits to getting the terminal-style output. But I remain unconvinced it would be an overall improvement. 23:16:29 fizzie: I suspect that no terminal is probably better, 23:16:37 but terminal might be more suitable for HackEso's esotericness 23:17:22 programs can output human-readable things even when the output isn't a terminal, eg. you're running them in a cronjob 23:17:58 when it's a terminal, they may expect interactive use of the program, though they usually check isatty(0) for that, not isatty(1) or isatty(2) 23:18:24 but sometimes they expect interactivity even if only isatty(2) 23:18:49 I think no terminal is probably better since you terminate the program after each command 23:19:01 we can't just continue to give it more input like we can in termbot 23:19:36 obviously we can override either way in individual commands, with |cat or with script resp 23:19:57 shachaf: As far as I can tell, I didn't quite figure out all the details in the truncation thing, but sufficiently to determine that it was linked with using a 'fd:N' where N is a /dev/null file descriptor instead of the special 'null' channel in the UML console specification. 23:20:44 b_jonas: Incidentally, I toyed around using a 512-byte block device as the stdout file descriptor, too. 23:20:48 hmm wait 23:21:26 @run "hello =echo world" 23:21:28 It'd have the benefit (of sorts) that writes that the user would never see anyway (because of IRC length limits) would fail with ENOSPC, naturally terminating the program. Well, some programs, anyway. 23:21:29 "hello =echo world" 23:21:34 @run "hello :"++"=echo world" 23:21:37 "hello :=echo world" 23:21:37 : "hello world" 23:22:57 One reason why I didn't explore that more was because it'd be super hackbot-specific, and umlbox is to some degree a general tool. 23:23:01 ^ul (=echo world)(hello :)SS 23:23:01 hello :=echo world 23:23:01 :hello world 23:23:22 =echo ^help 23:23:22 ^help 23:23:24 =echo @help 23:23:24 @help 23:23:35 =echo `help 23:23:36 `help 23:23:36 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch [] " downloads files. Files saved to $HACKENV are persistent, and $HACKENV/bin is in $PATH. $HACKENV is a mercurial repository, "`revert " can be used to revert, https://hack.esolangs.org/repo/ to browse. $PWD ($HACKENV/tmp) is persistent but unversioned, /tmp is ephemeral. 23:23:45 Ut-oh. 23:23:49 yeah 23:24:15 =echo `echo :=echo hi 23:24:15 :=echo `echo hi 23:24:18 hmm, it just crossed my mind that with umlbox and WSL, Linux is now cross-platform software: it runs on both Linux and Windows 23:24:38 That's almost certainly loopable, and I don't have a natural way to make it not. 23:24:43 ais523: Linux runs on several processor types 23:24:55 `echo :=echo check 23:24:55 :`echo check 23:24:55 ​:=echo check 23:24:55 check 23:25:22 Hm, maybe the : that seems to end up in all the "middle commands" saves it. 23:25:32 bfbot: yes, but I mean it runs on multiple operating systems 23:25:36 =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>>>.++.++++.----.+++++++++++++.>++++.<---.+++..>----. 23:25:36 ok 23:25:43 =def 1prefixes 23:25:43 ok, defined 'prefixes' 23:26:00 no 23:26:02 darn it 23:26:14 I shouldn't have overwritten the prefixes macro 23:26:16 `prefixes 23:26:17 Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. 23:26:41 =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>++.>>+++++++++++++++.>++++.<<<<<.>>>>>----.++.<----------.+.+++.>++++++.<----.>-----.<<<<++++++++++.<.>>>>+.>++.<++++++++.-------.++++++++.>-.<<<<<.>>>++++++++++++++.<<<++++++++++++.------------.>>++++++.>>--------------.++.++++++++.<<---.>>>-.<++++. 23:26:41 ok 23:26:46 =str 1a<<<<.>>>>---------------.<<<<++++++++++++.------------.>>.>>+++++++.++++++++.<<---.>>.>+.<<<<<.+.+++++++++++.------------.>>>>---.-----------.++++++++++++.-----------.++.---.+.+++++++++++++.>.<<<<<.>>--.<<.>>>>.>--.<<<<<.>+++++.<++++++++++++.------------.>>>>>++.<-------.>+.-.+.<------.+++++++++++++.>-.<<<<<. 23:26:46 ok 23:26:51 =str 1a+++++++++++.+.------------.>>>>--.--------.>.<----.>-.<++++.>---.<++++.--------.<<<<.>>>>>++++++++++++++.<<<<<++++++++++++.------------.>>>>++++++++.-----.>------------.<+++++.>+.<<<<<+++++++++++++.>>>>-------.+++++++++++++.>+.<<<<<-------------.++++++++.--------.++++++++++++.------------.>>>>-----.-------.++ 23:26:51 ok 23:26:56 =str 1a++++++++++.-..<<<<.+++++++++.---------.++++++++++++.------------.>>>>----.<<<<+++++++++++++.>>>>--------.+++++++++++++.>.<<<<<-------------.>>>---.<<<.++++++++++++.------------.>>>>-------------.++++.----.+++++++++++++.>.<<<<<.>--.<++++++++++++++. 23:26:56 ok 23:27:00 =def 1prefixes 23:27:00 ok, defined 'prefixes' 23:27:00 =prefixes 23:27:00 Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. 23:27:53 =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>>>.++.++++.----.+++++++++++++.>++++.---.++++.<------.+++++.---------. 23:27:53 ok 23:27:56 What does :=prefixes do then? 23:27:56 Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =. 23:28:07 =def 1hackesoquine 23:28:07 ok, defined 'hackesoquine' 23:28:13 =hackesoquine 23:28:13 `bfbotquine 23:28:14 bfbotquine? No such file or directory 23:28:18 -!- ChanServ has set channel mode: +o fizzie. 23:28:25 (Just getting prepared.) 23:28:36 =str 1s + 23:28:36 ok 23:28:45 =def 1hackesoquin 23:28:45 ok, defined 'hackesoquin' 23:28:47 =hackesoquin 23:29:15 did it work. 23:29:17 =str 1s ++++++++[->++++++++<]+. 23:29:17 ok 23:29:22 =def 1hackesoquin 23:29:22 ok, defined 'hackesoquin' 23:29:24 =hackesoquin 23:29:24 . 23:29:35 =str 1s ++++++++[->++++++++<]>+. 23:29:35 ok 23:29:37 =def 1hackesoquin 23:29:37 ok, defined 'hackesoquin' 23:29:38 =hackesoquin 23:29:38 A 23:29:43 =hackesoquine 23:29:43 `bfbotquine 23:29:44 bfbotquine? No such file or directory 23:29:49 -!- ChanServ has set channel mode: +o ais523. 23:30:17 ^ul ((=echo ^ul )SaS(:^)S):^ 23:30:17 ``` set -e; f=/hackenv/bin/bfbotquine; rm -f "$f" 23:30:17 =echo ^ul ((=echo ^ul )SaS(:^)S):^ 23:30:17 ^ul ((=echo ^ul )SaS(:^)S):^ 23:30:19 No output. 23:30:23 ``` set -e; f=/hackenv/bin/bfbotquine; rm -vf "$f" 23:30:24 No output. 23:30:34 hmm, fungot is ignoring bfbot 23:30:34 ais523: i just happens that matthew needs to bump the version when he's changing the core. but i guess it's kind of " industry standard" 23:30:40 =def 1hackesoquin 23:30:40 ok, defined 'hackesoquin' 23:30:41 ais523: Yeah, manually. 23:31:02 `! underload (test)S 23:31:02 test 23:31:18 `! underload ((=echo `! underload )SaS(:^)S):^ 23:31:19 ​=echo `! underload ((=echo `! underload )SaS(:^)S):^ 23:31:32 `! underload ((t:=echo `! underload )SaS(:^)S):^ 23:31:32 `! underload )SaS(:^)S):^ 23:31:33 t:=echo `! underload ((t:=echo `! underload )SaS(:^)S):^ 23:31:33 `! underload )SaS(:^)S):^ 23:31:34 Error: Unmatched ) 23:31:34 Error: Unmatched ) 23:31:42 But I assume a bfbot/HackEso loop just needs HackEso to output "whatever :=foo" on `bar, and bfbot output "`bar" on =foo. 23:31:42 But I assume a bfbot/HackEso loop just needs HackEso to output "whatever :No such command. Try =help. 23:32:07 ``` set -e; f=/hackenv/bin/STOP; >$f echo $'#!/bin/sh\nrm -vf /hackenv/bin/bfbotquine'; chmod -c a+x "$f" 23:32:11 mode of '/hackenv/bin/STOP' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) 23:32:30 a:=echo 1 :=echo 2 23:32:30 :a:=echo 1 2 23:32:37 ``` set -e; f=/hackenv/bin/bfbotquine; >$f echo $'#!/bin/sh\necho hello, world'; chmod -c a+x "$f" 23:32:39 mode of '/hackenv/bin/bfbotquine' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) 23:32:40 `bfbotquine 23:32:41 hello, world 23:32:43 `STOP 23:32:44 huh, if there are multiple :=s in a line, bfbot runs the /last/ 23:32:45 removed '/hackenv/bin/bfbotquine' 23:32:46 `bfbotquine 23:32:47 bfbotquine? No such file or directory 23:33:03 `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:04 t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:04 `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:05 t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:05 `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:06 t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:06 `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:07 t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^ 23:33:07 -!- ais523 has set channel mode: +q bfbot!*@*. 23:33:13 -!- ais523 has set channel mode: -q bfbot!*@*. 23:33:13 guys, if this becomes a loop and I am not disconnected, please run this: =def 1hackesoquine 23:33:16 :o 23:33:17 guys, if this becomes a loop and I am not disconnected, please run this: `STOP 23:33:34 +q best mode for breaking loops 23:33:37 ``` set -e; f=/hackenv/bin/bfbotquine; >$f echo $'#!/bin/sh\necho ":=hackesoquine"'; chmod -c a+x "$f" 23:33:37 No such command. Try =help. 23:33:39 mode of '/hackenv/bin/bfbotquine' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) 23:33:40 (I guess +m would also work) 23:33:48 =hackesoquine 23:33:49 `bfbotquine 23:33:49 ​:=hackesoquine 23:33:49 `bfbotquine 23:33:50 ​:=hackesoquine 23:33:50 `bfbotquine 23:33:51 ais523: I think you beat me by some milliseconds. 23:33:51 ​:=hackesoquine 23:33:51 `bfbotquine 23:33:51 `STOP 23:33:52 ​:=hackesoquine 23:33:52 `bfbotquine 23:33:52 -!- ais523 has set channel mode: +q bfbot!*@*. 23:33:54 ​:=hackesoquine 23:33:55 removed '/hackenv/bin/bfbotquine' 23:33:56 -!- ais523 has set channel mode: -q bfbot!*@*. 23:34:02 =def 1hackesoquine 23:34:02 ok, defined 'hackesoquine' 23:34:10 =hackesoquine 23:34:10 A 23:34:13 `bfbotquine 23:34:14 bfbotquine? No such file or directory 23:34:16 fizzie: out of interest, what was your preferred loop-breaking method? 23:34:17 ok good 23:34:31 ais523: I had /mode #esoteric +q bfbot!*@* waiting on the input line as well. 23:34:33 Oh, HackEso does not ignore bfbot? 23:34:54 int-e: HackEso doesn't generally ignore known bots. 23:34:56 kspalaiologos: can you please modify your bot? 23:35:11 kspalaiologos: triggering on := anywhere in the irc line seems like a bad idea 23:35:11 kspalaiologos: triggering on :No such command. Try =help. 23:35:11 right, I could have broken the loop earlier, but wanted to make sure it was a true loop first 23:35:19 (isn't there some code in lambdabot that tends to stop loops after four iterations?) 23:35:23 fizzie: Hmm. 23:35:33 -!- ais523 has set channel mode: -o ais523. 23:35:43 ais523: Not that I know of. But it should be ignoring bfbot. 23:35:51 ais523: fungto has such a code 23:36:00 int-e: The "add a zero-width space in front of non-alphanumeric messages" feature stops most loops, it's just that bfbot's "parse a command in the middle of the output" defeats that. 23:36:13 ah. 23:36:38 admittedly, the most surprising thing about that loop was that `! underload actually works 23:36:59 That said, there is an ignore list, currently ['Lymia', 'Lymee', 'Madoka-Kaname'] which is... just a little out of date. 23:37:26 I don't even recall any Madoka-Kaname 23:37:48 ais523: I know that a loop that involves some quining technique is cooler, but I deliberately used a user-defined command in both bots to make it easier to break the loop on either end 23:37:52 =echo `foo 23:37:53 `foo 23:37:53 Mmmmm... no. 23:38:01 it's probably best to put bfbot on HackEgo's ignore list, BF isn't the most robust language to write loop-proof bots in 23:38:19 bfbot: well, quines are pretty much trivial to write in Underload so it's my usual choice for botloops 23:38:19 ais523: I don't think it's written in bf 23:38:27 b_jonas: bfbot? 23:38:28 I do 23:38:30 yes 23:38:33 really? 23:38:41 just look at who wrote it 23:38:43 I thought it's called bfbot because it interprets bf 23:38:54 I think they mentioned it being written in bash? Not sure I paid enough attention. 23:39:10 oh, boring 23:39:22 based on what it does, it definitely could be written in bf 23:39:44 =def 1$(hostname) 23:39:44 Error: Name can contain only lowercase letters and digits. 23:39:45 ais523: kspalaiologos wrote it because fungot's bf interpreter timed out too quickly. if he wrote it in bf, then he would have to use a bf interpreter in bf, which is rather slow, so that would mostly defeat the purpose 23:39:45 b_jonas: the problem with object-orientation is that it's standard, you have 23:40:05 b_jonas: oh, because BF doesn't self-compose well due to only having one tape 23:40:13 Bfbot is written in Seed :) 23:40:20 seed? 23:40:37 If that's our Seed, it's probably a joke. 23:40:39 imode: it's a language which interprets the output of a random number generator as Befunge 23:40:53 the program is just the random number generator seed 23:40:58 oh. 23:41:14 but the RNG it's using is the Mersenne Twister which is not cryptosecure, so you basically just need a preimage algorithm 23:41:16 kspalaiologos mentioned something about some program written by someone other than him in bash to blame for for why it swallows backslashes in the output 23:41:32 http://esolangs.org/logs/2019-11-22.html#lbe is where I got the bash from. 23:41:33 maybe "Seed" is the name of more than one thing? 23:41:37 thutubot used a bash wrapper to actually do the connection of the bot to IRC 23:41:58 Yes, more than one language might be involved. 23:42:01 anyway, kspalaiologos almost certainly has a befunge → seed compiler 23:42:25 -!- fizzie has set channel mode: -o fizzie. 23:42:27 Whoops, forgot. 23:42:49 shachaf: Incidentally, I switched umlbox to use a protobuf for the configuration, because, you know, protos. 23:42:50 and befunge-98 is a fairly efficient language to write a bf interpreter in (but befunge-93 would have issues producing an unbounded tape) 23:43:10 ais523: I know of at least two bots that interpret the same language as the bot is written in: NotJack's ijx was a bot written in J that interprets J, and the buubot3 instance called perlbot is written in perl and interprets perl (plus a bit more) 23:43:41 Yes, in retrospect I probably should've just bumped up the cycle limit of the fungot ^bf interpreter. It's just I don't tend to edit fungot much. 23:43:41 fizzie: i normally use define-macro...) value) ( ' red t) ( h h)) 23:43:45 b_jonas: the problem with that is mostly sandboxing, isn't it? 23:43:54 ais523: with which one? 23:44:02 self-hosting languagebots 23:44:09 yeah 23:44:40 There's an entirely unsandboxed Funge-98 interpretation command in fungot. I've tried to use it for hot-patching once or twice. 23:44:40 fizzie: no it is 23:44:52 buubot3 uses just a couple of old unix tricks, like running under a different user and setrlimit to not allow to open any file and such things to make a sandbox that works decently but is very limiting 23:44:55 It's just much easier to hot-break than hot-fix things. 23:45:45 fizzie: I'm not sure it's a /bot/ interpreter, though; presumably the Funge-98 output commands output to the hosting server's stdout rather than to the IRC channel 23:46:05 I don't know what ijx used, but it probably involved the J interpreter's secure mode, which disables all the builtins that do IO or system access or foreign calls, except for 11!: which calls a custom callback of the program in which the interpreter is embedded to 23:46:46 that's not a perfect sandbox because the J interpreter had a few bugs at that time that let you do memory corruption, but it was good enough 23:46:48 ais523: Yes, although of course you can write to the IRC socket as well. But it's true that it's not what you would expect if it was intended as an interpreter. 23:48:00 ais523: anyway, buubot3 originally interpreted like seven different languages, and the part that interprets perl wasn't special at all, it was implemented almost the same as invoking the other interpreters 23:48:05 the interpreter is always a separate process 23:48:17 it's just that perlbot threw out all the other interpreters for some reason 23:48:20 so it only runs perl 23:48:39 http://ix.io/239r is the total list of times I've used it on channel. 23:48:41 hmm, a wasmbot would probably be pretty good at self-hosting 23:48:46 No idea if those actually did the right thing. 23:48:58 the original buubot3 could actually interprete J, and the command to interpret J was "jeval", which is why I renamed my jevalbot instance from jeval to evalj 23:49:05 "jeval:" used to trigger two bots 23:49:06 idea: a self-modifying esolang with version control 23:49:15 ais523: see Wikiplia 23:49:26 it isn't truly self-modifying 23:49:44 but it has a version control, and there's a self-modifying compiler implemented over it 23:49:53 I meant self-modifying in the sense of programs modifying themselves, not in the Snowflake sense 23:49:56 a compiler that compiles a slightly higher level to Wikiplia 23:50:08 hmm 23:51:41 Apparently 0ad00f-gU0": ciretose# GSMVIRP"AAN51p08P0851g21gW$ prints out the current reply counter (thing it uses to stop replying consecutively), and 0ad10f-G0": ciretose# GSMVIRP"AAN51p08P0851g21gW$ the nickname of whoever spoke to it last. 23:51:46 actually, some of the uncomputable time-travel esolangs are in effect like this, so maybe you could start with one of those as a base and add a causality restriction to bring them down to TCness 23:52:03 but it's more interesting if the ability to undo, rewind, etc. is somehow needed for TCness 23:52:54 -!- imode has quit (Ping timeout: 265 seconds). 23:53:07 there is https://esolangs.org/wiki/Legit whose source format is a git repository 23:54:39 right, but the content of the repository is irrelevant, the program is stored in the metadata (which isn't itself versioned) 23:55:22 -!- ais523 has quit (Quit: quit). 23:55:45 ais523: prolog then, since you can undo unifications? 23:55:56 though it's still TC without failing 23:56:25 To call back to an earlier fork in the conversation, the attributes proposal (N2335) had been merged into the June 2019 working draft of C2x (N2385), together with a few standard attributes: deprecated (N2334), maybe_unused (N2770) and nodiscard (N2267). 23:56:36 "maybe_unused" ah 23:56:39 thanks 23:57:24 I don't think there's any level of -std=c2x support on the GCC version on HackEso though. 23:57:38 `gcc --version 23:57:39 gcc (Debian 8.3.0-6) 8.3.0 \ Copyright (C) 2018 Free Software Foundation, Inc. \ This is free software; see the source for copying conditions. There is NO \ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 23:57:45 Yeah, I think it's 9 only.