←2025-11-23 2025-11-24 2025-11-25→ ↑2025 ↑all
00:44:32 -!- pool has quit (Read error: Connection reset by peer).
00:46:41 -!- pool has joined.
01:44:44 -!- pool has quit (Read error: Connection reset by peer).
01:46:49 -!- pool has joined.
02:16:44 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=169139&oldid=168913 * NTMDev * (+516) /* HasKey */
02:16:52 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=169140&oldid=169139 * NTMDev * (-1) /* Add or Remove Pair = */
02:18:10 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=169141&oldid=169140 * NTMDev * (+33) /* Bugs */
02:23:17 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=169142&oldid=169141 * NTMDev * (+761) /* How to Troubleshoot Bug */
02:32:38 -!- 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).
02:49:36 -!- svm has joined.
02:51:43 -!- msv has quit (Read error: Connection reset by peer).
02:57:06 -!- ski has quit (Remote host closed the connection).
03:05:00 <esolangs> [[2 Bits, 1 Byte but 01 and 10 are swapped]] https://esolangs.org/w/index.php?diff=169143&oldid=160657 * Tommyaweosme * (+0) /* Quine */ fixed weird phrasing
03:39:43 <esolangs> [[User:FluixMakesEsolangs]] M https://esolangs.org/w/index.php?diff=169144&oldid=168018 * FluixMakesEsolangs * (+33)
04:37:25 -!- yc[m] has quit (Remote host closed the connection).
04:49:13 -!- ais523 has quit (Quit: quit).
06:08:34 <Sgeo> https://www.wolframalpha.com/input?i=infinity*e%5E%28i*pi%2F2%29+%2B+infinity+%2B+infinity*e%5E%28i*pi%29
06:40:30 -!- chomwitt has joined.
07:16:39 -!- Sgeo has quit (Quit: Leaving).
08:40:13 -!- yc has quit (Remote host closed the connection).
08:47:23 -!- yc has joined.
09:09:46 -!- tromp has joined.
09:10:11 -!- tromp has quit (Read error: Connection reset by peer).
09:33:40 <esolangs> [[File talk:Dango Language Logo.png]] https://esolangs.org/w/index.php?diff=169145&oldid=169113 * RaiseAfloppaFan3925 * (+844) My explanation, sorry if this caused some confusion
09:36:36 <esolangs> [[File talk:Dango Language Logo.png]] https://esolangs.org/w/index.php?diff=169146&oldid=169145 * RaiseAfloppaFan3925 * (+383) Just realized Apache-2.0 applies to non-code
10:04:09 <esolangs> [[User:RaiseAfloppaFan3925]] https://esolangs.org/w/index.php?diff=169147&oldid=169080 * RaiseAfloppaFan3925 * (+1839) idk got bored
10:28:01 <esolangs> [[User:RaiseAfloppaFan3925]] M https://esolangs.org/w/index.php?diff=169148&oldid=169147 * RaiseAfloppaFan3925 * (-14) correct translation error, liking something is probably "" (suki) not "" (kiniiru) I think idk
10:34:23 <esolangs> [[User talk:Ais523]] https://esolangs.org/w/index.php?diff=169149&oldid=169135 * Yayimhere2(school) * (+326) /* Why do so many people delete lines from Introduce yourself? */
11:45:35 -!- pool has quit (Read error: Connection reset by peer).
11:47:26 -!- pool has joined.
11:52:21 -!- perlbot has quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in).
11:52:21 -!- simcop2387 has quit (Quit: ZNC 1.9.1+deb2+b3 - https://znc.in).
11:58:06 <esolangs> [[Talk:No-code esolang]] M https://esolangs.org/w/index.php?diff=169150&oldid=169088 * None1 * (+284)
11:58:13 <esolangs> [[Talk:Ascenic]] https://esolangs.org/w/index.php?diff=169151&oldid=169056 * None1 * (+287)
11:59:27 -!- pool has quit (Ping timeout: 252 seconds).
12:01:08 <esolangs> [[Esolang talk:Categorization]] https://esolangs.org/w/index.php?diff=169152&oldid=169093 * None1 * (+357) /* Category:Golfing language should be moved to Category:Golfing languages */ It's difficult to move categories
12:09:02 <esolangs> [[Special:Log/newusers]] create * Mutasimos * New user account
12:13:48 <esolangs> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=169153&oldid=169128 * Mutasimos * (+169)
12:14:48 -!- simcop2387 has joined.
12:16:47 -!- perlbot has joined.
12:19:08 -!- Everything has quit (Quit: leaving).
12:22:19 <esolangs> [[List of ideas]] M https://esolangs.org/w/index.php?diff=169154&oldid=167494 * Mutasimos * (+125)
12:23:22 -!- Everything has joined.
12:26:45 <esolangs> [[List of ideas]] https://esolangs.org/w/index.php?diff=169155&oldid=169154 * Mutasimos * (+0)
12:37:06 -!- amby has joined.
12:46:17 <APic> Hi *
12:52:06 <esolangs> [[Tol]] M https://esolangs.org/w/index.php?diff=169156&oldid=132703 * None1 * (+30)
12:52:32 -!- ais523 has joined.
13:08:04 <esolangs> [[Talk:I/D machine Turing-completeness proof]] https://esolangs.org/w/index.php?diff=169157&oldid=167589 * Yayimhere2(school) * (+372)
13:10:57 <esolangs> [[OoOoOM]] https://esolangs.org/w/index.php?diff=169158&oldid=168052 * Yayimhere2(school) * (+0) /* Commands */ the dot there may seem like a command, so I deleted it
13:21:54 <esolangs> [[Talk:Intermediate language]] N https://esolangs.org/w/index.php?oldid=169159 * Yayimhere2(school) * (+200) Created page with "the fact that all but one of these esolangs are created by ais523, is kinda crazy --~~~~"
13:27:27 <esolangs> [[Talk:Intermediate language]] https://esolangs.org/w/index.php?diff=169160&oldid=169159 * Ais523 * (+713) an explanation
13:31:38 <esolangs> [[Esolang talk:Categorization]] https://esolangs.org/w/index.php?diff=169161&oldid=169152 * Ais523 * (+600) /* Category:Golfing language should be moved to Category:Golfing languages */ this is technically difficult to do but might be worth it anyway
13:41:25 <esolangs> [[I/D machine Turing-completeness proof]] M https://esolangs.org/w/index.php?diff=169162&oldid=54394 * Ais523 * (+4) link [[bit bucket]] as this language is using it with its standard meaning
13:56:13 <esolangs> [[Talk:Intermediate language]] https://esolangs.org/w/index.php?diff=169163&oldid=169160 * Yayimhere2(school) * (+172)
13:56:30 -!- chomwitt has quit (Remote host closed the connection).
14:00:36 <esolangs> [[User talk:Unname4798]] https://esolangs.org/w/index.php?diff=169164&oldid=166668 * Yayimhere2(school) * (+194) /* What did I do to User:Yayimhere? */
14:07:17 <esolangs> [[Talk:I/D machine Turing-completeness proof]] https://esolangs.org/w/index.php?diff=169165&oldid=169157 * Ais523 * (+4040) how ErrorBucket came about (a primer in how to write intermediate languages)
14:08:26 <esolangs> [[ErrorBucket]] N https://esolangs.org/w/index.php?oldid=169166 * Yayimhere2(school) * (+51) redirect errorbucket to the I/D turing completeness proof, since its described there.
14:08:54 <esolangs> [[Errorbucket]] N https://esolangs.org/w/index.php?oldid=169167 * Yayimhere2(school) * (+51) redirect the non cased version as well
14:09:22 -!- Yayimhere has joined.
14:09:26 <Yayimhere> hello
14:09:35 <Yayimhere> how are you all?
14:15:02 <esolangs> [[File talk:Dango Language Logo.png]] https://esolangs.org/w/index.php?diff=169168&oldid=169146 * Ais523 * (+837) can dual-license, it might be the best solution here
14:15:12 <ais523> hi Yayimhere
14:15:24 <Yayimhere> hi ais523
14:15:28 <ais523> I replied to your question on the I/D machine Turing-completeness talk page
14:15:34 <Yayimhere> yea I saw
14:15:42 <Yayimhere> youve very much encouraged me to try and do something with it
14:15:55 <Yayimhere> im working on a variant that combines it with 7
14:16:10 <Yayimhere> as well as a few other commands
14:16:27 <ais523> but yes, the reason the language is so weird is that it was just created by starting with a normal (esoteric) language and then adding changes to it to work around the I/D machine's limitaitons
14:16:47 <Yayimhere> yea
14:16:59 <Yayimhere> where does the name of the error element come from?
14:17:38 <ais523> well it doesn't work if you try to use it
14:17:50 <Yayimhere> true
14:17:52 <ais523> and "error" is a good way to describe that – it's not the only word you could use
14:18:00 <Yayimhere> in fact
14:18:21 <Yayimhere> I think I would have named it u
14:18:22 <ais523> but it's the one I happened to pick, I don't think I had a reason to think about it too much
14:18:28 <Yayimhere> unusable
14:18:39 <Yayimhere> ais523: true
14:18:56 <ais523> having 'a', 'b' and 'd' commands in the language, that inspired me to call the others 'c', 'e' and 'f', even if that meant stretching a bit with names
14:19:18 <Yayimhere> lol
14:19:27 <Yayimhere> yea continue is quite
14:19:29 <Yayimhere> ...weird
14:20:41 <ais523> oddly enough I also used "continue" for a similar operation in a different language: https://esolangs.org/wiki/BIX_Queue_Subset
14:20:58 <Yayimhere> hm
14:21:00 <Yayimhere> strange
14:21:09 <Yayimhere> was it made before or after?
14:21:15 <ais523> after
14:21:19 <ais523> but it's the opposite
14:21:33 <Yayimhere> ?
14:21:46 <Yayimhere> so Errorbucket comes after BIX queue subset
14:21:53 <ais523> "continue" in ErrorBucket discards the start of the queue without reading it, "continue" in BIX Queue Subset activates without discarding any queue elements at all
14:22:00 <ais523> no, BIX Queue Subset was later
14:22:02 <Yayimhere> ah
14:22:05 <ais523> (I couldn't remember and had to look it up)
14:22:08 <Yayimhere> yea that makes sense
14:22:28 <ais523> they're both "do part of the standard cyclic tag implementation without actually reading the queue" but it's a different pat
14:22:30 <ais523> *part
14:22:44 <Yayimhere> yea
14:24:08 <Yayimhere> also, have you realized the similarity between passiveness and activeness in 7, and activeness and inactiveness in ErrorBucket?
14:24:20 <Yayimhere> cuz
14:24:31 <ais523> I hadn't, because I created them for different reasons
14:24:38 <Yayimhere> makes sense
14:24:45 <Yayimhere> if I had a nickel for every time
14:24:52 <Yayimhere> that joke is so dumb
14:25:36 <ais523> there *is* a pattern I think, but I only noticed the pattern when trying to work out how Unlambda and Underload related to each other and didn't try applying it in other contexts
14:25:58 <Yayimhere> oh
14:26:02 <Yayimhere> hm
14:26:03 <Yayimhere> yea
14:26:06 <ais523> some other people have studied it, though: https://en.wikipedia.org/wiki/Call-by-push-value
14:26:18 <Yayimhere> ah, interesting
14:26:21 <Yayimhere> maybe ill read that
14:26:31 <Yayimhere> \about it
14:26:51 <ais523> it's quite complicated going, I have tried to study it and got a good idea for the "feel" of how it works but keep forgetting the details
14:27:17 <Yayimhere> hmm
14:27:21 <Yayimhere> *hm
14:27:23 <Yayimhere> ok
14:28:03 <Yayimhere> does CBPV only every happen in intermediate
14:28:04 <Yayimhere> well
14:28:10 <Yayimhere> I guess thats not relevant to this channel
14:28:12 <Yayimhere> maybe it is
14:28:14 <Yayimhere> idk
14:29:38 <ais523> that's a good question but it's a little difficult to formalize the question to be able to answer it accurately
14:29:53 <Yayimhere> true
14:30:16 <Yayimhere> now I kinda want to create a CBPV based esolang
14:32:43 <ais523> I learned CBPV from Paul Levy himself, in person, but never got around to the whole "formalizing the relationship between Unlambda and Underload" that I was planning to – but it's potentially interesting because Unlambda is based on combinator calculus (but with thunks and continuations) and Underload is based on concatenative calculus, and those are both real mathematical theories that people are interested in outside their relationship to esolangs
14:32:54 -!- amby has quit (Remote host closed the connection).
14:33:05 <ais523> but, CBPV is mostly interesting because it helps you understand the thunks and continuations rather than for the SKI part of he calculus
14:33:40 <Yayimhere> yea
14:33:49 <Yayimhere> ive always never really understood unlambdas c
14:33:59 <Yayimhere> I should prolly look into it
14:34:26 <ais523> call/cc is one of the hardest commonly used control flow operation to understand
14:34:33 <ais523> I think that's why it was added to Unlambda in the first place
14:34:38 <Yayimhere> lol
14:34:43 -!- amby has joined.
14:35:31 <ais523> c is difficult to understand from an imperative point of view and d is difficult to understand from a functional point of view, the combination was intended to make the language harder to think about and interpreters harder to write
14:35:56 <Yayimhere> now put it into befunge
14:36:03 <Yayimhere> (thats also a dumb joke)
14:36:17 <ais523> but call-by-push-value is the best mathematical treatment I've seen of how d works
14:36:27 <Yayimhere> hm
14:36:28 <Yayimhere> yes
14:36:29 <Yayimhere> *yes
14:36:31 <Yayimhere> *yea
14:36:33 <Yayimhere> cool
14:40:36 -!- amby has quit (Remote host closed the connection).
14:41:57 -!- amby has joined.
14:49:18 <Yayimhere> also, ais523, in ErrorBucket, why is there not just a command thats equal to af, instead of a being a separate command?
14:51:37 -!- amby has quit (Remote host closed the connection).
14:54:35 -!- amby has joined.
15:15:21 -!- Yayimhere has quit (Quit: Client closed).
15:21:49 -!- Yayimhere has joined.
15:26:04 <esolangs> [[Talk:I/D machine Turing-completeness proof]] https://esolangs.org/w/index.php?diff=169169&oldid=169165 * Yayimhere2(school) * (+232)
15:29:42 -!- ais523 has quit (Quit: sorry about my connection).
15:37:58 -!- ais523 has joined.
15:55:11 <esolangs> [[18]] N https://esolangs.org/w/index.php?oldid=169170 * Yayimhere2(school) * (+3979) Created page with "'''18''' is an esolang created by [[User:Yayimhere]], as a merge of [[7]] and [[ErrorBucket]]. 18 works in base 18, and as such it gets its name. == Data == 18 uses two ''frames''. frames is a string of symbols/tokens(specifically, 18 commands), which can be sepa
15:57:54 <Yayimhere> aaaah
15:58:00 <Yayimhere> thats nice, finally being done with it
16:13:21 <esolangs> [[18]] https://esolangs.org/w/index.php?diff=169171&oldid=169170 * Yayimhere2(school) * (+6) /* Commands */
16:13:23 <esolangs> [[Esolang talk:Categorization]] https://esolangs.org/w/index.php?diff=169172&oldid=169161 * Corbin * (+143) /* Category:Golfing language should be moved to Category:Golfing languages */ I can help.
16:14:37 -!- Yayimhere has quit (Quit: Client closed).
16:15:18 <korvo> ais523: I'm not convinced that concatenative calculus is its own thing. I think that when formalized, we either get combinators or an internal language of categories. We have multiple pages that each have a fragmented table listing out common categorical combinators and how they interact with each other, but lack a central unified theory.
16:16:07 <ais523> korvo: well, if you ignore I/O, Underload and Mlatu-6 independently settled on the same set of commands/combinators
16:16:18 -!- Yayimhere has joined.
16:20:45 <esolangs> [[Talk:No-code esolang]] https://esolangs.org/w/index.php?diff=169173&oldid=169150 * Corbin * (+674) What do you think a language is, exactly?
16:21:15 <korvo> ais523: Right, because they arise naturally. [[Cammy/Bikeshed]] and [[Stack]] have similar tables too.
16:22:31 <Yayimhere> hello korvo!
16:22:32 <ais523> there's an interesting parallel with Unlambda: Unlambda's core naturally-arising subset is SKI but you can implement I in terms of the other two, Underload's core naturally-arising subset is ():*!a~ but you can write ~ in terms of the others
16:23:20 <Yayimhere> lol
16:23:31 <Yayimhere> that is quite interesting
16:23:58 <ais523> <Esolang wiki on Underload> ~ = a(!a)(!)(a*a*:*^!a*^):*^
16:24:13 <Yayimhere> yea
16:24:21 <ais523> oerjan and I both spent some time working on implementing ~ in terms of the others
16:24:24 <ais523> it's kind-of surprising that it's possible
16:24:30 <Yayimhere> yea
16:24:36 <Yayimhere> it seems very surprising to me
16:29:59 -!- Lord_of_Life_ has joined.
16:30:41 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
16:31:17 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
16:32:18 <korvo> Yayimhere: Hi!
16:32:36 <Yayimhere> korvo: thanks for the book recommendation, its quite fun to read!!
16:35:37 <korvo> ais523: Right. In category theory, we say that every Cartesian closed category is braided monoidal; that is, if we have finite products and we can copy and delete freely then we can swap a pair s.t. swapping twice is like doing nothing. The naturality of copying and deletion require it.
16:36:26 <korvo> Yayimhere: I'm glad to hear it! I hope that, at some point, you try out some of the examples in a Scheme interpreter. I think that there are some websites with online interpreters, but the best experience will be using something like Racket on your local machine.
16:36:50 <korvo> (Racket is technically not Scheme but it is close enough to be okay for learners. Racket's more like a construction kit; you can use it to build a Scheme, or to build other things.)
16:39:35 <korvo> ais523: Oh, sorry, the correct term is "symmetric monoidal". Braided monoidal is more general; symmetric monoidal means that `swap swap` ≈ `id`.
16:39:43 -!- Yayimhere has quit (Ping timeout: 250 seconds).
16:48:51 <ais523> korvo: right, braided means that you can swap but not necessarily that swapping twice gets you back where you started (like braiding three strings: you can swap repeatedly and form a braid, but the only way to undo the braid is to swap back in the same sequence, the strings ending up in the same position doesn't help
16:49:00 <ais523> this is the one bit of category theory that I'm fairly confident on
16:51:10 <korvo> Yeah! This is the stuff that the physicists care a lot about, but usually I'm doing CCCs like Cammy.
16:52:02 <korvo> Also knot theorists. Not sure if we have any of them here. Very cool stuff. They get to study exactly 3 dimensions.
16:54:50 -!- Yayimhere has joined.
16:55:00 <Yayimhere> im back once again
17:01:51 <esolangs> [[What the Branflakes]] https://esolangs.org/w/index.php?diff=169174&oldid=167434 * Esolangist alt * (+832) Esolangist alt
17:04:41 <korvo> Another week, another blogpost talking about OOP from a very biased perspective.
17:22:59 <Yayimhere> lol
17:29:03 <Yayimhere> I know thhis is kinda a boring question, but what do you conjecture on tis languages computational class?: https://esolangs.org/wiki/18
17:29:34 <esolangs> [[18]] https://esolangs.org/w/index.php?diff=169175&oldid=169171 * Yayimhere2(school) * (+49) /* Similarity to 7 and ErrorBucket */
17:31:45 <korvo> Looks like a sort of two-stack machine, I suppose? I don't really see a point to guessing computational classes. In terms of complexity, it might implement a tag system, but I'm not sure offhand. I don't think that there's enough detail there to write an interpreter with all of the corner cases figured out.
17:35:42 <esolangs> [[Stackception]] N https://esolangs.org/w/index.php?oldid=169176 * Esolangist alt * (+898) Esolangist alt
17:35:43 <Yayimhere> korvo: i will try and write an intepreter
17:35:51 <Yayimhere> after im done with another ones intepreter
17:37:08 <korvo> No worries.
17:37:13 <Yayimhere> k
17:37:36 <Yayimhere> what details ar missing btw?
17:37:46 <Yayimhere> (so I can complete the documentation)
17:41:01 <ais523> Yayimhere: I think the "x" in "0x00", etc., is wrong – the x specifically indicates hexadecimal whereas you are working in base 18, so you should pick a different letter
17:41:31 <ais523> the usual mathematical notation would be a subscript ₁₈, e.g. 0G₁₈ to indicate the number which in decimal is written 16
17:41:32 <APic> Good Night
17:41:44 <ais523> night APic
17:42:05 <avih> night
17:42:10 -!- tromp has joined.
17:43:41 <ais523> Yayimhere: in terms of spec clarity, 0x0C says you are copying data but doesn't say where you're copying it to
17:44:15 <ais523> also it is weird to have a bit bucket that it's possible to read from, that kind-of removes its status as a bit bucket
17:54:25 <esolangs> [[BFInfinity]] https://esolangs.org/w/index.php?diff=169177&oldid=160884 * C++DSUCKER * (+308)
17:59:11 <esolangs> [[Prehistory of esoteric programming languages]] https://esolangs.org/w/index.php?diff=169178&oldid=162716 * Corbin * (+550) More ancient history: the invention of cryptography. Scytales don't quite count for several reasons: unclear origin, unclear usage, failure of Kerchkoffs' principle.
17:59:49 <Yayimhere> ais523: ok
17:59:55 <Yayimhere> and for the bit bucket
18:00:05 <korvo> Making these little bite-sized pieces of history is a fun challenge. I think that the joke might be a little weak; the idea is that Stigler's law of eponymy is funny, but maybe it's just confusing.
18:00:30 <Yayimhere> I guess I was going with the error bucket naming
18:00:37 <Yayimhere> bbut ill change it
18:00:42 <Yayimhere> korvo: what?
18:01:11 <korvo> Yayimhere: Once upon a time, the bit bucket was a physical trash can sitting under a machine. It collected pieces of paper from punch cards. The idea is that the bit bucket is *trash*.
18:01:30 <Yayimhere> ok
18:01:44 <Yayimhere> lol
18:02:25 <korvo> On today's Unix derivatives, the "bit bucket" refers to a file, /dev/null, which can only be written to. You can write whatever you like, but nothing will ever come back out. It's used to discard logs and errors that we want to ignore.
18:03:22 <korvo> Yayimhere: Anyway, if you look at that prehistory page that I just edited, you'll see that I've slowly been building up a listing of the foundations of esoteric language design. Some time ago, I decided that such pages ought to be humorous and informative.
18:03:55 <Yayimhere> korvo: oh cool
18:04:03 <esolangs> [[18]] https://esolangs.org/w/index.php?diff=169179&oldid=169175 * Yayimhere2(school) * (+0) /* Commands */
18:04:41 <korvo> Yayimhere: Honestly I think https://esolangs.org/wiki/Timeline_of_esoteric_programming_languages is much funnier. However, editing that page has to be done very carefully, because the *entire* page has to make sense.
18:05:50 <Yayimhere> yea
18:06:39 <korvo> "Repetition is a literary device in which a phrase is repeated, often with minor variations, to emphasize an underlying theme."
18:12:56 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
18:13:38 <korvo> Hm. Objects can be class-, prototype-, or map-based. Let's explain that.
18:14:28 <Yayimhere> anyways
18:14:32 <Yayimhere> im going now
18:14:34 <Yayimhere> bye!!!
18:14:46 -!- Yayimhere has quit (Quit: Client closed).
18:17:42 <ais523> korvo: I don't like the term "object-oriented programming" so much because it's both very general and has fuzzy edges
18:18:20 <ais523> there are clear parallels between a Java object, a Smalltalk object, a Rust object, and an ECMAScript object – but there are also massive differences
18:18:48 <ais523> and I don't think it necessarily makes sense to talk about which of those languages is OOP and which ones aren't
18:21:27 <korvo> ais523: Well, what three of those four have in common is the ability to deliver a serialized message without prior static knowledge of the receiver's internals; the message is dynamically dispatched to a late-bound behavior.
18:21:40 <sorear> Was it ever anything other than a buzzword?
18:22:06 <korvo> Today, "object-oriented" is a nice way to refer to languages that aren't object-based because they have some sort of primitive values.
18:23:45 <ais523> korvo: which three are you thinking of?
18:24:09 <korvo> ais523: ECMAScript, Java, and Smalltalk. The ability to do this goes down to the VM in all three cases.
18:24:19 <ais523> korvo: oh, I see
18:24:28 <ais523> I was thinking of the languages themselves not the VM
18:24:42 <ais523> e.g. I don't think of gcj as being able to send serialized messages
18:24:47 <korvo> I mean, Rust has a VM too, but it's LLVM.
18:24:57 <ais523> LLVM isn't actually a VM, it's badly named
18:25:22 <ais523> it's more of an abstract machine
18:33:14 <korvo> ais523: Consider: in those languages, it's possible to not handle a message, but to pass it along to some other receiver. How would one create a Rust object which responds to *any* method by invoking that same method on some other object? I think it'd have to be parameterized by the type of that other object.
18:33:47 <ais523> korvo: I don't think you can do that in Jaa
18:33:49 <ais523> * Java
18:34:13 <ais523> you can create proxies in Java but they won't accept methods that aren't listed in the interfaces you asked them to support
18:34:21 <ais523> (but my Java knowledge is outdated so maybe you can nowadays)
18:36:27 <ais523> Rust can do much the same thing using a dyn-compatible supertrait, but it only works on methods that are dyn-compatible (e.g. they don't attempt to pass the unknown object by value)
18:37:01 <korvo> Java had a VM change to allow it; the bytecode to search for is `invokedynamic`. https://jcp.org/en/jsr/detail?id=292 Prior to that, Java only had `invokeinterface`, which has the same limitations as Rust traits.
18:37:50 <korvo> Java's warning to object-based languages is that it's simply *not reasonable* to insist that all behaviors belong to a single partially-ordered system of interfaces. Yes, it's desirable, but it's not sufficiently open for extension.
18:38:20 <fizzie> As I recall, that was added to make it easier to support *other* (more dynamic) JVM languages, not to add any functionality to Java-the-language.
18:38:46 <ais523> korvo: I don't think invokedynamic does what you want, it allows an object to dynamically generate code to forward messages it receives, but it doesn't give it the ability to receive arbitrary messages in the first plaaec
18:40:02 <ais523> I guess it could receive the messages in some other format other than Java's native one (wrapped in a Java method call), then use invokedynamic to convert it into the appropriate form for the other object
18:40:17 <korvo> ais523: You have to cast everything to Object first, but it should work. The main issue is speed.
18:41:34 <korvo> fizzie: I think that you're correct. I don't know whether any Java compiler uses `invokedynamic`, but I recall that Clojure existentially depends upon it.
18:42:27 <ais523> invokedynamic is used by javac but only in fairly niche scenarios like proxy creation
18:43:56 <ais523> korvo: I don't think this works even casting to Object, Method.invoke (even in modern Java) has a restriction that the method you invoke has to be an instance of the class or interface that declares the method
18:44:14 <ais523> so there's no way for a Java object to permit arbitrary methods to be called on it
18:44:43 <ais523> (it can call arbitrary methods on the object it's wrapping, without knowing its type, but can't forward them if they can't be called in the first place to be forwarded)
18:45:18 <korvo> Okay, I'll add a paragraph.
18:49:09 <ais523> * the object you invoke the method on has to be an instance
18:55:12 -!- tromp has joined.
18:55:41 <esolangs> [[HalfText]] https://esolangs.org/w/index.php?diff=169180&oldid=168993 * GolferHome * (-308)
18:57:45 <esolangs> [[Object-oriented paradigm]] https://esolangs.org/w/index.php?diff=169181&oldid=166913 * Corbin * (+2777) Explain the basics of behavioral schemata, often erroneously called "inheritance" after the specific phenomenon in class-based languages.
18:58:32 <korvo> ais523: ^^^ LMK what you think. I would be okay with listing Rust, Haskell, etc. under some sort of trait/mixin sub-header of class-based languages; it *is* a real way of organizing code at scale and it should be contrasted.
18:58:58 <ais523> korvo: this article might take a while to read
19:00:14 <korvo> Oh, no worries. I only added the == Schemata == section. I'd be okay with s/schema/behavior/g too; there's no good standard name.
19:00:50 <korvo> Heh. At [[fat pointer]] I said, "The first pointer is called the behavior, class, interface, prototype, script, or vtable." Yeah, lots of non-standard names.
19:02:13 <esolangs> [[Vixen]] https://esolangs.org/w/index.php?diff=169182&oldid=168554 * Corbin * (+0) Fix categories; I switched from classes to prototypes.
19:04:25 <ais523> korvo: it seems OK so far but I think there are always going to be gray areas
19:04:32 <ais523> e.g. Lua doesn't seem to fall firmly into any of your schemata
19:05:31 <korvo> Lua is prototype-based, IIRC? It's been a while. The idea is that, like in ECMAScript, the generic attribute-dictionary collection is capable of self-reference.
19:06:26 <ais523> korvo: it's a hybrid
19:07:57 <ais523> a Lua table is a map where the keys can be pretty much anything and so can the values, and it can also have a metatable; to call a method on a table, you look up the value whose key matches the method name and call it as a function, or if there isn't such a value you search the metatable for a function that tells you what to do instead
19:08:54 <korvo> Sounds like metatables are prototypes.
19:09:14 <ais523> metatables are a lot like prototypes, *but* most method calls don't go through them at all
19:09:44 <ais523> also if a table wants to be able to access itself from a method, the function it maps that method to needs to close over the table itself
19:11:50 <ais523> sorry, I was wrong, the method is given the table itself as an argument
19:12:03 <korvo> I think I can give a dichotomous key. Send a message to an object. Does the object have a local custom schema, or does it point to a shared schema? In the former case, if the schema doesn't handle the message, is the message automatically delegated somewhere instead of failing?
19:12:19 <ais523> so Lua OO usually works something like this: https://tio.run/##yylN/P@/QsFWoVohrzQXSBsq1HJV6CWmpADZaaV5ySWZ@XkamToKWZoKmXoQJRBaWyFLITUvhavCCqhYw0STq6AoM69EowIkqfn/PwA
19:13:06 <korvo> Shared schemata are classes. Automatic delegation on failure is prototypes. Anything else is effectively map-based; the same techniques for optimizing prototypes will work on it.
19:16:24 <ais523> Lua's rule is basically a) see if the method is implemented directly on the object, b) if yes call the method, c) if no see if the object has a metatable property (erroring if it doesn't), d) call the metatable's __index method with a reference to the object and the name of the method you were originally calling, and let it return the method implementation
19:16:50 <ais523> so it's like a map that falls back to a metatable, and there's no rule about whether the metatables have to be shared or not (in practice they usually are)
19:17:07 <korvo> I'm still chewing on "most method calls don't go through [the prototype]". Like, I think that this depends a lot on what one is doing. Lately, most of my Vixen methods have been what systems call "static" or "class" methods; they are intended to be called on the original object, not a clone.
19:18:30 <ais523> I guess the way to think of it is that in Java or Smalltalk or ECMAScript, to construct an object you specify the class/object that specifies its behaviours and assign to its properties/internal storage; in Lua, the constructor usually assigns to the properties and also assigns to the methods
19:19:18 <korvo> Yeah, I'd still say that metatables are prototypes. They're just very opinionated. FWIW I personally think *Python* is prototype-based, too; it just happens that the standard `type` metaclass and `object` prototype are extremely opinionated about object layouts.
19:19:28 <korvo> As opposed to e.g. Ruby, I guess.
19:20:03 <ais523> this is an interesting opinion because I thought that Perl and Python OO is effectively equivalent, but Perl is definitely class-based
19:20:39 <ais523> (the way you *create* objects is bizarre by class-based standards, but method calls are very standard for a class-based language)
19:21:14 <korvo> Python's `object` is very weird. Direct clones of it like `object()` do not have an instance dictionary and compare by identity; they're gensyms rather than extensible objects.
19:22:50 <korvo> But Python has like three levels of hooking (metaclass, new/init, getattribute/etc.) and users are expected to use the weakest level that gets the task done. The final level of getattr/setattr is meant to emulate Self's most basic features.
19:24:55 <b_jonas> "LLVM isn't actually a VM, it's badly named" => wait, is "LLVM" even supposed to stand for that? I don't know what the letters were supposed to stand for. I think I lost interest in trying to figure out what most of these jargon abbreviations mean in my current job, which uses way too many opaque abbreviations, including colliding ones where PID means two completely unrelated things
19:25:31 <korvo> "Low-Level Virtual Machine". That's also its original aspiration: instead of compiling to the target machine, compile to LLVM's IR and let the toolchain emit machine code for you.
19:26:42 <ais523> b_jonas: it's meant to stand for "low-level virtual machine" but after a while they regretted the name I think
19:26:56 <korvo> I think it's a great name, in the tradition of "it's called BigTable, not FastTable". QBE (https://c9x.me/compile/) is short for "Quick BackEnd", on a similar tack.
19:27:42 <ais523> <llvm.org> The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines. The name "LLVM" itself is not an acronym; it is the full name of the project.
19:29:01 <b_jonas> jI see
19:30:06 <ais523> I guess at some point you run into philosophical questions about what a virtual machine actually is
19:30:25 <esolangs> [[Cellang]] N https://esolangs.org/w/index.php?oldid=169183 * Esolangist alt * (+1106) Esolangist alt
19:39:03 <int-e> The existence of `lli` kind of justifies the "virtual machine" notion.
19:39:18 <int-e> . o O ( It's not not a virtual machine. )
19:58:53 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=169184&oldid=168919 * HeckYeah100 * (+305)
20:36:44 -!- ais523 has quit (Quit: quit).
20:44:07 <esolangs> [[Special:Log/newusers]] create * JackM2484 * New user account
21:00:24 <esolangs> [[2 commands :(]] M https://esolangs.org/w/index.php?diff=169185&oldid=168151 * * (+8) 'or more'
21:06:33 -!- pool has joined.
21:07:43 -!- slavfox has quit (Quit: ZNC 1.8.2 - https://znc.in).
21:10:49 -!- slavfox has joined.
21:45:09 <esolangs> [[User:Buckets]] M https://esolangs.org/w/index.php?diff=169186&oldid=169121 * Buckets * (+11)
21:46:03 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=169187&oldid=169122 * Buckets * (+12)
21:46:25 <esolangs> [[Melon]] N https://esolangs.org/w/index.php?oldid=169188 * Buckets * (+1143) Created page with "Melon Is An Esoteric programming language created By [[User:Buckets]] in 2021. {| class="wikitable" |- ! Commands !! Instructions |- | @ || Rotate left And skip the Next Command. |- | # || Starting point where Four Seperate IPs come out From. |- | D || If an IP travels th
22:00:57 <esolangs> [[File talk:Dango Language Logo.png]] https://esolangs.org/w/index.php?diff=169189&oldid=169168 * RaiseAfloppaFan3925 * (+371)
22:24:37 -!- ais523 has joined.
22:45:11 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
22:58:23 <esolangs> [[Ksplang]] M https://esolangs.org/w/index.php?diff=169190&oldid=169130 * Sejsel * (+44) Fix up table headers
22:58:37 <esolangs> [[Ksplang/instructions]] M https://esolangs.org/w/index.php?diff=169191&oldid=169134 * Sejsel * (+44) Fix up table headers
23:13:49 -!- Sgeo has joined.
23:25:07 -!- Sgeo_ has joined.
23:28:56 -!- Sgeo has quit (Ping timeout: 240 seconds).
23:30:17 <esolangs> [[Brainyay]] https://esolangs.org/w/index.php?diff=169192&oldid=168825 * PhiPhiPHipHi2.0 * (+215)
23:30:59 <esolangs> [[Brainyay]] https://esolangs.org/w/index.php?diff=169193&oldid=169192 * PhiPhiPHipHi2.0 * (+64)
23:34:09 <esolangs> [[Brainyay]] https://esolangs.org/w/index.php?diff=169194&oldid=169193 * PhiPhiPHipHi2.0 * (+45)
23:36:11 -!- ais523 has quit (Quit: quit).
←2025-11-23 2025-11-24 2025-11-25→ ↑2025 ↑all