< 1564531246 928705 :sparr!~sparr@2604:a880:800:10::103:f001 QUIT :Changing host < 1564531246 928866 :sparr!~sparr@pdpc/supporter/active/sparr JOIN :#esoteric > 1564531303 126172 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64820&oldid=64819 5* 03Hanzlu 5* (+145) 10 < 1564531834 193493 :arseniiv!~arseniiv@136.169.210.134 QUIT :Ping timeout: 246 seconds > 1564532158 626480 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64821&oldid=64820 5* 03Hanzlu 5* (+143) 10 < 1564532844 809225 :xkapastel!uid17782@gateway/web/irccloud.com/x-oxcbrfeijqeimtfw QUIT :Quit: Connection closed for inactivity < 1564533949 909927 :xkapastel!uid17782@gateway/web/irccloud.com/x-nqrzagbbhoiugeug JOIN :#esoteric < 1564535487 927925 :FreeFull!~freefull@defocus/sausage-lover JOIN :#esoteric < 1564538635 234005 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Awrighty, I think I've decided how I want to implement Forth for my weird PC project. < 1564538643 736972 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Uh, I've decided *some* of it, anyway. < 1564538654 953228 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Here's what my keyboard handler looks like currently... < 1564538660 559934 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :29 DB B8 10 01 8E D8 B8 00 B8 8E C0 29 C0 E4 60 D7 B4 07 AB B0 20 E6 20 CF < 1564538699 823629 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Which is to say: < 1564538704 36200 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :sub bx, bx; mov ax, 0110; mov ds, ax; mov ax, b800; mov es, ax; sub ax, ax; in al, 60; xlat; mov ah, 07; stosw; mov al, 20; out 20, al; iret < 1564538719 457497 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :The new keyboard handler is going to be: < 1564538720 466091 :adu_!~ajr@pool-173-73-86-191.washdc.fios.verizon.net JOIN :#esoteric < 1564538726 459773 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :b800 set-es 60 input-byte 500 xlat 700 or 404 load store-es 404 load inc inc 404 store 20 20 output-byte iret < 1564538730 18812 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Which is obviously so much more readable. < 1564538743 221192 :adu!~ajr@pool-173-73-86-191.washdc.fios.verizon.net QUIT :Ping timeout: 246 seconds < 1564538743 511818 :adu_!~ajr@pool-173-73-86-191.washdc.fios.verizon.net NICK :adu < 1564538767 218737 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :And which compiles to 107 bytes instead of the 25 bytes of the original. :D < 1564538798 742745 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Now I just merely have to write the compiler. < 1564539071 907690 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :how do you know it's 107 bytes if you haven't written the compiler yet? < 1564539078 25364 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Which is obviously so easy. < 1564539110 232461 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Well, the compiler is just going to take each of those words, look up the corresponding piece of assembly code, and write that assembly code into the compiled output. < 1564539139 680990 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :I can do the same by hand. < 1564539399 907226 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :I see < 1564539439 450989 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :sounds like you need an optimizing compiler :) < 1564539983 431229 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Well, you know what they say. < 1564539986 971514 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :[...] optimization is [...] evil. < 1564540194 179244 :int-e!~noone@int-e.eu PRIVMSG #esoteric :tswett[m]: wah, you have to restore those segment registers! < 1564540215 374140 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(and the other ones as well) < 1564540277 926111 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Oh yeah, that's probably a good idea. < 1564540412 637315 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :I guess I'm assuming that no code will be running when an interrupt happens. < 1564540423 869493 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :Which... is an assumption that may prove to be false. :D < 1564540495 829510 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Oh the interrupt handler will be fine... only other programs will suffer ;) < 1564540685 480928 :tswett[m]!tswettmatr@gateway/shell/matrix.org/x-jsgngwyifopekixx PRIVMSG #esoteric :I have another interrupt handler that ends with "eb fe", which is a jump to itself. < 1564541135 436384 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I wrote a little assembler the other day, it's great. < 1564541168 947878 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I probably won't bother with multipass assembly to get the smallest instruction sizes. < 1564544068 496773 :nfd9001!~nfd9001@2601:602:8500:2443:c13b:e67f:162:2f48 QUIT :Ping timeout: 276 seconds < 1564546643 653593 :xkapastel!uid17782@gateway/web/irccloud.com/x-nqrzagbbhoiugeug QUIT :Quit: Connection closed for inactivity < 1564546737 752508 :FreeFull!~freefull@defocus/sausage-lover QUIT : > 1564548434 125377 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64822&oldid=64813 5* 03A 5* (+1498) 10/* The implementation */ > 1564548540 454927 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64823&oldid=64822 5* 03A 5* (-1363) 10/* The implementation */ < 1564548678 785183 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :w22 < 1564548688 775664 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :`quote < 1564548689 615155 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :526) Second Life is like... real life, modelled by people who've READ about real life, you know, in books. < 1564548696 22166 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :`quote < 1564548696 617245 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :1199) oerjan: the original purpose was to make a language in which I write ugly source code, and it's compiled to readable standard ml and readable prolog code; but I sort of ran out of time and the readable part got dropped so now the compiled code is even more ugly than the original < 1564548755 4632 :Melvar!~melvar@dslb-188-106-184-179.188.106.pools.vodafone-ip.de QUIT :Quit: WeeChat 2.4 < 1564548813 197620 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Are there uses for the REX byte without any of W,R,X,B? < 1564548815 526247 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Just 0x40 > 1564549672 654761 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64824&oldid=64823 5* 03A 5* (+0) 10/* The implementation */ < 1564549696 909404 :doesthiswork!~doesthisw@98.125.182.9 QUIT :Ping timeout: 258 seconds > 1564549697 659735 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64825&oldid=64824 5* 03A 5* (+2) 10/* What Mains Numbers? */ > 1564549869 476302 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64826&oldid=64825 5* 03A 5* (+33) 10/* The implementation */ < 1564550371 878695 :Melvar!~melvar@dslb-188-106-184-179.188.106.pools.vodafone-ip.de JOIN :#esoteric > 1564550919 869604 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64827&oldid=64826 5* 03A 5* (-1) 10/* The implementation */ > 1564551104 316145 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64828&oldid=64827 5* 03A 5* (+0) 10/* The implementation */ < 1564551985 209323 :Sgeo__!~Sgeo@ool-18b98455.dyn.optonline.net JOIN :#esoteric < 1564552168 383122 :Sgeo_!~Sgeo@ool-18b98455.dyn.optonline.net QUIT :Ping timeout: 244 seconds < 1564556248 407269 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :`` doag quotes | grep 'standard definition' < 1564556250 575419 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :9233:2016-10-11 addquote (btw, "q = 1-p" should be the standard definition of q, IMO) < 1564556252 389133 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I added that? > 1564556343 870403 PRIVMSG #esoteric :14[[07Pxem14]]4 10 02https://esolangs.org/w/index.php?diff=64829&oldid=64735 5* 03YamTokTpaFa 5* (+27) 10/* References */ > 1564556476 700815 PRIVMSG #esoteric :14[[07User:YamTokTpaFa14]]4 10 02https://esolangs.org/w/index.php?diff=64830&oldid=62025 5* 03YamTokTpaFa 5* (+22) 10 > 1564556630 153557 PRIVMSG #esoteric :14[[07User:YamTokTpaFa/sandbox414]]4 N10 02https://esolangs.org/w/index.php?oldid=64831 5* 03YamTokTpaFa 5* (+33) 10Created page with "'''Pxemf'''(Pronunciation: ) is" > 1564556941 945068 PRIVMSG #esoteric :14[[07Talk:ACL14]]4 N10 02https://esolangs.org/w/index.php?oldid=64832 5* 03JonoCode9374 5* (+290) 10Created page with "= Python Interpreter = Is it alright if I make a direct port of the Java interpreter in Python? Because I am unable to access anything that could compile Java, but I do have..." > 1564557024 26802 PRIVMSG #esoteric :14[[07Talk:ACL14]]4 M10 02https://esolangs.org/w/index.php?diff=64833&oldid=64832 5* 03JonoCode9374 5* (+29) 10/* Python Interpreter */ > 1564557131 576072 PRIVMSG #esoteric :14[[07User:JonoCode937414]]4 10 02https://esolangs.org/w/index.php?diff=64834&oldid=63904 5* 03JonoCode9374 5* (+90) 10 > 1564558097 639849 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64835&oldid=64828 5* 03A 5* (+61) 10/* Example programs */ > 1564558105 62348 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64836&oldid=64835 5* 03A 5* (+1) 10/* = Hello, world! program */ < 1564558201 218672 :cpressey!~cpressey@5.133.242.4 JOIN :#esoteric > 1564558309 771802 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64837&oldid=64836 5* 03A 5* (+6) 10/* The implementation */ < 1564558600 254705 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Good morning. It occurs to me that "ghci" is an acronym for "Glasgow Haskell Compiler Interpreter". I approve of this. The world needs more compiler interpreters. > 1564558604 443862 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64838&oldid=64837 5* 03A 5* (+1492) 10No it is, you probably don't know JavaScript. > 1564559112 398098 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64839&oldid=64838 5* 03A 5* (+166) 10/* Infinite loop */ < 1564559724 501483 :int-e!~noone@int-e.eu PRIVMSG #esoteric :hmm, yaci < 1564559823 617727 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Oh. I finally got the etymology of "bison". < 1564559853 277948 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And I wish I didn't. Puns are only good when they're your own ;-) > 1564560032 353450 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64840&oldid=64839 5* 03A 5* (+623) 10/* Infinite loop */ < 1564560147 743158 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 268 seconds > 1564560232 931503 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64841&oldid=64840 5* 03A 5* (+303) 10/* Infinite loop */ < 1564560310 67995 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric > 1564560830 805766 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64842&oldid=64841 5* 03A 5* (+224) 10/* Infinite loop */ I should have explained it further when Ais523 is a JavaScript beginner. (But indeed it is obvious enough.) > 1564560969 564657 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64843&oldid=64842 5* 03A 5* (+35) 10/* Infinite loop */ Minor improvement > 1564561006 260180 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64844&oldid=64843 5* 03A 5* (+29) 10/* Infinite loop */ > 1564561332 251781 PRIVMSG #esoteric :14[[07Talk:ACL14]]4 M10 02https://esolangs.org/w/index.php?diff=64845&oldid=64833 5* 03A 5* (+84) 10Stub reply < 1564561552 521865 :GeekDude!~G33kDude@unaffiliated/g33kdude QUIT :Ping timeout: 272 seconds < 1564561710 830243 :GeekDude!~G33kDude@unaffiliated/g33kdude JOIN :#esoteric < 1564562633 141974 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 JOIN :#esoteric < 1564562922 599809 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :" Are there uses for the REX byte without any of W,R,X,B?" => rarely. you can use them to encode the DIL, SIL, BPL, SPL byte register operands < 1564563158 90302 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hmm, right. < 1564563190 282439 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Those weren't in x86? < 1564563275 636842 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :They aren't in x86_16 or x86_32, but then you rarely need them, you can do almost everything with either the other byte registers or full word operations < 1564563392 175179 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: I miss the one byte inc/dec register operations :P < 1564563399 219968 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I see. Without the rex prefix it encodes the upper half of the [abcd]x registers. < 1564563419 973003 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Bot really. But that's where they stole those prefixes from.) < 1564563427 23934 :int-e!~noone@int-e.eu PRIVMSG #esoteric :*Not < 1564563427 765796 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean [adcb]x < 1564563628 715140 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :So 010x is inc and 011x is dec. < 1564563713 828128 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :And in long mode inc %eax is encoded with... ff? < 1564563745 886215 :int-e!~noone@int-e.eu PRIVMSG #esoteric :presumably < 1564563785 935619 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(I don't know what you mean by 010x and 011x though) < 1564563790 10347 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, which was already inc r/m < 1564563806 130565 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean octal 0100|reg and 0110|reg < 1564563819 753751 :int-e!~noone@int-e.eu PRIVMSG #esoteric :octal. < 1564563828 571542 :int-e!~noone@int-e.eu PRIVMSG #esoteric :right, makes sense < 1564563840 593149 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :octal is the way to go, it's great < 1564563842 62073 :int-e!~noone@int-e.eu PRIVMSG #esoteric :> 0100 -- :-P < 1564563845 822647 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric : 100 < 1564563880 745336 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The mod r/m byte is great. 03xy encodes register x and register y, and so on. < 1564563938 505171 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :0o3xy, if you prefer < 1564563951 798546 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: no < 1564564006 825179 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :or hmm wait < 1564564575 950395 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :maybe it does < 1564565077 245142 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1564565106 301843 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, I wrote my slightly crazy malloc: http://nethack4.org/pastebin/animalloc.tgz < 1564565139 765033 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it compiles to a .so file that you can use with LD_PRELOAD < 1564565193 254999 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I've been trying it on various programs, it seems to work (in particular, a full build+test of C-INTERCAL works, with malloc replacements in all the programs invoked as part of that, including make, gcc, and friends) < 1564565330 508961 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What does it do? < 1564565522 448006 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: nice, let me look < 1564565631 744896 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: it's based around asking the kernel for a huge amount of address space and then using pagefaults for the actual allocation < 1564565677 483064 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it also uses a lock-free algorithm (specifically, a lock-free stack) to make it async-signal safe, because I hate the fact that standard malloc isn't < 1564565718 402663 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :there's also some code in there to fill freed memory with 0xAA, I should probably remove that because this really isn't a malloc about safety < 1564565759 354660 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :OK, updated with that line taken out < 1564565795 874650 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :note that if you try to allocate too much memory and then use it, you'll likely get a segfault, but that's no different from standard mallocs on Linux < 1564565813 162568 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(also, this assumes Linux and a 64-bit processor; it doesn't assume x86_64 specifically, although that's what most people are likely to use) < 1564565870 54356 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: you should probably implement the various aligned allocation functions too, even if by just stubs that abort < 1564565903 190687 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I just realised that while looking at competitors < 1564565913 362533 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you're right, it's important to have the entire set of alloc functions implemented at once < 1564565919 315406 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so that you don't mismatch malloc and free impls < 1564565955 604571 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :see https://www.gnu.org/software/libc/manual/html_node/Replacing-malloc.html#Replacing-malloc > 1564565989 431652 PRIVMSG #esoteric :14[[07User:YamTokTpaFa/sandbox414]]4 10 02https://esolangs.org/w/index.php?diff=64846&oldid=64831 5* 03YamTokTpaFa 5* (+942) 10 < 1564566066 214282 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ooh, "malloc_usable_size" is what that function's called < 1564566067 557272 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :filling with 0xAA can make sense, but make sure to do that only for small allocations, or at least small parts of large allocations, because people can use malloc to allocate huge blocks that will be paged in on demand too < 1564566116 610399 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes, it was limited to blocks of 32768 bytes at most < 1564566120 253699 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but I removed it anyway < 1564566291 653349 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :aligned allocation is another of those messes that we got because everyone added their own incompatible apis, and now we have to support all of them < 1564566313 273493 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :animalloc uses 512-byte alignment for its huge allocation (I didn't want the alignment to be too coarse as that screws up ASLR) < 1564566364 640664 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so I guess the correct way to implement an aligned alloc is to increase the size to the alignment if it's smaller and we have less than 512 bytes of alignment requirement > 1564566373 345725 PRIVMSG #esoteric :14[[07Ruby14]]4 10 02https://esolangs.org/w/index.php?diff=64847&oldid=38207 5* 03YamTokTpaFa 5* (+19) 10 < 1564566373 721563 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf mentioned a few days ago how many different ways you can tell libc to run a function early in the program, before main. that's one of those messes too, because C doesn't have a standard mechanism. < 1564566384 394312 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :or to use the "over-allocate and filter" method if the request is for an alignment larger than 512 bytes < 1564566414 399157 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and for aligned allocation, I'm tempted to add a new api too if I ever make my own malloc: < 1564566546 948914 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, a quick check with a malloc benchmarker is showing that my malloc is both faster than glibc malloc, and also less memory-hungry < 1564566565 779708 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although of course, real-world programs may act in a very different way from a malloc benchmarker < 1564566579 114216 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I'd like a four-argument function void *alloc4(size_t size, size_t alignment, size_t before, size_t after) which allocates a block of legth at least size bytes, aligned to a boundary of alignment bytes (must be a power of two), with at least before bytes readable before the block and at least after bytes readable after the nominal end of the block < 1564566601 175524 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this is most likely because animalloc is completely immune to fragmentation < 1564566631 774491 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: I assume that the readable bytes are allowed to be part of some other allocation, and not necessarily writable < 1564566639 781258 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :yes < 1564566640 475694 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so that they're basically just a "legal overrun"? < 1564566670 578311 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and they can contain administration data used by the malloc implementation itself < 1564566690 723899 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that'd be pretty trivial with animalloc, tbh, as long as your allocation is at least 9 bytes long you have several gigabytes of readable overrun space :-) < 1564566703 609982 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: even backwards? > 1564566749 359744 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64848&oldid=64844 5* 03A 5* (+139) 10 < 1564566750 355031 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :in fact maybe I should make the api even more general, adding an alignment offset too, though that doesn't come up often < 1564566762 634245 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : The function aligned_alloc() is the same as memalign(), except for the added restriction that size should be a multiple of alignment. < 1564566769 384625 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but it doesn't report what error it's supposed to return if it isn't :-( < 1564566777 944716 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: even backwards, that's what the 9-byte minimum is for < 1564566801 932144 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ok < 1564566806 416525 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :because there's 4GiB of address space reserved for objects that are 8 bytes and smaller < 1564566809 452062 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and those come first < 1564566840 758809 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(allocating objects that small is normally a mistake, but there are likely uses for it) > 1564567051 789148 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 M10 02https://esolangs.org/w/index.php?diff=64849&oldid=64848 5* 03A 5* (+1) 10/* = Computational class */ < 1564567103 968025 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ais523: The GHC RTS maps 1TB of address space at startup nowadays, I hear. < 1564567131 173975 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Sometimes I wonder whether disabling overcommit would be better. < 1564567177 832624 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think overcommit should be under the control of the program allocating the memory < 1564567201 589025 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :in the understanding that if a program overcommits willingly, it's signing up to be OOM-killed < 1564567277 222953 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I've been writing a bunch of C code that hardly ever calls malloc. < 1564567279 486294 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It's great. < 1564567334 621899 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: sorry for my connection < 1564567352 973552 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1564567394 482227 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Do you think passing custom allocators to libraries is a plausible thing to do? < 1564567428 233686 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :One thing that I'm a bit skeptical of is that different allocators can have different APIs and usage patterns, it's not malloc and free. < 1564567534 413492 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: sure! in some cases, like for interpreters or haskell runtimes that allocate a lot of small objects with known type (that are either not arrays, or arrays where the actual size has to be known because there are destructors), it's worth to use a library with a sized free, which means the allocation function needn't store the size of the blo < 1564567534 970131 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ck. > 1564567542 211403 PRIVMSG #esoteric :14[[07Pxem14]]4 10 02https://esolangs.org/w/index.php?diff=64850&oldid=64829 5* 03YamTokTpaFa 5* (+14) 10 < 1564567594 983616 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :in this case, you pass the size and alignment of the object to both the allocate and the free function, and it's an UB if you pass a different size or alignment when freeing > 1564567622 753651 PRIVMSG #esoteric :14[[07User:YamTokTpaFa/sandbox414]]4 10 02https://esolangs.org/w/index.php?diff=64851&oldid=64846 5* 03YamTokTpaFa 5* (+794) 10 < 1564567794 516066 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Yes, that would certainly be a better API option. < 1564567836 350375 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But also sometimes you want to allocate in an arena and free all at once, in which case you don't want to call free on each individual allocation even if it's a no-op. < 1564567853 653941 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: animalloc stores the size of the block in the returned pointer :-) > 1564567872 776001 PRIVMSG #esoteric :14[[07Pxem14]]4 10 02https://esolangs.org/w/index.php?diff=64852&oldid=64850 5* 03YamTokTpaFa 5* (+209) 10 < 1564567878 533778 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :plenty of address space, after all, to use some of the bits of the returned pointer to record the size < 1564568315 69333 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That's pretty good. < 1564568389 166531 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this works well because there are only ten allocation sizes used anyway, in terms of distance between returned pointers (the entire space is mapped) < 1564568406 878424 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :err, nine, not ten < 1564568413 579380 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: it might also help to add an explicit -std to the compiler command in the makefile < 1564568473 41681 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :OK, I added -std=gnu11 < 1564568481 477587 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this is hopelessly Linux-specific anyway < 1564568499 812558 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :haven't uploaded yet, am still implementing the remaining functions < 1564568527 54982 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Did you see my fancy gnu11 printf? < 1564568532 50584 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: you could also consider to mprotect all the space you don't use to unreadable, both the large allocations that you make the kernel throw away with MADV_FREE, and the tail part of the spaces for small allocations until first used. that way it's more likely that some pointer mistakes are caught by segfaults. < 1564568539 179843 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :http://slbkbs.org/tmp/fmt.txt < 1564568593 815894 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I don't remember whether this is C11. I think I concluded it wasn't. < 1564568624 5327 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :huh, this thing compiles a few bytes smaller with -O3 than with -Os under clang (gcc's -Os is larger) < 1564568746 249672 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I wonder what the smallest program that's true of is. < 1564568965 964017 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the -Os /code/ is way shorter, so I wonder why the file is larger < 1564569001 309625 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(this relationship is true both stripped and unstripped) < 1564569162 164525 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, that's more interesting. < 1564569221 23725 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :after looking at readelf for a while I figured it out: there's some sort of alignment requirement which causes the -Os output to lose its advantage due to having to pad the code up to the same length as the -O3 output within the .so file < 1564569276 337260 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but the -O3 output inlines a call to an exported function, whereas the -Os output calls the function directly, and that function call creates one additional relocation < 1564569284 831123 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the relocation is in a part of the ELF file that /does/ affect the file length < 1564569334 790195 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :OK, I uploaded the new version < 1564569439 846738 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Dynamic linking is so complicated. < 1564569446 740262 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :And there are hardly any benefits to it. < 1564569481 38012 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :ais523: That's pretty cool. < 1564569497 84932 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : a6f: 48 c7 c0 ff ff ff ff mov $0xffffffffffffffff,%rax ← oh come on, even I can beat that < 1564569523 488408 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :in "outoptimize the compiler" wars, -Os is more fun as a target because it's much more objective as to what code is better than what other code < 1564569537 560382 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : 0: 31 c0 xor %eax,%eax < 1564569538 955645 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : 2: 48 ff c8 dec %rax < 1564569541 987087 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that's my competing program < 1564569562 916689 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I once worked on some code where the structs were 8 bytes so I passed them directly to functions, and I was told that I should be allocating them on the heap and passing pointers to them instead < 1564569576 764819 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Did you see that heap-compacting malloc? < 1564569591 503909 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :admittedly they probably hve different effects on flags but the context doesn't care about the flags < 1564569603 151366 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :https://github.com/plasma-umass/mesh < 1564569635 808223 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :cpressey: many programmers don't have a good intuition about when it's best to pass things by value < 1564569647 754427 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: -Os doesn't always try to produce the smallest code if it's slower < 1564569657 372207 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :you're Just Not Supposed to Do That with a Struct < 1564569689 288016 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: is there an "as small as possible" optimization option? analogously to the "as fast as possible" -Ofast? < 1564569700 884336 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ais523: gcc -Os has a four-byte solution, it seems. < 1564569704 640134 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I don't know, but I don't care. I dno't use the compiler for golf. < 1564569734 576191 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Sign-extended or with 0xff < 1564569739 855805 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(-Ofast isn't standards-compliant) < 1564569750 755740 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :you can try to add __attribute__((cold)) or whatever that is to functions if you want < 1564569869 664106 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :compilers typically don't do much with hot/cold < 1564569891 507987 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: and if you're willing to pay for two instructions where the second one depends on the first one, you can just use an OR instruction with a 8-bit immediate, which would be three bytes long and have a false dependency that the cpu doesn't know is false < 1564569905 927578 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and the normal optimisations for hot don't help much unless you have an entire loop entirely in hot code, which is pretty inappropriate for a malloc < 1564569941 915807 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I do wish the amd64 calling convention wasn't different for values and singleton structs. < 1564569965 463352 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Or is it? I can't remember for sure now. < 1564570027 330803 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :my experience with clang vs. gcc optimisation wars is that gcc knows many more optimisations, but clang is better at working out when to use them < 1564570103 924723 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :gcc sometimes goes a little mad with the optimisation and makes the code slower/longer as a result < 1564570149 427246 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: doesn't it go a little mad only when people pass inappropriate compiler options? < 1564570187 196869 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: well, that's what -O3 is asking for, yes; but I'd be surprised if -O2 could compete < 1564570223 489229 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, something that's been bothering me: there are two encodings of the ret instruction on x86_64; branching /directly/ to the shorter encoding has a huge performance penalty, the longer one doesn't have that issue < 1564570244 631127 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: yes, the optimization manual describes that < 1564570252 552245 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm trying to figure out what sort of insanity would be happening in the hardware to make that happen < 1564570285 870200 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :like, I can understand why branching to a ret might be slow, but why would a repret be any faster? is there a reason not to just use the code underlying repret by default, or whenever there's just been a branch, etc.? < 1564570310 690296 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: the cpu is trying to cache the likely target of jump instructions, for which it stores the address of the jump, but every other jump instruction is at least two bytes long... I don't know the details, but it doesn't seem too strange < 1564570343 478541 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :People use rep ret to avoid that, right? < 1564570349 881929 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I remember reading about this. < 1564570354 60930 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes, rep ret is the recommended long encoding < 1564570361 381533 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :nop ret works too but is slower, for obvious reasons < 1564570423 965143 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(incidentally, you have to use rep rather than the more commonly seen data16 becauses data16 would actually affect the ret instruction and make it pop only 16 bits!) < 1564570589 992391 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ais523: http://repzret.org/p/repzret/ talks about the details of the branch predictor that cause this. < 1564570619 23304 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :another thing that surprised me: I assumed that commands like rep movsd were only worthwhile for small moves, and that bigger more complex code could do a large move faster < 1564570648 542901 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but it's actually the opposite, rep movsd (and particularly rep movsq) has a large setup cost but runs very quickly when it gets going, and thus is only efficient for large moves < 1564570664 307423 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :presumably it's being recompiled into some sort of vector operation behind the scenes < 1564570684 822810 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also, I'm not surprised that there's a blog post about repret, but am surprised that it has its own website < 1564570720 346468 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: the rep movsd thing is complicated, it depends a lot on which cpu brand and core you have < 1564570739 363464 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think whether rep movsd is better or worse than alternatives has changed over the years in different uarchs. < 1564570754 237414 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :you have to look up the details in the optimization manuals and Agner's optimization docs and Agner's memcpy implementation if you want to know the details < 1564570769 167143 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :yeah, what shachaf says < 1564570779 191030 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the optimization guides basically say "don't try to figure it out yourself, the compiler manufacturers know what to do, so memcpy or __builtin_memcpy are the best options for copying things" < 1564570795 602874 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: yes, exactly < 1564570810 189271 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but the opt guides also give assembly source codes for them I think < 1564570823 883640 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Aren't the optimization guides written for compiler manufacturers? < 1564570877 214754 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :AMD's is written for anyone who cares but assumes that compiler manufacturers will be a major audience < 1564570908 676528 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I wonder how important compiler optimizations are. < 1564570921 244428 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :some of them are pretty important < 1564570933 43497 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :like storing things in registers rather than memory < 1564570965 23831 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :nowadays people typically forget that that's an optimisation, but on -O0 most compilers will use registers only for the course of one instruction and put everything back into memory in between < 1564570965 735600 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :yeah, that's one of the earliest optimizations that compilers implemented < 1564570998 229279 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :way back when what would now count as a non-optimizing compiler of a low-level language counted as an optimizing compiler of a high-level languaeg < 1564571007 920612 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Anything that requires solving an NP-complete problem is certainly an optimization. < 1564571044 384181 :int-e!~noone@int-e.eu PRIVMSG #esoteric :bold claim < 1564571069 980255 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :OK, the claim turned out much bolder than I intended. < 1564571079 46372 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :For "anything" substitute "This particular thing". < 1564571094 24808 :int-e!~noone@int-e.eu PRIVMSG #esoteric :register allocation? < 1564571105 966250 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :doing it optimally is NP-complete, I think < 1564571113 214662 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but doing better than nothing is much easierr < 1564571128 679936 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :it's still hard to do it well enough < 1564571144 53189 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What are the most important optimizations for a compiler? < 1564571150 201963 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Register allocation seems important. < 1564571150 459297 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I don't understand how that part of compilers work < 1564571153 935085 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Inlining is probably important. < 1564571179 553146 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :constant folding is important because without it most of the other optimisations don't work either < 1564571180 352970 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Though it's certainly much more important in a language like C++ than in C. < 1564571206 767462 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Ah, constant folding, sure. < 1564571231 281116 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I've said before that I think some optimizations are a bad idea, like tail call "optimization". < 1564571250 104484 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: constant folding, "peephole optimizations" (a very general term), optimizing integer divisions by a compile-time constant and repeated integer divisions by the same divisor < 1564571261 112976 :int-e!~noone@int-e.eu PRIVMSG #esoteric :it's a great idea. it should be mandated by the language standard. < 1564571293 726246 :int-e!~noone@int-e.eu PRIVMSG #esoteric :strength reduction, bounds check elimination, loop unrolling < 1564571307 742636 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think tail calls should be marked explicitly. < 1564571332 513117 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(bounds check elimination is *very* important because without it, performance-hungry people will not use safe languages at all.) < 1564571336 850312 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :If they are it should be an error to use an extra stack frame for them. But it shouldn't be implicit. < 1564571340 189322 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :outputting shorter forms of instructions (on x86), < 1564571392 565470 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :shachaf: I largely agree. I like Perl's use of goto for this. < 1564571394 236389 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :C compilers don't do bounds check elimination so how important can it be? < 1564571396 442173 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm planning to write a program in asm at the moment, I've spent over a day just on trying to optimise the register allocation to allow for shorter instruction forms < 1564571403 81937 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and I haven't even started writing the program yet < 1564571413 473157 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: I think they do < 1564571433 129509 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although they might see it as removing redundant conditionals rather than anything specifically related to bounds checking < 1564571450 471944 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, sure. < 1564571548 700824 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :cpressey: I don't know how that works. Does "goto &f" mean the same as "return f(@_)" but without the stack frame? < 1564571580 323426 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :When I try to look this up everyone is talking about "tail recursion optimization" which is double silly because tail recursion is the most useless kind of tail call. < 1564571634 8793 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :shachaf: I think that's basically it. < 1564571682 500556 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think in a language like C tail recursive functions are much more clearly written with a loop. < 1564571723 374201 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Useful cases of tail calls are mutually recursive functions like parsers, I guess. < 1564571759 779665 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :also being able to emit the common instructions in all addressing modes, using indexed memory access for reading or writing when possible, immediates for compile-time constant operands, swapping arguments of commutative operations < 1564571797 551776 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :shachaf: Yes, finite state machines especially. < 1564571835 545209 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :following which local variables are non-volatile and never taken address so the compiler knows that indirect assignments can't affect them < 1564571838 354684 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Are these actually important or are you just listing optimizations? < 1564571850 492827 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :indirect reads too, so you can store them in registers < 1564571860 831004 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: I don't really know, I haven't made a compiler yet < 1564571861 550526 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think I meant something like, if you only have time to implement a few optimizations, which are the most important? < 1564571882 933151 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : I think in a language like C tail recursive functions are much more clearly written with a loop. ← things like iterating over a binary tree look really ugly when one branch is recursive and the other is iterative, although of course the tail call doesn't save stack height there, just a bit of time < 1564571921 209439 :FreeFull!~freefull@defocus/sausage-lover JOIN :#esoteric < 1564571958 680752 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hmm, let's see. < 1564571998 67110 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :void print_node(Node *n) { if (!n) return; print_node(n->left); print(n->value); print_node(n->right); } > 1564572003 620215 PRIVMSG #esoteric :14[[07User:YamTokTpaFa14]]4 10 02https://esolangs.org/w/index.php?diff=64853&oldid=64830 5* 03YamTokTpaFa 5* (+114) 10 < 1564572032 949441 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :void print_node(Node *n) { while (1) { if (!n) return; print_node(n->left); print(n->value); n = n->right; } } < 1564572037 486512 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: not quite < 1564572046 836893 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :hmm wait < 1564572050 909244 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :maybe it does < 1564572055 550907 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I suppose you do lose some symmetry. < 1564572087 514365 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :well, it's closer to return &f(@_); which can matter if f is a prototyped function > 1564572102 272558 PRIVMSG #esoteric :14[[07User:YamTokTpaFa/sandbox414]]4 10 02https://esolangs.org/w/index.php?diff=64854&oldid=64851 5* 03YamTokTpaFa 5* (+185) 10/* Language overview */ < 1564572105 967868 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I don't know Perl at all so I made up some syntax. < 1564572108 578752 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :shachaf: If I had limited time and only wanted to implement one optimization technique it would probably be peephole optimization, but that's also because I typically don't want to think hard about the code I generate < 1564572140 148615 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :so, like, push ax; pop ax -> get rid of that < 1564572177 748824 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Is register allocation in and of itself an optimization, relative to stack allocation? < 1564572207 981786 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :push ax; pop ax isn't a no-op but I guess you can assume it doesn't matter. < 1564572208 281441 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: does it count as an optimization to be able to emit arithmetic instructions directly on memory operands, for both input and output, and arithmetic instructions with immediate operands? < 1564572213 239753 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :storing things in registers rather than on the stack is a huge optimization and one of the most important < 1564572234 440975 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: if you're a compiler, you almost certainly don't want the side effect it has < 1564572342 959073 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and if you /do/ want that effect, you'd likely write code like orb $0x0,-0x2(%rsp) (and would probably use a more negative number than -2) < 1564572416 624641 :Taneb!~Taneb@runciman.hacksoc.org PRIVMSG #esoteric :What's the side effect? < 1564572432 375397 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It writes ax to the memory past the end of the stack. < 1564572446 77566 :Taneb!~Taneb@runciman.hacksoc.org PRIVMSG #esoteric :Ah, of course < 1564572446 110313 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Taneb: pagefault (possibly upgraded to a segfault) if you're at the end of the paged-in portion of the stack < 1564572466 748602 :Taneb!~Taneb@runciman.hacksoc.org PRIVMSG #esoteric :Ah, also of course < 1564572479 979672 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I imagine the most important optimizations are the ones that save on the most important resources. < 1564572482 127484 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and of course on x86_64, you're writing actual valid memory there (specifically, redzone memory) < 1564572504 718409 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :on 32-bit x86 the ABI treats the memory there as undefined < 1564572509 482269 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Presumably executing a few extra instructions doesn't matter nearly as much as avoiding cache misses. < 1564572512 581692 :Taneb!~Taneb@runciman.hacksoc.org PRIVMSG #esoteric :I feel like I should spend more time learning about this sort of thing < 1564572516 70012 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so most people don't use things above the top of the stack there < 1564572529 433260 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Or mispredictions or something. < 1564572543 834797 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Taneb: You should write a fancy x86 assembler for me. < 1564572550 401998 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I wrote one but it's very simple and bad. < 1564572579 812743 :Taneb!~Taneb@runciman.hacksoc.org PRIVMSG #esoteric :I don't want to do that < 1564572600 135143 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :back in 2005, when my copy of the optimization guide was written, the most important factors were latencies in dependency chains, throughput of various units on the CPU, and things that caused the whole processor to stall < 1564572606 50355 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Register allocation is such an important optimization that people don't think of it as a compiler optimization < 1564572631 609016 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Some of these same people are happy with stack-based VMs < 1564572643 230510 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :for example, most instructions that did nontrivial memory accesses would not stall anything and would not use much of the CPU's resources, but the result wouldn't be available for 4 cycles < 1564572653 243879 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: http://yasm.tortall.net/ fancy x86 assembler < 1564572659 446904 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Man, generating code for a fancy out-of-order processor is ridiculous. < 1564572683 449839 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Taneb: I don't need it anyway because the point of it is to write it myself. < 1564572686 398925 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I actually had a really good idea for an instruction set design in the last couple of days < 1564572687 450312 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Level one: just generate some code that doesn't crash < 1564572726 230753 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the idea is, many of the registers are actually shift registers, you read from the end of them but write not at the end < 1564572738 911031 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(either "the value this register will have after one shift" or with higher numbers than "one") < 1564572751 527170 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and there's a shift instruction to shift everything all at once < 1564572763 129153 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Dan Bernstein once posted about how the x87 stack instructions, where you get a free swap after every instruction, let you express things that register machines don't. < 1564572767 159694 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this gives most of the advantages of VLIW but is much less specific to an individual processor < 1564572824 717823 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :basically, because the processor can decide for itself how to split the VLIW up, in the knowledge that two commands that happen between a register shift can't possibly interfere with each other (because no position in the shift register is simultaneously wriiteable and readable) < 1564572892 438710 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: is that sort of like those old SIMD cpus where if you write a register, you can't read it in the next instruction? < 1564572892 524449 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :jumps have their own jump target register, the jump instruction just jumps to the address in the jump target register, but you can load that an arbitrary distance beforehand < 1564572908 629389 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: yes, except you control how much delay there is < 1564572936 569355 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the nice thing about this is that temporaries don't need any nontrivial register allocation at all < 1564572964 853515 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you know when the instruction that uses the temporary is coming up, so you just place it in the appropriate point of the shift register < 1564572973 541487 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and more normal registers are only needed for values that you want to copy or persist < 1564573004 964858 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(even then, a command to store in multiple shift registers would likely be both useful and easy to implement, to save on copying) < 1564573028 108795 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :my current plan is for immediates to be part of the instruction, but addresses (both store and load) to be taken from shift registers < 1564573047 325005 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so that the processor can prefetch an address, or lock it into L1 cache, if it sees that an instruction is going to use it soon < 1564573079 728883 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this also makes double ll/sc really easy to implement, which means efficient lock-free algorithms < 1564573148 930621 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :there are a lot of advantages you can get without any of these fancy instruction set innovations, by just breaking compatibility and designing a new instruction set that is like the current practices but without the historical cruft < 1564573214 570622 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess my aim here is to design an instruction set that won't hurt optimisations in future processors and makes the optimisations done by current processors easier < 1564573299 289313 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that said, although this is intellectually interesting, I'm unlikely to practically get the chance to design an instruction set that CPUs will actually use < 1564575499 778051 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Register allocation does not strike me as fun (YMMV). One reason I would want to target LLVM is so that it can do register allocation for me. < 1564575610 514290 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hmm, one thing I want is precise control and information over stack frame allocation, which I think might be tricky to get with LLVM. < 1564575633 86903 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :For example, I want a function to be able to get its maximum stack usage at compiletime. < 1564575674 31478 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Yes, that might be impossible to know with certainty, with something like LLVM. < 1564575863 680501 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Maybe I'll target CIL instead. I already did that for one toy project. It's not terrible. < 1564575927 201848 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :It's backed by a standard, it runs on at least two platforms, where it has half-decent JIT compilers. < 1564576033 396505 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Another related thing I want is efficient coroutines, which is very similar code to stack frame allocation. < 1564576043 783875 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I don't know how much LLVM can help you with that. < 1564576142 134692 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I would be surprised if LLVM could not do coroutines reasonably efficiently. < 1564576153 678946 :int-e!~noone@int-e.eu PRIVMSG #esoteric :There's https://en.wikipedia.org/wiki/SPIR-V as well which sounds interesting in that it stores a control-flow graph of SSA basic blocks. < 1564576175 371815 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Ugh, why are GPU APIs all such a mess? < 1564576184 479651 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Maybe not all, but at least the common ones. < 1564576190 119049 :int-e!~noone@int-e.eu PRIVMSG #esoteric :But I don't know whether it can do general purpose programming at this point. < 1564576330 465598 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, LLVM has an implementation of coroutines, but if they're like C++2038's coroutines I probably don't want them. < 1564576347 348569 :int-e!~noone@int-e.eu PRIVMSG #esoteric :2038?! < 1564576367 199324 :int-e!~noone@int-e.eu PRIVMSG #esoteric :So next epoch? < 1564576379 126789 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :C++ω < 1564576424 559064 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I've probably forfeited my right to complain but now you're just being silly. < 1564576425 87927 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :C++2038 actually came out in 1901 but the date underflowed < 1564576434 396546 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :What are the last two digits of ω < 1564576477 539709 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The C++ coroutine proposal last I saw it does some heap allocations sometimes. < 1564576503 485488 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But it said something like, don't worry, with only $x0 million of investment in compilers, we expect that optimizers can usually eliminate these allocations. < 1564576506 326041 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I guess if you make a decimal reperesentation of ordinals, the last ω digits of ω will be zero. < 1564576538 779151 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And only the ω-th digit will be one. < 1564576574 322649 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(counting from the left) < 1564576577 528966 :int-e!~noone@int-e.eu PRIVMSG #esoteric :err < 1564576581 706603 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(counting from the right) < 1564576589 338549 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I should say "counting from the end" :P < 1564576746 94666 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: I think recent GPU APIs are messy because they are common interfaces to a very wide range of different hardware, and they expose a lot of iffy details for performance reasons. (The original OpenGL had a pretty different attitude.) < 1564577035 343880 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :``` set -e; cd wisdom; printf "%s/ " *ium < 1564577036 30231 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :amnesium/ belgium/ corium/ < 1564577043 74986 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :`? amnesium < 1564577044 624973 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :`? corium < 1564577049 220980 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :An amnesium is a school where you forget everything you learned after each test. < 1564577050 88081 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :Corium is the material that a nuclear reactor's core dump is made of. < 1564577051 930751 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :`? alumni < 1564577053 472893 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :Alumni is a compromise spelling suggested to solve the aluminum vs aluminium debate that never really caught on, except in a few big colleges. < 1564577121 754863 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :``` set -e; cd wisdom; printf "%s/ " *ion < 1564577122 459997 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :abbreviation/ action/ algebraic chess notation/ bessel function/ cat elimination/ cat introduction/ cipation/ citation/ civilization/ communication/ composition/ cut elimination/ damnation/ defenestration/ degeneration/ dereduntantation/ detonation/ eurovision/ hallucination/ hppavilion/ identity function/ implication/ indentity function/ intersection/ invention/ just intonation/ last-class function/ lion/ natural transformation/ nnection/ onion/ operation < 1564577147 706406 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I wonder how much more true that is of GPUs than CPUs. < 1564577185 30954 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hmm, someone should name an element "belgium". < 1564577199 932407 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :`? belgium < 1564577200 975298 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :The plural form of "Belgium" is "Belgia". > 1564577339 877833 PRIVMSG #esoteric :14[[07Talk:ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64855&oldid=64845 5* 03Hanzlu 5* (+14) 10/* Python Interpreter */ > 1564577365 280547 PRIVMSG #esoteric :14[[07Talk:ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64856&oldid=64855 5* 03Hanzlu 5* (-14) 10 > 1564577459 437126 PRIVMSG #esoteric :14[[07Talk:ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64857&oldid=64856 5* 03Hanzlu 5* (+30) 10 > 1564578233 565173 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64858&oldid=64821 5* 03Hanzlu 5* (+28) 10 > 1564578337 583899 PRIVMSG #esoteric :14[[07Truth-machine14]]4 10 02https://esolangs.org/w/index.php?diff=64859&oldid=63439 5* 03Hanzlu 5* (+27) 10 > 1564578450 803467 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64860&oldid=64858 5* 03Hanzlu 5* (+6) 10 < 1564579007 940879 :doesthiswork!~doesthisw@98.125.180.92 JOIN :#esoteric > 1564579438 835754 PRIVMSG #esoteric :14[[07Talk:Keg14]]4 M10 02https://esolangs.org/w/index.php?diff=64861&oldid=63982 5* 03A 5* (-109) 10 < 1564580243 912089 :xkapastel!uid17782@gateway/web/irccloud.com/x-dfstbnbgqqrrvzyf JOIN :#esoteric > 1564581558 26703 PRIVMSG #esoteric :14[[07Talk:ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64862&oldid=64857 5* 03A 5* (+6) 10 < 1564582178 943519 :ais523!~ais523@unaffiliated/ais523 QUIT :Ping timeout: 248 seconds > 1564582905 141567 PRIVMSG #esoteric :14[[07Brace For Impact14]]4 N10 02https://esolangs.org/w/index.php?oldid=64863 5* 03Areallycoolusername 5* (+1483) 10Created page with "'''Brace For Impact''' is a [[Stack]]-based [[esoteric programming language]] made by [[User: Areallycoolusername|Areallycoolusername]]. It has featured derived from Lisp,thou..." > 1564582910 134524 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64864&oldid=64860 5* 03Hanzlu 5* (+128) 10 > 1564583347 799354 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64865&oldid=64849 5* 03A 5* (+1) 10/* What Mains Numbers? */ > 1564584068 673706 PRIVMSG #esoteric :14[[07What Mains Numbers?14]]4 10 02https://esolangs.org/w/index.php?diff=64866&oldid=64865 5* 03A 5* (+825) 10/* Implementations */ < 1564587127 898432 :oklopol!~androirc@85-76-162-9-nat.elisa-mobile.fi QUIT :Read error: Connection reset by peer < 1564587313 493162 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 QUIT :Remote host closed the connection < 1564589367 30499 :john_metcalf!~digital_w@host86-139-94-170.range86-139.btcentralplus.com JOIN :#esoteric < 1564590585 755591 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :https://github.com/catseye/Castile/blob/master/src/castile/stackmac.py < 1564590648 455409 :cpressey!~cpressey@5.133.242.4 QUIT :Quit: A la prochaine. > 1564593429 446942 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64867&oldid=64864 5* 03Hanzlu 5* (-419) 10 > 1564593545 641172 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64868&oldid=64867 5* 03Hanzlu 5* (+2) 10 > 1564593763 112196 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64869&oldid=64868 5* 03Hanzlu 5* (+153) 10 > 1564593947 200268 PRIVMSG #esoteric :14[[07ACL14]]4 10 02https://esolangs.org/w/index.php?diff=64870&oldid=64869 5* 03Hanzlu 5* (+137) 10 < 1564593982 54262 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric > 1564594951 802453 PRIVMSG #esoteric :14[[07Brace For Impact14]]4 10 02https://esolangs.org/w/index.php?diff=64871&oldid=64863 5* 03Areallycoolusername 5* (+1) 10 < 1564595675 234256 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu JOIN :#esoteric < 1564597085 616763 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :ha, I caught this stupid fly that somehow got in here < 1564597123 531307 :FireFly!znc@freenode/staff/firefly PRIVMSG #esoteric :ow > 1564597161 57745 PRIVMSG #esoteric :14[[07Esolang:Categorization14]]4 M10 02https://esolangs.org/w/index.php?diff=64872&oldid=58894 5* 03Areallycoolusername 5* (-157) 10Most of these proped categories are too obvious to be added. A few need to be discussed on the talk pag, not on the page itself. > 1564598750 289033 PRIVMSG #esoteric :14[[07Esolang:Categorization14]]4 10 02https://esolangs.org/w/index.php?diff=64873&oldid=64872 5* 03Ais523 5* (+157) 10Undo revision 64872 by [[Special:Contributions/Areallycoolusername|Areallycoolusername]] ([[User talk:Areallycoolusername|talk]]): those aren't proposed categories, but listings of possibilities that are too common to be categorised (for exhaustiveness) > 1564599282 391610 PRIVMSG #esoteric :14[[07Brace For Impact14]]4 10 02https://esolangs.org/w/index.php?diff=64874&oldid=64871 5* 03Areallycoolusername 5* (+606) 10 < 1564599889 472800 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: quit > 1564600567 671575 PRIVMSG #esoteric :14[[07Brace For Impact14]]4 10 02https://esolangs.org/w/index.php?diff=64875&oldid=64874 5* 03Areallycoolusername 5* (+623) 10/* (a'),(s;),(d.), (f=), and (y~) */ < 1564603248 198094 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1564603447 156842 :lldd_!~atrapado@unaffiliated/atrapado JOIN :#esoteric < 1564603459 74613 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 248 seconds < 1564603459 623887 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 NICK :Lord_of_Life < 1564604151 220633 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover JOIN :#esoteric < 1564604964 805488 :howlands!gilesgate@sdf-eu.org JOIN :#esoteric < 1564605449 710018 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? scoia'tael < 1564605450 698040 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :scoia'tael? ¯\(°​_o)/¯ < 1564605462 726005 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? journey < 1564605463 702034 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :journey? ¯\(°​_o)/¯ < 1564605468 446639 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? distancve < 1564605469 470067 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :distancve? ¯\(°​_o)/¯ < 1564605469 814267 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? distance < 1564605470 862108 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :distance? ¯\(°​_o)/¯ < 1564605470 973827 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? metric < 1564605472 196204 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :metric? ¯\(°​_o)/¯ < 1564605791 127813 :howlands!gilesgate@sdf-eu.org PRIVMSG #esoteric :`? mertic < 1564605792 214244 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :mertic? ¯\(°​_o)/¯ < 1564605805 128801 :howlands!gilesgate@sdf-eu.org PRIVMSG #esoteric :`? paliorompot < 1564605806 174515 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :paliorompot? ¯\(°​_o)/¯ < 1564605917 454559 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? negligence < 1564605918 584293 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :negligence? ¯\(°​_o)/¯ < 1564605923 451418 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? insurgence < 1564605924 462195 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :insurgence? ¯\(°​_o)/¯ < 1564605928 988861 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? negligance < 1564605930 41703 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :negligance? ¯\(°​_o)/¯ < 1564605931 26221 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? insurgance < 1564605932 129169 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :insurgance? ¯\(°​_o)/¯ < 1564605942 26388 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? indigence < 1564605943 188186 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :indigence? ¯\(°​_o)/¯ < 1564605943 701978 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? indigance < 1564605944 738098 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :indigance? ¯\(°​_o)/¯ < 1564606139 416573 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :``` set -e; cd wisdom; echo *[ae]nce < 1564606140 81638 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :ance insurance intelligence persistence reference science sentience this sentence < 1564606145 151816 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? insurance < 1564606146 173945 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :Insurance is a closed loop. < 1564606156 919252 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? science < 1564606158 25852 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :Semi-automatic text generation. < 1564606159 495518 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? sentience < 1564606160 706433 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :sentience is the primary goal of wisdom. wisdom is the primary goal of sentience. < 1564606162 402191 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? this sentence < 1564606163 629001 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :This sentence is just. Taneb invented it. < 1564606167 36963 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? persistence < 1564606168 142625 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :Taneb invented persistence long ago, and it's been around ever since. < 1564606701 781497 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`? armchair < 1564606702 802169 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :armchair? ¯\(°​_o)/¯ < 1564606734 56881 :lldd_!~atrapado@unaffiliated/atrapado QUIT :Quit: Leaving < 1564606822 957439 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`hatis ld.so < 1564606824 587110 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: hatis: not found < 1564606826 206772 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu PRIVMSG #esoteric :`whatis ld.so < 1564606827 878365 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :ld.so(8) - dynamic linker/loader > 1564607307 471776 PRIVMSG #esoteric :14[[07User:Hanzlu14]]4 N10 02https://esolangs.org/w/index.php?oldid=64876 5* 03Hanzlu 5* (+64) 10Created page with "Some random guy who made [[ACL]]. What more do you need to know?" < 1564610007 389876 :b_jonas!~x@catv-176-63-24-14.catv.broadband.hu QUIT :Quit: leaving < 1564613078 327491 :Phantom_Hoover!~phantomho@unaffiliated/phantom-hoover QUIT :Ping timeout: 245 seconds < 1564614595 21217 :doesthiswork!~doesthisw@98.125.180.92 PRIVMSG #esoteric :suppose that the time complexity of adding two 2 digit integers is linear in the smaller term. But you can choose N sums to memoize to improve the worst case. How should you choose the N sums? < 1564614970 954247 :Melvar!~melvar@dslb-188-106-184-179.188.106.pools.vodafone-ip.de QUIT :Ping timeout: 258 seconds < 1564614997 116040 :Melvar!~melvar@dslb-188-106-184-179.188.106.pools.vodafone-ip.de JOIN :#esoteric