< 1760054872 671370 :chiselfuse!~chiselfus@user/chiselfuse QUIT :Remote host closed the connection < 1760054885 792961 :chiselfuse!~chiselfus@user/chiselfuse JOIN #esolangs chiselfuse :chiselfuse < 1760055185 493760 :chiselfuse!~chiselfus@user/chiselfuse QUIT :Remote host closed the connection < 1760055284 852226 :chiselfuse!~chiselfus@user/chiselfuse JOIN #esolangs chiselfuse :chiselfuse < 1760058144 273524 :thorium1256!~cube@idlerpg/player/thorium1256 QUIT :Read error: Connection reset by peer > 1760060253 974762 PRIVMSG #esolangs :14[[07ZeroDivisionError: Division by 014]]4 10 02https://esolangs.org/w/index.php?diff=165887&oldid=164121 5* 03Sophocrat 5* (-17) 10/* Categories */ removed categories heading (it's unnecessary) < 1760060807 923479 :callforjudgement!~ais523@user/ais523 NICK :ais523 < 1760060823 774857 :ais523!~ais523@user/ais523 QUIT :Quit: quit < 1760060851 703407 :moony4!moony@hellomouse/dev/moony QUIT :Quit: leaving < 1760060863 140355 :Bowserinator!Bowserinat@hellomouse/dev/bowserinator QUIT :Quit: Blame iczero something happened < 1760060863 202064 :iovoid!iovoid@hellomouse/dev/iovoid QUIT :Quit: iovoid has quit! < 1760060902 882985 :Bowserinator!Bowserinat@hellomouse/dev/bowserinator JOIN #esolangs Bowserinator :No VPS :( < 1760060910 911873 :moony4!moony@hellomouse/dev/moony JOIN #esolangs moony :Kaylie! (she/her) > 1760061020 708457 PRIVMSG #esolangs :14[[07User:Sophocrat14]]4 10 02https://esolangs.org/w/index.php?diff=165888&oldid=165817 5* 03Sophocrat 5* (+606) 10started working on DreamBerd article. The programmer jokingly renamed it to "Gulf of Mexico" but I'm not sure if they intend to stick with the name < 1760061117 542590 :iovoid!iovoid@hellomouse/dev/iovoid JOIN #esolangs iovoid :MPCitH is when you read a book > 1760061734 375839 PRIVMSG #esolangs :14[[078114]]4 N10 02https://esolangs.org/w/index.php?oldid=165889 5* 03Waffelz 5* (+9449) 10Created page with "{{Distinguish/Confusion|8}} :''Note that 81 is always italicized.'' {{infobox proglang |name=''81'' |paradigms=Imperative |author=[[User:Waffelz]] |year=[[:Category:2025|2025]] |memsys=[[:Category:Cell-based|Cell-based]] |dimensions=one-dimensional > 1760061797 601078 PRIVMSG #esolangs :14[[07814]]4 M10 02https://esolangs.org/w/index.php?diff=165890&oldid=113218 5* 03Waffelz 5* (+30) 10 > 1760061811 581993 PRIVMSG #esolangs :14[[07User:Sophocrat14]]4 10 02https://esolangs.org/w/index.php?diff=165891&oldid=165888 5* 03Sophocrat 5* (+37) 10bit of work > 1760062386 587145 PRIVMSG #esolangs :14[[07Language list14]]4 10 02https://esolangs.org/w/index.php?diff=165892&oldid=165810 5* 03Jk.NDC 5* (+11) 10/* W */ Added Wuht to the language list > 1760063470 204643 PRIVMSG #esolangs :14[[078114]]4 M10 02https://esolangs.org/w/index.php?diff=165893&oldid=165889 5* 03Waffelz 5* (+0) 10 < 1760070272 459023 :Sgeo_!~Sgeo@user/sgeo QUIT :Ping timeout: 244 seconds > 1760070340 130213 PRIVMSG #esolangs :14[[07User talk:Goodbyevoidhelloworld14]]4 10 02https://esolangs.org/w/index.php?diff=165894&oldid=165881 5* 03Goodbyevoidhelloworld 5* (+239) 10 < 1760070687 955068 :Sgeo!~Sgeo@user/sgeo JOIN #esolangs Sgeo :realname < 1760077566 458629 :Sgeo!~Sgeo@user/sgeo QUIT :Read error: Connection reset by peer < 1760079924 138924 :tromp!~textual@2001:1c00:3487:1b00:409c:634b:fec4:4fe JOIN #esolangs * :Textual User < 1760081733 276524 :V!~v@ircpuzzles/2022/april/winner/V QUIT :Remote host closed the connection < 1760087897 656053 :lisbeths!uid135845@id-135845.lymington.irccloud.com QUIT :Quit: Connection closed for inactivity < 1760089531 398730 :myname!~myname@152.53.22.209 QUIT :Quit: WeeChat 4.5.1 < 1760090065 981268 :APic!apic@chiptune.apic.name PRIVMSG #esolangs :Hi < 1760092263 556797 :thorium1256!~cube@idlerpg/player/thorium1256 JOIN #esolangs thorium1256 :It's just a cube of computing! < 1760092395 402808 :myname!~myname@152.53.22.209 JOIN #esolangs * :myname < 1760092559 527146 :lisbeths!uid135845@id-135845.lymington.irccloud.com JOIN #esolangs lisbeths :lisbeths < 1760093573 894251 :amby!~ambylastn@host-92-17-32-126.as13285.net JOIN #esolangs amby :realname < 1760096069 581925 :Lord_of_Life_!~Lord@user/lord-of-life/x-2819915 JOIN #esolangs Lord_of_Life :Lord < 1760096125 566755 :Lord_of_Life!~Lord@user/lord-of-life/x-2819915 QUIT :Ping timeout: 256 seconds < 1760096147 957154 :Lord_of_Life_!~Lord@user/lord-of-life/x-2819915 NICK :Lord_of_Life < 1760097134 941522 :tromp!~textual@2001:1c00:3487:1b00:409c:634b:fec4:4fe QUIT :Quit: My iMac has gone to sleep. ZZZzzz… > 1760097510 224973 PRIVMSG #esolangs :14[[078114]]4 M10 02https://esolangs.org/w/index.php?diff=165895&oldid=165893 5* 03Waffelz 5* (+20) 10 > 1760097773 719484 PRIVMSG #esolangs :14[[078114]]4 10 02https://esolangs.org/w/index.php?diff=165896&oldid=165895 5* 03Waffelz 5* (+64) 10 > 1760100062 191651 PRIVMSG #esolangs :14[[07NONPLUSSED14]]4 M10 02https://esolangs.org/w/index.php?diff=165897&oldid=165880 5* 03NoWhy 5* (+330) 10constructs > 1760100193 154619 PRIVMSG #esolangs :14[[07NONPLUSSED14]]4 M10 02https://esolangs.org/w/index.php?diff=165898&oldid=165897 5* 03NoWhy 5* (+92) 10self-modifying < 1760100216 731058 :int-e!~noone@int-e.eu PRIVMSG #esolangs :`' general < 1760100221 194202 :HackEso!~h@techne.zem.fi PRIVMSG #esolangs :373) mixing drinks together is like taking all of mozart's works and listening to all of them at once and in general a drink - and most foods - are kind like taking a song and then just taking the average of the notes and listening to it for three minutes. olsner: the point is you don't have to be the composer yourself not everyone knows what sequences of drinks taste the best \ 510) CakeProphet: mr presi < 1760100425 920 :int-e!~noone@int-e.eu PRIVMSG #esolangs :fungot: eh < 1760100425 516453 :fungot!~fungot@2a01:4b00:82bb:1341::a PRIVMSG #esolangs :int-e: as the hon. and learned friend the member for north east somerset, to the whisky and the cake were getting muddled, or if the government has a strategy. when a country is a member, < 1760100767 111080 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :fungot, cake is not a drink, so I don't think that counts as mixing drinks < 1760100767 552908 :fungot!~fungot@2a01:4b00:82bb:1341::a PRIVMSG #esolangs :b_jonas: that is, of course of a year. uk unemployment, the lifetime of the new prime minister still have no regrets policy. well, of the five people involved, that < 1760100785 332826 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :that's better < 1760100839 827 :int-e!~noone@int-e.eu PRIVMSG #esolangs :maybe it was a rum cake and they were out of rum < 1760100973 692789 :lynndotpy60!~rootcanal@134.122.123.70 QUIT :Quit: bye bye < 1760101036 615892 :lynndotpy60!~rootcanal@134.122.123.70 JOIN #esolangs lynndotpy :lynn < 1760102042 767525 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :I wish "elliptic curve cryptography" was named something different that doesn't look like people are trying to write "error-correcting code" when they abbreviate it < 1760102897 694304 :lisbeths!uid135845@id-135845.lymington.irccloud.com QUIT :Quit: Connection closed for inactivity < 1760103492 160906 :int-e!~noone@int-e.eu PRIVMSG #esolangs :> 26^3 < 1760103493 768867 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esolangs : 17576 < 1760103509 40334 :int-e!~noone@int-e.eu PRIVMSG #esolangs :> sqrt $ 26^3 < 1760103510 393647 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esolangs : 132.5745073534124 < 1760103553 901221 :int-e!~noone@int-e.eu PRIVMSG #esolangs :(it's worse than that because the distribution isn't even) < 1760103710 140732 :int-e!~noone@int-e.eu PRIVMSG #esolangs :fungot: Why is American Football played with a hokey ball? < 1760103710 371126 :fungot!~fungot@2a01:4b00:82bb:1341::a PRIVMSG #esolangs :int-e: the most important of the amendments, the government will < 1760105387 845649 :lisbeths!uid135845@id-135845.lymington.irccloud.com JOIN #esolangs lisbeths :lisbeths < 1760106496 958392 :Sgeo!~Sgeo@user/sgeo JOIN #esolangs Sgeo :realname < 1760106514 394725 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :no, it's played with a rugby egg > 1760108191 977816 PRIVMSG #esolangs :14[[07NONPLUSSED14]]4 10 02https://esolangs.org/w/index.php?diff=165899&oldid=165898 5* 03NoWhy 5* (+991) 10time command > 1760108464 182324 PRIVMSG #esolangs :14[[07NONPLUSSED14]]4 M10 02https://esolangs.org/w/index.php?diff=165900&oldid=165899 5* 03NoWhy 5* (+67) 10Comment, fix page links > 1760109344 572295 PRIVMSG #esolangs :14[[07Adeco14]]4 10 02https://esolangs.org/w/index.php?diff=165901&oldid=165332 5* 03Zinnia Glean 5* (+81) 10 > 1760109801 287354 PRIVMSG #esolangs :14[[07Adeco14]]4 10 02https://esolangs.org/w/index.php?diff=165902&oldid=165901 5* 03Zinnia Glean 5* (+237) 10 < 1760109877 564471 :FreeFull!~freefull@79.186.63.32.ipv4.supernova.orange.pl QUIT :Ping timeout: 264 seconds > 1760110585 654807 PRIVMSG #esolangs :14[[07Esolang:Introduce yourself14]]4 M10 02https://esolangs.org/w/index.php?diff=165903&oldid=165875 5* 03Nguyendinhtung2014 5* (+150) 10 > 1760110612 372964 PRIVMSG #esolangs :14[[07User:Nguyendinhtung201414]]4 N10 02https://esolangs.org/w/index.php?oldid=165904 5* 03Nguyendinhtung2014 5* (+46) 10Created page with "He is, as mentioned in the name, born in 2014." > 1760111679 835497 PRIVMSG #esolangs :14[[07Basic Stack14]]4 N10 02https://esolangs.org/w/index.php?oldid=165905 5* 03Nguyendinhtung2014 5* (+1189) 10Created page with "Basic Stack is an esolang by the user [[User:Nguyendinhtung2014]].It consists of a "transparent" stack (whick means any value in the stack can be looked at but only can we do actions with the top value), a register, push-pop commands, conditionals and got < 1760112647 623332 :FreeFull!~freefull@79.186.63.32.ipv4.supernova.orange.pl JOIN #esolangs FreeFull :FreeFull < 1760115343 107243 :vista_user!~vista_use@user/DOS-User:11249 JOIN #esolangs DOS_User :[https://web.libera.chat] vista_user < 1760115414 809579 :vista_user!~vista_use@user/DOS-User:11249 QUIT :Remote host closed the connection < 1760116505 925137 :APic!apic@chiptune.apic.name PRIVMSG #esolangs :Good Night 😴 < 1760116811 554800 :ais523!~ais523@user/ais523 JOIN #esolangs ais523 :(this is obviously not my real name) < 1760117497 379215 :tromp!~textual@2001:1c00:3487:1b00:409c:634b:fec4:4fe JOIN #esolangs * :Textual User > 1760118244 450010 PRIVMSG #esolangs :14[[07Iterate14]]4 10 02https://esolangs.org/w/index.php?diff=165906&oldid=165879 5* 03Aadenboy 5* (+1266) 10/* Cat program */ replace cat program and add reverse cat program > 1760119716 657716 PRIVMSG #esolangs :14[[07Language list14]]4 M10 02https://esolangs.org/w/index.php?diff=165907&oldid=165892 5* 03Waffelz 5* (+13) 10 > 1760121073 226911 PRIVMSG #esolangs :14[[07Talk:Language list14]]4 10 02https://esolangs.org/w/index.php?diff=165908&oldid=140976 5* 03Corbin 5* (+212) 10/* Please delete this page */ new section < 1760121819 135761 :ais523!~ais523@user/ais523 QUIT :Quit: sorry about my connection > 1760122370 840581 PRIVMSG #esolangs :14[[07NONPLUSSED14]]4 M10 02https://esolangs.org/w/index.php?diff=165909&oldid=165900 5* 03NoWhy 5* (-129) 10prototype repo link < 1760123042 647053 :Everything!~Everythin@46.96.48.125 JOIN #esolangs Everything :Everything > 1760125308 330258 PRIVMSG #esolangs :14[[07NONPLUSSED14]]4 M10 02https://esolangs.org/w/index.php?diff=165910&oldid=165909 5* 03NoWhy 5* (+38) 10/* Time Command */ < 1760126651 526331 :ais523!~ais523@user/ais523 JOIN #esolangs ais523 :(this is obviously not my real name) < 1760127027 752561 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :is anyone here aware of using coroutines to implement message-passing-like objects? like, you resume the coroutine to call a method on it, and then it yields the method's return value < 1760127034 906316 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :and the local variables of the coroutine act like fields of the object < 1760127048 332033 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(this is different from the closure-object correspondence, which uses *captures* to act like fields of the object) < 1760127309 983176 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :There've been a couple Python libraries based on the fact that a Python generator can accept inputs. I'll try to find good examples. < 1760127550 554401 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Python currently has proper coroutines with the `async def` keyword, but there's also backward compatibility with older ways of emulating coroutines, including generators. This leads to a few transitional fossils in the record. Check out https://docs.twistedmatrix.com/en/stable/api/twisted.internet.defer.html#inlineCallbacks for an example. < 1760127701 474941 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :This let us write objects whose messages were deferred actions; sending a message was like waiting until the action completes. For a non-trivial and well-commented usage example, here's chunk-management logic in my old Minecraft server: https://github.com/bravoserver/bravo/blob/master/bravo/world.py#L438-L544 < 1760127834 204309 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :When we went from Python to Monte (which this codebase didn't experience), lines like `chunk = yield maybeDeferred(self.serializer.load_chunk, x, z)` would become m`def chunk := serializer<-load_chunk(x, z)`; all of the extra sending ceremony is bundled up in the change from '.' to '<-'. < 1760128919 473802 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :thanks – I thought it might be the sort of thing you would be experienced at < 1760128985 764350 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :hmm, was there an esolang whose name punned on Twisted the name of the Python language versus "twisted" the adjective? < 1760129005 650003 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I vaguely remember one but it might have been spam, or even a spam page repurposed as a language < 1760129008 721886 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :It's something that we (the Smalltalky prototype/object folks) wanted throughout the 90s and 2000s. It's one of the two big problems in Web frameworks: how to represent little async actions within a single process, when we want to do hundreds of them per request? < 1760129027 920583 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :ah, Twisted Python Chat Server < 1760129051 483335 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :(The other big problem is how to store objects in a database. That one's still open IMO!) < 1760129094 87319 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :Rust had that problem too – its current status is "we know we need some sort of coroutine design but don't know what it looks like", plus stable async/await which is implemented in terms of the unstable coroutines internally and they change the internals whenever they change the coroutine design < 1760129133 156606 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :TPCS could be a topology-based language. I think there was another one of those recently; some sort of interactive Web page where one could draw a circuit based on its topological features. < 1760129140 794480 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :fwiw, I found a converse to the "store objects in a database" problem – instead of storing the objects in a database, you leave the objects floating around in memory like normal and create database-style indexes for them < 1760129181 397486 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :you don't get, e.g., database-style persistence, but you get enough of the advantages of a database to be useful in some contexts < 1760129211 620335 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Are you familiar with ECS, Entity-Component Systems? IIRC you're not into gamedev, so might not have seen it before. It's not perfect but it's remarkably good at delivering real-time access to lots of objects. < 1760129233 200460 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :sort of – I'm very familiar with the concept existing but have trouble understanding the explanations of it < 1760129264 644380 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :also I'm pretty experienced with gamedev but what I do is very outside mainstream gamedev < 1760129269 766346 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I think ultimately any object-database mapping has to somehow reduce away the *behavior* of an object, which we normally think of as inalienable methods, into some sort of inert struct. Object-oriented folks don't like those. < 1760129330 227125 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yeah! I meant that you probably haven't used e.g. Unreal or Unity tooling. In an ECS-oriented engine, behaviors have to be encoded as components. This is how they deal with the lack of methods; an object has a behavior precisely when it has the component providing that behavior. < 1760129389 959888 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :(This has been on my mind for several months because it's key to finishing Zaddy. Still puzzling though.) < 1760129404 644462 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I guess my relationship between me and ECS is similar to the relationship between new would-be Haskell programmers and Monads < 1760129411 371071 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :there are lots of explanations but I haven't found the one that makes it click for me yet < 1760129419 510519 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :so I still don't really understand what it's about < 1760129441 278140 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :`? monad < 1760129446 42283 :HackEso!~h@techne.zem.fi PRIVMSG #esolangs :Monads are just monoids in the category of endofunctors. < 1760129475 623427 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :fungot: Or perhaps monads are just 2-elements in a bicategory. < 1760129475 949346 :fungot!~fungot@2a01:4b00:82bb:1341::a PRIVMSG #esolangs :korvo: what a very important question, and the prime minister write to the m&s chief executive, to a series of very important work. < 1760129596 2361 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Oh! Maybe you've seen defunctionalization? An ECS encoding of objects is like a defunctionalization of their methods; the idea is that there aren't any vtables, just a type tag that points into some table of components. Like a many-to-many relation between entities and components. Very database-oriented thinking. < 1760129607 190707 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :...Sorry, I'm just emitting tokens now. I'll stop. < 1760129630 368620 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :at least your tokens are more likely to be relevant than those of an LLM < 1760129739 568627 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :defunctionalization is another thing I've seen but not understood, but this at least looks easier to understand < 1760130852 890209 :Everything!~Everythin@46.96.48.125 QUIT :Quit: leaving < 1760131775 696584 :tromp!~textual@2001:1c00:3487:1b00:409c:634b:fec4:4fe QUIT :Quit: My iMac has gone to sleep. ZZZzzz… < 1760132323 96784 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :korvo: hmm, could your objects-in-databases problem be summarised as "storing objects in databases only works if I have a finite number of classes statically known in advance (each of which defines the behaviour of an object's methods in terms of a known set of fields), and each object belongs to one of those classes – but I want to be able to store objects that have behaviour that's more dynamically defined than that"? < 1760132383 107458 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I tend to think in terms of the "static number of classes" model by default because that's what the languages I use most often naturally want to use, but this reminded me that there is another way to do it < 1760132416 568842 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :ais523: Yeah. In particular, the Zope crowd was fascinated by signatures ("interfaces") and the problem of asking an object to provide a signature (be "adapted" to an "interface"), leading to the extremely popular zope.interface library. Another good example of a transitional fossil, since it was largely superseded by proper type checking. < 1760132478 995323 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :now I'm wondering if it's possible to create new types at runtime in Rust, that implement existing traits < 1760132516 666490 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :my guess is that the language semantics don't rule it out but you would have to make your own vtables using unsafe code, which is difficult because the vtable format is unstable (both in the sense of there not being a guarantee as to what it is, and in the sense of actually changing in practice sometimes) < 1760132551 228919 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :obviously you would only be able to actually use the types in question using type erasure < 1760132582 123552 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :A while ago I made available some old documentation from Divmod, a Twisted-oriented startup. Divmod Axiom was an object database built on a hack: SQLite has "rowid" per-row identifiers which can be used as tags. So we can treat an object like an ad-hoc ECS entity by using zope.interface to enumerate what it adapts to, adapting the adapters to be components, and saving all components to the DB along with the object. < 1760132587 562837 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Oh, forgot the link: https://divmod.readthedocs.io/en/latest/products/axiom/ < 1760132613 936848 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I tried to maintain some of this code. I could not figure it out back then, and I doubt I could do better now. Axiom was one of those too-clever ideas IMO. < 1760132703 900360 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I think I might understand ECS a bit better now – the idea is that it's a way to abstract over different classes/types/"ways an object can implement its methods" without needing to know the set of possible types in advance? < 1760132721 568193 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Ah, right, components are called "powerups". There were also "upgraders", which made schema migrations entirely transparent; if you wanted to version an object's class then you had to write out adapters that would rewrite old objects into new objects. Very 90s Smalltalk. < 1760132808 647125 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yeah, for sure. The key to ECS is that there's a for-loop that enumerates the entities and applies each entity's component to each entity. Like, imagine that each entity has a bitmask for the components it supports, and the for-loop has another bitmask for the components that should be run. < 1760132902 28212 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sometimes there's other for-loops that enumerate the entities for just one component, usually to cast/extract extra information. Like, copying annotations for a physics object when doing a physics step. < 1760133388 62606 :callforjudgement!~ais523@user/ais523 JOIN #esolangs ais523 :(this is obviously not my real name) < 1760133404 69819 :FreeFull_!~freefull@79.186.63.32.ipv4.supernova.orange.pl JOIN #esolangs FreeFull :FreeFull < 1760133457 158119 :lynndotpy609!~rootcanal@134.122.123.70 JOIN #esolangs lynndotpy :lynn < 1760133566 86390 :FreeFull!~freefull@79.186.63.32.ipv4.supernova.orange.pl QUIT :Ping timeout: 256 seconds < 1760133566 268812 :ais523!~ais523@user/ais523 QUIT :Ping timeout: 256 seconds < 1760133566 382408 :lynndotpy60!~rootcanal@134.122.123.70 QUIT :Ping timeout: 256 seconds < 1760133566 424184 :thorium1256!~cube@idlerpg/player/thorium1256 QUIT :Ping timeout: 256 seconds < 1760133566 794161 :lynndotpy609!~rootcanal@134.122.123.70 NICK :lynndotpy60 < 1760134074 164488 :callforjudgement!~ais523@user/ais523 NICK :ais523 < 1760134219 323452 :thorium1256!~cube@idlerpg/player/thorium1256 JOIN #esolangs thorium1256 :It's just a cube of computing! < 1760135513 782985 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :OK, so the big difference between "how ais523 would use a database-like approach to implement games" and "how an ECS works" is that in an ECS, the code is basically looking for entities on which specific types of data exist, and then processing it in isolation (without knowledge of other data that might also be attached to the entities) – whereas my approach is similar but it isn't looking for the existence of the data but rather particular values < 1760135579 884818 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :as a trivial example, NetHack's big monster-moving loop is similar in nature to an ECS system, but it loops over all monsters *on the level* < 1760135587 421288 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :rather than everything that has an AI and position coordinates < 1760135619 31892 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :it strikes me that ECS is a way to compensate for not having the correct database indexes set up :-D < 1760135801 522573 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yeah! ECS design is clearly a subfield of database schema design. Keeping indices sorted is important in my Zaddy prototype, too. < 1760136308 381590 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :fwiw, NetHack's approach seems to be equivalent to a degenerate case of ECS in which entities that are monsters have a "type of monster" component and everything that operates on monsters dispatches on it < 1760136328 761891 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(which I suspect you aren't actually supposed to do) > 1760136493 930314 PRIVMSG #esolangs :14[[07Special:Log/newusers14]]4 create10 02 5* 03Ricarinium 5* 10New user account < 1760136499 911022 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :performance is also interesting because ECS doesn't really distinguish between components that are used to store data (e.g. position) and components that are used to represent behaviour (e.g. 3D model used for rendering) < 1760136523 791917 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :the latter seems like it would lead to a lot of duplicate components *but* if you try to optimise that, you break some of the optimisations that the rest of the system relies on… < 1760136581 17083 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Interesting. That would be a big difference from e.g. Doom, where all of the logic is inline and all of the "enemy" types are checked with special cases. We can see half-and-half with games like Super Mario 64, where there's both a primitive ECS *and* lots of special-cased behaviors. < 1760136588 731134 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :oh! this is probably why the original article doesn't have a 1-1 correspondence between "entity X that has component Y" pairs and the actual data for entity X's component Y, it would be so you could deduplicate the ones that don't change < 1760136631 821378 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :korvo: oh, NetHack is also full of special cases and double special cases (i.e. when two things interact, there's a special case that requires each of them to have a specific monster type) < 1760136649 294028 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :but in an ECS you need a component to represent things that the special case applies to < 1760136678 552536 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Right. ECS has its own version of the double-dispatch problem. > 1760136820 472134 PRIVMSG #esolangs :14[[07Esolang:Introduce yourself14]]4 10 02https://esolangs.org/w/index.php?diff=165911&oldid=165903 5* 03Ricarinium 5* (+322) 10me < 1760136875 541364 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :now I'm thinking in terms of refactors that change things from being static to dynamic < 1760136890 521055 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :in NetHack 3.6, red dragons are immune to fire but not cold, white dragons are immune to cold but not fire < 1760136902 41841 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :in NetHack 3.7 those are still true by default, but there are situations in which red dragons gain cold immunity < 1760136938 482043 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I imagine an ECS would have had a "resistances" component all along and just change how it's initialized < 1760136957 171410 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(whereas NetHack changed the accessor functions/macros for resistances) < 1760136981 400154 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :so there'll be a component for the exception that lizards have too weak legs to kick < 1760136988 998783 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :and there are hundreds of silly exceptions like that < 1760136993 421628 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :actually this points to a flaw in the ECS model: there is no reason to dispatch on things that have resistances, you are not searching by that, you just need to be able to look them up < 1760137083 585470 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :components for which properties of items you can recognize while blind, while hallucinating, etc < 1760137133 542235 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :and when you're a priest, and whether gnome archaeologists players can use a touchstone as if it was blessed or all archaeologists can < 1760137136 491314 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :b_jonas: actually an ECS would probably struggle with just the concept of an item being in inventory < 1760137150 669636 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :and what stone purifies potion of sickness < 1760137152 614503 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :with the full-search-version it's easy < 1760137209 761603 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :you could make being-in-inventory-ness a component but then you have a type safety issue as there's no static check that an object isn't both in inventory and on the ground < 1760137242 561451 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(and this is the sort of thing that could really do with a static check – NH4 has what is in effect a sanitiser that checks that objects are in exactly one location at all times) < 1760138142 545992 :FreeFull_!~freefull@79.186.63.32.ipv4.supernova.orange.pl NICK :FreeFull < 1760138172 525067 :FreeFull!~freefull@79.186.63.32.ipv4.supernova.orange.pl PRIVMSG #esolangs :ECS.. Could we have a whole programming language based on ECS ideas? < 1760138260 727373 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Like, SQL? < 1760138291 293993 :FreeFull!~freefull@79.186.63.32.ipv4.supernova.orange.pl PRIVMSG #esolangs :Hmm < 1760138327 441459 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I feel like ECS's advantages come from the database-like behaviour, and that ECS also has unrelated requirements but they aren't actually advantages or useful – which possibly makes them a good fit for an esolang? < 1760138372 442896 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Like, for ais523's example, an item in an inventory is really just a row in a table. ECS's limitations are mostly from not being allowed to make new tables. < 1760138424 791187 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :korvo: actually, I think the best approach is to have an "item location" column in an items table, with inventory being one possible location, then you have an index that lets you find items by location < 1760138435 474505 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :because there are some things that should conceptually affect both items in inventory and items on the groudn < 1760138457 739059 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(NetHack does currently use the equivalent of separate tables and just iterates over all the relevant tables and combines the results, when it has to do that) < 1760138490 114817 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(but I think that's a replacement for not having proper indexes) < 1760138545 714744 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :ais523: Ah, okay, that makes sense. In e.g. Minecraft, each table is associated to a client-side modal window, so being "in" the table really is like being "out" of the rest of the world. It's got a touch of that good old N64 SRM about it; for the duration of a Minecraft drag-and-drop, an item is in handheld limbo. < 1760138592 98763 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :fungot: HOLP down for what < 1760138592 877028 :fungot!~fungot@2a01:4b00:82bb:1341::a PRIVMSG #esolangs :korvo: they will be judged, the people of all the united back into the united kingdom were to take 300. the site, to the distinctive, so concerns that the hon. and learned friend the minister for that, and i, and the scottish government to have the same time, the hon. member to the board, the public body set up to pronounce the last bit. < 1760138644 722825 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :the other reason to make it one table is because the information being stored is essentially the same, and you want to be able to move items back and forth between inventory and floor easily – if they were separate tables you would need to move to a different table and need all the column names, etc. to match < 1760138653 554401 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :but with a single table you can just change the location field < 1760139279 90484 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :yeah, every item has to be in exactly one place, which is either on the tile (in which case there's an extra bit for whether it's on the surface or underground/underwater), or in a monster-or-player's inventory, or in a container item (statues are containers), or nowhere (that's where they used to go after a bohsplosion) < 1760139445 424460 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :and if it's in a monster-or-player's inventory then it can be in use in at most one way: wielded, worn in a specific slot fof armor/ring/amulet/saddle, held leash, and I think there was one or two more weird ones that I forgot < 1760139471 341399 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :b_jonas: there's a lit flag but that one actually isn't mutually exclusive with the others < 1760139500 223181 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :yeah, you can weild a lit potion or lamp < 1760139510 81090 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :the specific armor slots thing is probably some of the most brittle code in NetHack, it is hard to change and hard to interact with correctly (these may be correlated) < 1760139554 184674 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :there's also chain and ball chained to you which I really can't conceptualize how it works < 1760139580 401253 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :b_jonas: they're basically just armor slots internally except they don't actually have to be in your inventory < 1760139591 192308 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(this is as confusing as it sounds and has definitely led to bugs in the past) < 1760139653 563930 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :it is a big deviation from the single-owner principle that, e.g., Rust uses to make it easy to write easily-understandable code < 1760139657 138536 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :there's a blindfold/lenses slot which I just imagine as one more of those armor/ring/amulet slots < 1760139659 661231 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :the armor slot items effectively have two owning references < 1760139672 688569 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :b_jonas: indeed < 1760139723 631840 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :the ownership rules are basically "if you remove the item from the armor slot you don't deallocate it, if you remove the item from its other primary owner, check a field on the object to see if it's in an armor slot too, if it is, specialcase that" < 1760139730 53085 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :are there always at most two places that an item can be on a tile, or is it sometimes three (in vanilla, not variants)? I'm not sure about this one < 1760139749 934442 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :by "place" here are you referring to memory locations or places in the game? < 1760139759 404420 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :places in game, like buried or surface < 1760139784 881015 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :on normal terrain they can be buried or on the surface, and I think items can be underwater or under the ice or something, I don't follow how it works really < 1760139787 671626 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :internally it's actually only one for on-tile items, buried objects just get ignored by most things (including the vision code, obviously) < 1760139794 978659 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :and I think some variants have levitating items, but I don't know if that's a place < 1760139817 631478 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :underwater is actually flagged as surface, but ignored for many purposes in much the same way that buried items are < 1760139841 586289 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :there's also "in a container" but those items aren't associated with a tile < 1760139850 39861 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(except indirectly through the container) < 1760140123 813428 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :hmm, if the chain is simultaneously in a slot that you have but not in your inventory, that sounds as unpleasant as riding on a cursed saddle.