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 <oerjan> 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 <oerjan> it made no sense before, no it sort of makes sense
02:47:35 <oerjan> `slwd moony//s,moony,moon,;s,moon,moony,
02:47:37 <HackEso> moony//moony is often named the following: moonthedwarf moonythehuman moonheart08 moony moon__ noomy computing and luxon, making porthellos and @tells a real pain.
02:48:23 <oerjan> `slwd moony//s,moony ,moon ,;s,moon,moony,
02:48:25 <HackEso> 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 <oerjan> <moony> TODO: request rename on esolangs <-- not sure that's supported
02:52:07 <moony> could just dump my account and make another
02:53:54 <fizzie> 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 <fizzie> Well, there's a Renameuser extension, and there's a UserMerge extension, I don't think we have either.
02:55:34 <fizzie> 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 <oerjan> moony: your backlink from wikipedia should use https twh
02:59:35 <oerjan> also, you remain the only member of "Wikipedians who like empty categories".
03:04:44 <bfbot> Outlook not so good
03:04:47 <bfbot> Outlook not so good
03:04:51 <bfbot> Outlook not so good
03:05:16 <oerjan> i conclude that kspalaiologos cheated even more than i thought to get the last quote
03:05:43 <oerjan> also, i am now capable of typing his name without rechecking *MWAHAHAHA*
03:14:29 -!- kingoffrance has joined.
03:48:33 <oerjan> his wretched polish name is still beyond me. maybe the first part.
04:09:00 -!- xkapastel has joined.
04:45:52 <esowiki> [[LogOS]] https://esolangs.org/w/index.php?diff=67518&oldid=67486 * IFcoltransG * (+342) Added truth machine example program
04:45:58 <bfbot> Outlook not so good
04:50:39 <bfbot> Outlook not so good
04:53:17 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=67519&oldid=67235 * IFcoltransG * (+339) /* Implementations */ Added logOS
04:55:04 <esowiki> [[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 <esowiki> [[LogOS]] M https://esolangs.org/w/index.php?diff=67521&oldid=67520 * IFcoltransG * (+25) Restructured page and headings
05:02:35 <esowiki> [[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:19 <bfbot> Concentrate and ask again.
05:19:47 <bfbot> Concentrate and ask again.
05:19:55 <imode> yeah determinism at its finest.
05:23:54 <oerjan> ^8ball is deterministic 8ball bad?
05:47:57 <oerjan> 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 <oerjan> hm are _both_ petey and the pa'anuri trying to trick the other into thinking they are stupid?
06:11:01 <oerjan> and is anyone succeeding?
06:11:39 <oerjan> and is this a proper way to use "both"?
06:36:16 -!- tromp has joined.
06:45:47 <esowiki> [[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 <esowiki> [[Special:Log/newusers]] create * Scoopta * New user account
07:26:17 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=67524&oldid=67503 * Scoopta * (+237) Introducing myself
07:26:34 <esowiki> [[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 <esowiki> [[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 <esowiki> [[Special:Log/newusers]] create * Arial * New user account
09:33:49 <esowiki> [[List of ideas]] https://esolangs.org/w/index.php?diff=67527&oldid=67526 * IFcoltransG * (+108) /* General Ideas */
09:37:42 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=67528&oldid=67524 * Arial * (+252) /* Introductions */
09:40:10 <esowiki> [[MagiStack]] https://esolangs.org/w/index.php?diff=67529&oldid=44698 * Arial * (+1) /* 99 bottles of beer */
09:42:16 <esowiki> [[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 <ais523_> int-e: modern CPUs have integer vector units in addition to floating-point vector units
11:43:06 <ais523_> I'd expect them to either be the same speed, or else the integer operations to be faster
11:45:05 <ais523_> 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 <esowiki> [[`]] 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 <esowiki> [[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 <esowiki> [[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 <myname> what is a non-real quine?
12:29:27 -!- arseniiv has joined.
12:55:05 <int-e> myname: in this case, it's a non-quine.
12:59:52 <int-e> It may be an attempt at a cat program but it falls short even for that.
13:02:10 <myname> what is the v100 at the end even supposed to do
13:03:26 <myname> it just pushes a number of 100s onto the stack depending on the length of the user input?
13:06:02 <int-e> I don't know, maybe the idea was to squeeze everything currently on the stack?
13:06:24 -!- ArthurStrong has joined.
13:06:43 <int-e> 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 <int-e> fungot: are you squishy?
13:08:39 <fungot> 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 <myname> what do you mean by squeezing?
13:43:52 <int-e> =8ball Is this my lucky day?
13:43:53 <bfbot> Signs point to yes.
14:20:52 -!- kritixilithos has joined.
14:55:33 -!- ArthurStrong has joined.
15:01:53 <int-e> fungot: can you say "predicament"?
15:01:54 <fungot> 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:26 <HackEso> 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:08 <HackEso> https://hack.esolangs.org/tmp/just
17:37:31 <fizzie> Just checking. (No pun intended.)
17:38:08 -!- tromp has joined.
17:38:57 <HackEso> https://hack.esolangs.org/tmp/just
17:39:21 <fizzie> 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:24 <HackEso> grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > $HACKENV/tmp/just && url $HACKENV/tmp/just
17:39:24 <bfbot> grwp '(is|are) just' | sed -e 's/:/ :No such command. Try =help.
17:40:24 <HackEso> 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:30 <fizzie> The part about en_NZ.UTF-8 is not strictly speaking true any more.
17:40:40 <HackEso> cat: /hackenv/bin/jusrt: No such file or directory
17:40:41 <HackEso> grwp '\(is\|are\) just' | sed -e 's/:/ ::= /;s/$/\n/' > $HACKENV/tmp/just && url $HACKENV/tmp/just
17:40:41 <bfbot> grwp '(is|are) just' | sed -e 's/:/ :No such command. Try =help.
17:41:05 <bfbot> No such command. Try =help.
17:41:06 <HackEso> C \ C.UTF-8 \ en_GB.utf8 \ en_NZ.utf8 \ en_US.utf8 \ POSIX
17:44:38 <int-e> 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:13:09 -!- tromp has quit (Remote host closed the connection).
18:14:51 <HackEso> `revert <rev>" can be used to revert to a revision. See <https://hack.esolangs.org/repo/>. It is a builtin command so cannot be called from other commands.
18:21:32 <int-e> <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 <arseniiv> int-e: I’m not done with that game yet :P
18:25:23 <int-e> But the hype is over. :P
18:25:28 <arseniiv> today I figured out the level with ghosts and skulls
18:25:48 <int-e> Also, I've already forgotten everything.
18:26:36 <arseniiv> int-e: the hype is transient, why should we take it into account?..
18:26:37 <int-e> I certainly don't recall individual levels :)
18:26:52 <int-e> arseniiv: because Time is Move.
18:26:56 <arseniiv> int-e: good, then you can play it once again!
18:27:17 <int-e> Nah, too many other things to play.
18:27:58 <int-e> Currently, Broken Sword 2.
18:28:16 <arseniiv> okay I’ll play BiY one level a week and will tease you each time about inconsequential things :P
18:28:20 <int-e> I'm not into roguelikes at all.
18:28:36 <int-e> arseniiv: You can do the latter without doing the former.
18:28:45 <int-e> fungot: Are you of any consequence?
18:28:45 <fungot> int-e: with my computer, brb later
18:28:57 <arseniiv> I think I’m too, I tried Nethack and, well, I tried it and not much more afterwards
18:30:38 <b_jonas> arseniiv: ghosts and skulls? you have to kill Phantoon and they disappear.
18:30:42 <int-e> 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 <arseniiv> b_jonas: which one this is from? :)
18:31:52 <int-e> Anyway... it's just what I'm currently playing (GK2), not a recommendation (there are better click&point adventures around).
18:32:34 <b_jonas> arseniiv: SNES Super Metroid
18:35:22 <esowiki> [[Special:Log/newusers]] create * Lorlouis * New user account
18:35:34 <arseniiv> arseniiv: heard about that but not played ever
18:36:18 <arseniiv> more accurately, heard “Metroid” somewhere and that’s all
18:37:25 <b_jonas> arseniiv: it's a very good game
18:37:30 <b_jonas> best of the Metroid series
18:39:07 <arseniiv> b_jonas: mm maybe I’ll give it a look in an emulator!
18:39:36 <esowiki> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=67534&oldid=67528 * Lorlouis * (+177) /* Introductions */
18:40:04 <esowiki> [[B sharp]] M https://esolangs.org/w/index.php?diff=67535&oldid=67092 * Lorlouis * (+1) /* Introduction */
18:42:21 <imode> metroid prime is also a great member of the series.
18:42:30 <imode> 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 <imode> 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:15:31 <imode> 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 <esowiki> [[Special:Log/newusers]] create * RGSW * New user account
20:31:45 <b_jonas> 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 <imode> turning tarpit, not turing tarpit.
20:33:29 <imode> totally okay with a turing tarpit, that's kind of the point.
20:33:42 <b_jonas> I don't know what a turning tarpit is then
20:34:03 <imode> https://esolangs.org/wiki/Turning_tarpit
20:34:36 <imode> 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 <imode> or some variant thereof.
20:36:28 <b_jonas> imode: in that case, combinator calculus with SK base, aka unlambda with only the s and k builtins
20:36:43 <b_jonas> or lambda calculus, where the two instructions are lambda and function call
20:39:16 <b_jonas> 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:56 <b_jonas> there's a brainfuck variant like that, iirc invented by the bbc norvegian village, but a turing machine works better
20:40:10 <imode> I wanna see that BF variant.
20:40:27 <b_jonas> imode: if you want to keep the symbol unchanged and move right, you can move right then left then right again
20:40:43 <b_jonas> imode: and if you want to flip the symbol and move left, you can move right, then move left twice
20:40:58 <b_jonas> so you can translate to this from an ordinary one tape two symbol turing machine
20:41:07 <b_jonas> by replacing some of the instructions by a sequence of two or three instructions
20:41:30 <imode> 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 <imode> what's that BF variant you mentioned, out of curiosity?
20:43:30 <b_jonas> dunno, look at https://esolangs.org/wiki/BF_instruction_minimalization or something. or maybe P'' already does this
20:43:39 <b_jonas> I think this combination was discovered independently by multiple people
20:44:01 <b_jonas> no, for brainfuck it's more instructions because you count the control flow instructions [ and ] too
20:44:11 <b_jonas> but for a TM, you could the control flow as not instructions
20:44:35 <b_jonas> yeah, P'' already has such a combined move and write
20:44:41 <b_jonas> https://esolangs.org/wiki/P%27%27
20:44:45 -!- zzo38 has joined.
20:44:48 <b_jonas> then it was not invented by the bbc
20:45:09 <imode> I'm asking is because my language is TC with only 4 instructions.
20:45:19 <imode> but I'm wondering if I can reduce that into two somehow.. don't see a possible way.
20:46:40 <esowiki> [[User talk:Zzo38]] https://esolangs.org/w/index.php?diff=67536&oldid=67510 * Zzo38 * (+217)
20:48:39 <kmc> what are the instructions?
20:49:40 <imode> [ is "dequeue a symbol. if it's a 0, jump to matching ]. otherwise, go to next instruction."
20:49:40 <j-bot> imode: |open quote
20:49:40 <j-bot> imode: | is "dequeue a symbol. if it's a 0, jump to matching ]. otherwise, go to next instruction."
20:50:14 <imode> ] is "jump to matching [". 0 and 1 enqueue a 0 and a 1 respectively. so there's no movement instructions.
20:53:16 -!- kspalaiologos has quit (Quit: Leaving).
21:01:05 <esowiki> [[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 <ais523> <imode> 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:50 <ais523> 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 <b_jonas> 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 <b_jonas> 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 <ais523> (by "restarts the program" I mean "goto the first instruction", you don't reset memory or the tape pointer)
21:21:28 <ais523> b_jonas: I assumed the instructions couldn't take arguments
21:21:37 <ais523> otherwise it's trivial, e.g. https://esolangs.org/wiki/Tip does it with only one instruction
21:24:12 <ais523> 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 <b_jonas> ais523: release it with the license to distribute it clarified
21:24:59 <b_jonas> I'd prefer a license that allows anyone to distribute modified versions
21:25:54 <zzo38> Move left or flip and move right is P'', I think.
21:26:17 <b_jonas> I eventually figured it out
21:26:32 <ais523> b_jonas: it's GPLv3, and has been for ages
21:26:41 <ais523> are you confusing it with something else?
21:26:44 <b_jonas> ais523: in that case I don't have any request about ayacc
21:27:36 <zzo38> What are differences ayacc with yacc?
21:28:05 <b_jonas> indeed, it has a header command saying GPLv3 now
21:28:30 -!- Frater_EST has joined.
21:29:00 <b_jonas> 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 <b_jonas> 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 <b_jonas> it provides better error messages in case of a shift-reduce or reduce-reduce conflict in the language
21:30:02 <b_jonas> (sometimes at least, it depends on the language)
21:30:10 <b_jonas> and... there was something more but I forgot
21:31:10 -!- Frater_EST has left.
21:32:09 <b_jonas> zzo38: see its documentation for details
21:32:17 <HackEso> ayacc is ais523's yacc parser generator implementation, get it from darcs clone http://nethack4.org/projects/ayacc
21:37:13 <b_jonas> ais523: so do you want to tell us what new job you're going to get?
21:38:03 <zzo38> I don't have darcs, is there another way?
21:39:23 <b_jonas> (other than installing darcs, obviously)
21:46:24 <b_jonas> 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 <b_jonas> 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 <b_jonas> 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:29 <b_jonas> https://esolangs.org/wiki/MIX_(Knuth)
22:18:30 <moony> ^^^ Same question from me
22:18:31 <ais523> a language intentionally named after a lesser-known programming language almost certainly counts
22:18:43 <ais523> that's some sort of "intention" to make a language esoteric
22:18:54 <ais523> in general, though, this is an apparently major debate that I've always been wary of wading into
22:19:18 <b_jonas> 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 <b_jonas> 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 <b_jonas> I was also considering http://www.vttoth.com/CMS/index.php/projects/49 but I decided it wasn't esoteric enough
22:20:49 <APic> What is the Definition of „esoteric“?
22:20:57 <HackEso> This channel is about programming -- for the other kind of esoterica, try #esoteric on EFnet or DALnet.
22:20:59 <HackEso> I must confess, I know not of what you are speaking.
22:21:01 <HackEso> 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:14 <b_jonas> https://esolangs.org/wiki/Esoteric_programming_language
22:21:24 <APic> It would rock if the Definition of „esoteric“ was esoteric.
22:21:26 <b_jonas> that isn't a good description either
22:21:44 <b_jonas> anyway, it's esoteric if it's designed without the intention that anyone will use it for any productive purpose
22:22:17 <b_jonas> which would make MIX and Olvasható and SIMPLE non-esoteric
22:22:23 <zzo38> 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:32 <ais523> 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:47 <ais523> it's quite easy to intentionally create languages close to the boundary line, and then do so again if people move it
22:23:10 <fizzie> 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 <kmc> i know it when i see it
22:23:33 <b_jonas> oh, that reminds me, this one is definitely esoteric so I'll add a TODO
22:23:36 <kmc> there are accidental esoteric languages of course
22:23:39 <zzo38> Yes, intentionally creating languages close to the boundary line can be done.
22:23:43 <esowiki> [[User:B jonas]] https://esolangs.org/w/index.php?diff=67538&oldid=67386 * B jonas * (+11) /* Todo */
22:23:49 <kmc> like C++ templates or ROP gadget sets or other weird machines
22:23:50 <ais523> 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 <kmc> exploit programming is pretty similar to esoprogramming
22:24:09 <zzo38> I think "I know it when I see it" is not a good policy for administrations.
22:24:18 <ais523> 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 <b_jonas> ais523: yeah, Mouse was also definitely intended to be useful
22:24:35 <kmc> but is removing things from the wiki particularly important?
22:24:42 <zzo38> Byt, yes, there is stuff like ROP, exploit programming, C++ templates, and other stuff like that.
22:24:44 <fizzie> fungot: Are you proving Funge-98 a non-esoteric language by being useful?
22:24:44 <fungot> fizzie: did i have emacs which is basically... l(x) 1 x*l(x) fnord x)
22:24:48 <b_jonas> ais523: can you give an example for that?
22:24:53 <ais523> 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 <fizzie> I don't think that's Emacs.
22:24:59 <kmc> ais523: yeah
22:25:05 <kmc> what I called 'accidental esoteric languages' above
22:25:09 <kmc> C++ templates are somewhere in the middle
22:25:21 <kmc> TMP was first discovered and then augmented
22:25:27 <b_jonas> 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 <ais523> 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 <kmc> 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 <zzo38> 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 <kmc> it wasn't particularly designed to be difficult to program in
22:26:03 <ais523> 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 <kmc> but it has an evaluation model very different from almost all extant languages
22:26:05 <fizzie> Funge-98 has the smell of being designed to be basically "Befunge, but useful".
22:26:20 <zzo38> (well, maybe there are a few other possibilities, too)
22:26:25 <kmc> zzo38: the spam pages should be made into real languages
22:26:33 <ais523> likewise, there's at least one language that I implemented in Jelly, although competition languages are a little different from esolangs
22:26:34 <moony> 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 <kmc> like RFNHS3SDD
22:26:56 <zzo38> kmc: Yes, if you are able to do so.
22:27:04 <b_jonas> ais523: yeah, and I suspect that blsq was used usefully as well
22:27:17 <ais523> (in that they're designed for accomplashing a specific purpose, but are optimized for very different goals than normal languages are)
22:27:34 <zzo38> moony: I think that is (mostly) reasonable.
22:28:06 <moony> zzo38: note i make an exception for languages intended for everyone to use, but not ment to be used in this universe
22:28:14 <b_jonas> ais523: competition languages like the ones for ICFP?
22:28:26 <ais523> b_jonas: no, languages designed for winning competitions
22:28:39 <moony> like Jelly is ment for winning codegolf competitions
22:28:42 <ais523> mostly golfing languages, although in theory they aren't the only examples of the genre
22:28:45 <zzo38> moony: OK, although I do not quite understand how that is.
22:28:51 <APic> „Every Input is a Program“
22:29:32 <ais523> the ideal competition language has a huge number of builtins and a lot of ability to cope with incompletely specified programs
22:29:57 <kmc> the ICFP langs are very interesting too
22:30:00 <kmc> I think they would count as eso-
22:30:05 <ais523> 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 <moony> 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:32 <b_jonas> 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 <moony> b_jonas: is anyone else going to use the DSL? No? Then I think it counts for esolangs.
22:31:12 <ais523> b_jonas: I'm not sure whether domain-specific languages are automatically esoteric
22:31:27 <b_jonas> ais523: it's not the domain-specific part that's relevant here
22:31:38 <b_jonas> it could be a general purpose but small language
22:31:39 <zzo38> I think sometimes you will not know for now if anyone else is going to use the DSL
22:31:44 <ais523> I think being a DSL is relevant here
22:31:53 <b_jonas> possibly a write-only one that requires an assembler to use
22:31:53 <ais523> because those are a language category of their own
22:31:59 <moony> DSLs are icky territory
22:32:02 <ais523> is C-INTERCAL's internal DSL OIL an esolang, for example?
22:32:04 <b_jonas> and I don't publish the assembler
22:32:06 <moony> because they can easily fall under my rules
22:32:29 <ais523> 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 <b_jonas> oh, you can certainly have a domain-specific esolang in general
22:33:30 <b_jonas> the ICFP ant brain is one such language,
22:33:58 <ais523> 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 <kmc> I thought of making a esolang that's a DSP DSL
22:34:28 <ais523> 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 <kmc> some strange eso way of defining signal processing pipelines
22:34:33 <kmc> for audio and RF applications
22:34:33 <ais523> which is basically the same thing
22:34:45 <kmc> i thought of it being sort of concatenative
22:34:47 <ais523> but I'm not sure that's even definable as a language, let alone an esolang
22:34:56 <kmc> so you'd have a stack of things which are signals or matrices or filters or whatever
22:34:57 <zzo38> kmc: Yes lets see please
22:35:00 <kmc> and you can apply them
22:35:03 <ais523> idea: something that is definitely esoteric but only questionably a programming language
22:35:10 <ais523> (esoteric in the programming sense, that is)
22:35:28 <kmc> but instead of a normal step by step execution model it compiles into a streaming, possibly real-time process
22:35:39 <zzo38> I think once I did make a stack-based programming language for defining .XI instruments
22:35:41 <b_jonas> ais523: there are a lot of esoteric/obfuscated programs that are clearly not languages
22:35:45 <ais523> the only DSP I've ever used was entirely imperative
22:35:53 <ais523> b_jonas: oh right, one-off programs
22:36:09 <ais523> like the 99 bottles of beer program in Malbolge
22:36:13 <kmc> primitive types would be complex numbers, matrices, and timeseries data
22:36:27 <ais523> how do you make something like that /ambiguously/ a language, though?
22:36:28 <zzo38> (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 <kmc> an example program would be something like a FM broadcast radio decoder
22:36:49 <kmc> it's easy to get I/Q samples from a RTL-SDR
22:37:11 <kmc> and dump PCM data to a sound card
22:37:17 <kmc> so the hardware aspect would be relatively accessible
22:37:18 <ais523> fwiw, it would be nice to document more found languages on the wiki
22:37:32 <b_jonas> 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 <zzo38> Yes, I would like to see how to do with that radio decoding and that stuff
22:37:45 <ais523> things like the x86 (or was it x86_64) MMU, which is a bounded-storage machine
22:38:10 <ais523> b_jonas: hmm, now you're reminding me of quines
22:38:20 <zzo38> b_jonas: If it is Turing-complete (even if not intended to be) then it might be notable.
22:38:41 <b_jonas> ais523: how about OTTD signals?
22:38:42 <ais523> 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:39:02 <b_jonas> open transport tycoon deluxe, the game with railway tracks
22:39:24 <b_jonas> the signals (traffic signals to direct trains on railways) became quite capable and can evaluate boolean expressions
22:39:44 <b_jonas> http://wiki.openttd.org/Main_Page
22:39:56 <ais523> oh, that normally gets abbreviated to OpenTTD
22:40:03 <ais523> I just didn't recognise the abbreviation you were using
22:40:45 <b_jonas> 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 <b_jonas> not turing-complete alone, but quite powerful
22:41:19 <ais523> let me guess, you overwrite the format string while it's being decoded using some sort of pointer unpack?
22:42:23 <b_jonas> I don't think unpack can do that easily, it can only read from pointers, not write to it
22:42:24 <ais523> although that might /actually/ be TC
22:42:33 <ais523> (printf is TC for this reason)
22:42:48 <ais523> although the arguments you have to give it are insanely undefined behaviour
22:43:50 <fizzie> 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 <fizzie> 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 <ais523> that could in theory be a problem that comes up in a sane program
22:44:56 <kmc> did you know that the XC8 compiler for PIC supports a "short long int" type?
22:45:17 <fizzie> glibc stops processing the format string and returns -1 with errno set to EOVERFLOW when the output exceeds INT_MAX.
22:45:23 <imode> kmc: wtf is short long?
22:45:23 <b_jonas> 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 <kmc> imode: it's shorter than a long but longer than a short.
22:45:36 <ais523> 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 <imode> kmc: that is awesome.
22:45:43 <fizzie> I think I remember a "short long" from somewhere.
22:45:49 <kmc> and actually useful on embedded
22:45:55 <fizzie> ais523: Yeah, the program in question was unreasonable, though.
22:46:07 <kmc> I wonder if avr-gcc has anything comparable
22:46:14 <ais523> I'd expect long short to be shorter than int, and short long to be longer
22:46:22 <b_jonas> 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 <ais523> fwiw, Algol 68 lets you write arbitrarily many long or short, but not to mix them
22:46:45 <kmc> seems it does have it, as __uint24
22:46:51 <ais523> (there's the equivalent of a preprocessor definition you can consult to discover how many repeats will actually do something useful)
22:47:20 <ais523> but any algol 68 impl should support long long long long long, even if it's just equivalent to long long
22:47:21 <b_jonas> 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 <kmc> `` echo 'long long long x;' | gcc -c -x c /dev/stdin
22:47:42 <HackEso> /dev/stdin:1:11: error: ‘long long long’ is too long for GCC
22:47:45 <b_jonas> 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 <ais523> `` echo 'long short x;' | gcc -c -x c /dev/stdin
22:48:10 <HackEso> /dev/stdin:1:6: error: both ‘long’ and ‘short’ in declaration specifiers
22:48:21 <ais523> `` echo 'short short x;' | gcc -c -x c /dev/stdin
22:48:22 <HackEso> /dev/stdin:1:7: error: duplicate ‘short’
22:48:44 <ais523> hmm, IMO the error messages should have had consistent levels of humour
22:48:59 <kmc> `` gcc -c -x c <(echo 'long long long x;') # seems like a nicer way actually
22:49:00 <HackEso> /dev/fd/63:1:11: error: ‘long long long’ is too long for GCC
22:49:11 <ais523> `! c long long long x;
22:49:16 <kmc> I keep forgetting about <(...). it's pretty great
22:49:37 <HackEso> <stdin>:1:11: error: ‘long long long’ is too long for GCC \ compilation terminated due to -Wfatal-errors.
22:49:42 <HackEso> #!/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 <b_jonas> ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c <<<$'int main(void) { signed unsigned x = {0}; return 0; }'
22:49:44 <HackEso> gcc: warning: '-x c' after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated.
22:49:51 <b_jonas> ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { signed unsigned x = {0}; return 0; }'
22:49:52 <HackEso> <stdin>: In function 'main': \ <stdin>:1:25: error: both 'signed' and 'unsigned' in declaration specifiers \ <stdin>:1:34: warning: unused variable 'x' [-Wunused-variable]
22:49:58 <ais523> `` gcc -c -x c <<<'long long long x;'
22:49:58 <HackEso> gcc: warning: ‘-x c’ after last input file has no effect \ gcc: fatal error: no input files \ compilation terminated.
22:50:02 <kmc> what's <<<$
22:50:12 <b_jonas> how did gcc's color output disappear by the way?
22:50:13 <ais523> `` gcc -c -x c /dev/stdin <<<'long long long x;'
22:50:17 <HackEso> /dev/stdin:1:11: error: ‘long long long’ is too long for GCC \ long long long x; \ ^~~~
22:50:32 <ais523> kmc: <<< pipes a literal into standard input
22:50:40 <b_jonas> ``` 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 <HackEso> <stdin>: In function 'main': \ <stdin>:1:24: error: both 'short' and 'char' in declaration specifiers \ <stdin>:1:43: error: both 'long' and 'char' in declaration specifiers \ <stdin>:1:48: warning: unused variable 'y' [-Wunused-variable] \ <stdin>:1:29: warning: unused variable 'x' [-Wunused-variable]
22:51:01 <b_jonas> ``` gcc -Wall -O -o /hackenv/tmp/a.out -x c - <<<$'int main(void) { short float [[unused]] x = {0}; return 0; }'
22:51:03 <HackEso> <stdin>: In function 'main': \ <stdin>:1:24: error: both 'short' and 'float' in declaration specifiers \ <stdin>:1:30: error: expected identifier or '(' before '[' token
22:51:15 <b_jonas> ``` 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 <HackEso> <stdin>: In function 'main': \ <stdin>:1:24: error: both 'short' and 'float' in declaration specifiers \ <stdin>:1:30: error: expected identifier or '(' before '[' token
22:51:19 <ais523> I think $'' is some sort of escaped string
22:51:27 <kmc> `` gcc -c -x c <(echo 'short void x;;')
22:51:27 <b_jonas> what? why doesn't it allow an attribute there?
22:51:28 <HackEso> /dev/fd/63:1:7: error: both ‘short’ and ‘void’ in declaration specifiers
22:51:42 <b_jonas> ais523: yes, allows backslash escapes. useful because C needs newlines sometimes.
22:51:42 <kmc> b_jonas: does C11 support that attribute syntax?
22:52:05 <fizzie> No, [[unused]] is C18.
22:52:35 <b_jonas> ``` 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 <HackEso> <stdin>: In function 'main': \ <stdin>:1:24: error: both 'short' and 'float' in declaration specifiers \ <stdin>:1:30: error: expected identifier or '(' before '[' token
22:52:47 <fizzie> Was it even C18, or was it just in the latest C2x draft?
22:52:49 <ais523> 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 <b_jonas> ``` 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 <HackEso> <stdin>: In function 'main': \ <stdin>:1:18: error: expected expression before '[' token \ <stdin>:1:20: error: 'unused' undeclared (first use in this function) \ <stdin>:1:20: note: each undeclared identifier is reported only once for each function it appears in
22:53:05 <b_jonas> ``` 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 <HackEso> <stdin>: In function 'main': \ <stdin>:1:24: error: both 'short' and 'float' in declaration specifiers \ <stdin>:1:33: error: expected expression before '[' token \ <stdin>:1:34: error: 'unused' undeclared (first use in this function) \ <stdin>:1:34: note: each undeclared identifier is reported only once for each function it appears in \ <stdin>:1:30: warning: unused variable 'x' [-Wunused-variable]
22:53:13 <b_jonas> ``` 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 <HackEso> <stdin>: In function 'main': \ <stdin>:1:33: error: both 'short' and 'float' in declaration specifiers \ <stdin>:1:39: warning: unused variable 'x' [-Wunused-variable]
22:53:36 <b_jonas> fizzie: seriously, how did the colors of gcc output disappear?
22:53:39 <fizzie> ais523: It's more of a bugfix-only release with no new features.
22:53:45 <fizzie> `` gcc -fdiagnostics-color=always -x c <<<'int eger = x;'
22:53:46 <HackEso> [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 <ais523> <Wikipedia> C18 addressed defects in C11 without introducing new language features.
22:53:56 <ais523> OK, that would explain why there's no big fanfare about it
22:54:01 <ais523> bugfix releases are good too, though
22:54:03 <b_jonas> fizzie: yes, but how come it doesn't do that by default now?
22:54:13 <fizzie> b_jonas: It's probably because I made stderr piped into the same cat as stdout.
22:54:21 <fizzie> I assume previously it used isatty on 2.
22:54:48 <fizzie> Or, well, still does, but with a different result.
22:56:44 <fizzie> `` strace -e trace=ioctl gcc -x c <<<'int eger = x;'
22:56:45 <HackEso> 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 <ais523> 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 <fizzie> It does a tcgetattr() != -1.
22:57:55 <ais523> `` strace -e trace=fstat gcc -x c
22:57:56 <HackEso> 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 <fizzie> (And tcgetattr devolves to ioctl.)
22:58:51 <ais523> that seems broken, mightn't some other device use the same ioctl number?
22:59:06 <b_jonas> ais523: there are several ioctls that work only on terminals, and yes, the one that implements tcgetattr is among them
22:59:20 <b_jonas> ais523: that won't happen on Linux
22:59:25 <fizzie> 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 <ais523> <man ioctl> The second argument is a device-dependent request code.
22:59:29 <b_jonas> and glibc can rely on linux-internal stuff like that
22:59:48 <b_jonas> ais523: glibc. this doesn't need to be portable to all systems.
22:59:55 <b_jonas> if it works on linux and hurd it's enough
23:00:11 <b_jonas> glibc depends on a lot of linux-specific stuff
23:00:18 <ais523> does Linux have an actual rule of "no sharing ioctl numbers between different types of devices"?
23:00:30 <b_jonas> and I think some of the small numbers are shared
23:00:34 <ais523> 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 <b_jonas> but it doesn't share numbers in any newly introduced ioctls
23:00:46 <b_jonas> all the sharing are for historical reasons
23:00:50 <ais523> IIRC ioctl numbers are namespaced to some extent
23:01:19 <b_jonas> 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 <b_jonas> but this too is true only for new ioctl numbers, old ones remain for historical reasons
23:02:12 <fizzie> Documentation/ioctl/ioctl-number.txt has a the range assignments.
23:02:14 <b_jonas> http://man7.org/linux/man-pages/man2/ioctl_list.2.html has some docs
23:02:16 <fizzie> A lot of "conflict!"s.
23:02:55 <ais523> right, TCGETS is 0x5401, and 0x54 == 'T'
23:05:02 <fizzie> 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 <b_jonas> 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 <b_jonas> (some programs will still write carriage returns then)
23:06:55 <ais523> there's seccomp_filter but that's likely less elegant rather than more elegant
23:06:57 <b_jonas> (and some programs will write color codes anyway)
23:07:14 <fizzie> It's not for me, it's for HackEso.
23:07:45 <ais523> HackEso having TERM=dumb would make sense though
23:07:46 <shachaf> Did you figure out what was going on with the bizarreness a while ago?
23:08:01 <ais523> alternatively, HackEso translating ASCII color codes to IRC color codes would also make sense
23:08:04 <fizzie> 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 <b_jonas> ais523: using a custom terminfo that has IRC color and format codes would be even better for esoteric value
23:08:14 <ais523> shachaf: the ::=echo weirdness?
23:08:15 <bfbot> :shachaf: the weirdness?
23:08:34 <shachaf> The HackEso output being truncated thing.
23:08:38 <fizzie> ais523: Having TERM=dumb would make sense, though I think most programs do the TTY check.
23:08:49 <fizzie> shachaf: Yes, I think I did, but I can't remember. At least it got fixed.
23:08:51 <b_jonas> TODO self: make such a terminfo; make a better ! c and ! c++ wrapper; make an addwhatis command
23:08:53 <zzo38> Some programs support a NO_COLOR environment variable to disable colours.
23:09:04 <ais523> fizzie: right, but many programs also use terminfo and friends to work out how to display colors
23:09:17 <ais523> so if they conclude that stdout is a terminal but doesn't support color, they'll do the right thing
23:09:23 <b_jonas> fizzie: programs do those two checks for different reasons
23:09:34 <fizzie> ais523: Well, for the color part.
23:09:46 <fizzie> But I think there's more behavioral changes they can do when it's not a terminal.
23:09:55 <ais523> it's unclear whether we want the terminal or non-terminal output, though
23:10:03 <ais523> HackEso is effectively a terminal wrt the way it's used
23:10:18 <ais523> we want the output programs produce when used interactively, not the batch-process output
23:10:27 <fizzie> ais523: Well... not if it's a progress bar or a spinner.
23:10:31 <b_jonas> is bfbot parsing IRC messages wrong?
23:10:41 <bfbot> :foo :=echo bar bar :qux
23:10:53 <b_jonas> I suspect it's parsing IRC messages wrong
23:11:07 <b_jonas> like searches for " :=" in it
23:11:07 <bfbot> like searches for " :No such command. Try =help.
23:11:14 <ais523> fizzie: well, the only reason that's bad is that the cursor movement (even \r or \b) doesn't work correctly
23:11:45 <ais523> there's probably half a command in bfbot's output that got eaten by the ircd
23:12:24 <ais523> hmm, I bet the ircd added the colon anyway
23:12:35 <ais523> (the second =echo was sent without the colon)
23:12:49 <b_jonas> sure, ircd fixes the messages so that clients are easy to write
23:13:02 <ais523> it's technically only needed to escape multi-character arguments, though
23:13:14 <ais523> but always adding it is probably easier for consistency
23:13:26 <b_jonas> technically yes, but the ircd wants to accept more and produce less to make clients easy to write
23:13:27 <fizzie> 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 <ais523> well, take a program like apt
23:13:56 <b_jonas> 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:04 <ais523> it complains whenever its output isn't a terminal
23:14:17 <b_jonas> I think it canonicalizes the capitalization of channel anmes
23:14:20 <ais523> because it's not intended to have stable output
23:14:35 <b_jonas> so that clients don't have to casefold channel names to find which channel they're receiving something in
23:14:36 <fizzie> Yes, I don't really like that complaint.
23:14:36 <ais523> but the use via HackEso is interactive
23:14:56 <fizzie> (I use "apt search ... | grep ..." semi-often.)
23:15:14 <b_jonas> 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 <b_jonas> fizzie: eg. we'll use git status -bs because the output of git status would be unreadable
23:16:06 <fizzie> 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 <b_jonas> fizzie: I suspect that no terminal is probably better,
23:16:37 <b_jonas> but terminal might be more suitable for HackEso's esotericness
23:17:22 <b_jonas> 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 <b_jonas> 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 <b_jonas> but sometimes they expect interactivity even if only isatty(2)
23:18:49 <b_jonas> I think no terminal is probably better since you terminate the program after each command
23:19:01 <b_jonas> we can't just continue to give it more input like we can in termbot
23:19:36 <b_jonas> obviously we can override either way in individual commands, with |cat or with script resp
23:19:57 <fizzie> 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 <fizzie> b_jonas: Incidentally, I toyed around using a 512-byte block device as the stdout file descriptor, too.
23:21:28 <fizzie> 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:34 <b_jonas> @run "hello :"++"=echo world"
23:22:57 <fizzie> 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 <b_jonas> ^ul (=echo world)(hello :)SS
23:23:36 <HackEso> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch [<output-file>] <URL>" downloads files. Files saved to $HACKENV are persistent, and $HACKENV/bin is in $PATH. $HACKENV is a mercurial repository, "`revert <rev>" can be used to revert, https://hack.esolangs.org/repo/ to browse. $PWD ($HACKENV/tmp) is persistent but unversioned, /tmp is ephemeral.
23:24:18 <ais523> 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 <fizzie> That's almost certainly loopable, and I don't have a natural way to make it not.
23:24:43 <b_jonas> ais523: Linux runs on several processor types
23:25:22 <fizzie> Hm, maybe the : that seems to end up in all the "middle commands" saves it.
23:25:32 <ais523> bfbot: yes, but I mean it runs on multiple operating systems
23:25:36 <b_jonas> =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>>>.++.++++.----.+++++++++++++.>++++.<---.+++..>----.
23:25:43 <bfbot> ok, defined 'prefixes'
23:26:14 <b_jonas> I shouldn't have overwritten the prefixes macro
23:26:17 <HackEso> Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =.
23:26:41 <b_jonas> =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>++.>>+++++++++++++++.>++++.<<<<<.>>>>>----.++.<----------.+.+++.>++++++.<----.>-----.<<<<++++++++++.<.>>>>+.>++.<++++++++.-------.++++++++.>-.<<<<<.>>>++++++++++++++.<<<++++++++++++.------------.>>++++++.>>--------------.++.++++++++.<<---.>>>-.<++++.
23:26:46 <b_jonas> =str 1a<<<<.>>>>---------------.<<<<++++++++++++.------------.>>.>>+++++++.++++++++.<<---.>>.>+.<<<<<.+.+++++++++++.------------.>>>>---.-----------.++++++++++++.-----------.++.---.+.+++++++++++++.>.<<<<<.>>--.<<.>>>>.>--.<<<<<.>+++++.<++++++++++++.------------.>>>>>++.<-------.>+.-.+.<------.+++++++++++++.>-.<<<<<.
23:26:51 <b_jonas> =str 1a+++++++++++.+.------------.>>>>--.--------.>.<----.>-.<++++.>---.<++++.--------.<<<<.>>>>>++++++++++++++.<<<<<++++++++++++.------------.>>>>++++++++.-----.>------------.<+++++.>+.<<<<<+++++++++++++.>>>>-------.+++++++++++++.>+.<<<<<-------------.++++++++.--------.++++++++++++.------------.>>>>-----.-------.++
23:26:56 <b_jonas> =str 1a++++++++++.-..<<<<.+++++++++.---------.++++++++++++.------------.>>>>----.<<<<+++++++++++++.>>>>--------.+++++++++++++.>.<<<<<-------------.>>>---.<<<.++++++++++++.------------.>>>>-------------.++++.----.+++++++++++++.>.<<<<<.>--.<++++++++++++++.
23:27:00 <bfbot> ok, defined 'prefixes'
23:27:00 <bfbot> Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =.
23:27:53 <b_jonas> =str 1s++++[->++++<]>[->++>+++>++++>+++++>++++++>+++++++<<<<<<]> >>>>.++.++++.----.+++++++++++++.>++++.---.++++.<------.+++++.---------.
23:27:56 <fizzie> What does :=prefixes do then?
23:27:56 <bfbot> Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ , bfbot =.
23:28:07 <bfbot> ok, defined 'hackesoquine'
23:28:14 <HackEso> bfbotquine? No such file or directory
23:28:18 -!- ChanServ has set channel mode: +o fizzie.
23:28:25 <fizzie> (Just getting prepared.)
23:28:45 <bfbot> ok, defined 'hackesoquin'
23:29:17 <b_jonas> =str 1s ++++++++[->++++++++<]+.
23:29:22 <bfbot> ok, defined 'hackesoquin'
23:29:35 <b_jonas> =str 1s ++++++++[->++++++++<]>+.
23:29:37 <bfbot> ok, defined 'hackesoquin'
23:29:44 <HackEso> bfbotquine? No such file or directory
23:29:49 -!- ChanServ has set channel mode: +o ais523.
23:30:17 <ais523> ^ul ((=echo ^ul )SaS(:^)S):^
23:30:17 <b_jonas> ``` set -e; f=/hackenv/bin/bfbotquine; rm -f "$f"
23:30:17 <fungot> =echo ^ul ((=echo ^ul )SaS(:^)S):^
23:30:17 <bfbot> ^ul ((=echo ^ul )SaS(:^)S):^
23:30:23 <b_jonas> ``` set -e; f=/hackenv/bin/bfbotquine; rm -vf "$f"
23:30:34 <ais523> hmm, fungot is ignoring bfbot
23:30:34 <fungot> 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 <bfbot> ok, defined 'hackesoquin'
23:30:41 <fizzie> ais523: Yeah, manually.
23:31:18 <ais523> `! underload ((=echo `! underload )SaS(:^)S):^
23:31:19 <HackEso> =echo `! underload ((=echo `! underload )SaS(:^)S):^
23:31:32 <ais523> `! underload ((t:=echo `! underload )SaS(:^)S):^
23:31:32 <bfbot> `! underload )SaS(:^)S):^
23:31:33 <HackEso> t:=echo `! underload ((t:=echo `! underload )SaS(:^)S):^
23:31:33 <bfbot> `! underload )SaS(:^)S):^
23:31:42 <fizzie> 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 <bfbot> But I assume a bfbot/HackEso loop just needs HackEso to output "whatever :No such command. Try =help.
23:32:07 <b_jonas> ``` set -e; f=/hackenv/bin/STOP; >$f echo $'#!/bin/sh\nrm -vf /hackenv/bin/bfbotquine'; chmod -c a+x "$f"
23:32:11 <HackEso> mode of '/hackenv/bin/STOP' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
23:32:37 <b_jonas> ``` set -e; f=/hackenv/bin/bfbotquine; >$f echo $'#!/bin/sh\necho hello, world'; chmod -c a+x "$f"
23:32:39 <HackEso> mode of '/hackenv/bin/bfbotquine' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
23:32:44 <ais523> huh, if there are multiple :=s in a line, bfbot runs the /last/
23:32:45 <HackEso> removed '/hackenv/bin/bfbotquine'
23:32:47 <HackEso> bfbotquine? No such file or directory
23:33:03 <ais523> `! underload ((t:)S(=echo `! underload )SaS(:^)S):^
23:33:04 <HackEso> t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^
23:33:04 <bfbot> `! underload ((t:)S(=echo `! underload )SaS(:^)S):^
23:33:05 <HackEso> t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^
23:33:05 <bfbot> `! underload ((t:)S(=echo `! underload )SaS(:^)S):^
23:33:06 <HackEso> t:=echo `! underload ((t:)S(=echo `! underload )SaS(:^)S):^
23:33:06 <bfbot> `! underload ((t:)S(=echo `! underload )SaS(:^)S):^
23:33:07 <HackEso> 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 <b_jonas> guys, if this becomes a loop and I am not disconnected, please run this: =def 1hackesoquine
23:33:17 <b_jonas> guys, if this becomes a loop and I am not disconnected, please run this: `STOP
23:33:34 <ais523> +q best mode for breaking loops
23:33:37 <b_jonas> ``` set -e; f=/hackenv/bin/bfbotquine; >$f echo $'#!/bin/sh\necho ":=hackesoquine"'; chmod -c a+x "$f"
23:33:37 <bfbot> No such command. Try =help.
23:33:39 <HackEso> mode of '/hackenv/bin/bfbotquine' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
23:33:40 <ais523> (I guess +m would also work)
23:33:51 <fizzie> ais523: I think you beat me by some milliseconds.
23:33:52 -!- ais523 has set channel mode: +q bfbot!*@*.
23:33:55 <HackEso> removed '/hackenv/bin/bfbotquine'
23:33:56 -!- ais523 has set channel mode: -q bfbot!*@*.
23:34:02 <bfbot> ok, defined 'hackesoquine'
23:34:14 <HackEso> bfbotquine? No such file or directory
23:34:16 <ais523> fizzie: out of interest, what was your preferred loop-breaking method?
23:34:31 <fizzie> ais523: I had /mode #esoteric +q bfbot!*@* waiting on the input line as well.
23:34:33 <int-e> Oh, HackEso does not ignore bfbot?
23:34:54 <fizzie> int-e: HackEso doesn't generally ignore known bots.
23:34:56 <b_jonas> kspalaiologos: can you please modify your bot?
23:35:11 <b_jonas> kspalaiologos: triggering on := anywhere in the irc line seems like a bad idea
23:35:11 <bfbot> kspalaiologos: triggering on :No such command. Try =help.
23:35:11 <ais523> right, I could have broken the loop earlier, but wanted to make sure it was a true loop first
23:35:19 <ais523> (isn't there some code in lambdabot that tends to stop loops after four iterations?)
23:35:33 -!- ais523 has set channel mode: -o ais523.
23:35:43 <int-e> ais523: Not that I know of. But it should be ignoring bfbot.
23:35:51 <b_jonas> ais523: fungto has such a code
23:36:00 <fizzie> 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:38 <ais523> admittedly, the most surprising thing about that loop was that `! underload actually works
23:36:59 <fizzie> That said, there is an ignore list, currently ['Lymia', 'Lymee', 'Madoka-Kaname'] which is... just a little out of date.
23:37:26 <int-e> I don't even recall any Madoka-Kaname
23:37:48 <b_jonas> 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:38:01 <ais523> 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 <ais523> bfbot: well, quines are pretty much trivial to write in Underload so it's my usual choice for botloops
23:38:19 <b_jonas> ais523: I don't think it's written in bf
23:38:41 <ais523> just look at who wrote it
23:38:43 <b_jonas> I thought it's called bfbot because it interprets bf
23:38:54 <fizzie> I think they mentioned it being written in bash? Not sure I paid enough attention.
23:39:22 <ais523> based on what it does, it definitely could be written in bf
23:39:44 <bfbot> Error: Name can contain only lowercase letters and digits.
23:39:45 <b_jonas> 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 <fungot> b_jonas: the problem with object-orientation is that it's standard, you have
23:40:05 <ais523> b_jonas: oh, because BF doesn't self-compose well due to only having one tape
23:40:13 <fizzie> <kspalaiologos> Bfbot is written in Seed :)
23:40:37 <fizzie> If that's our Seed, it's probably a joke.
23:40:39 <ais523> imode: it's a language which interprets the output of a random number generator as Befunge
23:40:53 <ais523> the program is just the random number generator seed
23:41:14 <ais523> 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 <b_jonas> 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 <fizzie> http://esolangs.org/logs/2019-11-22.html#lbe is where I got the bash from.
23:41:33 <b_jonas> maybe "Seed" is the name of more than one thing?
23:41:37 <ais523> thutubot used a bash wrapper to actually do the connection of the bot to IRC
23:41:58 <fizzie> Yes, more than one language might be involved.
23:42:01 <ais523> anyway, kspalaiologos almost certainly has a befunge → seed compiler
23:42:25 -!- fizzie has set channel mode: -o fizzie.
23:42:49 <fizzie> shachaf: Incidentally, I switched umlbox to use a protobuf for the configuration, because, you know, protos.
23:42:50 <ais523> 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 <b_jonas> 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 <fizzie> 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 <fungot> fizzie: i normally use define-macro...) value) ( ' red t) ( h h))
23:43:45 <ais523> b_jonas: the problem with that is mostly sandboxing, isn't it?
23:44:02 <ais523> self-hosting languagebots
23:44:40 <fizzie> 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:52 <b_jonas> 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 <fizzie> It's just much easier to hot-break than hot-fix things.
23:45:45 <ais523> 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 <b_jonas> 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 <b_jonas> 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 <fizzie> 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 <b_jonas> 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 <b_jonas> the interpreter is always a separate process
23:48:17 <b_jonas> it's just that perlbot threw out all the other interpreters for some reason
23:48:39 <fizzie> http://ix.io/239r is the total list of times I've used it on channel.
23:48:41 <ais523> hmm, a wasmbot would probably be pretty good at self-hosting
23:48:46 <fizzie> No idea if those actually did the right thing.
23:48:58 <b_jonas> 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 <b_jonas> "jeval:" used to trigger two bots
23:49:06 <ais523> idea: a self-modifying esolang with version control
23:49:26 <b_jonas> it isn't truly self-modifying
23:49:44 <b_jonas> but it has a version control, and there's a self-modifying compiler implemented over it
23:49:53 <ais523> I meant self-modifying in the sense of programs modifying themselves, not in the Snowflake sense
23:49:56 <b_jonas> a compiler that compiles a slightly higher level to Wikiplia
23:51:41 <fizzie> 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 <ais523> 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 <ais523> 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 <b_jonas> there is https://esolangs.org/wiki/Legit whose source format is a git repository
23:54:39 <ais523> 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 <b_jonas> ais523: prolog then, since you can undo unifications?
23:55:56 <b_jonas> though it's still TC without failing
23:56:25 <fizzie> 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:57:24 <fizzie> I don't think there's any level of -std=c2x support on the GCC version on HackEso though.
23:57:39 <HackEso> 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 <fizzie> Yeah, I think it's 9 only.