00:33:02 <esolangs> [[EsoBall]] N https://esolangs.org/w/index.php?oldid=169998 * A() * (+419) Created page with "[[EsoBall]] is an esolang made by [[User:A()]]. Inspired by https://en.wikipedia.org/wiki/American_football. ==How it works== There are two teams, Team Program and Team Blockers. In order to output a 1, Team Program must throw it to the goal. To output a zero, Team Blockers
00:44:07 -!- amby has quit (Quit: so long suckers! i rev up my motorcylce and create a huge cloud of smoke. when the cloud dissipates im lying completely dead on the pavement).
00:52:40 -!- Lord_of_Life has quit (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine).
00:54:12 -!- Lord_of_Life has joined.
02:06:26 <esolangs> [[!frjnrehrbwgyrigbyieurgbyfaerkhbvrwgtr.]] M https://esolangs.org/w/index.php?diff=169999&oldid=169913 * Sawyer.go0923 * (+40) fixed and added somethings.
02:35:13 -!- Sgeo has quit (Read error: Connection reset by peer).
02:52:04 -!- Sgeo has joined.
03:01:55 -!- dbohdan has quit (Ping timeout: 240 seconds).
03:19:54 <esolangs> [[User:FluixMakesEsolangs]] M https://esolangs.org/w/index.php?diff=170000&oldid=169889 * FluixMakesEsolangs * (+14) /* 2025 */
03:43:04 <esolangs> [[User:Tommyaweosme]] https://esolangs.org/w/index.php?diff=170001&oldid=169915 * Tommyaweosme * (+897)
03:48:09 <esolangs> [[Abcdefghijklmnopqrstuvwxyz.now.i.know.my.abcs.next.time.wont.you.sing.with.me]] https://esolangs.org/w/index.php?diff=170002&oldid=168480 * Sawyer.go0923 * (-347)
03:49:28 <esolangs> [[Abcdefghijklmnopqrstuvwxyz.now.i.know.my.abcs.next.time.wont.you.sing.with.me]] https://esolangs.org/w/index.php?diff=170003&oldid=170002 * Sawyer.go0923 * (+21)
04:08:48 <esolangs> [[User:Tommyaweosme]] https://esolangs.org/w/index.php?diff=170004&oldid=170001 * Tommyaweosme * (+726) bringing together past parts of old userpages from long ago in order to create the one correct userpage in perfect harmony and sync with all other variations past.
04:17:27 -!- ais523 has quit (Quit: sorry about my connection).
04:34:04 <esolangs> [[Redirekt]] N https://esolangs.org/w/index.php?oldid=170005 * Tommyaweosme * (+548) Created page with "Redirekt is an esoteric data structure made by [[user:tommyaweosme]]. It works like this: you can place data on any part of an infinitely long line. Gravity will push it down. Any two data that intersects will permenantly merge (by addition, concatenation, or any
04:36:29 <esolangs> [[Special:Log/newusers]] create * Mun Hammer * New user account
04:38:56 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=170006&oldid=169940 * Mun Hammer * (+233) /* Introductions */
05:16:56 -!- dbohdan has joined.
05:26:54 -!- ais523 has joined.
05:29:18 -!- Lord_of_Life has quit (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine).
05:49:07 -!- Lord_of_Life has joined.
05:53:19 -!- Lord_of_Life has quit (Client Quit).
05:56:53 -!- Lord_of_Life has joined.
06:09:12 <esolangs> [[User:Tommyaweosme]] https://esolangs.org/w/index.php?diff=170007&oldid=170004 * Ais523 * (-48)
06:10:42 <esolangs> [[Special:Log/delete]] revision * Ais523 * Ais523 changed visibility of 11 revisions on page [[User:Tommyaweosme]]: content hidden: redact personal/private information: according to [[Esolang:Policy]] you should not submit private information to the wiki
06:30:39 <esolangs> [[Vixen]] https://esolangs.org/w/index.php?diff=170008&oldid=169182 * Corbin * (+1921) Add Vixen expression language.
07:30:09 <esolangs> [[Talk:OISC]] M https://esolangs.org/w/index.php?diff=170009&oldid=169995 * None1 * (+0) /* does an OISC have to be Turing complete? */
07:34:50 -!- ais523 has quit (Quit: quit).
07:40:56 <esolangs> [[Interpret Esolangs Online]] https://esolangs.org/w/index.php?diff=170010&oldid=168583 * None1 * (+224) /* Note */
07:41:48 <esolangs> [[Interpret Esolangs Online]] https://esolangs.org/w/index.php?diff=170011&oldid=170010 * None1 * (+1) /* Note */
08:12:28 -!- Sgeo has quit (Read error: Connection reset by peer).
08:30:21 -!- tromp has joined.
08:52:53 <esolangs> [[Satans Disciples GangLang $]] M https://esolangs.org/w/index.php?diff=170012&oldid=165514 * JIT * (+23)
09:24:55 <esolangs> [[Special:Log/newusers]] create * Mker-bin * New user account
09:47:03 <esolangs> [[Goto machine]] M https://esolangs.org/w/index.php?diff=170013&oldid=158978 * TenBillionPlusOne * (+17) /* Memory and syntax */
09:48:01 <esolangs> [[Goto machine]] M https://esolangs.org/w/index.php?diff=170014&oldid=170013 * TenBillionPlusOne * (+0) /* Execution */
09:51:23 <esolangs> [[Goto machine]] M https://esolangs.org/w/index.php?diff=170015&oldid=170014 * TenBillionPlusOne * (+14) /* Looping counter */
09:52:05 <esolangs> [[Goto machine]] M https://esolangs.org/w/index.php?diff=170016&oldid=170015 * TenBillionPlusOne * (+2) /* NOP */
09:53:41 <esolangs> [[Goto machine]] M https://esolangs.org/w/index.php?diff=170017&oldid=170016 * TenBillionPlusOne * (+14) /* NOP */
10:06:39 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170018&oldid=169996 * Yayimhere2(school) * (-151) The proof is still no proof. There's multiple cases where things are very close to, but not 100% TC, even though they look like they'd be. If you want to prove it, then make a formal proof, by compilation or similar. Im deleting the section again, it is no proof. For examp
10:20:13 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
10:22:13 <esolangs> [[User talk:Buckets]] https://esolangs.org/w/index.php?diff=170019&oldid=168822 * JIT * (+933) /* What did you mean by this? */ new section
10:24:00 <esolangs> [[4gn/]] M https://esolangs.org/w/index.php?diff=170020&oldid=169784 * JIT * (+50)
10:24:04 -!- tromp has joined.
10:40:55 -!- msv has quit (Remote host closed the connection).
10:59:32 <esolangs> [[Hangover]] N https://esolangs.org/w/index.php?oldid=170021 * Yayimhere2(school) * (+1167) Created page with "'''Hangover''', named by the constant spinning of its counter, is a 2d esoteric programming language created by [[User:Yayimhere]]. It uses only two commands. == Semantics == Hangover has nowhere to store memory. As such, it must be stored in the program. It
11:05:11 <esolangs> [[XOR Machine]] N https://esolangs.org/w/index.php?oldid=170022 * None1 * (+31) Redirected page to [[XO Mchne]]
11:06:42 <esolangs> [[Hangover]] https://esolangs.org/w/index.php?diff=170023&oldid=170021 * Yayimhere2(school) * (+20) /* Semantics */
11:07:27 <esolangs> [[Talk:OISC]] https://esolangs.org/w/index.php?diff=170024&oldid=170009 * None1 * (+308) /* Does an OISC have to be Turing complete? */
11:08:07 <esolangs> [[User:Yayimhere]] https://esolangs.org/w/index.php?diff=170025&oldid=169734 * Yayimhere2(school) * (+15) /* esolangs */
11:40:02 <esolangs> [[Brain-accumulator]] https://esolangs.org/w/index.php?diff=170026&oldid=160267 * Kaveh Yousefi * (+8143) Supplemented an interpreter implementation in the programming language Common Lisp.
11:57:07 <esolangs> [[Brain-accumulator]] https://esolangs.org/w/index.php?diff=170027&oldid=170026 * Kaveh Yousefi * (+142) Rectified the cat program (Cat), which would translate to the brainfuck code ,[,.], and supplemented a truth-machine implementation.
11:58:03 <esolangs> [[Brain-accumulator]] M https://esolangs.org/w/index.php?diff=170028&oldid=170027 * Kaveh Yousefi * (+0) Rectified the hyperlink to the cat program article.
12:13:06 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
12:21:38 -!- tromp has joined.
13:17:25 <esolangs> [[Brain-accumulator]] M https://esolangs.org/w/index.php?diff=170029&oldid=170028 * Kaveh Yousefi * (-1) Rectified an instance of cacography.
13:32:33 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170030&oldid=170018 * Aadenboy * (+707) simple translation to unbounded brainfuck, turing-complete
13:58:07 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170031&oldid=170030 * Yayimhere2(school) * (+53) /* Computational class */ add "Note that this assumes infinity is a valid constant."
13:59:36 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
14:02:18 <esolangs> [[]] https://esolangs.org/w/index.php?diff=170032&oldid=166390 * Yayimhere2(school) * (+32) /* changes */
14:02:44 -!- tromp has joined.
14:03:24 <esolangs> [[Talk:QX]] N https://esolangs.org/w/index.php?oldid=170033 * Aadenboy * (+583) Created page with "adding a note here since I don't have the time to do this at the momenta proof w/o infinity should be possible by simulating the wrapping behavior for <code>+</code> and <code>-</code>, then replacing <code></code> and <code>-</code> with <code>257</code> and <code>0</c
14:07:50 <esolangs> [[Special:Log/upload]] upload * * uploaded "[[File:QX logo.png]]"
14:08:07 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170035&oldid=170031 * * (+45)
14:09:06 <esolangs> [[Hangover]] https://esolangs.org/w/index.php?diff=170036&oldid=170023 * Yayimhere2(school) * (+121) /* Semantics */
14:10:08 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170037&oldid=170035 * Yayimhere2(school) * (+3) /* Computational class */ its translation *from* not *to*
14:10:19 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170038&oldid=170037 * Yayimhere2(school) * (-1) /* Computational class */
14:15:00 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170039&oldid=170038 * * (-2901) /* Python interpreter */ Removed AI generated interpreter
14:17:43 <esolangs> [[Assembler]] N https://esolangs.org/w/index.php?oldid=170040 * Timm * (+1083) Created page with "== '''''MEMORY''''' == Regs; A, B, C, D, E, ACC, PC 0000 0001 0010 0011 0100 0101 NOCODE Ram; TR, ER, PROGRAM VALUE OR PV (STORES PV'S A, B, C, D, E, ACC AND SO ON) 0110 0111 NOCODE INT; 1000 INT == '''''COMMANDS''''' == MOV [REG] [INT/REG] load [2] into [1] MOV [R
14:18:15 <esolangs> [[Assembler]] https://esolangs.org/w/index.php?diff=170041&oldid=170040 * Timm * (+14)
14:18:48 <esolangs> [[User:Timm]] https://esolangs.org/w/index.php?diff=170042&oldid=169883 * Timm * (+15)
14:19:14 <esolangs> [[Eror]] https://esolangs.org/w/index.php?diff=170043&oldid=146993 * 5anz * (+0) /* Definitions & Redefinitions */
14:19:55 <esolangs> [[QX]] M https://esolangs.org/w/index.php?diff=170044&oldid=170039 * Aadenboy * (+60) /* Lua interpreter */ negative infinity
14:21:07 <esolangs> [[Eror]] https://esolangs.org/w/index.php?diff=170045&oldid=170043 * 5anz * (+1) /* Stack */
14:22:44 <esolangs> [[User talk:]] https://esolangs.org/w/index.php?diff=170046&oldid=169805 * * (+663) /* QX is my best project so far */ new section
14:30:12 <esolangs> [[Eror]] https://esolangs.org/w/index.php?diff=170047&oldid=170045 * 5anz * (-3) /* Exclusionary cat program */
14:31:13 <esolangs> [[A Delusion of Control]] N https://esolangs.org/w/index.php?oldid=170048 * Yayimhere2(school) * (+819) Created page with "'''A Delusion of Control''' or ADoC, is an esoteric language, devised by [[User:Yayimhere]], as a strange stack based language. == Command set == Using the following notation: '''stack - stack after command , program after command''': * '''''':
14:34:20 <esolangs> [[Eror]] https://esolangs.org/w/index.php?diff=170049&oldid=170047 * 5anz * (-1) /* Number guessing game */
14:34:42 <esolangs> [[Eror]] https://esolangs.org/w/index.php?diff=170050&oldid=170049 * 5anz * (+1) /* Number guessing game */
14:44:16 <esolangs> [[User:QuantumV]] M https://esolangs.org/w/index.php?diff=170051&oldid=161122 * QuantumV * (+16)
14:44:38 <esolangs> [[CONTAIN]] M https://esolangs.org/w/index.php?diff=170052&oldid=169957 * QuantumV * (+27)
14:49:38 <esolangs> [[Category talk:Stubs]] https://esolangs.org/w/index.php?diff=170053&oldid=8394 * 5anz * (+179)
14:57:17 <esolangs> [[Category talk:Thematic]] N https://esolangs.org/w/index.php?oldid=170054 * 5anz * (+310) Created page with "== All languages == Could you not argue every language is Thematic? brainfuck could be argued to be themed around having a small interpreter. [[Forte]] could be argued to be themed around redefining numbers. You could realistically use any language as an exa
15:01:06 <esolangs> [[Use of AI in esoteric languages]] https://esolangs.org/w/index.php?diff=170055&oldid=169976 * * (-30) /* Esolang interpreters generated by AI */
15:11:57 <esolangs> [[A Delusion of Control]] https://esolangs.org/w/index.php?diff=170056&oldid=170048 * Yayimhere2(school) * (+55) /* Command set */
15:16:29 -!- Sgeo has joined.
15:39:42 <esolangs> [[Category talk:Thematic]] https://esolangs.org/w/index.php?diff=170057&oldid=170054 * Aadenboy * (+517) /* All languages */ reply
15:50:20 -!- msv has joined.
15:50:36 -!- msv has quit (Remote host closed the connection).
15:51:01 -!- msv has joined.
16:09:03 <esolangs> [[Gemini]] N https://esolangs.org/w/index.php?oldid=170058 * PrySigneToFry * (+35383) Created page with "{{WIP}} Not be confused with the AI with the same name of this programming language. Gemini is designed by PSTF. = Intro = == Code Blocks == In order to make the program look more layered and clear, we do not use any brackets to distinguish code blocks. All cod
16:09:21 <esolangs> [[Gemini]] https://esolangs.org/w/index.php?diff=170059&oldid=170058 * PrySigneToFry * (+22093)
16:13:55 <esolangs> [[Abcdefghijklmnopqrstuvwxyz.now.i.know.my.abcs.next.time.wont.you.sing.with.me]] https://esolangs.org/w/index.php?diff=170060&oldid=170003 * Sawyer.go0923 * (+36)
16:16:21 <esolangs> [[Talk:QX]] https://esolangs.org/w/index.php?diff=170061&oldid=170033 * PkmnQ * (+219)
16:18:46 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
16:19:56 <esolangs> [[Talk:QX]] M https://esolangs.org/w/index.php?diff=170062&oldid=170061 * PkmnQ * (+9) forgot the newline
16:20:16 -!- Yayimhere has joined.
16:27:03 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170063&oldid=170044 * Aadenboy * (+836) /* Computational class */ some bug fixing + a non-infinity proof
16:38:21 <esolangs> [[Special:Log/newusers]] create * RikoMamaBala * New user account
16:38:43 <esolangs> [[Talk:QX]] https://esolangs.org/w/index.php?diff=170064&oldid=170062 * PkmnQ * (+97)
16:42:32 -!- tromp has joined.
16:51:37 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=170065&oldid=170006 * RikoMamaBala * (+256)
17:20:21 <esolangs> [[Use of AI in esoteric languages]] M https://esolangs.org/w/index.php?diff=170066&oldid=170055 * Ractangle * (+34)
17:21:28 <esolangs> [[Use of AI in esoteric languages]] https://esolangs.org/w/index.php?diff=170067&oldid=170066 * Yayimhere2(school) * (-9) /* Esolang interpreters generated by AI */ its not actually official, there is none(COPY WITH @)
17:24:07 <esolangs> [[User:Aadenboy/xml maybe]] N https://esolangs.org/w/index.php?oldid=170068 * Aadenboy * (+6303) cool concept I came up with some time ago
17:24:45 <esolangs> [[User:Aadenboy/xml maybe]] https://esolangs.org/w/index.php?diff=170069&oldid=170068 * Aadenboy * (+111)
17:29:56 <esolangs> [[User:Aadenboy]] https://esolangs.org/w/index.php?diff=170070&oldid=169986 * Aadenboy * (+30) /* just some drafts */ add [[User:Aadenboy/xml maybe]]
17:30:15 <esolangs> [[User:Aadenboy/randomuserpage]] https://esolangs.org/w/index.php?diff=170071&oldid=169946 * Aadenboy * (+28) add [[User:Aadenboy/xml maybe]]
17:33:14 <esolangs> [[User talk:Aadenboy]] https://esolangs.org/w/index.php?diff=170072&oldid=165523 * Yayimhere2(school) * (+527) /* Discussion */
17:34:02 <esolangs> [[User:Yayimhere]] https://esolangs.org/w/index.php?diff=170073&oldid=170025 * Yayimhere2(school) * (+39) /* things about me */
17:40:51 <esolangs> [[Talk:QX]] https://esolangs.org/w/index.php?diff=170074&oldid=170064 * * (+750) /* You can translate Brainpocalypse to QX */ new section
17:42:54 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170075&oldid=170063 * * (+284) /* Computational class */
17:43:14 <esolangs> [[Talk:QX]] https://esolangs.org/w/index.php?diff=170076&oldid=170074 * * (+47) /* You can translate Brainpocalypse to QX */
17:43:46 <esolangs> [[QX]] M https://esolangs.org/w/index.php?diff=170077&oldid=170075 * * (+2) /* Computational class */
17:47:36 <esolangs> [[QX]] M https://esolangs.org/w/index.php?diff=170078&oldid=170077 * * (+2) /* Computational class */
17:52:35 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170079&oldid=170078 * Aadenboy * (-4) /* Computational class */
17:57:02 -!- ais523 has joined.
17:58:21 <esolangs> [[Talk:QX]] https://esolangs.org/w/index.php?diff=170080&oldid=170076 * Aadenboy * (+444) /* You can translate Brainpocalypse to QX */ fix
17:59:00 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170081&oldid=170079 * Aadenboy * (+113) /* Computational class */ fix
17:59:23 <esolangs> [[QX]] https://esolangs.org/w/index.php?diff=170082&oldid=170081 * Aadenboy * (-3) /* Computational class */
18:02:01 <esolangs> [[Category talk:Thematic]] https://esolangs.org/w/index.php?diff=170083&oldid=170057 * Ais523 * (+955) it's mostly about visual appearance
18:03:21 <esolangs> [[Category talk:Thematic]] https://esolangs.org/w/index.php?diff=170084&oldid=170083 * Ais523 * (+314) an addendum
18:09:18 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
18:25:38 -!- tromp has joined.
18:26:47 <ais523> still trying to wake up properly
18:27:04 <Yayimhere> hope you end up waking up properly
18:32:54 <esolangs> [[Special:Log/newusers]] create * Esocreator * New user account
18:35:20 <korvo> Great to see that QX got positive attention. I suppose that it's an instance of Cunningham's Law that somebody will reply to an AI-generated interpreter with a hand-written interpreter that is easier to read.
18:35:53 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=170085&oldid=170065 * Esocreator * (+262)
18:36:27 <Yayimhere> my most attention given esolang is probably ;;;
18:37:03 <esolangs> [[User:Esocreator]] N https://esolangs.org/w/index.php?oldid=170086 * Esocreator * (+117) Created page with "Hello! My name is Esocreator. I got interested in esolangs around October 2025. Save this if i become famous one day."
18:38:48 <esolangs> [[OoOoOM]] https://esolangs.org/w/index.php?diff=170087&oldid=169158 * Yayimhere2(school) * (+98) /* Commands */
18:40:25 <Yayimhere> I guess RECT4n=GLE got some attention
18:41:40 <ais523> this discussion has made me really curious about just how bad the AI-generated QX interpreter is
18:42:29 <Yayimhere> "discussion" is a little of a stretch
18:42:47 <ais523> well, was checking across IRC and the wiki talk page and the wiki edit history
18:43:01 <ais523> I can't tell how much of the ridiculousness here is the AI and how much is Python
18:44:39 <ais523> but it reminds me more of compiler output than anything
18:45:29 <ais523> actually, one thing I remember saying ages ago is that despite being slow to write and hard to maintain, assembly is actually fairly easy to learn and fairly easy to write in (although nothing helps to catch your mistakes and they can have hugely bad consequences)
18:45:45 <ais523> and this has made me realise that LLMs can effectively write assembly in any language
18:47:43 -!- lynndotpy6093 has quit (Quit: bye bye).
18:48:04 <ais523> it also seems to have the classic LLM output traits of "technically correct but is missing important details", e.g. it places a time limit on program execution after which it dumps out the entire memory state, and this is not usually what people want to do with a Turing tarpit
18:48:20 <korvo> Yayimhere: Well, first, consider that you have to do something *interesting* first. Right now, because you're still learning, it's reasonable for you to feel like *everything* is interesting. That's okay! But you should consider that the wider community of folks who have education and experience might only be interested in very *specific* things that you aren't talking about.
18:48:32 <ais523> and it stores the memory array in a dictionary and has to sort it by index in order to output it in the right order
18:48:37 <korvo> (Second, along similar lines, consider that you might not *want* that much attention at your age!)
18:48:52 -!- lynndotpy6093 has joined.
18:49:04 <korvo> Oh, okay. Have a good night.
18:49:14 <ais523> korvo: fwiw I find that people who are still learning and find everything interesting and churn out a lot of concepts as a consequence do sometimes end up coming across ideas that are interesting to other people too
18:49:36 <ais523> even if they can't identify which ones they are
18:49:49 <korvo> I was going to say that, third, it says something about the *community* when they aren't interested in what you're doing. Sometimes that's because the community has biases and that's not your fault.
18:50:35 <korvo> Like, I've come to understand that the authors of languages like Odin, Zig, Oils, and D aren't interested in my POV. But their boos mean little to me because I've seen what they think good code looks like.
18:51:13 <ais523> korvo: now I'm curious about whether what you dislike about Zig is different or the same as what I dislike about Zig
18:51:26 <korvo> ais523: That's definitely true too. That's part of why I keep pushing Yayimhere to prioritize *learning* above creating new stuff just for fun.
18:51:42 <ais523> korvo: I don't mind it so much because creating new stuff for fun can be a form of learning
18:52:21 <korvo> ais523: My very very first reaction was that the explicit allocator is a massive step backwards, a design mistake comparable to some of the showstoppers in e.g. Go. Since then, I've come to respect their implementation of multi-stage programming, but otherwise it's just not compelling.
18:52:56 <korvo> I think it's fun that the toolchain can ingest C and C++. We considered doing a similar thing in Monte to ingest E, but there's no interesting algorithms written in E. (Which I now understand to be a red flag on its own!)
18:53:22 <ais523> hmm, my reaction to Zig's explicit allocators is that it could be a good idea but I'm not sure that the details are correct (and it may be that the type system isn't strong enough that the details *can* be correct!)
18:53:41 -!- Yayimhere has quit (Ping timeout: 250 seconds).
18:54:02 <korvo> Ironically, I've added explicit allocation to Vixen, so that I don't just hardcode /tmp as the place where temporary objects are stored, and I can see the value in customizing allocation in general. I just think that it's a low-level detail and I'm not willing to give up GC just because somebody on Youtube said so.
18:54:26 <ais523> something that I've been thinking a lot about recently is that programmers in lower-level/system languages aren't taking enough advantage of their allocators, there are lots of things that people do manually from within the program that could more efficiently be done by asking the allocator for help
18:54:42 <ais523> (and this is true even in GCed languages)
18:55:14 <korvo> By "explicit" I mean that instead of writing something like [|^self clone], I write [|^self clone: self allocator*]. Fine, whatever, as long as it lets me write more portable objects.
18:55:25 <ais523> one of my favourite examples is middle-bit tagging: tagging objects by asking the allocator to allocate them at addresses that have certain numerical properties, so that you can then discover something about the object by looking at its address
18:56:25 <korvo> As Zig's evolved, I've come to understand that my approach to the colored-functions blogpost is completely alien to everybody else's. In particular, it seems that folks literally cannot perceive that async/await is necessarily a second-string solution rather than the ultimate syntax. I think it's a memetic blindness.
18:56:56 <ais523> my reaction to async/await is *also* different from everyone else's, but also different from yours I think
18:57:48 <korvo> Yeah, mine starts with "codensity monad" and only gets worse from there.
18:57:54 <ais523> I like to think of a blocked await as returning a value "this routine can't continue yet because…" and the function later being effectively resumable from that point, and it to be possible to do something with these values to determine when to unblock
18:58:13 <ais523> err, I mean routine, not function
18:58:47 <ais523> I like to try to be careful with terminology, especially when talking to you, but decades of living with languages that call everything "functions" or "methods" makes it hard to be precise unless I'm really concentrating
18:59:34 <esolangs> [[User talk:Aadenboy]] https://esolangs.org/w/index.php?diff=170088&oldid=170072 * Aadenboy * (+735) reply
18:59:34 <korvo> No worries, I get it. Sometimes I wonder if I've been permanently rotated five-dimensionally or something.
18:59:52 <ais523> anyway, from this point of view, async is basically a caching system – you are caching what the routine has done so far so that you can replay it when the routine is resumed
19:01:35 <ais523> I think it's possible to design a language in order to make it entirely an optimisation rather than something that has semantic effects, but it would be somewhat alien and not how most languages work (in particular I/O would have to be idempotent)
19:02:28 <korvo> Yeah, this POV can work. Like, Windows still uses completion-based I/O.
19:04:32 <ais523> I think it's undisputed that promises/futures are a monad, and async/await is sugar for the monad – the interesting thing about my viewpoint is that it basically collapses into being the same monad as Either
19:04:40 <korvo> ais523: Oh, there's cap lore that might be more legible than any category-theoretic rambling. There's a pattern, membrane, for partitioning an object's references into multiple regions. The idea is that access across the membrane is only permeable in one direction, but we can still manipulate objects on the other side of the membrane by stretching it.
19:05:29 <ais523> I don't think the informal description of membranes there is hugely useful in helping me figure out how it works
19:06:21 <korvo> Ha! It's very disputed. Very frustrating. But if you're comfortable with that, then yeah, Either is like the first-order version of the more general effect where each codensity monad generates its own color of functions.
19:07:23 <korvo> https://gist.github.com/MostAwesomeDude/76e61e6634571da296ec1fccc6784c19 Very dense note that I made about this. Basically, async/await means *hosting* one codensity monad within another, and then we have a way to run the monad to extract values. But "running" is...waiting? That's oxymoronic; how do we actually delegate control flow?
19:08:08 <ais523> it's not specifically waiting but blocking
19:08:22 <ais523> but you have to block on everything simultaneously
19:09:03 <korvo> Sure. Ideally blocking means doing something CPU-bound, though. We only want to wait when there's genuinely no work left to schedule. So what we actually want to do is run a *continuation* which has more work to do.
19:09:13 <ais523> there are basically two models of async, one in which starting a computation starts it in the background and it may have finished by the time you attempt to wait for it to finish, and one in which starting a computation does nothing until you attempt to block on it, and only then does it start running
19:09:38 <ais523> I've been told that there are theoretical reasons to prefer the latter but I don't know what they are
19:10:21 <korvo> In Twisted Python, there's an idiom where any sort of cooperative iteration should be threaded through the main event loop. This gives backpressure to all iterators and also ensures that the IO loop rarely goes to sleep under load. The same sort of thing is implicit in E.
19:10:38 <ais523> <korvo> Sure. Ideally blocking means doing something CPU-bound, though. ← this reminds me of something I've seen a couple of times recently, "don't use async for CPU-bound problems, it doesn't help, use it for I/O-bound problems only"
19:11:50 <ais523> one thing I have worked on in the past is attempting to design the perfect low-level I/O API (i.e. not the API that the programmer uses directly, but the API that the compiler causes the compiled code to use)
19:11:57 <korvo> Oh, right, membranes. We can let an object's locals be either "safe" or "unsafe". Or "sync" or "async", I suppose; same reasoning. If we have two unsafe objects, we can compose them without actually doing anything; the composition takes place on the other side of the membrane. In terms of monads, this is when a language does something special to lift actions to monads, like Haskell STM.
19:12:22 <ais523> right, this is very monad-like
19:14:17 <korvo> There's a physical semantics. Composition of async objects is done with "promise pipelining"; when we send to a promise, we send a message on top of another send. This breaks monad transparency! When something is doable behind a membrane, it must be expressed wholly in terms of pipelined sends.
19:15:14 <ais523> anyway, I think that the right API for doing I/O is a combination of "start doing this I/O request", "is this I/O request done yet?" and "block until at least one I/O request is finished" (this last API is the only way to block and is only used when there is nothing else to do)
19:15:27 <ais523> but one thing I'm not sure about is how to mix I/O requests with continuous CPU use
19:16:04 <korvo> I suppose, for the logs, let p1 and p2 be E-style promises; they represent async actions. `p1<-firstThis()<-thenThat(p2)` doesn't have to materialize an intermediate object representing the far-away result `p1<-firstThis()`; it stays on the other side of the membrane/network.
19:16:06 <ais523> because ideally you would want implementations in which requests are not started until an attempt to block to be valid, but continuous CPU use would cause them to livelock
19:17:01 <ais523> korvo: OK, I see, this is equivalent to a monad but instead of the monad being a *type* it is some other property that might have a runtime effect
19:18:55 <ais523> this is analogous to the way that you can compose monad actions without knowing how to run them
19:19:16 <lambdabot> Monad m => m a -> (a -> m b) -> m b
19:19:29 <korvo> ais523: Yes! The monad is in the physical interaction between networked machines. This is also what I mean in that note when I say that the comonad is on the other side of the screen; really, it seems like the user and the computer are *adjoint* through the screen, and the comonad and monad are merely ways of describing their experiences.
19:20:18 <korvo> Also yes. In Haskell, the API for Arrow is an example of this, although there it's because the algebraic laws aren't strong enough; the optimizer is forced to pretend that it can't see inside certain functions.
19:20:26 <ais523> @djinn m a -> (a -> m b) -> m m b
19:20:27 <lambdabot> Error: kind error: (KVar 0,KVar 1)
19:20:33 <ais523> @djinn m a -> (a -> m b) -> m (m b)
19:21:06 <ais523> @djinn m a -> (a -> b) -> m b
19:21:21 <lambdabot> Functor f => (a -> b) -> f a -> f b
19:21:41 <ais523> (sorry for all the lambabot usage, I feel like I'm confused about something and am trying to establish what it is)
19:21:42 <korvo> I like that API idea. In Vixen, starting I/O would be done with execline's `background` wrapped by V/send:. PIDs can be checked with Process/fromPID:. Blocking can be done with execline's `wait`.
19:22:27 <ais523> I think for performance reasons, the request to block should indicate which request unblocked, so that you don't have to check them all individually (although that isn't needed for correctness)
19:22:31 <korvo> I don't have E-style vats yet. In E, if two objects are in distinct vats then they might as well be network-gapped. Linux containers could work for that.
19:22:54 <ais523> @djinn Monad m => m a -> (a -> b) -> m b
19:23:40 <korvo> ais523: And possibly completions are faster still. I'm thinking about experimenting with s6's IPC services; they have the ability to park an FD and save it for later.
19:23:50 <ais523> OK this is suddenly reminding me a lot of the "treating a runtime value as a type" thing I was talking about a few months ago
19:24:07 <ais523> it's like you have a different monad for each vat
19:24:23 <ais523> but vats are runtime concepts rather than compile-time concepts, you don't have a statically known set of them
19:24:41 <ais523> so you effectively have a type that's parameterized by a runtime value (in this case the vat ID)
19:24:46 <korvo> Huh, I guess. I hadn't thought of that. I suppose that different runtimes can technically have different vat internals, but they'd speak the same wire protocol.
19:25:39 <ais523> I have spent over a year with this being the primary problem I've been thinking about (for the Rust scoped generic things), so anything that fits the pattern, I am likely to notice
19:26:18 <ais523> but you're working with a type system that's quite different from the ones that I'm working with, so the implications may be different
19:27:39 <korvo> I don't see the scoped-generic connection quite yet. But I can see how scoped-ness and generic-ness are related, for sure.
19:28:37 <ais523> I've been meaning to rename them to runtime generics
19:28:45 <korvo> Like, as an optimization for the case where the object that you're delivering to is in the same address space, you'd like to have a scoped generic conversation with that object's vat, hand over control flow, and let the message be delivered. seL4 does small message deliveries like this; messages must fit in registers!
19:29:11 <ais523> the interesting part is that the type is generic on a runtime value, and this can be compile-time checked because it's sufficiently generic that the actual runtime value doesn't matter, the compiler just has to prove that it's always the same
19:29:45 -!- Lord_of_Life_ has joined.
19:29:54 <ais523> specialising on a particular value would be difficult, but I'm thinking primarily about Rust which hasn't managed to implement specialisation soundly
19:30:05 <ais523> and even the minimal cut-down version which was intended to always be sound is somehow also unsound
19:30:32 -!- Lord_of_Life has quit (Ping timeout: 240 seconds).
19:30:57 <korvo> Huh. Now that's starting to sound like Haskell ST, where a `forall` is used to force the caller to not control local state. But the caller still gets to initiate the initial control-flow delegation "into" the ST monad.
19:31:05 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
19:31:06 <ais523> but as I said, in this case I think the type system is too different to translate well
19:31:25 <korvo> Wow, what a sentence. Maybe "the caller still gets to delegate control flow into..."
19:32:07 <ais523> korvo: OK this is very familiar, the best current Rust approximation for problems that need scoped generics is called "generativity" in the Rust community and it is basically the same trick you described there with the forall
19:32:48 <ais523> (and many implementations even use an actual Rust forall, for<'a>)
19:33:36 <ais523> anyway, /away for a bit, this is a fun conversation but I need to eat
19:33:56 <korvo> ais523: BTW Weiher and I (in different places) have suggested that call/return is a very specific thing that doesn't align with the rest of compositional semantics. https://lobste.rs/s/alzaim/thoughts_on_gentle_tyranny_call_return is a decent starting place.
19:34:10 <korvo> So it could be that what we mean by "caller" is *also* a monad-specific concept.
19:34:20 <korvo> I should eat too. Peace.
19:50:15 <esolangs> [[Unpredictabillity]] N https://esolangs.org/w/index.php?oldid=170089 * Esocreator * (+1312) Created page with "=== What is Unpredictabillity === Unpredictabillity is a language that relies on randomness. Its "purpose" is to make everything compact and tiny and basically be the final boss of golflangs. And also be terrible to code in. === Explanation === It wor
19:52:05 <esolangs> [[Unpredictabillity]] https://esolangs.org/w/index.php?diff=170090&oldid=170089 * Esocreator * (+67)
19:52:34 <esolangs> [[Unpredictabillity]] M https://esolangs.org/w/index.php?diff=170091&oldid=170090 * Esocreator * (-8) /* Quine */
20:02:21 <esolangs> [[Unpredictabillity]] https://esolangs.org/w/index.php?diff=170092&oldid=170091 * Esocreator * (+740)
20:05:27 <b_jonas> "<korvo> […] the authors of languages like Odin, Zig, Oils and D" => wait, Oils? what is that? I'd heard of the rest
20:07:39 <korvo> b_jonas: https://oils.pub/
20:07:41 <esolangs> [[Unpredictabillity]] https://esolangs.org/w/index.php?diff=170093&oldid=170092 * Esocreator * (-17) /* Brainfuck to Unpredictabillity Converter in Python */
20:09:06 <esolangs> [[Unpredictabillity]] https://esolangs.org/w/index.php?diff=170094&oldid=170093 * Esocreator * (-8) /* Brainfuck to Unpredictabillity Converter in Python */
20:09:07 <b_jonas> async/await => didn't ziglang just replace those with something else?
20:09:08 <korvo> It's very funny in retrospect that I went to Google and was all horrified at how people were commodotized, and Andy and Andrew came away from Google with beliefs like "bash sucks" or "C sucks".
20:11:18 <korvo> Yes, Zig is now doing a pattern where they "return into the monad", so to speak; the entire action returns into some chosen I/O context, which can be async or sync or something else. I also accidentally tripped over this pattern in 2012 when wrapping Ganeti: https://github.com/mostawesomeDude/gentleman
20:20:40 <b_jonas> “<ais523> […] the primary problem I've been thinking about (for the Rust scoped generic things)” => we should attract more Haskellers to this channel, because I think they could comment more on a lot of these ideas that you are discussing
20:21:14 <ais523> b_jonas: in my most recent blogpost I mentioned looking in Haskell to try to find the typesystem ideas I needed, because it's almost always had them first
20:22:23 <ais523> <korvo> It's very funny in retrospect that I went to Google and was all horrified at how people were commodotized ← to me, the commoditization of developers is a problem but isn't in the least unexpected, so although it's somewhat horrifying, seeing it in person wouldn't make me more horrified
20:24:14 <ais523> oh wow, just loading that Github link caused a noticeable difference to my (sadly onscreen rather than physical) blinkenlights, I'm not surprised that Github has bloated JS but I didn't expect it to be *that* bloated
20:25:11 <korvo> ais523: Yeah, for sure. It's just like, I don't know. Like somebody looking at Dark City or Cloud Atlas or Metropolis or Blade Runner or Ferngully and saying, "Y'know, running a big machine like that at scale takes a lot of engineering effort. I think I could make this machine much more efficient if I contributed a bunch of open-source labor!"
20:28:56 <zzo38> You can use the GitHub API instead, or add your own script (the JSON data is included with the HTML so you could make your own script to parse that data)
20:29:17 <zzo38> In that case you will not have to use GitHub's bloated scripts; I do not use (or like) GitHub's scripts
20:30:39 <b_jonas> “looking in Haskell” => of course, you should do that too.
20:59:49 <korvo> I had a bagel sandwich. Turkey on pumpernickel, hot mustard.
21:00:36 <korvo> On ais523's suggested I/O API: I looked up execline's wait. https://www.skarnet.org/software/execline/wait.html "wait for one of the listed pids — exec into prog as soon as one of the listed children dies. (If no pid is listed, wait for one child to die.) The ! environment variable will be set to the pid that died, and the ? environment variable will contain an approximation of its exit code." So it supports selecting just one event.
21:01:22 <ais523> selecting one seems OK to me – in a delay-insensitive world it's enough
21:02:09 <ais523> the reasons to be able to select multiple are basically down to a) prioritisation of things that need to happen sooner (e.g. relatime programs or performance optimisations in multithreade programs) and b) avoiding livelocks
21:02:59 <korvo> ais523: You might be interested to know that, in the Joule lineage (E, Monte), we *can't* wait. We can only attach a when-block that will run when the promise resolves in the future. If it resolves, really. This is like always being "in the monad", experientially.
21:03:21 <korvo> We're supposed to always do that in Twisted, EventMachine, Node, etc. but there's ways to dig below the runtime layer. Ditto for e.g. React and its layer.
21:03:46 <ais523> korvo: right, the API call to block is basically the monad runner, but there's no reason for the monad runner to conceptually exist in the language rather than in the runtime
21:06:04 <ais523> (but it needs to exist from the point of view of the OS or wrapper-around-system-calls that provides the API, so that the runtime is possible to write)
21:06:21 <korvo> Yeah. Speed, maybe. Tradition? It used to be the case that the entire system had to contort around a single poll() or select() call; the event loop is literally one specific while-loop.
21:16:07 <esolangs> [[Tea]] https://esolangs.org/w/index.php?diff=170095&oldid=169633 * Waffelz * (+54)
21:16:24 <ais523> fwiw I still think that it's correct for I/O-bound programs to do that (or maybe have a thread on each core and do one poll/select equivalent per thread)
21:16:43 <ais523> although we have better APIs than poll and select nowadays
21:16:56 <ais523> it's still conceptually a single-point API, just with a better interface
21:22:38 <esolangs> [[Brain-accumulator]] https://esolangs.org/w/index.php?diff=170096&oldid=170029 * Kaveh Yousefi * (+18) Improved the interpreter's documentation and supplemented a further page category tag.
21:22:46 <b_jonas> ais523: re CPU-bound programs, so my model here is schmorp's modules, and they provide two APIs for this. one is yield, which has an interface like it was an IO action that could block, but doesn't actually block, whenever the event loop next checks for when it's read it'll always be ready and successful and call its callback for that, but there's a forward progress guaranteed that if any other actions
21:22:52 <b_jonas> (of the same or more urgent priority) are ready too then if you yield enough times then something will be handled. the other is idle, which blocks until every action (of the same or more urgent priority) is blocking so there's free CPU time.
21:24:51 <ais523> b_jonas: OK, that makes sense – I was having similar thoughts myself
21:25:29 <ais523> the primary issue here is just to avoid starvation/livelock, which you do by cycling through priorities, and that means that CPU-bound computations need to be able to yield so that they can be outprioritised
21:27:26 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=170097&oldid=169990 * Buckets * (+12)
21:27:53 <esolangs> [[User:Buckets]] M https://esolangs.org/w/index.php?diff=170098&oldid=169991 * Buckets * (+11)
21:28:02 <esolangs> [[Copix]] N https://esolangs.org/w/index.php?oldid=170099 * Buckets * (+1084) Created page with "Copix Is an esoteric Programming Language created By [[User:Buckets]] in 2021. {| class="wikitable" |- ! Commands !! Instructions |- | i || Push the Input value. |- | a || Negate The top value And add the Top two values. |- | = || Duplicate the Top value. |- | ! || If th
21:29:06 <esolangs> [[User talk:Buckets]] M https://esolangs.org/w/index.php?diff=170100&oldid=170019 * Buckets * (+129)
21:30:09 <esolangs> [[4gn/]] M https://esolangs.org/w/index.php?diff=170101&oldid=170020 * Buckets * (+13)
21:35:59 <korvo> ais523: About threads: what if they're also a traditional solution? Like, we don't just put any actions on long-running threads; it's specifically stuff like audio callbacks or filesystem accesses which (used to be?) time-sensitive interrupts that had their own vectors.
21:36:16 <korvo> Threading discipline, loose as it is, evolved from IRQ-handling discipline.
21:36:37 <ais523> korvo: OK, I think here you have to distinguish threads as a programming model from OS-level threads as an implementation technique
21:36:49 <ais523> I'm not a huge fan for using threads for I/O in *either* case, but the reasons are different in the two cases
21:37:55 <ais523> or, well, they both stem to "threads require a certain amound of bookkeeping to use properly and it's usually a bad match for the purpose for which you actually wanted the thread"
21:38:09 <korvo> ais523: Yeah. The punchline for Vixen is that I think I don't care about threads but I care about locks. I will probably want to be able to serialize accesses to an object s.t. it can't have two method activations at once, which seems like an interesting problem, but I don't care how many threads the kernel is managing.
21:39:08 <ais523> the history of Rust is a bit interesting here, originally it had tasks (same semantics as threads but not necessarily implemented using OS threads), but eventually it removed them
21:39:43 <ais523> but I wasn't paying attention at the time so I'm not sure what the reasoning behind the decision was
21:40:12 <korvo> IIRC it was just a theoretical burden for future embedded toolchains.
21:40:48 <ais523> right, runtimes often don't scale down very well
21:41:33 <ais523> and there are also some awkwardnesses like "you need some way to pre-empt the tasks if you want them to act exactly like threads" – I'm not sure whether old Rust pre-empted them or not
21:41:41 <sorear> threads which last longer than a single user action were a mistake, in general, because they make painless updates and many types of power management impossible
21:44:53 <korvo> sorear: A pattern: C++ `inline` guarantees that the code is copied to the call site. E `PassByCopy` and `CopyByConstruction` (sp?) guarantees that an object/method is copyable over the network. seL4 something something, declare that a micro-message is okay, promise not to touch registers.
21:45:33 <korvo> Pass some memory. Promise you won't go outside the memory. Do it quickly. You can only have a tiny bit of my control flow, maybe a single-use continuation to abort early.
21:50:26 <korvo> Sorry, I'm getting weird. Later.
22:46:55 <esolangs> [[Special:Log/newusers]] create * ImOnlyHereForReversibleComputing * New user account
22:53:06 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=170102&oldid=170085 * ImOnlyHereForReversibleComputing * (+247)
22:59:00 <esolangs> [[User:Tommyaweosme]] https://esolangs.org/w/index.php?diff=170103&oldid=170007 * Tommyaweosme * (+417) added self-promo + a few other things
23:01:30 <esolangs> [[User:Tommyaweosme]] M https://esolangs.org/w/index.php?diff=170104&oldid=170103 * Tommyaweosme * (+0) update counter; day 1/1845 (0.0542% completed)
23:02:28 -!- simcop2387 has quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in).
23:02:28 -!- perlbot has quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in).
23:33:38 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).