< 1591143986 160054 :tromp!~tromp@2a02:a210:ca3:2800:408c:e879:b87d:9d8a QUIT :Remote host closed the connection < 1591144196 676416 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zbbyohcljagkubii PRIVMSG #esoteric :You know what we need more of? Antiprogramming languages. < 1591144232 50603 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zbbyohcljagkubii PRIVMSG #esoteric :With many programming languages, the natural state is that nothing happens, and you have to write code that causes the desired things to happen. < 1591144277 731155 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :i,i substractive program synthesis < 1591144294 236310 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zbbyohcljagkubii PRIVMSG #esoteric :I define an "antiprogramming language" as a language in which the natural state is that anything could happen, and the sole purpose of the code is to prevent undesired things from happening. < 1591144455 378526 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zbbyohcljagkubii PRIVMSG #esoteric :fungot, does all that make sense to you? < 1591144455 522941 :fungot!~fungot@unaffiliated/fizzie/bot/fungot PRIVMSG #esoteric :tswett[m]: how soon before gambit has had one. < 1591144928 172611 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Well, with C programming (at least with gcc), if you do not write any program then the linker won't work because there is no "main" function to start from. < 1591145271 886679 :imode!~linear@unaffiliated/imode JOIN :#esoteric < 1591145313 303449 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :zzo38: Do you like the gcc linker? < 1591145319 989900 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Should I write my own linker? < 1591145405 186940 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Write your own linker if you need to, I suppose. < 1591145432 581990 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :The gcc linker seems to work for me; I haven't done much other stuff with it than just compiling C programs though < 1591145561 133268 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Can you make a global variable of zero length to indicate something that the linker can use to decide something? If so, does the GNU linker support that use? < 1591145661 116105 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Making a symbol to indicate something is a standard trick, I think. < 1591145711 427360 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Yes, I have seen that, although I have not seen them being of zero length. < 1591145768 538812 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I see. I'm not sure how you'd do that in C, but I assume linkers support it fine. < 1591145770 6921 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :(GNU C accepts zero length structures and zero length arrays; the latter is normally only used as the last item in a structure, although I can think of some other uses too, some of which have to do with macros.) < 1591145914 186201 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Indeed with GNU extensions you can write "int thing[0];" to make an zero-length symbol. < 1591146207 625219 :moony!moony@hellomouse/dev/moony QUIT :Ping timeout: 240 seconds < 1591146287 780576 :moony!moony@hellomouse/dev/moony JOIN :#esoteric < 1591150088 584302 :adu!~arobbins@c-73-129-154-238.hsd1.md.comcast.net JOIN :#esoteric < 1591150564 418309 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zbbyohcljagkubii QUIT :Changing host < 1591150564 418368 :tswett[m]!tswettmatr@unaffiliated/tswett JOIN :#esoteric < 1591150564 418377 :tswett[m]!tswettmatr@unaffiliated/tswett QUIT :Changing host < 1591150564 418385 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-zbbyohcljagkubii JOIN :#esoteric < 1591152312 264026 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :tswett[m]: "First, please don't delete my home directory. Actually, if you could just not delete files for now, that would be a great start." < 1591152313 854612 :craigo!~craigo@144.136.206.168 QUIT :Ping timeout: 264 seconds < 1591154042 798493 :moony!moony@hellomouse/dev/moony QUIT :Ping timeout: 260 seconds < 1591154073 672895 :moony!moony@hellomouse/dev/moony JOIN :#esoteric < 1591155866 865859 :imode!~linear@unaffiliated/imode QUIT :Ping timeout: 256 seconds < 1591156934 934173 :imode!~linear@unaffiliated/imode JOIN :#esoteric < 1591157942 215967 :tromp!~tromp@2a02:a210:ca3:2800:408c:e879:b87d:9d8a JOIN :#esoteric < 1591158232 99999 :tromp!~tromp@2a02:a210:ca3:2800:408c:e879:b87d:9d8a QUIT :Ping timeout: 256 seconds < 1591158998 650707 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Do you have some comments of the custom Magic: the Gathering set that I was making up? < 1591161994 879446 :zseri!~zseri@ytrizja.de QUIT :Quit: zseri < 1591162292 126235 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :I don't think I saw it, but my commentary would be fairly uninformed -- I only watch some M:tG players from time to time, haven't actually gotten into playing it myself. < 1591162317 89869 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :O, OK. < 1591162323 36124 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :Link? < 1591162346 21663 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :http://zzo38computer.org/mtg/zivstr/ < 1591162371 169048 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :There is a HTML export of the card set there; you can also download the TeXnicard file. < 1591162589 297408 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :(Not all cards are custom; some are reprints. However, I intend to add more custom cards too. Also, the rarities and other stuff may be changed, too.) < 1591162596 124925 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :Kjugobe's Trick wow, haha < 1591162636 929806 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :High skill ceiling card < 1591163161 922064 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Yes, that card can be used for a few things < 1591163167 928129 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :What kinds of player counters are in the set? < 1591163213 572265 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :So far, I don't think there are any counters on players in this set, but I may add some later. Also, it can be used together with another set, potentially. < 1591163245 493067 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :Ah, I was looking at Kjugobe's Pet < 1591163253 968992 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Yes, I was guessing that. < 1591163389 242226 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :I wonder if there's a way to make profitable use of the sacrifice mechanic on Goblins of the Flarg. < 1591163417 592005 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Yes, I thought of that too, maybe a card can be added to take advantage of that. (That card is a rather old card.) < 1591163662 179177 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :Against non-red opponents, it'll just be a 1/1 for 1, which would be outclassed by a lot of other 1-mana creatures these days, but it depends on what's legal to play of course. < 1591163706 695298 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :But yeah, if there was a sweet combo :D < 1591163742 810499 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Cale: Hale < 1591163753 83807 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :hellochaf < 1591163756 513432 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Have you played any of these "deck building roguelike" games that people are into nowadays? < 1591163778 653452 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :I've played Slay the Spire < 1591163788 65327 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :Though it was back when there were only two clases < 1591163790 425352 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :classes* < 1591163793 566375 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I played a lot of that. < 1591163819 469626 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The two newest classes are fun. < 1591163926 129393 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :I have not heard of such "deck building roguelike" game, but now I did. < 1591163961 879822 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :I've played a lot of roguelike roguelike games, especially Caves of Qud < 1591164063 555034 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :I have a screenshot from StS here https://cale.l5.ca/share/Slay%20the%20Spire%20-%204496.png < 1591164096 357767 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :(I'm holding a hand representing 4496 damage) < 1591164128 15125 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Barricade + Entrench? < 1591164150 83313 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :I forget what else was in my deck < 1591164156 534110 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :Barricade sounds right < 1591164159 444254 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean, you had the block doubling card. < 1591164164 325429 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I can see barricade in the power list. < 1591164177 166341 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :ah, yeah < 1591164177 813199 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Too bad that still doesn't -- wait, you haven't gotten the game's final boss, I guess, because that was only added with the third character? < 1591164189 886791 :Cale!~cale@2607:fea8:9960:35:4c85:e40f:b7ff:71a8 PRIVMSG #esoteric :Yeah, this was a final boss at the time < 1591164216 133343 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Yes. There's a top secret fourth act now. < 1591164543 499913 :adu!~arobbins@c-73-129-154-238.hsd1.md.comcast.net QUIT :Quit: adu < 1591165982 719267 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca QUIT :Ping timeout: 260 seconds < 1591166031 553598 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca JOIN :#esoteric < 1591167142 996619 :imode!~linear@unaffiliated/imode QUIT :Ping timeout: 246 seconds < 1591168545 615560 :tromp!~tromp@2a02:a210:ca3:2800:408c:e879:b87d:9d8a JOIN :#esoteric < 1591170027 73111 :tromp_!~tromp@2a02:a210:ca3:2800:35a8:9fb5:3aa3:ee1e JOIN :#esoteric < 1591170093 28842 :ArthurStrong!~ArthurStr@128-124-137-220.mobile.vf-ua.net JOIN :#esoteric < 1591170227 548951 :tromp!~tromp@2a02:a210:ca3:2800:408c:e879:b87d:9d8a QUIT :Ping timeout: 240 seconds < 1591171261 120402 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 JOIN :#esoteric < 1591171542 146939 :b_jonas!~x@catv-176-63-11-121.catv.broadband.hu QUIT :Quit: leaving < 1591171757 768637 :cpressey!~cpressey@88.144.69.212 JOIN :#esoteric < 1591172864 358080 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover JOIN :#esoteric < 1591173529 550922 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c JOIN :#esoteric < 1591173711 100322 :tromp_!~tromp@2a02:a210:ca3:2800:35a8:9fb5:3aa3:ee1e QUIT :Ping timeout: 246 seconds < 1591174180 441149 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 QUIT :Remote host closed the connection < 1591174390 819068 :S_Gautam!uid286066@gateway/web/irccloud.com/x-hbiggbfdpaeifrll JOIN :#esoteric < 1591176816 71822 :Sgeo!~Sgeo@ool-18b982ad.dyn.optonline.net QUIT :Read error: Connection reset by peer < 1591179048 552677 :rain1!~debian@unaffiliated/rain1 JOIN :#esoteric < 1591180516 910373 :atehwa!atehwa@aulis.sange.fi QUIT :Ping timeout: 256 seconds < 1591180825 211565 :atehwa!atehwa@aulis.sange.fi JOIN :#esoteric < 1591181112 80431 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: https://gist.github.com/int-e/8e606cd6e3eeb2d8b4296cbb21d6515f is the von Neumann neighborhood experiment I did last month, in case you're interested. < 1591181183 45255 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That's a lot of code. < 1591181186 931246 :int-e!~noone@int-e.eu PRIVMSG #esoteric :hmm, those links aren't right, should be anchors < 1591181288 957961 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What was the reason for using assembly and not intrinsics? < 1591181318 78233 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: mainly one less level of indirection < 1591181341 778319 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(I'd have to map the instructions to the intrinsics) < 1591181407 547753 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hm. < 1591181424 378311 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Also I had already written the x86-64 version, so I was already in manual register scheduling mode anyway. < 1591181494 401972 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And yes, it's a lot of code... but it felt like a good level of complexity for a reality check (compilers vs. manually written assembly code) < 1591181543 94839 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And honestly I was surprised to save almost 20%, I expected less. < 1591181613 988708 :int-e!~noone@int-e.eu PRIVMSG #esoteric :The version I actually used in the challenge was the generic one. < 1591181766 159226 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Anyway I think the main thing that kills the SSE2 code is the awkwardness of doing 128 bit shifts. < 1591182049 659166 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What's the awkwardness? < 1591182056 468793 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I guess AVX would enable higher throughput, but that interacts awkwardly with cycle-finding. < 1591182071 957162 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, is it shifting between lanes or something? < 1591182133 784994 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1591182153 165712 :int-e!~noone@int-e.eu PRIVMSG #esoteric :The awkwardness is that the full register moves, vpsrldq and so on, work in 8bit multiples. This compares infavorably to the x86_64 code which has shld and shrd... < 1591182169 453915 :S_Gautam!uid286066@gateway/web/irccloud.com/x-hbiggbfdpaeifrll QUIT :Quit: Connection closed for inactivity < 1591182242 5783 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 246 seconds < 1591182242 433962 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 NICK :Lord_of_Life < 1591182303 457480 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, that's surprising. < 1591182305 388883 :int-e!~noone@int-e.eu PRIVMSG #esoteric :So basically >> 10 becomes *3* shift instructions and a bitwise or, instead of a shld and another shl. And the code is shifting a lot. < 1591182353 382517 :int-e!~noone@int-e.eu PRIVMSG #esoteric :uhm, "full register moves" was "full register shifts" in my brain < 1591182367 958366 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(I guess moving is a kind of shifting?) < 1591182472 890681 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It's been a long time since I wrote SIMD code. < 1591182508 101947 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Yeah this is a bad example for that anyway. < 1591182549 667420 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I mainly did it because while I expected it to be slower than the x86_64 version, I wasn't entirely sure (and it is quite a close call anyway). < 1591182593 281429 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I guess a full register shift is a pretty unusual SIMD operation. < 1591182602 369540 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Obviously this is just my best effort... I may have missed some optimization opportunity.) < 1591182623 398612 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Yeah, the "M" doesn't really apply here. < 1591182703 372297 :int-e!~noone@int-e.eu PRIVMSG #esoteric :The most satisfying idea here was the use of a sorting network. < 1591182784 285304 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(The alternative would've been a combination of two half-adders (to combine pairs of inputs) and two full adders) < 1591182859 635115 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I like sorting networks. < 1591182873 916546 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Perhaps sorting networks are this. < 1591182982 512863 :int-e!~noone@int-e.eu PRIVMSG #esoteric :In any case, it was a fun experiment. < 1591183036 692835 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And I managed to be cited twice in http://www.research.ibm.com/haifa/ponderthis/solutions/May2020.html :) < 1591183181 236772 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: Anyway, I would expect the code to be the same speed or maybe a cycle slower with intrinsics. < 1591183206 675912 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Sure, I'm not suggesting it would make for faster code than writing assembly yourself. < 1591183238 684962 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(the compiler's register allocation still kind of sucks... they get away with this because the CPUs make register-register moves mostly free) < 1591183257 290501 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :POn < 1591183258 475937 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :DER < 1591183267 492558 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover QUIT :Ping timeout: 260 seconds < 1591183273 213568 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: right < 1591183293 743333 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Are register allocators just doomed to be pretty good but not that good? < 1591183297 363946 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(there's no good way of making a capital n at 3 pixel width) < 1591183323 472885 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: Good question, I don't know, because compilers and CPUs are co-evolving. < 1591183324 660424 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :If you're willing to give your optimizer more time, can it just solve the register allocation problem optimally, or is that intractable? < 1591183361 641098 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Of course there's also that. < 1591183397 492009 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I would be happy to give my compiler more time in super-optimized mode (and I want it to be much faster in regular mode). < 1591183452 708743 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Also, can you reuse these things between runs? For example a CDCL solver can probably remember its best learned clauses for the next run (and check whether whether they're still valid), maybe you can reuse that work in something like this? < 1591183468 528194 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Which is actually an argument in favor of better register allocation in compilers... because we are increasingly focussing on energy efficiency and all that register renaming machinery isn't working for free. < 1591183468 637232 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Of course you could do regular incremental building too but maybe something deeper would be worthwhile, I don't know. < 1591183519 695818 :int-e!~noone@int-e.eu PRIVMSG #esoteric :reusing optimizations, sure, that's "just" a software engineering problem. < 1591183553 7417 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, I mean reusing learned clauses between *different* instances that are similar. < 1591183577 430863 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :If you spend a lot of time running the optimizer on one function and then make a small change, maybe you can get an optimal solution quickly. < 1591183581 875011 :int-e!~noone@int-e.eu PRIVMSG #esoteric :There are superoptimizers, and I expect that reusing previous optimized code is pretty important there. < 1591183592 347611 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Though now that I write it out it seems a little implausible that it would work that well. < 1591183616 380025 :int-e!~noone@int-e.eu PRIVMSG #esoteric :But meh. I'm speculating instead of researching. < 1591183625 596379 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What are you researching? < 1591183663 953490 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I mean this concrete question. Superoptimizers *exist*, surely people have written about them and how they're used as well. < 1591183700 710253 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Though somehow, the only context in which I've actually seen them is the Ethereum VM... :-/) < 1591183738 620534 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I bet GPU vendors also have their own superoptimizers... which they run whenever a new game is released, distributing the results with a driver update. < 1591183785 391445 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 JOIN :#esoteric < 1591183821 497444 :int-e!~noone@int-e.eu PRIVMSG #esoteric :`? device < 1591183824 28953 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :A device is a browser session. Please verify your device. < 1591183831 290474 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Still ^ annoys me every single time. < 1591183847 350634 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :huh? < 1591183851 367405 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover JOIN :#esoteric < 1591183858 438005 :int-e!~noone@int-e.eu PRIVMSG #esoteric :myname: 'Subject: [GitHub] Please verify your device' < 1591183870 132644 :int-e!~noone@int-e.eu PRIVMSG #esoteric :No, it's the same PC every single time. < 1591183877 801730 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :ah < 1591183908 327121 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Well, maybe a couple of them.) < 1591184187 38086 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Ah I can't spell "comparator". < 1591184986 986170 :cpressey!~cpressey@88.144.69.212 QUIT :Quit: Lunch. < 1591185007 992965 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :i,i Gentlemen, it's a nuclear [browser session]. < 1591185549 532088 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: That's all well and good, but have you verified it? < 1591185565 835869 :int-e!~noone@int-e.eu PRIVMSG #esoteric :We just can't let devices go unverified. < 1591185617 481569 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :int-e: GPU drivers special-casing shaders of specific games compiled with superoptimizers? What a dismal perspective. < 1591185662 249629 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: I think it's the reality. < 1591185681 231234 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Sounds plausible. < 1591185697 244427 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(No proof. But what else would they do in those driver updates that speed up newly released games, and why else would those drivers be so ridiculously big?) < 1591185737 416258 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And super-optimizers are just more plausible than *people* working on manually optimizing those shaders all day. < 1591185904 27054 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Actually I can't even say that it's *bad*. < 1591185963 933102 :int-e!~noone@int-e.eu PRIVMSG #esoteric :nVidia or AMD spending a couple of days of server farm time for the benefit of all the players of a game sounds like a pretty good deal. < 1591186071 32891 :int-e!~noone@int-e.eu PRIVMSG #esoteric :So all I can potentially complain about is wasted bandwidth... < 1591186637 209107 :int-e!~noone@int-e.eu PRIVMSG #esoteric :What is a 0' (or O') oracle in computability theory? < 1591186718 938339 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I tried Google and it gave me loads of < 1591186734 389911 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Ignore that. < 1591186759 452135 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I tried Google but forgot my Google 101, namely adding the field of interest as a keyword. < 1591186790 81886 :int-e!~noone@int-e.eu PRIVMSG #esoteric :The answer is here: https://en.wikipedia.org/wiki/Turing_jump#Examples < 1591186925 744125 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Without the field of interest it gave me loads of database related hits, I wonder why ;-) < 1591187030 726819 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Duckduckgo tried to be smart and turned out to be useless. Query: 0' oracle computability --> Answer: Did you mean 0' oracle compatibility? plus a lot of hits for that... < 1591187055 441490 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(putting "computability" in quotes helped, but it didn't even suggest that!) < 1591187198 308612 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :int-e: For the benefit of players of AAA games, anyway. I'd rather have nVidia and AMD give developers the tools to make their programs fast themselves. < 1591187654 493827 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover QUIT :Ping timeout: 240 seconds < 1591188059 225888 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Yeah there's that. < 1591188583 10014 :int-e!~noone@int-e.eu PRIVMSG #esoteric :It's kind of unavoidable... in the gamer market segment, framerates in AAA titles is the main competetive factor. < 1591188669 812875 :int-e!~noone@int-e.eu PRIVMSG #esoteric :So whether it's GPU vendors lending expertise to the game developers, or optimizing shaders post release... something like that is bound to happen. And they may consider their internal tools not polished enough or too trade-secreted to be shared more widely. < 1591188724 887590 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, Intel doesn't send you CPU driver updates that recompile the code for popular programs to be faster. < 1591188733 41472 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean, uh, I mean, I sure *hope* they don't do that. < 1591188755 388850 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Who's Intel again. (From a GPU market perspective, I mean) < 1591188801 694106 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean for CPU programs, not GPU. < 1591188804 208182 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And only half kidding anyway. < 1591188817 941968 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Ah. < 1591188908 991523 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Intel isn't in the right position for that I suppose. It would be funny if VMs (e.g. Javascript ones) would be doing that for commonly distributed scripts. < 1591188918 210015 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(/programs) < 1591188956 666140 :FireFly!znc@freenode/staff/firefly PRIVMSG #esoteric :Kind of surprised they aren't, tbh < 1591188960 314143 :int-e!~noone@int-e.eu PRIVMSG #esoteric :But one key difference here is that the machine code isn't a trade secret. < 1591188962 182250 :sprocklem!~sprocklem@unaffiliated/sprocklem QUIT :Ping timeout: 256 seconds < 1591188974 223281 :FireFly!znc@freenode/staff/firefly PRIVMSG #esoteric :(well, browsers, and targetting key popular libraries) < 1591188987 483445 :int-e!~noone@int-e.eu PRIVMSG #esoteric :FireFly: same here, actually < 1591189036 391344 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And who knows, maybe it's done and I just don't know. < 1591189043 362422 :FireFly!znc@freenode/staff/firefly PRIVMSG #esoteric :ACTION nods < 1591189053 41661 :sprocklem!~sprocklem@unaffiliated/sprocklem JOIN :#esoteric < 1591189058 387450 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, it would be nice if GPU machine code wasn't a trade secret. < 1591189069 838352 :int-e!~noone@int-e.eu PRIVMSG #esoteric :OTOH maybe there are just too many versions of each Javascript library for this to be attractive. < 1591189446 942157 :ArthurStrong!~ArthurStr@128-124-137-220.mobile.vf-ua.net QUIT :Ping timeout: 272 seconds > 1591191267 74898 PRIVMSG #esoteric :14[[07Thue14]]4 10 02https://esolangs.org/w/index.php?diff=73188&oldid=73110 5* 03Yoel 5* (+0) 10/* External resources */ < 1591191656 926967 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 JOIN :#esoteric < 1591192999 612844 :cpressey!~cpressey@88.144.69.212 JOIN :#esoteric < 1591193153 784595 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c QUIT :Remote host closed the connection < 1591194274 354643 :S_Gautam!uid286066@gateway/web/irccloud.com/x-gzmjqylnfivfgtto JOIN :#esoteric > 1591195529 615809 PRIVMSG #esoteric :14[[07BF-ASM:814]]4 M10 02https://esolangs.org/w/index.php?diff=73189&oldid=73186 5* 03DmilkaSTD 5* (-36) 10I dont think this is a brainfuck derivative < 1591195791 93399 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c JOIN :#esoteric > 1591196630 506420 PRIVMSG #esoteric :14[[07BF-ASM:814]]4 10 02https://esolangs.org/w/index.php?diff=73190&oldid=73189 5* 03DmilkaSTD 5* (+534) 10 < 1591196746 762566 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 QUIT :Remote host closed the connection < 1591196875 541751 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :I noticed the "2020" category looked empty so I refreshed it. There are already 149 pages in it. There were 200 in all of 2019. > 1591196986 632007 PRIVMSG #esoteric :14[[07BF-ASM:814]]4 M10 02https://esolangs.org/w/index.php?diff=73191&oldid=73190 5* 03DmilkaSTD 5* (+40) 10Comments in the code > 1591197077 169473 PRIVMSG #esoteric :14[[07BF-ASM:814]]4 M10 02https://esolangs.org/w/index.php?diff=73192&oldid=73191 5* 03DmilkaSTD 5* (+1) 10invisible change > 1591197323 923944 PRIVMSG #esoteric :14[[07User:DmilkaSTD14]]4 10 02https://esolangs.org/w/index.php?diff=73193&oldid=73120 5* 03DmilkaSTD 5* (+18) 10 > 1591197484 235582 PRIVMSG #esoteric :14[[07BF-ASM:814]]4 10 02https://esolangs.org/w/index.php?diff=73194&oldid=73192 5* 03DmilkaSTD 5* (+204) 10 > 1591197967 184126 PRIVMSG #esoteric :14[[07BF-ASM:814]]4 M10 02https://esolangs.org/w/index.php?diff=73195&oldid=73194 5* 03DmilkaSTD 5* (+113) 10uhm, useful. > 1591198047 360514 PRIVMSG #esoteric :14[[07Asvi14]]4 10 02https://esolangs.org/w/index.php?diff=73196&oldid=72239 5* 03DmilkaSTD 5* (+114) 10 < 1591198075 998098 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: https://esolangs.org/wiki/Special:Log?type=create shows page creations, in case you want to know who created the most pages < 1591198143 129187 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :What's our stance on languages that claim to be Turing-complete (i.e. they've been put in the "Turing complete" category, they have "Computational class: Turing complete" in their infobox) without even including a proof sketch? < 1591198163 311653 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :I mean, it's not obvious to me that https://esolangs.org/wiki/(1)_Grace_sent_you_a_message is TC < 1591198168 434599 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :It's plausible, but not obvious < 1591198223 223789 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: sometimes the Turing-completness is obvious. if it's not obvious and the page says nothing about it, not even a reference to some external doc, then I think we can remove the category and modify the text. < 1591198400 409755 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: https://esolangs.org/wiki/(1)_Grace_sent_you_a_message is turing-complete because you can translate 1.1 to it by doing one replacement step of the 1.1 program in a brainfuck program, set the resource limit such that that brainfuck program never overflows, and just make the two brainfuck programs in the Grace program identical < 1591198429 674794 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :The problem is that it might be uncomputable < 1591198459 830522 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I'm not sure if it is < 1591198525 584963 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :Heck, it's definitely more than TC. It computes recursively enumerable languages I think. < 1591198563 27439 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :We should probably categorize it [[Category:Nondeterministic]] [[Category:Uncomputable]] < 1591198625 857887 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :And my draft proof above is wrong, because Grace is defined such that the iteration of the brainfuck programs leads to an output that must match the input > 1591198855 161268 PRIVMSG #esoteric :14[[07Talk:(1) Grace sent you a message14]]4 10 02https://esolangs.org/w/index.php?diff=73197&oldid=72830 5* 03Chris Pressey 5* (+307) 10 < 1591199080 711352 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :I can see how it could be TC if you use one of the LBA's to compute a single step of a TM and then iterate -- in fact I don't see why you'd need two LBAs, just iterating one should work. < 1591199321 944387 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: you need two TMs because the iterated process has to generate all possible inputs of Grace, so it has to be nondeterministic in some way < 1591199361 58529 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c QUIT :Remote host closed the connection < 1591199376 124038 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: the run of a Grace program always starts from an empty state, then modifies it iteratively by nondet transforming it to some possible output < 1591199400 345963 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :then the program becomes accepting if the state can reach the input of the Grace program < 1591199443 40951 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :this sadly makes IO for Grace ugly, because it can't support just any input format, you need to put some marker to distinguish inputs from strings you use as intermediate states < 1591199491 608310 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but if you use an input convention where, say, all inputs to Grace must start with a 1, and the intermediate states start with a 0, then you can compute any recursively enumerable set with a Grace program < 1591199495 417051 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :tbh I don't see how you get any of that from the article < 1591199524 411380 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :which part? < 1591199612 297830 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the paragraph above the last one tells how the program transforms a string, starting from the empty string, with brainfuck black boxes, by feeding the string as an input to bf and replacing it with the output > 1591199647 206918 PRIVMSG #esoteric :14[[07User:PythonshellDebugwindow/GUI Display Language14]]4 M10 02https://esolangs.org/w/index.php?diff=73198&oldid=73165 5* 03PythonshellDebugwindow 5* (+89) 10 < 1591199666 56899 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :"the iterated process has to generate all possible inputs of Grace, so it has to be nondeterministic" -- no it doesn't? < 1591199668 524593 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :then the last paragraph describes the IO convention of Grace, that is, that the Grace input must match the last state, and that this is nondeterministic in the sense that the Grace machine accepts an input string if there's any accepting path to it < 1591199679 8585 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :You can deterministically generate all possible inputs? < 1591199696 147793 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: hmm ok, that's true, you could do that too < 1591199710 347402 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :because there's no special mark for which state is final < 1591199741 462370 :cpressey!~cpressey@88.144.69.212 PRIVMSG #esoteric :anyway if Hakerh400 is as bored as their user log makes them look hopefully they'll be happy to explain why they claim it's TC < 1591199855 932582 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: still, for Turing-completeness, all you'd need is to pick one fixed non-empty string as a conventional input, and then compile your program to brainfuck iterations such that it outputs that special string if your program halts < 1591199876 257707 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :then the Grace program will accept the special string iff your original program halts < 1591199898 325506 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and yes, for that much, one brainfuck program is enough < 1591199907 834306 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the second brainfuck program just makes it more powerful than TC < 1591199940 542394 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :though not more powerful for any one fixed input, admittedly < 1591200044 733721 :cpressey!~cpressey@88.144.69.212 QUIT :Quit: WeeChat 1.9.1 > 1591200107 914534 PRIVMSG #esoteric :14[[07User:PythonshellDebugwindow/GUI Display Language14]]4 M10 02https://esolangs.org/w/index.php?diff=73199&oldid=73198 5* 03PythonshellDebugwindow 5* (+80) 10/* ArrayLib.guidl */ < 1591200598 936782 :wib_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 QUIT :Quit: Connection closed < 1591201380 779349 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c JOIN :#esoteric > 1591201489 539128 PRIVMSG #esoteric :14[[07User:PythonshellDebugwindow/GUI Display Language14]]4 M10 02https://esolangs.org/w/index.php?diff=73200&oldid=73199 5* 03PythonshellDebugwindow 5* (+225) 10/* Standard libraries */ > 1591201553 768755 PRIVMSG #esoteric :14[[07User:PythonshellDebugwindow/GUI Display Language14]]4 M10 02https://esolangs.org/w/index.php?diff=73201&oldid=73200 5* 03PythonshellDebugwindow 5* (+45) 10/* Other */ < 1591201806 237079 :Sgeo!~Sgeo@ool-18b982ad.dyn.optonline.net JOIN :#esoteric > 1591201833 1913 PRIVMSG #esoteric :14[[07Special:Log/newusers14]]4 create10 02 5* 03Shaman 5* 10New user account > 1591201850 478791 PRIVMSG #esoteric :14[[07User:PythonshellDebugwindow/GUI Display Language14]]4 M10 02https://esolangs.org/w/index.php?diff=73202&oldid=73201 5* 03PythonshellDebugwindow 5* (+201) 10/* ArrayLib.guidl */ < 1591202052 12774 :S_Gautam!uid286066@gateway/web/irccloud.com/x-gzmjqylnfivfgtto QUIT :Quit: Connection closed for inactivity > 1591202363 604737 PRIVMSG #esoteric :14[[07Esolang:Introduce yourself14]]4 10 02https://esolangs.org/w/index.php?diff=73203&oldid=73171 5* 03Shaman 5* (+262) 10 < 1591202939 358112 :HQ!~Funk@unaffiliated/funk JOIN :#esoteric < 1591203580 465511 :zseri!~zseri@ytrizja.de JOIN :#esoteric < 1591204346 100391 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu JOIN :#esoteric < 1591205517 611407 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c QUIT :Remote host closed the connection < 1591205662 966371 :imode!~linear@unaffiliated/imode JOIN :#esoteric < 1591205914 5162 :HQ!~Funk@unaffiliated/funk QUIT :Quit: I probably fell asleep again < 1591206475 156037 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c JOIN :#esoteric < 1591207878 96199 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 JOIN :#esoteric > 1591207992 475988 PRIVMSG #esoteric :14[[07Brainfuck implementations14]]4 M10 02https://esolangs.org/w/index.php?diff=73204&oldid=73172 5* 03PythonshellDebugwindow 5* (+29) 10/* Implementations including Hardware */ cat > 1591208879 872704 PRIVMSG #esoteric :14[[07User:PythonshellDebugwindow/GUI Display Language14]]4 10 02https://esolangs.org/w/index.php?diff=73205&oldid=73202 5* 03PythonshellDebugwindow 5* (+603) 10/* Brainfuck interpreter */ < 1591209642 49713 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 QUIT :Ping timeout: 246 seconds < 1591210093 955108 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1591210105 678779 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: Grace is definitely computable, it allows the 0 case to enter an infinite loop < 1591210120 887507 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :thus it can be computed simply by running all possible computations interleaved and seeing if any of them output 1 < 1591210152 579637 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: hmm... < 1591210174 818876 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :so it's exactly turing-complete? < 1591210184 339207 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I guess you're right < 1591210211 407400 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :for a TCness proof, I think it's sufficient for one program simply to create longer and longer internal states, and the other program to do all the real work < 1591210242 474627 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: that would work too, yes > 1591210258 177714 PRIVMSG #esoteric :14[[07Special:Log/newusers14]]4 create10 02 5* 03WiseMan 5* 10New user account < 1591210307 479421 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think a much more interesting question is whether deterministic Grace is TC, I'm not convinced that it isn't < 1591210324 389741 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :though in a string replacement language like 1.1 or Thue, any one rule will increase the string length only by a constant term, so you can directly represent such a rule in Grace < 1591210335 311450 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(i.e. with only one program rather than two) < 1591210343 66926 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it clearly would be if not for the linear boundedness < 1591210366 239433 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: yes, it's still TC if you want a fixed Grace input, say always give "1" as the input. < 1591210377 196628 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: you can translate 1.1 into it, or a deterministic version of Thue < 1591210389 134619 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :where the brainfuck program always executes the first rule that matches > 1591210393 896076 PRIVMSG #esoteric :14[[07Surtic14]]4 M10 02https://esolangs.org/w/index.php?diff=73206&oldid=72919 5* 03Digital Hunter 5* (-35) 10 < 1591210395 476431 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ah right, yes, or any language which works by transforming an internal state one step at a time < 1591210405 682409 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :1.1 is a bit more complicated because you also need to store the finite control state in the string < 1591210408 683543 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :where each individual step grows the string only finitely < 1591210424 12647 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :actually my first thought for this was MiniMAX < 1591210442 111871 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but that's awkward because you need a weird representation of the instruction pointer and old instruction pointer < 1591210482 272195 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: would a version of Thue that always does the first replacement rule that applies work? < 1591210487 343378 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, that made me think of an entirely different problem: what's the minimum number of word-pairs needed for the Post Correspondence Problem to be TC? < 1591210502 222891 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: yes < 1591210512 92895 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :is there a name for that deterministic Thue or something close? < 1591210523 757321 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :perhaps even an article on esolangs.org? < 1591210527 26531 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :y'all talkin about thue. < 1591210539 11670 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :it's not 1.1, because 1.1 has a finite control state, so it's actually much harder to translate < 1591210548 218450 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :deterministic Thues have been talked about quite a bit, but there are two different ways to determinize Thue < 1591210556 709800 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :one is to always take the first rule, one is to always take the first position in the program < 1591210559 183155 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :one is prioritization of rules and... < 1591210561 53446 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :yeah. < 1591210562 869348 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: yeah < 1591210572 256691 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :in this case either one would work < 1591210575 55123 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :come to think of it, 2C would work great for this < 1591210578 793575 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :because you can translate either one to brainfuck < 1591210590 514900 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :as one step of 2C is a finite state machine < 1591210607 356313 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :I've been working on a "brainfuck" to Thue translator since yesterday, funny this comes up now. < 1591210640 887542 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :how many tape cells do you need to convert arbitrary finite state machines to BF? my guess is 2, possibly 1 is enough < 1591210667 827847 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(IIRC, 3 is enough to be TC if you have bignum cells, but obviously an FSM doesn't need bignums) < 1591210691 195057 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :1 would be enough, wouldn't it? < 1591210704 41427 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :or would you need 2, one for state and one for input. < 1591210724 187193 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh, I didn't even think of putting the state in a cell < 1591210741 483397 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I was thinking you use the IP to record the state, in which the hard part is whether or not you can escape from brackets without forgetting what you're doing < 1591210760 506058 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you probably need 2 cells simply because you can't escape a loop unless the current cell is 0 < 1591210773 54527 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :meaning that in 1-cell brainfuck, you can't remember anything across a ] < 1591210793 689995 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :yeah. < 1591210803 302551 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: there's also one-tape thue, in which the input, every string state, every search string, and every replacement string must contain exactly one "1" < 1591210809 618465 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :which works like a two-stack machine < 1591210812 143396 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :a conditional-goto version of BF would only need one cell to implement an FSM, and it only needs that cell to be able to read the input < 1591210828 334244 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and you can check that it's locally deterministic < 1591210853 462270 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, this implies that structured programming can actually make languages less powerful sometimes < 1591210855 306033 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :cpressey: ^ < 1591210886 362039 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :yeah, that's kind of why I got off of it. < 1591210888 176179 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :basically you can translate a two-stack finite control machine to a Thue program that is intrinsically determinisitic, that's what I wanted to say < 1591210891 936769 :imode!~linear@unaffiliated/imode PRIVMSG #esoteric :it's too restrictive. < 1591210960 244041 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: https://esolangs.org/logs/2020-06-01.html#lZb < 1591211038 770184 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :also, do prolog variants really use different atoms as the head of a non-empty list? < 1591211113 128807 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yes they do. SWI prolog uses '[|]' as the head, gnu prolog uses '.' as the head < 1591211199 255161 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :This is like one of those weird BSD vs Sysv differences, isn't it? < 1591211321 221565 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :they also represent the empty list differently < 1591211558 785997 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :apparently in gnu prolog, the atom '[]' is the empty list, and '.'(Car,Cdr) is a non-empty list; in swi prolog, '[|]'(Car,Cdr) is a non-empty list, and the empty list isn't even an atom (wtf) > 1591211602 618229 PRIVMSG #esoteric :14[[07Jumper14]]4 M10 02https://esolangs.org/w/index.php?diff=73207&oldid=65648 5* 03PythonshellDebugwindow 5* (-4) 10/* RAM */ < 1591211769 678123 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think traditionally in Prolog, '.' is the name of the cons operator < 1591211780 836971 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: that's what I thought too < 1591211796 598009 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess it's a good name because it's one of the few things that never parses as an operator naturally < 1591211804 166906 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so it's unlikely to clash with a user-defined operator < 1591211821 670798 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yes, nor does it parse as an atom < 1591211837 202721 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` swipl -qg 'display(/(A,B)).' < 1591211839 316323 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :​/(_380,_382) < 1591211844 706067 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` swipl -qg 'display(A/B).' < 1591211845 722522 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :​/(_380,_382) < 1591211850 243905 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ah, OK < 1591211862 486683 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :for a moment I though it was making a distinction and got very confused < 1591211874 261811 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :GNU prolog uses infix notation when displaying operators, I think < 1591211874 731342 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :the parser makes a distinction < 1591211884 696874 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg 'true(A,B)' < 1591211886 916003 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :ERROR: -g true(A,B): catch/3: Undefined procedure: true/2 \ ERROR: However, there are definitions for: \ ERROR: true/0 < 1591211892 768265 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg 'L=true(A,B)' < 1591211893 861756 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :No output. < 1591211908 429743 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg 'L=true(A,B).' < 1591211909 341673 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :No output. < 1591211914 308572 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg 'L=true(A,B), display(L).' < 1591211914 308611 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that's not a distinction between infix and prefix < 1591211915 276289 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :true(_380,_382) < 1591211921 509406 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg '(A true B), display(L).' < 1591211922 597813 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :ERROR: -g (A true B), display(L).: Syntax error: Operator expected \ ERROR: (A \ ERROR: ** here ** \ ERROR: true B), display(L). < 1591211930 525875 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :"true" isn't an operator < 1591211934 747942 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yeah < 1591211947 645470 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think you can make things into operators in Prolog but forget how < 1591211962 703771 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :``` swipl -qg 'display(!(A,B)).' < 1591211963 791427 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :​!(_380,_382) < 1591211970 374944 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh wow, I'm kind-of surprised that worked < 1591211978 503965 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :``` swipl -qg '!(x,y).' < 1591211979 388085 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :ERROR: -g !(x,y).: catch/3: Undefined procedure: !/2 \ ERROR: However, there are definitions for: \ ERROR: !/0 < 1591211988 72730 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :looks like you can call a predicate ! if you want to < 1591211994 434086 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :presumably only if it has argumetns < 1591212031 365916 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :or maybe ! is implemented as a predicate that looks back along the call stack somehow? < 1591212048 219347 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I think you could, but the above output doesn't really prove that < 1591212054 709925 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :most Prologs have a cut equivalent of setjmp/longjmp, but doing it without the setjmp is impressive < 1591212072 531149 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I know the above output doesn't prove it, but it does make it more likely < 1591212247 698593 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :anyway, prolog doesn't have vararg predicates, so when it tries to execute a !, it can look up the atom together with its arity, and then find a very special magic builtin < 1591212268 782669 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :similarly for 2-arity ; < 1591212289 637826 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you could use assert in a loop to emulate a varag predicate, but you'd have to stop generating at some maximum number < 1591212294 675898 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :it might even represent !/0 and !/2 with different words in the head internally < 1591212305 435144 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also ; doesn't have to be magical, you can implement it in standard Prolog < 1591212313 199193 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's , that's magical < 1591212327 303607 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :; is sort of magical because of how it behaves on the right side of a -> < 1591212340 711886 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I thought that was just operator precedenc < 1591212343 734343 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :*precedence < 1591212345 291641 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :no < 1591212380 127366 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg '(true->R=0;R=1), R.' < 1591212380 957228 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :ERROR: -g (true->R=0;R=1), R.: ''/1: Type error: `callable' expected, found `0' (an integer) < 1591212387 851310 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg '(true->R=0;R=1), display(R).' < 1591212389 62216 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :0 < 1591212398 219898 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -qg '(true->R=0;R=1)=..L, display(L).' < 1591212399 205359 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :​[;,->(true,=(_380,0)),=(_380,1)] < 1591212404 455575 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :hmm maybe it is < 1591212425 559307 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ok sorry, I'm wrong < 1591212430 276444 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :maybe it's -> that's magical then? < 1591212436 482717 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :one of them has to be magical < 1591212464 862586 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :``` swipl -gq 'assertz((or(X,Y) :- X)), assertz((or(X,Y) :- Y)), (true->or(R=0,R=1)), display(R).' < 1591212465 832220 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :0 < 1591212478 841408 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :``` swipl -gq 'assertz((or(X,Y) :- X)), assertz((or(X,Y) :- Y)), (true->or(R=0,R=1)), display(R), fail.' < 1591212479 895193 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :01 < 1591212486 851534 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :``` swipl -gq 'assertz((or(X,Y) :- X)), assertz((or(X,Y) :- Y)), (true->R=0;R=1), display(R), fail.' < 1591212488 407463 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :0 < 1591212492 118636 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :OK, ; is magical < 1591212504 678323 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :or, wait, no < 1591212509 152360 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :``` swipl -gq 'assertz((or(X,Y) :- X)), assertz((or(X,Y) :- Y)), (true->(R=0;R=1)), display(R), fail.' < 1591212510 122038 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :01 < 1591212517 707457 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes, nonmagical, it's just operator precedence < 1591212540 930191 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :hmm wait, let me test this < 1591212546 596637 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :actually I'm not sure , is magical, I just can't see a way to define it except in terms of itself < 1591212572 460534 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :``` swipl -gq 'assertz((or(X,Y) :- X)), assertz((or(X,Y) :- Y)), or((true->R=0),R=1), display(R), fail.' < 1591212573 429799 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :01 < 1591212581 155383 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -gq 'assertz((or(X,Y) :- X)), assertz((or(X,Y) :- Y)), ((true->R=0);R=1), display(R), fail.' < 1591212582 125793 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :0 < 1591212589 875354 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` swipl -gq 'assertz((or(X,Y) :- X)), assertz((or(X,Y) :- Y)), or((true->R=0),R=1), display(R), fail.' < 1591212590 846019 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :01 < 1591212592 998328 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :^ < 1591212599 962645 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes, we both thought of that test at once < 1591212600 561446 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yeah, you tested the same thing < 1591212606 638380 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that does look somewhat magical < 1591212634 682520 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I guess it might still not be magical, if say (A;B) just checks whether the head of A is -> < 1591212644 664043 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :a normal predicate could do that < 1591212648 541880 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I tend not to use -> anyway because it makes my head hurt, this shows why < 1591212668 681918 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :you know you can translate -> to ! right? < 1591212679 852319 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'd find that much clearer < 1591212701 833399 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although doesn't the translation need an auxiliary predicate sometimes to control the scope of !? < 1591212710 389939 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yes, it needs an auxiliary predicate < 1591212909 154460 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I wonder why Lisp is as popular as it is, given the existence of Prolog < 1591212916 425361 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I would have thought Prolog was just a strictly better Lisp < 1591212924 910522 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that said, neither language is all that popular < 1591213107 602829 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: well the good news is, olvashato compiles conditionals or pattern matching to -> in general, but the current version optimizes them to ! when they're at the top level of a predicate < 1591213118 955266 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Meh, Prolog has an awful execution model. < 1591213140 337206 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you don't actually have to make use of the backtracking < 1591213143 514914 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :so it will make your head hurt less, and that was specifically the goal, though not for your head in particular, but for the head of the professor that read the homework prolog program generated with it < 1591213164 342860 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :however, I think the version that I used to submit the homework didn't have that optimization yet < 1591213181 421246 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ais523: but backtracking is the default, you have to actively fight it if you don't want it < 1591213187 434852 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :or maybe it did have it, it just didn't have the similar optimization for the sml output? I dunno < 1591213192 674611 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :int-e: only if you use nondeterministic predicates < 1591213216 302963 :int-e!~noone@int-e.eu PRIVMSG #esoteric :and the syntax isn't all that great either. < 1591213218 277849 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if all your predicates are deteriministic the evaluation order is the same as Lisp < 1591213218 531256 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ACTION shrugs < 1591213245 894822 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I don't like Prolog. Lisp at least has meta-programming going for it. < 1591213273 899667 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the point is that Prolog can be meta-programmed in exactly the same way < 1591213281 809701 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: no, prolog is not a strictly better list, because if you write a function composition expression like (a (b c)) in lisp, where a and b are functions, then in List you have to make up a variable name for the temporary, like (b(C, O), a(O, ...)) where O is the temporary variable that never appears in lisp < 1591213298 330261 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: oh yes, that's a good point < 1591213309 890946 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: also lisp has convenient first class functions, mutable bindings, mutable vectors, and some more convenient builtins < 1591213325 214062 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Lisp's main problem is one of attitude. The so called "common" lisp is huge, complex, badly documented unless you already know Lisp, and completely ignores the fact that there's a plethora of languages outside of Lisp that you might want to bind to.) < 1591213337 145598 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :at one point I was considering a Prolog variant where predicates had a "return value", so writing A=f(B,C) in the variant would be equivalent to f(B,C,A) in actual Prolog > 1591213341 876114 PRIVMSG #esoteric :14[[07Jumplang14]]4 N10 02https://esolangs.org/w/index.php?oldid=73208 5* 03PythonshellDebugwindow 5* (+893) 10Created page with "'''Jumplang''' is a [[brainfuck]]-derived esolang by [[User:PythonshellDebugwindow]] designed to be easier to implement in another esolang than normal brainfuck. ==Difference..." < 1591213342 89255 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: mutable stuff is specifically hard to translate to prolog, whereas lisps have builtins for it (though they may differ between common lisp and scheme) < 1591213358 715103 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: that prolog variant exists, I think it's called Mozart or something < 1591213377 354588 :int-e!~noone@int-e.eu PRIVMSG #esoteric :But Lisp at least seemed worth using to me at some point until I ran into those problems. Prolog... never appealed to me except as a declarative-ish programming curiosity for simple backtracking solvers. < 1591213401 349200 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c QUIT :Remote host closed the connection < 1591213458 431141 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :actually, I think I realised what I prefer about deterministic Prolog compared to Lisp: the quoting mechanisms are so much nicer < 1591213485 494661 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that's probably a consequence of return values not existing, though < 1591213485 639069 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: apparently it's called Oz language and the implementation is called Mozart, just to confuse people < 1591213508 930382 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, maybe Prolog could do with some sort of scoped assert < 1591213515 62588 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: but the point is, you don't need quoting mechanisms if you program lisp like a sane procedural language < 1591213525 147545 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Prolog does mutability just fine, its issue is that it's all global < 1591213540 793045 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: yes you do, e.g. when setting a variable < 1591213565 35470 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if you do (set a b) then Lisp will attempt to evaluate both a and b, in order to generate the name of the variable it's setting and the value it's setting it to separately < 1591213567 17261 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: not for scheme, no. you might need it in lesser lisp variants, but those have other drawbacks too < 1591213580 454324 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: no, that's common lisp weirdness, we don't do that in scheme at all < 1591213606 246344 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: well in Common Lisp you normally use a macro setq that's just set with the first argument quoted < 1591213609 846334 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :you don't want to be able to access just any local variable by name, would you? < 1591213614 651126 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c JOIN :#esoteric < 1591213625 295006 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :that just makes optimization much harder than it should be < 1591213629 129533 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :scheme doesn't have that feature < 1591213641 629224 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :you can still access *global* variables by name, and mutate them too, if you want < 1591213647 227137 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :like in perl or python < 1591213649 142229 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :but not locals < 1591213660 759744 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :so the normal way to set a variable is (set! variablename value) < 1591213679 809245 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ah, I always assumed that was analogous to setq, but maybe not? < 1591213682 689968 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and that's the only builtin that can mutate a variable, though there are some other builtin macros < 1591213697 569404 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: it's analogous to setq, but there's no set that can modify a local variable by name < 1591213704 213412 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's magical because the name is being interpreted differently depending on the scope in which set! appears < 1591213725 793465 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :whereas setq is literally just adding an apostrophe < 1591213738 190584 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: you could say that, it's one of the few built-in expression types, but you can define a macro that does exactly that, < 1591213817 151661 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :fwiw, many Lisp programmers prefer to use recursion rather than mutable variables; I wonder if that's related to issues of identifier scoping? < 1591213831 838331 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although maybe not, when I program OCaml I often choose to use recursion rather than mutable variables < 1591213838 74859 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :define is way more magical (it's still implemented as a macro, but it's implemented like -> can be implemented in prolog, where lambda looks in its body to find defines) < 1591213866 503283 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(variables in OCaml are like variables in Algol; the variable /itself/ is immutable once assigned, but the variable's /contents/ can be mutable) < 1591213891 563423 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's like writing int *const x = malloc(sizeof(int)) in C < 1591213894 637707 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: do they really? there are very convenient macros to encapsulate that kind of recursion with immutable variables changing from one iteration to another, and I think lisp programmers would mostly use those, just like Haskell programmers < 1591213922 713619 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: I mean, instead of writing a loop that repeatedly mutates some variables < 1591213945 193835 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: well yes then. but I think Haskell and SML programmers do that too. < 1591213956 330829 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you write a function that's the loop body, give those variables as arguments, and have it "mutate" the variables from one loop iteration to the next by calling itself with differnet arguments < 1591213961 488878 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :lisp just makes the mutating version easier than in SML and much easier than in Haskell < 1591213979 188663 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :heck, while we're there, you do that in prolog too, don't you? < 1591213981 33962 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the mutating version is pretty easy in OCaml given the sugar that exists < 1591213992 831235 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: I do it in anything that's remotely functional, I may be unusual though < 1591214002 213043 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yes, it's pretty easy in scheme too because of macros that sugar it < 1591214016 254615 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` ocaml --help < 1591214017 162217 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :​/hackenv/bin/`: line 5: ocaml: command not found < 1591214021 429796 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :aww < 1591214037 34908 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although it'd be quite complex to hook up to HackEso as it is < 1591214042 752275 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's not a very commandliney language < 1591214060 415964 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :we don't have gnu prolog either < 1591214073 762992 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` ghc --version < 1591214074 518015 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :bash: ghc: command not found < 1591214079 651675 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :``` ghci --version < 1591214080 446541 :HackEso!~h@unaffiliated/fizzie/bot/hackeso PRIVMSG #esoteric :bash: ghci: command not found < 1591214093 605752 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :we can't have everything in HackEso < 1591214097 392384 :craigo!~craigo@144.136.206.168 JOIN :#esoteric < 1591214106 438055 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :it already does a lot < 1591214267 39889 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so this is what an imperative loop looks like in OCaml: https://tio.run/##HYtLDsIwDAX3OcVjx2cBLQskUHuVCBGHWnJt1EZqbx/cLt@8Gfu8R6lVqGBFh4ky2gdYwzKwEA4rejRIFuD/swPnjY2W0Lp@QxlIN3L1TTLvxRl3XNC8vPlNrCWSJmGl41x8fqPl6NTNU0imVOsf < 1591214308 147086 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I like how clear the use/mention distinction is in OCaml, it distinguishes very clearly between a variable and its value < 1591214321 121764 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: ok, then that does seem to be stronger syntactic sugar than what scheme has < 1591214337 283475 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :oh wait, it has a reference < 1591214342 581529 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :then that is a mutating loop < 1591214349 961179 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes, that's a mutating loop < 1591214354 79336 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :not sugar for a recursive loop < 1591214354 761008 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :you can do that in scheme or SML then < 1591214361 590168 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I like the ALGOL 68/BLISS style but I'm not sure whether it's too complicated in practice. < 1591214404 753665 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :SML has mutable cells, the same kind that OCaml has; scheme doesn't directly have them, but you can implement them easily as library functions based on either mutable bindings, or on mutable conses, or on mutable vectors. < 1591214406 414728 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Especially if you have a whole bunch of !s in one line, for a bunch of mutable variable dereference and array indexing and so on. < 1591214433 78736 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :but for a simple loop like that, you wouldn't do that < 1591214444 848211 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: how does the sugar for a recursive loop like that work in OCaml? < 1591214446 638298 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Probably you can implement mutable cells in Scheme in terms of continuations if you want to be all schemey about it. < 1591214465 753431 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :shachaf: eek < 1591214493 342226 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :oh right, I needn't ask that, that's what Rosetta Code is forr < 1591214509 414799 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: here's the recursive version: https://tio.run/##HYtLDsIwDAX3OcVjx2cBLQskUHuVCBGHWnJt1EZqbx/cLt@8Gfu8R6lVqGBFh4ky2gdYwzKwEA4rejRIFuD/swPnjY2W0Lp@QxlIN3L1TTLvxRl3XNC8vPlNrCWSJmGl41x8fqPl6NTNU0imVOsf < 1591214546 538106 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Another thing is that if you convert something from an immutable to a mutable variable, you need to change x to !x everywhere in your code. < 1591214552 609748 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :or an alternative version: https://tio.run/##RYsxDsIwEAR7v2LLBISAUFAg@IqFnDOc5JxRYiQX/N1sCsQ1u7Oay@E@pdaSFMwSEHBFfFsoms19cMTuhq5nq2tbrUpDI2PKIwbCAeUpxmFPlLQI6wYnbPmt5vC716xWvNiY1KRbCvHhc/RcUfvLXwyoTo0xnFv7Ag < 1591214553 770351 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It admittedly has different semantics. < 1591214554 201691 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: ^ I don't think that's the url you wanted to paste < 1591214556 13949 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :the first one < 1591214579 856198 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh yes, I pasted the same link twice < 1591214590 761376 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :just use the second one, then, the match is more idiomatic than an if/then anyway < 1591214641 984165 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I think you could translate that latter one to SML or haskell in a straightforward way; in lisp you'd have to use an if or some other conditional construct rather than pattern guards < 1591214674 786995 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you can do it using if just fine, but OCaml's if syntax is ugly if the inside of the if is nontrivial < 1591214675 258323 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :oh yeah, we now have egel as our esoteric functional language with pattern guards too < 1591214735 539459 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I would be surprised if there were constructs in OCaml that didn't translate easily to SML, apart from the object-oriented stuff and maybe polymorphic variants < 1591214817 543501 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :they belong to the same language family, after all > 1591214906 877601 PRIVMSG #esoteric :14[[07Talk:Esoteric coder14]]4 N10 02https://esolangs.org/w/index.php?oldid=73209 5* 03DmilkaSTD 5* (+118) 10Created page with "== Uhm.. == Esocoder sounds better --~~~~" < 1591214913 12364 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: yes, they share a common ancestor < 1591214935 923214 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and yes, I should eventually get back to the egel language and install a version with a working wrapper to HackEso < 1591214944 925087 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :because it's such a conveniently useful esolang < 1591215005 560873 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :polymorphic variants are great, incidentally, they make some programming tasks (e.g. writing compilers for which intermediate representations have different constructs legal at different points in the compile) much easier < 1591215037 135639 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :that sounds nice. what are they? < 1591215055 590931 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you basically just use enum tags at will, matching only on the tags you expect to be present at that point in the program, and generating only the ones you're supposed to generate < 1591215058 29660 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :are they open variants (like Haskell classes) or closed variants (like Haskell algebraic data types with disjuction)? < 1591215070 794919 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and the compiler statically checks that the producers and consumers match up < 1591215078 165274 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ah, anonymous closed variants then < 1591215083 474773 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes < 1591215103 858271 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :anonymous closed variants where you can reuse the same tags across different variants, perhaps with different types for the associated data < 1591215122 691385 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :can you also typedef specific unions of them, so that you get saner error messages from the typechecker? < 1591215125 316194 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes < 1591215128 347070 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :good < 1591215135 463544 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yes, that sounds like very useful < 1591215167 986076 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :they can be open as well, if you write a match where the last case is _ then the type system takes note of that < 1591215184 742635 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and will let the caller supply you anything < 1591215253 274313 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :in other languages, you have to simulate them in one way or another. you can simulate them with a wrapper to the largest enum type; or, if the related types are in a tree structure (which is common but not universal) with nested enums; or with some crazy magic in Haskell < 1591215258 559193 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I don't remember how the last one works > 1591215262 824899 PRIVMSG #esoteric :14[[07User:Emerald14]]4 10 02https://esolangs.org/w/index.php?diff=73210&oldid=73166 5* 03Emerald 5* (+2) 10Fixed heading size < 1591215313 911065 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :oh yeah, also with defining each type as separate enums and using compiler magic to write implicit cast functions from one to the other < 1591215335 755336 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the OCaml implementation isn't quite as good as it could be, occasionally you need to explicitly write casts < 1591215344 317013 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm not entirely sure what causes that to happen < 1591215361 666038 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I was just thinking of these because I have an interpreter that may require such variant types where there are two related enums that overlap but neither is a subset of the other < 1591215409 497522 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: do you still have to write explicit casts if the involved enum types are closed and there are no free type paramters? < 1591215436 548615 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: it's confusing, I haven't figured out the exact trigger, it doesn't happen very often < 1591215457 587009 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think it's something like, if you use the same variable in two different contexts, and one context allows more variants than the other < 1591215461 258959 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you need to write a cast < 1591215462 228666 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :no wait, that's not what I wanted to ask < 1591215469 899815 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :because the type inference algorithm is expecting each variable to have only one type < 1591215495 473860 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: do you still have to write explicit casts if the involved enum types are closed and there are no free type paramters, and the content of every constructor is exactly the same type everywhere (as opposed to a constructor appearing with different types, one of which is a subtype of another)? < 1591215515 229681 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so if x can be either `A or `B, you can use it as a parameter to a function expecting a [`A | `B], or as a parameter to a function expecting a [`A | `B | `C] < 1591215526 541022 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but if you try to use it with both, you need to write a cast or the type inference algorithm gets confused < 1591215556 506618 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think that's the only case that needs a cast, though < 1591215557 581096 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: how do you use the same variable as two different ones of those if the variable is immutable? < 1591215583 84119 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :b_jonas: well the variable is either a `A or a `B, right? < 1591215593 928564 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so any function which accepts `A and `B as possible tags should be able to accept it < 1591215681 377908 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :or, hmm, this works: https://tio.run/##fcqxDsIwDIThnae4sR0YgLECCXiQFBU7WAoOal2pQ989xIi523@nLw@PdyolkYFxBs86mGRFf8X@ggNW9Devo9fd6wTRnfu47f9qqUoYNs4Ee9FPUprIXSWfUdQC6TOJUjNZnTFkDvVtGEvbdpskOinlCw < 1591215690 920878 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: is that even if you explicitly type the variable to an enum that can be `A or `B, as opposed to some case where the type inference just can't derive that because of confusing loops? < 1591215696 286431 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so either the bug with casting has been fixed, or the cause is more complex < 1591215738 738090 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :here's how it looks with an explicit type: https://tio.run/##fYsxDsIwDEV3TvHHdmCAbiCQgGMglKLiBEvBqVpX6tC7hxgxd3v2fy91z0/MOZLC4wQ/SaecBO0F2zN2WNBejfZGN6MGLBvzw7r/t2YccC@rDY9SsIcOE0Hf9KsojmRN0fuBRR3JK7JQNWo5g0velW/lMdf1cVUJpuT8BQ < 1591215768 797882 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: wow, that looks like it has way too few parenthesis for something like this < 1591215820 916838 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :just for you, the same program with no parentheses: https://tio.run/##jYtBCsJADEX3PcW/gAt1p1hQjyEylZqMgTEjbQpd9O7jRFyLu5f893J/e6ZSEhkYB/CkvUlWdEesWqyxoDs5bZzOTluINu7H3/7XmrHDpa4@XGshDBsmgj3oU1EayZuqc5WXFqMNojFkDqLmj1e9LZDekyjtm/iPVsob < 1591215826 454684 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I'll assume the cause is more complex, and it involves a case where the type inference algorithm can't easily see that the function can get only an `A or `B < 1591215831 84603 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if you remove the explict type from x it has no brackets either! < 1591215848 954914 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :heh < 1591215860 746853 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(|>) is the equivalent of flip ($) < 1591215865 88415 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :from Haskell > 1591215869 400385 PRIVMSG #esoteric :14[[07Jumplang14]]4 M10 02https://esolangs.org/w/index.php?diff=73211&oldid=73208 5* 03PythonshellDebugwindow 5* (+190) 10 < 1591215888 418041 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and is probably the more readable argument order < 1591215906 490500 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm not sure if OCaml even has ($) in its standard library, but it's easy enough to implement > 1591215934 463011 PRIVMSG #esoteric :14[[07User:Emerald14]]4 10 02https://esolangs.org/w/index.php?diff=73212&oldid=73210 5* 03Emerald 5* (+319) 10Persuade < 1591215936 742091 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :OCaml operator names get a bit weird sometimes, because for mental parseability, all operators that start with the same first character have the same precedence < 1591215943 683654 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: the (general) identity function was added to the rust standard library only like a year ago < 1591215946 289855 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :e.g. |> has the same precedence as || < 1591215947 5870 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and it's useful < 1591215961 609083 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and yes, it's also trivial to implement < 1591215965 109518 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :what type does it have? < 1591215974 81383 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: it's a generic function actually, so no single type < 1591215975 419765 :rain1!~debian@unaffiliated/rain1 QUIT :Quit: leaving < 1591215976 310011 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(in Rust, it's obvious in most languages) < 1591215990 530455 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :right, I was trying to figure out how you typed it in Rust < 1591216001 707811 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :it's like fn identity(v: T) -> T { v } < 1591216006 860710 :int-e!~noone@int-e.eu PRIVMSG #esoteric :> let f = \case True -> 1; False -> 2 in map f [False ..] -- does this have too few parentheses as well? < 1591216009 400108 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric : [2,1] < 1591216009 669557 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ah right, of course < 1591216016 375903 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :so the specific type for any one T is fn(T) -> T < 1591216032 675751 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :the generic one doesn't have a type and can't be used as a first-class value < 1591216054 304895 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :sort of like in C++ until perhaps lately when they made them usable as a class value with a templated overloaded () operator < 1591216070 359615 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess you could set T to dyn Any, but that isn't all that useful a type < 1591216094 486543 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :… would identity even work on dyn Any, or would you need a box? < 1591216107 930313 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: I don't think it would work, or at least it wouldn't be useful < 1591216141 880061 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: one of the reasons why the identity function is useful is that it lets you write type ascriptions, sort of like (expression :: SomeSpecificType) in haskell < 1591216151 439751 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ah, that isn't what I was guessing at all > 1591216159 262257 PRIVMSG #esoteric :14[[07User talk:Emerald14]]4 10 02https://esolangs.org/w/index.php?diff=73213&oldid=73170 5* 03Emerald 5* (+205) 10/* Tips For Making a Golfing Language */ < 1591216163 986646 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :so you write them as identity(expression) in rust < 1591216168 916498 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I thought you used it as a parameter to a higher-order function < 1591216172 525446 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and no, you don't write them as that < 1591216177 399726 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the < in that is the less-than operator < 1591216182 177747 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :yeah < 1591216189 151962 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :identity::::(expression) < 1591216193 496952 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :identity::(expression) < 1591216196 690641 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :not sure on the last :: < 1591216203 251255 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :no, I think it's a :: only on the left < 1591216211 959926 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and I think the right one is an error < 1591216226 116548 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes; there /is/ a context where you need the :: on the right too, but it isn't that context < 1591216232 199928 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and yes, you can also use it as a parameter to a higher-order function, which is the official argument for why it's in the stdlib now < 1591216285 36543 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :the same thing is useful in C++ too by the way, where it's not in the standard library yet, but I've used it for years in my previous work < 1591216298 394920 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I call it ret_cast but I don't think that's a standard name < 1591216329 808072 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's very similar to static_cast, I guess < 1591216340 718344 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the only difference is that you can take its address, I think? < 1591216352 187011 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :no, that's not the difference < 1591216357 49173 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :thus letting you use it as a function argument even without giving it an argument < 1591216370 864726 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :the difference is that it doesn't do certain explicit conversions that static_cast would do without a warning < 1591216385 209360 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh, such as long to int? < 1591216392 695477 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :no, long to int is the one I want to do without a warning < 1591216401 642358 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :numeric conversion is my primary use for ret_cast < 1591216406 674621 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and that's why it has a rather long definition, < 1591216417 917681 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I kind-of assumed static_cast would warn for the weirder conversions < 1591216418 896278 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :because you need to suppress warnings about implicit number conversion in that one function < 1591216420 311324 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but maybe it doesn't < 1591216427 554282 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :void* to intptr_t, for example < 1591216442 949370 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess there has to be a way to show that's intentional < 1591216451 46337 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I think static_cast will call a one-argument constructor marked as explicit, without a warning < 1591216457 474085 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :that's the main problem < 1591216466 186667 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :but the detailed rules are so complicated that I can't remember them < 1591216468 484214 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :C++ is weird < 1591216481 473455 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :so I gave up and just use ret_cast whenever I don't want such a surprise < 1591216612 351212 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :the definition is: #if _MSC_VER \ #pragma warning(push) \ #pragma warning(disable: 4244 4267) \ #endif \ template inline dest_type ret_cast(src_type &&x) { return std::forward(x); } \ #if _MSC_VER \ #pragma warning(pop) \ #endif < 1591216646 521062 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and I think there's some magic syntax to suppress the same warnings in gcc/clang too, but it's not the same as in MSVC and I haven't looked up what it is < 1591216672 217080 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :thinking about it, void* to intptr_t should be reinterpret_cast, really < 1591216684 321403 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but maybe there are machines in which the bits actually change > 1591216695 119549 PRIVMSG #esoteric :14[[07ReThue14]]4 10 02https://esolangs.org/w/index.php?diff=73214&oldid=50430 5* 03DmilkaSTD 5* (+24) 10 < 1591216713 474942 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :what are the two warnings being disabled? < 1591216716 435488 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: I think it's a reinterpret_cast, not a static_cast, and the bits can change in a reinterpret_cast, but again I'm not sure about the rules < 1591216738 313134 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: uh, something about implicit numeric conversion, but I'm not sure what, I'd have to look it up in the MSVC docs < 1591216755 423054 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh, I see, you're explicitly turning off long-to-int style warnings < 1591216773 23261 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I don't know enough C++ to properly follow the moves here < 1591216785 418311 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244?view=vs-2019 < 1591216797 747663 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if you use ret_cast on a variable, does its value get moved? I'm guessing no, because prefix && acts only on rvalues? < 1591216852 882505 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also wow is that site badly organized < 1591216860 644858 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you can't guess the URL for any particular warning < 1591216868 165976 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: admittedly that's for an old verions of MSVC I think < 1591216873 120403 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :but yes < 1591216879 298960 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :because it depends on some arbitrary grouping that you wouldn't be able to learn without first finding the page for the warning < 1591216957 266204 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ais523: if you use it on a non-const varible of say type int, then it gets instantiated with src_type being int &, in which case the magic && in the argument list disappears because there's a & before it, and the function takes int & as a type, so it takes a non-const reference to the variable and copies ity > 1591216992 716787 PRIVMSG #esoteric :14[[07Language list14]]4 M10 02https://esolangs.org/w/index.php?diff=73215&oldid=73150 5* 03PythonshellDebugwindow 5* (+15) 10/* J */ + [[Jumplang]] < 1591217014 246625 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :whereas if you call it on an rvalue of type int, say ret_cast 1591217107 592947 PRIVMSG #esoteric :14[[07User:PythonshellDebugwindow14]]4 M10 02https://esolangs.org/w/index.php?diff=73216&oldid=73162 5* 03PythonshellDebugwindow 5* (+99) 10/* Languages */ < 1591217457 627509 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :also, today I read some of the (easy parts of) the source code of ImageMagick, to figure out what the interface of a certain public API function in MagickWand is, since it wasn't properly documented < 1591217558 442426 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :luckily the command line ImageMagick programs are implemented (mostly) in terms of MagickWand (the high-level C api of ImageMagick), so the source code for that has a place where it calls this function, and I could find out what it expects as the second argument from there < 1591217567 572280 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Which function? < 1591217603 760843 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :(And, what version of ImageMagick?) < 1591217630 960899 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :MagickSetImageChannelMask and ImageMagick 7 < 1591217647 755897 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :this corresponds to the -channel setting in command line < 1591217682 391463 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :the second argument is a bitmask for which enum values are defined in a header < 1591217795 691382 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and I need this for the -combine operation, which takes multiple grayscale images and converts them to a single image with those used as different channels, but you have to tell what those channels are, eg. RGB, RGBA, IA, CYMK, etc, and you use the -channel option for that < 1591217815 104000 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and then you have to restore that setting with +channel, which calls the same function with some default argument < 1591217964 237656 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c QUIT :Remote host closed the connection < 1591218147 89706 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 JOIN :#esoteric < 1591218154 842499 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Do you know if the latest version of ImageMagick supports YCoCg, and if it supports farbfeld, and if it supports pictures with custom separations? < 1591218266 11756 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :zzo38: I don't know if it supports YCoCg specifically. It has some formats that read YUV and convert it to RGB immediately, and the inverse for writing. It probably doesn't have too much support for keeping an image as YUV, but you can probably still do it just have to be careful with all operations that assume RGB or CYMK. < 1591218298 249440 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and I don't know about custom separations, but I think ImageMagick 7 specifically improved about handling custom channels or color spaces compared to ImageMagick 6 < 1591218304 876206 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :I don't know the details though < 1591218316 271549 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Yes, I thought I read that too, but I don't know the details either. < 1591218413 464670 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :it says there's a "YCbCr" and "YCbCrA" format, I don't know if that's the same as YCoCg; and there's a YUV format for YUV with subsampling > 1591218539 397474 PRIVMSG #esoteric :14[[07Jumplang14]]4 10 02https://esolangs.org/w/index.php?diff=73217&oldid=73211 5* 03Emerald 5* (+726) 10Commands < 1591218750 790951 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :I think it isn't the same as YCoCg. < 1591218877 131940 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :zzo38: anyway, I mostly used ffmpeg to read or write YUV format, but not too much, mostly ffmpeg just did conversion to/from YUV formats implicitly because that's how jpeg and and many compressed video formats store colors < 1591218987 61085 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Although conversion between YCoCg and RGB is lossless anyways, so simply if you want to use file formats that support YCoCg, there is no need for ImageMagick to support them directly, unless you want to directly manipulate the data in YCoCg format, such as to separate them. < 1591219059 211222 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :zzo38: also I used ffmpeg to read uncompressed bayer mosaic frames, which is what digital color camera sensors actually capture, and high-end cameras can send you the raw uncompressed thing (if you can take the bandwidth) > 1591219062 481037 PRIVMSG #esoteric :14[[07Jumplang14]]4 M10 02https://esolangs.org/w/index.php?diff=73218&oldid=73217 5* 03PythonshellDebugwindow 5* (+50) 10/* Commands */ clarify < 1591219086 380075 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :ffmpeg can read them and debayer them < 1591219099 516550 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and then I encode that to a lossy compressed video > 1591219103 707323 PRIVMSG #esoteric :14[[07Jumplang14]]4 M10 02https://esolangs.org/w/index.php?diff=73219&oldid=73218 5* 03PythonshellDebugwindow 5* (+36) 10/* Differences from brainfuck */ < 1591219117 978991 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :O, OK. I have not worked with that, although it does seem something you may want to deal with. > 1591219127 993428 PRIVMSG #esoteric :14[[07Jumplang14]]4 M10 02https://esolangs.org/w/index.php?diff=73220&oldid=73219 5* 03PythonshellDebugwindow 5* (+63) 10/* Commands */ < 1591219138 612978 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :But I think the raw camera format is TIFF, so requires parsing all of the TIFF stuff? < 1591219198 608881 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :zzo38: there are various brand-specific raw camera formats, some of which are TIFF, and most of them are compressed to some amount for photo cameras, because compression is useful; the uncompressed bayer was for a video camera, < 1591219237 560622 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :there the hard part is getting the uncompressed raw video stream (in a high enough frame rate that we need) through the network, and we did set up a network that has bandwidth for that, < 1591219294 711361 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :and if you do have such a bandwidth then the compression would just hurt. this was over ethernet, but some other camera models send similar uncompressed bayer frames through USB instead < 1591219895 779479 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c JOIN :#esoteric < 1591221808 289560 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Other possibility might be to use a kind of digital video connection, although I think that they are not designed for use with Bayer frames. Still, you could perhaps use Digi-RGB with monochrome or pre-interpolated data, and then if they are pre-interpolated (which must be done in a reversible way, if this is to be done), to reverse this operation on the receiver. < 1591221935 738807 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :zzo38: we don't need to reverse the debayering. we want to debayer it anyway, transform it to some YUV format with chroma subsampling, and compress it. ffmpeg can do all those steps for me. < 1591221971 586866 :b_jonas!~x@catv-176-63-12-40.catv.broadband.hu PRIVMSG #esoteric :all this is for digital cameras; feed from analog cameras is worse because it's often interlaced odd/even rows < 1591222065 127395 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :Yes, you usually don't need to reverse the debayering. But I don't know if someone will sometimes need it. < 1591222611 287320 :tromp!~tromp@2a02:a210:ca3:2800:1803:9b3f:b921:fc5c QUIT :Remote host closed the connection > 1591222817 218842 PRIVMSG #esoteric :14[[07Talk:Jumplang14]]4 N10 02https://esolangs.org/w/index.php?oldid=73221 5* 03Emerald 5* (+1016) 10/* Turing-Completeness */ new section > 1591222853 23662 PRIVMSG #esoteric :14[[07Talk:Jumplang14]]4 M10 02https://esolangs.org/w/index.php?diff=73222&oldid=73221 5* 03Emerald 5* (+25) 10/* Turing-Completeness */ > 1591223100 248650 PRIVMSG #esoteric :14[[07Jumplang14]]4 10 02https://esolangs.org/w/index.php?diff=73223&oldid=73220 5* 03Emerald 5* (+18) 10/* Turing-completeness */ < 1591224425 579637 :ArthurStrong!~ArthurStr@128-124-137-220.mobile.vf-ua.net JOIN :#esoteric < 1591224809 504759 :zzo38!~zzo38@host-24-207-48-139.public.eastlink.ca PRIVMSG #esoteric :I looked at the documentation of GNU troff, which describes the font file format it uses. It lacks some features that TeX has, and has some features that TeX doesn't have. Such as, the only ligatures it supports are "ff", "fi", "fl", "ffi", and "ffl"; the metrics includes not only italic correction but also left italic correction and subscript correction. < 1591225488 599374 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1591225523 740308 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 258 seconds < 1591225571 369047 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 NICK :Lord_of_Life < 1591225663 484008 :TheLie!~TheLie@2a02:8106:215:3300:844d:dece:9bd4:fbb2 QUIT :Remote host closed the connection < 1591226234 128172 :zseri!~zseri@ytrizja.de QUIT :Quit: zseri > 1591226314 50012 PRIVMSG #esoteric :14[[07Jumplang14]]4 M10 02https://esolangs.org/w/index.php?diff=73224&oldid=73223 5* 03PythonshellDebugwindow 5* (-64) 10 > 1591227462 273506 PRIVMSG #esoteric :14[[07(1) Grace sent you a message14]]4 10 02https://esolangs.org/w/index.php?diff=73225&oldid=72821 5* 03Hakerh400 5* (+558) 10/* Computational class */ > 1591227576 899922 PRIVMSG #esoteric :14[[07Talk:(1) Grace sent you a message14]]4 10 02https://esolangs.org/w/index.php?diff=73226&oldid=73197 5* 03Hakerh400 5* (+112) 10/* Computational class */