< 1566518404 575509 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :where does the data go, then? < 1566518420 665368 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Sorry, I omitted that part, should've put some ... in there. < 1566518433 721391 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Both of the DOCTYPEs are XHTML 1.0 Transitional, by the way. < 1566518443 857650 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's more fun if inner document is inside the input < 1566518605 73643 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm… if you're going to nest HTML like that there should logically be a to show where the inner document ends < 1566518620 67614 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also, if this is /X/HTML, the browser should refuse to display iit < 1566518726 588521 :tromp_!~tromp@ip-213-127-58-74.ip.prioritytelecom.net QUIT :Remote host closed the connection < 1566518798 727887 :zzo38!~zzo38@24-207-15-213.eastlink.ca JOIN :#esoteric < 1566519895 417428 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :ais523: you know anything about VSDGs? < 1566520023 793998 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I don't know what the acronym stands for, which leads me to suspect not < 1566520061 606271 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Wikipedia doesn't know either < 1566520066 256628 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :Value State Dependence Graph. https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-705.pdf < 1566520073 960435 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :Fun little paper/ < 1566520079 52697 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :good concept < 1566520422 424860 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :My opinion of PostScript is that it isn't a very good protocol or document format, but it is a OK programming language. < 1566520742 382771 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :ais523: was asking because I thought it'd be something you'd be interested in. (I'm considering trying something with it myself) < 1566520864 797254 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :moony: I internally think of programming at a very high level, so things like the difference between VSDG and SSA-PDG are hard for me to notice < 1566520890 420057 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I was considering using a subset of SMT2 (the input language to Z3 and friends) as a compiler IR, on the basis that it'd make proving the correctness of optimisations easy < 1566520914 605004 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :neat < 1566520941 240039 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and that's VSDGish in the sense that although the source language can express unnecessary ordering constraints, the SMT solver can't see them once the program has been loaded < 1566520955 911411 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so I didn't really notice they existed < 1566521011 770100 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(another example of this sort of mental block: after working with concurrent programming for several years, I generally forget that in most processors and languages, the order in which you assign to two variables can be relevant even if you don't explicitly order them) < 1566521021 937847 :tromp!~tromp@2a02:a210:1585:3200:8053:c7f5:b342:b240 JOIN :#esoteric < 1566521068 261255 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ooh right: the compiler I wrote for work uses a VSDG-based internal representation, I only just realised < 1566521120 157404 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :only its target platform is hardware, which is basically VSDG in its own right, the only difference is that you need to give explicit timing rules for when the wavefront moves < 1566521144 910525 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(but you're trying to parallelise as much as possible and not sequentialise unless you really have to, otherwise you might as well just use a CPU) < 1566521217 41835 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the other difference is that we had control flow combinators that could introduce loops in the graph < 1566521319 968202 :tromp!~tromp@2a02:a210:1585:3200:8053:c7f5:b342:b240 QUIT :Ping timeout: 264 seconds < 1566522191 982047 :tromp!~tromp@2a02:a210:1585:3200:d92b:f6c5:5acc:5e8a JOIN :#esoteric < 1566522312 425852 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :mm < 1566522385 302305 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :neat < 1566522467 981894 :tromp!~tromp@2a02:a210:1585:3200:d92b:f6c5:5acc:5e8a QUIT :Ping timeout: 252 seconds < 1566522989 908181 :iovoid!iovoid@hellomouse/dev/iovoid JOIN :#esoteric < 1566523250 244483 :Sgeo_!~Sgeo@ool-18b98995.dyn.optonline.net JOIN :#esoteric < 1566523435 882 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the great thing about the hardware compiler is that the sort of optimisation that would normally be considered a "peephole optimisation" is, ironically, higher-level rather than lower-level than working closer to the source code < 1566523441 717652 :Sgeo!~Sgeo@ool-18b98995.dyn.optonline.net QUIT :Ping timeout: 268 seconds < 1566523467 976750 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :because it's a finer-grained representation than typical source is, and there are no ordering constraints unless they're needed for correctness < 1566523526 894118 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ugh, this VSDG thesis uses «printf("%i",(x++)+(x++));» as an example of code with unspecified behaviour, but the behaviour is actually undefined < 1566523536 310491 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :in particular there's no guarantee that it prints either 0 or 1, like the author expected < 1566523607 79440 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Yeah, you're mutating the same l-value twice with no sequence point. < 1566523610 191228 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :«printf("%i %i", x++, x++);» would have been a better example (I believe this is required to print either "0 1" or "1 0" but no requirement on which) < 1566523621 153231 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Yep. < 1566523622 148852 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`! c printf("%i %i", x++, x++); < 1566523624 66105 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :Does not compile. < 1566523634 204242 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :I think it might be implementation-defined? < 1566523634 883467 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :did we fix that thing yet? < 1566523658 30413 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Though actually, could just be unspecified. < 1566523674 178420 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` echo 'int main(void) { printf("%i %i", x++, x++); }' | gcc -Wall -x c -o /tmp/a.out /dev/stdin; /tmp/a.out < 1566523675 24750 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/dev/stdin: In function ‘main’: \ /dev/stdin:1:18: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration] \ /dev/stdin:1:18: warning: incompatible implicit declaration of built-in function ‘printf’ \ /dev/stdin:1:18: note: include ‘\nint main(void) { printf("%i %i", x++, x++); }' | gcc -x c -Wall -o /tmp/a.out /dev/stdin; /tmp/a.out < 1566523718 893950 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/dev/stdin: In function ‘main’: \ /dev/stdin:2:34: error: ‘x’ undeclared (first use in this function) \ /dev/stdin:2:34: note: each undeclared identifier is reported only once for each function it appears in \ /hackenv/bin/`: line 5: /tmp/a.out: No such file or directory < 1566523719 729299 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :``echo 'int printf(); int main(void) { printf("%i %i", x++, x++); }' | gcc -x c -o /tmp/a.out /dev/stdin; /tmp/a.out < 1566523720 354147 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `echo: not found < 1566523731 53125 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` echo -e '#include \nint main(void) { int x = 0; printf("%i %i", x++, x++); }' | gcc -x c -Wall -o /tmp/a.out /dev/stdin; /tmp/a.out < 1566523732 563911 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/dev/stdin: In function ‘main’: \ /dev/stdin:2:51: warning: operation on ‘x’ may be undefined [-Wsequence-point] \ 1 0 < 1566523741 441706 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ooh, gcc things it is UB < 1566523746 428549 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :*thinks < 1566523761 208551 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm not sure it's right, though < 1566523772 498174 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Huh, is the ',' in an argument list not a sequence point? < 1566523776 552675 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I thought it was < 1566523776 695274 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :I would've assumed it was. < 1566523845 869957 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :apparently the function call is a sequence point, but there isn't a sequence point between the arguments < 1566523865 957622 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` echo -e '#include \nint main(void) { int x = 0; printf("%i %i", x++, x++); }' | gcc -x c -Wall -fno-diagnostics-color -o /tmp/a.out /dev/stdin; /tmp/a.out < 1566523867 123135 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/dev/stdin: In function ‘main’: \ /dev/stdin:2:51: warning: operation on ‘x’ may be undefined [-Wsequence-point] \ 1 0 < 1566523882 292664 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` echo -e '#include \nint main(void) { int x = 0; printf("%i", x++) + printf("%i", x++); }' | gcc -x c -Wall -fno-diagnostics-color -o /tmp/a.out /dev/stdin; /tmp/a.out < 1566523883 393421 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/dev/stdin: In function ‘main’: \ /dev/stdin:2:63: warning: operation on ‘x’ may be undefined [-Wsequence-point] \ /dev/stdin:2:47: warning: value computed is not used [-Wunused-value] \ 01 < 1566524036 973836 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Aaah < 1566524193 593208 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm reading the standard to try to determine whether that's UB or not < 1566524220 407719 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :each x++ has to run either before or after the other printf, but there's no such requirement on running before or after the /argument calculation to/ the other printf < 1566524239 733552 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(n1570.pdf 6.5.2.2.10) < 1566524326 597759 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that said, I can't find the part of the standard that makes "modify twice between sequence points" UB < 1566524334 160182 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I know it exists, or used to, I just can't find it < 1566524538 799638 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :6.5p2 "If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined." < 1566524542 376191 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wow, it is indeed UB < 1566524560 824292 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the language has been very tightened up since the earlier C standards < 1566524575 879750 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :`` echo -e '#include \nint main(void) { int x = 0; printf("%i", x++) + printf("%i", x++); return 0; }' | gcc --std=c89 -x c -Wall -fno-diagnostics-color -o /tmp/a.out /dev/stdin; /tmp/a.out < 1566524576 946904 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​/dev/stdin: In function ‘main’: \ /dev/stdin:2:63: warning: operation on ‘x’ may be undefined [-Wsequence-point] \ /dev/stdin:2:47: warning: value computed is not used [-Wunused-value] \ 01 < 1566524625 526846 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :for contrast, the language from C99: "Between the previous and next sequence point an object shall have its stored value modified at most once by the evaluation of an expression." < 1566524680 456530 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and 6.5.2.2p10: "The order of evaluation of the function designator, the actual arguments, and subexpressions within the actual arguments is unspecified, but there is a sequence point before the actual call." < 1566524734 412104 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :"previous and next" is pretty unclear in this case! < 1566525514 682882 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566525597 245821 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Is having a pregenerated memory layout that contains pointers a good reason to disable ASLR? < 1566525663 307305 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I think it depends on how important that pregenerated memory layout it is, and what sort of attack surface your program has < 1566525814 514141 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Ping timeout: 276 seconds < 1566525815 614984 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Go disables ASLR on their binaries (by default?) because they say the language is memory-safe so it's irrelevant and harder to debug. < 1566525867 354550 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :doesn't that make it more likely to be vulnerable to meltdown/spectre-type exploits? < 1566525915 630081 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That seems possible? < 1566525923 619618 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :even if you assume the memory safety is perfect, and so is the memory safety of all the language's dependencies (if any; IIRC go doesn't use libc, so possiibly it doesn't use anything else either) < 1566525931 897332 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I hear it's often possible to use tricks to get information about memory layout so ASLR isn't that great anyway. < 1566525947 682842 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :well, it depends on how fine-grained it is, I guess < 1566525978 73983 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Programs with long loading times would be the candidates for this. < 1566525995 969743 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :animalloc (the experimental malloc impl I wrote a while back) makes ASLR fairly useless because it has one random base address per program execution and everything malloc'ed is in a deterministic place relative to that < 1566525998 466002 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I hear emacs used to support loading from a core file instead of from scratch, to make load times faster. < 1566526026 377898 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but it's still better than being off entirely < 1566526026 682715 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Doesn't it still have unexec? < 1566526037 476036 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That's what it's called. < 1566526040 935064 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :https://github.com/typester/emacs/blob/master/src/unexec.c Ah-yup < 1566526045 286099 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :OTOH, I can imagine a malloc implementation that randomizes the address on every call < 1566526047 363415 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Oh, wait, that's ancient bull < 1566526069 42521 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :a.out format executable < 1566526077 685215 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :do those even work on modern Linux? I guess they do < 1566526092 143373 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Not by default, I think. < 1566526095 422442 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Your distro might not compile in support for it. < 1566526101 731759 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Computer games are a clear candidate for this sort of thing (maybe particularly on consoles?). But I don't know what occupies most of their load time. < 1566526112 346480 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Still, Linux _itself_ has been fantastic at maintaining ABI support. < 1566526124 141653 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :It's userspace that's been pretty bad at it. < 1566526126 233413 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It could be loading assets, which have no pointers and therefore can just load things without pointers into memory. < 1566526135 958167 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: in-game load times, the main bottleneck is sending data to the GPU, I think < 1566526146 665613 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :pikhq: If only the kernel ABI was all you needed! < 1566526149 157820 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's pretty much being sent a memory image /already/, with no real computations < 1566526155 500807 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I mean game startup time. < 1566526175 265189 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :most games are pretty good about the CPU-related parts of startup time, IME < 1566526185 616624 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :probably not all of them though < 1566526190 702867 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: I mean, you _could_ static link everything. < 1566526198 26360 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Can you? < 1566526206 398594 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if there's a long loading screen right at the start, it's probably because it needs some large assets in the GPU to display the title screen < 1566526209 909271 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I want to make graphical programs which means I want to use something like OpenGL. < 1566526213 455549 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Though if you want to use GL, you are in for a _rough_ time. < 1566526224 197598 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :By rough you just mean impossible, right? < 1566526229 232976 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :either that or because it's prefaulting the files it uses from disk into memory < 1566526238 762291 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The only official ABI for portable hardware-accelerated graphics is dynamic linking. < 1566526241 775228 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: Yeah, basically. < 1566526278 417090 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wouldn't a statically linked graphical application potentially be limited to one type of GPU anyway? < 1566526296 657442 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :there's no obvious reason why a dynamically-linked-in graphics library would be portable < 1566526328 95142 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :The fact that the entire GPU interface lives in userspace is fucking awful, but there we are. < 1566526340 772975 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :OpenGL is a mostly portable API for multiple GPUs. < 1566526352 494048 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :pikhq: I think it's better than, say, drawing scrollbars in kernel code < 1566526359 168843 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :(okay, not the _entire_, but a sizable chunk of it is) < 1566526367 850892 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :ais523: I mean yes, but that's the other extreme, ain't it? < 1566526375 23194 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: yes, but couldn't two different libraries implement that API, each specialised for a particular card? < 1566526383 20106 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :"bad thing X isn't as bad as other random bad thing Y" isn't really an argument for thing X. < 1566526389 20221 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :pikhq: yes, but IIRC Windows actually does that, or at least used to < 1566526407 867758 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so presumably we have to find a tradeoff point in between < 1566526433 245898 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :The reasonable approach is the kernel provides an abstract interface for the hardware. < 1566526434 256320 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ais523: Sure? Those are the different dynamic implementations of libGL.so. < 1566526447 83587 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Like it does for every other device. < 1566526461 183103 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Nobody has to dynamically link in a hard drive driver. < 1566526488 280847 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The hard drive doesn't run software written in a secret instruction set that you only get a compiler into. < 1566526522 785219 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :right, you don't even get a compiler for its secret instruction set < 1566526541 374265 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but that's typically mostly irrelevant because the hard drive implements a standardised API so you don't need to mess around with the CPU on there < 1566526553 181590 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: Which is itself just absurd IMO. < 1566526555 383168 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(some people have got interesting code running on hard drives, though) < 1566526556 805804 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :But that's how it evolved. < 1566526586 413634 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :pikhq: I can see potential worries about forwards compatibility, but the real reason is likely to be different < 1566526593 542929 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :And in Unix, it's not like the GPU devs showed up and decided to do it like this. Oh no. Even ancient X had the driver in userspace. < 1566526618 245394 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :like, if GPU machine code were public, people might write programs in it directly and then the company would have trouble selling new graphics cards < 1566526624 610401 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :pikhq: How do you mean? < 1566526630 376925 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :CPU microcode is probably secret at least partly for this reason < 1566526664 762313 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: I mean that prior to DRM (the Linux API), X11 mmapped /dev/mem and had access to IO ports. < 1566526687 152951 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Which meant that X11 was portable to basically every kernel! < 1566526702 557357 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :pikhq: the latter makes a lot of sense, imagine doing a system call every time you wanted to send a byte to the GPU < 1566526705 389895 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :... because it was effectively as privileged as the kernel < 1566526708 557997 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The X11 server, but clients had a standard protocol to send drawing commands to. < 1566526716 1494 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :True. < 1566526724 741991 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :So from the perspective of someone writing a program it was just part of the platform API. That seems OK. < 1566526736 180837 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :(Except the protocol presumably didn't allow for very efficient graphics.) < 1566526745 667524 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :a different split would probably involve some sort of X11 renderer that ran in the kernel < 1566526758 878190 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Or a kernel generic framebuffer driver. < 1566526765 865909 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Similar to fbdev, with more features. < 1566526809 133351 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Though the reason _that_ didn't take off is because back in the day, 2D hardware had a lot of random acceleration features, and it would be very hard to produce a good API that exposed them usefully. < 1566526810 189159 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but modern GPU libraries don't want a framebuffer < 1566526815 192266 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :There are a few other standard ABIs that are only available via dynamic linking, like DNS and user lookup. < 1566526825 71687 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But for the most part you can reimplement those yourself with a bit of work. < 1566526833 780901 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :a framebuffer that implies you're doing all your rendering in software < 1566526835 772588 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: musl supports user lookup without it dynamic linking. :) < 1566526839 76676 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :s/that // < 1566526863 973051 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :pikhq: what about when PAM is in use? < 1566526873 954788 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :musl speaks the glibc nscache protocol. < 1566526883 516551 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :ais523: Oh, yes, for PAM you're still stuck. < 1566526986 130189 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Man. < 1566526992 107943 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Time to scrap all of Linux userspace. < 1566527059 270449 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :And unfortunately, I think PAM wouldn't let you even in _theory_ do a static linked implementation that talks to a daemon that handles the dynamic linking for you. < 1566527064 937362 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Given that GPU manufacturers aren't cooperative, what's the best graphics API an operating system could provide? < 1566527091 344949 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it'd have to be very extensible, I think < 1566527105 477015 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :GPUs keep inventing new features that aren't in any API that existed at the time < 1566527178 263261 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :And designing brand new APIs to support them. < 1566527205 100448 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Not that I can blame them; GL isn't a great fit to GPUs anymore. But even so. < 1566527262 545773 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :So it still sounds like my answer is that I have to do dynamic linking. < 1566527267 225823 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess one potentially useful extreme would be something like GLSL but a bit more powerful, used to express /everything/ < 1566527289 845266 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although that'd be putting a lot of trust in the compiler to recognise what you were trying to do and optimise it < 1566527333 105149 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: What you could maybe do is limit what the dynamic library is allowed to do. < 1566527357 748410 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Like, if you forced that .so to have _no_ dependencies? < 1566527388 303183 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But libGL depends on libc and whatever else. < 1566527399 301549 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Yes, and that's why it's a problem for ABI compat. < 1566527405 994808 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :pikhq: what problem is that trying to solve? (fwiw, I'm not clear on which problem shachaf is trying to solve with static linking; there's more than one problem it could potentially solve) < 1566527421 94010 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :ais523: Long-term ABI stability. < 1566527441 674754 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, maybe you're answering the "what could a platform do in general" question, rather than the "what can I do right now" question. < 1566527442 810770 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Force libGL to have a fixed ABI and no interaction with things that could possibly change. < 1566527452 572624 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Oh, yes, that's what I'm answering. < 1566527496 114633 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: as for "what can I do right now", depending on what sort of performance you need you might be able to invent your own very simple graphics protocol + a renderer for it < 1566527497 336534 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Sure, minimal dependencies would be better, of course. < 1566527499 342855 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: For now? You're kinda in a rough place; you're more or less forced into relying on Linux's moderately unstable userspace ABI. < 1566527510 873557 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :e.g. you could just place rendered bitmaps in a particular location in shared memory < 1566527522 424973 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :if you don't care about compatibility with X, you could even use the Linux framebuffer! < 1566527531 522542 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :If possible, yes, define your own simple graphics protocol and a renderer if you want to ship a static binary that's long-term usable. < 1566527539 70343 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :ais523: I use a 3840x2160 resolution so software renderers get slow pretty quickly. < 1566527556 874431 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :In fact, that's probably your single best bet if you want to ship a Linux binary that'll still be useful in 20 years. < 1566527563 460307 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I just want software that's simple and reliable and straightforward to run. < 1566527631 170307 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Build software against symbols that are defined in the LSB, and static link in all other dependencies, I guess. < 1566527650 894199 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Not a great answer, but that's at least an ABI that's likely to be supported for some time. < 1566527660 218815 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :(also really limiting) < 1566527671 381900 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: fwiw, my experience with programs that try to provide bundled dependencies has been that they usually end up breaking and can be fixed by forcing my OS's packaged versions of those dependencies rather than the program's bundled versions < 1566527690 820273 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and of course there's the issue of security updates too < 1566527733 115285 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What sort of dependencies are you talking about? < 1566527740 248365 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Problem is, if you don't bundle dependencies you're at serious risk of ABI breakage. < 1566527747 112741 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: the most recent time this happened it was zlib < 1566527766 350820 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Because the Linux userspace is only somewhat concerned with ABI stability. < 1566527781 961170 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :How do you "force your OS's versions" of a statically linked library? < 1566527806 128735 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :You don't, unless they're being aggressively LGPL-compliant. :) < 1566527819 138562 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: LD_PRELOAD works, but normally the shipped dependencies have been linked in dynamically anyway which makes it even easier < 1566527824 947917 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Typically on Linux, if you're bundling dependencies you're bundling .so files. < 1566527831 938049 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also the last time this happened I had the program's source available so I just modified it < 1566527841 986803 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :pikhq: LGPL is bad for many reasons, but one of those reasons is encouraging dynamic linking. < 1566527868 698076 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(there was some insanity in the build process; I remember that reimplementing sqrt() myself rather than using the library version turned out to be the easiest solution) < 1566527882 494153 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :_Really_, if you're targetting Linux, the answer for having code that's easy to run that's still useful in years to come is to ship binaries that work on currently common distros, and offer source that's reasonably portable so it can still be built 10 years later. < 1566527904 918066 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'm presumably targeting every common platform. < 1566527925 960954 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Well, on Windows this is an easy question to answer. < 1566527932 382334 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Ship a binary. It'll outlive you. < 1566527949 827222 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :pikhq: I'm not convinced, I've had plenty of experience with Windows binaries breaking on later versions of Windows < 1566527965 181010 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I've had programs written against Windows 3.1 break on Windows 98, for example < 1566527973 89490 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Okay, granted I'm overselling it. < 1566527979 970237 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :eventually I got exasperated enough to look for any alternative, and ended up moving to SunOS and later Linux < 1566527983 344810 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Really, it will _probably_ work, but there's cases where it won't. < 1566527992 641583 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I remember Windows XP could still run binaries from Windows 2. < 1566528004 705581 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Past a certain point Windows' ABI compat is best-effort. < 1566528013 459273 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: 32-bit Win10 probably still can. < 1566528031 118607 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :then my rewritten version for Windows 98 "broke" on Windows XP (it was still runnable but it ran so much more slowly as to be unusable) < 1566528189 304985 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :…maybe something like WebAssembly is a good way to produce a long-lived executable? < 1566528213 253332 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :being designed to be portable over anything else is also more likely to leave it stable to old programs, and ported to new OSes < 1566528223 450335 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but it basically has no kernel API to speak of < 1566528244 291371 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :People are now talking about using WebAssembly to deploy code to their own servers and it seems horrible to me. < 1566528333 840806 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I actually think WebAssembly is going to be a pretty important technology, maybe not for everything, but for a wide range of applications < 1566528454 796177 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :shachaf: People be using waaay worse stuff already. < 1566528524 541520 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :I can imagine people doing something that's k8s-like, except with WebAssembly instead of containers, and with the scheduler actually migrating process states rather than just killing things. < 1566528549 318717 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Perhaps with it effectively running as a kernel, rather than having an underlying OS that mostly is irrelevant. < 1566528583 382097 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Yes, people are doing bad things, but that's not an excuse for other bad things. < 1566528594 832514 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Docker-style containers are scow. < 1566528749 29434 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Conceptually, I don't think so. < 1566528756 56578 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Basically every implementation detail is, though. < 1566528757 927 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :fwiw, I just looked through my old executables and found one written in 2004; it works just fine in Wine < 1566528956 417889 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :http://nethack4.org/pastebin/BACKGAM.EXE if anyone's interested in trying it out on Windows (the delay was me running it through local ClamAV, followed by VirusTotal, to make sure it wasn't infected) < 1566528967 932506 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :presumably they still have viruses from 2004 in their definitions :-) < 1566529007 158212 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Win10 says "This app can't run on your PC." < 1566529024 481016 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Disappointing, but at least that's a very clear error message. < 1566529086 276687 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :$ file BACKGAM.EXE < 1566529087 866231 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :BACKGAM.EXE: MS-DOS executable, NE for MS Windows 3.x < 1566529128 316131 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :I'm on 64-bit Windows, so there's that. < 1566529149 466437 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :whoa, not even PE? < 1566529150 816972 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm not sure what file's output even means < 1566529160 957430 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :is that a specific sort of PE? or something older < 1566529175 477466 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the first two bytes are MZ so it's probably PE < 1566529182 263492 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :That's an older binary file format. < 1566529185 806073 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :"New Executable". < 1566529228 245167 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :It was the successor to the MZ file format, used by Win16 and OS/2. < 1566529275 343394 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :The MZ bytes are because NE _also_ supports a DOS MZ stub. < 1566529325 447201 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: sorry for my connection < 1566529341 234996 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1566529366 80972 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :presumably it's a 16-bit executable, then < 1566529366 551826 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Are there any technical advantages to ELF or PE? < 1566529392 50841 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :there are big technical advantages to arbitrary section support, which I'm not sure ELF's predecessors had < 1566529416 596958 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :I am pretty sure PE does not support that. < 1566529418 180153 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :do you mean ELF vs. PE, as opposed to ELF and PE compared to their predecessors? < 1566529423 347837 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I meant ELF vs. PE. < 1566529443 168992 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :PE is a Windows variant of COFF. < 1566529453 352414 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :COFF is the binary format ELF was built to improve upon. < 1566529508 802607 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Among other things, PE isn't really built to handle relocations in the way that ELF does... < 1566529520 883087 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :How do you mean? < 1566529521 770382 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :You can do relocations, yes, but they're all textrels. < 1566529533 372052 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :PE relocations are weird < 1566529551 503450 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Does that mean modifying the text section? < 1566529556 846123 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :On x86, each DLL is built for a given base address, and if it has to be located somewhere else you get a process-specific copy in memory. < 1566529573 223614 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :before ASLR the default was for each individual executable and library to choose a preferred base address and relocations would only happen if they overlapped < 1566529583 542782 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but if they did there would be a need to relocate everything < 1566529588 725938 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :On x86_64, the code's just intrinsically PIC, so this doesn't happen < 1566529597 348219 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :like, every address in the code needs changing < 1566529700 201298 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, after reading up a bit on PE, I have decided it is insane < 1566529738 309026 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ELF has been adopted by most operating systems, not just Linux (although Mac OS X uses its own thing) < 1566529768 564519 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :ELF, while somewhat more complex, isn't a bad format, and it's suitably general that it is likely to just work for your use cases. < 1566529783 366966 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :PE does support arbitrary sectiions, though < 1566529796 580028 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :PE supports specifying your desired stack size, which ELF doesn't seem to. < 1566529806 505671 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :But it seems there may be a GNU extension (which Linux ignores so it's irrelevant). < 1566529818 434883 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats seems useful < 1566529839 216099 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Oh, huh. < 1566529900 147037 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, I should've thought to look there. < 1566529908 118819 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :PE files can contain an icon! That's a big advantage. < 1566529987 525307 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I don't see a reason an executable program should be more than one file by default. < 1566529996 344140 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Including .so files with your program just seems ridiculous. < 1566530034 166717 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I do like the Windows resource mechanism, although only for the purpose of providing metadata for use by other programs (typically shells and the GUI equivalent of shells) < 1566530047 837988 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Windows uses the same general mechanism for lots of purposes, some of which are insane < 1566530066 242692 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I know someone who includes information about command line arguments in an ELF section. < 1566530068 348225 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :"this is my icon" seems like a reasonable use though < 1566530090 654441 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: I think there should be a machine-readable command line arguments standard < 1566530105 268175 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I agree. < 1566530228 175847 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :fwiw, the icon system on Ubuntu (and presumably other distributions?) appears to allow the desktop theme to override icons < 1566530253 964944 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :which is mostly used for generic icons like "text editor" that multiple programs are allowed to use < 1566530311 484497 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I think the program shouldn't need icons, and just the text is good enough mostly < 1566530383 963157 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Yeah, that's Freedesktop behavior I think. < 1566530412 442547 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :"ownership" of programs seems to be very different on different OSes < 1566530431 58243 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :for example, Windows < 8 used to organize programs on the Start menu by manufacturer < 1566530449 866474 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and they're probably still organised that way in Program Files < 1566530478 611918 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :whereas the FHS suggests chopping them up into pieces, storing each file in a directory appropriate to its purpose < 1566530509 390288 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :The FHS is also assuming most of the FS hierarchy is owned by the OS. < 1566530536 146983 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :If it's a completely third-party program it's supposed to be in /opt/foo, where it's owned by the program, or in /usr/local, where it's owned by the system administrator. < 1566530608 754861 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ooh, that's a good way to express the difference betwen /opt and /usr/local < 1566530646 458604 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this implies that packages should aim for /usr if being uploaded to the OS package manager, and /opt if being sideloaded, right? < 1566530661 178145 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(with /usr/local being for things that were built manually) < 1566530755 288861 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :I think so, yeah. < 1566530782 96356 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :http://orenwatson.be/v0tgil.htm#vocabpics < 1566530822 38351 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'm confused. Is that supposed to be a phonetic spelling? < 1566530859 103108 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, this isn't an English thing, never mind. < 1566530865 36105 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :it's vötgil, a IAL that's so bad it's hilarious < 1566530895 902962 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :and therefore, I have started learning and using it and making resources about it < 1566530911 566585 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :whoa, https://en.wikipedia.org/wiki/ALGOL_58 < 1566530920 39203 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I didn't know there was such a thing as ALGOL 58. < 1566530950 461406 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Have you considered the following novel thesis: < 1566530955 303357 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Good things are better than bad things. < 1566530960 458539 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :When was the first actual compiler for ALGOL made < 1566530971 961590 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :\oren\: This is... not a good language. < 1566531000 102389 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :"Every word in Vötgil has exactly three letters" < 1566531006 540312 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :wait till u see the grammar < 1566531009 208040 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Ah, I _see_, you're doing Toki Pona only less well < 1566531049 94050 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :nah the grammar has infinite recursion,unlike toki pona < 1566531074 879077 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Wow, that grammar is actually pretty shit < 1566531136 686953 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :also it differs from toki pona in having lots of words for manmade objects < 1566531152 180701 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :And in not having much of a point, good or bad < 1566531169 884539 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :(I mean, Toki Pona is silly, but at least it has a reason for being the way it is) < 1566531180 216198 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and Minecraft support? or does Toki Pona have that too? < 1566531195 552666 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Like, it looks like it's coming from someone who only knows English, but thinks they're gonna be clever by being overly simplistic about it. < 1566531204 350580 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :I think there is a mincraft localizationfor toki pona < 1566531237 926358 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Hah, caaaalled it. The vocab is all supposed to be English-cognate. < 1566531249 437750 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :well, the funny thing is, it looks like english up until you interpret eisenmann literally < 1566531275 25038 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :he says, e.g. a descriptor always goes before the word it describes < 1566531285 918855 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :so you have to say the bird red is < 1566531368 944842 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :and a preposition goies between the words it modifies < 1566531397 36426 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :which means a preposition has to attach to the verb, *before* the direct object < 1566531426 142577 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :lol < 1566531469 591461 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :So, either the grammar works nothing like he intends, or he is just bad at describing the grammar in a clear way. < 1566531476 680619 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :I make with wood a house < 1566531483 641920 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wow that grammar is bad < 1566531522 866064 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :the grammar is based on me interpreting eisenmann literally and paying no attention to his example sentences < 1566531539 213144 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :That is at least the more interesting version. < 1566531547 117990 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Because his examples seem to suggest "lol it's English" < 1566531553 686865 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :because if I went by his examples it would just be english < 1566531578 795220 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :he's since moved on to breadspeak < 1566531592 293208 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :(yes, that's the name of his current conlang) < 1566531619 116699 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :something seems odd about a conlang whose vocabulary is so English-inspired < 1566531680 202637 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :I mean,volapük was also full of clipped english words < 1566531703 680629 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :with some german ones like klig (war) < 1566531710 4676 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Esperanto is a kind of consensus-Indo-European, which makes more sense < 1566531821 192569 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Though consensus-Indo-European as viewed by a Russian speaker, which is a bit weird phonotactically. < 1566531862 350207 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :Another interesting thing is vötgil has morpemic roots for such meanings as "foot" "pound" "dollar" "mile" and "gallon" < 1566531931 824493 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ACTION is wondering if it would be possible for a conlang to actually be a con, as in confidence trick < 1566531962 753185 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :What, like Interlingua? < 1566532031 602865 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566532279 600454 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Ping timeout: 250 seconds < 1566536343 533928 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: quit < 1566537965 813557 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Does your text section have to be called .text? < 1566538328 214115 :moony!moony@hellomouse/dev/moony PRIVMSG #esoteric :As far as i'm aware, i don't think so? Why not test < 1566538414 862962 :oerjan!oerjan@sprocket.nvg.ntnu.no JOIN :#esoteric < 1566538503 525605 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566538579 109052 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, it's certainly not true for executing ELF files, since sections are ignored entirely. < 1566538590 471335 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I was wondering whether there's some situation where some linkers expect it. < 1566538801 583643 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Ping timeout: 276 seconds < 1566539627 429664 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric : it's interesting that it miscounted by 5 initially? <-- that's because you didn't use `1 initially, so there was no 1/3: in it < 1566539785 704365 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :iow, `1 and `2 share the same chopping into lines, `2 just starts displaying the second one. < 1566539906 172661 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :`cat bin/2 < 1566539906 914011 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​\` "$@" |& sport 2 < 1566540766 980983 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Hmm. < 1566540777 641089 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Shouldn't `2 handle that case? < 1566542040 936116 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566542510 854288 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :if it did, then it would break if you cycle back to line 1 because now it's longer than the cutoff < 1566542541 149763 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It could break that line into two lines and then show line 3. < 1566542550 429923 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That's certainly not confusil. < 1566542556 100535 :oerjan!oerjan@sprocket.nvg.ntnu.no PRIVMSG #esoteric :CERTAINLY < 1566544390 500709 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566545339 609676 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566549060 190672 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 248 seconds < 1566549168 176215 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1566549794 984381 :AnotherTest!~turingcom@ptr-82l26zcdc6imrwoapg3.18120a2.ip6.access.telenet.be JOIN :#esoteric < 1566550087 504345 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566550583 936093 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566552581 453197 :oerjan!oerjan@sprocket.nvg.ntnu.no QUIT :Quit: Later < 1566553880 66640 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 JOIN :#esoteric < 1566553912 871704 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566554488 617572 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566554490 683595 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: right, and that UB rule of C is why we can't write the statement of 3SP as just "a[a[a[x++" in C, < 1566554506 613773 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :as just "a[a[a[x]]]++" in C, < 1566554517 835292 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and this impacts some other simple one-instruction languages too. < 1566554665 218023 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: no, a.out is no longer supported by the linux kernel. this is recent enough that you may be running an old enough kernel in which you can compile an a.out executable, but the harder part may be to install a libc that works with it. < 1566554681 667196 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I don't think I've ever seen an a.out executable alive, I only read about them in history books. < 1566554821 926050 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :video game loading times => I think if the loading time matters in first place, then the game is loading something wrong, eg. having long repeated unskippable cutscenes such that speedrunners reset the game rather than wait for the cutscene, or frequent crashes or freezes or hardlocks that you can recover only by restarting the game < 1566554973 461 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :pikhq: the hard drive driver is in the kernel because the kernel needs it to boot, and the file system driver is in the kernel because people demand swapping into files so we can't swap the file system driver out "https://esolangs.org/logs/2019-08.html#lqVb", plus also to limit permissions of file access, so that a process can't just read and write < 1566554973 407701 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric : every file it wants to. < 1566555010 223647 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :for a GPU, I'd prefer if most of the driver was in userspace, with only as much in kernel space as required so that the prorgam can't do something malicious, and that if the program crashes, the kernel can reset the gpu to a usable state < 1566555055 445625 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :that still means some nontrivial driver in the kernel, but I would prefer if all other things were in userspace libraries installed by my distribution. < 1566555141 988704 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and note that even for the file system, mkfs and fsck and tune2fs and fdisk are still in userspace < 1566555206 216802 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :writing the two file systems plus two fs extensions that you burn onto CD or DVD, plus all the knowledge about writing audio CDs, those are also all in userspace < 1566555247 521556 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the kernel knows how to read file systems from a CD or DVD because we want to boot rescue systems from them and possibly even run live systems from them < 1566555433 757901 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :" There are a few other standard ABIs that are only available via dynamic linking, like DNS and user lookup." => yes. and do you know which part of glibc had a critical buffer overflow bug? the one that parses numerical ip addresses. so if you had DNS lookup statically linked into executables, then all my old executables would still be vul < 1566555434 217263 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :nerable even after I have debian update glibc with the security patch. that, or I'd have to have debian update every fricking executable that has DNS lookup inside it, which is a lot these days. < 1566555463 373418 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :there's a good reason that those nontrivial parts of glibc, which don't need to be inlined or anything, those are in a dynamic library. they should be. < 1566555542 763379 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and debian is right to put only one copy of every library on my machine, as a dynamic library, as much as possible, not just to conserve disk space, but to be able to automatically update those dynamic libraries with ABI-compatible updates, and they'll work immediately after exec, even for prorgams that I've compiled myself. < 1566555616 750144 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and I've seen DNS lookup reimplemented, yes, and in that particular case it can even make sense because libc doesn't provide a non-blocking interface, but there are broken reimplementations that don't interpret your config files the way they should, in which case you get subtly broken and hard to debug problems in any non-default configuration < 1566555723 11650 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :also, I would like to keep the kernel small so that I don't have to pay for features I don't use in locked kernel memory, because not every addition can be put into a swappable module, and people keep breaking the swappability < 1566555755 641469 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :we used to have kernels that were just one megabyte long, I'd like that back < 1566555778 516919 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :(one megabyte long with full reiserfs support) < 1566555827 582960 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :glibc is a mess and every time I have to read the code for anything in it I'm sad. < 1566555832 605812 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :" and of course there's the issue of security updates too" => excatly < 1566555847 943808 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Still not as sad as when I have to read anything in /usr/include/c++/, of course. < 1566555852 249455 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: yes, it is, I'm not saying you should put everything in glibc, more like that you should put everything in good userspace libraries < 1566555873 309547 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: why? do you get underscore sickness? < 1566555881 504509 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Underscores are only a small part of it. < 1566555895 427156 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :If there were good userspace libraries I'd be more sympathetic to that advice. < 1566555906 307491 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :don't worry, it will get worse when the macros will have to work around that ((void)a,b) can now call an overloaded operator if b is a fancy type < 1566555966 335370 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Why are you saying not to worry because it'll get worse? < 1566555972 203862 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I'd prefer for it to get better. < 1566556077 218918 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :" …maybe something like WebAssembly ... being designed to be portable over anything else" => didn't they promise that about Java too? each of the past versions of Java that is? < 1566556152 802313 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :WebAssembly is surely a better prospect than the JVM because its memory model is an array of bytes instead of a heap of garbage-collected Java objects. < 1566556257 568283 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :" Including .so files with your program just seems ridiculous" => that's because more than one program can use the same .so, and also I can update a .so without updating the main program or backwards < 1566556416 895628 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I hate Toki Pona < 1566556437 522743 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I think it's because of the LGPL or because of everything being bad and people just doing whatever. < 1566556599 996371 :cpressey!~cpressey@5.133.242.4 JOIN :#esoteric < 1566556787 939288 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :shachaf: I don't think it's because of LGPL that libc is bad < 1566556946 450081 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :People get things to work and don't care that the result is ugly because, well, they work. < 1566556974 862283 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: sure, I know, I work with computers too, I know how it goes < 1566556976 759303 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :This is by no means unique to software. < 1566557004 339192 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the next project is always urgent, there's never time or motivation to clean up the previous one to work properly < 1566557039 214092 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: sure, but I don't want to know how every other industry works. I want to be able to drink beer and eat sausage, which is why I don't go to the factories where those are made. < 1566557050 145757 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Why people think they need more and more new versions of C, though -- that, I'm not sure of. < 1566557094 857360 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Aha. At least C18 was basically a bugfix update. This makes me relatively happy. < 1566557147 549084 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :C2x looks like a trainwreck though. < 1566557150 338625 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: the original C was tailored for the computers that existed back then. C99 made it official that the sqrt function, which calls *one* instruction, doesn't have to update the thread-specific errno. It and C11 also add a bit more modern floating-point maths stuff like that, which I think is good. < 1566557190 783208 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :They also added clear threading semantics, which didn't exist before, plus threading and mutex+condvar and atomic primitives to have yet one more standard of those. That part is still fine. < 1566557251 517429 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :That they also added variable size arrays was probably a mistake. The designated initializers was probably a reality check because the linux kernel team decided that they will be using it and aren't letting it go, so it was best to just standardize it rather than leave it as a gcc extension. It's not like msvc cares about the C standard anyway. < 1566557278 510200 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I don't know anything about C18. < 1566557346 231088 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I'm only going by what I saw when glancing at Wikipedia articles. < 1566557386 819992 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :Oh yeah, they also added those msvc-specific "safe" library function thingies in the standard, where if you use memcpy you get a warning, and instead you have to pass the size argument twice to be sure it doesn't run over the buffer size or something. < 1566557446 942407 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :That's also nonsense, but again, msvc implements it by default anyway and MS will force their own coders to that standard, everyone else can still use the normal functions and suppress their warnings, so it's not like it matters what the C standard says. < 1566557486 196795 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :It's really the tricky threading and pointer semantics and that sort of thing where the C standard matters, because that's what people will look up there. < 1566557539 447765 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :For some extra functions or missing functions, the compilers or libraries can always say that they don't implement that, but if everyone used different pointer aliasing semantics or different threading rules, that would be a chaos. < 1566557583 499393 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :What C needs most is better static analysis, to actually prevent the buffer overruns and use-after-free's and so forth. < 1566557609 607675 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: I don't think that's the task of C. that's the task of higher level languages like rust. < 1566557659 499223 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Erm well, then you could say, what the world needs is to stop using C so much. < 1566557684 702553 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: no, some people can use C just fine without making their code full of stupid bugs < 1566557691 301148 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :not me, but some programmers can < 1566557708 233846 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :all the linux kernel people mostly manage it too < 1566557749 950340 :xkapastel!uid17782@gateway/web/irccloud.com/x-vyskkqkooyubleul JOIN :#esoteric < 1566557753 410544 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :you don't want to force everyone to have to prove to the compiler that their code is right, because sometimes they (eg. the linux kernel guys) need to optimize something so much that they really can't write a machine-readable proof < 1566557783 269858 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :most of the time, when I write code, I don't mind the bounds-checked and memory safe operations, even if they're slower < 1566557810 860522 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :for the few cases when I do need to optimize the code, I can override those checks, in rust as well as anything, or write the inner loop in C or C++ < 1566557824 934831 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I'm of the opinion that if you need to optimize it *that* much, you probably should just use assembler anyway < 1566557840 953320 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but if someone mostly wants to write code where he doesn't want to write proofs, then it's fine if they want to use C < 1566557847 679407 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I don't recommend it to most people, but some people do manage it fine < 1566557892 925270 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566557903 617228 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: I disagree, there is an intermediate stage where the compiler can produce the right code if I use the right (possibly nonportable and likely machine-specific) incantations < 1566557921 364094 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but sure, sometimes you want to write the code directly in assembler, as ais523 says < 1566557945 973226 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :still, to even be able to interface the assembler code with your high-level code safely, you need a language with an unsafe interface, like C or similar < 1566557962 908284 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :wob_jonas: No, people ship .so files with their executables because of the LGPL. < 1566557982 831551 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :it would be really inconvenient to do the boundary part if all you had was mandatory memory-safe high-level languages and machine code < 1566557983 241793 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :cpressey: They work but they don't work well. < 1566558002 297536 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :you'd effectively need to define the rules of C, perhaps without the compiler and concrete syntax, to do it < 1566558008 240914 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :to even describe the interfaces < 1566558035 377373 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and note that gcc can do inline assembly where stuff is passed to assembly code through specific registers, and even condition flags now < 1566558040 268685 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :which really isn't trivial < 1566558061 216671 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :(the gcc syntax is a bit awkward, but if you deal with writing your own assembly code, you can learn it too) < 1566558067 447263 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :`? =ccc < 1566558069 64641 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​=ccc? ¯\(°​_o)/¯ < 1566558102 134572 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :`? =@ccc < 1566558103 142383 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :​=@ccc is a great innovation in gcc 6, kept top secret, where inline asm statements can return a value in the carry flag on x86_64. See https://gcc.gnu.org/gcc-6/changes.html which keeps this secret, https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Extended-Asm.html , https://marc.info/?l=linux-kernel&m=143786977730804 . < 1566558125 469561 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :^ that's one of the secret incantations, the other is the syntax to pass a variable to inline asm in a specific register < 1566558224 568269 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but more specifically, some of the time I want to write loops of explicitly vectorized code, or code with unsafe memory accesses, but I don't want to deal with the register assignment or scheduling part, in which case a C or C++ compiler with machine-specific code orks better for me than writing any assembler < 1566558248 423465 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I have done this in my previous job for image processing stuff < 1566558320 945724 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and if you know what you're doing and willing to take the risk of premature optimization or pessimizing your code, then sure, write assembler code if you want < 1566558330 462386 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I may also meet a case when I need to < 1566558593 450298 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Right, everyone who isn't in a position where they need to hand-vectorize code to meet their performance requirements needs to stop using C. < 1566558635 366326 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: I was using C++, and not portable one either < 1566558657 91717 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :one that basically tells which AVX instruction to use < 1566558676 666989 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and optimized for the AVX instruction set < 1566558792 679547 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :hopefully soon I'll be able to write that directly in rust < 1566558813 863112 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :they already have a decent backend for the compiler < 1566558829 903452 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and they added some of the x86-specific stuff < 1566558867 299366 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :not as good as C++ for that sort of thing yet, but improving < 1566558881 55484 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :(it just needs a fucking printf) < 1566559021 948110 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566559042 159786 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :"you don't want to force everyone to have to prove to the compiler that their code is right" -- No, actually, as the person who is going to *use* the software, I kind of *do* want that < 1566559113 220844 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: most of the software I write is throwaway one used for research that nobody else will run on their machine < 1566559128 776428 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I care about that use < 1566559156 543935 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and care about the kernel and image editor and video compressor and other programs doing all their nonsense efficiently too < 1566559162 996176 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :i love that rust ships with a complainer < 1566559187 959552 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :not the browser, or the tax filing software, mind you < 1566559198 388454 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :myname: perl does too, it's an old idea < 1566559202 380476 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :doesn't usually help much < 1566559214 467300 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :well, depends on which complainer you mean < 1566559218 928396 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :perl ships with only one of them < 1566559234 876079 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :rustc of course ;) < 1566559238 306944 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: ah but are you willing to pay a reasonable price for that? < 1566559240 793900 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :do you mean the one that gives the long explanation for error messages, or the lint-like tool? < 1566559275 75909 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :mainly the type- and memory-checker < 1566559279 177721 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :love it < 1566559292 369612 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :myname: sorry, I mean the former is rustc --explain, the latter is clippy < 1566559305 753853 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but apparently you just mean that rustc gives decent error messages < 1566559306 808843 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: For the time being, I think proving code correct is one to two (decimal) orders of magnitude more time consuming that just writing it. < 1566559319 45888 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :don't worry, it will no longer be able to keep it up once they make the generic system powerful enough < 1566559328 688460 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the two features are exclusive < 1566559331 771038 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :wob_jonas: i mean that rust enforces you to write clean code by design < 1566559348 832251 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(And more difficult too) < 1566559387 943495 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :myname: no, it doesn't enforce. it lets you write clean code if you want to, but also lets you override the safety checks if you're willing to learn about all the UB rules and magic low-level stuff (MaybeUninit, UnsafeCell, etc), which are very different from the C++ ones < 1566559396 555567 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :that's what I like in it < 1566559405 232127 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :python is sort of like that too by the way < 1566559460 943919 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the fricking indents are still putting me off about python, but I've determined that it's possible to extend its syntax to allow normal braced code, in a compatible way. I should implement it, install it to my machine so I can do proper python one-liners from the shell command line, < 1566559474 14678 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :install it to HackEso, document it, and submit it to the python guys to perhaps get it adapted officially. < 1566559508 307213 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I mostly ignored python because the indents bothered me so much, but now that I took a look at it, I see it's become a good language (admittedly it took some time, just like with rust and C++) < 1566559542 573949 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :i hate the errors i make in python < 1566559580 48698 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :like, "foo"+bar with bar beint a number will throw an error. i kinda get that, but i hate when it happens < 1566559631 214090 :int-e!~noone@int-e.eu PRIVMSG #esoteric :wouldn't it be grand if there was a type checker to catch those... < 1566559640 594187 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: tests are also more time-consuming to write than code (though perhaps not a full OoM). In the absence of a proof, I'll settle for tests. < 1566559673 685980 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :It's when there's no proof and no tests I start to really worry, because that means there might not even be a specification < 1566559675 153249 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :int-e: that's my point. a type-checker would be great. or just auto-converting to a string, maybe with a message in stderr < 1566559685 370219 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :and with no specification, what are you even doing < 1566559685 647260 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: Yeah I'm afraid tests will remain state of the art for some time still. < 1566559691 103786 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :but no, python decides to play along until it doesn't < 1566559734 701998 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: Well, if you can prove some important, smallish properties of the code, that's a start. Type systems, basically, are that, aren't they. < 1566559769 10905 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :is prooving code in production really something people do? < 1566559790 319215 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :myname: Yes. < 1566559791 975372 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: (simple, HM-alike) type systems are a sweet spot because for the most part you just have to write down the assertions and can leave proofs to the compiler. < 1566559831 889266 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :cpressey: interesting.have to have a look if there are useful frameworks for that < 1566559834 698328 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :myname: Amazon something something AWS, Microsoft something something USB stack, I'd have to find the references < 1566559838 287556 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :cpressey: but there's also such a thing as too many tests. have you ever manged to run the ghc testsuite or the gcc testsuite? < 1566559853 926176 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: Dependent type systems leave that sweet spot behind (type inference doesn't work anymore) so I'm rather skeptical of those. < 1566559862 48622 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I haven't. I tried, but they take a very long amount of time to run. < 1566559894 788745 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: Liquid Types are a sweet spot between dependent types and HM :) < 1566559902 735873 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :i assume haskell to be relatively easy to proof first order properties for < 1566559942 746669 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :i don't know where to even start for something like java without a full-blown model checker < 1566559947 12424 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :some software does it well, where it has a smaller testsuite and a full testsuite. in some sense gcc does that too, with its three-stage compile: it compares the second and third stage binaries to each other, ignoring a few bytes that are allowed to differ, and they must be identical. < 1566559957 813405 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: hmm new keyword for me < 1566559976 377050 :int-e!~noone@int-e.eu PRIVMSG #esoteric :or possibly buzzword, need to see about that < 1566559985 209682 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: https://wiki.haskell.org/Liquid_Haskell < 1566560015 371157 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :what's that... < 1566560078 727730 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ok < 1566560175 595070 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566560195 685470 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Meh, it mentions "stack". :-P < 1566560203 977156 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: I agree "Liquid Types" is a horribly-hip-sounding name. < 1566560222 185389 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Short for "logically qualified types" I believe < 1566560284 89512 :int-e!~noone@int-e.eu PRIVMSG #esoteric :https://www.microsoft.com/en-us/research/video/liquid-types/ agrees < 1566560310 520503 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :myname: The emphasis in industry is usually on reactive systems, so, model-checking state-machine-like descriptions is popular (TLA+ and Microsoft's P language come to mind) < 1566560382 436558 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :okay, should be fairly easy there < 1566560413 330559 :int-e!~noone@int-e.eu PRIVMSG #esoteric :"What Are 10 Examples of Liquids?" - "liquid types" is not the perfect search term. < 1566561986 666825 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I want to wait until there is more to read on one of two files I have open. C: use select(). Haskell: you must write Concurrent Haskell program now, oh and make sure to use STM because MVars have race conditions < 1566562109 357471 :int-e!~noone@int-e.eu PRIVMSG #esoteric :?! < 1566562109 479622 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric :Maybe you meant: v @ ? . < 1566562120 1361 :int-e!~noone@int-e.eu PRIVMSG #esoteric :"MVars have race conditions"? < 1566562155 261183 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: Maybe you mean deadlocks? < 1566562159 352551 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :do you have any specific questions? < 1566562174 415796 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :"They are appropriate for building synchronization primitives and performing simple interthread communication; however they are very simple and susceptible to race conditions, deadlocks or uncaught exceptions." < 1566562191 432450 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I don't get the race conditions angle. < 1566562196 684097 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :if you use them wrong, sure < 1566562219 939506 :int-e!~noone@int-e.eu PRIVMSG #esoteric :The other two, yes, they are true. < 1566562224 918670 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :All of Control.Concurrent seems to read like this. "We have these but you shouldn't use them, really" < 1566562303 62105 :int-e!~noone@int-e.eu PRIVMSG #esoteric :You have to think about lock dependencies with MVars. < 1566562319 610380 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566562340 468511 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Assuming you use MVars as locks. MVars are also mailboxes, message queues of length 1.) < 1566562375 642600 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :you also have to think of deadlocks when you use them as queues < 1566562393 247418 :int-e!~noone@int-e.eu PRIVMSG #esoteric :MVars are *simple*. STM is a huge black box. < 1566562393 835218 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :travelport has a full-blown api for quite some time where the documentation just says "this is not supported by any of our data backends" < 1566562400 417443 :int-e!~noone@int-e.eu PRIVMSG #esoteric :wob_jonas: sure < 1566562477 710901 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :All I need is select(). There used to be an hSelect, they got rid of it. There's a package on hackage which is an FFI to select which is probably the best I can do. < 1566562515 923620 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: So, again, I agree with that quote, except for the race conditions part, which to me suggests a completely broken MVar implementation. < 1566562528 105868 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :do you have any opinion about eta/frege? < 1566562630 507624 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Ping timeout: 276 seconds < 1566562691 793257 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: Or maybe I do have an idea. It used to be the case that "readMVar" could block (namely, if you use the MVar as a 1-slot queue, so there can be several pending writers.); maybe "race condition" alludes to that kind of phenomenon... < 1566562760 74549 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ACTION sighs < 1566562808 933043 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :or people just write bad code with MVars, which has race conditions that put their own high-level data in a corrupt state < 1566562825 827767 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Concrete scenarios rather than keywords would help. The keywords are just scary and cannot be filled with content unless you spend a lot time thinking up scenarios... or happen to know them already.) < 1566562844 116931 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :yeah, specific questions are better < 1566562854 799816 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :myname: I'm not generally a fan of languages that are slight variations on other languages. < 1566562855 356003 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :especially with code samples and expected output and stuff like that < 1566562866 909272 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Do we have real-life stories of STM livelocks? < 1566562898 139441 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Or maybe just a scenario where the rts spends 99% of the time in managing the STM transactions, so nothing productive happens? < 1566562926 775457 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :cpressey: valid point, but both are not really aimed to be slight variations afaik < 1566562937 947229 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Or is STM so complicated that it's only used by people who know what they're doing... and who, in particular, keep their transactions short so that this is a non-issue? < 1566562987 11311 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :myname: I'm thinking more of Fay and Elm which are only "Haskell-like". I got the impression Frege was "not actually Haskell" too, but it might be the wrong impression. (Eta's website make my browser complain about phishing risks or something) < 1566563038 715592 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :"Frege is a Haskell for the JVM." ... What does it mean to be "a Haskell"? < 1566563056 915338 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: In any case I'm perfectly happy to use MVars in simple cases, like waiting for a worker thread to finish, or managing exclusive access to a mutable data structure. < 1566563059 987898 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :If it was "Frege is a Haskell compiler for the JVM" that would be fine < 1566563127 843190 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: Maybe you should learn you a Haskell for the greater good! < 1566563150 393280 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(typing this is painful) < 1566563344 459576 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :both attempt to compile haskell for the jvm with different approaches < 1566563357 898859 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :frege does overload the dot operator, for example < 1566563369 243457 :myname!~myname@ks300980.kimsufi.com PRIVMSG #esoteric :like, foo.bar is different from foo . bar < 1566563399 668005 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I guess I could just take a semi-non-trivial Haskell program and try to run it in Frege and see if it complains or not. < 1566563489 273107 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: I would believe that STM scares off everyone who is not already rather expert at writing concurrent code, yes < 1566564059 559344 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru JOIN :#esoteric < 1566564726 957334 :Vorpal!~Vorpal@unaffiliated/vorpal QUIT :Ping timeout: 258 seconds < 1566566582 392590 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I'll probably just use Control.Concurrent.Chan when it comes to it, it should be fine (single reader, multiple writers, nondeterminancy is okay). < 1566566796 382623 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: Yeah the only problem with Chan is that it doesn't prioritize the reader when the channel gets full (a key difference to channels in Erlang). < 1566566871 288708 :int-e!~noone@int-e.eu PRIVMSG #esoteric :STM doesn't solve that one, and bounded channels are comparatively crude. < 1566567197 438014 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: I don't see any mention of what it means for a channel to become full, in the Chan docs < 1566567281 88868 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :In fact it mentioned the word "unbounded" < 1566567293 189565 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Yes. Which hides a problem... < 1566567331 607146 :int-e!~noone@int-e.eu PRIVMSG #esoteric :...namely, if your reader cannot keep up with the producers, you have a (kind of) memory leak at your hands. < 1566567356 675987 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Ehm. Technically yes. In practice, this is unavoidable though, right? < 1566567383 736207 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Sure but you can be more clever about it, if your scheduler knows about channels. < 1566567422 706627 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :In some cases, the producer can block, or detect the problem and drop frames < 1566567423 536485 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I'm not saying it's a big problem. Just something to be aware of in a corner of your mind if you rely on channels heavily :) < 1566567482 992339 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Sure. < 1566567500 646135 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(And something that I found surprising when I first heard about it.) < 1566567529 396971 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(And that's the main reason I bring it up. It could be a pretty nasty surprise.) < 1566571168 242321 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1566571239 992305 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: wait, how is a[a[a[x]]]++ UB? the increment has to happen after all the array dereferences < 1566571291 329751 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: isn't it an UB if it increments a[x] or a[a[x]] because the indexes coincide? < 1566571312 911571 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :hmm wait, maybe it's not < 1566571328 479768 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :no, because the dereference is sequenced before the increment as the increment uses its output < 1566571335 971565 :int-e!~noone@int-e.eu PRIVMSG #esoteric :that needs a language lawyer, I think < 1566571473 334098 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :cpressey: in terms of "just write your code in asm", I'm often tempted, but ideally I want to write a high-level description of the code so that it's portable and easy for a human to see it's correct, but want it to compile down to efficient asm on at least one commonly used platform < 1566571486 322256 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I mean this is in an area where I can hardly imagine a compiler going wrong, but I have no clue what the UB rules say about this. < 1566571493 240268 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :let me look this up, maybe this applied only to my language where the main loop included a[a[1]++]-=a[a[1]++], which was an UB because it sometimes had to write into a[1] with the -= operator < 1566571520 415159 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :but I think the post and preincrement has or had extra UB rules more strict than for other assignments < 1566571529 983382 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : (it just needs a fucking printf) ← there's print!(), which isn't quite the same; are you doing one of the few things where the difference matters? < 1566571532 520657 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :so that they can be rearranged by the optimizer < 1566571554 471728 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: /that/ example is UB because the ++s aren't sequenced with respect to each other < 1566571641 791171 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : cpressey: For the time being, I think proving code correct is one to two (decimal) orders of magnitude more time consuming that just writing it. ← I've heard 1 order for enough testing to be fairly confident it's correct, 2 orders for an actual proof that it's correct, 3 orders for a proof that it's correct that can be machine-verified to not contain a fallacy < 1566571662 934472 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I've actually written code in the last form, it taking 1000 times longer than expected seems about right < 1566571699 182510 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(the programs being verified were very simple and would normally take less than a minute to write) < 1566571722 915392 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I think I include some amount of debugging and testing in the "just coding" category already. < 1566571754 276524 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes, but you can have a project that's heavily tested and yet still be confident that it's wrong < 1566571755 3619 :int-e!~noone@int-e.eu PRIVMSG #esoteric :And sure, the factor is worse for programs that you already know how to write :P < 1566571760 552084 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :because the spec implies a lot of hidden complexity < 1566571785 976096 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :"compile all C programs correctly", for example, is a nice simple spec at the surface level, but when you dereference the reference to the C standard, suddenly it's hard to be confident that your spec is correct < 1566571806 147000 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Because, ironically, you will *not* know in detail *why* they are correct; you'll be replicating an internalized pattern instead. < 1566571834 599639 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :anyway, this is why I think declarative languages are so valuable: the program /is/ the spec, so the only way the program can be wrong is if the spec is wrong or if you translated the spec into code incorrectly < 1566571868 763688 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :ais523: I think that's also kind of a weakness though. You can't check a program against itself. < 1566571872 179447 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(I have also written formally verified code. It wasn't trivial, and I think a factor of 100 is pretty much what we got.) < 1566571884 748592 :int-e!~noone@int-e.eu PRIVMSG #esoteric :machine-checkable. < 1566571911 150371 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :(Well ok you CAN, but it's a tautology.) < 1566571915 200971 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :cpressey: I guess you'd need to get two different people to write the /specification/ and see if the programs matched < 1566571923 712111 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :which would be useful, because buggy specifications are very common < 1566571935 390922 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I did a thought experiment about FizzBuzz recently < 1566571946 523544 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :ais523: Basically yes, it's kind of like coding theory. 3 specifications would be ideal, you could go with majority-rules < 1566571949 89440 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Oh, target language makes a difference... we exported code to Haskell in the end, and purity helps. < 1566571965 463532 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :(Kind of expensive though) < 1566571969 325849 :int-e!~noone@int-e.eu PRIVMSG #esoteric :If you want mutable data structures, things get worse. < 1566572015 604217 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you start with a specification like "for all the numbers from 1 to an input n, output 'Fizz' if the number is divisible by 3, 'Buzz' if the number is divisible by 5, the number itself if it's divisible by neither 3 nor 5, and a newline unconditionally" < 1566572036 988610 :int-e!~noone@int-e.eu PRIVMSG #esoteric :"the program /is/ the spec" <-- in many cases that's only true if you don't care about performance... < 1566572057 381395 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :then you start thinking about issues like, "OK, where does this output go? What file format is it in? Is this meant to be readable by humans or computers? What about internationalization?" < 1566572087 897618 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :"say there's an error halfway through the fizzbuzz, do we delete the output so far? leave it there and make the program resumable somehow?" < 1566572102 785541 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :"how do we parallelise this?" < 1566572112 387017 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :int-e: I see that as a deficiency in the languages more than anything else < 1566572113 631561 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: ok, I think you're right about the 3SP case, that one is fine to be written as a[a[a[x]]]++, even if the indexes may coincide < 1566572147 747374 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :and so are other cases where there's only one assignment and that's the outermost expression < 1566572175 565746 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :ais523: Well, you can definitely give a specification which doesn't entail any particular efficient implementation strategy; how should such a language pick one? < 1566572190 317143 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :at least according to the C11 rules < 1566572199 843995 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :I mean, ideally, yeah, you could give it hints in comments or something, but - far from an easy problem < 1566572222 175843 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ais523: Uh, I disagree, at least given our current imperfect state of compilers. I want, as a programmer, control over the algorithm used to solve a task. < 1566572264 894348 :int-e!~noone@int-e.eu PRIVMSG #esoteric :So that will be part of the program... < 1566572274 425333 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :cpressey: I don't think it's impossible that computers will eventually be better at that than humans < 1566572286 693231 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Maybe in an ideal world where we could solve the halting problem my attitude would be different ;-) < 1566572313 357076 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :one thing I noticed a while back is that if you just run all possible algorithms in parallel (assuming finitely many), and terminate when one ends, you get the best possible big-O performance (and a terrible constant factor) < 1566572326 498659 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Yeah that's a classic. < 1566572329 687179 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and thought this might actually be viable in a golfing language < 1566572361 278342 :int-e!~noone@int-e.eu PRIVMSG #esoteric :It usually comes up in the following form: "We can write a TM that solves SAT in polynomial time iff NP \subset P" < 1566572410 157864 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(the point with NP being that we can check in polynomial time whether we've succeeded) < 1566572420 462815 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :by generating programs and executing them in parallel until one of them comes up with a valid solution, then you don't care how it was made < 1566572446 615381 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :also I'm pretty sure you don't mean \subset there, you probably mean either = or \subseteq < 1566572450 874429 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(which is something you need, really; "all possible algorithms" need to be filtered for correct algorithms for your task at hand, somehow) < 1566572456 928846 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(which are equivalent in this case because P \subseteq NP) < 1566572484 547359 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Yes I mean \subseteq. < 1566572509 847484 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I wanted to write NP (= P :P < 1566572542 698450 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ACTION suddenly realises that (= and =) as operators would not be ambiguous in a C-like language, although )= would be < 1566572556 701578 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(which Isabelle/jEdit expands to ⊆.) < 1566572566 896645 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :err, LALR(1)-ambiguous, that is; )= might be unambiguous if you have a generael parser < 1566572634 965744 :int-e!~noone@int-e.eu PRIVMSG #esoteric :. o O ( a =( b && c )= d <-- it would be horrible nontheless ) < 1566572654 860898 :int-e!~noone@int-e.eu PRIVMSG #esoteric :*nonetheless < 1566572658 626404 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Still waiting for the esolang that uses Earley or CKY to find all possible parses and interpret them all in parallel < 1566572659 866207 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :int-e: you wrote =( not )=, which is what the unambiguity relies on < 1566572685 101536 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :cpressey: that's probably only interesting if this is somehow the only way to gain TCness < 1566572699 769584 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ais523: did I :) < 1566572713 68867 :int-e!~noone@int-e.eu PRIVMSG #esoteric :anyway... let's drop this < 1566572723 102402 :int-e!~noone@int-e.eu PRIVMSG #esoteric :it's a tangent of a tangent anyway < 1566572733 353831 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(not speaking geometrically) < 1566572734 289682 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :isn't that what the channel's about? :-) < 1566572757 465409 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :geometrically, a tangent to a line is the line itself, and tangents are lines, so you can't stack them more than one level < 1566572794 50243 :int-e!~noone@int-e.eu PRIVMSG #esoteric :indeed. hence the qualification. < 1566572818 293722 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :anyway, I had ideas about a declarative golfing language which makes a guess about what order to run the commands in < 1566572854 745642 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :basically by knowing what the computational complexity of each possible flow pattern for each command is, then trying to avoid bad complexities < 1566572888 177599 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this isn't perfect because the program might have a quadratic or even exponential blowup in data size, but it's going to do a lot better than most existing declarative languages if I ever get around to writing it < 1566572931 149626 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :finding the path of least complexity sounds rather complex by itself < 1566572960 358668 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :yes, but that's O(whatever) in the size of the program, not the size of the data it processes < 1566572985 145152 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this explains where the controversy over the computational complexity of regex-with-backreferences comes from < 1566572998 732504 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you can find articles online saying it's NP-complete, but I think it's in NL < 1566573003 539544 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: Hmm. "Insulting instruction in step $rs.\n" <-- do you recognize this? < 1566573015 286709 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :int-e: SMETANA? < 1566573028 173615 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :smetana.pl, rather < 1566573045 710711 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and the reason is that running an unknown regex-with-backreferences runs in NP time (you can encode 3SAT in it), but with any known regex, you can compile it to run in NL time with respect to the length of the string it's running on < 1566573057 235078 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: right < 1566573062 931887 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: you're good :) < 1566573084 146801 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Very few of the languages I've designed have used the term "step" < 1566573091 863213 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :So that was a big hint. < 1566573107 852530 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :a very long time ago, I started writing an esolang-based text adventure < 1566573124 617809 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it had a set of stairs where the steps were SMETANA commands, and swapped around as you tried to climb them < 1566573151 711037 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(but you could go up or down, making it into a puzzle) < 1566573227 822768 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :ais523: regex-with-backreferences is CFL, isn't it? < 1566573271 977388 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :"ais523 suddenly realises that (= and =) as operators would not be ambiguous in a C-like language" => the latter would be ambiguous in C++, where you can write (mytype::operator=) as an expression < 1566573280 408285 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :cpressey: no, it's more powerful; it can solve a^n x a^n x a^n which a CFL can't < 1566573334 601236 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this feels morally equivalent to a^n b^n c^n, but regex-with-backreferences can't solve that due to the weird nature of backreferences < 1566573339 271979 :int-e!~noone@int-e.eu PRIVMSG #esoteric :cpressey: I'm really playing with https://esolangs.org/wiki/SMETANA_To_Infinity! but I was wondering about the precise differences between that an your original :) (It turns out that the original is case sensitive, really insists on the order of statements, but is less space sensitive than S2I.) < 1566573380 274016 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :"makes a guess about what order to run the commands in / basically by knowing what the computational complexity" => there are libraries where if you multiply more than two matrices, then it looks at their sizes, and multiplies them in a way that it's (hopefully) the fastest. something similar happens in SQL with complex statements, especially joins < 1566573380 768234 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :. < 1566573393 798725 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :hmm, mini-opinion poll: if a language is generally whitespace-sensitive and has semantically meaningful newlines, should it insist on its input file ending with a newline? < 1566573419 317380 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :codegolf.stackexchange.com persuaded me to allow omission of the final newline in BuzzFizz, but I'm not sure that's correct < 1566573503 375381 :int-e!~noone@int-e.eu PRIVMSG #esoteric :This is non-technical, but I hate it when cat-ing a text file messes up my next prompt, so I like final newlines. < 1566573505 686022 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that said, "text files must end with a newline" is an archaic rule that very few people seem to care about nowadays < 1566573515 534389 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Yes I could use a different prompt, but that's besides the point.) < 1566573522 847836 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: do you want to handle including a file into another file, or processing more than one input file (eg. given as multiple command-line arguments)? < 1566573545 536872 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :fwiw, I think shells should add a new newline if the prompt wouldn't start at column 1, but you can't do that by configuring a typical shell, you'd have to patch it < 1566573569 247632 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: not in the case of BuzzFizz, it's a fairly constrained esolang; but I guess I'm also interested in a more general answer < 1566573577 234037 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :#include normally has a newline after it anyway, though < 1566573580 547799 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :if you are handling only one file, then definitely don't insist on it ending on a newline. if you handle multiple, then it's probably best to not require it, and consider file boundaries as boundary of line too, but I'm less certain and may depend on the syntax < 1566573602 73915 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :Page feed is underrated, that's all I'll say < 1566573617 735788 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :"should add a new newline if the prompt wouldn't start at column 1" => you sure can, you just have to put the right thing into PS1 < 1566573623 445874 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :cpressey: you mean formfeed? or is this a new control character I'm unaware of? < 1566573653 361653 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm still disappointed that people don't use nextlines as their newline character, but I can see why that happened (in most encodings, a nextline is two bytes long, which is a major drawback) < 1566573653 620948 :int-e!~noone@int-e.eu PRIVMSG #esoteric :ais523: in practice it's probably least controversial to just treat the end-of-file as a newline unless immediately preceded by a newline. < 1566573668 920428 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :#include normally has a newline after it anyway, though => the C syntax does, sure, but the TeX \includefile is weirder < 1566573679 184087 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: I can't think of a terminal control code that would have that effect non-interactively < 1566573685 182691 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru PRIVMSG #esoteric :on control characters: one time I was enamored by US, RS, GS and FS (an alternative to CSV) < 1566573727 731403 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :or hmm… what about a cursor-right of the terminal width - 1, then outputting a space, then a goto-start-of-line? depending on how wrapping worked in the terminal, that might work < 1566573738 283212 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :even then you need to know the terminal width to do it, though < 1566573759 523309 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :arseniiv: I can see RS and FS as a CSV alternative < 1566573765 245866 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :what do the other two do, though?# < 1566573784 407314 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: uh, "\b\r\n" sort of, but I'm not sure it works in the first line < 1566573815 127074 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :more robust would be printing as many spaces as the width of the terminal, then a "\r", but you need to know the width of the terminal for that < 1566573816 803430 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :\b\r\n is equivalent to \r\n on just about everything, I think < 1566573840 792014 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :just tested gnome-terminal < 1566573842 784644 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: hmm, I don't remember how that worked < 1566573877 475837 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: yeah, cursor-right with an arg count might work better < 1566573882 190779 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru PRIVMSG #esoteric :ais523: if I named them correctly, US (unit separator) should be the tightest one and FS (file separator) the least binding one; RS is record separator and GS is group separator, I thought it meant groups of records, let me look up a link… < 1566573882 548522 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :no wait < 1566573886 563076 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :'as many spaces as the width of the terminal, then a "\r"' does work, just tested that < 1566573887 989737 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I dunno < 1566573911 811901 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :arseniiv: oh, file separator not f ield separator < 1566573915 731863 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so US and RS, then < 1566573933 884936 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :arseniiv: \x1F is for the biggest blocks, \x1C is for the smallest blocks, in sequence for the two between, forget their names < 1566573940 286516 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I'm upset at people not caring about the C1 control codes < 1566573959 622708 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :there's a Unicode encoding, UTF-1, that's designed to allow them all to be given literally < 1566573963 641609 :cpressey!~cpressey@5.133.242.4 PRIVMSG #esoteric :ACTION nods gravely < 1566573965 323710 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but it's not very popular < 1566573977 926116 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru PRIVMSG #esoteric :ais523: wob_jonas: found it: https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text thought wob_jonas has said it already < 1566574009 605186 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :NO < 1566574015 572469 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :arseniiv: no, I got them backwards < 1566574016 937967 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :I'm stupid < 1566574023 962964 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :it's backwards from how it should be < 1566574034 287102 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :\x1C is for the largest blocks and \x1F for the smallest < 1566574045 378946 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :that always annoys me so I should have remembered < 1566574050 365449 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :sorry < 1566574051 621615 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru PRIVMSG #esoteric :I was mixing them up once I think too < 1566574077 844345 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: it suddenly struck me that Perl's $; is logically a unit separator character, but it's actually file separator that's used as the default value < 1566574087 951841 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :I guess that makes clashes less likely, but it's also less semantically correct < 1566574117 767804 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :hmm < 1566574180 509600 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru PRIVMSG #esoteric :also you may laugh but I once thought that UTF-1 (by some dark magic) is a 1-bit encoding < 1566574257 262613 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :that doesn't seem particularly implausible? < 1566574264 65626 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru PRIVMSG #esoteric :UTF-8, UTF-16, UTF-32 and UTF-7 all contributed to this, yeah < 1566574280 308962 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru PRIVMSG #esoteric :though I think I hadn’t known the last one then < 1566574283 34978 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :you'd just find some arbitrary-width numeric encoding (e.g. Fibonacci encoding), use it to encode all the codepoints, and concatenate < 1566574306 442991 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :there's also a UTF-5 < 1566574326 842555 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(also a UTF-6 but, confusingly, it's a 5-bit encoding) < 1566574345 106920 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and UTF-9 which was an April Fools RFC < 1566574380 469913 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : The use of UTF-32 under quoted-printable is highly impractical < 1566574455 461736 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :huh, UTF-1 is actually more efficient in space usage than UTF-8 up to and including U+38E2D < 1566574459 693131 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :UTF-5 and UTF-6? I hadn't heared of those < 1566574484 859057 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :basically because it doesn't limit continuation bytes to a particular range, they can be ASCII or extra start bytes < 1566574527 696351 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :err, printable ASCII < 1566574584 712809 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :control codes, both C0 and C1, are encoded as unambiguously as possible because UTF-1 was intended for use with decoders that used control code sequences to switch between encodings and/or as metadata for themselves < 1566574585 709674 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :e.g. terminals < 1566574645 351961 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ACTION suddenly realises that literally encoded C1 control codes are never prefixes of valid UTF-8 codes, so you could in theory write a terminal that supported them in all locations except mid-UTF-8-character < 1566574656 829011 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: which one is the standard (perhaps ECMA) that gives the full general grammar for terminal-style escape codes? I know some of the basics, but not the full grammar for it < 1566574671 873153 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Ecma-48 < 1566574709 712309 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :although it's confusing to read because it gives character codes in decimal-coded-hexadecimal < 1566574739 682884 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it refers to Ecma-35 for encoding handling, though, and Ecma-35 compatibility is why things like UTF-1 were invented < 1566574751 116022 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ais523: alternately make the terminal take utf-8 encoded C1 codes (when it's generally reading utf-8 input, obviously), which also works except in the middle of utf-8 characters < 1566574800 583664 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :wob_jonas: I was planning to do that anyway < 1566574809 753228 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but it's not particularly useful because C1 codes can be encoded using C0 codes < 1566574818 984959 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :(for the benefit of 7-bit terminals) < 1566574823 463976 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :and that only makes them a byte longer < 1566574839 471923 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this is the technique that's almost universally used nowadays to send C1 codes to terminals, as it's no longer than the UTF-8 encoding would be < 1566574852 867198 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :sure < 1566574936 305564 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's why ESC [ is so common in terminal control codes used practically, because ESC [ is the C0 encoding of the C1 control code CSI < 1566574969 56192 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :yeah < 1566575219 267810 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ooh, I /finally/ understand the distinction between presentation and data cursor movement commands < 1566575228 529153 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :it's to do with right-to-left languages < 1566575243 217259 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the presentation cursor movement commands move, e.g., "left" or "right" < 1566575257 913867 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :the data cursor movement commands move, e.g., "forwards" or "backwards" through the text < 1566575269 786594 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :so the correspondence between them is different when over LTR text and when over RTL text < 1566575332 313751 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: sorry for my connection < 1566575345 143478 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1566575549 685941 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :ok, chapter 5.4 in ECMA 48 is relevant. < 1566575643 449033 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :oh god < 1566575646 216789 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :it's control codes hour < 1566575651 804071 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :any good esolangs based on ECMA-48? < 1566575679 683456 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :arguably Ecma-48 /is/ an esolang < 1566575684 379099 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :apart from that, probably not < 1566575733 510002 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :kmc: keyboard codes that the terminals emit for various combinations of settings and keys and modifiers < 1566575779 17720 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :kmc: do you know why, in vim, if you press escape to exit insert mode then press O to open a new line in insert mode, it doesn't immediately react? < 1566575804 991123 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :the combination works, but only updates the screen at the next keypress < 1566575826 717224 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :this puzzled me for a while < 1566575837 412391 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 PRIVMSG #esoteric :afk for an horu < 1566575841 272269 :wob_jonas!25bf3cd1@gateway/web/cgi-irc/kiwiirc.com/ip.37.191.60.209 QUIT :Remote host closed the connection < 1566575975 777475 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :because keys like the arrow keys that don't correspond to ASCII often send control codes starting with ESC O, and vim is trying to disambiguate < 1566575991 577870 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :libuncursed does the same thing, but with a timeout, and the timeout is very short nowadays so it's hard to notice < 1566576055 33514 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :yeah < 1566576072 107259 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :this is also why you can get control code junk in your irssi session if you're using mosh and it reconnects after a long drop < 1566576081 457937 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :mosh will dump a bunch of control codes at irssi all at once < 1566576100 66755 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and irssi paste detection will interpret that as a literal paste < 1566576107 724439 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :why it thinks i want to paste control characters, I do not know < 1566576121 159565 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :maybe mosh should have an option to slow it dow < 1566576121 869126 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :n < 1566576152 4851 :int-e!~noone@int-e.eu PRIVMSG #esoteric :oh < 1566576174 494042 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(I believe this is occasionally happening with plain ssh as well) < 1566576193 794262 :int-e!~noone@int-e.eu PRIVMSG #esoteric :on laggy connections (yes those still exist) < 1566576226 346298 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :ugh, the "this is a paste" control code should have been standardised so that paste detection doesn't have to be done based on timing < 1566576237 136641 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :int-e: I know, I use one < 1566577824 413150 :cpressey!~cpressey@5.133.242.4 QUIT :Quit: A la prochaine. < 1566577852 600200 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566578473 277255 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566578705 935471 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566579300 557439 :FreeFull!~freefull@defocus/sausage-lover JOIN :#esoteric < 1566579993 277513 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566580446 996684 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566580992 362718 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Oh, is _that_ why that happens < 1566581028 536629 :pikhq!~pikhq@97-118-196-215.hlrn.qwest.net PRIVMSG #esoteric :Ugh, the terminal interface sucks. < 1566581538 187342 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :One big scow about mosh is how I can press some keys while not connected to the network and it buffers them forever. < 1566581549 386514 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :And there's no ay to clear the buffer. < 1566581612 823873 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :pikhq: yeah that's terrible < 1566581617 397012 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :shachaf: yeah < 1566581634 84835 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :terminals are one of those "why have we still not come up with a better way to do this" things < 1566581642 408953 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :but I guess the benefits are not worth the legacy breakage < 1566581650 327474 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Terminal software is scow in the first place. < 1566581656 73414 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :GUIs are TG (in theory) < 1566581657 951408 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :after all, things mostly work now. it's not cutting edge < 1566581664 961047 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :shachaf: I believe in text for input, GUI for output < 1566581668 226062 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :in most cases < 1566581674 320915 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :or hybrid < 1566581690 509086 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Well, you were talking about irssi < 1566581712 396851 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :It's just ridiculous that the idea of pasting text with a newline that somehow turns into sending a message is even a thing that has to be worked around. < 1566581733 410580 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :in-band signaling is certainly scow < 1566581748 499304 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :yeah < 1566581896 747527 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Of course GUI software has its own issues. < 1566581989 804876 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :everything is bad < 1566582051 860950 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :I mean you could make a IRC program where you press ctrl-S to send or somehting < 1566582153 415738 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :What about an IRC program where you press enter to send but when you paste text containing a newline character it doesn't trigger that? < 1566582175 316645 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh, another thing about terminal programs is that there are a bunch of keys you just can't detect correct. < 1566582188 247622 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :That might be possible < 1566582203 185959 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :On most systems in raw mode, enter is \r < 1566582232 725821 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :so assuming pasted newline is \n < 1566582243 944573 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :you could distinguish them < 1566582295 151579 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :And if your text contains \r? < 1566582327 592232 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :These are workarounds for a thing that shouldn't even need workingaround. < 1566582329 325197 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :then you're fucked. there's no out of band signals in ssh afaict < 1566582363 590902 :\oren\!~oren@ec2-35-175-217-128.compute-1.amazonaws.com PRIVMSG #esoteric :direct keyboard acess remotely is a bad idea anyway IMO < 1566582402 364743 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566582587 259552 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :`ysaclist < 1566582587 898425 :HackEso!~h@techne.zem.fi PRIVMSG #esoteric :ysaclist: boily shachaf < 1566582955 946399 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566583147 235339 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu JOIN :#esoteric < 1566583182 94571 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric : Ugh, the terminal interface sucks. ← it has precisely one problem, which is that the Esc key sends the Esc character code, which is a prefix of some other character codes < 1566583194 683446 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :no, there are a lot of other problems with terminals < 1566583216 114225 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :termios is a whole mess < 1566583217 852732 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :this wouldn't be a problem if people expected to use Esc as a way of typing terminal control code sequences, but people normally think of it as a key on its own, thus an ambiguity < 1566583230 48174 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and there's ISO-2022 locking control codes, which are terrible < 1566583249 345367 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :"the "this is a paste" control code should have been standardised" => it is. there are at least two different such codes standardized. < 1566583258 462228 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :the great thing about standards < 1566583262 898291 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :oh, I guess being able to /type/ XON/XOFF is a problem too < 1566583302 775422 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :\oren\: there are plenty of signals that are /meant/ to be out of band, the issue is that you can type them anyway < 1566583419 144190 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :ais523: anyway, I knew about the \eO thing, the vim behavior puzzled me because all I noticed is that sometimes the O command behaves like that, and didn't notice that it's when the previous keypress was \e < 1566583468 45221 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :come to think of it, perhaps the underlying issue is UNIX's conflation of text and binary files < 1566583492 118089 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :C0 and C1 codes in text files are supposed to have a specific, standardised meaning (and in theory, the text file should contain specific byte sequences to identify itself as using them) < 1566583510 214461 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :whereas in a binary file, bytes with bits 5, 6, and 7 clear could mean anything < 1566583534 622218 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :no! I like all those things. and I like that control-M and enter type the same thing and I don't have to teach each terminal program individually that they are the same, and if I didn't like it, then I'd chnage the bindings of the terminal < 1566583566 222822 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :and I like being able to use the same programs for all sorts of files < 1566583620 392491 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :kmc: Are you still using Microsoft® Windows®? < 1566583670 559919 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I reinstalled Windows 7 this week. < 1566583699 558986 :int-e!~noone@int-e.eu PRIVMSG #esoteric :(Hmm, is that a smart thing to say on a publicly logged channel...) < 1566583761 707032 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :int-e: not particularly dumb, the windows-specific malware can tell it directly anyway, it needn't look on irc for that info < 1566583765 371614 :int-e!~noone@int-e.eu PRIVMSG #esoteric :"If Windows 10 has taught us one thing, it is that we hate updates." < 1566583803 521639 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :shachaf: yes < 1566583808 735518 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :™ < 1566583835 181717 :int-e!~noone@int-e.eu PRIVMSG #esoteric :The real reason is that it's the last cloud-free Windows. And it's just for games. < 1566584006 867865 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566584526 598741 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566585046 881932 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I boot to Windows once every few months which means does a trillion updates each time. < 1566585051 530333 :Hooloovo0!Hooloovoo@sorunome.de QUIT :Remote host closed the connection < 1566585070 846500 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I don't really understand why it takes so long to update. < 1566585529 671849 :Hooloovo0!Hooloovoo@sorunome.de JOIN :#esoteric < 1566586418 286108 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :shachaf: IIRC at least some versions of the Windows update algorithm are not O(n) < 1566586424 829073 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :but Microsoft didn't notice for ages because the constant factor was small < 1566586451 461179 :ais523!~ais523@unaffiliated/ais523 QUIT :Quit: quit < 1566587985 143373 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566588339 875046 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :[ 4^6 < 1566588340 493239 :j-bot!eldis4@firefly.nu PRIVMSG #esoteric :b_jonas: 4096 < 1566589686 996545 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :On ifMUD there is a @paste command in case you are making a multi line paste. (Another alternative would be to use other software with xclip to add a prefix to each line.) < 1566589789 46348 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(However, there is then @endpaste and @quit both of which override the paste mode.) < 1566589811 471531 :int-e!~noone@int-e.eu PRIVMSG #esoteric :. < 1566589909 601427 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :. < 1566589965 998151 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566590125 160084 :rain2!~My_user_n@unaffiliated/rain1 PRIVMSG #esoteric :whats up < 1566590249 973067 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Ping timeout: 252 seconds < 1566590460 602909 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566590492 978281 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :"it has precisely one problem, which is that the Esc key sends the Esc character code, which is a prefix of some other character codes" I also think that is what is sometimes the problem, and would not be the problem if people expected to use Esc as a way of typing terminal control code sequences. < 1566590519 937907 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :but nobody ever would do that < 1566590535 921645 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :(One thing to do would be for escape to have a longer code when application keyboard mode is enabled.) < 1566590605 911571 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :The problem is the meaning of [ in Vim, I think. < 1566590652 569580 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :kmc: zzo38 would! < 1566590668 831053 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :yes < 1566590673 51777 :int-e!~noone@int-e.eu PRIVMSG #esoteric :"but nobody ever would do that" is on the list of famous last words. < 1566590723 983542 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :true < 1566590759 381684 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :If you're proposing alternate designs for terminal interaction you've already lost. < 1566590786 761717 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :The main reason to use terminals that work the way they do is compatibility with 1970. < 1566590792 73876 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I think it is fine how the escape works; rather, some programs try to do it something else, that is a problem. < 1566590901 656974 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :The command [D list all defines, but instead if it could mean, move cursor left and reenter previous mode (if escape is pushed in command mode then it will set command mode as the previous mode and remain in command mode), then maybe it will work. < 1566591891 963709 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :zzo38: I don't think so. IMO for vi, the main problem is what the escape key does in insert mode. I generally use control-C to exit insert mode, which is not quite equivalent but mostly is. you could have control-C be completely equivalent (and some other key do what control-C does now) and not use escape at all. < 1566591901 70478 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :then escape would be used only to introduce control sequences. < 1566592019 299734 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :Yes, that would be another way to fix it. < 1566592151 705785 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 JOIN :#esoteric < 1566592324 204206 :Lord_of_Life!~Lord@unaffiliated/lord-of-life/x-0885362 QUIT :Ping timeout: 248 seconds < 1566592330 507725 :Lord_of_Life_!~Lord@unaffiliated/lord-of-life/x-0885362 NICK :Lord_of_Life < 1566592560 135704 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Guess what, I just pasted a command into my shell and it had a newline at the end so it got run! < 1566592580 872541 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :That was certainly my intended behavior, and not a misfeature or bad UI. < 1566592918 541346 :arseniiv!~arseniiv@94.41.19.60.dynamic.ufanet.ru QUIT :Ping timeout: 272 seconds < 1566593006 806317 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Man, I tried to compile a Rust program and it downloaded over 100 dependencies. < 1566593357 455688 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Also the directory size is 1.8G < 1566593619 768045 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :I've been writing Go for fun lately. It's got modules now. < 1566593640 673824 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Godules. < 1566594152 219417 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Remote host closed the connection < 1566594162 780081 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Oh man, I said "orientation" instead of "direction". < 1566594170 733915 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :v. embarrassing < 1566594270 60483 :atslash!~atslash@static.231.107.9.5.clients.your-server.de QUIT :Quit: This computer has gone to sleep < 1566594783 399602 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1566595671 947803 :int-e!~noone@int-e.eu PRIVMSG #esoteric :I think I have a SMETANA to Infinity! pre-quine... (pre-quine = program that generates a quine as its output) < 1566595728 902621 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :So all quines are pre-quines? Why are pre-quines interesting? < 1566595742 497416 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :int-e: scary < 1566595743 475443 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Because you can be somewhat sloppy in generating them. < 1566595767 770467 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :smetana to infinity sounds like a hard language to make a quine in < 1566595780 355457 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: In this case, the final quine will have 5-digit labels (so starting from 00001) but the pre-quine doesn't, it starts at 1. < 1566595783 391378 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :I mean there probably exists a quine, but to actually construct one is hard < 1566595845 778894 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :int-e: about how long is it? < 1566595864 420575 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Did you ever play Zork: Grand Inquisitor? < 1566595881 687492 :int-e!~noone@int-e.eu PRIVMSG #esoteric :b_jonas: 1.3MB for the pre-quine... it's still computing the final one. It's... slow. < 1566595913 29856 :int-e!~noone@int-e.eu PRIVMSG #esoteric :b_jonas: There's lots of room for improvement. < 1566595916 307872 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :sure < 1566595931 886406 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :tell us when you've verified it (by running twice and comparing) < 1566596042 656315 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566596073 915221 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :b_jonas: I wonder if anyone ever managed to say a fungot quine < 1566596074 140846 :fungot!~fungot@2a01:4b00:82bb:1341::2 PRIVMSG #esoteric :b_jonas: hello ski :) ( actually i don't think you could like rephrase it? do you normally see? < 1566596092 603493 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :one that doesn't use hat commands that is < 1566596101 931552 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :^help < 1566596102 14342 :fungot!~fungot@2a01:4b00:82bb:1341::2 PRIVMSG #esoteric :^ ; ^def ; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool < 1566596131 524976 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :because it would be easier to write one with ^ul < 1566596191 915592 :b_jonas!~x@catv-176-63-24-165.catv.broadband.hu PRIVMSG #esoteric :https://esolangs.org/wiki/Underload#Quine lists some quines that give a starting point < 1566596200 483598 :int-e!~noone@int-e.eu PRIVMSG #esoteric :slow: It'll execute 2,460,020,224 swaps to process 35072 bits of data (twice). < 1566596250 27412 :int-e!~noone@int-e.eu PRIVMSG #esoteric :Judging by the progress so far it'll take an hour or two, and then about the same time again to verify. Fun! < 1566596326 593108 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Ping timeout: 276 seconds < 1566596734 344821 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :Underload is normally my goto language for botquines, if they support it < 1566596735 350335 :xkapastel!uid17782@gateway/web/irccloud.com/x-vyskkqkooyubleul QUIT :Quit: Connection closed for inactivity < 1566596744 159547 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :^ul ((^ul )SaS(:^)S):^ < 1566596744 285871 :fungot!~fungot@2a01:4b00:82bb:1341::2 PRIVMSG #esoteric :^ul ((^ul )SaS(:^)S):^ < 1566596759 667868 :ais523!~ais523@unaffiliated/ais523 PRIVMSG #esoteric :because it's really easy to write quines in it < 1566597424 388110 :ais523!~ais523@unaffiliated/ais523 QUIT :Ping timeout: 244 seconds < 1566597584 559729 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :fungot: Please repeat this sentence, including the prefix "fungot:". < 1566597585 82326 :fungot!~fungot@2a01:4b00:82bb:1341::2 PRIVMSG #esoteric :fizzie: you could look into chicken. csc gets a lot randomer soon. away for a while google had a paper on an experimental sun pipeline i was looking fro a short cut. < 1566597587 923677 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :Aw. < 1566597652 689072 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :fizzie: Please repeat this sentence, including the prefix "fizzie:". < 1566597672 303215 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :fizzie: Please repeat this sentence, including the prefix "fizzie:". < 1566597689 7852 :fizzie!fis@unaffiliated/fizzie PRIVMSG #esoteric :fizzie: Please repeat this sentence, including the prefix "fizzie:". < 1566597883 965682 :AnotherTest!~turingcom@ptr-82l26zcdc6imrwoapg3.18120a2.ip6.access.telenet.be QUIT :Ping timeout: 252 seconds < 1566599040 529139 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I suppose all quines would be pre-quines, but, not all pre-quines are quines. Is that it? < 1566599140 491704 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :what's a pre-quine < 1566599213 710641 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :zzo38: That's what I suppose also. < 1566599229 470392 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :A pre-quine is apparently a program that outputs a quine. < 1566599302 788185 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :i see < 1566599309 88203 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :well then a quine is certainly a pre-quine < 1566599322 978432 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 JOIN :#esoteric < 1566599325 291753 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :and you can make a quine into a not-quine pre-quine by prepending a nop or something < 1566599329 110610 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :so yes what zzo38 said is true < 1566599344 280380 :kmc!~beehive@li521-214.members.linode.com PRIVMSG #esoteric :are there interesting things to be said about pre-quines? < 1566599386 107060 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I don't know. My guess is that it might depend on the programming language in use, but generally not. < 1566599577 995415 :tromp!~tromp@2a02:a210:1585:3200:100e:bbc6:3da5:acd4 QUIT :Ping timeout: 252 seconds < 1566599617 125061 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :Are there interesting esolangs where you don't have the property that you can easily make a program longer/different with something like a nop? < 1566599730 960593 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I don't know. < 1566601677 839110 :int-e!~noone@int-e.eu PRIVMSG #esoteric :b_jonas: 101 minutes. I think I'll use an alternate method of confirmation (namely, drop all those extra 0s that the quine generator put in and compare... which looks fine!) < 1566601751 960608 :int-e!~noone@int-e.eu PRIVMSG #esoteric :http://int-e.eu/~bf3/tmp/quine.s2i :) < 1566601852 563644 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I have a good programming language. It's called md5sum. < 1566601856 111658 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :You should write a quine in it. < 1566601904 401327 :int-e!~noone@int-e.eu PRIVMSG #esoteric :> exp (-1) < 1566601906 632381 :lambdabot!~lambdabot@haskell/bot/lambdabot PRIVMSG #esoteric : 0.36787944117144233 < 1566601921 226909 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: a priory that's the chance that such a quine even exists. < 1566602188 158815 :int-e!~noone@int-e.eu PRIVMSG #esoteric :shachaf: Oh for a fixed file name. If you can vary the file name the chances get better :) < 1566602206 241719 :shachaf!~shachaf@unaffiliated/shachaf PRIVMSG #esoteric :I was just typing that. < 1566602208 555542 :adu!~ajr@pool-173-73-86-191.washdc.fios.verizon.net QUIT :Quit: adu < 1566602404 259542 :zzo38!~zzo38@24-207-15-213.eastlink.ca PRIVMSG #esoteric :I thought by taking from standard input?