00:05:46 -!- adu has quit (Quit: adu).
00:44:34 <tswett[m]> So it turns out writing machine code can be kind of tedious.
01:43:53 <esowiki> [[Your Pillows]] N https://esolangs.org/w/index.php?oldid=64877 * A * (+1073) Created page with "[[Your Pillows]] are [[esoteric programming language]]s directly based off pillows. It is somehow influenced by [[Brace For Impact]] and [[Beatnik]]. ==Syntax of your pillows=..."
01:55:50 <esowiki> [[Ummm...]] M https://esolangs.org/w/index.php?diff=64878&oldid=59008 * A * (+190)
01:56:22 -!- adu has joined.
01:57:33 <esowiki> [[Your Pillows]] M https://esolangs.org/w/index.php?diff=64879&oldid=64877 * A * (+197) /* Instructions */
02:04:41 -!- FreeFull has quit.
02:35:01 <HackEso> The password of the month is int-e's job.
02:41:11 <int-e> `learn The password of the month is surprising.
02:41:14 <HackEso> Relearned 'password': The password of the month is surprising.
03:21:35 <esowiki> [[Talk:ACL]] https://esolangs.org/w/index.php?diff=64880&oldid=64862 * JonoCode9374 * (+138) /* Python Interpreter */
03:23:49 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64881&oldid=64870 * JonoCode9374 * (+449) /* Technical Regarding Interpreter */ Python interpreter done!
03:26:32 -!- xkapastel has quit (Quit: Connection closed for inactivity).
04:36:50 -!- doesthiswork has quit (Ping timeout: 248 seconds).
06:11:29 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64882&oldid=64766 * A * (-13424) Remove all of them; it is always visible in the page history.
06:12:11 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64883&oldid=64882 * A * (+632) /* Blocked */
06:12:44 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64884&oldid=64883 * A * (+3) /* Game */
06:14:21 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64885&oldid=64884 * A * (-337) /* Game */
06:23:53 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64886&oldid=64885 * A * (+905) /* Game */
06:24:09 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64887&oldid=64886 * A * (+17) /* One */
07:34:08 -!- Sgeo_ has joined.
07:37:07 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
07:37:20 -!- adu has quit (Read error: Connection reset by peer).
07:38:02 -!- adu has joined.
07:59:01 -!- Frater_EST has joined.
08:05:10 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
08:05:30 -!- Lord_of_Life has joined.
08:09:29 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64888&oldid=64887 * A * (+1170) /* One */
08:11:49 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64889&oldid=64888 * A * (+24) /* Game */
08:35:52 -!- cpressey has joined.
08:36:03 <esowiki> [[Deadfish Joust]] N https://esolangs.org/w/index.php?oldid=64890 * A * (+1732) Created page with "[[Deadfish Joust]] is a [[deadfish]]-based game, consisting of two contestants who attempt to modify an accumulator to make the accumulator as close to their value as possib..."
08:39:44 -!- Frater_EST has left.
08:40:07 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64891&oldid=64881 * Hanzlu * (+0)
08:41:16 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=64892&oldid=64889 * A * (-2414) /* Game (code golf in deadfish) */
08:47:33 <esowiki> [[Talk:Deadfish Joust]] N https://esolangs.org/w/index.php?oldid=64893 * JonoCode9374 * (+208) Created page with "= Contest controller = I might try and make a simple offline controller in python. ~~~~"
08:56:15 <esowiki> [[Talk:ACL]] https://esolangs.org/w/index.php?diff=64894&oldid=64880 * Hanzlu * (+721) /* Python Interpreter */
08:57:25 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64895&oldid=64891 * Hanzlu * (+40)
08:59:13 <cpressey> Good morning. How is brainfuck not a concatenative language?
09:00:14 <cpressey> Instead of taking a stack to a stack, each function takes (tape, control context) -> (tape, control context)
09:00:59 <cpressey> (I actually see where this breaks down, but it's interesting to think about nonetheless)
09:06:12 <Taneb> cpressey: have you seen https://esolangs.org/wiki/Pure_BF
09:07:22 <cpressey> Taneb: Not sure. Maybe, a long time ago.
09:08:13 <cpressey> So to do anything interesting with control context in a concatenative language, do you need to support storing function values somehow in the state that your functions work on?
09:12:03 <cpressey> I think the answer is "yes" in some weak sense
09:12:26 <cpressey> There is probably a lot of wiggle room in "somehow"
09:12:53 <Taneb> There's also some room in "interesting"
09:16:19 <cpressey> And even "concatenative" - I get the impression that a lot of concatenative languages are purely so
09:23:21 <cpressey> How about "second-order concatenative" - you have functions (stack -> stack), in monoids, but these monoids are embedded in an "outer" monoid where the functions are ((stack -> stack) -> (stack -> stack))
09:28:27 <cpressey> You could make it "look concatenative" by having the inner monoids seperated by a single | character or something (rather than being enclosed in some kind of brackets, which seems more conventional)
09:28:55 <cpressey> : and ; count as brackets, if you're Forth
09:30:40 <esowiki> [[Talk:ACL]] https://esolangs.org/w/index.php?diff=64896&oldid=64894 * JonoCode9374 * (+349)
09:44:15 <esowiki> [[Talk:ACL]] https://esolangs.org/w/index.php?diff=64897&oldid=64896 * Hanzlu * (+59)
09:47:15 <cpressey> Or maybe there are two disjoint sets of characters, "inner" and "outer".
09:47:22 <esowiki> [[Talk:Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64898&oldid=64893 * A * (+171)
09:47:41 <cpressey> The (stack -> stack) functions also need to... be stacked in a stack or something
09:48:07 <cpressey> This might be worth working out
09:48:35 <esowiki> [[Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64899&oldid=64890 * A * (+27)
09:50:28 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=64900&oldid=64796 * A * (+19) /* Y */
09:51:33 <esowiki> [[Joke language list]] M https://esolangs.org/w/index.php?diff=64901&oldid=64561 * A * (+75) /* General languages */
09:54:42 <esowiki> [[Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64902&oldid=64899 * A * (+294)
09:57:47 <esowiki> [[Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64903&oldid=64902 * A * (+166)
09:59:27 <esowiki> [[Deadfish Joust]] https://esolangs.org/w/index.php?diff=64904&oldid=64903 * A * (+66) /* Typing */
10:03:21 <esowiki> [[Deadfish Joust]] https://esolangs.org/w/index.php?diff=64905&oldid=64904 * A * (+17) /* Typing */
10:04:59 <esowiki> [[User:Hanzlu]] https://esolangs.org/w/index.php?diff=64906&oldid=64876 * Hanzlu * (+215)
10:05:23 -!- FraterEST has joined.
10:05:37 -!- FraterEST has left.
10:09:36 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64907&oldid=64895 * Hanzlu * (+118)
10:20:34 <cpressey> The second-order functions don't need to be stacked, there just needs to be a second-order identity function that can be second-order composed with other second-order functions
10:21:22 <Taneb> cpressey: is this related to higher dimensional category theory?
10:21:35 <cpressey> As soon as you see an "outer" character (representing a second-order function) you take all the first-order functions that you have been collecting so far ("inner" characters) and make a second-order function out of it
10:22:26 <cpressey> I'm sure someone could *make* it related to that if they tried hard enough
10:23:49 -!- wob_jonas has joined.
10:24:52 <HackEso> Pongify \ U \ Instant \ Destroy target creature. It can't be regenerated. Its controller creates a 3/3 green Ape creature token. \ PLC-U, C14-U
10:26:51 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64908&oldid=64907 * Hanzlu * (-65)
10:29:35 <cpressey> A monoid is a category with one object. Maybe this is a category with two objects.
10:30:07 <cpressey> That would be my bet, but I don't like category theory so I tend not to think in those terms.
10:33:59 <esowiki> [[Smalllang]] N https://esolangs.org/w/index.php?oldid=64909 * A * (+1381) Created page with "[[Smalllang]] is a joke [[esoteric programming language]] created in order to fullfill [[User:Hanzlu]]'s definition of a usable language, as it tries its best to make itself..."
10:35:41 <Taneb> Hmm, it's kind of like a 2-monoid (by analogy with 2-category)
10:42:12 <wob_jonas> ``` cd wisdom; find -type f -printf "%s %p\n" | sort -n # shortest wisdoms
10:47:29 <cpressey> https://cemulate.github.io/the-mlab/ is just as good as the nLab as far as I'm concerned.
10:58:39 -!- wob_jonas has quit (Quit: Ping timeout (120 seconds)).
11:03:44 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=64910&oldid=64179 * Hanzlu * (+160)
11:05:54 <HackEso> oerjän oerjän oerjän olsnër
11:06:09 <HackEso> https://hack.esolangs.org/repo/log/tip/wisdom/nak
11:21:10 <esowiki> [[User:Hanzlu]] https://esolangs.org/w/index.php?diff=64911&oldid=64906 * Hanzlu * (+155)
11:29:47 <esowiki> [[Joke language list]] M https://esolangs.org/w/index.php?diff=64912&oldid=64901 * A * (+50)
11:30:37 <esowiki> [[Smalllang]] https://esolangs.org/w/index.php?diff=64913&oldid=64909 * Hanzlu * (+454)
11:31:18 <esowiki> [[Smalllang]] https://esolangs.org/w/index.php?diff=64914&oldid=64913 * Hanzlu * (-2)
11:32:57 <cpressey> I think the category is just called <b>2</b>; two objects a, b and a single non-identity arrow a -> b
11:33:46 <cpressey> I *guess* that arrow corresponds to lifting a (S->S) into a ((S->S)->(S->S)) in this case
11:35:13 <cpressey> Unless...? Maybe there are more arrows than these here
11:41:58 <int-e> cpressey: hmpf. I thought 2 has no arrow at all
11:42:31 <cpressey> int-e: there seems to be some controversy about that: https://math.stackexchange.com/a/1227142
11:42:41 <int-e> Not that I care much. I regard category theory as unnecessary obfuscation.
11:43:03 <esowiki> [[Smalllang]] M https://esolangs.org/w/index.php?diff=64915&oldid=64914 * A * (+276) I can still use it to create an infinite loop. (Now I can't.)
11:43:27 <int-e> (because the only way *I* can make sense of it is to translate everything back into concrete categories)
11:43:59 <cpressey> I definitely prefer thinking in terms of algebraic structures myself
11:44:50 <esowiki> [[Smalllang]] M https://esolangs.org/w/index.php?diff=64916&oldid=64915 * A * (+43) /* Interpreter */
11:45:07 -!- aloril_ has joined.
11:45:19 <int-e> and that backtranslation stops working somewhere around natural transformations (probably still just fine) and adjoint functors :P
11:46:59 <cpressey> If I ever need them I know where to look for them
11:47:08 <cpressey> (I will never, ever need them)
11:47:30 <esowiki> [[Smalllang]] https://esolangs.org/w/index.php?diff=64917&oldid=64916 * A * (+69) /* Interpreter */ Error handling
11:47:44 <int-e> As last words go, these have a good chance of being true at that point...
11:48:08 -!- wob_jonas has joined.
11:48:08 <esowiki> [[Smalllang]] M https://esolangs.org/w/index.php?diff=64918&oldid=64917 * A * (+43) /* Interpreter */
11:48:41 -!- aloril has quit (Ping timeout: 268 seconds).
11:50:09 <int-e> . o O ( "Air? Where we're going we won't need ai--" )
11:53:37 -!- aloril_ has quit (Ping timeout: 268 seconds).
11:54:14 <esowiki> [[Talk:Deadfish Joust]] https://esolangs.org/w/index.php?diff=64919&oldid=64898 * A * (+2) /* Contest controller */ This is indeed odd.
11:55:41 <cpressey> I was thinking there might need to be another arrow, because the result of all this concatenating is going to be a function ((S->S)->(S->S)) but you probably want to run it on some input data, which would be an S, not an (S->S).
11:56:22 <cpressey> You'd want to be able to lift and, uh. Forget?
11:56:50 <cpressey> Or maybe you just lift the input instead
11:57:06 -!- aloril_ has joined.
11:57:42 <int-e> where is this going, all linear languages are concatenative if you build the parser state into the semantics?
11:58:39 <wob_jonas> int-e: there was some such parody about that, claiming that x86 assembly was concatenative
12:00:36 <cpressey> I think https://catseye.tc/article/List_of_Unfinished_Interesting_Esolangs#paneer is probably related to that
12:01:40 <int-e> hmm. all you need is a call-with-current-input
12:02:18 <int-e> So tromp's BLC is a simple candidate.
12:02:28 <cpressey> I wasn't planning to go anywhere near that far with this idea, I just want a second-order concatenative language right now
12:03:18 <esowiki> [[Smalllang]] M https://esolangs.org/w/index.php?diff=64920&oldid=64918 * A * (+29) /* Instructions */
12:03:47 <esowiki> [[Smalllang]] M https://esolangs.org/w/index.php?diff=64921&oldid=64920 * A * (+0) /* Instructions */
12:03:58 <esowiki> [[BLC]] N https://esolangs.org/w/index.php?oldid=64922 * Int-e * (+36) add redirect for semi-common abbreviation
12:04:08 <wob_jonas> I'd still like to see a language that is based on SKI calculus, the way that unlambda is, but uses something like Haskell's IO to do interactive IO
12:05:36 <esowiki> [[Smalllang]] M https://esolangs.org/w/index.php?diff=64923&oldid=64921 * A * (+12) /* Instructions */
12:06:42 <cpressey> wob_jonas: Would you be willing to settle for it being a DSL embedded in Haskell?
12:07:51 <wob_jonas> cpressey: I don't know, haskell being typed could be a problem. I'd like some basis of combinators (not necessarily SKI specifically) to be trivial to translate into it
12:08:09 <int-e> cpressey: The point I had in mind with BLC is that it's specified with a binary stream as input; the program is parsed from that input and the remaining input is passed to that program, so it already has "call with current input" built in.
12:08:12 <cpressey> I wrote a SKI interpreter in Haskell once but I've never been confident it's correct because I've never found a good collection of tests cases for SKI terms
12:09:01 <wob_jonas> yeah, nobody writes actual programs for those
12:09:23 <wob_jonas> perhaps some of the ones from the unlambda quine competition could help, but they use side effects so depend on the order of evaluation
12:09:25 <Taneb> I used to occasionally
12:09:25 <int-e> (Also, any concrete definition of (a) Kolmogorov complexity will probably have the same feature.)
12:10:01 <int-e> cpressey: And I know I'm going off a tangent.
12:12:57 <cpressey> int-e: Maybe not really. Like a TM, you don't really *need* to have input. You start off writing the data you want, onto the tape (or in this case, with a function (S->S) that returns a constant S)
12:14:13 <int-e> That's not really good for information complexity... there's too much inherent redundancy in Turing Machines themselves.
12:14:17 <cpressey> There was another tanget I was thinking about similar to this regarding infinite programs, and maybe Turing machines with fixed-length input tapes are not a bad idea
12:14:39 <int-e> So you're better off with just a string that you split into program and input.
12:15:26 <int-e> (Compared to embedding the input into the program, which may blow up depending on the model of computation.)
12:17:11 <int-e> I mean one of the properties that you want off Kolmogorov complexity is that the formalism you base it on only changes it by O(1).
12:18:21 <int-e> (Formalism = a concrete model of computation, which should be Turing-complete.)
12:27:22 <cpressey> What's to stop the program from treating the input as another program though
12:37:10 <cpressey> I think my thought was, the finite control of a TM is defined to be finite, so if you map your program to a TM, you know it's finite and that's fine. You can also map your program to a finite string and feed it as input to a TM, *but*...
12:37:56 <cpressey> ...a TM reads its input from its tape, and its tape is *not* finite, so if you somehow put an infinite program there, it would not reject that.
12:38:16 <cpressey> Or I mean, if it does not ever stop reading that input, you can't really blame it.
12:39:00 <int-e> Sure, that will happen.
12:41:24 <cpressey> I don't really remember what the implications of this that I cared about were, now.
12:51:18 <cpressey> Overall it has to do with "infinite programs" and whether you accept them or not. Is "the decimal expansion of sqrt(2)+sqrt(3)" an infinite program?
12:51:38 <cpressey> It's an algebraic number, I can communicate it finitely
12:51:57 -!- doesthiswork has joined.
12:52:01 <cpressey> If the interpreter wants to compute decimal digits of it to find out what to do next, that's its perogative
12:52:22 <int-e> it's an infinite string with finite description complexity
12:52:49 <cpressey> Chaitin's omega notwithstanding
12:52:54 <int-e> I see a type mismatch
12:53:09 <int-e> a) TMs are finite. b) TMs are not strings.
12:53:39 <int-e> Anyway, Chaitin only allows finite programs.
12:53:56 <cpressey> Usually when I write down a TM it's a string
12:54:24 <cpressey> BUt I think there's some confusion here
12:54:52 <int-e> And I think we're in a corner where it's valuable to be more precise.
12:55:24 <cpressey> OK. You can identify TMs with their finite descriptions. You can also identify them with the (sometimes) infinite string they write on their tape when you run them.
12:56:21 <int-e> So... the picture I have in mind is this: a) we have a Turing-complete model of computation. b) we have a prefix-free encoding of programs for that model. c) we consider strings p i where p is a program and i is the program's input.
12:57:14 <int-e> We also want all programs to be encoded so by König's lemma there are infinite strings that do not have a program as a prefix. Those are not infinite programs; they're just garbage :P
12:58:52 <int-e> (And all this happens over some fixed finite alphabet. {0,1} is a neat choice.)
12:59:14 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64924&oldid=64908 * Hanzlu * (+119)
12:59:28 * int-e is glossing over details like the map from the strings p to programs being effectively computable...
13:00:04 <wob_jonas> cpressey: how would the latter work? there are different turing machines that write different strings when they get no input
13:01:49 <wob_jonas> oh I see, I'm yellow in webchat, but still bluish gray in the esolangs.org logs
13:01:57 -!- wob_jonas has changed nick to lob_jonas.
13:02:42 <cpressey> wob_jonas: I only mean "for each TM you can look at the infinite string it produces" - I mean "sqrt(2)+sqrt(3)" and "sqrt(3)+sqrt(2)" generate the same infinite string of digits too
13:03:12 <lob_jonas> cpressey: yeah, but you said "identify"
13:03:15 <cpressey> Given the infinite string, you don't know which of those finite strings produced it.
13:03:31 <cpressey> lob_jonas: fine, I didn't mean identify, I'm sorry
13:03:42 <int-e> Yeah, identifying TMs with their output lands you in Rice territory.
13:04:25 <cpressey> I don't think it matters because I don't think I'm talking about what int-e is talking about :)
13:04:37 <lob_jonas> but admittedly some programming languages abuse -> for this
13:04:48 <lob_jonas> at least Haskell is prudent enough to put a backslash before
13:05:44 <int-e> cpressey: nobody wrote "associate"??
13:05:55 <int-e> cpressey: I mean except for you, and now me...
13:06:06 <cpressey> int-e: I was trying to think of a word that would have been better for me to use, than "identify"
13:06:41 <int-e> Yeah I probably wouldn't have objected to that :)
13:10:00 <cpressey> In a sense, yhe only infinite programs you need to worry about, are those that are uncomputable, because if they're computable, you can devise a TM to compute them, and write that TM as a finite string, and there's your finite program.
13:11:25 <cpressey> "In a sense" probably includes "If you're not also worrying about Kolmogorov complexity" in its meaning here
13:19:32 <int-e> I guess in a wisdom context we need to clarify which of the 5 senses we're talking about.
13:24:20 <HackEso> Balance \ 1W \ Sorcery \ Each player chooses a number of lands they control equal to the number of lands controlled by the player who controls the fewest, then sacrifices the rest. Players discard cards and sacrifice creatures the same way. \ A-R, B-R, U-R, RV-R, 4E-R, EMA-M, VMA-M, ME4-R, V09-M \ \ Balance of Power \ 3UU \ Sorcery \ If target opponent has more cards in hand than you, draw cards equal to the difference. \ P1-R, P3K-R, 8ED-R
13:25:55 <lob_jonas> "Right and wrong" is probably a future split spell
13:31:27 <int-e> . o O ( "Wrong, instant, 1B, choose one: counter target "Right" spell, or put a -1/-1 counter on target creature." / "Right, instant, 1W: Choose one: counter target "Wrong" spell, or: Put a +1/+1 counter on target creature." -- probably unbalanced, but what do you think of the mutual counter spell idea? )
13:32:06 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64925&oldid=64924 * Hanzlu * (+48)
13:33:49 <int-e> (It's not meant to be useful either, just for flavor.)
13:35:03 <lob_jonas> int-e: unbalanced in what sense? just the +1/+1 counter instant half alone would cost (W/G) alone, the other half would cost (B/R), making it a split card makes it a bit better because it gives you the choice, but not so much as to make it too cheap for 1B and 1W
13:35:26 <lob_jonas> and I think the Right would have to be the left half, strange as it may sound
13:35:44 <int-e> lob_jonas: I wasn't making a split card though.
13:35:54 <lob_jonas> then they're definitely overpriced
13:35:59 <HackEso> Scar \ (b/r) \ Instant \ Put a -1/-1 counter on target creature. \ SHM-C \ \ Scarab Feast \ B \ Instant \ Exile up to three target cards from a single graveyard. \ Cycling {B} ({B}, Discard this card: Draw a card.) \ AKH-C \ \ Scarab of the Unseen \ 2 \ Artifact \ {T}, Sacrifice Scarab of the Unseen: Return all Auras attached to target permanent you own to their owners' hands. Draw a card at the beginning of the next turn's upkeep. \ AI-U \ \ Scarblade
13:36:36 <HackEso> Battlegrowth \ G \ Instant \ Put a +1/+1 counter on target creature. \ MRD-C
13:36:43 <lob_jonas> wait, isn't there one that costs (W/G)?
13:37:36 <HackEso> Burst of Strength \ G \ Instant \ Put a +1/+1 counter on target creature and untap it. \ GTC-C
13:37:56 <int-e> lob_jonas: I really wanted 'wrong: counter "right" spell' 'right: counter "wrong" spell' - which means they have to be instants. But the cards need another effect to have any use at all.
13:38:23 <lob_jonas> int-e: yeah, but I still think those names would be reserved for a split spell unless that's proven impossible
13:38:33 <int-e> I have no clue about balancing in M:tG; I have never played it seriously and I have not played it in the past 8 years.
13:38:45 <lob_jonas> such nice short names are in a short supply for M:tG, because it wants to live for a long time
13:39:04 <esowiki> [[Talk:Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64926&oldid=64919 * A * (+152)
13:39:10 <lob_jonas> the Erase (Not the Urza's Legacy One) card makes fun of that
13:40:09 <cpressey> https://esolangs.org/wiki/Sequential_tag_system is (I guess) the reference point for what I was saying. I think that explanation for why infinite programs are justified is more than a little muddy.
13:40:23 <int-e> (I also arbitrarily thought that "right" should be a white spell and "wrong" a black one :P)
13:40:54 <lob_jonas> int-e: well, it certainly makes sense that the white spell puts the +1/+1 counter and the black spell puts the -1/-1 counters
13:41:58 <lob_jonas> int-e: if you want two opposing spells that counter each other, I'd like to point to the ones from Alpha:
13:42:03 <lob_jonas> `card-by-name Blue Elemental Blast
13:42:05 <HackEso> Blue Elemental Blast \ U \ Instant \ Choose one -- \ • Counter target red spell. \ • Destroy target red permanent. \ A-C, B-C, U-C, RV-C, 4E-C, A25-U, ME4-U
13:42:07 <HackEso> Red Elemental Blast \ R \ Instant \ Choose one -- \ • Counter target blue spell. \ • Destroy target blue permanent. \ A-C, B-C, U-C, RV-C, 4E-C, A25-U, ME4-U
13:42:40 <lob_jonas> there's also White Knight and Black Knight, but they don't counter
13:43:05 <int-e> lob_jonas: thanks for the example
13:44:01 <lob_jonas> countering itself doesn't happen often in black and white, which is why this pair is red and blue
13:47:12 <esowiki> [[Deadfish Joust]] https://esolangs.org/w/index.php?diff=64927&oldid=64905 * A * (-41)
13:47:50 <esowiki> [[Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64928&oldid=64927 * A * (+16)
13:50:37 -!- ais523 has joined.
13:52:36 <esowiki> [[Talk:Sequential tag system]] N https://esolangs.org/w/index.php?oldid=64929 * Chris Pressey * (+698) Created page with "== Trying to make this more precise == Here are some subsets of the set of all sequential tag systems: * Sequential tag systems that a cyclic tag system can be translated int..."
13:58:27 <esowiki> [[Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64930&oldid=64928 * A * (-294) /* Instructions in deadfish Joust */
14:04:29 <esowiki> [[Deadfish Joust]] https://esolangs.org/w/index.php?diff=64931&oldid=64930 * A * (+749)
14:04:42 <esowiki> [[Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64932&oldid=64931 * A * (-2) /* Implementation */
14:15:20 <cpressey> If you have a language that accepts infinite programs and you don't restrict that set of programs to those that have finite descriptions (as e.g. TMs that generate them) you're... not in a place where it makes sense to write TC proofs anymore.
14:17:49 <cpressey> Some CAs need infinite initial configurations to be shown TC. In practice those configurations always have finite descriptions, as far as I have ever seen
14:18:55 <cpressey> I suspect you want an even stronger constraint than "finite" but again, I don't think I've seen any which need extremely complex initial configurations
14:19:14 <cpressey> Sequential tag systems that are expansions of cyclic tag systems are not very complex at all
14:23:12 <cpressey> I imagine anyone who objects to a TC proof by that method, would also object to the very idea of a language that allows infinite programs
14:23:55 <cpressey> Or at least, if they don't, I'd like to hear more about their philosophical views of computation
14:27:28 <cpressey> ais523: This is what I've been ranting about today. Well, this and second-order concatenative languages
14:29:13 <ais523> cpressey: I have something of a practical objection: people see TCness proofs based on infinite cyclic initial states and then try to use them to prove other languages TC, when those languages can only simulate finitely-nonblank initial states
14:29:47 <ais523> I've seen so many proofs that try to prove something TC via implementing rule 110 but with the space only finitely initialised…
14:30:19 <Taneb> Is it proven that rule 100 with finite initialisation is not TC?
14:30:44 <ais523> that said, there's clearly a boundary between acceptable and unacceptable initial states for infiinite programs, the main controversy is about where to put it
14:30:48 <lob_jonas> ais523: are those proofs fixable by initializing the infinite tape lazily?
14:31:06 <ais523> lob_jonas: occasionally there's an obvious way to do it, often thare isn't though
14:35:24 <int-e> I never liked the rule 110 proof.
14:37:53 <int-e> (To my mind the repeating pattern /extends/ the behavior of the cellular automaton in a non-trivial way, by encoding some special behavior at the boundary of the (properly) populated cells.)
14:39:14 <cpressey> Lazily initializing new cells when the finite but unbounded state needs to be expanded is a better way at looking at many languages (including CA) than saying they have infinite programs.
14:39:43 <ais523> cpressey: fwiw, I put some of my thoughts on the matter into the form of a language: https://esolangs.org/wiki/Along_and_Across
14:41:21 <ais523> it strikes me that it's dangerous to ever say "X can't be Turing-complete" without a really good argument, and if various AaA variants were proven to be sub-TC it would help make TCness proofs using certain forms of infinite initial states more acceptable
14:42:06 <esowiki> [[Talk:Your Pillows]] N https://esolangs.org/w/index.php?oldid=64933 * Areallycoolusername * (+229) Created page with "[[User: A]], apart from this language being stack-based, how is this language based off of [[Brace For Impact]]? ~~~~"
14:42:11 <ais523> infinite initial states lead to some weirdness even in the abstract, though, e.g. they make LBAs TC by giving them access to infinite memory
14:42:20 <ais523> (but that's true even with a blank state)
14:43:02 <int-e> Is there any other standard proof technique for sub-TCness besides a) reduce to a known sub-TC language and b) solving the Halting problem?
14:43:43 <int-e> Because that seems a rather sad state of affairs.
14:44:07 <ais523> int-e: I'd argue a language that searches for counterexamples to the Riemann hypothesis and does nothing else is obviously sub-TC, yet doesn't fulfil either of those conditions
14:44:31 <ais523> that said, I'm not sure why I think that way; despite being obviously sub-TC I'm not convined it's true
14:44:51 <ais523> I guess the issue is that there's no way to provide it with a program to run, even indirectly/
14:45:12 <cpressey> ais523: Then it's not even a language?
14:45:26 <cpressey> Again this seems to be outside the space where "Turing complete" even makes sense anymore
14:45:33 <lob_jonas> ais523: so another technique is to prove that there are only finitely many essentially different programs?
14:45:47 <esowiki> [[Deadfish Joust]] https://esolangs.org/w/index.php?diff=64934&oldid=64932 * A * (+138)
14:45:59 <ais523> lob_jonas: that's a good way to express my thoughts, thanks
14:46:24 <ais523> cpressey: I guess esolang design is like art, it's very hard to prove that there's /anything/ that isn't an esolang
14:46:38 <ais523> neither because it's non-esoteric nor because it isn't a language
14:46:39 <lob_jonas> as in, we have an easy way to tell which of the finitely many classes any program falls into, while we need not know what the program does
14:46:59 <ais523> lob_jonas: yes, I like that
14:47:36 <Taneb> Some sort of contrapositive Rice's theorem?
14:47:43 <ais523> think about the language implemented by a truth-machine: it has two programs, 0 and 1, one of them halts, the other one doesn't
14:48:02 <ais523> assuming you disregard I/O, given any Turing machine program, it's equivalent to one or the other of those two programs
14:48:13 <ais523> the problem is, of course, that the compile is uncomputable
14:48:26 <lob_jonas> ais523: yes, that's why it's important that it's easy to tell which program falls into which of our classes
14:48:35 <ais523> but I think you need to assume the Church-Turing thesis to be able to say that the language is definitely sub-TC
14:49:04 <ais523> maybe computational class equivalence is relative to the power of your compiler
14:49:19 <ais523> I can imagine a language that's TC but you can't compile into it in polynomial time
14:49:56 <ais523> (An Odd Rewriting System might be one of those!)
14:50:12 <cpressey> ais523: That's what I was talking about the other day
14:50:40 <ais523> cpressey: oh, there were several different but related issues there and I was confused about which specific one you were looking at
14:50:49 <cpressey> I tend to say "reduction" instead of "compiler"
14:50:52 <ais523> I was thinking about the >polynomial blowup in program size
14:51:04 <ais523> and thought that's what you meant too
14:51:10 <ais523> rather than the complexity of the compiler
14:51:22 <cpressey> ais523: Oh right, that's slightly different
14:51:35 <ais523> ofc, making the output too large to generate in polytime is an easy way to require a >polytime compiler, but there might be other ways
14:51:41 <esowiki> [[Talk:Your Pillows]] M https://esolangs.org/w/index.php?diff=64935&oldid=64933 * A * (+180)
14:52:41 <esowiki> [[Your Pillows]] M https://esolangs.org/w/index.php?diff=64936&oldid=64879 * A * (-25)
14:53:00 <ais523> for example, can you have a language where you need to be able to solve the subset sum problem to be able to write arbitrary programs in it?
14:53:09 <cpressey> ais523: Can you make a polynomially-expanding clock in AORS?
14:53:23 <cpressey> Obviously you can make exponential and constant-period ones
14:54:01 <esowiki> [[Your Pillows]] M https://esolangs.org/w/index.php?diff=64937&oldid=64936 * A * (+118)
14:54:23 <esowiki> [[Talk:Your Pillows]] M https://esolangs.org/w/index.php?diff=64938&oldid=64935 * A * (+14)
14:55:31 <ais523> cpressey: hmm… you can easily create a polynomially-widening bit of code, I can't see an obvious way to make that into a clock though
14:55:38 <esowiki> [[Talk:Your Pillows]] M https://esolangs.org/w/index.php?diff=64939&oldid=64938 * A * (+66)
14:56:25 <ais523> unless… what if each such section of code were single-use, and triggered a copy of itself (which had since grown a little)?
14:58:47 <esowiki> [[Your Pillows]] M https://esolangs.org/w/index.php?diff=64940&oldid=64937 * A * (+0)
14:59:58 <ais523> the idea would be to start with some code that generates a static tape pattern like abaaaabbaaaaaaaaabbbbaaaaaaaaaaaaaaaabbbbbbbb… (that should be fairly easy, I think); the 'a's grow polynomially, the 'b's exponenntially
15:00:43 <esowiki> [[Talk:Your Pillows]] M https://esolangs.org/w/index.php?diff=64941&oldid=64939 * A * (-28)
15:00:44 <ais523> when receiving an oddness signal from the left, a 'b' repeats it on the next cycle, then deletes itself if it didn't see such a repeat from its left
15:02:09 <cpressey> I did manage to convince myself that a constant-period clock wouldn't work, because you at some point have more cells than the period, so need to re-use communication channels whos previous values you want to ignore, but the only operation you have is XOR, so you can't.
15:02:13 <ais523> then we have a second type of oddness signal that the 'a's use to communicate; if they see the first type of signal and it isn't immediately repeated, they all change into an alternative state that sends the second signal every cycle until they didn't see it on their left the previous cycle
15:02:48 <ais523> oh, we also need a 'c' to the left of the 'b's which generates the first sort of signal once when the second sort stops
15:03:02 <cpressey> So you need to generate "clear channels". At the same time, you don't need to generate an exponential number of them. Only linear in the number of cells, probably, or at worst n^2
15:03:09 <ais523> that produces a polynomially-growing clock but with exponentially-growing code
15:05:12 <ais523> ugh, doesn't work directly, the 'a's interfere with each others' signals
15:05:33 <ais523> you can still make it work but you need the blocks of 'a's to have exponentially-growing width too
15:05:49 <ais523> and then you might not be able to generate them fast enough
15:07:13 <ais523> AORS is really unintuitive, there are a lot of operations that seem trivial but then you try to implement them and they don't work
15:07:52 <cpressey> If the string grows expoenentially then it takes exponential time if you measure processing each character, which is probably the way you should measure it
15:08:36 <cpressey> In other news, the computational class example in AaA reminds me of the proof that the emptiness of the intersection of two CFLs is undecidable
15:08:46 <cpressey> But this is a CFL and a regular language
15:09:12 <cpressey> The intersection of a CFL and a regular language is context-free, if I am not mistaken
15:09:18 <lob_jonas> stupid question. have I ever written a python quine?
15:09:37 <ais523> lob_jonas: you're likely in a better place to answer that question than anyone esle is
15:09:54 <ais523> if it helps, I know that /I've/ written a python quine, but that doesn't really answer the question
15:10:08 <lob_jonas> I think I haven't, at least not a non-empty one
15:11:08 <ais523> most, maybe all, of my Python quines have been polyglots
15:16:04 <cpressey> ais523: Actually I think AaA is Turing-complete because mu-calculus
15:16:42 <ais523> I don't know the mu-calculus well enough to follow
15:16:43 <cpressey> You're searching for the smallest integer that fulfils some primitive condition.
15:17:11 <ais523> in the FSM/FSM version, I'm searching for the smallest integer whose digitis match a particular regex
15:17:48 <ais523> or, well, I'm regexing consecutive integers to produce a list of results, then trying to determine if those results match a particular regex
15:17:58 <cpressey> Sorry apparently the word "calculus" is not standard for it
15:18:09 <cpressey> https://en.wikipedia.org/wiki/%CE%9C-recursive_function
15:18:51 <cpressey> "Intuitively, minimisation seeks—beginning the search from 0 and proceeding upwards—the smallest argument that causes the function to return zero; if there is no such argument, the search never terminates."
15:19:20 <cpressey> If you add that operator to PR you get RE (i.e. it's Turing-complete)
15:19:35 <cpressey> I don't know the weakest system you could add that operator to and get something TC
15:19:45 <esowiki> [[Brace For Impact]] https://esolangs.org/w/index.php?diff=64942&oldid=64875 * Areallycoolusername * (+1436)
15:19:46 <cpressey> But I don't know of anything requiring it to be as powerful as PR
15:20:10 <lob_jonas> `python3 -cfor k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,4,1,1,5:print(('\\','\'',',','for k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,4,1,1,5:print((',')[k],end=',')')[k],end='')
15:20:13 <HackEso> for k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,4,1,1,5:print(('\\','\'',',','for k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,2,1,5,1,4,1,1,5:print((',')[k],end=',')')[k],end='')
15:23:01 <lob_jonas> `python3 -cfor k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4:print(('\\','\'',',','for k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4:print((',')[k],end=str())')[k],end=str())
15:23:02 <HackEso> for k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4:print(('\\','\'',',','for k in 3,1,0,0,1,2,1,0,1,1,2,1,2,1,2,1,3,1,2,1,4,1,4:print((',')[k],end=str())')[k],end=str())
15:23:12 <ais523> cpressey: I think it was mentioned on the talk page that what you have is basically µ-recursion which only allows one use of the µ operator
15:23:21 <ais523> wrong µ, sorry, the other one isn't on my keyboard
15:23:41 <ais523> that means you can have a different computational power inside and outside
15:23:43 <cpressey> well, if a while program only needs one while loop, ... ok, that's hardly the best sort of reasoning
15:23:50 <esowiki> [[Brace For Impact]] https://esolangs.org/w/index.php?diff=64943&oldid=64942 * Areallycoolusername * (+367)
15:24:10 <ais523> having only FSMs/regular languages inside the µ seems like it's a substantial cut to the power of the language
15:24:15 <cpressey> Oh, so Plokmijnuhby noticed exactly what I noticed
15:24:49 <cpressey> (but has a much cooler name than I do)
15:25:36 <cpressey> You definitely only need one minimization operation to be TC (he said without a shred of proof)
15:25:53 <ais523> actually, it's not quite the same
15:25:57 <cpressey> You search for the smallest Turing machine that does what you need and you simulate that and you're done
15:26:43 <ais523> the current AaA proof doesn't work in µ-calculus with only one minimization, as you need to put the minimization itself into a loop
15:26:56 <ais523> it's more like, only one minimization is allowed in the program's /source code/ but you can put control flow around it
15:27:04 <HackEso> [U+03BC GREEK SMALL LETTER MU]
15:27:11 <HackEso> [U+03BC GREEK SMALL LETTER MU]
15:27:40 <ais523> if μ and µ didn't look identical I wouldn't have to unidecode them to see which was which
15:28:41 <HackEso> #esoteric bitmap fonts include: \oren\'s font http://www.orenwatson.be/fontdemo.htm , lifthrasiir's font https://github.com/lifthrasiir/unison/ , b_jonas's font http://www.math.bme.hu/~ambrus/pu/fecupboard20-c.pcf.gz , fizzie's font https://github.com/fis/rfk86/tree/master/web/font , FireFly's fonts http://xen.firefly.nu/up/fonts/
15:30:03 <ais523> I guess there's no real reason for them to /look/ different, they're just /semantically/ different (one is pronounced "m", or "mu" if alone, and one is pronounced "micro")
15:30:55 <ais523> maybe I should stop being lazy and finally upgrade my compose key to RFC 1345, even if it's a little less intuitive than the standard compose key layout
15:32:02 <lob_jonas> ais523: I think they're only historically different
15:32:47 <lob_jonas> the opposite as how the t with comma under and the t with cedilla under are now different letters when they used to be the same, the two mus are now the same but we have to support both encodings
15:35:02 <lob_jonas> and yes, that analogy makes no sense
15:36:27 <ais523> well, there's a character in CP437 which was intended to be used for both the German ß and the Greek beta…
15:36:41 <ais523> (and those don't even /look/ the same, just kind of similar, but are definitely semantically different)
15:36:59 <ais523> but the semantic difference between μ and µ is probably relevant for things like screen readers
15:37:20 <ais523> (compare "µ-architecture" to "m-architecture", for example)
15:38:21 <lob_jonas> ais523: sure, because that encoding was originally made for unchangable 256 sized character sets burned into ROM, with fonts that are 14 or 8 pixel high on a monitor, or similarly small on a printer
15:42:12 <cpressey> I once used a typewriter that had no "1" key. It was assumed you'd just use a lowercase "l" for it.
15:43:26 <lob_jonas> http://nerdlypleasures.blogspot.com/2015/04/ibm-character-fonts.html nice listing of all the original fonts
15:43:56 <lob_jonas> cpressey: sure, old typewriters were like that, no "1", no "0", no "í", no "ú", no "ű".
15:53:12 <cpressey> I can kind of imagine μ(FA(μ(CFL))) (if that's what that AaA construction is, still pretty fuzzy on that) being Turing-complete
15:53:43 <cpressey> or some construction in the vicinity of that
15:54:06 <Taneb> Football Association
15:54:16 -!- Sgeo__ has joined.
15:57:07 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
15:57:23 <cpressey> I was going to do an esolang around something like μ(CFL), by coincidence. Haven't gotten around to it yet
15:57:59 <cpressey> There's always something more interesting on the other side of the fence
15:58:13 -!- cpressey has quit (Quit: WeeChat 1.4).
16:02:03 <lob_jonas> `python3 -cfor k in b'2030401010201030104010505':print((chr(39),',','for k in b','2030401010201030104010505',':print((chr(39),',')[k-48],end=str())')[k-48],end=str())
16:02:07 <HackEso> for k in b'2030401010201030104010505':print((chr(39),',','for k in b','2030401010201030104010505',':print((chr(39),',')[k-48],end=str())')[k-48],end=str())
16:02:16 <lob_jonas> this one is longer, but there's something I can do with it
16:03:17 -!- xkapastel has joined.
16:17:13 <lob_jonas> `python3 -cs='1606261656265636564656563664';[print((s,'s=',';[print((s,',',chr(39))[int(k)],end=',')for k in s]',',',chr(39))[int(k)],end='')for k in s]
16:17:14 <HackEso> s='1606261656265636564656563664';[print((s,'s=',';[print((s,',',chr(39))[int(k)],end=',')for k in s]',',',chr(39))[int(k)],end='')for k in s]
16:20:14 <lob_jonas> `python3 -cs='150525154525453545453';[print((s,'s=',';[print((s,',',chr(39))[int(k)],end=str())for k in s]',',',chr(39))[int(k)],end=str())for k in s]
16:20:17 <HackEso> s='150525154525453545453';[print((s,'s=',';[print((s,',',chr(39))[int(k)],end=str())for k in s]',',',chr(39))[int(k)],end=str())for k in s]
16:20:46 <lob_jonas> of course there would probably be much shorter ones if I didn't try this ridiculous indexing thing
16:31:30 <HackEso> olist 1173: shachaf oerjan Sgeo FireFly boily nortti b_jonas
16:37:37 -!- lob_jonas has quit (Remote host closed the connection).
17:15:01 -!- Phantom_Hoover has joined.
17:25:15 -!- ais523 has quit (Quit: quit).
17:25:58 -!- Sgeo_ has joined.
17:29:38 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
17:38:59 -!- b_jonas has joined.
17:59:47 <esowiki> [[User:Hanzlu]] https://esolangs.org/w/index.php?diff=64944&oldid=64911 * Hanzlu * (+298)
18:00:09 <esowiki> [[User:Hanzlu]] https://esolangs.org/w/index.php?diff=64945&oldid=64944 * Hanzlu * (+4)
18:13:56 -!- kolontaev has joined.
18:49:39 <kmc> shachaf: the chonky orange cat is back
18:58:34 -!- kolontaev has quit (Quit: leaving).
19:00:17 <HackEso> Cats are cool, but should be illegal.
19:00:20 <HackEso> cat(1) - concatenate files and print on the standard output \ cat(1p) - concatenate and print files \ CaT(1hackeso) - no description \ cAt(1hackeso) - no description
19:02:55 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: dog: not found
19:03:23 <HackEso> A cat is an animal with four legs. It's nice to pet, especially when it's a baby cat, called a kitten. Or it's the unix "cat" command. It takes a filename (or many) and prints the contents of that (those) file(s).
19:03:55 <kmc> boringly accurate
19:06:16 <b_jonas> ``` perl -pi -e s+tp:+tps+ tmflry/wiki
19:06:23 <HackEso> The wiki is at https//esolangs.org/wiki
19:06:35 <b_jonas> ``` perl -pi -e s+tps/+tps:/+ tmflry/wiki
19:06:41 <HackEso> The wiki is at https://esolangs.org/wiki
19:06:50 -!- FreeFull has joined.
19:06:57 <b_jonas> I'd edited all the urls in the wisdome earlier, but this one fell aside
19:32:07 <HackEso> Right is not two wrongs but three lefts.
19:38:45 <b_jonas> Right is the direction you should face towards when the baby metroid drains you, in order to be able to stand up slightly faster.
19:53:44 -!- lldd_ has joined.
19:56:10 <esowiki> [[Special:Log/newusers]] create * IAmAnIssu * New user account
19:58:16 <tswett[m]> Hey, is it feasible to calculate the first few decimal digits of Graham's number? 🤔
19:58:34 <tswett[m]> Graham's number is of the form 3^3^3^3^...
19:59:07 <tswett[m]> Calculating the first few digits entails calculating, what is it.
19:59:17 <tswett[m]> log(3^3^3^3^...) mod log(10), isn't it?
20:00:06 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=64946&oldid=64797 * IAmAnIssu * (+146)
20:00:43 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=64947&oldid=64946 * IAmAnIssu * (-5) ok then
20:01:20 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=64948&oldid=64947 * IAmAnIssu * (+65) I have no idea what I'm doing
20:02:42 -!- Lord_of_Life_ has joined.
20:05:43 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
20:05:47 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:27:47 <esowiki> [[Forget]] N https://esolangs.org/w/index.php?oldid=64949 * IAmAnIssu * (+2326) Created page with "==Forget== '''Forget''' is a stack-based language where pointers are poisonous and the interpreter doesn't do a good job of remembering non-constant values ==Syntax== Instruct..."
20:29:51 <esowiki> [[Forget]] https://esolangs.org/w/index.php?diff=64950&oldid=64949 * IAmAnIssu * (+49)
20:30:45 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=64951&oldid=64900 * IAmAnIssu * (+13)
20:31:47 <esowiki> [[Forget]] https://esolangs.org/w/index.php?diff=64952&oldid=64950 * IAmAnIssu * (+7)
20:32:58 <esowiki> [[Forget]] https://esolangs.org/w/index.php?diff=64953&oldid=64952 * IAmAnIssu * (+183)
20:33:13 <esowiki> [[Forget]] https://esolangs.org/w/index.php?diff=64954&oldid=64953 * IAmAnIssu * (+1)
20:33:34 <esowiki> [[User:Areallycoolusername]] https://esolangs.org/w/index.php?diff=64955&oldid=64560 * Areallycoolusername * (+23)
20:37:12 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=64956&oldid=64951 * Areallycoolusername * (+23) /* B */
20:38:13 <esowiki> [[Brace For Impact]] https://esolangs.org/w/index.php?diff=64957&oldid=64943 * Areallycoolusername * (+0) /* Turing complete proof */
20:45:34 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=64958&oldid=64859 * Areallycoolusername * (+136)
20:46:08 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=64959&oldid=64958 * Areallycoolusername * (+2) /* Brace For Impact */
20:46:15 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=64960&oldid=64959 * Areallycoolusername * (+1) /* Brace For Impact */
20:54:32 -!- lldd_ has quit (Quit: Leaving).
21:04:38 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
21:42:12 <esowiki> [[Jussef Swissen]] https://esolangs.org/w/index.php?diff=64961&oldid=64617 * Areallycoolusername * (-20)
21:48:39 <esowiki> [[Brace For Impact]] https://esolangs.org/w/index.php?diff=64962&oldid=64957 * Areallycoolusername * (+104) Actually gave a program
21:50:26 <esowiki> [[Brace For Impact]] https://esolangs.org/w/index.php?diff=64963&oldid=64962 * Areallycoolusername * (+110) /* Turing complete Proof */
22:03:29 <esowiki> [[Brace For Impact]] https://esolangs.org/w/index.php?diff=64964&oldid=64963 * Areallycoolusername * (+671)
22:03:39 <esowiki> [[Brace For Impact]] https://esolangs.org/w/index.php?diff=64965&oldid=64964 * Areallycoolusername * (+1) /* = Hello World Program */
22:23:47 -!- Sgeo has joined.
22:30:05 -!- dog_star_ has joined.
22:35:41 -!- fungot` has joined.
22:37:20 -!- dog_star has quit (*.net *.split).
22:37:20 -!- fungot has quit (*.net *.split).
22:39:49 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=64966&oldid=64892 * Areallycoolusername * (+629)
22:40:15 <shachaf> kmc: chonky orange cats are good luck
22:41:30 <kmc> aren't all cats
22:49:38 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
23:26:40 -!- b_jonas has quit (Quit: leaving).
23:37:47 <tswett[m]> I wonder if there are any rational functions that are Turing-complete when iterated.
23:38:45 <tswett[m]> A piecewise affine function R*R -> R*R is Turing-complete when iterated. You can use a real number as a stack plus a bit of finite state, and two stacks and finite state are enough to make a Turing machine.
23:39:24 <tswett[m]> To be clear, I mean rational functions that are Turing-complete when iterated on the real numbers.
23:39:30 <tswett[m]> Though the same question for complex numbers is also interesting.
23:42:05 <tswett[m]> I guess it's almost certainly easier to make a computer by iterating on the complex numbers rather than the real numbers.
23:42:46 <tswett[m]> Is the Mandelbrot set Turing-complete? Can you convert a Turing machine into a complex number such that the complex number escapes if and only if the Turing machine halts?
00:04:41 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64967&oldid=64966 * A * (+166) /* Concern */
00:14:28 -!- izabera has changed nick to also_uplime.
00:26:09 -!- also_uplime has changed nick to izabera.
00:58:15 -!- FreeFull has quit.
01:05:01 <tswett[m]> 🤔 . o O ( the inverse image of 0 under x -> x^2 has two elements, but both of them are 0. )
01:28:41 <esowiki> [[Forget]] https://esolangs.org/w/index.php?diff=64968&oldid=64954 * IAmAnIssu * (+389) Added new instructions + cat program
01:37:07 -!- heroux has quit (Ping timeout: 245 seconds).
01:44:13 -!- heroux has joined.
01:44:53 <int-e> tswett[m]: If you're representing complex numbers by a pair of computable reals, I expect a positive answer, mainly because computable reals are specified in terms of infinite computations. If you have to pick a *rational* complex number (in finite time) then this becomes a potentially interesting problem...
01:46:38 <tswett[m]> The "machine" consists of a particular rational function with rational complex coefficients.
01:46:55 <tswett[m]> The input is a rational complex number, and executing the machine consists of repeatedly applying the function to the input.
01:47:40 <int-e> Basically I'd be happier with saying Q*Q -> Q*Q rather than R*R -> R*R :)
01:48:13 <tswett[m]> There's a "halting basin" which consists of... let's say it has to consist of an open ball with a rational complex center and rational radius.
01:48:42 <tswett[m]> The machine halts if and only if the state enters the halting basin at some point.
01:49:06 <int-e> Uh, is the Mandelbrot set connected? I thought not...
01:49:19 <int-e> But that doesn't matter. Sorry.
01:49:33 <tswett[m]> It definitely seems like it's path-connected, but maybe that's not known.
01:49:48 <int-e> tswett[m]: I have never looked at this formally.
01:51:18 <int-e> I've just played with fractint ages ago and thought that it looked disconnected with mandelbrot islands everywhere. But that may well be misleading... rendering would miss narrow paths.
01:52:25 <int-e> But the map x -> x^2 + 1 is not injective, so there's at least a potential of producing islands.
01:52:26 <tswett[m]> Looks like it's been proved that the Mandelbrot set is connected.
01:52:44 <kmc> mm fractint
01:53:38 <int-e> "During the early 1990s the program was the definitive fractal generating program for personal computers."
01:55:27 <kmc> i remember playing with it at my grandpa's house as a kid
01:55:29 <kmc> it was fun
01:55:39 <kmc> DOS program
01:59:34 <int-e> Ah, I'm misremembering what exactly the Mandelbrot set is.
02:00:21 <kmc> well, don't listen to the johnathan coulton song
02:00:25 <kmc> because he defines it wrong :P
02:01:34 <kmc> I remember coding a mandelbrot set renderer in TI-83 BASIC
02:01:55 <kmc> it took about half an hour to render a 4 color greyscale image (shown by rapidly switching between stored monochrome images)
02:03:23 <zzo38> I think I read somewhere the display supports 4 level, although this cannot be done with the built-in system.
02:03:44 <kmc> well the cycling looks a lot better if you do it in assembly
02:03:57 <kmc> asm games for the TI-83 had greyscale and relatively high framerate graphics
02:04:19 <kmc> the basic command to recall a stored picture was slow enough that you couldn't really do flicker free greyscale
02:04:19 <zzo38> Yes, definitely it would be faster
02:04:29 <kmc> I only dipped my toe into TI-83 assembly though
02:04:31 * int-e is wasting CPU cycles on finding smooth numbers...
02:05:04 <kmc> I bet you could do C as well, using sdcc, but I'm not sure how many people have
02:05:13 <kmc> for TI-89 the TIGCC toolchain was pretty popular
02:05:18 <zzo38> I have TI-92, although only used the built-in system. It is slow, but at least it has a full keyboard and also a built-in programming environment.
02:05:19 <kmc> I never quite got it working though :?
02:05:27 <kmc> I bought a TI-92 at a hamfest recently
02:05:29 <kmc> for nostalgia reasons
02:05:33 <kmc> so I might do something with it one day
02:05:41 <kmc> TI-89/92 basic is much more powerful than TI-83 basic
02:06:35 <int-e> (challenge: Find a number larger than (10^50-1)/9 = 111...111 (50 ones) that is only divisible by the first 27 primes (2..103) and is as small as you can make it. (If you can find the minimum that would be impressive, but I can't.))
02:07:27 <zzo38> Yes, although it is still slow. There are things that can be done to improve the speed a bit, though, such as using the sort commands for shuffling (kind of like using "ORDER BY RANDOM()" in SQL)
02:07:34 <int-e> (This resulted from a question on ##math two days ago and I've already spent quite some effort on this.)
02:08:12 <kmc> zzo38: interesting
02:11:55 -!- Sgeo has quit (Ping timeout: 258 seconds).
02:14:22 <tswett[m]> So essentially, find the smallest linear combination of log(2), log(3), log(5), ..., log(103), with nonnegative integer coefficients, which is larger than log(111...111)?
02:15:36 <int-e> sure if you want to deal with irrational numbers :)
02:17:23 <tswett[m]> The problem has got to have a name.
02:17:41 <int-e> (double precision is not enough for this)
02:28:56 <int-e> (Tbf, as far as I can make up, double precision is just barely not enough. So playing around with that should be perfectly fine.)
02:32:27 <tswett[m]> Just use arbitrary-precision integers.
02:50:32 -!- Sgeo has joined.
02:56:29 <esowiki> [[Talk:Deadfish Joust]] https://esolangs.org/w/index.php?diff=64969&oldid=64926 * JonoCode9374 * (+308) /* Contest controller */
02:59:31 <esowiki> [[Talk:Keg]] https://esolangs.org/w/index.php?diff=64970&oldid=64861 * JonoCode9374 * (+43) /* Implicit Input */ new section
03:24:07 <esowiki> [[Keg]] https://esolangs.org/w/index.php?diff=64971&oldid=64211 * JonoCode9374 * (+412) /* Special Bits */
03:25:41 <esowiki> [[Keg]] https://esolangs.org/w/index.php?diff=64972&oldid=64971 * JonoCode9374 * (+163) /* Implicit Input */
03:32:21 -!- xkapastel has quit (Quit: Connection closed for inactivity).
04:11:48 -!- xkapastel has joined.
04:23:46 -!- Sgeo has quit (Ping timeout: 246 seconds).
04:37:58 <esowiki> [[Talk:Deadfish Joust]] M https://esolangs.org/w/index.php?diff=64973&oldid=64969 * A * (+123)
04:45:51 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64974&oldid=64970 * A * (+245)
04:46:42 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64975&oldid=64974 * A * (+1233) /* Backwards compatibility issue and lengthy code issue */
04:46:51 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64976&oldid=64975 * A * (+65) /* Backwards compatibility issue and lengthy code issue */
04:47:08 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64977&oldid=64976 * A * (+5) /* Backwards compatibility issue and lengthy code issue */
04:48:58 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64978&oldid=64977 * A * (+0) /* Backwards compatibility issue and lengthy code issue */ My brain is a lot worse in the day than in the night.
04:53:38 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64979&oldid=64978 * A * (+65) /* Backwards compatibility issue and lengthy code issue */
04:53:51 -!- Sgeo has joined.
04:59:20 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=64980&oldid=64972 * A * (+245) /* Special Bits */ This might be implemented. However, I will see how JonoCode9374 reacts.
05:00:23 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=64981&oldid=64980 * A * (+1) /* No EOI's after inputs */
05:05:02 -!- doesthiswork has quit (Ping timeout: 245 seconds).
05:40:06 -!- sftp has quit (Excess Flood).
05:40:30 -!- sftp has joined.
05:58:37 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64982&oldid=64979 * A * (+9) /* Backwards compatibility issue and lengthy code issue */
06:19:06 <esowiki> [[What Mains Numbers?]] https://esolangs.org/w/index.php?diff=64983&oldid=64866 * A * (+0) /* Implementations */ Cosmetics
07:32:28 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=64984&oldid=64925 * Hanzlu * (+33)
07:42:21 -!- xkapastel has quit (Quit: Connection closed for inactivity).
07:50:48 -!- cpressey has joined.
08:04:44 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
08:07:13 -!- Lord_of_Life has joined.
08:07:38 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=64985&oldid=64981 * A * (-2) /* Cat program */ There is implicit input now.
08:08:46 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=64986&oldid=64985 * A * (-4) /* Example Programs */ Find and add implicit imput if possible.
08:11:14 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=64987&oldid=64986 * A * (-1) /* Truth-machine */ In my PR, Keg also takes one line of input if it tries to duplicate an empty stack. Now I can save 1 byte.
08:16:57 -!- Phantom_Hoover has joined.
08:42:42 <cpressey> Good morning. I think the following default assumptions hold: If I have an esolang and I don't say outright that its programs can be infinite, they can't be. If I do say outright that they can be infinite, but I don't say they need not be computable, they must be computable.
08:44:37 <cpressey> If I have time I'll try to make an esowiki page about infinite programs.
08:52:40 <cpressey> One of the more frustrating things about language design is, you start designing a language, and you get to a point where there are several options, and each option has interesting implications that you would like to explore, but they might go in a different direction than your original idea
08:54:24 <cpressey> Should you ignore them and try to get to your original goal, or should you go down them and end up with something you have no good idea how it will turn out?
09:24:48 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=64988&oldid=64852 * YamTokTpaFa * (+50) /* pxemi.7z and text2pxem.pl */
09:36:13 <esowiki> [[Golf]] M https://esolangs.org/w/index.php?diff=64989&oldid=57940 * A * (+81)
09:37:45 <esowiki> [[Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=64990&oldid=62309 * A * (+133)
09:42:48 <shachaf> Why should computability be a requirement?
09:43:26 <shachaf> I think a language interpreter can just get an oracle representing a program without caring how it works.
09:44:00 <cpressey> Assumption about what you allow, rather than a requirement. If you want your language to accept uncomputable reals in input you should say so, that's all.
09:46:05 <shachaf> i guess whether it seems unnatural depends on how you specify infinite programs.
09:47:34 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=64991&oldid=64988 * YamTokTpaFa * (+236) /* pxemi.7z and text2pxem.pl */
09:52:15 <cpressey> If a language accepts uncomputable infinite programs, it doesn't seem to make much sense to ask whether that language is Turing-complete. It can do the triviallest things yet still produce output that a TM never could.
09:56:16 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=64992&oldid=64991 * YamTokTpaFa * (+608) /* pxemi.7z and text2pxem.pl */
10:18:06 -!- andrewd3 has joined.
10:19:39 <andrewd3> were you that guy who implemented deadfish in deadfish cafe {:}
10:20:49 <andrewd3> what eso stuff have you done recently
10:22:26 <cpressey> Not terribly much. A string-rewriting language that looks and acts like a concatenative language.
10:22:48 <cpressey> Which I actually started a long time ago, only finished it up this year.
10:22:55 <andrewd3> look at that you posted at a palinfdromic time
10:24:17 -!- wob_jonas has joined.
10:27:02 <wob_jonas> int-e: "Find a number larger than (10^50-1)/9 that is only divisible by the first 27 primes and is as small as you can make it" => nice, that looks tractable
10:27:05 <esowiki> [[ACL]] M https://esolangs.org/w/index.php?diff=64993&oldid=64984 * A * (+232) /* Example Code */
10:27:22 <cpressey> andrewd3: I've got Opera Mini on my phone. Very advanced stuff
10:27:43 <wob_jonas> int-e: can you make smaller versions of that problem for which you can find an exact solution, as testcases?
10:28:14 <andrewd3> a thing to make this better would be if ais523 exploded from the sky and that guy named urban who made BF would send himself back to esos for a while
10:28:21 <andrewd3> (urban works for search.ch now)
10:30:22 <andrewd3> eso idea: eso using the commands 123456789A (the digits of bijective base 10) whose source is interpreted as an integer in bijective base 10
10:30:36 <andrewd3> and that is how many characters the source needs to be for the program to run as it does
10:30:47 <andrewd3> a family of these actually, using different bijective bases
10:31:16 <wob_jonas> cpressey: languages with infinite inputs => I think we talked a bit about the case of Waterfall Model. The default version is to allow only rational numbers. If you allow any real number in the program, then you can encode any infinite bit sequence in a way that the program can extract (slowly).
10:36:52 <andrewd3> another idea: make a language that is one big formula
10:41:11 <wob_jonas> int-e: hmm, you did scale that well. it is somewhat above what's easy to solve, but very easy to verify, so it makes a good challenge
10:41:19 <cpressey> I'm not familiar with the idea of bijective bases unfortunately
10:41:29 <andrewd3> bijective is basically without 0
10:41:37 <andrewd3> that's what a bijective base is
10:44:06 <esowiki> [[Incident]] https://esolangs.org/w/index.php?diff=64994&oldid=56758 * B jonas * (+27) [[Category:Pattern-based]]
10:44:49 -!- Phantom_Hoover has quit (Ping timeout: 258 seconds).
10:55:19 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64995&oldid=64982 * JonoCode9374 * (+13) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */
10:55:33 <andrewd3> idea: language with the feature to twist a tape
11:01:35 <myname> what is tape twisting supposed to mean
11:01:53 <andrewd3> literally take the tape and twist it
11:02:02 <andrewd3> it's a joke language idea i have
11:06:09 <myname> how would that be different to just having 2 tapes to switch between?
11:06:34 <Taneb> If you twist too much the tape can snap
11:06:53 <Taneb> Maybe you can push twists around?
11:07:40 <andrewd3> you can also buy glue and make a mobius strip tape
11:08:15 <andrewd3> when i say "manipulate the tape" i mean "play around with it like you would IRL"
11:09:33 <andrewd3> i plan on adding bubble wrap to my language
11:11:58 <andrewd3> Taneb i don't understand what you mean
11:12:42 <myname> pushing twists would be fun for a dual-taped unifunge
11:13:29 <andrewd3> however this depends on what tape you're using, if you're using duct tape it'll take quite a bit of work to untwist it
11:13:48 <myname> the problem with befunge for this is its verbosity
11:15:13 <myname> you need a lot of commands to manipulate a specific cell
11:16:49 -!- xkapastel has joined.
11:33:47 <cpressey> If you have multiple tapes and multiple twists and can't push twists through other twists, you have Braid Theory
11:36:57 <wob_jonas> dunno, but if you add "theory" to anything, it starts to sound more impressive. I don't know why pseudosciences don't do it more often.
11:37:15 <andrewd3> they do make up for it by "quantum"
11:38:01 <myname> i recently learned about a set of seamingly magical frequencies that fix DNA errors while listening to them
11:43:16 <cpressey> Braid Theory is just Knot Theory where your knot has been cut though and the strands are laid flat on a table
11:44:24 <andrewd3> that's a first grade subject chris
11:53:19 <wob_jonas> maybe it's like a lemming or a sea mink
11:59:15 <esowiki> [[Talk:An Odd Rewriting System]] https://esolangs.org/w/index.php?diff=64996&oldid=64792 * Ais523 non-admin * (+686) 1D-1D-CA = [[2C]]
12:09:25 <wob_jonas> the problem is, the sea mink is extinct
12:10:28 <andrewd3> wob_jonas joke programming language with lemmings?
12:23:31 -!- andrewd3 has quit (Remote host closed the connection).
12:43:48 <Taneb> Zheng He was a sea ming
13:17:43 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=64997&oldid=64995 * A * (+265) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */
13:21:05 -!- doesthiswork has joined.
13:30:09 <esowiki> [[Echo Tag]] https://esolangs.org/w/index.php?diff=64998&oldid=58417 * Ais523 non-admin * (+5738) Turing-completeness proof (this is comparable to the flawed proof I was working on earlier, but fixed the flaw via placing padding in Encoding B so that the position of the tag system mod m is not lost while processing it)
13:31:13 <esowiki> [[Rook]] https://esolangs.org/w/index.php?diff=64999&oldid=63785 * Areallycoolusername * (-9) /* Instructions */
13:33:01 <esowiki> [[Golf/Feature golf]] https://esolangs.org/w/index.php?diff=65000&oldid=64990 * Areallycoolusername * (+31)
13:34:56 <wob_jonas> cpressey: at least Julia provides the div1 and mod1 functions for computing with 1-based indexes
13:35:34 -!- andrewd12 has joined.
13:36:19 <wob_jonas> andrewd12: the same as andrewd3? you can't roll a 12 on a d3
13:36:47 <andrewd12> wob_jonas i'm breaking the laws of reality however i want, mister
13:37:09 <andrewd12> i'll make a programming language that uses bubble wrap
13:40:13 <esowiki> [[Talk:Golf/Feature golf]] N https://esolangs.org/w/index.php?oldid=65001 * Areallycoolusername * (+644) Tell User: A how Feature golf needs restrictions.
13:40:40 <esowiki> [[Talk:Golf/Feature golf]] https://esolangs.org/w/index.php?diff=65002&oldid=65001 * Areallycoolusername * (+1)
14:11:27 <andrewd12> can anyone explain reversible computing?
14:21:44 -!- cpressey has quit (Quit: WeeChat 1.4).
14:25:50 <andrewd12> idea: programming language that i forgot the specifications too
14:26:54 <andrewd12> yeah but only i know the specifications and there is one program and ti has not comments
14:27:27 <esowiki> [[Talk:Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=65003&oldid=65002 * A * (+240)
14:31:20 <esowiki> [[Talk:Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=65004&oldid=65003 * A * (+353)
14:34:15 <esowiki> [[Golf/Feature golf]] https://esolangs.org/w/index.php?diff=65005&oldid=65000 * A * (+422) Old post added
14:34:33 <esowiki> [[Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=65006&oldid=65005 * A * (+2) /* brainfuck */ W
14:35:17 <andrewd12> i have a shorter attention span, as in, i expect more active forums
14:36:48 <esowiki> [[Talk:Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=65007&oldid=65004 * A * (+48)
14:38:22 <esowiki> [[Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=65008&oldid=65006 * A * (+73)
14:40:26 <esowiki> [[Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=65009&oldid=65008 * A * (+114) /* Competitive usage */
14:42:28 <esowiki> [[Talk:Golf/Feature golf]] M https://esolangs.org/w/index.php?diff=65010&oldid=65007 * A * (+307)
14:49:25 <esowiki> [[Swissen Machine]] https://esolangs.org/w/index.php?diff=65011&oldid=64618 * Areallycoolusername * (+21)
14:53:13 <esowiki> [[Golf]] https://esolangs.org/w/index.php?diff=65012&oldid=64989 * Areallycoolusername * (+1) /* See also */
14:53:33 <esowiki> [[Golf]] https://esolangs.org/w/index.php?diff=65013&oldid=65012 * Areallycoolusername * (-2) /* See also */
14:57:50 <esowiki> [[Category:Golfing language]] M https://esolangs.org/w/index.php?diff=65014&oldid=53187 * A * (+102)
14:59:37 <wob_jonas> I propose that the offical #esoteric 64-byte random number shall be 0x2508FFC710F11E6303996A6F4B6C4AA82D338DB394B15E63AA7A14FF4A57A67B2B1E1E27EC196DD0909721A5E70ADD90304C0E471EBFA5A0FEBBF05C0871D712 .
15:00:26 <wob_jonas> it's random, so there's no reason.
15:00:34 <wob_jonas> any other random number would work just as well
15:03:22 <andrewd12> 0x2500000000000000000000000000000000000000000000000000000000000000000000000871D712
15:03:24 <wob_jonas> Furthermore, I recommend that the official #esoteric character set of 12 different characters for transmitting messages redundantly through a 7-bit serial line shall be: +,07HOSTafz}
15:04:07 <wob_jonas> That way we can recover any 1-bit error and detect any 2-bit error, and if parity is used on the serial line, then we can also detect 3-bit errors.
15:04:31 <andrewd12> i recommend that the official #esoteric character set for transmitting 1 random character per 100 years be aofd>XMC{:
15:06:40 <wob_jonas> andrew: that doesn't even let us detect one-bit errors
15:14:58 <zzo38> Why do you need to transmit one random character per one 100 years?
15:15:54 <andrewd12> where's the invite to the esoteric language discord server?
15:16:23 <zzo38> I don't know; I prefer IRC
15:19:09 <zzo38> IRC is not such a complicated protocol, and does not require that you use only one possible service, and actually has other possibilities too. You can even use IRC without specialized software for it (although it is convenient to have special IRC software, to do auto pong and other stuff)
15:19:19 <wob_jonas> ^ there's no such thing in the wisdom database
15:21:07 <zzo38> Will you add a NNTP for esolang on the esolangs.org server?
15:21:15 <myname> why should there be a discord? there is absolutely no need for seperate channels
15:22:27 <wob_jonas> myname: the irc channel is logged, so if someone wants to mirror its contents to a discord channel, I don't see a problem with it, feel free
15:22:59 <andrewd12> i was tryna get to lyricly but couldn't
15:24:28 -!- cpressey has joined.
15:25:04 <cpressey> There was an early teaching version/impl of Haskell called "Gofer", apparenly this was short for "Good for equational reasoning"
15:25:41 <andrewd12> do you know more obscure languages c
15:27:00 <cpressey> Niakwa Programming Language is pretty obscure
15:27:18 <cpressey> I have only seen references to it, never seen it itself
15:28:17 <zzo38> Do you know how to program in Glulx?
15:30:02 <cpressey> There was a research computer called MACHO designed (in the 60's or 70's) at the uni in my hometown. I imagine its instruction set is pretty darn obscure.
15:30:21 <cpressey> These are probably the two obscurest languages I know of
15:30:39 <andrewd12> i wanna make a programming language where the data is on a literal tape
15:30:52 <andrewd12> "YOUR WRITING ON THE TAPE WAS TOO UNINTELIGIBLE"
15:32:03 <zzo38> How does that MACHO computer works?
15:33:06 <cpressey> zzo38: I have (or had) the manual and I started scanning it, years and years ago, but never finished. I don't think the instruction set was very special.
15:33:12 <esowiki> [[256]] N https://esolangs.org/w/index.php?oldid=65015 * Areallycoolusername * (+513) Created page with "'''256''' is a [[Stack]]-based [[esoteric programming language]] made by [[User: Areallycoolusername|Areallycoolusername]]. It was made for Code [[Golf]], and it's a Turing..."
15:33:50 <cpressey> Hm, with a name like "MACHO" I think it must have been the 70's
15:34:21 <andrewd12> is zzo particularly famous in the eso community
15:35:01 -!- wob_jonas has quit (Remote host closed the connection).
15:36:47 -!- ais523 has joined.
15:38:11 <ais523> I would have been online earlier – I was reading IRC – but freenode's web IRC thing no longer works at work (they have a new one that uses some sort of fancy connection that's blocked), so now ais523_ can only read, not send
15:39:30 <cpressey> Re Gofer, I was going to say, Haskell is good for equational reasoning, which is close to equational logic, which corresponds to universal algebra. I think this means Haskell is a term algebra (approximately speaking)?
15:39:51 <cpressey> I want to explore this idea, anyway
15:39:59 <zzo38> Isn't this the esoteric computer programming community?
15:42:08 <ais523> andrewd12: if you're interested in learning about NetHack I suggest asking in a NetHack-related channel
15:42:29 <ais523> #nethack is the "official" channel but fairly dead nowadays, #hardfought is where most of the discussion tends to be
15:43:06 <ais523> (what happened is that the NetHack community was split over a lot of channels with different people in various subsets, and #hardfought ended up with most of the people who mattered and so all the discussion migrated there)
15:43:16 <cpressey> We can't tell you how Nethack works. We can only tell you if Nethack is Turing-complete or now
15:43:22 <ais523> it's OK to post offtopic things here, you just might not get knowledgeable answers
15:43:27 <ais523> cpressey: it isn't, much to my annoyance
15:43:39 <ais523> I don't think it has any way to read arbitrary amounts of memory
15:43:42 <ais523> I consider this a bug :-D
15:44:04 <andrewd12> he asked "WHY IS IT NOT TURING COMPLETE"
15:44:16 <andrewd12> trying to get answers from the Coding Elite
15:44:24 <andrewd12> they told him "dude, it's just a game"
15:44:37 <andrewd12> "we're in dungeons, not searching for IT fame"
15:44:57 <andrewd12> and backto #esoteric he ventured, in strife
15:46:38 <ais523> I don't normally expect poems in here
15:46:58 <ais523> they've been of varying quality
15:47:00 <andrewd12> it was just a thing i wrote on the spot
15:47:15 <ais523> there was a haiku a while back which was either thought-provoking or terrible depending on your point of view
15:47:26 <ais523> (not written by me, by another channel regular)
15:47:41 <ais523> it went something like this: "beautiful summer / fuck fuck fuck fuck fuck fuck fuck / sent from my iphone"
15:53:42 <andrewd12> ais523 what about that feather language
15:54:03 <ais523> don't talk about Feather :-P
15:54:59 <ais523> it's literally madness-inducing
15:55:04 <ais523> it feels like it should work, but it doesn't
16:01:46 -!- cpressey has quit (Quit: A la prochaine.).
16:04:18 <andrewd12> i'm making feather? (nthe language name is "feather?)
16:06:00 -!- andrewd12 has changed nick to andrewtheircer.
16:23:40 <esowiki> [[User:Hanzlu]] https://esolangs.org/w/index.php?diff=65016&oldid=64945 * Hanzlu * (+362)
16:40:02 -!- andrewtheircer has quit (Remote host closed the connection).
16:40:28 -!- andrewtheircer has joined.
16:57:43 -!- FreeFull has joined.
16:59:52 -!- b_jonas has joined.
17:00:38 <b_jonas> ais523: try https://kiwiirc.com/client/irc.freenode.net as an alternate webchat
17:01:37 <b_jonas> cpressey: is Nethack Turing-complete or now?
17:02:27 -!- Phantom_Hoover has joined.
17:02:30 <b_jonas> "I don't think it has any way to read arbitrary amounts of memory" => um, do you mean like, per input command?
17:07:14 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65017&oldid=64993 * Hanzlu * (+121)
17:08:31 <ais523> b_jonas: I'm thinking in terms of setting up some sort of self-perpetuating shain reaction
17:09:38 <b_jonas> ais523: yes, but in what sense? can I put a weight on my . key? paste a longer constant command string repeatedly?
17:09:51 <b_jonas> or do you just want between two commands?
17:09:59 <ais523> I was assuming no action from the player, maybe they're a blue jelly with an amulet of unchanging in a boulder fort
17:10:31 <b_jonas> or trigger a bug in the travel command where it loops
17:11:16 <b_jonas> I think there are two difficulties why this rarely or never happens, one is that nethack tries to be balanced in a way that reactions don't get exponential, the other is that there's too much randomness
17:11:29 <b_jonas> so it's hard to rely on the same thing happening all the time
17:14:07 <b_jonas> now I'm trying to imagine a StackFlow implementation in a variant, where you have like ten piles of corpses, a creature zaps a wand of undead turning (this doesn't happen) in a direction depending on the type of that creature, the beam rebounds from the walls (this also doesn't happen), hits the right pile, and revives the corpse on top of that pile
17:16:25 <b_jonas> and then the first monster dies, but that's the easy part
17:21:58 <b_jonas> yeah, the hard part is that they have to be able to walk to multiple piles and leave specific other corpses as death drops there, before zapping the wand
17:22:21 <b_jonas> I guess at that point I could just imagine Waterfall Model instead, but even then it just doesn't work out
17:26:53 <b_jonas> or perhaps data is stored by a large cyclic queue of monsters wondering around in a directed loop that involves a trapdoor and a stairs up, and a protagonist who has to keep climbing up and down the stairs
17:32:41 -!- andrewtheircer has quit (Remote host closed the connection).
17:39:24 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65018&oldid=65017 * Hanzlu * (+1161)
17:41:16 -!- Melvar has quit (Quit: WeeChat 2.4).
17:42:24 <ais523> `! brachylog 295.30×₇₀
17:42:32 <ais523> `! brachylog 295.30×₇₀ẉ
17:42:49 <ais523> right, was checking to see if there'd be a .0 (and indeed, if the number would parse correctly)
17:43:29 <ais523> `! brachylog 70×↙295.30ẉ
17:43:39 <ais523> aha, I thought that might happen :-D
17:43:57 <ais523> `! brachylog 295.30×↙70ẉ
17:45:52 <b_jonas> also I realized last week where the name "brachylog" comes from. "brachy" means "short", and "log" is an abbreviation for "logic", the same one as used in "prolog"
17:45:58 <b_jonas> this should have been obvious
17:46:41 <b_jonas> but none of the other golf languages or competitions seem to use "brachy" in their name
17:51:26 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65019&oldid=65018 * Hanzlu * (+1)
18:00:07 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65020&oldid=65019 * Hanzlu * (+123)
18:19:56 <b_jonas> the docs of Brachylog are rather unclear
18:26:31 -!- Melvar has joined.
18:42:35 -!- jussgirl has joined.
18:42:41 <b_jonas> and the language design is ... odd too, definitely esoteric
18:42:48 <b_jonas> but there are a lot of things I don't understand from the docs
18:43:30 -!- jussgirl has left.
19:35:53 -!- xkapastel has quit (Quit: Connection closed for inactivity).
20:02:13 <Phantom_Hoover> by a dev who habitually switched off rust's safety checks at the drop of a hat and didn't understand how to write unsafe code at all
20:02:31 <Taneb> I can see how that'd lead to drama
20:02:55 -!- Lord_of_Life_ has joined.
20:03:33 <Phantom_Hoover> yes, because he also had this incredibly defensive mentality towards the whole thing to the point where he'd just close pull requests fixing needlessly unsafe code and tell them to fuck off
20:05:14 <Phantom_Hoover> but the rust community cult of niceness doesn't let you say that this guy is being an antisocial dick and you shouldn't use his projects, at least without a bunch of white knights saying that you're horrible ungrateful people who are not worthy to persecute this titan of http libraries
20:06:27 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
20:06:28 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:07:02 <zzo38> If you will see to use the projects or don't, to see if the project is good for your use, rather than if the author is bad.
20:07:48 <Phantom_Hoover> well the thing is that even saying 'this project's code is too unsafe to use with any confidence' is then interpreted as an attack on the developer
20:08:44 <zzo38> That isn't very good, then. It shouldn't be interpreted as an attack on the developer.
20:09:47 <Phantom_Hoover> what you see emerging is a defence in depth strategy designed to prevent anyone from ever criticising any project
20:10:21 <Phantom_Hoover> "the code is bad" "you should do something constructive and report issues rather than complaining"
20:10:54 <zzo38> Well, you should indicate what is bad about the code, rather than just "the code is bad"
20:11:16 <Phantom_Hoover> "the code is bad for these reasons" "it's open source, you should fix it yourself and submit pull requests"
20:11:34 <Phantom_Hoover> "here's a pull request" "i think the code is fine, closed"
20:12:00 <zzo38> If the author of that code disagree with other people who want it difference anyways, that is why, then you should fork it.
20:12:12 <Phantom_Hoover> "the code is crappy and the developer won't fix it, don't use it" "wow why are you attacking this developer, don't you know they're working for free"
20:13:19 <zzo38> Yes, the alternative is to don't use it, if you don't want to use.
20:13:32 <zzo38> If you do not want to fork it.
20:16:33 <Phantom_Hoover> idk what they'll say if you fork but i imagine they'll have a fallback
20:21:34 -!- adu has quit (Remote host closed the connection).
20:38:12 -!- adu has joined.
20:49:08 <esowiki> [[Boat]] https://esolangs.org/w/index.php?diff=65021&oldid=40619 * Hakr14 * (+281) I made your tables look nice.
20:59:34 -!- xkapastel has joined.
21:05:35 <esowiki> [[Talk:256]] N https://esolangs.org/w/index.php?oldid=65022 * A * (+666) Created page with "== People who don't know two golfing languages with different paradigms can not create a good golfing language == Uh-oh. You are trying to create another golfing language, but..."
21:06:29 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65023&oldid=65022 * A * (+55)
21:07:37 <esowiki> [[256]] M https://esolangs.org/w/index.php?diff=65024&oldid=65015 * A * (+2) Typos
21:09:19 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65025&oldid=65023 * A * (+111)
21:12:27 <esowiki> [[User:Hanzlu]] M https://esolangs.org/w/index.php?diff=65026&oldid=65016 * A * (+118) /* Rotating Cell Tape */
21:14:30 <esowiki> [[User:Hanzlu]] M https://esolangs.org/w/index.php?diff=65027&oldid=65026 * A * (+215) /* Rotating Cell Tape */
21:16:17 <esowiki> [[Boat]] https://esolangs.org/w/index.php?diff=65028&oldid=65021 * Hakr14 * (+603) I pressed save instead of preview... whoops
21:16:43 -!- doesthiswork has quit (Ping timeout: 245 seconds).
21:19:49 <esowiki> [[User:Hanzlu]] M https://esolangs.org/w/index.php?diff=65029&oldid=65027 * A * (+74) /* Rotating Cell Tape */
21:24:15 <kmc> Phantom_Hoover: yeah
21:24:41 <kmc> they make a big deal about "technical criticism not personal attacks" but then interpret everything as the latter
21:24:55 <kmc> you're allowed to criticise technical decisions (as long as you're sufficiently long-winded) but not the attitudes or behaviors that lead to them... as though decisions are made in a vacuum
21:27:26 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=65030&oldid=64997 * A * (-1426) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */ Merged, add new issue.
21:43:29 <tswett[m]> I'm gonna design a 15.99967-bit CPU. Each register and each memory location will contain an integer in the range from 0 to 65520.
21:44:16 <ais523> kmc: the obvious thing to do is to have all code contributed anonymously so that personal attacks aren't possible, all you can criticise is the code because you can't know who wrote it
21:44:31 <ais523> but that has problems in a different way, in that it may make people unwilling to contribute
21:45:37 <kmc> well that used to be more the norm in open source
21:45:48 <kmc> now people use their real names cause they want to give talks and build their career on it
21:46:06 <ais523> I typically use my real name for copyright reasons
21:48:04 <zzo38> ais523: Are you sure you will be unwilling to contribute?
21:48:12 <esowiki> [[Talk:256]] https://esolangs.org/w/index.php?diff=65031&oldid=65025 * Areallycoolusername * (+406)
21:48:49 <zzo38> I suppose another possibility is to allow (but not require) anonymous contributions
21:49:01 <ais523> zzo38: me personally, maybe not
21:49:50 <kmc> problem is once you use your real name you're also vulnerable to people coming after you for things you said elsewhere on the internet
21:49:55 <kmc> i've played that game and it sucks
21:50:02 <kmc> so that's one reason i'm leaving open source
21:53:09 <ais523> I kept "ais523" separate from my real name for many years but the connection's probably too widely known at this point
21:53:19 <zzo38> I have not had such problem, but, I don't care so much about that anyways.
21:53:45 <zzo38> I still work some open source stuff, mainly my own programs, although I put it into the public domain anyways
21:58:44 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=65032&oldid=64987 * A * (-2) /* Cat program */
22:00:22 <Phantom_Hoover> kmc, yeah it's just this culture that presupposes that everyone will try to make personal attacks and that's the only thing that can go wrong
22:00:42 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=65033&oldid=65032 * A * (+9) /* Cat program */
22:01:23 <Phantom_Hoover> which surprise surprise is basically the exact general attitude that defensive prima-donnas take whenever their work is questioned
22:01:25 <esowiki> [[256]] https://esolangs.org/w/index.php?diff=65034&oldid=65024 * Areallycoolusername * (+1122)
22:02:35 <zzo38> For my own projects I do allow you to post tickets anonymously if you want to do.
22:05:57 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65035&oldid=65031 * A * (+361)
22:07:52 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65036&oldid=65035 * A * (+61)
22:10:42 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65037&oldid=65036 * A * (+307) /* People who don't know two golfing languages with different paradigms can not create a good(competitive) golfing language */
22:16:47 <esowiki> [[256]] M https://esolangs.org/w/index.php?diff=65038&oldid=65034 * A * (+185) In order to make me feel relaxed when I am writing the integers function...
22:17:17 <zzo38> Do you know if there is a implementation of SDL1 for SDL2?
22:17:52 <zzo38> Also, is there a implementation of SDL2 on SDL1?
22:19:37 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65039&oldid=65037 * A * (+247)
22:25:17 <kmc> zzo38: then you could nest them
22:28:10 <esowiki> [[256]] M https://esolangs.org/w/index.php?diff=65040&oldid=65038 * A * (+1) /* Computational class */
22:30:33 <esowiki> [[256]] M https://esolangs.org/w/index.php?diff=65041&oldid=65040 * A * (+70) /* Computational class */ No it isn't (yet)
22:33:39 <esowiki> [[256]] M https://esolangs.org/w/index.php?diff=65042&oldid=65041 * A * (+352) /* Computational class */
22:34:17 <b_jonas> "<ais523> I kept "ais523" separate from my real name for many years" => I don't remember that
22:34:29 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65043&oldid=65039 * A * (+37)
22:36:31 -!- doesthiswork has joined.
22:41:30 <esowiki> [[Talk:256]] https://esolangs.org/w/index.php?diff=65044&oldid=65043 * Areallycoolusername * (+186)
22:41:50 <esowiki> [[Talk:256]] https://esolangs.org/w/index.php?diff=65045&oldid=65044 * Areallycoolusername * (+0)
22:42:18 <esowiki> [[256]] https://esolangs.org/w/index.php?diff=65046&oldid=65042 * Areallycoolusername * (+1)
23:31:56 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65047&oldid=65045 * A * (+0)
00:11:25 -!- Phantom_Hoover has quit (Ping timeout: 244 seconds).
00:12:55 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65048&oldid=64967 * A * (-501) wob_jonas has mentioned the long forgotten user afz! They said in this string+,07HOSTafz} :https://esolangs.org/logs/2019-08-02.html#lve Right now the wilki is secretly hosted by afz; wob_jonas is probably the only one who remembers afz.
00:28:21 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65049&oldid=65048 * A * (-253)
01:19:10 -!- xkapastel has quit (Quit: Connection closed for inactivity).
01:30:22 <esowiki> [[Talk:Keg]] https://esolangs.org/w/index.php?diff=65050&oldid=65030 * JonoCode9374 * (+420) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */
02:01:24 <tswett[m]> Oh God, I just learned about Three-Star Programmer.
02:07:45 <tswett[m]> So wait. Let's say that your program contains a couple of constants, like A, B, C, and D.
02:08:19 <tswett[m]> Then *A, *B, *C, and *D are pointers, of course.
02:09:31 <tswett[m]> Let's see, I'm imagining memory as a bunch of cells on a whiteboard, and four of the cells are permanently labeled as *A, *B, *C, and *D.
02:09:50 <tswett[m]> But you've also got four Post-It notes, which say **A, **B, **C, and **D.
02:12:53 <tswett[m]> Well, you find **A, dereference it, and increment whatever it points to. Then you do the same for **B, then **C, and so forth.
02:13:35 <tswett[m]> On the off chance that you ever increment *A, you take the **A Post-It note and move it to the right by one. Likewise for *B and so forth.
02:14:53 <tswett[m]> Now, eventually, all four of those Post-It notes are going to move all the way past *A, *B, *C and *D, never to return.
02:15:45 <tswett[m]> But I suppose it doesn't matter, since each time one of them moves on to fresh pasture, *its* target is now 0, which means it'll be able to point at *A or whatever at some point in the future.
02:16:48 <esowiki> [[Talk:Keg]] https://esolangs.org/w/index.php?diff=65051&oldid=65050 * A * (+207) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */
02:17:50 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=65052&oldid=65051 * A * (+30) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */
02:19:24 <esowiki> [[Talk:Keg]] M https://esolangs.org/w/index.php?diff=65053&oldid=65052 * A * (+86) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */
02:20:57 <Sgeo> "The feature that most clearly distinguishes the current generation of advanced microcomputer systems, however, is the ability to address lots of memory. It is this increased memory addressability which has ushered in the new era of microcomputer applications possibilities, such as large spreadsheets, integrated software, multi-user systems, and more. In this regard, the 65816 stands on or above par with any of the other highperformance
02:20:57 <Sgeo> microprocessors, such as the 68000, the 8086, or their successors."
02:22:38 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65054&oldid=65049 * A * (-2) tswett[m]: I essentially do not like non Turing-complete languages, but Three Star Programmer is *indeed* very fun.
02:25:52 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65055&oldid=65054 * A * (+2) Sgeo: the 4-bit processor 4004 is overall the most efficient, but I don't know whether it is good at addressing or not.
02:28:46 <tswett[m]> I see that I'm not the only one using a bouncer to connect to IRC.
02:29:00 <tswett[m]> But mine is a little more orthodox than [[User:A]]'s.
02:30:17 <esowiki> [[Talk:Keg]] https://esolangs.org/w/index.php?diff=65056&oldid=65053 * A * (+58) /* Keg+ Backwards compatibility issue and Keg lengthy code issue */
02:34:47 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65057&oldid=65055 * A * (-2) tswett[m]: ehird is gone.
02:45:41 <esowiki> [[Afz]] N https://esolangs.org/w/index.php?oldid=65058 * A * (+326) Created page with "{{lowercase}} [https://esolangs.org/logs/2019-08-02.html#lve Furthermore,] I recommend that the official #esoteric character set of 12 different characters for transmitting me..."
02:47:39 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65059&oldid=65058 * A * (+269)
02:48:33 <kmc> What is the most interesting English palindrome that can be made with just the letters AHIMOTUVWXY?
02:54:00 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65060&oldid=65059 * A * (+701)
02:55:36 <esowiki> [[Afz]] https://esolangs.org/w/index.php?diff=65061&oldid=65060 * A * (-1) kmc:I think it is the word "A". It is one of the few meaningful words that is 1 letter.
02:58:44 <esowiki> [[256]] https://esolangs.org/w/index.php?diff=65062&oldid=65046 * Areallycoolusername * (+133)
02:58:45 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65063&oldid=65061 * A * (+112)
03:03:46 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65064&oldid=65063 * A * (+70)
03:06:27 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65065&oldid=65064 * A * (+40)
03:09:40 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65066&oldid=65065 * A * (+275)
03:11:36 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65067&oldid=65066 * A * (+172)
03:12:58 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65068&oldid=65067 * A * (-9)
03:15:19 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65069&oldid=65068 * A * (+227)
03:16:57 <ais523> I didn't realise "please do not vandalise pages, even temporarily, so that their edit summaries show up on IRC" was required as a rule
03:17:25 <ais523> there's a reason you don't try to enumerate all the possible undesirable behaviours, it's because someone is bound to come up with something that isn't on the list yet
03:20:23 <int-e> Oh A is still responsible for what feels like 90% of all wiki edits :/
03:20:46 <int-e> (I guess I'll keep the ignore for a while longer.)
03:23:21 <int-e> kmc: I rather suspect that there are no really interesting anagrams with those letters in English, but maybe I need a better word list. (The longest ones were "maam" and "toot". You can also have tit for tat. And there are a few more exclamations like "wow", "aha" and also "huh".)
03:23:30 <esowiki> [[Afz]] M https://esolangs.org/w/index.php?diff=65070&oldid=65069 * A * (+61) /* Commands */
03:29:53 <kmc> int-e: well, you can use multiple words that aren't individually palindromes :)
03:32:37 <ais523> `file /usr/share/dict/words
03:32:38 <HackEso> /usr/share/dict/words: symbolic link to american-english
03:33:09 <ais523> `` grep -i ^[AHIMOTUVWXY]+$ /usr/share/dict/words | xargs
03:33:18 <ais523> `` grep -i '^[AHIMOTUVWXY]+$' /usr/share/dict/words | xargs
03:33:49 <ais523> `` egrep -i '^[AHIMOTUVWXY]+$' /usr/share/dict/words | xargs
03:33:50 <HackEso> A Am Amati Amway Amy At Au Av Ava Axum H Haiti Ham Hathaway Hawaii Hay Hiawatha Ho Hohhot Hui Hutu I Io Iowa It Ito Iva Ivy M MIT Mai Mao Matt Maui Max May Maya Mayo Mia Miami Mimi Mitty Mo Moho Mott Mt Muawiya O Oahu Ohio Omaha Ottawa Otto T TWA Ta Tahiti Tami Tammi Tammy Tao Tatum Th Thai Thoth Ti Tia Tim Timmy Timothy Tito Tm Tom Tommy Toto Toyota Tuamotu Tut Tutu Ty U Utah V Va Vitim Vito W Watt Wii Witt Wm Wu Wyatt Wyo X Y Yahoo Yamaha a ah aha ahoy a
03:34:09 <ais523> `` egrep -i '^[AHIMOTUVWXY]+$' /usr/share/dict/words | xargs | paste
03:34:11 <HackEso> https://hack.esolangs.org/tmp/paste/paste.31274
03:35:32 <int-e> `` echo $(< /usr/share/dict/words egrep -i '^[AHIMOTUVWXY]+$' | egrep '^(.)(((.)(((.)(.?\7)?)?\4)?)?\1)?$')
03:35:33 <HackEso> A H I M O T U V W X Y a aha h hah huh i m mom mum o oho t tat tit toot tot u v w wow x y
03:37:08 <ais523> atoi("iota") seems like a decent coding-based palindrome
03:37:13 <ais523> at least, it's at least marginally thought-provoking
03:37:28 <ais523> C doesn't recognise iota as a number, but it feels like it might be one in some context?
03:39:53 * int-e wonders why "mom" is not on the local word list.
03:40:45 <ais523> tswett[m]: three-star programmer is really confusing, it gets a bit easier with practice but it's still hard to juggle all the different levels of abstraction around in your head
03:40:46 <int-e> (Here I get "a aa aha ama amma atta ava awa h hah huh i ihi imi immi m maam mim mum o oho otto t tat tit toot tot tut tyt u umu utu v w waw wow x y yoy" (without -i which just adds more individual letters to the list))
03:41:10 <ais523> oh I did -i to avoid having to decapitalise the list of letters I'd copy-pasted ;-)
03:41:38 <int-e> (otoh it adds many non-words :-P)
03:41:58 <kmc> ais523: I like atoi("iota")
03:42:10 <kmc> although... my restricted list only really makes sense with capital letters
03:42:13 <kmc> (do you see why?)
03:42:16 <ais523> "atoi" isn't an English word, but it's probably a word in #esoteric context
03:42:24 <ais523> kmc: oh, I did as soon as you said that
03:42:37 <int-e> kmc: is there any significance to this particular list of letters?
03:42:38 <ais523> it's a pity, "atoi" only works in lowercase
03:43:23 <kmc> it's weird that half of them are adjacent at the end of the alphabet
03:43:30 <kmc> I wonder if there is some complex historical reason for that
03:43:45 <ais523> are letters near the end of the alphabet likely to be newer, possibly?
03:43:46 <kmc> I mean W used to be VV or something, so it makes sense those two are together
03:43:50 <kmc> other than that I have no idea
03:43:56 <ais523> how many are valid in Greek?
03:44:14 <ais523> T and U are, VWXY aren't, Z is
03:44:30 <ais523> (although initially U and V were the same letter, they got split later on; ditto I and J)
03:44:34 <Sgeo> zzo38, you like NSF music iirc?
03:44:59 <ais523> this probably explains why W is pronounced "double-U" but looks like double-V, U and V may have been equivalent at the time
03:45:02 <Sgeo> I'm bouncing back and forth between all these CPU architectures and with random music stuff associated with computers that used them
03:45:18 <kmc> in greek you have a lot more suitable letters
03:45:26 <kmc> ΑΔΗΘΙΛΜΞΟΠΤΥΦΧΨΩ
03:45:29 <kmc> most of them actually
03:45:30 <Sgeo> And SNES having a separate computer with separate memory just for music
03:45:42 <ais523> oh right, Greek does have an X
03:46:39 <ais523> …maybe Greek letters tended to change form as they moved into Latin (but not always), whereas the new letters were new and thus didn't have a chance to change from their original form?
03:46:42 <kmc> in Russian Cyrillic you have АЖМНОПТФХШ
03:47:14 <kmc> (also, I'm sure there is a name for this type of palindrome)
03:47:18 <kmc> (but I don't know what it is)
03:47:20 <ais523> kmc: slightly more allowing for non-palindromes
03:47:28 <ais523> I can make a guess at what it is but don't know if I'm write
03:48:57 <esowiki> [[Brainfuck-- interpreter]] https://esolangs.org/w/index.php?diff=65071&oldid=16542 * YamTokTpaFa * (+30)
03:49:27 <zzo38> Sgeo: Yes, I like NSF music and I know how is work NSF music.
03:50:40 <esowiki> [[( )fuck]] https://esolangs.org/w/index.php?diff=65072&oldid=55529 * YamTokTpaFa * (+59)
03:51:32 <esowiki> [[*]] https://esolangs.org/w/index.php?diff=65073&oldid=63918 * YamTokTpaFa * (+24)
03:51:43 -!- FreeFull has quit.
03:52:46 <ais523> is it possible to create an esolang that's a derivative of itself?
03:53:07 <int-e> you're describing Feather again, aren't you...
03:53:33 <esowiki> [[++Brainfuck]] https://esolangs.org/w/index.php?diff=65074&oldid=56550 * YamTokTpaFa * (+326)
03:53:44 <ais523> int-e: I thought of that, but Feather isn't really a Feather derivative
03:53:49 <ais523> it is implemented in itself, thoguh
03:53:57 <ais523> but then so are lots of other languages, like C
03:54:00 <int-e> it has the right kind of circularity though
03:54:09 -!- JonoCode9374 has joined.
03:54:14 <esowiki> [[.box]] https://esolangs.org/w/index.php?diff=65075&oldid=43893 * YamTokTpaFa * (+42)
03:55:06 <esowiki> [[0(nop^)]] https://esolangs.org/w/index.php?diff=65076&oldid=39667 * YamTokTpaFa * (+49)
03:56:29 <ais523> I guess maybe https://esolangs.org/wiki/Snowflake would become a derivative of itself if there were a working interpreter, and at least one program for it
04:01:27 <esowiki> [[.mOdMoDwOrM]] https://esolangs.org/w/index.php?diff=65077&oldid=38377 * YamTokTpaFa * (-41) pre tags... but how do I categorize this article...
04:03:44 -!- JonoCode9374 has quit (Remote host closed the connection).
04:05:15 <esowiki> [[User talk:Mahagugu]] N https://esolangs.org/w/index.php?oldid=65078 * YamTokTpaFa * (+568) Created page with "==Hello, I saw your articles [[.mOdMoDwOrM]] and [[.m@dpr'a'prozessor]]== If I were to annoy you, I'm sorry. When I was visiting articles on [[Special:UncategorizedPages]], I..."
04:06:32 <esowiki> [[11CORTLANG]] https://esolangs.org/w/index.php?diff=65079&oldid=60502 * YamTokTpaFa * (+49)
04:08:23 <esowiki> [[User talk:Cortex]] https://esolangs.org/w/index.php?diff=65080&oldid=59071 * YamTokTpaFa * (+368) /* Categorization, please. */ new section
04:08:51 <esowiki> [[1argasm]] https://esolangs.org/w/index.php?diff=65081&oldid=56185 * YamTokTpaFa * (+24)
04:09:11 <Sgeo> (d/dx)esolangs.org
04:10:22 <esowiki> [[User talk:Zero]] N https://esolangs.org/w/index.php?oldid=65082 * YamTokTpaFa * (+338) Created page with "==Categorization, please== Hello, I happened to visited your article [[1argasm]] on [[Special:UncategorizedPages]], and I categorized into [[:Category:Languages]]. Next time,..."
04:12:58 -!- doesthiswork has quit (Ping timeout: 245 seconds).
04:16:53 <esowiki> [[User talk:Iamcalledbob]] https://esolangs.org/w/index.php?diff=65083&oldid=55684 * YamTokTpaFa * (+314) /* Hey, what's the matter with 1st-Worst? */ new section
04:17:21 <esowiki> [[2.+-]] https://esolangs.org/w/index.php?diff=65084&oldid=55817 * YamTokTpaFa * (+24)
04:17:25 <Sgeo> I'm looking for the NSF equivalent of DeepSid and I found a page that's all about that music chip but also inexplicably links to NSFW stuff
04:18:09 <Sgeo> I can't tell if it's a spam infection or if this person is legitimately reviewing porn
04:19:27 <Sgeo> Or spam infection that had a human realize a way to make it look just a bit more legitimate by referencing gaming
04:20:13 <Sgeo> http://www.2a03.org
04:21:12 <ais523> isn't there some sort of rule against linking to porn on Freenode? :-D
04:21:20 <kmc> Sgeo: that is... pretty odd
04:21:23 <kmc> ais523: I hope not, lol
04:21:28 <kmc> I've violated that rule many times
04:22:49 <esowiki> [[User talk:Ais523]] https://esolangs.org/w/index.php?diff=65085&oldid=64473 * YamTokTpaFa * (+683) /* Could I be a new admin of this wiki? */ new section
04:23:33 <int-e> ais523: isn't there a rule that says this channel should be called ##esoteric :P
04:24:07 <esowiki> [[]] https://esolangs.org/w/index.php?diff=65086&oldid=30209 * YamTokTpaFa * (+24)
04:24:37 <esowiki> [[]] https://esolangs.org/w/index.php?diff=65087&oldid=51809 * YamTokTpaFa * (+24)
04:24:43 <ais523> int-e: it depends on whether we have a better claim to anyone else to the word "esoteric" in programming contexts
04:24:45 * int-e wonders how big the largest channel violating that rule is.
04:25:04 <ais523> (I think it was cpressey who came up with the word?)
04:25:41 <esowiki> [[\ () /]] https://esolangs.org/w/index.php?diff=65088&oldid=58317 * YamTokTpaFa * (+42)
04:25:43 <int-e> (#math got away with it for quite a year or two but was eventually converted.)
04:26:06 <int-e> ais523: Obviously I'm not going to ask :)
04:27:03 <esowiki> [[User talk:Randairox]] N https://esolangs.org/w/index.php?oldid=65089 * YamTokTpaFa * (+318) Created page with "==Categorizing [[\ () /]]== Hello, I happened to see your article on [[Special:UncategorizedPages]]. Is it [[:Category:Brainfuck derivatives|a derivation of brainfuck]]..."
04:27:35 <esowiki> [[~-Hash]] https://esolangs.org/w/index.php?diff=65090&oldid=38408 * YamTokTpaFa * (+59)
04:28:05 <esowiki> [[`LML]] https://esolangs.org/w/index.php?diff=65091&oldid=54446 * YamTokTpaFa * (+59)
04:28:57 <Sgeo> Why don't all the retro music things have something like DeepSID?
04:29:49 <esowiki> [[User talk:Ais523]] https://esolangs.org/w/index.php?diff=65092&oldid=65085 * Ais523 * (+1215) /* Could I be a new admin of this wiki? */ you don't need to be an admin to do that
04:29:53 <esowiki> [[What the fuck is the Internet?]] https://esolangs.org/w/index.php?diff=65093&oldid=53725 * YamTokTpaFa * (+59)
04:30:08 <esowiki> [[Varnand/Python Implementation]] https://esolangs.org/w/index.php?diff=65094&oldid=64504 * YamTokTpaFa * (+30)
04:30:37 <zzo38> You mentioned SNES having a separate computer with separate memory for music, and I also thought of a similar thing, although mine is a bit different, that buffers only one sample ahead on each of four channels (if you want more, you have to do mixing yourself), and then one instruction waits for and acknowledges an event and jumps to the event handler.
04:30:54 <esowiki> [[YesNoMaybeUnknown]] https://esolangs.org/w/index.php?diff=65095&oldid=60094 * YamTokTpaFa * (+24)
04:31:35 <zzo38> (The possible events are a timeout event for each channel, and receiving data.)
04:37:05 <esowiki> [[User:YamTokWae]] https://esolangs.org/w/index.php?diff=65096&oldid=57530 * YamTokTpaFa * (+134)
04:39:12 <esowiki> [[? $51=]] https://esolangs.org/w/index.php?diff=65097&oldid=64602 * YamTokTpaFa * (+9) +WIP and moved CAT into bottom
04:40:04 <esowiki> [[Seabass]] https://esolangs.org/w/index.php?diff=65098&oldid=64724 * YamTokTpaFa * (+49)
04:42:22 <kmc> can't you say this channel is the eofficial channel of the esolang wiki
04:43:20 <HackEso> 252) <zzo38> Is anyone in here who knows cricket rules and has experience? <Slereah> What if I told you the baseball rules in a british accent? \ 657) <ais523> is there any evidence that Jesus knew the rules of tic-tac-toe? \ 1327) <wob_jonas> ARGH! I just saw something on the web that is publicly available, but I shouldn't have looked at it, and now I can't unsee it. I was naive, I used to imagine that the world was a nicer place. <wob_jonas> It's the r
04:43:24 <zzo38> I think it would be official channel of esolang wiki.
04:43:55 <int-e> fungot`: what's with the `?
04:43:55 <fungot`> int-e: you don't with rez... kinda like a " smart" stack copying. it also had the amazing poke to tamper with them.
04:44:26 <ais523> I think fungot` is its alternate nick
04:44:26 <fungot`> ais523: you can make a new object structure, as far as syncretic abominations go, it is sent to b, f, g) h), but
04:44:45 <ais523> fungot`: "syncretic" has been said often enough to not be fnorded?
04:44:46 <fungot`> ais523: maybe :p though norway was swedish until 1906, so you can basically add to extend-environment: http://www.shiro.dreamhost.com/ scheme/ vault/ escm.html some
04:44:50 <lambdabot> *** "syncretic" wn "WordNet (r) 3.0 (2006)"
04:44:50 <lambdabot> adj 1: relating to a historical tendency for a language to
04:44:50 <lambdabot> reduce its use of inflections; "modern English is a
04:44:50 <lambdabot> syncretic language" [syn: {syncretic}, {syncretical},
04:45:06 <lambdabot> 2: of or characterized by syncretism [syn: {syncretic},
04:45:06 <lambdabot> {syncretical}, {syncretistic}, {syncretistical}]
04:45:14 <ais523> I am not surprised I didn't know that word
04:47:25 <lambdabot> *** "syncretism" wn "WordNet (r) 3.0 (2006)"
04:47:25 <lambdabot> n 1: the union (or attempted fusion) of different systems of
04:47:25 <lambdabot> thought or belief (especially in religion or philosophy);
04:47:25 <lambdabot> "a syncretism of material and immaterial theories"
04:47:27 <lambdabot> 2: the fusion of originally different inflected forms (resulting
04:47:29 <lambdabot> in a reduction in the use of inflections)
04:47:32 <int-e> aka the tendency of people to speak with their mouth closed?
04:48:09 <ais523> it's probably more like the way that, e.g., English mostly doesn't have gendered inflections for adjectives even though many of its parent languages do
04:48:17 <Sgeo> Can a 65816 be put into emulation mode with its ... bank and page register thingies non-0?
04:48:19 <ais523> (there's at least one case where it does, "blond" for males, "blonde" for females)
04:49:19 <kmc> I never knew that!
04:49:25 <kmc> I never thought about those two words being different
04:49:50 -!- nfd9001 has joined.
04:50:50 <Sgeo> "Finally, emulation mode code does not have to be in bank 0, as long as there are no interrupts."
04:54:29 <int-e> oh yes, easier times
04:55:15 <int-e> (when you could assess the ramifications of disabling interrupts)
04:55:27 <int-e> and I mean "simpler" not "easier"
04:57:15 <Sgeo> 65816 has an "abort" thingy which looks intended to allow for an MMU
04:58:56 <kmc> is that the SNES CPU?
05:00:35 <Sgeo> Apparently SNES is somethign else that's based on it
05:01:03 <Sgeo> https://en.wikipedia.org/wiki/Ricoh_5A22
05:01:17 <Sgeo> Huh, apparently it is more different to the 65812 than the 6510 is to 6502
05:02:49 <Sgeo> " When running the 65802 in an older machine, such as Apple II c, II e, or II Plus, you will probably
05:02:49 <Sgeo> call your 65802 programs from a 6502 operating system or program."
05:03:03 <int-e> it's "different /from/"
05:04:02 <Sgeo> Huh. I was thinking about a 65816 OS hosting 6502 programs, but the other way around sounds like DOS extenders I think
05:05:01 <Sgeo> (Although in the 65802 case it wouldn't help use more memory, since it's hardware compatible and so limited to 64k)
05:05:50 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=65099&oldid=64992 * YamTokTpaFa * (+198) /* Instructions */
05:09:13 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=65100&oldid=65099 * YamTokTpaFa * (-198) Undoing
05:09:25 -!- ais523 has quit (Quit: quit).
05:28:16 <Sgeo> I wonder what a CPU intended to be efficient at emulating semi-arbitrary CPU architectures, and possibly multitasking among multiple occurring emulations would look like
05:29:08 <Sgeo> Possibly with a simple translation step beforehand. Although now I'm wondering if that's skippable
05:34:51 <int-e> well that would save you the hassle of instruction decoding
05:35:31 <int-e> So you can focus on functionality, and keeping track of how the original program locations relate to the new ones.
05:38:19 <Sgeo> o.O apparently the manual I was reading is "dangerously wrong"
05:38:33 <Sgeo> This is a "pure text" version of the Eyes/Lichty book, however it is rife with very dangerous typos (wrong opcodes, etc.) in many areas, and contains a large number of formatting/layout mistakes not present in the original book. Bill Mensch (6502/65C02/65816 architect/designer) confirmed these mistakes, stating WDC is in the process of fixing them. If at all possible, use the newer PDF mentioned above."
05:38:39 <Sgeo> https://wiki.nesdev.com/w/index.php/Programming_guide
05:41:59 <int-e> This may be unexplored territory (though Transmeta comes to mind, but they still only targeted a particular platform) so far our emulation problems have mostly be solved by Moore's law, boosted by just-in-time compilers :P
06:03:22 <kmc> /topic rife with very dangerous typos
06:04:05 <esowiki> [[2015]] M https://esolangs.org/w/index.php?diff=65101&oldid=46056 * A * (+41) YamTokTpaFa I am going to help you.
06:04:44 <esowiki> [[1st-Worst]] M https://esolangs.org/w/index.php?diff=65102&oldid=55823 * A * (+68)
06:05:03 <esowiki> [[2015]] M https://esolangs.org/w/index.php?diff=65103&oldid=65101 * A * (+28) Whoops
06:05:45 <esowiki> [[2/9 of an esolang]] M https://esolangs.org/w/index.php?diff=65104&oldid=59665 * A * (+68)
06:06:27 -!- int-e has set topic: IOCCC winners are denounced; source code release delayed | Welcome to the international center for esoteric programming language design, development, and deployment! | https://esolangs.org | logs: https://esolangs.org/logs/ http://codu.org/logs/_esoteric/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D.
06:06:55 <esowiki> [[.m@dpr'a'prozessor]] M https://esolangs.org/w/index.php?diff=65105&oldid=38378 * A * (+68)
06:08:07 <esowiki> [[.mOdMoDwOrM]] M https://esolangs.org/w/index.php?diff=65106&oldid=65077 * A * (+63) YamTokTpaFa You simply summarize the article.
06:09:15 <esowiki> [[ASCII]] M https://esolangs.org/w/index.php?diff=65107&oldid=60469 * A * (+22)
06:09:39 <esowiki> [[ASCII art/mandelbrot]] M https://esolangs.org/w/index.php?diff=65108&oldid=43257 * A * (+49)
06:10:58 <esowiki> [[2006 Esolang Contest]] M https://esolangs.org/w/index.php?diff=65109&oldid=16622 * A * (+18) From 2006 (I had to add a category though)
06:11:28 <esowiki> [[2D BF]] M https://esolangs.org/w/index.php?diff=65110&oldid=55819 * A * (+41)
06:12:10 <esowiki> [[2xNeg]] M https://esolangs.org/w/index.php?diff=65111&oldid=52403 * A * (+66)
06:13:03 <esowiki> [[4]] M https://esolangs.org/w/index.php?diff=65112&oldid=58588 * A * (+91)
06:13:49 <esowiki> [[4-list]] M https://esolangs.org/w/index.php?diff=65113&oldid=55998 * A * (+75)
06:14:31 <esowiki> [[5command]] M https://esolangs.org/w/index.php?diff=65114&oldid=39732 * A * (+65)
06:15:26 <esowiki> [[7Basic]] M https://esolangs.org/w/index.php?diff=65115&oldid=44264 * A * (+41)
06:15:56 <esowiki> [[=]] M https://esolangs.org/w/index.php?diff=65116&oldid=55653 * A * (+41)
06:16:34 <esowiki> [[@]] M https://esolangs.org/w/index.php?diff=65117&oldid=52411 * A * (+96)
06:17:41 <esowiki> [[AAEEEEEEEEEI]] M https://esolangs.org/w/index.php?diff=65118&oldid=53635 * A * (+74)
06:18:38 <esowiki> [[ADDI]] https://esolangs.org/w/index.php?diff=65119&oldid=45361 * A * (+68)
06:19:32 <esowiki> [[AFTL]] M https://esolangs.org/w/index.php?diff=65120&oldid=42714 * A * (+94)
06:21:00 <esowiki> [[AIV]] M https://esolangs.org/w/index.php?diff=65121&oldid=45094 * A * (+68)
06:21:32 <esowiki> [[ALL]] M https://esolangs.org/w/index.php?diff=65122&oldid=50921 * A * (+41)
06:22:28 <esowiki> [[ARGENTOS]] M https://esolangs.org/w/index.php?diff=65123&oldid=50219 * A * (+66) I can't understand it.
06:23:12 <esowiki> [[AT]] M https://esolangs.org/w/index.php?diff=65124&oldid=61495 * A * (+68)
06:24:40 <esowiki> [[Aaargh++]] M https://esolangs.org/w/index.php?diff=65125&oldid=33976 * A * (+109)
06:26:04 <esowiki> [[Z80golf]] M https://esolangs.org/w/index.php?diff=65126&oldid=54232 * A * (+71)
07:00:24 <esowiki> [[Keg+ Language Design]] N https://esolangs.org/w/index.php?oldid=65127 * JonoCode9374 * (+7407) Big page of my plans
07:09:39 -!- andrewtheircer has joined.
07:20:31 <Sgeo> I wonder if PEOSIX or EsoAPI pages should link to PSOX >.>. Also I should repoint the links on PSOX page to GitHub
07:24:42 <esowiki> [[PSOX]] https://esolangs.org/w/index.php?diff=65128&oldid=25373 * Sgeo * (-425) Who uses Assembla anymore?
07:34:42 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65129&oldid=65020 * Hanzlu * (-558)
07:34:59 * Sgeo stares at LBYTES and wonder if that's why ehird complained that API authors should know what malloc is.
07:36:23 <Sgeo> The PSOX server doesn't have a way to know how much space to allocate
07:38:37 <esowiki> [[Talk:Keg+ Language Design]] N https://esolangs.org/w/index.php?oldid=65130 * A * (+368) Created page with "I see. So Keg+ is harder to golf than Keg, as more parts are mandatory compared to Keg. (For example, the for loop now requires iteration.) However, some other problems might..."
07:41:29 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65131&oldid=65130 * A * (+71)
07:42:41 <esowiki> [[Talk:Keg+ Language Design]] https://esolangs.org/w/index.php?diff=65132&oldid=65131 * A * (+146)
07:43:07 <esowiki> [[Talk:Keg+ Language Design]] https://esolangs.org/w/index.php?diff=65133&oldid=65132 * A * (+40)
07:48:37 <esowiki> [[Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65134&oldid=65127 * A * (+297) /* Completely New */
07:50:28 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65135&oldid=65133 * A * (+59)
07:50:48 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65136&oldid=65135 * A * (-71)
07:52:53 <Sgeo> REGEX1 = re.compile(r"((?:[^\x00]|\x00{2}(?:.|\Z))*)(\x00.*)?\Z", re.S)
07:53:18 <Sgeo> .....I'd like to hope that if I were to write such a regex today, I'd at least give it a better name
08:03:30 <esowiki> [[Talk:Keg+ Language Design]] https://esolangs.org/w/index.php?diff=65137&oldid=65136 * JonoCode9374 * (+361)
08:05:32 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
08:07:57 -!- Lord_of_Life has joined.
08:08:20 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65138&oldid=65137 * A * (+468)
08:08:44 -!- b_jonas has quit (Ping timeout: 272 seconds).
08:09:15 -!- b_jonas has joined.
08:09:48 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65139&oldid=65138 * A * (+40)
08:15:58 <esowiki> [[Talk:Andrew's Programming Language]] https://esolangs.org/w/index.php?diff=65140&oldid=12762 * A * (+247)
08:24:17 <esowiki> [[Hi-assembly]] M https://esolangs.org/w/index.php?diff=65141&oldid=55958 * A * (+64)
08:25:21 <esowiki> [[Turing (Iamcalledbob)]] M https://esolangs.org/w/index.php?diff=65142&oldid=55853 * A * (+68)
08:30:33 <rain2> i dont have any just now
08:37:39 <esowiki> [[Talk:Keg+ Language Design]] https://esolangs.org/w/index.php?diff=65143&oldid=65139 * JonoCode9374 * (+1141)
09:07:22 <esowiki> [[User:JonoCode9374]] https://esolangs.org/w/index.php?diff=65144&oldid=64834 * JonoCode9374 * (+1358) Start of a bit of storytelling
09:43:52 -!- ProofTechnique has quit (Ping timeout: 252 seconds).
09:44:36 -!- ^[ has quit (Ping timeout: 252 seconds).
09:45:43 -!- ProofTechnique has joined.
09:47:34 -!- ^[ has joined.
10:48:53 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65145&oldid=65143 * A * (+349)
10:53:49 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65146&oldid=65129 * Hanzlu * (+1777)
10:53:53 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65147&oldid=65145 * A * (+37)
10:54:36 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65148&oldid=65146 * Hanzlu * (+0)
10:56:20 -!- andrewtheircer has quit (Remote host closed the connection).
11:25:44 -!- FreeFull has joined.
11:43:27 -!- andrewtheircer has joined.
11:44:50 -!- andrewtheircer has left.
11:47:18 -!- JonoCode9374 has joined.
11:47:50 -!- JonoCode9374 has quit (Remote host closed the connection).
11:53:57 <esowiki> [[Talk:ACL]] https://esolangs.org/w/index.php?diff=65149&oldid=64897 * JonoCode9374 * (+193) /* Comments */ new section
11:57:02 -!- andrewtheircer has joined.
12:22:15 -!- andrewtheircer has quit (Remote host closed the connection).
12:31:53 <b_jonas> "<Sgeo> I wonder what a CPU intended to be efficient at emulating semi-arbitrary CPU architectures ... would look like" => it would look like an FPGA
12:35:58 <b_jonas> that's it, I'm downloading 12dicts to hackenv so you can use a proper dictionary instead of whatever random nonsense is in /usr
12:36:12 <b_jonas> `fetch http://downloads.sourceforge.net/wordlist/12dicts-6.0.2.zip
12:36:50 <b_jonas> oh jesus, it's hosted on sourceforge
12:38:56 <b_jonas> ``` mkdir -p share/dict/12dicts/Lemmatized
12:39:22 <b_jonas> ``` echo http://wordlist.aspell.net/12dicts/ > share/dict/12dicts/readme.hackeso
12:39:42 <b_jonas> `edit share/dict/12dicts/Lemmatized/2+2+3lem.txt
12:39:43 <HackEso> https://hack.esolangs.org/edit/share/dict/12dicts/Lemmatized/2%2B2%2B3lem.txt
12:40:37 <b_jonas> `fetch share/dict/12dicts/Lemmatized/2+2+3frq.txt https://hack.esolangs.org/get/share/dict/12dicts/Lemmatized/2+2+3frq.txt
12:40:38 <HackEso> 2019-08-03 12:40:38 URL:https://hack.esolangs.org/get/share/dict/12dicts/Lemmatized/2+2+3frq.txt [327329/327329] -> "share/dict/12dicts/Lemmatized/2+2+3frq.txt" [1]
12:42:18 <b_jonas> `fetch share/dict/12dicts/Lemmatized/2+2+3cmn.txt https://hack.esolangs.org/get/share/dict/12dicts/Lemmatized/2+2+3cmn.txt
12:42:19 <HackEso> 2019-08-03 12:42:18 URL:https://hack.esolangs.org/get/share/dict/12dicts/Lemmatized/2+2+3cmn.txt [240505/240505] -> "share/dict/12dicts/Lemmatized/2+2+3cmn.txt" [1]
12:43:36 <b_jonas> `fetch share/dict/12dicts/ReadMe.html https://hack.esolangs.org/get/share/dict/12dicts/ReadMe.html
12:43:37 <HackEso> 2019-08-03 12:43:37 URL:https://hack.esolangs.org/get/share/dict/12dicts/ReadMe.html [116952/116952] -> "share/dict/12dicts/ReadMe.html" [1]
12:46:16 <b_jonas> ``` mkdir -p share/dict/12dicts/American
12:46:20 <b_jonas> `fetch share/dict/12dicts/American/6of12.txt https://hack.esolangs.org/get/share/dict/12dicts/American/6of12.txt
12:46:21 <HackEso> 2019-08-03 12:46:21 URL:https://hack.esolangs.org/get/share/dict/12dicts/American/6of12.txt [302206/302206] -> "share/dict/12dicts/American/6of12.txt" [1]
12:46:41 <HackEso> https://hack.esolangs.org/repo/
12:47:17 <b_jonas> `fetch share/dict/12dicts/American/2of12.txt https://hack.esolangs.org/get/share/dict/12dicts/American/2of12.txt
12:47:18 <HackEso> 2019-08-03 12:47:18 URL:https://hack.esolangs.org/get/share/dict/12dicts/American/2of12.txt [389024/389024] -> "share/dict/12dicts/American/2of12.txt" [1]
12:47:54 <b_jonas> `fetch share/dict/12dicts/alllists.html https://hack.esolangs.org/get/share/dict/12dicts/alllists.html
12:47:55 <HackEso> 2019-08-03 12:47:54 URL:https://hack.esolangs.org/get/share/dict/12dicts/alllists.html [27214/27214] -> "share/dict/12dicts/alllists.html" [1]
12:50:47 <b_jonas> `fetch share/dict/12dicts/American/2of12inf-part0.txt https://hack.esolangs.org/get/share/dict/12dicts/American/2of12inf-part0.txt
12:50:48 <HackEso> 2019-08-03 12:50:48 URL:https://hack.esolangs.org/get/share/dict/12dicts/American/2of12inf-part0.txt [455960/455960] -> "share/dict/12dicts/American/2of12inf-part0.txt" [1]
12:51:07 <b_jonas> `fetch share/dict/12dicts/American/2of12inf-part1.txt https://hack.esolangs.org/get/share/dict/12dicts/American/2of12inf-part1.txt
12:51:08 <HackEso> 2019-08-03 12:51:07 URL:https://hack.esolangs.org/get/share/dict/12dicts/American/2of12inf-part1.txt [343509/343509] -> "share/dict/12dicts/American/2of12inf-part1.txt" [1]
12:51:36 <b_jonas> ``` cat share/dict/12dicts/American/2of12inf-part?.txt > share/dict/12dicts/American/2of12inf.txt
12:52:23 <b_jonas> ``` grep -Ei '\<[qwertyuiop]{8,}\>' share/dict/12dicts/American/2of12inf.txt
12:52:24 <HackEso> etiquette \ perpetuity \ pirouette \ portiere \ potpourri \ preppier \ preterit \ preterite \ prettier \ priority \ properer \ property \ proprietor \ propriety \ prototype \ puppeteer \ puppetry \ putterer \ repertoire \ repertory \ reporter \ requiter \ territory \ torturer \ totterer \ twittery \ typewrite \ typewriter \ typewrote
12:52:36 <b_jonas> ``` rm -v share/dict/12dicts/American/2of12inf-part?.txt
12:52:38 <HackEso> removed 'share/dict/12dicts/American/2of12inf-part0.txt' \ removed 'share/dict/12dicts/American/2of12inf-part1.txt'
12:53:09 <b_jonas> `fetch share/dict/12dicts/American/3esl.txt https://hack.esolangs.org/get/share/dict/12dicts/American/3esl.txt
12:53:10 <HackEso> 2019-08-03 12:53:10 URL:https://hack.esolangs.org/get/share/dict/12dicts/American/3esl.txt [196421/196421] -> "share/dict/12dicts/American/3esl.txt" [1]
12:56:18 <b_jonas> ok, now what was your original question about palindromes?
12:57:49 <int-e> english palindromes made of AHIMOTUVWXY
12:59:16 <b_jonas> ``` perl -ne '/^([ahimotuvwxy]+)[&#=<^~+]?$/i && lc $1 eq reverse lc $1 and print $1, " "' share/dict/12dicts/American/2of12inf.txt
12:59:16 <HackEso> aha hah huh mom mum oho tat tit toot tot tut wow
12:59:34 <b_jonas> int-e: sorry, it was a rethorical question, I was just slow to type up the code
12:59:42 <b_jonas> apparently there aren't many
13:00:05 <b_jonas> ``` perl -ne '/^([ahimotuvwxyEN]+)[&#=<^~+]?$/i && lc $1 eq reverse lc $1 and print $1, " "' share/dict/12dicts/American/2of12inf.txt # what if we allow a bit more letters?
13:00:10 <HackEso> aha eve ewe eye hah huh minim mom mum noon nun oho tat tenet tit toot tot tut wow
13:00:23 <b_jonas> ``` perl -ne '/^([ahimotuvwxyENSLR]+)[&#=<^~+]?$/i && lc $1 eq reverse lc $1 and print $1, " "' share/dict/12dicts/American/2of12inf.txt # even more?
13:00:25 <HackEso> aha ere eve ewe eye hah huh level minim mom mum noon nun oho rotor sees sexes shahs sis solos stats stets tat tenet tit toot tot tut wow
13:01:29 <b_jonas> ``` perl -ne '/^\s*([ahimotuvwxy]+)[&#=<^~+]?$/i && lc $1 eq reverse lc $1 and print $1, " "' share/dict/12dicts/American/2of12inf.txt
13:01:30 <HackEso> aha hah huh mom mum oho tat tit toot tot tut wow
13:02:06 <b_jonas> oh right, this isn't one of the lemmatized lists, it doesn't have leading whitespace
13:04:24 <b_jonas> ``` perl -ne '/^\s*([a-z]+)[&#=<^~+]*$/i && lc $1 eq reverse lc $1 and print $1, " "' share/dict/12dicts/American/2of12inf.txt # there aren't many palyndromic single words even if you allow all letters
13:04:25 <HackEso> aha bib bob boob bub civic dad deed deified did dud eke ere eve ewe eye gag gig hah huh kayak kook level madam minim mom mum noon nun oho pap peep pep pip poop pop pullup pup radar redder refer rotor sagas sees sexes shahs sis solos stats stets tat tenet tit toot tot tut wow
13:04:42 <b_jonas> I think I looked for words whose reverse is also a word a month ago or so
13:07:52 <b_jonas> "diaper" vs "repaied" was one of the longest pairs
13:12:45 <b_jonas> ``` perl -ne '/^([a-z]+)[&#=<^~+]?/ or die "syntax $_; $w=$1; $w{$w}++; 6 <= length$w && $w ne reverse($w) && $w{reverse$w} and print reverse($w)."|$w ";' American/2of12inf.txt
13:12:46 <HackEso> String found where operator expected at -e line 1, at end of line \ (Missing semicolon on previous line?) \ Can't find string terminator '"' anywhere before EOF at -e line 1.
13:12:51 <b_jonas> ``` perl -ne '/^([a-z]+)[&#=<^~+]?/ or die "syntax $_"; $w=$1; $w{$w}++; 6 <= length$w && $w ne reverse($w) && $w{reverse$w} and print reverse($w)."|$w ";' American/2of12inf.txt
13:12:52 <HackEso> Can't open American/2of12inf.txt: No such file or directory.
13:12:59 <b_jonas> ``` perl -ne '/^([a-z]+)[&#=<^~+]?/ or die "syntax $_"; $w=$1; $w{$w}++; 6 <= length$w && $w ne reverse($w) && $w{reverse$w} and print reverse($w)."|$w ";' share/dict/12dicts/American/2of12inf.txt
13:13:00 <HackEso> animal|lamina deffer|reffed denier|reined eviler|relive diaper|repaid looter|retool deliver|reviled drawer|reward denies|seined retros|sorter recaps|spacer sloops|spools snoops|spoons sleets|steels desserts|stressed sports|strops redraw|warder
13:13:24 <b_jonas> ``` perl -ne '/^([a-z]+)[&#=<^~+]?/ or die; $w=$1; $w{$w}++; 5 == length$w && $w ne reverse($w) && $w{reverse$w} and print reverse($w)."|$w ";' share/dict/12dicts/American/2of12inf.txt
13:13:25 <HackEso> decaf|faced decal|laced devil|lived denim|mined pacer|recap lager|regal leper|repel lever|revel fires|serif keels|sleek peels|sleep pools|sloop snaps|spans deeps|speed snips|spins loops|spool knits|stink loots|stool spots|stops parts|strap ports|strop draws|sward sprat|tarps relit|tiler remit|timer smart|trams debut|tubed rebut|tuber straw|warts
13:14:03 <b_jonas> I thought this was in the logs somewhere, but it's not
13:23:11 <b_jonas> ``` perl -e 'while(<>) { ($w) = /^([a-z]+)[!%&#=<^~+\r]*$/ or die "syntax $_"; if (reverse($w) eq $w) { print "$w " } }' share/dict/12dicts/American/2of12inf.txt
13:23:12 <HackEso> aha bib bob boob bub civic dad deed deified did dud eke ere eve ewe eye gag gig hah huh kayak kook level madam minim mom mum noon nun oho pap peep pep pip poop pop pullup pup radar redder refer rotor sagas sees sexes shahs sis solos sos stats stets tat tenet tit toot tot tut wow
13:23:21 <b_jonas> ``` perl -e 'while(<>) { ($w) = /^([ahimotuvwxy]+)[!%&#=<^~+\r]*$/ or die "syntax $_"; if (reverse($w) eq $w) { print "$w " } }' share/dict/12dicts/American/2of12inf.txt
13:24:01 <b_jonas> ``` perl -e 'while(<>) { ($w) = /^([a-z]+)[!%&#=<^~+\r]*$/ or die "syntax $_"; if ($w !~ y/ahimotuvwxy//c && reverse($w) eq $w) { print "$w " } }' share/dict/12dicts/American/2of12inf.txt
13:24:05 <HackEso> aha hah huh mom mum oho tat tit toot tot tut wow
13:24:53 <b_jonas> ``` perl -e 'while(<>) { ($w) = /^([a-z]+)[!%&#=<^~+\r]*$/ or die "syntax $_"; $w{$w}++; if ($w !~ y/ahimotuvwxy//c && reverse($w) ne $w && $w{reverse($w)}) { print "$w " } }' share/dict/12dicts/American/2of12inf.txt
13:24:54 <HackEso> ha ma oh tam ti tom um ya yam yaw
13:29:17 -!- doesthiswork has joined.
13:36:46 -!- adu has quit (Quit: adu).
13:55:53 <esowiki> [[Talk:ACL]] https://esolangs.org/w/index.php?diff=65150&oldid=65149 * Hanzlu * (+74)
14:02:22 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65151&oldid=65148 * Hanzlu * (-4)
14:06:29 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65152&oldid=65151 * Hanzlu * (-143)
14:08:37 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65153&oldid=65152 * Hanzlu * (-31)
14:26:27 <esowiki> [[User:YamTokTpaFa/sandbox3]] https://esolangs.org/w/index.php?diff=65154&oldid=63951 * YamTokTpaFa * (-633) Blanked the page
14:27:26 <esowiki> [[Morsefuck]] https://esolangs.org/w/index.php?diff=65155&oldid=54772 * YamTokTpaFa * (+35)
14:28:10 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65156&oldid=65153 * Hanzlu * (-399)
14:28:29 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65157&oldid=65156 * Hanzlu * (+2)
14:30:13 <esowiki> [[Sd]] https://esolangs.org/w/index.php?diff=65158&oldid=50839 * YamTokTpaFa * (+77)
14:30:43 <esowiki> [[Haddock]] M https://esolangs.org/w/index.php?diff=65159&oldid=54433 * YamTokTpaFa * (+17)
14:31:47 <esowiki> [[!Tautologos]] https://esolangs.org/w/index.php?diff=65160&oldid=46734 * YamTokTpaFa * (+28)
14:32:24 <esowiki> [[Jumper]] https://esolangs.org/w/index.php?diff=65161&oldid=43918 * YamTokTpaFa * (+54)
14:35:04 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65162&oldid=65157 * Hanzlu * (-1)
14:35:43 <esowiki> [[User:YamTokTpaFa]] https://esolangs.org/w/index.php?diff=65163&oldid=64853 * YamTokTpaFa * (+282)
14:36:21 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65164&oldid=65162 * Hanzlu * (+1)
14:37:04 <esowiki> [[Template:Infobox proglang]] https://esolangs.org/w/index.php?diff=65165&oldid=40371 * YamTokTpaFa * (+13)
14:41:25 <esowiki> [[Template talk:Infobox proglang]] N https://esolangs.org/w/index.php?oldid=65166 * YamTokTpaFa * (+469) Created page with "== Template improving discussion == First of all I don't think <nowiki>{{{name}}}</nowiki> essential; why not <nowiki>{{{name|{{PAGENAME}}}}}</nowiki>? If you don't specify to..."
14:41:44 <esowiki> [[Structure-free Query Language]] https://esolangs.org/w/index.php?diff=65167&oldid=45208 * YamTokTpaFa * (+42)
14:42:48 <esowiki> [[Unfuck]] https://esolangs.org/w/index.php?diff=65168&oldid=49136 * YamTokTpaFa * (+58)
15:01:00 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65169&oldid=65164 * Hanzlu * (+44)
15:04:12 <esowiki> [[Talk:Collatz sequence]] N https://esolangs.org/w/index.php?oldid=65170 * Hanzlu * (+127) Created page with "==Turing-completeness== Does a Collatz sequence program prove Turing-completeness? --[[User:Hanzlu]] 18:04, 3 August 2019 (UTC)"
15:10:13 -!- Phantom_Hoover has joined.
15:23:44 -!- heroux has quit (Ping timeout: 268 seconds).
15:25:11 -!- heroux has joined.
15:39:12 -!- Sgeo has quit (Ping timeout: 245 seconds).
15:48:20 -!- andrewtheircer has joined.
15:49:59 -!- adu has joined.
16:35:50 -!- andrewtheircer has quit (Remote host closed the connection).
17:15:19 <esowiki> [[Talk:Collatz sequence]] https://esolangs.org/w/index.php?diff=65171&oldid=65170 * Ais523 * (+588) generalized Collatz [[Tip]]; the original Collatz sequence itself is probably not Turing-complete, though
17:29:35 <zzo38> Do some SMTP servers tamper with the message ID?
17:31:23 <zzo38> I received a email message with a "X-Android-Message-ID" header, containing the same contents as the "Message-ID" header. I don't know why, or if perhaps the email client just added it to duplicate the message ID. Do you know?
17:46:50 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65172&oldid=65169 * Hanzlu * (-44)
18:18:22 -!- doesthiswork has quit (Ping timeout: 245 seconds).
18:38:25 -!- Sgeo has joined.
18:42:17 -!- xkapastel has joined.
18:46:48 -!- Sgeo_ has joined.
18:49:55 -!- Sgeo has quit (Ping timeout: 246 seconds).
19:01:24 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65173&oldid=65172 * Hanzlu * (+766)
19:01:46 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65174&oldid=65173 * Hanzlu * (+2)
19:07:50 -!- MDude has quit (Quit: Going offline, see ya! (www.adiirc.com)).
19:11:43 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
19:14:33 -!- Sgeo has joined.
20:04:08 -!- Lord_of_Life_ has joined.
20:07:16 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
20:07:17 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:40:24 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; $w{$w}++; $r=$w=~y/a-z/n-za-m/r; $w{$r} and print "$w|$r "; } # there aren't many common english words that are still words when rot13ed
20:40:24 <HackEso> nag|ant nowhere|abjurer nu|ah nun|aha oho|bub one|bar ones|barf onyx|balk or|be ova|bin pent|crag rail|envy reef|errs roof|ebbs she|fur sync|flap tang|gnat try|gel vex|irk
20:42:03 <b_jonas> "vex" with "irk" is an interesting pair
20:49:58 <b_jonas> the dictionary also reveals that "motherfucking" is one of the longest words in which no letter appears twice
21:05:34 <Sgeo> Huh. That website used to not be a shitty blog with porn: https://web.archive.org/web/20040401085825/http://www.2a03.org/index.php
21:15:26 <tswett[m]> b_jonas: That's a lot more words that rot13 to other words than I would have expected.
21:17:51 <b_jonas> tswett[m]: http://www.darthsanddroids.net/episodes/0142.html is slightly relevant
21:25:36 <Sgeo> This person sounds like an ahole
21:25:37 <Sgeo> "You probably think 64 kilobytes doesn't sound much when a small game now takes 8 gigabytes, but that's 'cos modern games are sloppy, inefficient, fat and lazy - like the basement dwelling losers who wrote them!!!
21:31:26 -!- xkapastel has quit (Quit: Connection closed for inactivity).
21:31:35 <Sgeo> Other than that and the eye-bleeding style choices, these tutorials look interesting
21:32:05 <Sgeo> https://www.chibiakumas.com/z80/
21:58:18 -!- xkapastel has joined.
22:22:23 -!- MDude has joined.
23:16:36 -!- Phantom_Hoover has quit (Ping timeout: 244 seconds).
23:22:43 <kmc> according to my dictionary 'tendentiousness' is the longest word that can be typed using only the home row on Dvorak
23:23:14 <kmc> for QWERTY it's 'alfalfa'
23:24:05 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/aueoidhtns//c) { print "$w "; } } # let's see
23:24:07 <kmc> obviously, having 5 vowels instead of 1 helps
23:24:07 <HackEso> ad add added addend addenda addends addition additions adds adenine adenines adenoid adenoids adhesion adhesions adieu adieus adios ado ados ads aeon aeons aesthete aesthetes ah aha ahead aid aide aided aides aids an anaesthesia anaesthesias anaesthetist anaesthetists and andante andantes anent anesthesia anesthesias anesthetist anesthetists ani anion anions anise aniseed aniseeds anises anisette anisettes annotate annotated annotates annotation annotation
23:24:16 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/asdfghjkl//c) { print "$w "; } }
23:24:16 <HackEso> ad add adds ads ah aha alas alfalfa alfalfas alga algal all alls as ash ask asks ass dad dads dash fa fad fads fag fags fall falls fas flag flags flak flash flask flasks gad gads gaff gaffs gag gaga gags gal gala galas gall galls gals gas gash glad glads glass ha had hadj hag hags hah hajj halal halals half hall halls has hash jag jags la lad lads lag lags las lash lass sad sag saga sagas sags salad salads salsa salsas sash sass sh shad shads shag shags sh
23:24:27 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/aueoidhtns//c && 12 <= $w) { print "$w "; } } # let's see
23:24:31 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/aueoidhtns//c && 10 <= $w) { print "$w "; } } # let's see
23:24:36 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/aueoidhtns//c && 8 <= $w) { print "$w "; } } # let's see
23:24:42 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/aueoidhtns//c && 6 <= $w) { print "$w "; } } # let's see
23:25:00 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/aueoidhtns//c && 12 <= length$w) { print "$w "; } } # let's see
23:25:00 <HackEso> anaesthesias anaesthetist anaesthetists anesthetists assassinated assassinates assassination assassinations assiduousness assiduousnesses astutenesses attenuations attestations daintinesses destinations destitutions detestations dishonesties heinousnesses hideousnesses hootenannies hotheadedness hotheadednesses inattentions indentations innatenesses insidiousness insidiousnesses insinuations instantaneous instantiated instantiates institutions intentnesses
23:25:06 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/aueoidhtns//c && 14 <= length$w) { print "$w "; } } # let's see
23:25:07 <HackEso> assassinations assiduousnesses hotheadednesses insidiousnesses nauseousnesses sensuousnesses studiousnesses tendentiousness tendentiousnesses unsteadinesses
23:25:19 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/asdfghjkl//c && 8 <= length$w) { print "$w "; } } # let's see
23:26:11 <b_jonas> kmc: that sounds right. I don't know what tendentiousness means, but 12dicts agrees that it's a word
23:26:29 <b_jonas> I do know that alfalfa is some kind of crop plant
23:26:51 <kmc> tendentious means 'Having a tendency; written or spoken with a partisan, biased or prejudiced purpose, especially a controversial one.'
23:31:02 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/qwertasdfgzxcvb//c) { push @w,$w; push @k,length$w; } } print "$_ " for @w[sort {$k[$b]<=>$k[$a]} keys@w] # you probably know about the qwerty left hand words
23:31:02 <HackEso> abracadabras aftereffects desegregated desegregates reverberated reverberates stewardesses watercresses abracadabra aftereffect aftertastes asseverated asseverates crabgrasses desegregate effervesced effervesces exacerbated exacerbates exaggerated exaggerates readdressed readdresses reverberate sassafrases stagecrafts statecrafts sweetbreads vertebrates abstracted addressees aftercares aftertaste afterwards aggravated aggravates aggregated aggregates assev
23:31:16 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; if ($w !~ y/qwertasdfgzxcvb//) { push @w,$w; push @k,length$w; } } print "$_ " for @w[sort {$k[$b]<=>$k[$a]} keys@w] # and the right hand ones
23:31:17 <HackEso> polyphony lollipop lollypop monopoly nonunion polonium holmium homonym jollily jumpily killjoy kinkily million minimum mullion opinion pillion plumply pumpkin homily hominy hookup johnny kimono limply linkup minion mukluk muumuu phylum pimply pinion pinyin pinyon pippin pompom pompon poplin pullup punkin unholy unhook uphill hilly hippo hippy hokum holly honky hooky hullo humph hunky ilium imply jimmy jinni jolly jumpy junky kinky knoll kooky lippy loony l
23:32:45 <kmc> were we doing typing speed tests here?
23:34:59 <b_jonas> `perl -eopen$I,"<", "share/dict/12dicts/American/2of12inf.txt"; while(<$I>){ ($w)=/^([a-z]+)[!%\r]*$/ or die; $r="qwertasdfgzxcvb"; if ($w =~ /^[$r]?([^$r][$r])+[^$r]?$/) { push @w,$w; push @k,length$w; } } print "$_ " for @w[sort {$k[$b]<=>$k[$a]} keys@w] # and then there's the alternate hand ones
23:34:59 <HackEso> dismantlement authenticity enchantment entitlement proficiency shantytowns skepticisms antisocial handiworks pantheisms producible proficient protozoans shantytown skepticism amendment aneurisms aneurysms auditoria authentic bodyworks busyworks cockfight cyclamens dirigible dismantle disorient divisible dixieland downright downtowns downturns dyspepsia dyspeptic endowment firmament fishbowls flamencos futurisms handiwork pantheism protozoan rhapsodic right
23:35:15 <kmc> https://www.livechatinc.com/typing-speed-test/#/ Awesome! You type with the speed of 106 WPM (469 CPM). Your accuracy was 97%. Congratulations!
23:35:24 <kmc> i'm da bomb
23:35:37 <b_jonas> I've seen some nice puzzles for which I've used a dictionary recently
23:35:44 <b_jonas> well, within a year really
23:37:54 <kmc> that's on dvorak
23:37:55 <kmc> Neat! You type with the speed of 50 WPM (220 CPM). Your accuracy was 98%. Good job!
23:38:05 <kmc> so i'm more than twice as fast on dvorak
23:38:16 <kmc> which is not surprising since i've been using it ~fulltime for more than 15 years
23:38:24 <kmc> plus it's just better
23:38:31 <kmc> what's surprising is that i can still touch type qwerty at all
23:39:01 <b_jonas> https://slatestarcodex.com/2018/05/06/ot101-threadversarial-collaboropen/#comment-626175 puzzle where you have to add one letter to the clue word or phrase and permute its letters to get the solution word or phrase (and there's a sequel for it somewhere)
23:41:23 <b_jonas> https://puzzling.stackexchange.com/q/79223/ english words with rare infixes
23:42:54 <b_jonas> eg. what english word has "rsd" in it as an infix?
23:45:59 <b_jonas> ``` grep rsd share/dict/12dicts/Lemmatized/2+2+3frq.txt # let's see
01:20:01 <esowiki> [[Talk:Keg+ Language Design]] M https://esolangs.org/w/index.php?diff=65175&oldid=65147 * A * (+227)
01:35:00 -!- MDude has quit (Ping timeout: 272 seconds).
02:21:26 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:52:44 -!- MDude has joined.
03:00:03 <esowiki> [[User:DoggyDogWhirl]] M https://esolangs.org/w/index.php?diff=65176&oldid=64758 * DoggyDogWhirl * (+121)
03:00:07 <esowiki> [[User:DoggyDogWhirl/One-Dimensional Storage Visualizer]] N https://esolangs.org/w/index.php?oldid=65177 * DoggyDogWhirl * (+4216)
03:16:20 <Sgeo> Awesome! You type with the speed of 70 WPM (315 CPM). Your accuracy was 94%. Congratulations!
03:16:51 <Sgeo> I sort of stayed a while trying to correct one typo
03:25:24 <esowiki> [[256]] https://esolangs.org/w/index.php?diff=65178&oldid=65062 * Areallycoolusername * (+381)
03:48:14 <int-e> Well played: http://www.sandraandwoo.com/2019/08/01/1103-raccoons-are-the-champions-my-friends/ (the link in the box is relevant: https://arxiv.org/abs/1904.11679 )
04:42:39 <esowiki> [[256]] https://esolangs.org/w/index.php?diff=65179&oldid=65178 * Areallycoolusername * (+1188) Undid Turing imcompletness proof by User: A. The page is done now.
04:44:17 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65180&oldid=65057 * Areallycoolusername * (+156)
04:50:59 <esowiki> [[User:Areallycoolusername]] https://esolangs.org/w/index.php?diff=65181&oldid=64955 * Areallycoolusername * (+10) /* Full List of languages I Made */
04:51:45 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65182&oldid=64956 * Areallycoolusername * (+10) /* Non-alphabetic */
04:54:28 <esowiki> [[Talk:256]] https://esolangs.org/w/index.php?diff=65183&oldid=65047 * Areallycoolusername * (+151)
05:04:22 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65184&oldid=65180 * Areallycoolusername * (+165)
05:09:46 <esowiki> [[256]] M https://esolangs.org/w/index.php?diff=65185&oldid=65179 * A * (+219) This is what I did to Keg :)
05:14:52 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65186&oldid=65184 * A * (+402) /* Concern */
05:16:07 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65187&oldid=65186 * A * (+27) /* Concern */
05:17:12 <esowiki> [[256]] M https://esolangs.org/w/index.php?diff=65188&oldid=65185 * A * (+17) /* Integers instruction (integers from top of stack down to 0), 25 bytes */ I have underestimated how hard to golf 256 is.
05:18:04 <esowiki> [[256]] https://esolangs.org/w/index.php?diff=65189&oldid=65188 * A * (+68) /* Integers instruction (integers from top of stack down to 0), 25 28 bytes */
05:20:28 <esowiki> [[256]] https://esolangs.org/w/index.php?diff=65190&oldid=65189 * A * (+30) /* Integers instruction (integers from top of stack down to 0), 25 28 bytes */ Making too much edits
05:22:46 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65191&oldid=65183 * A * (-7)
05:25:31 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65192&oldid=65191 * A * (+186) /* People who don't know two golfing languages with different paradigms can not create a good(competitive) golfing language */
05:28:39 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65193&oldid=65187 * A * (+95)
05:29:34 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65194&oldid=65193 * A * (+66)
05:30:02 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65195&oldid=65194 * A * (-2)
06:42:25 -!- FreeFull has quit.
07:13:28 -!- xkapastel has joined.
08:07:40 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
08:09:04 -!- Lord_of_Life has joined.
08:39:40 -!- andrewtheircer has joined.
08:54:28 -!- andrewtheircer has quit (Remote host closed the connection).
09:04:45 -!- Frater_EST has joined.
09:13:00 -!- Frater_EST has left.
09:18:24 <esowiki> [[Special:Log/newusers]] create * SoYouWantMeToDoSomethingButIWont * New user account
09:23:36 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65196&oldid=64948 * SoYouWantMeToDoSomethingButIWont * (+244) /* Introductions */
09:42:52 -!- xkapastel has quit (Quit: Connection closed for inactivity).
09:57:36 <b_jonas> `mkdir share/dict/12dicts/International
09:57:40 <b_jonas> `fetch share/dict/12dicts/International/5d+2a.txt https://hack.esolangs.org/get/share/dict/12dicts/International/5d+2a.txt
09:57:41 <HackEso> 2019-08-04 09:57:41 URL:https://hack.esolangs.org/get/share/dict/12dicts/International/5d+2a.txt [638311/638311] -> "share/dict/12dicts/International/5d+2a.txt" [1]
10:14:47 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=65197&oldid=65100 * YamTokTpaFa * (+62)
10:14:49 <esowiki> [[MetaGlow]] N https://esolangs.org/w/index.php?oldid=65198 * SoYouWantMeToDoSomethingButIWont * (+1172) MetaGlow
10:17:56 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65199&oldid=65182 * SoYouWantMeToDoSomethingButIWont * (+15) /* M */
10:25:21 -!- Frater_EST has joined.
10:25:46 -!- Frater_EST has left.
10:40:11 <b_jonas> `fetch share/dict/12dicts/International/3of6game.txt https://hack.esolangs.org/get/share/dict/12dicts/International/3of6game.txt
10:40:15 <HackEso> 2019-08-04 10:40:14 URL:https://hack.esolangs.org/get/share/dict/12dicts/International/3of6game.txt [607396/607396] -> "share/dict/12dicts/International/3of6game.txt" [1]
10:55:30 <int-e> Has anyone here ever worked out how Jot is supposed to work?
11:12:53 <int-e> Oh never mind, I think I got it.
11:13:10 <esowiki> [[Special:Log/move]] move * A * moved [[MSM]] to [[Mutating Stack Machine]]: Because I am creating a language of the same name.
11:13:10 <esowiki> [[Special:Log/move]] move * A * moved [[Talk:MSM]] to [[Talk:Mutating Stack Machine]]: Because I am creating a language of the same name.
11:14:50 <esowiki> [[MSM]] https://esolangs.org/w/index.php?diff=65204&oldid=65201 * A * (+147) Disambig
11:17:02 <esowiki> [[Multi-Set Manipulator]] N https://esolangs.org/w/index.php?oldid=65205 * A * (+3322) Stub page of an inconcise language
11:17:58 -!- MDude has quit (Ping timeout: 245 seconds).
11:22:06 -!- Phantom_Hoover has joined.
11:24:27 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65206&oldid=65205 * A * (-797) /* All instructions (in mathematics; this is just copied from the Unicode website) */ Remove some useless symbols that have alternative symbols available
11:27:21 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=65207&oldid=65199 * A * (+28) /* M */
11:31:26 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65208&oldid=65206 * A * (-27)
11:31:50 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65209&oldid=65208 * A * (+12) /* Examples */
11:40:31 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65210&oldid=65209 * A * (+23)
11:48:47 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65211&oldid=65210 * A * (+147)
11:50:21 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65212&oldid=65211 * A * (+32) /* All instructions (in mathematics; this is just copied from the Unicode website) */
11:51:04 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65213&oldid=65212 * A * (+142) /* Examples */
11:52:00 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65214&oldid=65213 * A * (+12) /* Examples */
12:06:11 -!- andrewtheircer has joined.
12:18:37 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65215&oldid=65214 * A * (-6)
12:18:55 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65216&oldid=65215 * A * (-13)
12:26:42 -!- andrewtheircer has quit (Remote host closed the connection).
13:01:54 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65217&oldid=65216 * A * (-110)
13:02:28 -!- tromp has quit (Read error: Connection reset by peer).
13:03:13 -!- tromp has joined.
13:17:51 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65218&oldid=65174 * Hanzlu * (+0)
13:35:53 <esowiki> [[User talk:Iamcalledbob]] M https://esolangs.org/w/index.php?diff=65219&oldid=65083 * A * (+301) /* Hey, what's the matter with 1st-Worst? */
13:39:23 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65220&oldid=65217 * A * (-260) No, because they are invalid mathematical operators. After all, you will never know the length of a multi-set anyway.
13:40:02 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=65221&oldid=65197 * YamTokTpaFa * (+435)
13:41:36 <esowiki> [[Pxem]] https://esolangs.org/w/index.php?diff=65222&oldid=65221 * YamTokTpaFa * (+40)
13:45:15 <esowiki> [[Javagrid]] https://esolangs.org/w/index.php?diff=65223&oldid=53556 * YamTokTpaFa * (+85)
13:45:24 <esowiki> [[Multi-Set Manipulator]] https://esolangs.org/w/index.php?diff=65224&oldid=65220 * A * (+26) /* All instructions (in mathematics; this is just copied from the Unicode website) */
13:45:39 <esowiki> [[Javagrid]] M https://esolangs.org/w/index.php?diff=65225&oldid=65223 * YamTokTpaFa * (+0) /* External resources */
13:48:26 <esowiki> [[Multi-Set Manipulator/Subset]] N https://esolangs.org/w/index.php?oldid=65226 * A * (+1073) Created page with "<pre> All sets in Set Manipulator are multi-sets, although they can occasionally be treated as normal sets. AB A with all items not in B removed; Intersection AB A with..."
13:53:49 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65227&oldid=65226 * A * (+313)
14:01:23 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65228&oldid=65227 * A * (+525)
14:03:37 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65229&oldid=65228 * A * (+130) /* Natural numbers set not using the built-in N */
14:04:38 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65230&oldid=65224 * A * (+87)
14:07:32 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65231&oldid=65229 * A * (+157) This can do everything Multi-Set Manipulator can do.
14:07:39 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65232&oldid=65230 * A * (-170) /* Examples */
14:15:41 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65233&oldid=65231 * A * (+200) Uh-oh, mathematicians *indeed* can access the length of a set.
14:23:13 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65234&oldid=65233 * A * (+246)
14:24:23 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65235&oldid=65234 * A * (+199)
14:30:18 -!- MDude has joined.
14:31:41 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65236&oldid=65235 * A * (+477)
14:35:07 <esowiki> [[Multi-Set Manipulator]] M https://esolangs.org/w/index.php?diff=65237&oldid=65232 * A * (+454)
14:37:47 -!- atslash has joined.
14:44:14 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65238&oldid=65236 * A * (+68)
15:02:40 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65239&oldid=65195 * A * (-7)
15:03:39 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65240&oldid=65239 * A * (+4) Blaise Pascal created roughly 20 mechanical calculators.
15:06:29 <esowiki> [[Multi-Set Manipulator/Subset]] https://esolangs.org/w/index.php?diff=65241&oldid=65238 * A * (+4)
15:12:40 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65242&oldid=65241 * A * (+270)
15:12:57 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65243&oldid=65242 * A * (+22) /* All prime numbers less than I not using the built-in R set */
15:14:01 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65244&oldid=65243 * A * (-1) /* All prime numbers less than I not using the built-in R set */
15:20:57 -!- MDead has joined.
15:22:43 -!- MDude has quit (Ping timeout: 248 seconds).
15:22:48 -!- MDead has changed nick to MDude.
15:39:57 -!- diverger has joined.
15:46:42 -!- Sgeo has quit (Ping timeout: 245 seconds).
15:49:25 -!- Sgeo has joined.
16:16:59 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
16:18:37 -!- FreeFull has joined.
17:20:06 -!- xkapastel has joined.
17:47:46 -!- atslash has quit (Quit: This computer has gone to sleep).
19:31:28 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65245&oldid=65218 * Hanzlu * (+97)
19:37:08 -!- lldd_ has joined.
19:56:39 <b_jonas> slashlearn Schanuel's conjecture//Schanuel's conjecture states that e + pi is irrational.
20:04:15 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65246&oldid=65245 * Hanzlu * (+61)
20:06:08 -!- Lord_of_Life_ has joined.
20:08:29 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
20:08:29 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:18:13 -!- howlands has quit (Ping timeout: 246 seconds).
21:32:26 <HackEso> The high level structure of Cello projects is inspired by /Haskell/, while the syntax and semantics are inspired by /Python/ and /Obj-C/.
21:33:39 <HackEso> 1208) <ais523_> Funge-98 has half the advantages of a nomic
21:45:37 -!- Sgeo has quit (Ping timeout: 244 seconds).
21:57:54 -!- Sgeo has joined.
21:59:39 -!- lldd_ has quit (Quit: Leaving).
22:28:38 -!- atslash has joined.
23:14:50 <zzo38> Someone told me a idea of somehow having relics (similar to the Catholic saints relics) in Magic: the Gathering, possibly a subtype for artifacts, but I don't know how it is work.
23:15:30 <b_jonas> zzo38: well, the flavor had relics for a while
23:16:20 <b_jonas> on Zendikar, see Solemn Offering
23:19:00 <b_jonas> and there are several cards with "Relic" in the name
00:00:35 <esowiki> [[Special:Log/newusers]] create * Davipb * New user account
00:04:32 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65247&oldid=65196 * Davipb * (+158) My introduction
00:07:25 <b_jonas> `bobadventureslist http://bobadventures.smackjeeves.com/comics/2834969/20190804/
00:07:25 <HackEso> bobadventureslist http://bobadventures.smackjeeves.com/comics/2834969/20190804/: b_jonas
00:22:51 -!- b_jonas has quit (Quit: leaving).
00:59:55 <zzo38> Do you like Hollerith chording?
01:27:05 -!- FreeFull has quit.
03:14:52 <esowiki> [[Talk:ACL]] M https://esolangs.org/w/index.php?diff=65248&oldid=65150 * A * (+210)
03:17:40 <esowiki> [[Talk:ACL]] M https://esolangs.org/w/index.php?diff=65249&oldid=65248 * A * (+371)
03:22:00 -!- doesthiswork has joined.
04:13:51 <esowiki> [[Talk:ACL]] https://esolangs.org/w/index.php?diff=65250&oldid=65249 * A * (-370) /* C Interpreter */
04:39:49 -!- adu has quit (Quit: adu).
05:05:50 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65251&oldid=65244 * A * (+33)
05:11:31 -!- nfd9001 has quit (Ping timeout: 248 seconds).
05:15:18 <esowiki> [[Multi-Set Manipulator/Subset]] https://esolangs.org/w/index.php?diff=65252&oldid=65251 * A * (-102)
05:20:16 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65253&oldid=65252 * A * (+7) /* All prime numbers less than I */
05:21:50 -!- nfd9001 has joined.
05:28:03 -!- doesthiswork has quit (Ping timeout: 248 seconds).
05:29:14 -!- moei has joined.
05:33:54 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65254&oldid=65253 * A * (+85)
05:35:09 <esowiki> [[Multi-Set Manipulator/Subset]] https://esolangs.org/w/index.php?diff=65255&oldid=65254 * A * (-50)
06:19:48 -!- xkapastel has quit (Quit: Connection closed for inactivity).
06:30:07 <esowiki> [[Prehistory of esoteric programming languages]] M https://esolangs.org/w/index.php?diff=65256&oldid=57231 * A * (+43) /* APL */
06:30:28 <esowiki> [[Prehistory of esoteric programming languages]] M https://esolangs.org/w/index.php?diff=65257&oldid=65256 * A * (+51) /* APL */
06:32:37 <esowiki> [[Prehistory of esoteric programming languages]] M https://esolangs.org/w/index.php?diff=65258&oldid=65257 * A * (+82) /* APL */
06:58:28 -!- x003n has joined.
06:58:49 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65259&oldid=65255 * A * (+310)
07:00:56 -!- x003n has left ("Leaving").
07:29:52 -!- Sgeo_ has joined.
07:32:57 -!- Sgeo has quit (Ping timeout: 245 seconds).
07:40:08 -!- andrewtheircer has joined.
07:40:38 -!- nfd9001 has quit (Ping timeout: 272 seconds).
07:47:49 <fungot`> int-e: isn't that kind of idea of letting %app %datum and friends in r5. r4 didn't even have modem iirc
07:48:09 <int-e> finally something that makes sense.
07:48:18 -!- Fatalize has joined.
07:49:18 -!- Fatalize has quit (Remote host closed the connection).
07:54:40 -!- nfd9001 has joined.
08:07:33 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:11:24 -!- Lord_of_Life has joined.
08:49:31 -!- ieuaeiau has joined.
08:49:59 -!- ieuaeiau has quit (Remote host closed the connection).
09:25:57 -!- andrewtheircer has quit (Remote host closed the connection).
09:27:29 -!- andrewtheircer has joined.
09:37:20 -!- andrewtheircer has quit (Remote host closed the connection).
09:49:50 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65260&oldid=65259 * A * (-147)
09:56:10 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65261&oldid=65260 * A * (-596) Simpler set syntax
10:00:31 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65262&oldid=65261 * A * (+173)
10:02:04 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65263&oldid=65262 * A * (+15) /* Set-comparison instructions */
10:17:45 <esowiki> [[Multi-Set Manipulator/Smaller]] N https://esolangs.org/w/index.php?oldid=65264 * A * (+2717) Ctrl+C Ctrl+V
10:18:03 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65265&oldid=65264 * A * (+0)
10:21:31 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65266&oldid=65265 * A * (-532)
10:22:17 <esowiki> [[Multi-machine]] M https://esolangs.org/w/index.php?diff=65267&oldid=56744 * A * (+47)
10:22:28 <esowiki> [[Multi-machine]] M https://esolangs.org/w/index.php?diff=65268&oldid=65267 * A * (-66)
10:28:13 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65269&oldid=65266 * A * (-71) /* Set-manipulational instructions */ Hmm...
10:30:50 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65270&oldid=65269 * A * (-104) = reversed operands = reversed operands = reversed operands = reversed operands
10:32:08 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65271&oldid=65270 * A * (-24) /* Logical instructions */ I don't see how they are useful
10:46:26 -!- andrewtheircer has joined.
10:53:05 -!- andrewtheircer has quit (Remote host closed the connection).
11:20:03 -!- myname has quit (Ping timeout: 245 seconds).
11:28:47 -!- cpressey has joined.
11:31:07 <cpressey> Good afternoon. I am unhappy to report that making a second-order purely concatenative language does not help it express control. Monoids are sequential, control is branching.
11:32:57 -!- nfd9001 has quit (Ping timeout: 245 seconds).
11:34:21 <cpressey> If the objects under composition aren't functions, but something examinable (extensional?) like lists, then maybe. But in a strict definition of "concatenative" they're always described as functions.
11:36:33 -!- wob_jonas has joined.
11:37:18 <wob_jonas> perhaps my hon. and learned friend fungot knows a way to make a second order concatenative language?
11:37:18 <fungot`> wob_jonas: i have another feeling. no, i mean the right thing
11:37:34 <cpressey> Conventionally, concatenative languages allow functions to be named. Only the function definitions are monoids. The program as a whole is a... some sort of DAG.
11:38:36 <cpressey> I'm sure fungot knows a way -- the problem is our inability to understand what it means.
11:38:36 <fungot`> cpressey: i mean complex examples ( window managers, so i don't know enough. there should exist an implementation which is fast. especially for allocation of n bytes might be: why do you need
11:45:12 <int-e> cpressey: http://www.nyu.edu/projects/barker/Iota/zot.html is vaguely related to this problem
11:52:17 <int-e> cpressey: (The connection being that it uses CPS to extract a tree structure from a linear representation. It's not quite concatenative as is (that needs another level of CPS) and it's untyped, probably inherently so.)
11:52:38 <int-e> (Definitely not just second order.)
11:55:11 <int-e> (Funny how things go. I've encountered Zot yesterday mainly because https://en.wikipedia.org/wiki/Iota_and_Jot#Jot is wrong.)
11:56:11 <int-e> Oh and I can't correct it. "You are currently unable to edit Wikipedia."
12:01:12 -!- myname has joined.
12:04:26 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65272&oldid=65240 * Areallycoolusername * (+229) Telling User: A how I made another language. WIP
12:04:56 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65273&oldid=65272 * Areallycoolusername * (+117) typo
12:09:30 <cpressey> I'm actually somewhat wrong too. You can have control structures, they just have to look like this: x;y;while(a){z;q;if(b){r;p;while(c){q;m;n;}}}
12:09:51 <cpressey> You can't "un-nest" after you put one in.
12:10:27 <cpressey> I mean, I think this is how it works out.
12:10:47 <wob_jonas> cpressey: what if you use the techniques of Lambda: the Gathering, where you can apply a function either from the left or from the right, and you emulate that with second order concatenative?
12:11:37 <cpressey> wob_jonas: I'm not familiar with Lambda: the Gathering.
12:11:53 <wob_jonas> cpressey: there ought to be a link from the wiki
12:12:09 <wob_jonas> https://esolangs.org/wiki/Lambda:_the_Gathering
12:16:29 <wob_jonas> admittedly that one cheats, you can compose functions only because of the mutable slots
12:16:37 <wob_jonas> you can write to slots and read them
12:16:56 <cpressey> No idea offhand how that would work with this, sorry.
12:29:04 <esowiki> [[Wang program]] https://esolangs.org/w/index.php?diff=65274&oldid=46766 * YamTokTpaFa * (+11) Why not use ref and references tags?
12:45:16 -!- myname has quit (Ping timeout: 272 seconds).
12:50:55 <cpressey> I think what I've got is TC, so there's no problem there, but it's TC in a "technically TC" rather than in an expressive way. You put a single top-level while around the whole thing, and you can simulate a UTM. Not unlike Burro (and I'm sure others.)
12:51:28 <cpressey> But it's slightly interesting in its own way, so I'll probably continue on it.
12:52:46 <cpressey> "Concatentive with continuations" sounds interesting enough in *its* own way too though.
12:53:17 <int-e> . o O ( Rust's style for type annotations looks *wrong* to me: let i: u32 = 4; rather than let i : u32 = 4; )
12:53:17 <cpressey> Some people say "concatenative" is just a buzzword. Sometimes I agree with them. I've never really made up my mind on that.
12:54:14 <cpressey> int-e: maybe I'm getting old, the only difference I see is whitespace?
12:54:30 <Taneb> I imagine "concatenative" is like "functional", it means different things to different people
12:55:00 <wob_jonas> int-e: I think either of those work
12:57:23 <int-e> wob_jonas: I wrote "style" and I'm under the impression that https://doc.rust-lang.org/book/ch03-02-data-types.html is somewhat authoritative.
12:57:52 <int-e> cpressey: I'm very white-space sensitive when it comes to programming.
13:03:39 -!- myname has joined.
13:07:47 <esowiki> [[Talk:Nellephant]] N https://esolangs.org/w/index.php?oldid=65275 * Davipb * (+801) Possible cat program
13:08:06 <int-e> It also says something about how long I haven't touched Pascal.
13:13:41 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65276&oldid=65273 * A * (+228) /* Concern */
13:15:53 -!- myname has quit (Ping timeout: 245 seconds).
13:27:07 <cpressey> In other news, I've learned (after a large amount of hunting around) that, while they are all similar, equational logic is not the same thing as equational propositional logic and is also not the same thing as equivalential calculus.
13:28:02 <wob_jonas> cpressey: hmm. is there also {equational,equivalential} {algebra,analysis}?
13:30:31 <int-e> equivalential calculus seems to have almost nothing to do with equational logic... seeing that \equiv is only used between propositions.
13:38:09 <int-e> Oh well from a classical perspective neither equational propositional logic not equivalential calculus seem very interesting.
13:38:42 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65277&oldid=65276 * A * (+195) /* Concern */
13:41:07 <cpressey> Equational propositional logic seems to have been invented by Gries to make discrete math easier to teach to undergrads. Which is fine, but WP's article on Equational logic conflates it with equational logic.
13:41:32 -!- xkapastel has joined.
13:42:12 <int-e> Well, equational logic works on terms... which allows a very rich structure, especially if you allow additional equational axioms.
13:42:59 <int-e> So yeah, the Wikipedia page is quite misleading.
13:43:25 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65278&oldid=65277 * A * (+227) /* Concern */
13:43:44 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65279&oldid=65278 * A * (+158) /* Concern */ Whoops, forgot to sign
13:43:59 <int-e> http://mathworld.wolfram.com/EquationalLogic.html is much better
13:44:13 <int-e> (in particular by the inclusion of congruence)
13:44:45 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65280&oldid=65271 * A * (-29) /* Built-in Sets */
13:45:18 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65281&oldid=65279 * A * (-78) /* Concern */ So am I
13:45:42 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65282&oldid=65281 * A * (-307) /* Concern */ I also take that much time to write an interpreter.
13:45:46 <int-e> cpressey: did you see the Wikipedia talk page?
13:46:50 <cpressey> int-e: No, haven't yet. But a lot of my own confusion cleared up after I started reading some course notes on a course on universal algebra. And coincidentally stumbling across equivalential calculus.
13:46:59 <int-e> too bad nobody seems to have acted on this.
13:47:34 <int-e> FWIW both equivalential calculus and equational propisitional logic were new to me.
13:48:00 <int-e> *propositional. Wow, I find this very hard to type :)
13:48:40 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65283&oldid=65282 * Areallycoolusername * (+313)
13:49:16 <int-e> cpressey: There is not much on the talk page, except that it points out the same problem of conflating equational logic and equational propositional logic that you've also pointed out.
13:49:20 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65284&oldid=65280 * A * (-104) /* Logical instructions */ They are useless for now. Done in https://esolangs.org/wiki/Multi-Set_Manipulator/Subset
13:49:52 <cpressey> int-e: Yeah, if I had read it earlier... oh well
13:49:53 <wob_jonas> ais523: re https://esolangs.org/logs/2019-07-30.html#lxh virtual addresses on current cpus, there's a draft since 2016 for how x86 can extend to more than 48 bits of virtual address space https://software.intel.com/en-us/download/5-level-paging-and-5-level-ept-white-paper . It's not in any current or near future cpus, but it's at least recognized t
13:49:54 <wob_jonas> hat they'll probably eventually need to do this.
13:54:02 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65285&oldid=65283 * A * (+78) /* Concern */
13:59:15 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65286&oldid=65285 * A * (+353) /* Concern */
13:59:59 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65287&oldid=65286 * A * (-77) /* Concern */
14:03:26 -!- doesthiswork has joined.
14:04:49 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65288&oldid=65287 * A * (+7) /* Concern */
14:05:54 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65289&oldid=65284 * A * (-124) /* Miscellaneous instructions */ -2 operators
14:06:09 <cpressey> int-e: I got into this in the first place because I was looking for a system where it is simple to make deductions. Equating two terms is pretty simple... but it turns out Frege's and Hilbert's systems use only modus ponens, and that's pretty simple too.
14:06:53 <cpressey> I was used to natural deduction, which trades off simplicity of the deductive process, for easier use.
14:07:19 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65290&oldid=65288 * A * (-1138) /* Concern */
14:07:54 <cpressey> So I might try implementing a Hilbert-style proof checker instead of going down the equational route.
14:08:17 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65291&oldid=65192 * A * (-2066)
14:08:41 <esowiki> [[Talk:256]] M https://esolangs.org/w/index.php?diff=65292&oldid=65291 * A * (-101)
14:09:40 <int-e> Hilbert just moves all the complexity into axiom schemata :P
14:10:04 <cpressey> I realize that :) I'm also not sure if these actually take away the complexity of implies-introduction or not.
14:10:44 <cpressey> If you still have to do "Suppose x. We show that it entails y. Therefore x -> y" to get a new implication, then that complexity is still there
14:11:09 <int-e> Another trade-off is sequents vs. discharging assumptions...
14:11:31 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65293&oldid=65290 * A * (+211) /* Concern */
14:12:32 <int-e> which is related to what you just wrote... with sequents, you can infer |- x -> y from x |- y. With assumptions, you'll infer x -> y from a proof of y that used x as an assumption.
14:13:08 <int-e> (or possibly didn't use that assumption at all).
14:14:18 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65294&oldid=65293 * A * (-27) /* Concern */
14:16:00 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65295&oldid=65294 * A * (+77) /* Concern */
14:16:11 -!- myname has joined.
14:16:40 <cpressey> Oh is *that* what a sequent is? Okay then!
14:17:19 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65296&oldid=65295 * A * (-1) /* Concern */
14:20:06 <cpressey> I think I half-re-invented it without entirely understanding what it was
14:20:16 <int-e> In its most general form, a sequent is P_1,...,P_n |- Q_1,...,Q_m, and (classically) means that P_1 /\ ... /\ P_n ==> Q_1 \/ ... \/ Q_n. But the common special case where there is exactly one Q_i is still called a sequent.
14:21:49 <int-e> (I'm using ==> with a lower precedence than /\ and \/)
14:22:00 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65297&oldid=65289 * A * (-113) N{0}Z+; Q-Q-(Q+)-{0}; R-R-(R+)-{0};
14:24:36 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65298&oldid=65297 * A * (-47) /* Built-in Sets */ Real numbers are trivial becase there isn't the ... operator anymore in MSM
14:26:39 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65299&oldid=65298 * A * (-90) /* Built-in Sets */ But you can't present decimals either.
14:30:02 <cpressey> Sequent calculus is what they always use for type judgments too, isn't it
14:31:07 <int-e> They tend to use sequents ("judgements") indeed. (I'd be careful with "sequent calculus" because that carries certain inference rules with it, not just the syntax)
14:31:53 <HackEso> sequent calculus? ¯\(°_o)/¯
14:31:59 <wob_jonas> Is that what they use for linear logic?
14:32:09 <cpressey> I kind of got that |- and -> meant the same thing, but it has always been a bit fuzzy
14:33:08 <int-e> Though it's not so easy; the type system judgements often have several kinds of premises (say: types of variables, and values for type variables) and possibly yet another kind on the right-hand side, while (logical) sequents have only propositions.
14:33:45 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65300&oldid=65299 * A * (-35) ~A All items that don't belong to A is useless in actual programming; also, it is impossible to implement.
14:34:03 <esowiki> [[Multi-Set Manipulator/Smaller]] https://esolangs.org/w/index.php?diff=65301&oldid=65300 * A * (+17)
14:35:00 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65302&oldid=65301 * A * (+138) /* Built-in Sets */
14:40:53 <esowiki> [[Multi-Set Manipulator/Smaller]] https://esolangs.org/w/index.php?diff=65303&oldid=65302 * A * (-7) /* Set-manipulational instructions */ Overly complex.
14:51:30 <esowiki> [[Multi-Set Manipulator/Smaller]] https://esolangs.org/w/index.php?diff=65304&oldid=65303 * A * (+9) /* Set-manipulational instructions */
14:52:07 <cpressey> wob_jonas: Linear logic seems usually be presented with sequents, but its inventor would seem to promote using "proof nets" instead
14:52:54 <int-e> Oh I still don't know what a proof net is.
14:54:17 <int-e> I guess I don't want to find out today either.
14:54:28 <wob_jonas> hopefully they're all equivalent syntactic tricks
14:55:01 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65305&oldid=65304 * A * (+90)
15:03:04 <esowiki> [[Multi-Set Manipulator/Smaller]] https://esolangs.org/w/index.php?diff=65306&oldid=65305 * A * (+0) /* Built-in Sets */
15:03:30 <esowiki> [[Multi-Set Manipulator/Smaller]] https://esolangs.org/w/index.php?diff=65307&oldid=65306 * A * (+0)
15:03:44 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65308&oldid=65307 * A * (-16) /* Built-in Sets */
15:11:00 <wob_jonas> Did you know that in en.Wikipedia article titles, only three start with an ascii comma, and all three are redirects?
15:11:31 <Taneb> Honestly I'm a little surprised that articles are allowed to begin with a comma
15:11:45 <int-e> , is this a bot prefix? :P
15:11:56 <Taneb> It is in #nixos and probably other places
15:12:04 <int-e> Taneb: https://en.wikipedia.org/wiki/, is something obvious :)
15:12:06 <fungot`> Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ .
15:12:10 <HackEso> Bot prefixes: fungot ^, HackEso `, EgoBot !, lambdabot @ or ?, thutubot +, metasepia ~, idris-bot ( , jconn ) , j-bot [ .
15:12:30 <Taneb> Maybe I should bring back pietbot
15:13:06 <int-e> boily should bring himself back, and then metasepia.
15:13:48 <int-e> [ how bad are the J error messages?
15:13:48 <j-bot> int-e: |value error: the
15:13:48 <j-bot> int-e: | how bad are the J error messages?
15:14:51 <wob_jonas> I wonder which of those prefixes are abandonned enough that someone else could potentially usurp it if they provide an even marginally useful use for one
15:15:24 <wob_jonas> ) is definitely reusable; ISTR it's left in the fungot prefixes only because that command is implemented in underload and it'd be hard for it to print unbalanced parenthesis
15:15:24 <fungot`> wob_jonas: this reminds me of the conversations i ever have trouble sleeping, i'll ride around in buses. tampere might have, can have pccard for even about 30e, recommended.
15:15:46 <Taneb> Hmm, maybe I should have rode around in buses last night when I couldn't sleep
15:15:55 <Taneb> (I instead read Lord of the Rings for a bit)
15:16:15 <HackEso> metasepia knew the weather at your nearest airport, and also something about ducks.
15:16:35 <int-e> Well I still remember idris-bot.
15:16:59 <wob_jonas> I wonder if that means I should remove right paren from the prefixes wisdom, since that one doesn't have a problem with unbalanced parens
15:17:25 <int-e> I don't remember thutubot, nor jconn; and boith Egobot and metasepia have not been around in the past 5 years?
15:17:48 <int-e> (too many edits. sorry)
15:17:57 <wob_jonas> int-e: jconn was an instance of jevalbot, the same bot that j-bot is also an instance of, evaluates J, and its terrible source code written by me
15:18:14 <wob_jonas> > var"lambdabot listens to greater than too, right?"
15:18:19 <lambdabot> lambdabot listens to greater than too, right?
15:19:16 <HackEso> eval(1p) - construct command by concatenating arguments \ eval(8lambdabot) - no description \ eval(8jevalbot) - evaluate J fret, names in main namespace are persistent
15:20:12 <wob_jonas> I'm particularly curious about the tilde, because it looks like a nice prefix
15:26:52 <int-e> hmm, nobody has complained about the POTM yet.
15:28:57 <HackEso> The password of the month is surprising.
15:29:11 <Taneb> int-e: do people often complain about it?
15:29:19 <int-e> Taneb: constantly.
15:30:00 <int-e> I may be exaggerating slightly :P
15:30:37 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: potm: not found
15:30:39 <HackEso> The Moon is Waxing Crescent (27% of Full)
16:06:01 <HackEso> Today is Boomtime, the 71st day of Confusion in the YOLD 3185
16:07:56 -!- wob_jonas has quit (Remote host closed the connection).
16:10:55 <zzo38> I also wrote a JotaCode program for Discordian calendar, too
16:19:26 <kmc> zzo38: have you read Principia Discordia?
16:20:03 <zzo38> Yes, I have read it
16:24:15 <zzo38> (The code is object #20165 on ifMUD.)
16:27:14 -!- cpressey has quit (Quit: A la prochaine.).
17:11:56 -!- FreeFull has joined.
17:50:28 -!- b_jonas has joined.
18:05:35 -!- nfd9001 has joined.
18:10:57 -!- xkapastel has quit (Quit: Connection closed for inactivity).
18:12:41 -!- xkapastel has joined.
19:15:52 <b_jonas> ``` set -e; cd wisdom; printf "%s\n" phantom*hoover # what the...
19:15:53 <HackEso> phantom____________________hoover \ phantom__________hoover \ phantom_______hoover \ phantom___hoover \ phantom__hoover \ phantom_hoover
19:17:33 -!- heroux has quit (Ping timeout: 245 seconds).
19:24:20 -!- heroux has joined.
19:28:33 -!- lldd_ has joined.
19:35:24 -!- nfd has joined.
19:39:04 -!- nfd9001 has quit (Ping timeout: 246 seconds).
19:53:45 <esowiki> [[ACL]] https://esolangs.org/w/index.php?diff=65309&oldid=65246 * Hanzlu * (-163)
20:02:35 -!- Phantom_Hoover has joined.
20:07:41 -!- Lord_of_Life_ has joined.
20:10:02 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:10:26 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:11:08 -!- john_metcalf has quit (Ping timeout: 272 seconds).
20:35:22 -!- pecan has joined.
20:56:00 -!- lldd_ has quit (Quit: Leaving).
21:21:15 <b_jonas> finally! I managed to hit alt-s to open the history menu in firefox. I keep hitting alt-h and then have to correct because alt-h opens the help menu
21:22:21 * kmc mails b_jonas a cake
21:22:48 <shachaf> kmc: can you mail me a cake twh
21:23:22 <kmc> what kind of cake do you guys like
21:23:49 <b_jonas> chocolate with soft sponge layers
21:23:57 <kmc> do you know about Baumkuchen
21:24:03 <kmc> it's a fancy german cake that's baked on a spit
21:24:08 <kmc> layering on batter as you go
21:24:10 <kmc> hence "tree cake"
21:24:39 <shachaf> this is both a description of Baumkichen and a description of the kind of cake i like
21:24:40 <kmc> yes, a horizontal rotating bar
21:24:51 <kmc> as is often used to cook chickens
21:24:53 <shachaf> oh, my birthday happen recently and i got a cake in the mail
21:24:57 <b_jonas> I didn't know "spit" meant that
21:24:59 <kmc> shachaf: really! happy birthday
21:25:02 <kmc> and what kind was it?
21:25:52 <b_jonas> kmc: wow, that was fast! it arrived to shachaf in negative time
21:26:04 <shachaf> unfortuantely i had a fruit fly infestation at the time so leaving the cake out to thaw was a bad idea
21:26:22 <shachaf> by the time i ate it it had flies embedded in it which i tried to remove
21:27:15 <kmc> you should get some carnivorous plants
21:27:33 <shachaf> much more civilized than herbivorous plants
21:27:45 <kmc> parasitic epiphytes?
21:48:35 <shachaf> kmc: did you know this fact:
22:01:17 <zzo38> Cave of Anti-magic {-} Land ;; Shroud ;; {1UU}, {T}, Discard a card: Counter target spell. ;; {1WW}, {T}, Discard a card: Destroy target enchantment.
22:07:00 -!- salpynx has joined.
22:07:15 <kmc> shachaf: plausible
22:10:53 <b_jonas> zzo38: no no. there's a good reason why that sort of repeatable counterspelling without restrictions doesn't appear on M:tG cards, even with the discard cost.
22:11:15 <b_jonas> it doesn't _look_ broken, but I think it would be if they printed it
22:11:16 -!- moei has quit (Quit: Leaving...).
22:11:36 <shachaf> counterspells? i just met 'er!
22:12:04 <b_jonas> and it's not like it didn't occur to Wizards, because they have a lot of spellshapers with a similar discard+{T}+mana cost
22:12:07 <zzo38> Maybe it can be improved
22:12:29 <b_jonas> Dawnstrider is already bad enough
22:14:22 <b_jonas> the enchantment destruction part is probably fine though, see Devout Witness
22:14:50 <b_jonas> if you want to get away with the counterspelling, you'll have to ask some restriction on what spell it can target. there's some versions like that.
22:14:57 <b_jonas> `card-by-name Diplomatic Es
22:15:05 <HackEso> Diplomatic Escort \ 1U \ Creature -- Human Spellshaper \ 1/1 \ {U}, {T}, Discard a card: Counter target spell or ability that targets a creature. \ MM-U
22:15:31 <b_jonas> `card-by-name Hisoka, Minamo Sensei
22:15:31 <HackEso> Hisoka, Minamo Sensei \ 2UU \ Legendary Creature -- Human Wizard \ 1/3 \ {2}{U}, Discard a card: Counter target spell if it has the same converted mana cost as the discarded card. \ CHK-R
22:15:40 <b_jonas> although... if they can print this:
22:15:47 <b_jonas> `card-by-name Ghost-Lit Warder
22:15:48 <HackEso> Ghost-Lit Warder \ 1U \ Creature -- Spirit \ 1/1 \ {3}{U}, {T}: Counter target spell unless its controller pays {2}. \ Channel -- {3}{U}, Discard Ghost-Lit Warder: Counter target spell unless its controller pays {4}. \ SOK-U
22:15:57 <b_jonas> then maybe you can do an unlimited counterspell too somehow
22:16:20 <b_jonas> I suspect not the way you just tried though
22:17:44 <b_jonas> `card-by-name Stronghold Biol
22:17:45 <HackEso> Stronghold Biologist \ 2U \ Creature -- Human Spellshaper \ 1/1 \ {U}{U}, {T}, Discard a card: Counter target creature spell. \ NE-U
22:17:52 <b_jonas> `card-by-name Stronghold Machi
22:17:52 <HackEso> Stronghold Machinist \ 2U \ Creature -- Human Spellshaper \ 1/1 \ {U}{U}, {T}, Discard a card: Counter target noncreature spell. \ NE-U
22:18:51 <b_jonas> the repeated counter that I use is
22:18:55 <HackEso> Disruptive Pitmage \ 2U \ Creature -- Human Wizard \ 1/1 \ {T}: Counter target spell unless its controller pays {1}. \ Morph {U} (You may cast this card face down as a 2/2 creature for {3}. Turn it face up any time for its morph cost.) \ ONS-C \ \ Disruptive Student \ 2U \ Creature -- Human Wizard \ 1/1 \ {T}: Counter target spell unless its controller pays {1}. \ US-C
22:21:38 -!- b_jonas has quit (Quit: leaving).
23:25:28 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
23:29:15 <salpynx> int-e: the Wikipedia Jot entry does seem wrong, do you have a particular correction in mind? I can't quite figure out what a clear improvement would be. 11100 = (ι(ι(ιι)) (= K) seems to be what is intended, but (ιι)(ιι) would be an empty string?
23:30:32 <salpynx> The whole single sentence description of Jot seems like it is flawed, and I'm not sure how to relate it back to the source material, without writing something completely different.
00:03:04 -!- MDead has joined.
00:04:50 -!- MDude has quit (Ping timeout: 272 seconds).
00:04:54 -!- MDead has changed nick to MDude.
00:45:01 -!- adu has joined.
01:21:22 <zzo38> I wrote on a paper my ideas about how to make upa better television set.
02:19:15 -!- salpynx has quit (Ping timeout: 260 seconds).
02:29:14 <kmc> zzo38: oh?
02:29:37 -!- doesthiswork has quit (Ping timeout: 245 seconds).
02:34:01 <zzo38> Some stuff I wrote, such as, there is 4:3 display, and on the right is the buttons, IR receiver, status display, OSD switch, speaker, and also a remote control holder.
02:35:24 <zzo38> On the back, there is the sections of inputs: two Digi-RGB sections (each having Digi-RGB, left audio, right audio, and IMIDI), one composite section (composite, left audio, right audio), one component section (Y, Cr, Cb, left audio, right audio; there is also a mode to use the component section as a second composite section), and RF.
02:35:54 <zzo38> Also on the back is the reset switch, the IMIDI out port, the audio output (if you want to use external speakers), and several dip switches.
02:36:52 <zzo38> Do you think it is good?
02:37:24 <kmc> seems pretty reasonable
02:38:16 -!- doesthiswork has joined.
02:38:38 <zzo38> To take up less space, mainly.
02:38:56 <zzo38> If such a TV set is manufactured, it could come in both 4:3 and 16:9 versions, I suppose.
02:42:02 <zzo38> And then there would be the software features, such as caption scrollback, numeric command prefixes (similar to vi), adjustment of colour conversion matrix, etc.
02:46:06 -!- salpynx has joined.
02:50:04 -!- FreeFull has quit.
02:59:48 <zzo38> O, and there is also a ethernet port. This could be used for streaming video/audio, but Gopher and ViewData could possibly also be implemented.
03:02:26 <kmc> you might be the only person on earth who wants a TV that can browse Gopher using a vi-like interface
03:02:34 <kmc> but I'm not going to say you're wrong
03:02:38 <kmc> follow your dreams
03:22:38 <zzo38> Also, I think ViewData was designed for television (according to a photograph I have seen, at least), so it will work well in this way.
04:40:56 <esowiki> [[Multi-Set Manipulator/Subset]] M https://esolangs.org/w/index.php?diff=65310&oldid=65263 * A * (+60) /* Natural numbers set not using the built-in N */
04:50:57 <zzo38> What are all of the control codes for Viewdata anyways?
04:55:05 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65311&oldid=65308 * A * (+165) Extend this subset
04:59:51 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65312&oldid=65311 * A * (-3) /* Set-comparison instructions */
05:11:02 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65313&oldid=65312 * A * (+7)
05:12:32 -!- doesthiswork has quit (Ping timeout: 245 seconds).
06:10:58 <int-e> salpynx: It's not just the example that's wrong. The translation of w1 is plain wrong, ever since this edit: https://en.wikipedia.org/w/index.php?title=Iota_and_Jot&diff=757746945&oldid=757746752 (the translation of w0 is correct, but not a simplification over [w0] = [w]SK).
06:15:04 <int-e> salpynx: Referring to the esolang page on Jot, the whole point of the translation of w1 is that it operates on arguments to the right, combining two of them, so that [F{K}] = [F11100] = [F1110]SK = [F111]SKSK = [F11](SK)SK = [F1](SKS)K = [F](SKSK) = [F]K holds regardless of F.
06:16:59 <int-e> salpynx: (That's one of the base cases of proving the identity [F{A}] = [F]A that the esolang wiki page mentions.\)
06:20:02 <int-e> Oh, it seems I can edit today. Different IP :P
06:25:50 <zzo38> salpynx: Yes, I suppose, such thing can be "TV improved", maybe. And then, we will also have VCR/DVD improved.
06:26:33 <shachaf> this is my fact of the day
06:57:15 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65314&oldid=65313 * A * (-19)
07:10:27 <int-e> salpynx: So I've edited the page, let's see whether the edit survives Wikipedia's general disdain for "IPs".
07:10:57 <esowiki> [[Multi-Set Manipulator/Smaller]] M https://esolangs.org/w/index.php?diff=65315&oldid=65314 * A * (+7)
07:13:22 <int-e> (Meh, these things always take me so long.)
07:33:27 -!- cpressey has joined.
08:08:46 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
08:11:24 -!- Phantom_Hoover has joined.
08:13:36 -!- Lord_of_Life has joined.
08:42:54 <cpressey> Good morning. How about a stack-based language that is statically typechecked by translating all operations to operations that push and pop type-values to the stack instead, and running that.
08:46:58 <Taneb> You need to be a bit careful if there's any non-trivial control flow
09:00:19 -!- wob_jonas has joined.
09:01:15 <cpressey> True. That's one of the things that makes it kind of interesting though.
09:03:11 <Taneb> If you have while loops, say, you can make sure the body is of type (A:Bool) -> B, with the condition B -> (A:Bool), for example
09:03:14 <wob_jonas> zzo38: as for that, I wonder, is there some widely supported standard for transmitting raw (uncompressed) digital audio through wires, sort of like DVI but for audio instead of video? and if so, why not?
09:03:14 <wob_jonas> it seems to me that everyone uses either analog audio (or even composite) or bluetooth audio.
09:05:16 <wob_jonas> and this is despite that we've had audio CD equipment for ages
09:06:24 <Taneb> Hmm, my scheme would restrict the language to being a LBA, I think (correspondign to simply typed lambda calculus))
09:27:30 -!- cpressey has quit (Quit: rebooting).
09:45:08 <esowiki> [[Special:Log/newusers]] create * TheOnlyMrcat * New user account
09:47:00 -!- andrewtheircer has joined.
09:50:28 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65316&oldid=65247 * TheOnlyMrcat * (+238) /* Introductions */
09:51:28 <HackEso> andrewtheircer: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <https://esolangs.org/>. (For the other kind of esoterica, try #esoteric on EFnet or DALnet.)
09:54:47 <shachaf> I believe it's permitted to sing into your microphone while in this channel.
09:55:12 <andrewtheircer> someone says "creeper" then another person says "aw man"
09:55:46 <shachaf> Taneb: Do you know things about QBF solvers, remind me?
09:56:06 <shachaf> Oh, I think reciting the lyrics into your microphone is also permitted.
09:56:38 <shachaf> Oh man, https://en.wikipedia.org/wiki/Polynomial_hierarchy has Sigma, Pi, and Delta, but no Sigma -| Delta -| Pi adjunction.
09:57:06 <shachaf> That's so confusing. The letter Δ should be banned for this use.
09:58:58 <shachaf> Title: Rick Astley - Never Gonna Give You Up (Video) - YouTube
09:59:34 <shachaf> Please don't try to trick people like that. It's quite rude.
10:00:06 <andrewtheircer> there are two types of people in this world: those who listen to that on purpose
10:10:12 -!- andrewtheircer has quit (Remote host closed the connection).
10:10:57 -!- xkapastel has quit (Quit: Connection closed for inactivity).
10:20:05 <Taneb> shachaf: I don not know things about QBF solvers
10:20:50 <Taneb> I barely know anything about anything, quite frankly.
10:20:59 <Taneb> Where can I find out about QBF solvers?
10:22:01 <shachaf> Hmm, I don't know much about QBF solvers.
10:22:15 -!- andrewtheircer has joined.
10:22:19 <shachaf> One good trick is to come to Berkeley and ask edwardk about them.
10:22:23 <int-e> I would start at http://www.qbflib.org/qbfeval19.php
10:22:44 <shachaf> I'm the most famous sha of them all.
10:22:45 <int-e> (I've seen some QBF solver basics.)
10:22:46 <Taneb> Berkeley's all the way in Gloucestershire, though
10:22:50 <Taneb> It's practically on the west coast!
10:23:40 <shachaf> Hmm, actually they call me SHA-512/256.
10:24:02 <Taneb> Hmm, Berkeley was where vaccination was invented
10:24:25 <shachaf> I thought it was in China or something?
10:24:27 <andrewtheircer> technically the word vaccine comes from antivaxxers of the time as they thought vaccines would turn you into a cow :p
10:24:48 <int-e> (I guess the 2018 edition is more fruitful for now. But you should learn some tool names, which will lead to corresponding papers, which will be educational.)
10:25:14 <HackEso> 737) <shachaf> U+2205 [∅] NO LETTER O ALLOWED
10:25:36 <wob_jonas> so is that where the legends about werecows come from?
10:26:01 <HackEso> 796) <kmc> typed racket: anyone using a model m keyboard
10:26:05 <shachaf> Maybe solvers that just support two quantifiers or something are more interesting in practice.
10:26:11 <shachaf> Unlimited quantifiers seems pretty extreme.
10:26:31 <wob_jonas> that explains why a mad scientist would become one
10:28:39 <int-e> shachaf: the particular class is called 2QBF and has its own track at QBFEVAL..
10:29:29 <int-e> (Since the objective is to *decide* formulas there's no real difference between the \forall\exists and \exists\forall prefixes)
10:30:29 <shachaf> Presumably this is sigma_2 and pi_2 or something.
10:30:47 <int-e> Yes. They're just dual of each other.
10:31:56 <shachaf> Are they left and right adjoint to some functor? twh
10:33:00 <int-e> For that you need to ask somebody who cares about category theory.
10:33:23 <shachaf> My only objection is to this delta thing.
10:33:33 <shachaf> Delta should always mean diagonal or difference.
10:34:15 <int-e> I suspect \Delta is for "deterministic"
10:34:32 <int-e> or possibly "decision"
10:34:59 <HackEso> 1288) <ais523> (btw, "q = 1-p" should be the standard definition of q, IMO)
10:35:24 <wob_jonas> you all have very specific ideas on how the use of letters should be restricted
10:35:33 <int-e> ...what if q is a state of an automaton though...
10:37:31 <shachaf> That seems fine for a two-state automaton.
10:38:01 <shachaf> Actually, I guess using delta for diagonal is only a category thing?
10:38:13 <shachaf> What do normal people call f : a -> (a,a)?
10:38:41 <int-e> shachaf: `dup` is the suggestion recently/currently discussed on the haskell libaries mailing list
10:39:35 <int-e> `diag` is a plausible name, of course.
10:39:36 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: diag`: not found
10:40:11 <int-e> And yes, I would probably use a lower case delta in formal writing, if I needed a name.
10:40:26 <shachaf> Oh, right, people use lowercase delta for it rather than capital.
10:43:01 <andrewtheircer> idea: whitespace (the eso) but with added blank characters
10:59:33 -!- cpressey has joined.
11:15:42 -!- Phantom_Hoover has quit (Ping timeout: 244 seconds).
11:59:55 <salpynx> int-e: that looks a lot better (Jot wikipedia edit) thank you! The article is trying to refer everything back to the Barker's iota combinator, and your last sentence does that. I was wondering if there was a simpler example to show w1, but I guess it's not that simple an operation. [w]S & [w]K are useful examples, and the intermediate steps are fol
11:59:56 <salpynx> lowable using the info on the page. Good stuff :)
12:00:25 <esowiki> [[ACL]] M https://esolangs.org/w/index.php?diff=65317&oldid=65309 * YamTokTpaFa * (-25) /* History and Turing Completeness */
12:04:57 <salpynx> for opinions on what delta means in maths, how about 4? Some pretty decent mathematicians used that convention quite early on.
12:05:33 <int-e> salpynx: thanks for the feedback!
12:08:31 <salpynx> I'll keep an eye on the page and defend your IP edit if needed :)
12:10:13 -!- andrewtheircer has quit (Remote host closed the connection).
12:16:28 -!- salpynx has quit (Remote host closed the connection).
12:21:07 -!- nfd has quit (Ping timeout: 246 seconds).
13:41:55 -!- heroux has quit (Ping timeout: 244 seconds).
13:51:19 <wob_jonas> I spent a weekend in London as a short family vacation. there was something that I found very confusing:
13:53:59 <wob_jonas> most bus stations had a street level map of its surroundings, which is great, but the problem is, they were all roated such that down on the map was the direction that the sign faced, rather than consistently south.
13:54:19 <wob_jonas> It drove me crazy because I saw the map oriented randomly in different directions every time.
13:54:47 <wob_jonas> It's hard to follow maps that way.
13:54:54 <Taneb> Means you don't need a compass to navigate
13:55:42 <Taneb> I think it's OK when you get used to it
13:56:11 <wob_jonas> If you get used to it, you no longer need the map signs in the bus stops
13:57:12 <wob_jonas> the fix is probably to buy a paper city map and ignore the maps on the signs (but still look at the other info on the signs, such as the name of the station and which bus lines stop there and towards where and how often)
13:59:44 <Taneb> I think being able to read a map oriented that way is a more transferable ability than you're suggesting
14:00:07 <wob_jonas> why can't they just put normal maps up?
14:00:24 <wob_jonas> It's my fault, I should have bought a paper map and used it
14:00:29 <Taneb> What's a "normal map"?
14:01:11 <wob_jonas> A normal map is like the good maps we used to have 20 years ago, that are no longer possible to buy because not enough people pay for them to be worth economically to make *sigh*
14:01:30 <wob_jonas> even for Budapest they no longer exist
14:01:48 <wob_jonas> I am using a combination of a fresh map with the last good map that there was
14:05:02 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
14:12:09 -!- Lord_of_Life has joined.
14:27:50 -!- atslash has quit (Quit: This computer has gone to sleep).
14:29:47 -!- andrewtheircer has joined.
14:30:16 -!- heroux has joined.
14:42:08 <esowiki> [[Multi-Set Manipulator/String]] N https://esolangs.org/w/index.php?oldid=65318 * A * (+1589) Created page with "This is a string-based version of [[Multi-Set Manipulator/Subset]], as there are programming difficulties for using lists. This attempts to make Multi-Set Manipulator a pure..."
14:47:22 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65319&oldid=65318 * A * (+75)
14:51:21 <esowiki> [[User talk:Gamer]] N https://esolangs.org/w/index.php?oldid=65320 * Andrew3335 * (+211) Created page with "It was really fun making that math paper language with you. Sorry if I'm really really late, but thanks for that endeavor. It was my best language so far (dotlang was a befung..."
14:59:39 -!- andrewtheircer has quit (Remote host closed the connection).
15:08:05 -!- wob_jonas has quit (Remote host closed the connection).
15:28:34 -!- xkapastel has joined.
15:32:44 -!- andrewtheircer has joined.
16:00:01 -!- cpressey has quit (Quit: WeeChat 1.4).
16:37:58 -!- atslash has joined.
16:59:59 -!- b_jonas has joined.
17:02:14 -!- Phantom_Hoover has joined.
17:06:53 -!- FreeFull has joined.
17:16:31 -!- MDude has quit (Ping timeout: 246 seconds).
17:45:37 <zzo38> I had idea about something similar to a "do notation" like Haskell but to use with a preprocessor for JavaScript codes. Such as: const listMonad=(m,f)=>[].concat(...m.map(f)); const x=listMonad*>{ let a=yield [1,2,9]; let b=[3,4,5,7]; return a-b; };
17:52:56 <rain2> https://stackoverflow.com/questions/57376279/ thoughts abuot this?
17:53:13 -!- andrewtheircer has quit (Remote host closed the connection).
17:53:34 -!- andrewtheircer has joined.
17:57:13 -!- ais523 has joined.
17:58:02 <rain2> andrewtheircer: thoughts
18:07:51 <b_jonas> ``` perl -e'while(<>) { if (/^----- ([0-9]+) /) { 13 == $1 and last; } elsif (/^[^ ]/) { m"^[(]?([\-\x27./A-Za-z]+)[!)+*]*\r?$" or die "syntax $_"; push @w,$1; } } print $w[rand@w]," " for 1..21; print "\n";' /hackenv/share/dict/12dicts/Lemmatized/2+2+3frq.txt
18:07:52 <HackEso> partial palm meter breathe near specific agreement beat striking liver qualify western above entity convince subject ranch viewer gas manager extensive
18:08:29 -!- andrewtheircer has quit (Remote host closed the connection).
18:08:43 <b_jonas> printing random common words
18:09:01 -!- andrewtheircer has joined.
18:09:06 <HackEso> ficising creed wportie michtfully cribarabe sain convidentwo vale dra tallatek zygeima acheth eilesita ally iii bcnchover woien devell baram donne ryon
18:09:24 <b_jonas> and random mythic rare words
18:09:45 <andrewtheircer> how many time travelling esoteric languages've been done
18:21:37 -!- unlimiter has joined.
18:25:17 <rain2> check my link andrewtheircer
18:34:36 <b_jonas> andrewtheircer: so? that's not an adult site, StackOverflow can be written from the age of 13, read by anyone
18:35:20 -!- doesthiswork has joined.
18:37:08 -!- ais523 has quit (Quit: quit).
18:37:55 -!- andrewtheircer has quit (Remote host closed the connection).
18:53:26 -!- diverger has quit (Ping timeout: 272 seconds).
18:54:09 -!- diverger has joined.
19:02:17 -!- lldd_ has joined.
19:10:31 -!- sftp has quit (Quit: leaving).
19:32:11 <b_jonas> In athletics sport, when do you suppose the traditional approach to high jump with a fixed bar will get replaced by a grid of lights and detectors so that the jumper doesn't have to bet on how high he jumps exactly where and in what directions, the detectors just figure out what the highest line is that he's jumped over? (A bar, lower than usual, can still be there as a guideline for approximately where
19:34:41 <b_jonas> There can still be multiple attempts of jumps of course.
19:37:26 <kmc> that is an interesting idea
19:38:05 <kmc> I know that major league baseball is going to start using radar to judge whether a ball has gone through the strike zone or not
19:39:40 <b_jonas> I wonder if you could do something with long jump and hammer throw too so that it's automatically measured where exactly someone took the last step before the jump or threw from respectively and subtract it
19:39:57 <kmc> and the umpire will still make a call but is expected to agree with the machine in typical cases
19:40:17 <b_jonas> there'd still be some intervals of course, because of technical limitations, in all of those cases, but still it could help
19:40:40 <b_jonas> heck, perhaps even for short distance running people would no longer have to start at exactly the same moment
19:40:59 <b_jonas> and short distance swimming too
19:45:32 <b_jonas> and of course put them in air conditioned buildings so that there's no wind and carefully controlled predictable temperature and air pressure and humidity, and make multiple different categories depending on what accleration the artificial gravitation generator is set to
19:57:20 -!- sftp has joined.
19:58:13 <b_jonas> swimmers have always tried to swim in water of various temperatures, and of course for high level competitions in short distance swimming, they try to set a temperature close to ideal. the Mythbusters even did some attempt to try water with viscosity much higher than usual. but I think nobody experimented with swimming in lower than usual or higher than usual gravity yet.
20:01:08 <Hooloovo0> yeah, it's kind of a hard thing to test, lots of water is kind of a pain to work with
20:01:23 <Hooloovo0> and it shouldn't matter a whole lot, at least if you're submerged
20:01:50 <Hooloovo0> since your density is basically the same as water's
20:02:07 <b_jonas> Hooloovo0: sure, although sea water can be denser than normal
20:03:00 <Hooloovo0> true, and a couple of lakes are saltier/denser still
20:05:03 <b_jonas> yeah, the Dead Sea most famously, only it's in the Middle East where there are some ... political problems
20:09:25 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
20:12:29 <Hooloovo0> hmm, it's actually not that different from the great salt lake's salinity https://en.wikipedia.org/wiki/List_of_bodies_of_water_by_salinity
20:12:49 -!- Lord_of_Life has joined.
20:13:53 <b_jonas> Hooloovo0: I, um, might be biased and heard more of the former because it's closer to here
20:22:18 -!- lldd_ has quit (Quit: Leaving).
20:28:25 <zzo38> Do you play any Washizu mahjong or dark mahjong or any other kind of Fukumoto variants of mahjong?
20:28:52 <kmc> I have never played any variant of mahjong including the normal one
20:32:59 <zzo38> Washizu mahjong requires most (but not all) of the tiles to be transparent (so that your opponent can see it too), but dark mahjong can use the ordinary equipment for mahjong.
20:34:04 <b_jonas> by transparent, do you mean they're marked on the back too?
20:34:24 <b_jonas> can you see them even in the wall/deck from where you're drawing the cards?
20:35:04 <zzo38> b_jonas: That is one way to implement it (I have seen this as a suggestion), but the set I have uses tiles that you can actually see through.
20:35:28 <zzo38> In Washizu mahjong the tiles are drawn from a bag (and you will wear a glove on that hand), so you can't see them before they are drawn.
20:36:23 -!- tromp has quit (Read error: Connection reset by peer).
20:36:59 -!- tromp has joined.
20:37:49 <zzo38> Dark mahjong is you are allowed to discard face-down, but doing so costs 1000 points. Opponent can try to make it face-up by a payment of 2000 points, but if the discarder then bets an additional 4000 points then it remains face-down. However, it is still allowed to call ron on that tile even though you cannot see it! If you do so correctly, then the score for your hand is doubled.
20:37:51 <b_jonas> zzo38: I see. I'm just used to cards, not mahjong, which is why I find the idea of transparent strange, although admittedly there is one commercial card game with actually transparent plastic cards (called Swish IIRC)
20:38:05 <b_jonas> ah, drawn from a bag, like in Scrabble. makes sense.
20:38:37 <zzo38> (Some rules for dark mahjong are still unclear though, such as how face-down discarding interacts with furiten.)
20:39:46 -!- tromp has quit (Read error: Connection reset by peer).
20:40:30 -!- tromp has joined.
21:45:24 -!- unlimiter has quit (Quit: WeeChat 2.5).
21:53:53 -!- salpynx has joined.
23:13:22 -!- nfd has joined.
23:35:05 -!- MDude has joined.
00:04:34 -!- Phantom_Hoover has quit (Ping timeout: 268 seconds).
00:10:28 -!- Lord_of_Life has quit (Excess Flood).
00:11:50 -!- Lord_of_Life has joined.
00:11:58 -!- jix has quit (Ping timeout: 268 seconds).
00:12:08 -!- jix has joined.
00:15:18 -!- atslash has quit (Quit: This computer has gone to sleep).
00:15:32 -!- b_jonas has quit (Quit: leaving).
00:55:43 <shachaf> Sgeo_: Can Sgeolang be ALGOL 68?
00:55:50 <shachaf> That language was so good.
01:01:03 -!- FreeFull has quit.
01:52:29 <lambdabot> KOAK 070053Z 30013KT 10SM FEW009 BKN180 20/13 A2990 RMK AO2 SLP123 T02000133
02:41:19 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65321&oldid=65319 * A * (+139)
02:45:10 <lambdabot> KSFO 070156Z 27015KT 10SM FEW007 SCT180 19/12 A2989 RMK AO2 SLP123 T01890122
02:45:42 <fizzie> The US codes are so easy.
02:49:38 <kmc> @metar KSJC
02:49:39 <lambdabot> KSJC 070153Z 33014KT 10SM FEW050 SCT100 BKN160 23/16 A2988 RMK AO2 SLP117 T02280161 $
03:23:36 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65322&oldid=65296 * Areallycoolusername * (+237)
04:15:31 -!- doesthiswork has quit (Ping timeout: 248 seconds).
04:15:39 <zzo38> If you spit poison will it last? I would think it might lose its potency after enough time has passed, especially if the floor might absorb it and if it is exposed to the wind.
04:21:55 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65323&oldid=65321 * A * (+16)
04:26:14 <kmc> it would depend on the poison, I suppose
04:30:16 <Hooloovo0> and, presumably the floor and wind speed
04:35:27 <zzo38> Yes, OK, I suppose so.
04:35:54 <zzo38> What else do you think might affect it?
04:40:08 <Hooloovo0> vapor pressure, temperature, phase of the moon
04:45:02 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65324&oldid=65323 * A * (+120)
04:45:17 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65325&oldid=65324 * A * (-36) /* Set-manipulational instructions */
05:02:31 <Sgeo_> I wish ShaderToy would do a little bit of server-side rendering so it would be possible to browse the list without melting my GPU
05:04:36 <esowiki> [[Multi-Set Manipulator/String]] https://esolangs.org/w/index.php?diff=65326&oldid=65325 * A * (+443)
05:07:44 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65327&oldid=65326 * A * (-35)
05:16:15 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65328&oldid=65327 * A * (-77) /* Output its own golf score */
05:22:03 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65329&oldid=65328 * A * (+49)
05:29:24 -!- Sgeo_ has quit (Read error: Connection reset by peer).
05:29:49 -!- Sgeo_ has joined.
05:48:45 -!- xkapastel has quit (Quit: Connection closed for inactivity).
06:24:22 <salpynx> I'm trying to track down a copy of the original P-double-prime (𝓟″) paper from 1964, pp.187-194 vol. 3 of the ICC Bulletin. It seems like a digital copy is non-existent. Has anyone here ever seen one?
06:24:39 <salpynx> I'm contemplating making a copy (8 pages) from a physical library https://www.worldcat.org/title/icc-bulletin/oclc/2222680 but it'll be a bit of a long-term mission.
06:26:33 <salpynx> There's a 1979 paper which mentions 𝓟′ which is the original language that 𝓟″ is a context-free improvement on. Also a 𝓟‴ lang (P-triple-prime!) by D. Skordev (1976) is briefly described, and a further development, 𝓟⁰ by the author, Solomon Passy.
06:27:48 <salpynx> I did find copies of Bohm and Jacopini's paper on Flow Diagrams which talks about both 𝓟′ & 𝓟″, and Bohm's 1954 thesis in original French and 2016 English translation, which predates those languages, but relates to digital computing.
06:28:07 <salpynx> The 1964 paper does not appear to be online ... yet
06:31:16 <salpynx> The 1979 paper that describes the extended 𝓟 languages is available https://documents.pub/document/structured-programs-for-turing-machines.html
06:38:58 <shachaf> You could try asking User:R.e.s.
06:40:20 <int-e> Solomon Passy... never heard of him...
06:45:02 <int-e> Ah, but Böhm is famous of course.
06:46:27 <int-e> If it's the right Böhm that is, hmm.
06:46:54 <int-e> but that seems to be the case... https://en.wikipedia.org/wiki/B%C3%B6hm_tree
06:47:19 <int-e> (*not* the garbage collector person)
06:51:35 <salpynx> yup, Corado Böhm is the creator of 𝓟″
06:52:50 <int-e> wow. https://doi.org/10.2307/2270680 ... that's a 3 line review (fully visible in the screenshot) that they offer to let you buy for 30 Euros...
06:53:58 <salpynx> int-e: yes, that kept turning up. It took me a while to realise that the 3 line review was actually the full content for that DOI!
06:56:27 <salpynx> The best info I could find from others who went looking is here https://cs.stackexchange.com/questions/14983/how-to-prove-the-structured-program-theorem but it's not clear that they got to see it.
06:57:05 <salpynx> oh, wow, that's User:R.e.s that shachaf just mentioned?
07:01:11 <int-e> Anyway I agree that the paper doesn't appear to be available online.
07:06:20 <esowiki> [[MUSYS]] M https://esolangs.org/w/index.php?diff=65330&oldid=63184 * Salpynx * (+69) /* References */ add DOI for the original MUSYS paper
07:08:11 <salpynx> I have found the original paper for this MUSYS language from 1973 which I had been searching for for some time, so I might try to add some more details to the wiki.
07:08:12 <shachaf> I was talking about the esowiki and Wikipedia user.
07:14:18 <salpynx> shacaf: looks like a SE user too, since that username appears on the page I linked to as well
07:19:19 <salpynx> and Solomon Passy seems to be active and more well known in Bulgarian politics, ... and USB charging?? https://en.wikipedia.org/wiki/Solomon_Passy
07:44:36 <int-e> Oh, that was a worthy and successful initiative indeed. (But I didn't know who was behind it.)
07:45:37 <int-e> Downside: mobile phones no longer come with chargers. Upside: you can buy mobile phone chargers, and nobody will ask you what mobile phone you have.
07:46:46 <shachaf> Neither of those matches my experience?
07:47:35 <int-e> (Well they messed it up because while chargers are USB based you still need to know the kind of plug... :P)
07:48:49 <int-e> And tbh this is all theory to me. I don't have a smartphone.
07:48:49 <shachaf> At least there are USB type-C and Apple Lightning.
07:49:01 <shachaf> And probably still MicroUSB.
07:49:52 <int-e> In any case I do believe that the situation is far less messy than it was 10 years ago.
07:50:08 <shachaf> I have one charger that charges both my laptop computer and mobile phone.
07:50:57 -!- atslash has joined.
07:51:22 <int-e> until you want to charge them both at the same time? hmm
07:51:32 <int-e> maybe you can plug the phone into the laptop for that
07:55:01 <int-e> Yes, sure, and the laptop USB charging/electricity distribution (hmm let's say motherboard) has to be up for it as well.
07:55:25 <int-e> (I don't really know enough to be more specific than "motherboard" which is bascially all of the computer :P)
07:58:43 <esowiki> [[Special:Log/newusers]] create * Dtuser1337 * New user account
08:06:33 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65331&oldid=65316 * Dtuser1337 * (+326) ;)
08:10:33 <esowiki> [[DDR]] https://esolangs.org/w/index.php?diff=65332&oldid=64007 * Dtuser1337 * (+60) adding new category
08:11:12 <esowiki> [[Multi-Set Manipulator/String]] M https://esolangs.org/w/index.php?diff=65333&oldid=65329 * A * (-222)
08:15:26 <esowiki> [[User:Dtuser]] N https://esolangs.org/w/index.php?oldid=65334 * Dtuser1337 * (+39) moved to my new user. (plz dont banish me because i cannot use this (my old) accounts.)
08:17:57 -!- cpressey has joined.
08:21:19 -!- Phantom_Hoover has joined.
08:35:49 <esowiki> [[Stlisp]] https://esolangs.org/w/index.php?diff=65335&oldid=42087 * Dtuser1337 * (+18)
09:01:24 <int-e> So I just heard the phrase "the philosophy of bullshit" and my immediate reaction was that this seems redundant...
09:10:51 -!- MDude has quit (Read error: Connection reset by peer).
09:11:03 -!- MDude has joined.
09:28:18 -!- salpynx has quit (Remote host closed the connection).
09:40:10 <rain2> name one good philosohpy
09:49:14 -!- salpynx has joined.
09:50:20 <int-e> shachaf: https://www.youtube.com/watch?v=S_ommr0Te4A was the context.
09:52:12 <int-e> shachaf: The thing is, it's really hard to tell philosophy and philosophical bullshit apart. I often can't. Also the categorization will differ from person to person.
10:10:55 <cpressey> At minimum you would seem to need to hold a philosophy in which a distinction can be made between the two, in order to distinguish between the two.
10:11:32 <cpressey> Annoyingly, you can't make someone else also hold such a philosophy.
10:12:11 <cpressey> Additionally, some people just like to argue.
10:13:47 <int-e> cpressey: I find that last statement offensive.
10:14:18 <shachaf> I find most philosophers very grating.
10:15:02 <shachaf> I mean writings by famous philosophers, not specific humans.
10:15:56 <shachaf> I tend to like philosophy books by Raymond Smullyan, such as _The Tao is Silent_
10:16:00 <shachaf> Is that a philosophy book?
11:11:31 -!- Phantom_Hoover has quit (Ping timeout: 244 seconds).
11:23:53 <esowiki> [[Pointfree programming]] https://esolangs.org/w/index.php?diff=65336&oldid=57643 * B jonas * (+14)
11:38:49 -!- salpynx has quit (Remote host closed the connection).
12:02:07 -!- heroux has quit (Ping timeout: 245 seconds).
12:19:33 -!- wob_jonas has joined.
12:19:46 <wob_jonas> `ehlist http://eheroes.smackjeeves.com/comics/2836328/ready-set-not/
12:19:47 <HackEso> ehlist http://eheroes.smackjeeves.com/comics/2836328/ready-set-not/: b_jonas
13:10:58 -!- heroux has joined.
13:21:39 -!- atslash has quit (Quit: Leaving).
13:21:49 -!- atslash has joined.
13:36:51 -!- doesthiswork has joined.
14:04:48 -!- xkapastel has joined.
14:23:31 <esowiki> [[Tacit programming]] N https://esolangs.org/w/index.php?oldid=65337 * A * (+35) Redirect for synonyms
14:24:05 <esowiki> [[Point-free programming]] N https://esolangs.org/w/index.php?oldid=65338 * A * (+35) Redirect for synonyms
14:29:13 <esowiki> [[Pointfree programming]] M https://esolangs.org/w/index.php?diff=65339&oldid=65336 * A * (+183) Mention some tacit languages not mentioned here yet.
14:31:25 <esowiki> [[Pointfree programming]] M https://esolangs.org/w/index.php?diff=65340&oldid=65339 * A * (-8) Whoops
14:51:30 <esowiki> [[Adjudicated Blind Collaborative Design Esolang Factory]] M https://esolangs.org/w/index.php?diff=65341&oldid=40772 * A * (+63)
14:51:58 <esowiki> [[Advanced Brainfuck]] M https://esolangs.org/w/index.php?diff=65342&oldid=54735 * A * (+76)
14:53:01 <esowiki> [[Aeon]] M https://esolangs.org/w/index.php?diff=65343&oldid=39332 * A * (+75)
14:54:06 <esowiki> [[Al Dente]] M https://esolangs.org/w/index.php?diff=65344&oldid=62990 * A * (+72)
14:55:23 <esowiki> [[Al Dente]] M https://esolangs.org/w/index.php?diff=65345&oldid=65344 * A * (-31) Give up on categorizing
14:55:58 <esowiki> [[Big Man Computer]] M https://esolangs.org/w/index.php?diff=65346&oldid=39039 * A * (+64)
14:57:30 <esowiki> [[Chafa]] M https://esolangs.org/w/index.php?diff=65347&oldid=36608 * A * (+63) The zalgo creates a mess
14:58:07 <esowiki> [[Got a match?]] M https://esolangs.org/w/index.php?diff=65348&oldid=63384 * A * (+45)
14:58:36 <esowiki> [[GreeeeeeeeenText]] M https://esolangs.org/w/index.php?diff=65349&oldid=58839 * A * (+69)
14:59:27 <esowiki> [[The Genius from Kiev]] M https://esolangs.org/w/index.php?diff=65350&oldid=61360 * A * (+63)
15:00:13 <esowiki> [[Brain:D]] M https://esolangs.org/w/index.php?diff=65351&oldid=58854 * A * (+76)
15:01:35 <esowiki> [[DukkTap]] M https://esolangs.org/w/index.php?diff=65352&oldid=58864 * A * (+65)
15:02:10 <esowiki> [[BOREDOM]] M https://esolangs.org/w/index.php?diff=65353&oldid=60546 * A * (+69)
15:03:07 <esowiki> [[Caeos]] M https://esolangs.org/w/index.php?diff=65354&oldid=60195 * A * (+68)
15:04:04 <esowiki> [[NEGATOR]] M https://esolangs.org/w/index.php?diff=65355&oldid=59879 * A * (+65)
15:04:44 <esowiki> [[EZ]] M https://esolangs.org/w/index.php?diff=65356&oldid=59877 * A * (+72)
15:05:29 <esowiki> [[ElemScript]] M https://esolangs.org/w/index.php?diff=65357&oldid=59805 * A * (+88)
15:06:00 <esowiki> [[HuffPuff]] https://esolangs.org/w/index.php?diff=65358&oldid=59255 * A * (+76)
15:07:17 <esowiki> [[Quite]] M https://esolangs.org/w/index.php?diff=65359&oldid=59209 * A * (+79)
15:07:50 <esowiki> [[Ummm...]] M https://esolangs.org/w/index.php?diff=65360&oldid=64878 * A * (+79)
15:08:25 <esowiki> [[EZ]] M https://esolangs.org/w/index.php?diff=65361&oldid=65356 * A * (-1)
15:20:03 -!- Vorpal has joined.
15:20:03 -!- Vorpal has quit (Changing host).
15:20:03 -!- Vorpal has joined.
15:28:19 <cpressey> wob_jonas: re Lambda: The Gathering, in the concatenative thing I'm working on, I don't "apply from the left" or "apply from the right", but I do "compose before" and "compose after", so that's something I suppose
15:29:31 <wob_jonas> cpressey: yeah, but like I said, the way LTG cheats is that you get mutable variable slots into which you can store or load functions
15:48:05 <wob_jonas> "wool" vs "fleece". English is confusing.
15:58:08 <Taneb> Those... are fairly different things, right?
15:59:03 <wob_jonas> I think they both mean the material used to make textile that originates from sheep or other ungulates.
15:59:22 <Taneb> In different forms
15:59:38 <Taneb> (you can also have wool originating from certain breeds of rabbits)
15:59:39 <wob_jonas> Can you be more specific? What different forms?
16:00:21 -!- cpressey has quit (Quit: A la prochaine.).
16:00:31 <wob_jonas> Ok, maybe from any mammal. As opposed to most textiles, that come from cotton, linen, hemp, various parts of other plants, plastics, or a mixture of plastic with cotton.
16:01:02 <Taneb> Wool as a material is assembled from cords of wool, whereas fleece isn't visibly
16:04:03 <wob_jonas> Taneb: do you mean to say that wool is what you get not from spinning the mammal hairs into thick strands called a yarn or thread and then knitting them into a textile, whereas fleece is the same as felt, which is what you get from just pressing all the hairs together as a flat pane without order until they stick?
16:04:21 <Taneb> Something along those lines
16:04:39 <Taneb> I don't think fleece is the same thing as felt, but it's a lot closer to felt than to wool (the material)
16:05:05 <Taneb> I'm specifying wool the material because wool is also what I call the hair of sheep and certain other animals
16:16:03 -!- wob_jonas has quit (Remote host closed the connection).
16:28:24 -!- unlimiter has joined.
16:59:02 -!- Phantom_Hoover has joined.
17:05:15 -!- unlimiter has quit (Quit: WeeChat 2.5).
17:06:20 -!- unlimiter has joined.
17:06:29 -!- unlimiter has quit (Client Quit).
17:09:19 -!- unlimiter has joined.
17:09:48 -!- FreeFull has joined.
17:11:27 -!- atslash has quit (Quit: This computer has gone to sleep).
17:14:19 -!- unlimiter has quit (Quit: yes it does).
17:38:23 <esowiki> [[Braincells]] N https://esolangs.org/w/index.php?oldid=65362 * HereToAnnoy * (+82) Created page with "'''Braincells''' is just another [[Brainfuck]] derivative by [[User:HereToAnnoy]]."
17:43:26 -!- b_jonas has joined.
17:46:20 -!- ais523 has joined.
17:50:32 -!- b_jonas has quit (Read error: Connection timed out).
17:50:49 -!- b_jonas has joined.
17:54:24 <esowiki> [[Braincells]] https://esolangs.org/w/index.php?diff=65363&oldid=65362 * HereToAnnoy * (+1154) unfinished, brb
17:55:05 -!- ais523 has quit (Quit: sorry for my connection).
17:55:17 -!- ais523 has joined.
18:18:30 -!- unlimiter has joined.
18:26:19 -!- unlimiter has quit (Quit: THX EVRBDY).
18:47:23 -!- pecan has left.
18:55:01 -!- ais523 has quit (Quit: quit).
19:07:09 <esowiki> [[Adjudicated Blind Collaborative Design Esolang Factory]] https://esolangs.org/w/index.php?diff=65364&oldid=65341 * Salpynx * (-63) Undo revision 65341 by [[Special:Contributions/A|A]] ([[User talk:A|talk]]) This is not a language.
19:23:26 <esowiki> [[Aeon]] M https://esolangs.org/w/index.php?diff=65365&oldid=65343 * Salpynx * (-23) Fix typo in category and some formatting
19:23:31 -!- nfd9001 has joined.
19:25:32 -!- nfd has quit (Ping timeout: 258 seconds).
19:32:16 <esowiki> [[BOREDOM]] M https://esolangs.org/w/index.php?diff=65366&oldid=65353 * Salpynx * (-23) One language category is probably enough here
19:34:43 -!- diverger has quit (Read error: Connection reset by peer).
19:35:06 <esowiki> [[GreeeeeeeeenText]] M https://esolangs.org/w/index.php?diff=65367&oldid=65349 * Salpynx * (-23) 1
20:09:39 -!- Lord_of_Life_ has joined.
20:12:49 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
20:12:54 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:15:09 <tswett[m]> So, how would you build a computer out of the "Star Wars" cellular automaton?
20:15:23 <tswett[m]> It seems perfect for computing. It has stationary elements and it also has spaceships that move at the speed of light.
20:15:42 <tswett[m]> It's very easy to construct guns in Star Wars.
20:15:45 <Hooloovo0> hasn't somebody built gates for it already?
20:16:53 <tswett[m]> But I haven't been able to find any information about that.
20:17:27 <tswett[m]> So I decided to try to start from scratch.
20:18:33 <Hooloovo0> http://www.conwaylife.com/forums/viewtopic.php?f=11&t=283
20:18:45 <Hooloovo0> also http://www.conwaylife.com/forums/viewtopic.php?f=11&t=507
20:19:19 <tswett[m]> But so far it ain't going too hot.
20:19:36 <Hooloovo0> I think I've seen discussion about it elsewhere but that may have been a similar generations rule
20:20:54 <Hooloovo0> I'm interested in how to go from the gates to the computer
20:21:08 <tswett[m]> The simplest and most common spaceship in Star Wars is the "bullet." It's just a pair of young cells with a trail of old cells.
20:21:09 <tswett[m]> Oh shoot, lemme check that out. Thanks!
20:26:06 <Hooloovo0> I think it would be cool to go from verilog to logic in CGOL/star wars... it'd be cool if yosys could be hacked to do it
20:26:21 <tswett[m]> Okay, let's see. I already know that one bullet can destroy another bullet. If they hit each other at a right angle with the right timing, they'll both be destroyed.
20:26:23 <tswett[m]> That SR latch pattern also has a signal turner, as well as a duplicating signal turner.
20:27:18 <tswett[m]> You're also likely to need a way to delay a signal by an odd number of time steps.
20:27:24 <tswett[m]> And... that's it, that's all you need to build a computer.
20:28:01 <tswett[m]> Signal duplication, a destructive collision gate, and arbitrary routing gets you a computer.
20:28:13 <Hooloovo0> why do you need to delay by an odd number of steps? why not just work with even periods?
20:30:20 <tswett[m]> I don't know if you need that or not.
20:30:59 <tswett[m]> But you might have a situation where, say, bullets can only interact usefully if they're of opposite phases.
20:31:40 <tswett[m]> Either you need to be able to work entirely with even-phase bullets, or you need some way to transfer information between even-phase bullets and odd-phase bullets.
20:34:56 <b_jonas> "say, bullets can only interact usefully if they're of opposite phases" => then you let a gun bullet interact with your signal, and either you get an opposite parity bullet, or you get one after you commute which way the two react
20:36:32 <b_jonas> though that could still fail if you can only swap the parity together with negating the signal
20:36:53 <b_jonas> I don't know what you can actually do easily in this cellular thingy
20:38:06 <b_jonas> I don't even know how those cellular automata work of which I wrote on the wiki
20:38:30 <b_jonas> I do know the game of life rule because I wrote a fun golf program to compute it
20:38:48 <Hooloovo0> how did you find star wars? the rule table repository?
20:39:17 <b_jonas> nah, that's reverse causation, I knew about game of life way before I started writing such esoteric programs
20:39:21 <kmc> I made a HighLife program that runs on this LED display I found at a hackerspace at MIT and reverse-engineered
20:39:34 <kmc> it's been running for 9 years now!
20:39:58 <kmc> the sign contains an embedded DOS PC and a huge custom ISA card
20:40:37 <kmc> in order to keep things interesting, it will occasionally spawn a glider at a random location and orientation
20:40:47 <kmc> this seems to create a good mix of high- and low-activity times
20:41:03 <kmc> also, the edges wrap around but reversed
20:41:28 <kmc> so e.g (0,5) is adjacent to (w-1, h-6)
20:41:41 <kmc> this creates (approximately) the geometry of a projective plane
20:42:05 <kmc> and the system doesn't lose entropy as fast as it would with empty-cell boundary conditions
20:42:38 <Hooloovo0> is it only one edge that's flipped, or is it both?
20:46:27 <kmc> yeah, both. if it was one edge flipped and one wrapping w/o flip then it would be a Klein bottle
20:46:30 <kmc> which would probably also work
20:46:32 <kmc> as would a torus
20:46:36 <kmc> I just wanted to be fancy
20:46:47 <kmc> and I think I'd been playing with projective plane in fractal video feedback loops around the same time
20:53:58 -!- salpynx has joined.
21:02:04 <b_jonas> https://codegolf.stackexchange.com/q/3434/ specifically says torus, so I didn't have a choice in that, but it doesn't say that the direction of the torus has to be parallel to the cell grid, so I abuse that to make the program shorter
21:03:31 <kmc> what's the direction of the torus?
21:05:22 <b_jonas> kmc: my answer tells that explicitly
21:05:49 <b_jonas> "The game board is hard-coded to size 79x23. It is wrapped in a torus: if you leave the board on the bottom, you end up at the top; if you leave on the right side, you end up at the left side but shifted one row down."
21:06:13 <b_jonas> that's the easiest to implement
21:06:55 <b_jonas> the original version is a cylinder, wrapping around almost horizontally but zeroing above the top and below the bottom, variable size field
21:07:01 <b_jonas> the golf version got fixed size because it's golf
21:09:38 <Hooloovo0> I love how TI-BASIC is competitive in code golf competitions like this
21:11:11 <tswett[m]> Hooloovo0: How did *I* find Star Wars? I downloaded Mirek's Cellebration way back when.
21:11:12 <Hooloovo0> mostly because all the primitives are tokens and there's a lot of built-in math operators
21:11:36 <Hooloovo0> which are almost all two bytes each
21:13:43 <kmc> oh, you're allowed to treat it as the binary representation
22:19:28 <salpynx> is there a way to measure entropy , or 'potential energy' in CA configurations? I just watched on of those Star Wars configurations (the one in the large bounding box) waiting for it to settle down. It did at around T=55000
22:20:03 <kmc> a perfect measure of entropy would be kolmogorov complexity, which is uncomputable
22:20:10 <kmc> i'm sure there are many heuristic measures that are useful
22:20:22 <salpynx> it felt like you should be able to make some probabilistic statements based on cell density and the kinds of patterns, obviously depending on the particular ruleset
22:20:54 <kmc> for example you could look for repeats in the history of each cell
22:21:03 <kmc> count the number of cells that haven't repeated in the past n generations
22:21:09 <kmc> or if you're doing hashlife, count whole regions
22:23:58 <salpynx> some patterns seemed to be more likely 'absorb' energy, and other to 'release' complex patterns... if regions could be classified as one or the other, and the density of the whole thing would influence the likeyhood of one region affecting the other
22:27:20 <Hooloovo0> I'm not aware of any off the top of my head, and I've trolled around conwaylife for a while
22:27:55 <salpynx> Now I'm thinking about studying CA like gasses, making statements about aggregate behaviour using statistics
22:30:33 <Hooloovo0> there has been some study of simulating gases with CA (search for HPP latice gasses, I think golly has one in its included patterns)
22:30:43 <Hooloovo0> but a lot of CA don't really act like gases at all
22:31:37 <kmc> yeah most gases don't spontaneously generate wild critters
22:31:41 <kmc> though I guess hydrogen does
22:31:48 <kmc> if you have enough mass and time and non-homogeneity
22:32:40 <shachaf> i didn't choose the hash life
22:34:20 <shachaf> the 20-round version of SHA-4 should be called SHA-4/20
22:34:55 <b_jonas> shachaf: and int-e says he didn't choose to be not swedish, and zzo38 says the letters in their name don't mean anything, but all that negativity and denial sounds supicious to me
22:35:14 <b_jonas> if you want to convince people that your nick doesn't mean something, I think the best way is to come up with an explanation of what it does mean
22:35:24 <salpynx> but putting a match to hydrogen vs. putting a match to argon ... like you can tell some CA rules will be very inert..
22:35:45 <Hooloovo0> it's actually surprisingly difficult to tell just by the rule string
22:36:13 <shachaf> b_jonas: Hmm? I never claimed my nick doesn't mean anything.
22:36:21 <shachaf> It's obviously the rot13 of "fun puns".
22:36:31 <b_jonas> shachaf: no, it's zzo who claimed their nick doesn't mean anything
22:36:44 <shachaf> Oh, zzo38 is also the rot13 of "fun puns".
22:36:44 <b_jonas> you just claim you didn't choose it to mean a hash thingy
22:37:09 <shachaf> No, I was only joking about the algorithm called "hashlife".
22:37:44 <shachaf> I never said anything about my nick.
22:37:53 <b_jonas> what... you and zzo38 are _both_ the rot13 of funpuns?
22:38:32 <b_jonas> I mean, some of the hackeso commands are a bit rigged, so I could imagine if the rot13 command claimed that zzo38 was the rot13 of funpuns
22:38:43 <kmc> `` echo shachaf | tr a-z n-za-m
22:38:55 <kmc> `` echo zzo38 | tr a-z n-za-m
22:39:08 <kmc> ``cat $(which ```)
22:39:08 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `cat: not found
22:39:15 <kmc> `` cat $(which ```)
22:39:15 <HackEso> /hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching ``' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file
22:39:19 <kmc> `` cat $(which '```')
22:39:38 <HackEso> cat: 'bin/```': No such file or directory
22:39:41 <HackEso> #!/bin/sh \ export LANG=C; exec bash -O extglob -c "$@" | rnooodl
22:40:48 <b_jonas> the first how many primes did you say? 27?
22:41:03 <kmc> `factor 42069
22:41:23 <kmc> `factor 42069247365
22:41:24 <HackEso> 42069247365: 3 5 2804616491
22:41:39 <salpynx> Hooloovo0: I haven't checked, but I imagine at the extremes there will be 'bad' CA rules that cannot exhibit interesting behaviour, like the trivial "all cells go to 0", and it's in some kind of balanced range where interesting interactions can take over.
22:42:33 <shachaf> is prop 13 a 'bad' CA rule
22:43:10 <shachaf> I guess "all cells go to 0" would be an even worse rule.
22:43:20 <salpynx> Studying trivially rubbish CA's is less interesting than what got me thinking about entropy in Star Wars :)
22:43:30 <Hooloovo0> right, there's been classifications of rules into categories like "dying", "exploding", "expanding" etc, and there's ways to guess what certain rule strings can do
22:43:59 <Hooloovo0> but there's a range where it's pretty unpredictable what adding one death/birth rule will do
22:45:56 <Hooloovo0> https://mathematrec.wordpress.com/2016/09/08/changing-the-rules-part-3/
23:09:38 <b_jonas> [ p:11111128263413556049728126571976941130032759962428
23:09:38 <j-bot> b_jonas: |limit error
23:09:38 <j-bot> b_jonas: | p:1.11111e49
23:09:41 <b_jonas> [ p:11111128263413556049728126571976941130032759962428x
23:09:41 <j-bot> b_jonas: |limit error
23:09:41 <j-bot> b_jonas: | p:11111128263413556049728126571976941130032759962428
23:09:46 <b_jonas> [ q:11111128263413556049728126571976941130032759962428x
23:09:47 <j-bot> b_jonas: 2 2 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 17 17 17 17 23 23 23 23 23
23:10:09 <b_jonas> int-e: ^ this is a simple first guess, I'm running a longer search
23:11:28 <kmc> that's a lot of numbers
23:12:15 <b_jonas> [ q:11111112020943532694674878126746501120000000000000
23:12:16 <j-bot> b_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 5 5 171193786852609
23:12:23 <b_jonas> [ q:11111112020943532694674878126746501120000000000000x
23:12:24 <j-bot> b_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 5 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11
23:16:43 <b_jonas> [ q:11111111900997990188240163285841258014887116800000x
23:16:44 <j-bot> b_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 7 7 19 19 23
23:22:23 -!- salpynx has quit (Remote host closed the connection).
23:28:07 -!- doesthiswork has quit (Quit: Leaving).
23:33:16 -!- Phantom__Hoover has joined.
23:36:03 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds).
23:52:26 <b_jonas> wait, this is silly, there's a way to make this search much more efficient
23:52:44 <b_jonas> [ q:11111111239428571047989046031440000000000000000000x NB. it printed this in the meantime
23:52:45 <j-bot> b_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 11 11 11 11 13 13 19
23:57:55 -!- Phantom__Hoover has quit (Ping timeout: 248 seconds).
00:07:46 <b_jonas> [ `:11111111112779092073579732177590915891200000000000x
00:07:47 <j-bot> b_jonas: `:11111111112779092073579732177590915891200000000000x
00:07:52 <b_jonas> [ q:11111111112779092073579732177590915891200000000000x NB. int-e
00:07:53 <j-bot> b_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 11 11 11 11 11 11 13 13 13 13 13 13 13 13 13 17 17 19 23 23 23
00:10:15 -!- nfd9001 has quit (Read error: Connection reset by peer).
00:12:01 -!- salpynx has joined.
00:13:24 <b_jonas> int-e: ^ that's the best if you use primes no greater than 23
00:13:34 <b_jonas> I'm running a longer search now
00:14:00 <b_jonas> well, as soon as I fix the bugs in my program
00:14:57 <b_jonas> [ q:11111111111269581656547160489766631945078430800000x
00:14:57 <j-bot> b_jonas: 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5 5 5 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 19 19 19 19 19 19 19 29
00:16:44 <b_jonas> int-e: may I ask how good a number you've got, that is, (the the best number you have minus (2**50-1)/9) rounded to two significant digits?
00:18:23 <b_jonas> Hooloovo0: http://esolangs.org/logs/2019-08-02.html#lY
00:20:39 <Hooloovo0> dammit I missed a discussion of TI-8x grayscale
00:22:32 <Hooloovo0> the display (or at least the controller) doesn't suport any more than black and white, you have to flicker the pixels fast enough that you trick the eye into seeing gray
00:23:40 <Hooloovo0> I too wrote a mandelbrot renderer in BASIC and it took a similarly long amount of time to render
00:23:58 <Hooloovo0> I wonder if you could flash like 8 pictures in BASIC to get flickerless grayscale...
00:25:33 <Hooloovo0> also sdcc for the z80 isn't super good
00:26:08 <Hooloovo0> the only compiled language which is half-decent forTI-z80 is AXE
00:29:29 <b_jonas> oh come on, stupid program, find a better solution
00:31:10 <b_jonas> [ 11111111111269581656547160489766631945078430800000 - (9<.@%~_1+10x^50)
00:31:11 <j-bot> b_jonas: 1.58473e38
00:31:14 <kmc> Hooloovo0: it wasn't flickerless
00:32:43 <b_jonas> [ 0j_2": 11111111111269581656547160489766631945078430800000x - (9<.@%~_1+10x^50)
00:33:23 <b_jonas> ok, I think I'll leave this running for a while
00:35:59 <b_jonas> [ q:11111111111161923559652900718659162521362304687500x
00:36:00 <j-bot> b_jonas: 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 11 13 13 13 17 17 17 17 17 17 23 31 59
00:36:21 <b_jonas> [ 0j_2": 11111111111161923559652900718659162521362304687500x - (9<.@%~_1+10x^50)
00:41:48 -!- douglas_ has joined.
00:42:53 -!- douglas_ has quit (Remote host closed the connection).
01:37:46 -!- FreeFull has quit.
01:54:26 -!- xkapastel has quit (Quit: Connection closed for inactivity).
01:57:31 <b_jonas> [ q:11111111111111167179461296463398102111816406250000x
01:57:32 <j-bot> b_jonas: 2 2 2 2 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 11 11 11 11 13 13 13 13 13 17 19 19 23 23 23 23 23 23 23 23 53 61 73
01:57:35 -!- oerjan has joined.
01:57:55 <b_jonas> [ 0j2": 11111111111111167179461296463398102111816406250000x - (9<.@%~_1+10x^50) NB. int-e
01:57:56 <j-bot> b_jonas: 56068350185352286991000705295138889.00
01:58:06 <b_jonas> [ 0j_2": 11111111111111167179461296463398102111816406250000x - (9<.@%~_1+10x^50)
02:37:11 -!- rodgort has quit (Quit: Leaving).
02:46:42 -!- rodgort has joined.
02:49:42 -!- oerjan has quit (Quit: leaving).
02:57:30 -!- rodgort has quit (Ping timeout: 272 seconds).
02:58:28 -!- rodgort has joined.
03:16:29 <Hooloovo0> what kind of optimization algorithm are you using b_jonas?
03:21:48 <esowiki> [[Adjudicated Blind Collaborative Design Esolang Factory]] M https://esolangs.org/w/index.php?diff=65368&oldid=65364 * A * (+18) At least this is created in 2006.
04:37:59 <esowiki> [[Adjudicated Blind Collaborative Design Esolang Factory]] M https://esolangs.org/w/index.php?diff=65369&oldid=65368 * Salpynx * (-18) Undo revision 65368 by [[Special:Contributions/A|A]] ([[User talk:A|talk]]) Yes, but [[Category:Years]] "All languages should belong to exactly one of these categories, and other articles should not."
06:14:03 <int-e> b_jonas: that's pretty good
06:14:19 <int-e> b_jonas: 11111111111111111400018389711831195436675393750000 is the best I've got
06:15:20 <int-e> 103-smooth overapproximations of 11111111111111111111111111111111111111111111111111
06:17:27 <int-e> A four-letter word.
06:17:29 <shachaf> I'm looking for clues in the text and not seeing them.
06:17:49 <int-e> @google "B-smooth"
06:17:50 <lambdabot> https://en.wikipedia.org/wiki/Smooth_number
06:18:19 <shachaf> Why would you use the word "smooth" to talk about natural numbers? Come on.
06:18:30 * kmc is a smooth operator
06:18:53 <int-e> shachaf: because we also use the word "round" for natural numbers
06:19:25 <int-e> and round numbers tend to be smooth
06:19:31 <shachaf> you gotta tell me if you're a c^op
06:19:51 <kmc> is it opposite day
06:20:42 <int-e> > 2^15*3^10*7^7 -- smooth, not round
06:22:11 <Hooloovo0> it's not round in base 10 because it doesn't have any 5s
06:22:13 <int-e> b_jonas: oh, actually 11111111111111111215673466122483207680856045806875 is the best I have.
06:22:52 <kmc> smooth buddy
06:43:32 <shachaf> I wonder whether an ILP solver would be good at this kind of thing.
06:44:06 <shachaf> I guess probably not very?
06:50:45 <Hooloovo0> I looked into approximate subset sum solvers but they mostly suck
07:08:59 <Taneb> Girl Genius theory: the entire thing's going to be a shaggy dog story, with Agatha, Gil, and Tarvek being unable to claim their titles due to having died in Castle Heterodyne during the Si Vales Valeo procedure
07:09:47 <shachaf> can sat solvers use a trick like that somehow
07:15:48 -!- john_metcalf has joined.
07:22:30 <int-e> shachaf: Uh, they are?
07:23:00 <int-e> You only have two values. You cut off branches that are definitely false.
07:23:25 <int-e> Unit propagation is a combined branch & bound.
07:23:39 <int-e> It's all so degenerated though that the concept hardly fits.
07:26:59 <shachaf> Do SMT solvers use it more directly?
07:27:08 <shachaf> Maybe when used for optimization rather than satisfiability.
07:27:21 <shachaf> Maybe that's pretty far from SAT territory.
07:29:56 <int-e> I don't know whether the LIA solvers prefer gomory cuts or branch&bound.
07:30:20 <int-e> (LIA = linear integer arithmetic)
07:31:22 <shachaf> Hmm, maybe lookahead SAT solvers are a bit closer to the kind of thing I was thinking of.
07:31:40 <shachaf> It's not really a bound, though.
07:34:10 <b_jonas> [ 0j_2": (9<.@%~_1+10x^50) -~ 11111111111111111400018389711831195436675393750000
07:34:13 <int-e> afaiui lookahead is just another heuristic for selecting promising decisions.
07:34:34 <b_jonas> [ 0j_2": (9<.@%~_1+10x^50) -~ 11111111111111111215673466122483207680856045806875x
07:34:43 <b_jonas> [ q: 11111111111111111215673466122483207680856045806875x
07:34:43 <j-bot> b_jonas: 3 3 3 3 3 5 5 5 5 7 7 7 7 7 11 11 11 11 13 13 13 13 13 13 13 13 17 19 31 37 37 37 37 43 47 47 47 67 67 97 97 103
07:34:58 <shachaf> Yes, it's a different thing.
07:35:19 <b_jonas> I'll try to run this search with different parameters on a faster machine
07:37:47 <b_jonas> shachaf: http://esolangs.org/logs/2019-08-02.html#lY
07:40:57 <int-e> b_jonas: http://paste.debian.net/1094920/ has some more results and runtime on a i7-6850K (3.6GHz, single-threaded, written in Haskell, exact arbitrary precision integer arithmetic)
07:42:06 <b_jonas> int-e: I don't want to look at spoilers yet
07:42:15 <int-e> b_jonas: it's only numbers and runtimes
07:43:15 <int-e> (And spoils the fact that I have tried two different approaches... I don't really think that's a spoiler :) )
07:51:08 -!- b_jonas has quit (Quit: leaving).
08:12:42 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
08:14:07 -!- Lord_of_Life has joined.
08:14:24 -!- Phantom__Hoover has joined.
08:26:35 <shachaf> Is "rep ret" necessary only when the ret is on an even address?
08:26:43 <shachaf> Also is it necessary at all nowadays or only for old AMD CPUs?
08:26:52 <shachaf> Or maybe I mean odd. Whichever one I mean.
08:29:11 <int-e> "Continuing in the following generation of AMD CPUs, Bulldozer, we see that any advice regarding ret has disappeared from the optimization guide."
08:29:23 <int-e> according to http://repzret.org/p/repzret/
08:29:55 <int-e> Obviously the AMD manuals are the authorative source.
08:31:15 <shachaf> Hmm, I generally only look at the Intel manuals. I guess I should read the AMD ones too.
08:31:23 <shachaf> (Not that I look at the optimization guide hardly ever.)
08:31:45 <shachaf> when are people going to scrap x86 twh hand
08:32:00 -!- cpressey has joined.
08:32:20 <int-e> maybe when Intel goes out of business.
08:33:39 <shachaf> I imagine Intel could do pretty well at other architectures if it came to it?
08:34:19 <int-e> but why would they switch away from x86
08:35:00 <shachaf> I think "the world switching away from x86" is more likely than "Intel going out of business"
08:35:13 <shachaf> Though maybe not. Companies can be ephemeral.
08:35:23 <int-e> I'll believe it when it happens.
08:35:44 <shachaf> The world's most popular operating system is already almost exclusively ARM.
08:38:05 <int-e> \any architecture with LLVM support is viable these days.
08:38:27 <int-e> So the popularity of ARM is still no reason for Intel to switch away from x86.
08:38:39 <shachaf> If I write a compiler should I target LLVM?
08:39:51 <shachaf> Hmm, there were a few things where I wasn't sure LLVM could really do the things I want.
08:40:10 <myname> x86 is still huge for gaming
08:41:54 <shachaf> Are there any standards like calling conventions or whatever for software that wants to be sure to avoid stack overflow?
08:42:04 <shachaf> For example, a pointer to the end of the stack that it can check.
08:44:41 <shachaf> Presumably programs would like to fail better than a SEGV.
08:45:10 <int-e> Meh you're so hard to please.
08:45:36 <shachaf> For example to guarantee success before starting a computation rather than crashing in the middle.
08:45:58 <shachaf> Recursion is the only case where you might need a dynamic check.
08:48:59 <shachaf> Also, are there any clues for why the REX bits are called W R X B?
08:48:59 <cpressey> shachaf: You want to be able to call code from external libraries and you want to be sure to avoid stack overflow?
08:49:08 -!- wob_jonas has joined.
08:49:28 <shachaf> cpressey: Ideally I'd like this to work across library boundaries, yes.
08:51:27 <cpressey> shachaf: You do seem to be asking a lot
08:53:31 <wob_jonas> shachaf: I don't know about the ret instructions specifically, but you should look them up in the optimization manuals for your target cpu at "https://software.intel.com/en-us/articles/intel-sdm" and AMD, and in Agner's optimization manuals at "http://www.agner.org/optimize/" if you care
08:54:17 <shachaf> cpressey: I guess my wisdom entry is correct tonight.
08:54:20 <cpressey> shachaf: OK, so I have this computation, and in the middle it loads a shared object and calls the symbol `foo` in it. You want to guarantee this will not overflow the stack. You want this guarantee *before starting it*.
08:54:41 <cpressey> That's all I mean by asking a lot
08:55:07 <shachaf> cpressey: If all your functions are non-recursive and non-indirect, this can just be in the type of foo.
08:55:27 <shachaf> I guess it's a problem with shared libraries but shared libraries aren't so great in the first place.
08:55:39 <cpressey> If you have control over foo and access to information about it in the compiler, just track the stack size in the compiler, you don't need dynamic checks
08:55:52 <cpressey> If you don't have control over foo, all bets are off
08:56:01 <shachaf> You need something like dynamic checks if you want to support recursion.
08:56:38 <cpressey> OK so you have a general recursive function and you want a guarantee *before calling it* that it will terminate
08:56:38 <shachaf> Besides, you at least need a dynamic check at program startup or something.
08:56:49 <shachaf> No, I want it to be able to fail gracefully.
08:57:04 <shachaf> For example maybe I only want to support bounded recursion where it can decide on the bound up-front.
08:57:59 <shachaf> It's true that I hadn't thought carefully about dynamic libraries, they're kind of tricky because they're all indirect jumps.
08:58:32 <cpressey> Then your "calling convention" is to keep track of the recursion count and "fail gracefully" (however you define that) if the call would mean the count is exceeded
08:58:33 <shachaf> You can have a standard calling convention where dynamic calls are guaranteed 8kB or whatever of stack space, and if they want more than that they can do a dynamic check.
08:58:52 <shachaf> Right. There are a lot of things that are more graceful than SEGV.
08:59:23 <Taneb> shachaf: that would make it tricky to have dynamic calls which make dynamic calls
08:59:24 <wob_jonas> "why the REX bits are called W R X B" => R for "register" because it extends the field that usually specifies a register operand (though sometimes chooses between instrs), X for "index" because it extends the field that gives the (scaled) index register for memory operands, B for "base" because it may extends the field that gives the base register
08:59:25 <wob_jonas> (though may also extend the other register operand for reg-reg instructions), and W for "word" because it can determine word size between 32 and 64 bits
08:59:45 -!- relrod has quit (Ping timeout: 268 seconds).
09:00:00 <wob_jonas> of course sometimes some of those mnemonics are meaningless, because in some instructions some of the bits are ignored or must be zero
09:00:03 <shachaf> Taneb: Hmm, maybe. How frequent is that?
09:00:28 -!- relrod has joined.
09:00:30 -!- relrod has quit (Changing host).
09:00:30 -!- relrod has joined.
09:01:28 <shachaf> I think dynamic linking is mostly a bad idea for many reasons, but this one can go on the list.
09:01:47 <wob_jonas> I think dynamic linking is mostly a good idea
09:02:44 <wob_jonas> imagine having to reinstall every fricking executable on my debian whenever some bug is fixed in one of the frequently used libraries that is currently a shared library
09:03:12 <wob_jonas> you may still want to link some things statically of course
09:03:33 <shachaf> What if the bug fix requires an API change?
09:04:42 <cpressey> That's quite rare, in my experience
09:06:21 <shachaf> I feel like you're describing an infrequent case with a relatively small benefit, though I don't know.
09:06:28 <int-e> shachaf: You really have to convince people... C/C++ users foremost... that failing more gracefully than producing a segmentation fault is actually desirable and useful. For that, you have to figure out what that more graceful way would be, especially in the context of C (C++ has exceptions, arguably that makes it easier to do something useful.)
09:06:32 <shachaf> This only really matters for security bugs probably.
09:06:55 <shachaf> int-e: Returning an error?
09:07:08 <int-e> returning an error from where?
09:07:18 <shachaf> The call that ran out of stack space.
09:07:25 <int-e> I'm invoking a void foo()
09:07:35 <shachaf> If foo can fail its return type shouldn't be void.
09:07:59 <int-e> I don't think you'll convince anybody that way.
09:08:00 <cpressey> If you "fail gracefully" remember to clean up all the resources you allocated... and hope the cleanup code doesn't also need to "fail gracefully"
09:08:16 <shachaf> This sort of thing seems like a basic requirement for reliable software?
09:08:28 <int-e> Nobody's going to go over millions of lines of code base with void functions and change them.
09:08:36 <shachaf> Oh, I only mean for new programs.
09:08:41 <int-e> (should write billions)
09:08:52 <wob_jonas> no, it really depends on what software it is
09:08:56 <shachaf> Existing software can keep using guard pages if you want, I just want my programs to be reliable.
09:09:12 <wob_jonas> in most cases, in programs I write, most errors don't have to be handled gracefully, I don't have to clean up anything, just print an error message and exit
09:09:30 <wob_jonas> then I find the very few actual errors that will happen often, and handle those
09:09:30 <int-e> Well for your own programming language you can define your own ABI.
09:09:43 <wob_jonas> this is because I mostly write programs for research, not for production
09:09:45 <shachaf> cpressey: I mean, sure, these are problems, but they're problems you already have to solve to write reliable and resilient software.
09:09:55 <shachaf> int-e: I will! I'm just wondering whether this exists anywhere.
09:10:00 <int-e> (Did you know that LLVM knows about GHC's calling convention?)
09:10:00 <wob_jonas> so only I run them, and I will edit and rerun them when they hit a case that I don't handle
09:10:13 <wob_jonas> it would take four times as long if I tried to handle every possible error gracefully
09:10:23 <cpressey> shachaf: Erlang promotes writing reliable and resilient software by *expecting* that processes will sometimes crash
09:10:38 <shachaf> int-e: Here's an example of a bug that came from not having clearly defined stack bounds: https://marcan.st/2017/12/debugging-an-evil-go-runtime-bug/
09:10:47 <int-e> (I didn't up to a short while ago. I have not checked the details.)
09:10:51 <wob_jonas> and most of those errors are either detecting internal logic bugs in my program, or warning me that the input has something that I thought it didn't have and so I don't have code to read it properly
09:10:59 <cpressey> That seems far simpler that trying to guess all the ways they might crash and all the cases you need to would need to handle to make them "fail gracefully"
09:11:00 <shachaf> cpressey: But it doesn't expect individual function calls to crash.
09:11:20 <shachaf> Certainly the thing you're talking about is important for building a large resilient system.
09:11:34 <shachaf> But it's not going to be a fractal system where you expect every instruction to potentially fail.
09:11:34 <wob_jonas> cpressey: exactly, which is why I don't have to do cleanup for the errors in particularly, because I expect they can fail in ways that I don't expect so whatever that causes I have to be able to clean up too
09:11:37 <cpressey> shachaf: Individual function calls can raise an exception, which, if unhandled, causes the process to crash
09:11:52 <shachaf> Exceptions are almost certainly a bad idea for reliable software.
09:12:04 <shachaf> (And probably for other software?)
09:12:16 <wob_jonas> so I store the data on the file system in such a way that I can recover from the state I can get from a crashed process or power failure
09:12:38 <wob_jonas> shachaf: only _handling_ an exception is usually a bad idea
09:12:38 <int-e> shachaf: exceptions solve the API problem presented by functions that cannot return an error condition.
09:12:43 <shachaf> int-e: I did know that they had something though not the exact details. I was under the impression it was some small subset of the GHC calling convention.
09:12:50 <wob_jonas> raising an "exception" that's actually a fatal error that you can't catch is not a bad idea
09:13:18 <shachaf> int-e: They don't, because if you want your software to be reliable you need to be able to reason about all the ways control flow could go.
09:13:37 <shachaf> So "void foo();" only makes the control flow harder to see.
09:13:46 <int-e> shachaf: I really don't know details. I was surprised to find that LLVM knows anything about GHC at all.
09:13:58 <cpressey> shachaf: I can always walk into the server room and turn the computer off. How do you reason about that "flow control"?
09:14:06 <int-e> (It does make sense. But I didn't expect it.)
09:14:15 <cpressey> shachaf: Maybe more to the point, you need a definition of "reliable".
09:14:50 <int-e> shachaf: Arguably the proper way to handle stack overflows is to enlarge the stack.
09:15:41 <int-e> And the proper way to handle OOM is to pause the program until an engineer adds more memory to the computer.
09:15:42 <shachaf> I mean, you could say it's true forever, but now you need to handle out-of-memory errors on every function call.
09:15:55 <shachaf> What if your computer is in space or something?
09:16:51 <cpressey> shachaf: I've heard of aerospace engineering teams being forbidden to use recursive code.
09:16:54 <int-e> I suppose for embedded systems you basically disallow recursion.
09:17:15 <cpressey> And if you can't recurse, you don't even need a stack, really
09:17:42 <int-e> Or, at least, you can statically determine how much of it you'll need.
09:18:13 <int-e> shachaf: how do you fail gracefully in that context?
09:18:26 <int-e> shachaf: space crafts
09:18:34 <shachaf> Oh, you probably disallow recursion.
09:19:21 <int-e> I guess you have non-mission-critical stuff which you can afford to process on a best effort basis.
09:20:57 <shachaf> It seems to me like it's easy to turn a system that's reliable and predictable into one that isn't (e.g. by adding useful features), but it's impossible to go the other way.
09:21:50 <shachaf> I certainly think it's reasonable for a program to want to allocate all its memory up front so it can avoid malloc errors.
09:22:02 <shachaf> (Not that that's realistic on Linux.)
09:22:54 <cpressey> shachaf: I was serious when I said you should define "reliable".
09:23:17 <cpressey> It's much easier to hit an explicitly identified target.
09:24:13 <shachaf> I don't have a comprehensive definition or anything. I guess there are things like https://en.wikipedia.org/wiki/MISRA_C
09:24:48 <shachaf> It seems easy enough to point out a particular way that software could fail and say that eliminating it would make it more reliable.
09:25:14 <cpressey> shachaf: Are you making up a new language for this, or an existing one, or slightly modifying an existing one?
09:25:59 <shachaf> Let's say making up a new language.
09:26:05 <shachaf> But also wondering about existing systems?
09:32:29 <cpressey> If you're making up a new language then you have a lot more freedom to design it to try to solve some of the problems at the language level.
09:33:40 <shachaf> I'm thinking: End of stack pointer is stored somewhere and available for checking for dynamic cases.
09:33:52 <cpressey> To go back to what you said about bounded recursion, you could make the language only allow bounded recursion, instead of checking if a function exceeds some recursion bound at runtime
09:34:06 <shachaf> Function types are annotated with maximum stack usage, so if the call graph is acyclic everything can be solved statically.
09:34:35 <shachaf> Only allowing bounded recursion seems like a pretty strong constraint.
09:35:12 <shachaf> I mean, especially if it has to be statically bounded (rather than e.g. bounded by an argument).
09:35:22 <cpressey> So you want to allow unbounded recursion but you also want it to be reliable
09:35:53 <int-e> He wants a Turing Machine... well okay... a RAM machine.
09:36:43 <HackEso> Queen Shachaf of the Dawn sprø som selleri and cosplays Nepeta Leijon on weekends. He hates bell peppers with a passion. He doesn't know when to stop asking questions. We don't like this.
09:36:55 <int-e> Queen/He. Okay, mystery solved.
09:37:33 <shachaf> I want to allow programmers to do what they want, and make it easy to do the reasonable thing.
09:38:27 <shachaf> I think dynamic checks are pretty reasonable. Say you have a recursive function to search a tree or something, and you run out of stack space. You return an error. That seems fine to me?
09:38:55 <HackEso> 11837:2019-06-17 <b_jonäs> `` perl -pi -e\'s/Bond\\K/, Queen Elizabeth the first/\' wisdom/p*aneb* \ 9872:2016-12-05 <boil̈y> slwd shachaf//s/^/Queen / \ 7390:2016-04-14 <hppavilion[1̈]> le/rn victoria/Queen Victoria is the most victorious queen the world has ever known, even having won at the not dying contest.
09:40:34 <shachaf> All the things I'm saying are kind of exploratory, but this is my general attitude. I don't want to make it impossible to avoid these things, I just want the mechanism to be available.
09:41:11 <shachaf> perl -pi -e presumably makes perl generate a position-independent executable
09:41:51 <wob_jonas> shachaf: presumably, since this is x86_64 so executablesa re position-independent by default
09:44:07 <shachaf> But perl doesn't normally generate an executable in the first place.
09:45:07 <shachaf> I don't know why I'm a queen but I guess I'll take it.
09:46:14 <HackEso> wisdom/people who taneb is not
09:46:28 <int-e> shachaf: seems you have fungot to thank for that one
09:46:29 <shachaf> `? people who taneb is not
09:46:30 <HackEso> elliott, a rabbi, Mark Zuckerberg, James Bond, Queen Elizabeth the first. Pending approval: Shigeru Miyamoto.
09:46:54 <int-e> shachaf: https://esolangs.org/logs/2016-12-05.html#lRl
09:46:56 <shachaf> Taneb: Which rabbi are you not?
09:47:35 <Taneb> shachaf: the one from Fiddler on the Roof
09:47:50 <Taneb> Shouldn't you be in bed right now
09:48:21 <shachaf> But a few days ago I sang some of the songs from it, in Bodega Bay.
09:48:22 <Taneb> Neither have I, but I was once in a production of it
09:48:27 <HackEso> 992) <Taneb> I've also pretended to be Queen Elizabeth the first, but that was a desperate plea for attention
09:48:30 <Taneb> I played the rabbi
09:48:57 <Taneb> wob_jonas: I can picture exactly where I was when I pretended to be Queen Elizabeth the first
09:49:02 <HackEso> 1333) <shachaf> `unidecode ⧸🙼 <HackEso> [U+29F8 BIG SOLIDUS] [U+1F67C VERY HEAVY SOLIDUS] <shachaf> it is with a very heavy solidus that i write to inform you that unicode has too many code points
09:49:38 <Taneb> Does `quote special case numbers? or does it just find all the quotes that mention the number
09:49:49 <HackEso> 1) <Slereah> EgoBot just opened a chat session with me to say "bork bork bork"
09:50:19 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `which: not found
09:50:26 <HackEso> #!/bin/sh \ allquotes | if [ "$1" ]; then \ if expr "$1" + 0 >/dev/null 2>&1; then \ sed "$1q;d" \ else \ grep -P -i -- "$1" \ fi \ else shuf --random-source=/dev/urandom -n 1; fi
09:51:10 <shachaf> What's shuf's normal random-source?
09:51:12 <Taneb> Yeah, that looks like it's special casing numbers
09:51:39 <shachaf> `` allquotes | strace -fo tmp/OUT shuf -n 1
09:51:39 <HackEso> 326) <Sgeo> Hmm. I guess it's nearby GRBs that would be problematic? <Phantom_Hoover> Sgeo, if by 'problematic' you mean 'what's that in the AAAAAAAAARRRRRGGGGHHHH'.
09:51:42 <HackEso> https://hack.esolangs.org/tmp/OUT
09:52:18 <HackEso> 1/1:9771:2016-11-24 <oerjän> sled bin/quote//s,shuf,shuf --random-source=/dev/urandom, \ 978:2012-12-09 <Gregör> revert \ 977:2012-12-09 <shachäf> cp bin/quote bin/realquote; echo -n $'#!/bin/sh\nsleep 1\nrealquote "$@"\n' > bin/quote \ 0:2012-02-16 Initïal import.
09:52:45 <int-e> hah. perhaps there was an older version of `shuf` that used /dev/random instead?
09:53:12 <shachaf> Taneb: I heard there are questions that cross your eyes when posed. Is that true?
09:54:44 <shachaf> Looking at the logs from that time, oerjan was spreading false rumors about /dev/urandom.
09:54:52 <Taneb> shachaf: I believe so. "Can you cross your eyes?" might make me cross my eyes when posed
09:55:08 <HackEso> 124) <alise> I love logic, especially the part where it makes no sense.
09:55:19 <HackEso> 64) Note that quote number 124 is not actually true.
09:56:09 <HackEso> 124) <alise> I love logic, especially the part where it makes no sense.
09:56:12 <HackEso> 124) <alise> I love logic, especially the part where it makes no sense.
09:56:14 <HackEso> 141) <oklopol> comex: what? <oklopol> *vorpal <oklopol> comex: hi, tab-complete completed c to comex instead of Vorpal, dunno why \ 237) <oklopol> okay see in my head it went, you send from your other number smth like "i'd certainly like to see you in those pink panties again" and she's like "WHAT?!? Sgeo took a pic?!?!?! that FUCKING PIG"
09:56:34 <HackEso> 124) <alise> I love logic, especially the part where it makes no sense.
09:57:45 -!- atslash has joined.
09:58:41 <shachaf> I guess dynamic libraries calling other dynamic libraries is actually reasonably common.
09:59:15 <shachaf> If the whole system was built with this thing in mind, you could maybe do something fancy during relocation.
09:59:20 <shachaf> But that's almost certainly a bad idea.
09:59:35 <shachaf> Instead you should just ban dynamic libraries.
10:00:34 <shachaf> `fetch http://slbkbs.org/tmp/out.a tmp/out.a
10:00:39 <HackEso> http:/slbkbs.org/tmp/out.a: No such file or directory
10:00:45 <shachaf> `fetch tmp/out.a http://slbkbs.org/tmp/out.a
10:00:47 <HackEso> 2019-08-08 10:00:46 URL:http://slbkbs.org/tmp/out.a [923/923] -> "tmp/out.a" [1]
10:00:55 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: /hackenv/tmp/out.a: Permission denied \ /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: /hackenv/tmp/out.a: cannot execute: Permission denied
10:01:33 <HackEso> tmp/out.a: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped
10:02:27 <wob_jonas> shachaf: the system does do a lot of fancy things during relocation already. resolves strong symbols overriding weak symbols, has indirect function symbols that are resolved everywhere the first time they're called, etc
10:03:07 <shachaf> I want to generate a program that uses dynamic libraries, because that's the only way you can make software nowadays apparently.
10:03:17 <shachaf> So I just want it to do the minimum possible.
10:03:34 <wob_jonas> shachaf: you know you can mix and match stuff, link some libraries statically and some dynamically
10:03:48 <shachaf> Yes. But some things you have to link dynamically.
10:04:36 <shachaf> On Linux I think it's pretty much only OpenGL and Xlib, and their dependencies such as libc.
10:05:20 <shachaf> On Windows system calls are only available via dynamic linking.
10:14:52 <shachaf> By the way, one reason I care about this stack usage thing is that it's relevant for implementing efficient coroutines.
10:18:41 <wob_jonas> shachaf: you probably already know this, but ais523 is the person to ask about this
10:19:27 <shachaf> Except for the part where ais523 isn't here right now.
10:24:36 <cpressey> In a desktop context, if a program starts using excessive amounts of stack space, what I'd like to see is the OS staying responsive, so that I can find the process and kill it.
10:25:13 <shachaf> Yes, that's a good OS feature.
10:25:22 <shachaf> It's pretty ridiculous how broken things are.
10:25:23 <cpressey> The program shouldn't be responsible for deciding what "excessive amounts" are, so it's an OS-domain thing.
10:27:27 <wob_jonas> cpressey: you can set a soft ulimit, in which case the program gets a signal
10:27:49 <shachaf> That seems like a point about memory consumption in general (of which "the stack" should only be a tiny fraction).
10:28:05 <shachaf> Of course stacks are just regular memory.
10:28:14 <wob_jonas> shachaf: there's a specific setrlimit for stack space
10:29:17 <shachaf> Sure, but you can put your stack pointer wherever you want.
10:30:07 <shachaf> The limit only applies to the "process stack" and not thread stacks anyway, I think.
10:38:34 -!- Phantom__Hoover has quit (Ping timeout: 272 seconds).
10:40:05 -!- john_metcalf has quit (Quit: http://corewar.co.uk).
10:42:27 <int-e> salpynx: https://en.wikipedia.org/w/index.php?title=Iota_and_Jot&diff=909854762&oldid=909568636 -- I didn't know that "comprised of" was so difficult :-/
10:46:40 <shachaf> I don't know what it means to compose sequences, so that seems less clear to me.
10:49:23 <int-e> https://en.wikipedia.org/wiki/User:Giraffedata/comprised_of <-- that user is on a vendetta against this usage.
10:50:06 <cpressey> Using that word correctly always sounds wrong to me, so I just avoid it entirely
10:50:28 <int-e> But the new phrasing isn't accurate either.
10:51:12 <shachaf> It's true that "comprise" is more often used in the reverse sense.
10:52:37 * int-e rephrases to "consisting of"
10:52:45 <wob_jonas> shachaf: frankly I don't know how it works, but my guess is that it applies to the total of all stacks
10:53:01 <wob_jonas> the kernel knows which mappings are stacks because they're set to auto-grow downwards
10:53:07 <shachaf> That would certainly be unexpected to me.
10:53:21 <shachaf> What does it mean for stacks to auto-grow downward?
10:53:35 <shachaf> Compared to memory which is mapped and gets faulted in on demand.
10:53:41 <shachaf> Do you mean stack memory gets mapped on demand?
10:53:54 <wob_jonas> that if you write in a part near the bottom of the stack, its size is extended
10:53:58 <wob_jonas> but I might be completely wrong here
10:54:15 <wob_jonas> maybe that applies only to x86_32, where the address space is sparse
10:54:48 <shachaf> If it's tight that might mean people map memory near the stack, in which case you're saying the auto-growing stops?
10:55:00 <shachaf> My impression was that a fixed amount like 8MB was mapped at startup and that's that.
10:55:51 <wob_jonas> shachaf: yes, but the mappings are placed in the address space a semi-smart way so that won't happen often
10:57:10 <wob_jonas> shachaf: there's a MMAP_GROWSDOWN flag of mmap for autoextending, but it's possible that it's not actually used for stacks
10:57:19 <wob_jonas> http://man7.org/linux/man-pages/man2/mmap.2.html
10:57:51 <wob_jonas> "Touching an address in the "guard" page below the mapping will cause the mapping to grow by a page. This growth can be repeated until the mapping grows to within a page of the high end of the next lower mapping, at which point touching the "guard" page will result in a SIGSEGV signal."
10:58:08 <cpressey> wob_jonas: It's hard to imagine what that would be used for *besides* stacks
10:58:22 <wob_jonas> cpressey: the manpage explicitly says that it's for stacks
10:58:36 <wob_jonas> but it's possible that it's not used at all these days,
10:58:45 <wob_jonas> or only on certain old architectures
10:58:52 <wob_jonas> or old types of executables or somethin
10:59:24 <HackEso> 7fbfb9a000-7fbfbbb000 rw-p 00000000 00:00 0 [stack]
10:59:36 <wob_jonas> the flags field is 0, so it doesn't actually grow down
11:00:13 <wob_jonas> do we have a typical libc-based x86_32 executable somewhere on hackeso so we can test how that behaves?
11:03:26 <cpressey> "After some tests on an x84_64 Debian machine, I've found that the stack grows without any system call (according to strace)."
11:03:38 <cpressey> https://unix.stackexchange.com/questions/145557/how-does-stack-allocation-work-in-linux
11:04:30 <wob_jonas> sure, but does it grow the mapping, or does it just fault in MAP_NORESERVE pages?
11:05:09 <wob_jonas> ``` perl -e print(0x7fbfb9a000-0x7fbfbbb000)
11:05:09 <HackEso> bash: -c: line 0: syntax error near unexpected token `(' \ bash: -c: line 0: `perl -e print(0x7fbfb9a000-0x7fbfbbb000)'
11:05:16 <wob_jonas> ``` perl -e 'print(0x7fbfb9a000-0x7fbfbbb000)'
11:07:24 <cpressey> wob_jonas: Thinking about it, it's hard to imagine the kernel implementing MAP_GROWSDOWN in a way that doesn't involve a fault. Well, maybe on some hardware, but...?
11:07:52 <cpressey> I guess it's there to give the kernel the freedom to implement it one way or another, depending on hardware?
11:08:31 <shachaf> It seems like another bizarre way to make things unpredictable.
11:08:33 <cpressey> And, the flag should still be shown in /proc/'s view of it?
11:08:41 <shachaf> What if someone accidentally maps pages near the current end of the stack?
11:08:51 <wob_jonas> cpressey: of course it involves a page fault. everything involves a page fault, including allocating mapped pages that weren't used before, or bringing pages in from swap, or just the kernel doing whatever at whim. but the page fault is handled in the kernel, it never raises a signal visible to the process.
11:09:21 <wob_jonas> the process can technically tell whether a page is mapped, but it should not do that except for performance optimizations or debugging
11:09:32 <wob_jonas> faulting pages in is mostly invisible in small amounts
11:09:59 <wob_jonas> obviously it's visible when firefox fills up all my ram and my hard disk starts whirring and the whole system freezes to a halt
11:10:04 <wob_jonas> but extending the swap a little won't involve that
11:10:09 <int-e> hmm that is fairly round, 128k plus 4k
11:11:11 <wob_jonas> shachaf => they won't, because the kernel and libc has heuristics and knobs in sysctl for what address range to map things at, so a single-threaded stack is mapped in places where you can't *accidentally* map something below (you can map something deliberately, but that's your problem),
11:11:41 <cpressey> wob_jonas: Well, trying to answer shachaf's question, "What does it mean for stacks to auto-grow downward? Compared to memory which is mapped and gets faulted in on demand." -- it does get faulted in on demand, by the kernel, transparent to the userland process
11:11:46 <shachaf> wob_jonas: OK, I tested it and it does indeed grow.
11:11:47 <wob_jonas> for multi-threaded it's the problem of the thread library and you may have to specify a hint for the stack space you need if you are starting LOTS of threads, but then you shouldn't start lots of threads
11:12:31 <wob_jonas> anyway, on x86_32 this made sense because the address space was small, and some processes used lots of stack while others used lots of heap
11:12:43 <cpressey> I could imagine a userspace implementation of growing the stack, that the compiler handles via signals or something, but... why?
11:13:16 <wob_jonas> on x86_64 right now it's less important, because we have significantly less RAM than address space, but this may change in our lifetime
11:13:46 <wob_jonas> cpressey: yes, you can do such a stupid thing. there is an interface for handling SIGSEGV gracefully, but it's hard to get right and good only for silly tricks
11:14:33 <wob_jonas> the kernel gives the process all the info about the segfault that it knows in the sa_siginfo or whatever that's called, so the process can know where the fault is
11:14:58 <wob_jonas> you can implement user-space swapping that way, or unusual garbage collectors
11:15:25 <cpressey> Tbh, I hate memory mapping and signals. As abstractions. They're ugly. They're performant, so I see why they're used, but that doesn't mean I have to think they're pleasant.
11:15:43 <wob_jonas> but it's a magnitude more dangerous than just the usual cases when you try to do something nontrivial in a signal handler
11:16:06 <wob_jonas> cpressey: yes, which is why we usually don't do esoteric tricks like this unless they're really needed
11:16:58 <salpynx> int-e: whoa, I thought that edit was a minor phrasing maybe-improvement, but it comes with an essay and it's own project? I'm going to have to read the essay and see if I agree with their point, I have no strong opinion. Correct logic relating to the subject is more important.
11:17:04 <shachaf> `` echo $'#include <stdio.h>\n#include <string.h>\n#include <alloca.h>\nchar buf[1024]; void print_stack() { FILE *f = fopen("/proc/self/maps", "r"); while (fgets(buf, sizeof buf, f) != 0) { if (strstr(buf, "[stack]") != 0) { printf("%s", buf); break; } } fclose(f); } int main(int argc, char **argv) { while (1) { print_stack(); alloca(1024); } return 0; }' >/tmp/f.c;gcc -o /tmp/f /tmp/f.c;/tmp/f>tmp/OUT
11:17:05 <wob_jonas> we just let the kernel guys handle swapping, whether it's swapping to disk, to compressed RAM, or (sigh) to network
11:17:07 <HackEso> /hackenv/bin/`: line 5: 63 Segmentation fault /tmp/f > tmp/OUT
11:17:11 <HackEso> https://hack.esolangs.org/tmp/OUT
11:17:38 <shachaf> ``` perl -e 'print(0x7fbf0d2000-0x7fbf8cf000)'
11:17:58 <shachaf> 8675309 bytes is the maximum. Figures.
11:18:07 <cpressey> I'll stick to writing interpreters in Haskell where I can pretend everything is just math. Beautiful, beautiful math. Which I am bad at.
11:18:15 <wob_jonas> shachaf: I think that may depend on sysctl stuff and perhaps setrlimit
11:18:43 <shachaf> Nope, it's always that number.
11:18:59 <wob_jonas> cpressey: yeah, that aligns with the general good advise to not optimize prematurely
11:19:22 <shachaf> I mean, depends on what you're doing.
11:19:26 <wob_jonas> cpressey: but this is #esoteric so we sometimes talk about silly optimizations
11:20:29 <wob_jonas> shachaf: dude, just last evening I made a program to search solutions to int-e's problem in python, even though that means that the integers take like 128 bytes of memory rather than just the 24 or 32 bytes that I would need in C++
11:20:54 <wob_jonas> but I did at least get preliminary results, and know what my inner loop is and what I would have to rewrite if I wanted to do it better
11:21:10 <Taneb> wob_jonas: I presume that int-e's problem is something other than "someone edited my Wikipedia edit to not use 'comprised of'"
11:21:31 <wob_jonas> Taneb: http://esolangs.org/logs/2019-08-02.html#lY
11:22:04 <shachaf> wob_jonas: The arguments you made about 32-bit stack usage don't work together.
11:22:44 <shachaf> If it's designed the way it is to save on address space, you might accidentally map something into that area (by using the rest of your address space).
11:23:05 <shachaf> So it could certainly be an accident, in exactly the cases that it's supposed to be helping.
11:23:21 <shachaf> If accidental mappings into that area can't happen, why not just pre-map the whole region?
11:23:28 <wob_jonas> shachaf: as a simple model, assume that the stack is mapped near the top of the user address space, and everything else is growing from the bottom of it
11:23:58 <wob_jonas> shachaf: we don't premap because we don't know if you'll have 256 M of stack and 256 M of heap or 2M of stack and 500 M of heap in an 1G address space
11:24:16 <Taneb> wob_jonas: does it have to have all those numbers as prime factors, or just some subset of them?
11:24:40 <shachaf> Just a subset according to https://en.wikipedia.org/wiki/Smooth_number
11:24:53 <wob_jonas> shachaf: but it's possible that it wasn't because of address space, but because when this was invented, they didn't have MAP_NORESERVE yet
11:25:09 <wob_jonas> Taneb: just a subset, at least the way I interpreted it
11:25:25 <wob_jonas> if it was all those numbers, you'd just have to divide the problem by one of each first and get a smaller problem
11:26:26 <wob_jonas> Taneb: https://esolangs.org/logs/2019-08-08.html#lL is the best I got so far. I'll do a better search, but I'm busy with other things
11:26:47 <shachaf> Taneb: I should indeed be in bed right now.
11:28:20 <wob_jonas> or maybe they didn't have a way to not allocate the supporting structures that take up like 1/1000 or 1/500 of the memory mapped, which could be a lot on old systems if you have 100 processes with 8M stack mapping each
11:30:30 <wob_jonas> or maybe it's for some other historical reason that isn't worth to change now
11:34:51 <HackEso> o is a popular comedy fantasy webcomic. It's about a group called the Order of the Stick, as they go about their adventures with minimal competence, and eventually stumble into a plan by an undead sorcerer to conquer the world, and they're out to stop him and conquer their personal problems at the same time. Hopefully not in that order.
11:43:35 <cpressey> tfw an argument breaks out about whether the filename-selecting regex in the config file should be written as /^.*\.(ts|tsx)$/ or as /^.*\.tsx?$/
11:47:29 <wob_jonas> `perl -e print(rand(2)<1 ? "it should definitely be written as /^.*\.(ts|tsx)$/" : "it should definitely be written as /^.*\.tsx?$/"
11:47:30 <HackEso> syntax error at -e line 1, at EOF \ Execution of -e aborted due to compilation errors.
11:47:33 <wob_jonas> `perl -e print(rand(2)<1 ? "it should definitely be written as /^.*\.(ts|tsx)$/" : "it should definitely be written as /^.*\.tsx?$/")
11:47:33 <HackEso> it should definitely be written as /^.*.tsx?
11:47:48 <wob_jonas> `perl -e print(rand(2)<1 ? "it should definitely be written as /^.*\.(ts|tsx)\$/" : "it should definitely be written as /^.*\.tsx?\$/")
11:47:48 <HackEso> it should definitely be written as /^.*.(ts|tsx)$/
11:48:04 <wob_jonas> the other way is unclear and hard to read and should never be committed to production code
11:50:08 -!- Melvar has quit (Quit: rebooting).
11:59:52 -!- Melvar has joined.
12:10:08 <wob_jonas> [ (q: , 0j_2": (9<.@%~_1+10x^50)&-) 11111111111269581656547160489766631945078430800000x
12:10:09 <j-bot> wob_jonas: |domain error
12:10:09 <j-bot> wob_jonas: | (q:,0j_2":(9<.@%~_1+10^50)&-)11111111111269581656547160489766631945078430800000
12:10:19 <wob_jonas> [ (0j_2": (9<.@%~_1+10x^50)&-) 11111111111269581656547160489766631945078430800000x
12:10:19 <j-bot> wob_jonas: _1.58e38
12:10:30 <wob_jonas> [ (q:) 11111111111269581656547160489766631945078430800000x
12:10:30 <j-bot> wob_jonas: 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5 5 5 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 19 19 19 19 19 19 19 29
12:15:42 <wob_jonas> ^ int-e: that's the best you can get with prime factors up to 29 by the way
12:16:09 <salpynx> int-e: The "regular language Jot" is a subset of "all sequences of 0 and 1" according to the definition of a formal language, if we understand 'all sequences' to also include the empty string. In this case 'all sequences of 0 and 1' is the whole, and contains Jot (a subset). So 'all.seq.0.1 contains Jot' => 'all.seq.0.1 comprises Jot'. Flip it to t
12:16:10 <salpynx> he passive => "Jot is comprised of all all.seq.0.1"
12:16:25 <salpynx> which is what you wrote originally with "Jot is the regular language comprised of all sequences of 0 and 1"
12:16:41 <Taneb> salpynx: I think it's exactly the set of all sequences of 0 and 1
12:17:23 <cpressey> Jot is a programming language, not a formal language
12:17:53 <salpynx> taneb: yes, that's the technicality that makes both versions equally awkward, but allows my somewhat contrived and cheeky justification to hold ;)
12:18:04 <wob_jonas> [ (":@q: ,' | ', 0j_2":-&(9<.@%~_1+10x^50)) 11111111111194529560647830327114462838933000000000x
12:18:05 <j-bot> wob_jonas: 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 11 17 17 19 19 19 19 19 19 19 19 19 23 23 23 23 23 29 71 | 8.34e37
12:18:06 <cpressey> Unless all Jot does is accept or reject a program. In which case it's a set of strings, i.e. a formal language
12:18:23 <Taneb> cpressey: yes, it's a programming language
12:18:26 <cpressey> and in that case it's almost certainly not "any sequence of 0 or 1s" because that's not a very interesting language
12:19:02 <wob_jonas> [ (":@q: ,' | ', 0j_2":-&(9<.@%~_1+10x^50)) 11111111111185248065004566815208736562760436940800x NB. so far this is worse than the lucky one that I got yesterday
12:19:03 <j-bot> wob_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 11 11 11 11 17 17 17 17 17 17 17 17 17 17 19 19 19 19 23 29 29 29 29 31 47 | 7.41e37
12:19:23 <Taneb> I believe the set of syntactically valid jot programs is equal to the set of all sequences of 0 and 1
12:19:24 <wob_jonas> [ (":@q: ,' | ', 0j_2":-&(9<.@%~_1+10x^50)) 11111111111161923559652900718659162521362304687500x
12:19:25 <j-bot> wob_jonas: 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 11 13 13 13 17 17 17 17 17 17 23 31 59 | 5.08e37
12:19:30 <salpynx> int-e originally wrote "Jot is the regular language", so I was using that as a starting point
12:19:52 <Taneb> https://esolangs.org/wiki/Jot "Every combination of 0's and 1's is a syntactically valid Jot program, including the null program."
12:20:00 <salpynx> including the empty string
12:23:00 <salpynx> taneb: your point re. them being equal is key, I was using 'subset' to deliberately (and misleadingly) imply 'proper subset', but rely on the technical meaning of S ⊆ S
12:23:47 <wob_jonas> I should make this program output the factoring so that I don't have to enter this command here
12:23:56 <wob_jonas> but then, this command "proves" that I'm not cheating
12:23:59 <salpynx> The tone of the anti-"consists of justification
12:24:24 <salpynx> made me want to construct some kind of argument to justify it on a technicallity
12:25:08 <cpressey> I think you can extend any programming language to have a syntax where any string of symbols is syntactically correct but results in some uninteresting semantics such as terminating immediately and producing no output
12:25:21 <Taneb> cpressey: in Jot it's actually interesting
12:25:58 <salpynx> there's an xkcd for this, effect an effect #326
12:27:15 <wob_jonas> [ (":@q: ,' | ', 0j_2":-&(9<.@%~_1+10x^50)) 11111111111140890057058176051913882460557854562500x
12:27:16 <j-bot> wob_jonas: 2 2 3 3 5 5 5 5 5 5 7 7 11 11 11 11 11 11 11 11 13 13 17 19 19 19 19 19 19 19 19 19 19 19 19 19 19 23 23 23 23 29 29 59 59 | 2.98e37
12:28:37 <cpressey> Saying "There's an xkcd for this" is the modern version of quoting Bible verses.
12:31:45 <cpressey> Taneb: my point was trying to be something about how some languages have this thing called "syntax" and others don't and you can always take "syntax" away if you like.
12:32:39 <cpressey> It's like a front-line triage to eliminate a class of programs we think you won't be interested in running because we haven't defined any particularly interesting meanings for them
12:34:37 <salpynx> cpressey: I think you're right, Jot isn't a formal or regular language, so that's a problem with the sentence. How would you phrase it to indicate that that some regular language all.seq.0.1 describes the syntax of Jot, which I think is the intended meaning
12:36:47 <salpynx> "The syntax of Jot is comprised of the regular language comprised of..."?
12:38:15 <cpressey> "Any sequence of 0's and 1's is a syntactically valid Jot program" ?
12:38:51 <salpynx> there's a news article about this wiki editior: https://medium.com/backchannel/meet-the-ultimate-wikignome-10508842caad I think I shouldn't be trying so hard to counter their pet peeve
12:39:16 <cpressey> I'm deliberately trying to phrase it in a conversational, almost high-school level way
12:40:02 <cpressey> But the smallest change to the page as I see it now might just be "The syntax of Jot is the regular language..."
12:40:05 <salpynx> cpressey: that's constructive. I should go with that :)
12:41:25 <salpynx> is a syntax 'equal to' a formal language?
12:42:12 <cpressey> salpynx: Yes, I think that's fair to say.
12:43:33 <salpynx> ok, I wasn't sure. We are in pedantic territory here, I wanted to be sure.
12:50:03 <wob_jonas> [ try =: ":@q: ,' | ', 0j_2":-&(9<.@%~_1+10x^50)
12:50:08 <wob_jonas> [ try 11111111111122460609418029716397205124244969250000x
12:50:09 <j-bot> wob_jonas: 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 11 11 11 13 13 13 17 17 17 17 17 17 17 19 19 19 29 29 29 29 29 29 29 29 29 29 83 97 | 1.13e37
12:55:28 <salpynx> "All sequences of 0 and 1 comprise the regular language that is the syntax of Jot." {0,1}* ⊇ Jot syntax "The syntax of Jot is the regular language comprised of all sequences of 0 and 1" Jot syntax ⊆ {0,1}*
13:01:52 <salpynx> I'll stop now, and sleep on it before making any wiki edits. I was enjoying the counter-pedantry, not sure these really are good edits. Making the first edit and prompting the wiki user to convert it to the passive 'comprised of' version since Jot is the focus of the article would be funny.
13:02:12 <salpynx> All languages are a bit silly.
13:03:40 <salpynx> Strict natural language grammar only seems valid when the last natural speaker is dead.
13:13:27 <int-e> > let x = 11111111111111111215673466122483207680856045806875; y = 10^50 `div` 9 in (fromIntegral (x - y) :: Double, fromIntegral x - fromIntegral y :: Double)
13:14:57 -!- howlands has joined.
13:23:35 <wob_jonas> [ try 11111111111269581656547160489766631945078430800000x
13:23:35 <j-bot> wob_jonas: 2 2 2 2 2 2 2 3 3 3 3 3 5 5 5 5 5 7 7 7 7 7 7 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 19 19 19 19 19 19 19 29 | 1.58e38
13:25:09 <int-e> wob_jonas: this wasn't a new result; it was just an experiment how bad the cancellation with double precision would be :)
13:26:21 <int-e> 11111111111269581656547160489766631945078430800000 is the optimum for the first 11 and 12 primes.
13:26:39 <wob_jonas> int-e: sure, the one I entered isn't really new either, I just started a search with different parameters while the first one is still running (for an expected three more hours), and it found this while it's still searching the part of the search space that I've already searched fully
13:26:59 <wob_jonas> it will get in a disjoint part of the search space eventually though
13:27:54 <int-e> But I couldn't make my approach for finding the optimum work beyond 15 primes. (I actually ran out of memory (32GB here).)
13:28:13 <wob_jonas> sure, I'm not looking for the optimum with a given number of primes now
13:28:45 <wob_jonas> the three hour long search that I'm running could find solutions with 103 in them in theory
13:28:48 <int-e> (restricting to the first n+m primes was the "first approach" in my paste)
13:32:43 <wob_jonas> the first search should eventually reproduce the best solution that I found during the night
13:37:09 <wob_jonas> [ try 11111111111112819215968651733403643249992663040000x
13:37:10 <j-bot> wob_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 5 5 5 5 7 7 7 7 7 11 11 11 11 11 11 13 13 13 13 17 17 19 19 23 23 23 23 23 23 29 29 29 47 53 83 | 1.71e36
13:37:20 <wob_jonas> I'm still afraid that that one was a lucky fluke by the way
13:38:02 <int-e> feel free to suggest a different target to check that theory :)
13:38:27 <wob_jonas> no need, I can just modify my search if I want
13:38:47 <wob_jonas> and my search is still an inefficient single-threaded python3 program
13:39:34 <wob_jonas> it would probably become much faster if I rewrote it to an efficient C++ program
13:39:48 <int-e> what are you using for arithmetic?
13:40:23 <int-e> Pretty sure that's what they use by default.
13:40:24 <wob_jonas> but note that most of the numbers are 1 or 2 or 3 words long, none longer than 3 words
13:40:40 <wob_jonas> and I'm multiplying numbers so that the product doesn't exceed 3 words
13:41:31 <wob_jonas> I think the arithmetic isn't the slow part
13:41:38 <int-e> But you're right; this means that gmp is probably not the bottleneck here; the interpreter overhead should be significant.
13:42:02 <wob_jonas> but the numbers are larger than fits in a small int and so allocated randomly spreaded in the python heap
13:42:29 <wob_jonas> so I have a lot of overhead on memory throughput
13:43:16 <wob_jonas> a proper prorgam would allocate these in a dense array, 32 or 24 or 16 bytes per number
13:43:52 <wob_jonas> (16 bytes means that I use approximate numbers, which means I need extra code to track the exact values for when I find a hit, but it'd be the most efficient)
13:44:50 <wob_jonas> [ try 11111111111111167179461296463398102111816406250000x
13:44:50 <j-bot> wob_jonas: 2 2 2 2 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 11 11 11 11 13 13 13 13 13 17 19 19 23 23 23 23 23 23 23 23 53 61 73 | 5.61e34
13:44:54 <wob_jonas> this is the one I found yesterday, right?
13:46:00 <wob_jonas> I should have added code to print anything better than say 1e40, to know if this is a fluke
13:46:18 <wob_jonas> um, anything better than 1e38 rather
13:46:38 <wob_jonas> the code only prints the best found so far, so I won't know if it finds ten other 1e35 sized solutions
13:47:18 <wob_jonas> although technically I could modify the main part of the code and continue from where I stopped it, but I don't want to do that now
13:53:21 -!- salpynx has quit (Remote host closed the connection).
14:02:28 <wob_jonas> [ try 11111111111111158344848599503479968356777700860000x
14:02:28 <j-bot> wob_jonas: 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 13 13 13 13 17 17 17 17 17 17 17 17 17 19 19 19 19 19 19 19 19 19 19 31 89 103 | 4.72e34
14:02:49 <wob_jonas> now that one is new, and the best I've found so far
14:02:57 <wob_jonas> and, what do you know, 103 is a factor in it
14:04:27 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65370&oldid=65322 * A * (+2810) /* Blocked */
14:07:29 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65371&oldid=65370 * A * (-606) /* Minimal J for Beginners */
14:08:33 <wob_jonas> I wonder if I should try to make the memory access more predictable by really-deep-copying the large array, in the sense that I copy even the biginteger objects too (an unnatural operation on python) to have them reside mostly sequentially in memory
14:11:44 <wob_jonas> perhaps even 64-bit integers could be enough for the inner loop, and then recheck whenever I get an approximate match
14:13:56 <wob_jonas> That would solve the problem of the inefficient allocation
14:14:10 <wob_jonas> of course I'd still need to keep the array of exact numbers, but those would be rarely used
14:17:10 <cpressey> wob_jonas: I almost hate to mention it but... I wonder how suited Julia would be for this
14:17:39 <cpressey> I don't know how well the problem vectorizes, and it's not like vectorization is automatic
14:19:41 <wob_jonas> cpressey: I don't know, you can take a stab at trying to solve this if you want
14:20:45 <cpressey> wob_jonas: I didn't quite catch what the precise problem is, do you have a link?
14:21:01 <cpressey> I gather it has something to do with prime factorization :)
14:21:17 <wob_jonas> http://esolangs.org/logs/2019-08-02.html#lY
14:22:57 <wob_jonas> I might try to write a more efficient inner loop
14:23:35 <cpressey> factor: ‘11111111111111111111111111111111111111111111111111’ is too large
14:24:32 <int-e> cpressey: 78875943472201*182521213001*25601*9091*5051*271*251*41*11
14:25:04 <wob_jonas> int-e: I tested that it didn't have all small prime factors, but didn't get a full factorization
14:25:44 <cpressey> I doubt I will have much time to play with it
14:26:06 <wob_jonas> your "(10**50-1)/9" was a convincing enough nothing-up-my-sleeve number that I didn't think you'd cheat by choosing a number such that if you add a very small integer it happens to factor up totally
14:26:22 <wob_jonas> plus you already said what the best solution you had was
14:26:37 <int-e> wob_jonas: I didn't intend to cheat... I wanted something where it was easy to see progress :)
14:26:43 <int-e> (look for the first non-1 digit)
14:27:17 <wob_jonas> I don't find it easy to see progress because I can't count 15 ones by hand
14:27:39 <wob_jonas> which is why I have the computer print the difference in %e format
14:27:41 <int-e> wob_jonas: well, I put the numbers in a file, one line each
14:37:07 <cpressey> 13328592851757862349726964424185557245693157222400
14:37:25 <cpressey> [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,2,2,2,2,2,2,2,11,13,2,3,2,5,11,23,2]
14:37:33 <wob_jonas> [ try 13328592851757862349726964424185557245693157222400x
14:37:34 <j-bot> wob_jonas: 2 2 2 2 2 2 2 2 2 2 2 3 3 5 5 7 11 11 11 13 13 17 19 23 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 | 2.22e48
14:37:51 <int-e> you don't have to use all of the primes
14:38:14 <cpressey> int-e: I know, but I thought it would be a good place to start
14:38:36 <cpressey> I at least fulfilled the letter of the challenge, given my limited time to work on it :)
14:39:00 <int-e> [ try 11111112137520138469338239234808374004904964760870
14:39:01 <j-bot> int-e: |value error: try
14:39:01 <j-bot> int-e: | try 1.11111e49
14:39:12 <int-e> [ try 11111112137520138469338239234808374004904964760870
14:39:12 <j-bot> int-e: |value error: try
14:39:12 <j-bot> int-e: | try 1.11111e49
14:39:13 <int-e> [ try 11111112137520138469338239234808374004904964760870x
14:39:14 <j-bot> int-e: |value error: try
14:39:14 <j-bot> int-e: | try 11111112137520138469338239234808374004904964760870
14:39:21 <wob_jonas> int-e: you need to load my environment first, by like
14:39:25 <j-bot> wob_jonas, changed to wob_jonas,#esoteric
14:39:56 <j-bot> wob_jonas, copied ,#esoteric from wob_jonas,#esoteric
14:40:09 <int-e> oh, per user state
14:40:20 <int-e> j-bot, load: wob_jonas
14:40:20 <j-bot> int-e, copied int-e,#esoteric from int-e,wob_jonas
14:40:22 <wob_jonas> int-e: yeah, it was a strange decision
14:40:33 <wob_jonas> int-e: you can also have multiple sessions in theory
14:41:11 <int-e> anyway, 11111112137520138469338239234808374004904964760870 is the best possible if all primes <= 103 need to be used.
14:41:13 <wob_jonas> int-e: sorry, apparently wrong syntax
14:41:27 <j-bot> wob_jonas, copied wob_jonas,#esoteric from int-e,#esoteric
14:41:43 <j-bot> wob_jonas, changed to wob_jonas,#esoteric and cleared it
14:41:52 <j-bot> wob_jonas, changed to ,#esoteric and cleared it
14:41:59 <wob_jonas> [ try =: ":@q: ,' | ', 0j_2":-&(9<.@%~_1+10x^50)
14:42:09 <int-e> (the target is 111...111/p_1*...*p_27 = 463255947, which is very feasible for brute force)
14:42:44 <j-bot> wob_jonas, working session is ,#esoteric
14:44:55 <wob_jonas> hmm, the three-hour long program is getting close to done
14:45:26 <wob_jonas> I won't run a longer version of that, instead I'll have to improve the program
14:48:51 <wob_jonas> [ try 11111111111115397052046616165917913561809835753472x
14:48:52 <j-bot> wob_jonas: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 11 11 11 11 17 17 17 17 17 17 19 19 19 19 19 29 41 43 43 47 47 | 4.29e36
14:49:21 <wob_jonas> not particularly good, but at least it's new
14:53:32 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65372&oldid=65371 * Areallycoolusername * (+199) repo is almost complete
14:53:56 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65373&oldid=65372 * Areallycoolusername * (-2)
14:54:51 <int-e> okay, that was stupid
14:55:13 <int-e> So I tried (10^49-1)/9...
14:55:33 <int-e> ...I got 1111111111111111140001838971183119543667539375000 which looked eerily similar to 11111111111111111400018389711831195436675393750000
14:56:20 <int-e> Which is nice in that it indicates a certain robustness of the approach. But other than that this should be utterly unsurprising :)
14:56:51 <int-e> (lesson: 10 is smooth)
14:57:53 <wob_jonas> int-e: sure, that's what you get if your search prefers small prime factors, like I do too
14:58:25 <wob_jonas> although the solution above happens to be not divisible by 5
14:58:26 <int-e> Well, mine doesn't do that, exactly. but many of the solutions still feature small prime factors :)
14:58:52 <int-e> I'm so happy that 11111111111111111215673466122483207680856045806875 is not divisible by 2 :)
14:59:48 <int-e> (I also wouldn't be surprised if it was actually optimal... but I see no way of proving such a thing.)
15:06:15 <wob_jonas> the three-hour search finished and didn't find anything better
15:20:28 -!- wob_jonas has quit (Remote host closed the connection).
15:22:51 -!- ais523 has joined.
15:33:20 <cpressey> ais523: I thought of some infinite initial conditions in Conway's Game of Life. For example, you could have an infinite barber pole. It doesn't need caps on the ends, it just goes on forever.
15:33:51 <ais523> you can do that sort of thing in most cellular automata, I think
15:36:03 <cpressey> I don't think there's anything particularly philosophically problematic about them, it's just that I don't know if anyone studies them much
15:37:51 <cpressey> It starts getting problematic when you start considering the infinite configuration which enumerates (and thus contains) all possible finite configurations
15:38:26 <cpressey> If not problematic, then at least kind of weird
15:40:57 <cpressey> One could probably make a philosophical objection that, for a sufficiently complex infinite form, a single tick is doing an infinite amount of computational work
15:41:25 <cpressey> The barber pole is simple and repeatable and you can efficiently predict how any part of it will be at any tick
15:42:06 <cpressey> Anyway, just thoughts I had recently
15:42:41 <ais523> that reminds me of a design in the Game of Life I made a while back, which contains a rake that moves at the maximum possible speed for a moving object
15:43:17 <ais523> so that it creates a constant stream of spaceships that, no matter what they do or what mess they create, will never be able to create anything that shoots down the rake producing them
15:44:02 <ais523> I was wondering if it would be possible to create some sort of infinitely active pattern like that, but what typically happens is that eventually an eater evolves out of the mess and neatly terminates the infinite stream of spaceships
15:53:48 <esowiki> [[Gulp]] N https://esolangs.org/w/index.php?oldid=65374 * Areallycoolusername * (+563) Created page with "'''Gulp''' is an [[esoteric programming language]] made by ][[User: Areallycoolusername|Areallycoolusername]]. It was made for golfing, and it is [[deque]]-based == Specifics..."
15:54:06 <esowiki> [[Gulp]] M https://esolangs.org/w/index.php?diff=65375&oldid=65374 * Areallycoolusername * (-1)
15:54:27 <kmc> by the way since it's CA time in here
15:54:31 <esowiki> [[Gulp]] https://esolangs.org/w/index.php?diff=65376&oldid=65375 * Areallycoolusername * (-2)
15:54:40 <kmc> how much have people studied CAs on arbitrary / random graphs?
15:55:31 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65377&oldid=65207 * Areallycoolusername * (+11) /* G */
15:55:54 <esowiki> [[User:Areallycoolusername]] https://esolangs.org/w/index.php?diff=65378&oldid=65181 * Areallycoolusername * (+11) /* Full List of languages I Made */
15:57:10 -!- ais523 has quit (Remote host closed the connection).
15:58:23 -!- ais523 has joined.
15:59:16 -!- cpressey has quit (Quit: WeeChat 1.4).
16:13:32 <tswett[m]> ais523: "I was wondering if it would be possible to create some sort of infinitely active pattern" - Golly comes with a couple of patterns that are more or less like that.
16:14:10 <ais523> yes, but it's hard to prove that they're like that and don't end up eventually chasing down and destroying themselves
16:14:47 <tswett[m]> Anyway, I've been thinking about replicators in CAs.
16:15:26 <tswett[m]> There's von Neumann's CA with, what, 27 states?
16:16:08 <ais523> the Game of Life has replicators but in general it seems like a really fragile system
16:16:26 <ais523> like, a random block or glider somewhere can completely break a complex pattern and there's nothing you can really do about it
16:17:22 <tswett[m]> I've seen... three general categories of replicators, I think?
16:17:56 <tswett[m]> Or, rather, three categories of CAs with replicators.
16:18:17 <tswett[m]> There are "naturalistic" CAs like Conway's Life, and Star Wars or whatever.
16:18:36 <tswett[m]> Simple rules, huge and complicated replicators.
16:19:22 <tswett[m]> There are von Neumann-style CAs. Complicated rules, large and complex replicators, but not quite as bad as the Conway's Life ones.
16:19:46 <tswett[m]> Then there are Langton's Loops-style CAs. Medium-complexity rules, very simple replicators.
16:22:12 <tswett[m]> The upside of the naturalistic and VN-style CAs is that you can build universal constructors in both of them.
16:22:27 <tswett[m]> I don't think Langton's Loops supports universal construction. I don't know if it can even do computation.
16:23:58 <tswett[m]> Let's see, I'm trying to remember why LL requires a "sheath". You know what I'm talking about?
16:24:20 <ais523> sort of, my memory of this is pretty vague
16:24:50 <tswett[m]> Similar to WireWorld, LL has "wires" that signals can go along. But unlike in WireWorld, the wires have to be surrounded on each side by a special state.
16:25:56 <esowiki> [[Braincells]] https://esolangs.org/w/index.php?diff=65379&oldid=65363 * HereToAnnoy * (+3169) Hopefully the spec is finished, just need execution examples and clarification. WIP
16:26:06 <tswett[m]> Hmmmm, here's one reason. In WireWorld, there's a particular state which indicates the tail of a pulse. In LL, on the other hand, the state for the tail of a pulse is identical to the background state.
16:26:40 <tswett[m]> So the "sheath" state is necessary to regenerate the wire in the wake of a pulse.
16:26:44 <tswett[m]> I wonder why it was designed that way.
16:27:55 <ais523> maybe it increases the chance of the wires acting sensibly when they collide?
16:28:55 <tswett[m]> Well, let me look up how construction works in LL.
16:33:19 -!- ais523 has quit (Quit: quit).
16:34:37 <tswett[m]> I'm reading Langton's paper in which (I think) he describes LL. http://www-users.york.ac.uk/~gt512/BIC/langton84.pdf
16:36:11 <tswett[m]> He writes that in order for a CA pattern to be considered properly self-replicating (as opposed to being a pattern which merely "gets replicated" by the rule), it ought to contain some "code" which is both used to direct the replication process, and copied into the daughter pattern.
16:36:32 <tswett[m]> Which is awfully similar to the way that a traditional quine works.
16:36:38 <kmc> that's a tricky definition to make precise
16:36:47 <kmc> it's kind of like the question of whether viruses are alive
16:36:51 <kmc> they need a certain environment to reproduce
16:36:55 <kmc> but so does every lifeform
16:37:41 <esowiki> [[User:HereToAnnoy]] M https://esolangs.org/w/index.php?diff=65380&oldid=63533 * HereToAnnoy * (+101) Added [[Braincells]] to language list
16:39:25 <tswett[m]> I'm also reminded of a definition that someone on the Code Golf Stack Exchange site suggested for a "proper quine".
16:40:15 <tswett[m]> Which is that the program should contain at least one element which codes some *other* element of the program.
16:41:09 <tswett[m]> "Replicating cellular automata", like 1357/1357 or whatever it is, obviously don't allow you to create a replicator which satisfies that criterion, since each element of the mother pattern codes itself and only itself.
16:42:22 -!- b_jonas has joined.
16:42:51 <b_jonas> I should probably write the inner loop in C or C++, with 64-bit floats
16:43:00 <b_jonas> but I don't promise that I'll do it
16:43:28 <kmc> what's it in now
16:43:57 <b_jonas> cpressey: infinite initial condition for game of life can be useful because it lets you send signals at light speed, while otherwise you can only send signals (repeatedly) at half life speed
16:44:23 <b_jonas> so yes, people do study that
16:45:13 -!- FreeFull has joined.
16:45:56 <b_jonas> tswett[m]: Neumann's CA => http://esolangs.org/wiki/Von_Neumann%27s_29-state_cellular_automaton -- not that there's much info there
16:49:38 <zzo38> How to determine what time zone is used to display the recent changes in a MediaWiki service if not registering an account?
16:49:53 <b_jonas> kmc: python, and I only have the bigint version, not one that does the inner loop with doubles and then checks near matches with bigints
16:53:50 <b_jonas> zzo38: what page are you viewing on the wiki?
16:54:41 <kmc> b_jonas: cython is a really easy way to rewrite an inner loop as native code
16:57:01 <tswett[m]> Somebody made a hexagonal-neighborhood loop replicator CA, which is an awfully good idea: https://www.youtube.com/watch?v=_kTMO7oEN8U
17:02:03 <b_jonas> kmc: nah, I want to write it in C++, which I already know, and know enough to be able to figure out how to optimize it properly
17:02:16 <b_jonas> I won't try to learn some new tool for this
17:02:22 <kmc> well, ctypes is also easy
17:02:27 <kmc> but I recommend learning cython at some point
17:02:34 <kmc> you'll get the basics in no time
17:02:42 <b_jonas> but again, feel free to take a stab at the original problem too
17:03:15 <kmc> you pretty much just put c type declarations on your python variables
17:03:36 <tswett[m]> Lemme see. So, in LL, a 7 signal is the signal which indicates that the arm should be extended by one cell. The sheath is the part that actually responds to the signal. You couldn't have the background state respond to the signal directly, because if you're a background cell and there's a 7 next to you, you don't know whether you're supposed to respond to it or not.
17:03:36 <b_jonas> there's no need for anything like that here
17:14:58 <zzo38> b_jonas: The recent changes (but not the esolang wiki; it is a different one)
17:16:28 <b_jonas> zzo38: so the Special:RecentChanges page in the default html view?
17:17:28 <esowiki> [[Semordnilap]] https://esolangs.org/w/index.php?diff=65381&oldid=60021 * Orby * (-8) /* See also */
17:25:50 <tswett[m]> Now I'm trying to figure out why, in Langton's Loops, two consecutive "4" signals are required in order to effect a turn, instead of just one.
17:31:37 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=65382&oldid=65377 * HereToAnnoy * (+17) /* B */ Added Braincells to the language list.
17:32:37 <b_jonas> zzo38: I don't know a good answer. if api.php is enabled (it is not on Wikia), even for read only, then you can use that to query the recent changes in a different format, but that's not trivial
17:33:18 <b_jonas> you can also use api.php to query the default timezone of the wiki, but I'm not sure if that's always the one used on recentchanges for unregistered users or something may override it
17:34:04 <b_jonas> zzo38: you can try asking this question in a mediawiki-related channel on freenode, such as #mediawiki
17:36:48 -!- Phantom__Hoover has joined.
17:37:09 <b_jonas> perhaps one of the SpecialPages also tells the default timezone? I dunno
17:39:23 <b_jonas> https://www.mediawiki.org/wiki/Manual:Timezone says how to set the default timezone and that that's used in Special:RecentChanges, but doesn't say how to query
17:40:45 <b_jonas> zzo38: view the page Special:GlobalPreferences#mw-prefsection-rendering and see what timezone it says there
17:41:34 <b_jonas> hmm no, that doesn't seem to wokr
17:42:05 <zzo38> It says it is an invalid special page
17:45:17 <b_jonas> zzo38: is the api.php enabled? if so, you can try loading /w/api.php?action=query&prop=info&meta=siteinfo&format=xmlfm&siprop=general|namespaces|namespacealiases|interwikimap|specialpagealiases|magicwords and see what it says in the timezone attribute of //general , but I'm not convinced that that's always right because I think there's multiple timezone settings
17:46:20 <b_jonas> but if the api.php is enabled, then it's possible to query the recent changes with it
17:46:31 <b_jonas> and you can compare the date there with the date in the html view
17:50:56 <b_jonas> zzo38: look at /w/api.php?action=query&generator=recentchanges&list=recentchanges and compare its timestamps with the one in /wiki/Special:RecentChanges
17:51:32 <b_jonas> and no, this won't work on wikia, or some other wikis where api.php is not enabled
17:53:14 <zzo38> OK, that works though on what I am trying to access.
17:55:12 <b_jonas> https://www.mediawiki.org/wiki/API:Main_page has the docs for api.php in case you want to go more completely with that, eg. get the Recent Changes from only there rather than just eyeball the timezone
18:01:39 -!- MDude has quit (Ping timeout: 248 seconds).
18:06:06 <esowiki> [[Fit]] M https://esolangs.org/w/index.php?diff=65383&oldid=62321 * HereToAnnoy * (+743) Reduces from Boolfuck --> turing complete
18:13:20 <esowiki> [[Fit]] M https://esolangs.org/w/index.php?diff=65384&oldid=65383 * HereToAnnoy * (+1) Fixed typo : "(-v)+" ---> "(--v)+"
18:36:11 <esowiki> [[A1]] https://esolangs.org/w/index.php?diff=65385&oldid=59728 * Orby * (-5) /* See Also */
18:54:50 <tswett[m]> I wonder if I could come up with a cellular automaton that's kind of "in between" Codd's CA and Langton's Loops.
18:55:48 <tswett[m]> LL only has two commands: extend forwards and extend left. That's great as long as little square loopy replicators are the only thing you ever want to make.
18:57:04 <tswett[m]> Codd's CA has lots of commands that do lots of things, but a replicator in that CA is very complicated.
19:04:06 <tswett[m]> https://en.wikipedia.org/wiki/Codd%27s_cellular_automaton
19:05:02 <tswett[m]> I'm trying to think how how LL might be extended to permit, say, a loop with a kink in it.
19:06:02 <tswett[m]> In LL, replication essentially consists of just executing the program four times. It does exactly the same thing the first three times (extend for a while and then turn left), and something different the last time (extend for a while, then collide, causing various interesting stuff to happen).
19:06:11 <b_jonas> tswett[m]: wait, isn't that the same as Langton's loops?
19:06:28 <b_jonas> they both have eight states on a square grid and make squares
19:06:43 <tswett[m]> No, Codd's CA came first. Note that the pictured loop doesn't replicate; it merely extends an arm forever.
19:07:25 <tswett[m]> If you tried to make "a Langton's loop" in Codd's CA, you'd find that the program to generate one side of the loop is too long to fit inside of the loop.
19:07:59 <tswett[m]> Langton takes advantage of the fact that producing one cell of the loop requires a 3-cell instruction, but the program is executed 4 times, and 4 > 3.
19:08:00 <Hooloovo0> there's a lot of loop rules in golly's sample directory
19:09:32 <Hooloovo0> there's also a couple of similar-to-codd rules like devore
19:10:07 <tswett[m]> Yeah, the Devore rule is pretty much a strict improvement of Codd's rule. It's better in every way and lets you build a much, much smaller replicator.
19:11:40 <tswett[m]> I'm pondering this "loop with a kink in it" idea. You could do that with something very similar to a Langton's loop, if only you could somehow make it so that certain parts of the program are only executed some of the time.
19:14:48 <tswett[m]> So now I'm just thinking about how to accomplish that.
19:19:23 <tswett[m]> You'd want some way to store a finite state, and suppress some of the program some of the time depending on the state.
19:20:50 <tswett[m]> Hmmmmmmmm. I like the way my thoughts are going. :D
19:24:36 <int-e> daisy daisy... ah no, that was HAL's mind going.
19:26:47 <tswett[m]> The mother loop can be totally passive, and merely send the program out over and over again. The construction arm can have a part on it that's a state machine and filter.
19:31:37 <esowiki> [[Post Dominos]] https://esolangs.org/w/index.php?diff=65386&oldid=60349 * Orby * (-5) /* See also */
19:38:49 <kmc> we are all merely codons within the mother loop
19:49:48 -!- lldd_ has joined.
20:10:45 -!- Lord_of_Life_ has joined.
20:14:07 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
20:14:08 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:15:54 <tswett[m]> I think I've figured it out. I can do almost everything with 12 states.
20:21:18 <esowiki> [[Minaac]] https://esolangs.org/w/index.php?diff=65387&oldid=59930 * TheJebForge * (-120) /* Minaac */
20:23:22 -!- lldd_ has quit (Quit: Leaving).
20:27:32 <b_jonas> tswett[m]: implement it in GPU :-)
20:27:49 <tswett[m]> I'm gonna implement it in Golly. :D
20:49:47 <rain2> I have no idea how fractran works
21:07:42 <shachaf> a positive natural is a multiset of primes hth
21:25:25 <b_jonas> do you mean like 11111111111115397052046616165917913561809835753472 ? is that a multiset too?
21:34:20 <shachaf> `factor 11111111111115397052046616165917913561809835753472
21:34:21 <HackEso> factor: ‘11111111111115397052046616165917913561809835753472’ is too large
21:34:27 <shachaf> Apparently it's too large to be a multiset.
21:37:41 <b_jonas> learn BLJ is a move that lets you solve NP-complete problems with no stars and just one key.
21:55:49 -!- b_jonas has quit (Remote host closed the connection).
22:35:40 <Sgeo_> Retroforth's case statement causes the function that's using it to exit if the condition is met
22:39:17 <kmc> so, know anything interesting about cellular automata on random graphs?
22:39:30 <kmc> seems like you could model some social behaviors that way
22:40:46 -!- xkapastel has joined.
22:52:07 -!- Phantom__Hoover has quit (Ping timeout: 245 seconds).
23:02:20 <shachaf> kmc: Golly. I've never even thought about cellular automata on non-planar graphs.
23:06:01 -!- FreeFull has quit.
23:19:55 <kmc> well I guess you're about ready then!
23:22:54 <shachaf> i'm ready for fluffy cat whiskers
23:42:20 <tswett[m]> I successfully made a loop that extends itself. Woo.
23:43:35 <shachaf> int i = 0; while(1) { this_block.append("print(%d);", i); i++; }
23:44:04 <Sgeo_> At some point I should make a new implementation of Braintrust. Except the best language for that is probably either Common Lisp or maybe some ... assembly like thing? And I have no interest in Common Lisp these days
23:44:25 <shachaf> Why not do it in ALGOL 68?
23:44:34 <shachaf> I think ALGOL 68 is quite an interesting language.
23:44:52 <shachaf> It has features not present in many or any modern languages.
23:45:09 <shachaf> And certainly in languages that existed in 1968.
23:45:13 <Sgeo_> Does ALGOL 68 have functionality to preserve the current state as an executable that will run another function when started?
23:45:42 <shachaf> I imagine think you could dump memory to a file and load it back up later.
23:46:06 <Sgeo_> https://ccl.clozure.com/manual/chapter4.9.html
23:46:48 <Sgeo_> Or maybe I could just... directly copy+modify the current executable, if there's specific data in the executable in a predictable location
23:47:05 <shachaf> That seems like a reasonable approach.
23:47:26 <shachaf> `` xxd tmp/out.a > tmp/out.a.xxd
23:47:26 <HackEso> /hackenv/bin/`: line 5: xxd: command not found
23:47:58 <shachaf> `` hd tmp/out.a > tmp/out.a.hd
23:48:04 <HackEso> https://hack.esolangs.org/tmp/out.a.hd
23:48:04 <Sgeo_> I'm wondering if that's sort of like cheating, to compile into an interpreter and call it a "compiler"
23:49:24 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65388&oldid=65373 * A * (+287) /* Concern */
23:57:03 <kmc> Sgeo_: that's one of the futamura projections. a compiler is a curried interpreter
23:57:10 <kmc> you provide the program and at some point later you provide the program's input
23:57:21 <kmc> so the question is just how much optimization takes place at the earlier point
00:03:01 <tswett[m]> Now I have left turning and right turning. I've implemented...
00:03:28 <tswett[m]> It's capable of facing any direction that any turning machine can face.
00:28:55 <tswett[m]> So, shoot, I might be nearly done implementing my rule. I think I have enough stuff to make an almost-replicator now.
00:52:14 <zzo38> shachaf: What features is that that ALGOL 68 has and is not present in many or any modern languages?
01:55:57 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65389&oldid=65388 * Areallycoolusername * (+313) Ask User: A for info on String Compression
01:57:35 <shachaf> https://en.m.wikipedia.org/wiki/Comparison_of_ALGOL_68_and_C%2B%2B talks about some features
01:57:58 <shachaf> I think distinguishing values from memory locations is pretty unusual.
02:00:57 -!- MDude has joined.
02:05:31 -!- MDude has quit (Ping timeout: 246 seconds).
02:16:31 <zzo38> Some of the features seem like good. Some seem like should be implemented by macros instead, perhaps.
02:37:57 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:41:54 <zzo38> Is there a implementation of Haskell in JavaScript that can interface Haskell codes with JavaScript codes?
02:49:35 <tswett[m]> Dang, I successfully built an almost-replicator.
02:50:13 <tswett[m]> Let's see if I can upload some pictures.
02:50:35 * tswett[m] uploaded an image: image.png (82KB) < https://matrix.org/_matrix/media/v1/download/matrix.org/jCTRLEizSoOEpqnHMyfvfNFQ >
02:51:16 * tswett[m] uploaded an image: image.png (137KB) < https://matrix.org/_matrix/media/v1/download/matrix.org/pNIJWOGhAgTGjPJQkIAUumtf >
02:53:04 <tswett[m]> So, this is essentially a Langton's loop... more or less.
02:53:37 <tswett[m]> The genome consists of five segments, separated by orange signals.
02:56:04 <tswett[m]> Segment 1 extends the construction arm and puts filter data along it using teal and cyan signals. Segment 2 simply extends forward a bunch of times using cyan segments. Segment 3 makes a single left turn, then moves forward 5 times. Segment 4 turns left, moves forward 4 times, and turns left again. Segment 5 turns right, moves forward 5 times, and turns right again.
02:58:05 <tswett[m]> Ummmm, a video would make this a lot clearer. Maybe.
03:06:52 -!- tromp has quit (Read error: Connection reset by peer).
03:07:28 -!- tromp has joined.
03:24:15 <tswett[m]> Okay, have a very smol animated GIF which shows how it works.
03:24:26 * tswett[m] uploaded an image: radiator2.mc-2.gif (383KB) < https://matrix.org/_matrix/media/v1/download/matrix.org/ubOayEqlZPdhljpZLpbVdZCe >
03:25:49 <tswett[m]> The first segment writes a data tape along the construction arm. That data tape is then read in order to determine which segments of the program to pass through to the daughter, and which segments to suppress.
03:26:31 <tswett[m]> Although the mother creates a near-copy of itself, and then sends its complete genome into the daughter, neither the mother nor the daughter is capable of reproducing afterwards.
04:16:59 <Sgeo_> I am getting the impression that there are multiple versions of Retroforth, mostly unrelated except in name and creator
04:32:26 <zzo38> Do you know about compiling LLVM into new targets?
04:36:43 <Sgeo_> Awezoome did a Pachelbel Canon in D
04:37:26 <Sgeo_> https://modarchive.org/module.php?34369
04:38:47 <Sgeo_> Canon of the Three Stars?
04:42:10 <Sgeo_> tswett[m], huh, Mirek's cellebration came with Langton's
04:42:31 <kmc> it comes with a lot of things
04:43:12 <Sgeo_> (Or something similar. The website doesn't say Langton's, hmm)
04:45:44 <Sgeo_> http://www.mirekw.com/ca/rullex_udll.html#DNA
04:48:22 <Sgeo_> https://gist.github.com/Sgeo/ead48728917153cb8fe2c2c2221f2e75
04:48:55 -!- MDude has joined.
05:10:25 <tswett[m]> So, it should be "pretty easy" for me to implement full self-replication in my CA.
05:10:59 <tswett[m]> I can just imitate exactly what Langton's Loops does.
05:12:23 <tswett[m]> But I'd also like to try to think of a better way.
05:52:33 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65390&oldid=65389 * A * (+290) /* Concern */
05:53:52 -!- MDude has quit (Quit: Going offline, see ya! (www.adiirc.com)).
06:46:55 -!- cpressey has joined.
06:51:02 <cpressey> Good morning. I am happy to say that I was wrong a few days ago. It does in fact appear possible to build arbitrary control structures directly in a second-order concatenative language.
07:05:57 <cpressey> I should have an esolang around this soon. Maybe not today though.
07:11:45 <int-e> cpressey: Do you have a viable definition of the concept? I imagine "concatenative" translates to composition of functions, and second-order means that those functions have shape (p -> q) -> (p -> q) for some (non-functional, but perhaps algebraic) types p and q?
07:13:18 <cpressey> int-e: Basically exactly that, yes.
07:13:38 <cpressey> "Program states to program states"
07:13:59 <cpressey> They happen to be stacks on unbounded integers in the esolang.
07:16:37 <int-e> I guess I can always replace (p -> q) by ((p,q) -> (p,q)) :)
07:22:52 -!- Sgeo__ has joined.
07:24:00 <int-e> Hmm, but I guess you have an informal naturality condition in there as well... something that prevents the translation of, say } (end of block) to embed a full interpreter of your language...
07:25:55 -!- Sgeo_ has quit (Ping timeout: 248 seconds).
07:26:47 <int-e> (Otherwise we can just enter a "recording" program state on encountering the first '{', collect the program source including nested '{','}' pairs, and execute it upong the final '}', possibly in a loop.)
07:30:06 <cpressey> int-e: Yes. Or if the function being composed can be examined, } could examine it and look for the { and copy the contents -- basically equivalent to what you just said.
07:30:45 <cpressey> I guess my use of "directly" is trying to suggest that the program doesn't have to examine itself like this.
07:31:54 <cpressey> (Functions aren't ordinarily considered something you can examine the structure of, but... you could just say you're concatenating a monoid and later on you'll interpret it so for now you could examine it. Or something.)
08:08:25 <cpressey> Grr. I think I have to downgrade "arbitrary" to "More arbitrary than I thought, but not totally arbitrary"
08:14:02 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
08:15:34 -!- Lord_of_Life has joined.
08:23:18 -!- Phantom__Hoover has joined.
09:51:38 <cpressey> I agree with shachaf that exceptions can be kind of awful. But handling possible error returns in every single place a function is called (and every place *that* function is called etc) is also awful.
09:51:55 <cpressey> If you think of them as "non-local exits" they don't seem as bad.
09:52:13 <shachaf> Exceptions are an unusual kind of non-local exit because they don't specify where the exit goes to.
09:52:25 <shachaf> Compared to setjmp or continuations or whatever.
09:55:39 <cpressey> You have to think about where they're catched. The type of exception usually suggests some kind of interface, or at least convention, for where it should be catched. But it's very difficult to formalize it, and raising exceptions at every opportunity makes it that much harder.
09:56:07 <cpressey> I mean, seriously, `car` in Scheme can throw. `[]` in Python can throw.
09:56:12 <kmc> shachaf: is 'try' like capturing a continuation and then assigning it to a dynamically-scoped variable?
10:02:11 <cpressey> Often (sorry, just ranting here) I catch an exception only to throw a different exception. I've done this enough that in my head I call this the "exception translation antipattern".
10:03:10 <shachaf> kmc: Yes, I think it's a bit like a dynamic vs. lexical scope thing.
10:03:41 <shachaf> cpressey: I started writing a bit about error handling at http://slbkbs.org/tmp/5.error.handling.txt though I never finished it.
10:05:27 <cpressey> Java's attempt to build an effect system around exceptions feels like an attempt to make it more like lexical scope. Thing is, Java programmers tell me they hate it and they just end up using unchecked exceptions instead.
10:05:53 <cpressey> shachaf: Will give it a look, thx
10:06:07 <shachaf> cpressey: Later I found out that Zig has almost the same system I came up with.
10:06:47 <shachaf> Checked exceptions doesn't seem like the same sort of thing.
10:08:08 <cpressey> "If I raise X I want to know that I've been called by someone that is prepared to catch X" sounds, okay maybe not "lexical", but a lot less "dynamic" in scope
10:08:35 <cpressey> "someone", there I go personifying things again. Dijkstra would not approve
10:09:18 <shachaf> What's wrong with personifying things?
10:10:12 <shachaf> Exceptions try to do a lot of things and they don't seem to do any of them that well.
10:10:37 <cpressey> I should try to find the note where he blames a lot of problems in software on people's tendency to anthropomoriphize it
10:10:41 <int-e> You should never anthropomize computers. They hate it when you do that.
10:11:02 <shachaf> If I write "foo() raises XError { bar(); vaz(); }" and I expect vaz to fail with XError, it becomes invisible to me that bar might also do that.
10:11:54 <int-e> [second correction elided]
10:12:17 <shachaf> do not antwerpomorphize the dutch hth
10:16:18 <cpressey> https://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html
10:16:40 <cpressey> "My next linguistical suggestion is more rigorous. It is to fight the "if-this-guy-wants-to-talk-to-that-guy" syndrome: *never* refer to parts of programs or pieces of equipment in an anthropomorphic terminology, nor allow your students to do so."
10:17:54 <shachaf> What about "if you give me an epsilon I give you a delta"
10:18:11 <cpressey> I acknowledge that Dijkstra held opinions, I don't necessarily agree with them, nor always understand the reasons for them
10:18:19 <Taneb> shachaf: what if I don't give you an epsilon
10:19:32 <shachaf> This reminds me, I have an ill-formed question about models of computation that I don't remember whether I asked in here before.
10:19:49 <int-e> cpressey: meh I think of programs as actors that modify some virtual world... personification is just a tiny step further.
10:20:32 <esowiki> [[Foo machine]] N https://esolangs.org/w/index.php?oldid=65391 * A * (+1670) Created page with "[[Foo machine]] is a hypothetical machine created by [https://codegolf.stackexchange.com/questions/189572/does-this-foo-machine-halt Leo Tenenbaum] in order to demonstrate tha..."
10:20:41 <int-e> (I also allow "worlds" to be terribly abstract)
10:20:54 <shachaf> There are some facts, like "seemingly impossible functional programs" (equality of total predicates over infinite streams of bits is decidable, etc.) and the fact that integration is computable, that seem pretty mysterious at first when you look at them from the standard perspective.
10:20:58 <esowiki> [[Foo machine]] M https://esolangs.org/w/index.php?diff=65392&oldid=65391 * A * (+4)
10:21:09 <shachaf> Or even if they don't seem mysterious, the implementation details tend to be fairly convoluted.
10:22:01 <shachaf> In fact the actual idea of the implementation is very simple so it's annoying that it has to be expressed the way it does.
10:22:56 <shachaf> I'd much rather see e.g. the integration thing described as an explicit non-nested dialog between two parties.
10:23:18 -!- wob_jonas has joined.
10:23:50 <kmc> shachaf: can you give an example of that?
10:23:59 <kmc> maybe for impossible functional programs
10:24:04 <kmc> how is that expressed as a dialog?
10:24:05 <shachaf> Something like, we have a single communication channel, and you can send me questions about the function, and I can ask you questions about the arguments, and so on.
10:24:28 <kmc> these sorts of things are also v. important in complexity theory and cryptography, of course
10:24:32 <kmc> arthur-merlin classes, etc
10:24:45 <shachaf> kmc: Let's see, what are the existing ways of expressing it?
10:24:46 <int-e> kmc: http://math.andrej.com/2007/09/28/seemingly-impossible-functional-programs/
10:25:02 <shachaf> I know two ways which are kind of different.
10:25:06 <kmc> int-e: I've seen the article; I was wondering specifically how to express it as a dialog
10:25:12 <kmc> but also I don't recall how any of it works at all
10:25:41 <shachaf> OK, I'll give a simpler version of it than the one in that post so we can talk about how it works.
10:26:05 <shachaf> data Conat = Z | S Conat is either a natural number or infinity (disallowing bottoms).
10:27:06 <shachaf> find :: (Conat -> Bool) -> Conat is a function that either returns the smallest conat that matches the predicate, if one exists, or returns infinity.
10:27:44 <shachaf> find pred = if pred Z then Z else S (find (pred . S))
10:28:17 <shachaf> This function works by asking pred Z, pred (S Z), pred (S (S Z)), etc., and outputting a single S each time it gets a no answer.
10:28:52 <shachaf> Then you can use "exists pred = pred (find pred)" to see if any conat matches the predicate.
10:29:26 <shachaf> Since pred is total, this is guaranteed to give an answer, and pred will only ask for some finite prefix of your conat.
10:29:52 <kmc> pred is total by assumption?
10:30:05 <shachaf> Right, this whole thing only works for total predicates.
10:30:19 <cpressey> shachaf: Is this all lead-up to your ill-formed question?
10:30:27 <shachaf> (Totality is a very strong condition here.)
10:30:53 <shachaf> I mean, now I'm just explaining this thing because it's neat, to discuss other ways of framing it.
10:31:42 <shachaf> You could say, you're my counterparty, and you give me a predicate, call it p. I can ask p questions by passing you a handle to a conat, call it n.
10:31:51 <shachaf> Then you can send me questions about n, and so on.
10:33:03 <shachaf> In the end the dialog between us will look like "<- here's p, -> here's n, <- is n > 0?, -> yes, <- is n > 1?, -> no", etc.
10:33:48 <shachaf> This is a flat thing rather than a sneaky recursive structured thing. "totality" means that you'll only ask me a finite number of questions about n, and I can just look at the questions and see what the largest number you asked about is.
10:34:56 <cpressey> I am sorely tempted to claim all flat things are recursively structured (you just can't usually see the recursion because it's VERY sneaky)
10:35:45 <shachaf> I mean, sure, you can specify things with recursive structure.
10:35:55 <shachaf> I think almost everyone who sees "seemingly impossible functional programs" is confused at first.
10:36:22 <int-e> there's a wonderful impure way to do the ((Nat -> Bool) -> Bool) -> Nat -> Bool thing... you're given an interrogator (Nat -> Bool) -> Bool that interrogates a subject Nat -> Bool and comes up with a boolean answer in finite time. So you send in subjects that remember the questions they were asked... the first question will always be the same, the second depends on the first, and so on; so you...
10:36:28 <int-e> ...can reconstruct the whole tree of question this way. The mind-boggling thing is that you can do basically the same thing in a pure function.
10:36:39 <shachaf> One thing I can tell them is, "imagine you pass me a Turing machine that specifies the predicate. Then I pass that machine a Turing machine that specifies a conatural, and I can simulate it to see what it does, and so on"
10:37:01 <shachaf> int-e: I think we were just typing a similar kind of thing there.
10:37:26 <shachaf> This is yet another model of computation.
10:38:21 <shachaf> But I'd like to see something that makes the dialog explicit. There are only two parties, the exists player and the forall player or whatever you call them.
10:38:34 <wob_jonas> kmc: on random graphs => I was thinking you should use something like the delaunay triangulation of the poisson process ("http://math.bme.hu/~ambrus/pu/randvoronoi.html") to get a planar grid of cells that is isotropic
10:38:34 <wob_jonas> only you'd probably have to modify it somewhat to make the degree bounded, perhaps by turning it to 3-regular by replacing each node by a loop
10:38:51 <shachaf> If you write "((a -> b) -> c) -> d" it doesn't change the fact that b/d are one player's and a/c are the other's.
10:39:53 <wob_jonas> shachaf: "I've never even thought about cellular automata on non-planar graphs." => wait really? because Game of Life uses king neighbourhood, and that's not planar
10:40:11 <shachaf> Oh, maybe I meant something stronger than non-planar.
10:40:14 <kmc> hm, so it's not
10:40:33 <int-e> what about non-euclidean geometry
10:41:40 <shachaf> Part of the point is, if you say "forall epsilon, exists delta, forall x, ...", the person making the epsilon and x decisions is the same person.
10:42:17 <shachaf> To require them to phrase it in terms of "manufacturing a special sub-person who can make x-choices and passing that sub-person to you" is a complex and bizarre restriction.
10:43:57 <cpressey> I'd say something but tbh I've never understood what corecursion is so I'll not say anything
10:44:15 <int-e> Ehrenfeucht–Fraïssé games for programming, hmm.
10:45:15 <shachaf> I think there's a separate programming thing where APIs that are defined in terms of callbacks are sometimes much more awkward than APIs that aren't, because they restrict your flow control to happening in particular ways.
10:45:26 <shachaf> (Rather than just passing events or something.)
10:46:48 <shachaf> cpressey: I think there are probably versions of this that aren't as explicitly about corecursive structures, though maybe it's always implicit in some way.
10:47:06 <shachaf> (I mean, in the sense that functions are codata rather than data, or something.)
10:49:51 <shachaf> Here's one of the things that's usually confusing about seemingly-impossible-functional-programs:
10:50:34 <shachaf> People say "I don't see how it's possible, because I can ask pred infinity, and I can ask pred 0,1,2,3,...,n, but that doesn't tell me anything about pred n+1"
10:51:14 <shachaf> The answer is that you have to pass pred a conatural that's itself expressed in terms of pred. That's the sneaky recursive thing I was referring to.
10:52:45 <wob_jonas> cpressey: "I catch an exception only to throw a different exception. I've done this enough that in my head I call this the "exception translation antipattern"." => you mean, you make your program print sensible error messages that tell what the user did wrong, rather than some nonsense about where the error was detected like "NullPtrException in me
10:52:45 <wob_jonas> ssage.java:418", and it's an antipattern because it hurts your job security if other people can use your program?
10:53:38 <wob_jonas> shachaf "What's wrong with personifying things?" => the computers don't like when you do that
10:53:41 <cpressey> wob_jonas: It's an antipattern only in the sense that different modules define sets of exceptions that are only meaningful to them, and any time an exception crosses those boundaries, you have to "translate" it to make it meaningul
10:53:52 <shachaf> wob_jonas: You know perfectly well that's not what cpressey mean and you're not being helpful or nice when you phrase it like that.
10:54:34 <shachaf> ...That was probably an overstatement to something that was a harmless joke.
10:54:35 <cpressey> shachaf: By the part where people find this thing about Cantor space any more impossible than, say, the claim that there is no greatest even integer
10:55:18 -!- Phantom__Hoover has quit (Ping timeout: 258 seconds).
10:55:19 <cpressey> I mean, I just universally quantified over an infinite set there in claiming that, pretty spooky huh
10:55:41 <shachaf> You mean you don't see why people are confused?
10:56:05 <cpressey> Well, people are confused about a lot of things.
10:56:30 <shachaf> This is a computational question so I don't the connection to there being no greatest even integer.
10:57:12 <cpressey> A big problem here is that I don't know what a conatural is
10:57:35 <shachaf> Oh, it's an element of the one-point compactification of the naturals, if that helps.
10:57:49 <shachaf> If not: It's a monotonic function : N -> 2
10:57:52 <kmc> cpressey: do you know how inductive codata works?
10:58:14 <kmc> shachaf: there sure are a lot of ways to define the same thing, eh?
10:58:20 <shachaf> Or: It's a Turing machine that either prints some number of 1s and then halts, or keeps printing 1s forever.
10:58:30 <wob_jonas> "There are only two parties, the exists player and the forall player or whatever you call them." => I heard they were called Adam and Eve, Adam for the forall quantifiers and Eve for the exists quantifiers
10:58:48 <kmc> shachaf: but it will always print the next 1 within finite time, right?
10:59:37 <kmc> cpressey: well do you know what people mean when they say haskell has 'infinite data structures'?
10:59:47 <shachaf> i,i I guess cpressey only learned the counterexamples and not the topology
11:00:23 <cpressey> kmc: Well, I know what they *mean*, but I try not to use that term myself, if that makes sense
11:00:36 <kmc> cpressey: if you want a better term you could call them codata ;)
11:00:48 <shachaf> Haskell people are often very confusil about which things are data and which things are codata.
11:01:10 <kmc> in Haskell all 'data' structures are codata
11:01:28 <kmc> if you write data Nat = Z | S Nat
11:01:37 <kmc> then you actually defined conats
11:01:54 <kmc> because you can construct the value S (S (S (S ... to infinity
11:02:09 <cpressey> I don't see why people are surprised that you can apply one lazy thing to another lazy thing and conclude it will be true for all instances of the thing
11:02:33 <cpressey> "Every integer is either odd or even"
11:02:33 <shachaf> cpressey: Wait, which lazy thing?
11:02:46 <cpressey> If you prefer that terminology
11:03:02 <shachaf> People are confused because they can't think of an actual algorithm to compute it.
11:03:26 <shachaf> I don't think the algorithm is obvious.
11:03:52 <shachaf> (Or even the fact that it could exist.)
11:04:12 <cpressey> checking whether a total predicate holds for all elements of a set doesn't even sound like an algorithm to me, it sounds like a proof
11:04:20 <cpressey> and proofs are programs, thanks Curry, thanks Howard
11:04:43 <shachaf> Now I'm not even sure whether we're talking about the same thing.
11:05:08 <shachaf> forAll :: (Conat -> Bool) -> Bool is certainly not a proof that Bool is inhabited.
11:05:13 <lambdabot> kmc says: "Haskell is great, because Curry-Howard! Proving things in the type system. We can prove that, uh, Ints exist, unless they're ⊥."
11:05:38 <cpressey> OK, well, I'm probably talking nonsense
11:05:50 <cpressey> Still, it doesn't surprise *me*, and I'd like to know why that is
11:06:50 <shachaf> The claim is: I can write a program that takes a predicate (over the conaturals, or the Cantor set), and decides whether the predicate holds for every input.
11:07:14 <shachaf> The set is infinite, so you can't just try every input.
11:07:44 <shachaf> You're saying it's not surprising which probably means you have some model for what inputs can be exhaustively searched by an algorithm, and you think these things match that model?
11:09:06 <shachaf> (I mean, obviously it's not surprising to me now because I know how it works, but it was surprising to me until I thought about it carefully.)
11:09:30 <kmc> shachaf: I used to be a snarky little shit, eh?
11:09:30 <cpressey> I can write a proof that takes a predicate, shows that it holds for a base case, and shows that it holds for succ(x) if it holds for x, and conclude from that that it holds for all x. Does that surprise you?
11:09:34 <kmc> I mean I still do, but I used to, too.
11:09:51 <esowiki> [[Binerdy]] https://esolangs.org/w/index.php?diff=65393&oldid=49903 * YamTokTpaFa * (+84) +CATs
11:10:03 <shachaf> cpressey: Hmm, the claim I'm making holds for the conaturals (with infinity), but it certainly doesn't hold for the naturals.
11:10:21 <esowiki> [[English Binerdy]] https://esolangs.org/w/index.php?diff=65394&oldid=55887 * YamTokTpaFa * (+72)
11:10:40 <shachaf> So if the thing you're saying works for the naturals then it's probably not the thing I'm talking about.
11:10:50 <cpressey> shachaf: I'm not thinking about a thing!
11:11:15 <shachaf> OK, maybe I was extrapolating too far. Induction doesn't surprise me.
11:11:26 <shachaf> (Induction on the naturals, I mean.)
11:12:17 <esowiki> [[Darmok]] https://esolangs.org/w/index.php?diff=65395&oldid=43237 * YamTokTpaFa * (+37) +WIP +CATs
11:12:40 <esowiki> [[Forth]] https://esolangs.org/w/index.php?diff=65396&oldid=63187 * YamTokTpaFa * (+24) +CAT languages
11:13:07 <esowiki> [[Mishmash]] https://esolangs.org/w/index.php?diff=65397&oldid=54590 * YamTokTpaFa * (+9) +WIP
11:13:16 <cpressey> Cantor space may be infinite, but it has a finite description. How do you traverse an infinite thing, whether in a proof or in a program? By traversing all cases of its finite description.
11:13:51 <cpressey> That's why it doesn't surprise me.
11:14:05 <shachaf> But N also has a finite description.
11:14:09 <esowiki> [[IBNIZ]] https://esolangs.org/w/index.php?diff=65398&oldid=40608 * YamTokTpaFa * (+10)
11:14:36 <cpressey> Right, that's why I can say things like "Every integer is either odd or even" without testing every integer
11:15:21 <shachaf> OK, but you can't write a program that takes an arbitrary predicate, such as "is either odd or even", and tells you whether every natural satisfies it.
11:15:29 <shachaf> You can prove it for that specific predicate.
11:15:57 <cpressey> shachaf: I can certainly write a program that tries to prove it or refute it...
11:16:08 <shachaf> Yes, and the program might not halt.
11:16:19 <shachaf> Whereas for the Cantor set you can write the program, and it'll always halt and give you the correct answer.
11:16:42 <shachaf> (Assuming the predicate itself is total.)
11:17:11 <cpressey> The program will halt if certain conditions are met. The predicate must be total. The infinite set must have some properties that (presumably) being Cantor space gives it. Not surprising.
11:17:25 <esowiki> [[B-tapemark]] https://esolangs.org/w/index.php?diff=65399&oldid=38916 * YamTokTpaFa * (+68)
11:18:02 <cpressey> If there's something surprising, it's that being Cantor space, gives it that property.
11:18:10 <esowiki> [[Pieces]] https://esolangs.org/w/index.php?diff=65400&oldid=13796 * YamTokTpaFa * (+12)
11:18:15 <cpressey> I'm sure it doesn't hold for some other spaces.
11:18:19 <shachaf> Yes, that's the surprising thing.
11:18:34 <cpressey> But to me that's something surprising about Cantor space, not the program!
11:18:44 <esowiki> [[Hyperfunge]] https://esolangs.org/w/index.php?diff=65401&oldid=46445 * YamTokTpaFa * (+23)
11:18:48 <shachaf> I think "exhaustive search of the Cantor set is possible" is the surprising statement here.
11:19:07 <shachaf> The program shows that it's possible.
11:19:40 <shachaf> For what it's worth I still don't know exactly what the properties that make it possible are.
11:20:13 <shachaf> I know it has to do with compactness, but I'm not sure exactly what the computational content of compactness is, and how it's being used here. I only know how to write it for specific compact spaces.
11:20:43 <shachaf> I feel like "whether this fact is surprising or not" is quite a detour from the original question anyway.
11:21:03 <cpressey> Yeah, I don't know much topology, so I guess I don't officially know if it should surprise me or not?
11:21:41 <cpressey> I'm quite resigned to the fact that there are a lot of topologies with weird properties, so when someone says "Hey! Did you know that you can show X for all of Cantor space" it's not like I'm "REALLY?"
11:22:02 <cpressey> shachaf: What was the original question
11:22:33 <cpressey> shachaf: The one where you wanted to tail-call optimize Arthur and Merlin?
11:23:57 <shachaf> The Arthur-Merlin thing seems to be about computationally bounded agents whereas I was just talking about computability for now.
11:24:17 <wob_jonas> it's about one computationally bound agent, Arthur, and one unbound, Merlin
11:24:20 <cpressey> shachaf: Something like that? You wanted to flatten the conversation between two parties in... one of those things.
11:24:36 <shachaf> Yes, I'm curious about flattened conversations, sure.
11:24:54 <wob_jonas> although there are twisted versions with more than one Merlins
11:25:01 <shachaf> cpressey: Do you find it surprising that integration of computable functions on computable reals is computable?
11:27:16 <cpressey> shachaf: Ehm. Not sure. The thing that surprises me there is, you have a function and its range is computable reals and you can integrate it at all?
11:27:47 <cpressey> Isn't that, like, discontinuous?
11:28:26 <cpressey> It's a bit like saying you have a function on the rationals and you can integrate it. I suck at analysis, but I didn't think that was even valid?
11:28:32 <shachaf> Hmm, you can say it's a function that works on every real.
11:28:46 <shachaf> It can't distinguish the computable ones from the uncomputable ones, of course.
11:29:49 <wob_jonas> shachaf: I already don't understand why algebraic complex numbers form a field, despite that I was supposedly taught enough Galois theory in the university courses to have to know the proof.
11:30:01 <wob_jonas> Computable numbers are way worse than that, they have very surprising properties that are impossible to guess.
11:30:36 <wob_jonas> And like lots of different definitions that sound similar but are actually different, so you have to be careful what you use in which statement.
11:31:16 * shachaf mumbles something about the effective topos.
11:31:45 <shachaf> I feel like nothing is materially different if you just say "reals" instead. If you have an oracle for an uncomputable real, your computable function will work fine with it.
11:32:00 <Cale> wob_jonas: Wait, what's hard about those things? Where do you get stuck?
11:32:36 <Cale> Or are you just saying that you haven't thought about it recently enough to know for sure
11:33:02 <cpressey> shachaf: OK, I'll rephrase. I'm surprised that integration of *any* functions is possible *at all*.
11:33:07 <wob_jonas> Cale: for the computable reals, I definitely haven't tought much about it ever, because it seems so theoretical and I never really needed it
11:34:01 <wob_jonas> I do care a little about the practical side, as in specific algorithms that are either useful in real life or close to useful, but not the abstract stuff
11:34:03 <Cale> wob_jonas: To say that computable reals are a field is basically saying that the field operations are computable.
11:34:09 <shachaf> OK, that's reasonable enough.
11:34:50 <wob_jonas> Cale: yeah, that in particular isn't too hard, but there are other questions you can ask
11:38:42 <cpressey> shachaf: Gabriel's Horn surprises me.
11:39:12 <cpressey> I mean, I don't doubt that integration is a valid concept and all, but, damn.
11:42:05 <wob_jonas> For the algebraic numbers, I think I understood enough about that at one point (even if I didn't understand all of Galois theory), but has forgotten how it works since.
11:43:08 <wob_jonas> These days, all that stuff I hear from algebraic geometers on the internet just scares me away.
12:14:27 -!- Vorpal has quit (Ping timeout: 248 seconds).
12:43:31 -!- xkapastel has joined.
13:23:27 <cpressey> I could start talking about codata, but if I start it could just go on forever
13:24:30 <cpressey> I daresay I have distinct finitist and formalist leanings
13:42:29 <esowiki> [[Logical/Interpreter]] https://esolangs.org/w/index.php?diff=65402&oldid=53265 * YamTokTpaFa * (+30)
13:43:48 <esowiki> [[QuineLang]] https://esolangs.org/w/index.php?diff=65403&oldid=59404 * YamTokTpaFa * (+23)
14:16:21 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65404&oldid=64910 * A * (+60) /* Grin */
14:16:56 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65405&oldid=65404 * A * (+28) /* Gulp */
14:30:17 -!- unlimiter has joined.
14:38:50 -!- MDude has joined.
14:43:43 -!- unlimiter has quit (Quit: kthxbye).
14:57:19 -!- Sgeo_ has joined.
14:58:24 -!- cpressey has quit (Quit: A la prochaine.).
15:01:02 -!- Sgeo__ has quit (Ping timeout: 268 seconds).
15:07:23 -!- Sgeo__ has joined.
15:10:36 -!- Sgeo_ has quit (Ping timeout: 258 seconds).
15:19:13 -!- Sgeo has joined.
15:21:46 -!- Sgeo__ has quit (Ping timeout: 246 seconds).
15:23:13 <esowiki> [[Special:Log/newusers]] create * ZSwifty * New user account
15:23:22 -!- Sgeo_ has joined.
15:26:44 -!- Sgeo has quit (Ping timeout: 258 seconds).
15:55:54 -!- ais523 has joined.
15:56:11 -!- wob_jonas has quit (Remote host closed the connection).
15:56:21 <ais523> <cpressey> Java's attempt to build an effect system around exceptions feels like an attempt to make it more like lexical scope. Thing is, Java programmers tell me they hate it and they just end up using unchecked exceptions instead. ← this problem arises in Java almost entirely as a result of checked exceptions that you know statically can never occur, but still exist in the signature
15:59:46 <ais523> a simple example is «string.getBytes("UTF-8")» which according to the type system can throw a checked exception (because the type system can't see that "UTF-8" is a literal string and thus always names a valid character set), the checked exception would be necessary if the "UTF-8" were a string specified by the user
16:01:14 <ais523> meanwhile, «string.getBytes(Charset.forName("UTF-8"))» doesn't throw checked exceptions (because for some reason, Charset#forName uses an unchecked exception if the charset name is unrecognised)
16:02:06 <ais523> and «string.getBytes(StandardCharsets.UTF_8)» is a workaround for the whole mess that only became available fairly recently
16:02:28 <ais523> I don't think any of this is an argument against checked exceptions, but I do think it's an argument for doing constant-folding before type-checking
16:03:24 <ais523> fwiw, this issue isn't specific to checked exceptions, it happens with other forms of error handling too
16:03:47 <ais523> e.g. in Rust you need to explicitly convert errors to panics with «unwrap» in cases where you know they can't possibly happen, and yet that removes some of the static safety guarantees of the language
16:04:34 <ais523> after programming in Java seriously for months, I ended up in favour of checked exceptions (or at least, explicitly enumerated error cases) and against the way Java treates checked exceptions
16:05:50 <ais523> that said, I see very little difference between Java and Rust error handling, the only difference is a minor syntactic one (Java propagates exceptions by default and requires try…catch to convert them to return values, Rust treats errors as return values by default and requires ? to propagate them, but in either case the only difference is the syntax at the call site)
16:05:51 -!- Sgeo__ has joined.
16:09:01 -!- Sgeo_ has quit (Ping timeout: 246 seconds).
16:12:35 <HackEso> automatic squirrel feeder:Automatic squirrel feeders are just feeders in the category of automatic squirrels. Taneb invented them. \ bureaucracy:Bureaucracy (from French bureau, "burrow") is a political system in which squirrels rule the nation, and burrow their nuts. \ nutella:Nutella is a nutty substance. Taneb invented it for use in his automatic squirrel feeders. \ squirrel:A squirrel is a small nut-harvesting unit frequently deployed all over the worl
16:13:07 <HackEso> A squirrel is a small nut-harvesting unit frequently deployed all over the world. They are popular due to their usefulness in distracting dogs.
16:13:24 <Taneb> `? automatic squirrel
16:13:25 <HackEso> automatic squirrel? ¯\(°_o)/¯
16:15:14 <int-e> Taneb: I didn't expect to get *two* T-ventions.
16:19:17 <Taneb> int-e: automatic squirrel feeders were the first I believe
16:19:21 <Taneb> I hadn't seen nutella before
16:22:41 <Taneb> Well, I've seen the spread, just not the wisdom entry
16:22:50 <Taneb> I'm not a huge fan
16:23:00 <Taneb> (of the spread, the wisdom entry's OK)
16:23:31 -!- ais523 has quit (Ping timeout: 248 seconds).
16:29:46 <esowiki> [[AutoColdKey]] N https://esolangs.org/w/index.php?oldid=65406 * A * (+210) Midnight creation
16:33:13 <esowiki> [[AutoColdKey]] https://esolangs.org/w/index.php?diff=65407&oldid=65406 * A * (+123) Now it is a stub.
16:34:52 -!- Sgeo_ has joined.
16:35:45 -!- andrewtheircer has joined.
16:37:43 -!- Sgeo__ has quit (Ping timeout: 246 seconds).
16:43:16 -!- xkapastel has quit (Quit: Connection closed for inactivity).
16:45:36 -!- xylochoron[m] has quit (Read error: Connection reset by peer).
16:45:40 -!- wmww has quit (Read error: Connection reset by peer).
16:45:47 -!- ivzem[m] has quit (Remote host closed the connection).
16:45:49 -!- tswett[m] has quit (Write error: Connection reset by peer).
16:47:53 <andrewtheircer> smaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
16:53:55 -!- wmww has joined.
17:07:03 <esowiki> [[EPARM]] https://esolangs.org/w/index.php?diff=65408&oldid=16949 * YamTokTpaFa * (+24) /* More ideas */ +CAT
17:11:20 -!- xkapastel has joined.
17:12:24 -!- Sgeo_ has quit (Read error: Connection reset by peer).
17:12:50 -!- Sgeo_ has joined.
17:16:13 -!- xylochoron[m] has joined.
17:16:13 -!- tswett[m] has joined.
17:16:22 -!- ivzem[m] has joined.
17:20:43 <int-e> andrewtheircer: Look if you want to strike up a conversation here, you need to try a little harder. Drop an interesting idea (programming language or computation related preferrably), be articulate, and be prepared to wait minutes to hours for a reply (if any). What you're doing is making you come across stupid and obnoxious.
17:24:39 -!- b_jonas has joined.
17:26:38 <HackEso> olist 1174: shachaf oerjan Sgeo FireFly boily nortti b_jonas
17:28:22 <andrewtheircer> i heard this idea from another person: an eso where you can change the speed delta but not overwrite it
17:28:40 <andrewtheircer> you need to tuuuurn slowly until you get to face right
17:29:03 <andrewtheircer> the main storage of this eso *is* the speed delta (velocity)
17:30:26 <andrewtheircer> the initial tape is set to (0,0)(1,0)(0,0) where the first set of 0,0 is position and all the ones after (1,0) are speed delta deltas
17:31:36 <andrewtheircer> there is an integer called the "meta-level" of the delta you are manipulating
17:32:24 <andrewtheircer> to say again: this idea is not mine, it originated from reconcyl#4042 on the esolangs discord
17:38:19 -!- Phantom__Hoover has joined.
17:42:31 -!- andrewtheircer has quit (Remote host closed the connection).
17:44:59 -!- unlimiter has joined.
17:49:10 -!- unlimiter has quit (Client Quit).
18:24:29 -!- Sgeo__ has joined.
18:28:15 -!- unlimiter has joined.
18:28:15 -!- Sgeo_ has quit (Ping timeout: 264 seconds).
18:33:15 -!- unlimiter has quit (Quit: WeeChat 2.5).
18:40:51 -!- Sgeo_ has joined.
18:43:47 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
19:26:27 <HackEso> Morphology is the theory that you can never have enough phở. boily invented it.
19:26:38 <HackEso> The second wisdom is that wisdom can never be complete or consistent.
19:31:52 <HackEso> 57) <fungot> ehird: every set can be well-ordered. corollary: every set s has the same diagram used from famous program talisman with fnord windows to cascade, someone i would never capitalize " i"
19:52:19 -!- Phantom__Hoover has quit (Ping timeout: 246 seconds).
20:01:30 -!- Phantom__Hoover has joined.
20:12:43 -!- Lord_of_Life_ has joined.
20:15:21 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
20:15:36 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:16:52 <zzo38> Glulx has a frame pointer, but it points to an address space that you cannot read from or write into.
20:53:15 -!- xkapastel has quit (Quit: Connection closed for inactivity).
20:58:22 -!- FreeFull has joined.
21:00:37 -!- MDead has joined.
21:01:13 -!- MDude has quit (Read error: Connection reset by peer).
21:01:18 -!- MDead has changed nick to MDude.
21:30:10 -!- ivzem[m] has quit (Quit: Idle kick: User has been idle for 23+ days.).
22:05:54 -!- Sgeo_ has quit (Read error: Connection reset by peer).
22:06:22 -!- Sgeo_ has joined.
22:28:40 -!- xkapastel has joined.
22:42:21 -!- Sgeo__ has joined.
22:46:00 -!- Sgeo_ has quit (Ping timeout: 258 seconds).
22:53:33 -!- Xunie has joined.
23:36:46 <esowiki> [[Keg]] https://esolangs.org/w/index.php?diff=65409&oldid=65033 * JonoCode9374 * (+45) /* External Resources / Reference Implementation */
23:48:59 -!- unlimiter has joined.
00:16:21 -!- unlimiter has quit (Quit: WeeChat 2.5).
00:29:20 -!- b_jonas has quit (Quit: leaving).
00:30:11 -!- Phantom__Hoover has quit (Ping timeout: 244 seconds).
01:06:54 -!- unlimiter has joined.
01:08:17 -!- xkapastel has quit (Quit: Connection closed for inactivity).
01:21:31 -!- unlimiter has quit (Quit: WeeChat 2.5).
02:42:40 <fizzie> Fun fact: a bunch of speech-related programs use a timescale where the unit is 0.1 µs (or 100 ns, if you prefer), and I think that might be because it's the largest power of 10 in which both (1s / 8000) and (1s / 16000) are integers (1250 and 625, respectively), meaning at the common speech sampling rates of 8 kHz and 16 kHz sample offsets are integers as well.
03:02:32 -!- FreeFull has quit.
04:00:01 -!- Lord_of_Life has quit (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine).
04:01:50 -!- Lord_of_Life has joined.
04:07:20 -!- Sgeo_ has joined.
04:10:28 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
04:34:04 <esowiki> [[Special:Log/newusers]] create * Calamari2 * New user account
04:41:35 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65410&oldid=65331 * Calamari2 * (+220) Add greeting
04:42:36 <esowiki> [[Barely]] M https://esolangs.org/w/index.php?diff=65411&oldid=39230 * Calamari2 * (+12) Fix external links
04:43:09 <esowiki> [[Barely]] M https://esolangs.org/w/index.php?diff=65412&oldid=65411 * Calamari2 * (+0) Typo
04:43:50 <esowiki> [[MinISCule]] M https://esolangs.org/w/index.php?diff=65413&oldid=8428 * Calamari2 * (+12) Fix external links
04:45:09 <esowiki> [[Numberix]] M https://esolangs.org/w/index.php?diff=65414&oldid=43409 * Calamari2 * (+4) Fix external link
04:46:41 <esowiki> [[Hanoi Love]] M https://esolangs.org/w/index.php?diff=65415&oldid=43697 * Calamari2 * (+8) Fix external links
04:47:27 <esowiki> [[Spaghetti]] M https://esolangs.org/w/index.php?diff=65416&oldid=30465 * Calamari2 * (+4) Fix external link
04:47:59 <esowiki> [[Linguine]] M https://esolangs.org/w/index.php?diff=65417&oldid=43471 * Calamari2 * (+12) Fix external links
05:00:57 <esowiki> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=65418&oldid=65410 * Calamari * (+188)
05:01:52 <esowiki> [[EsoAPI]] M https://esolangs.org/w/index.php?diff=65419&oldid=43465 * Calamari * (+4) Fix external link
05:02:22 <esowiki> [[Bubble]] M https://esolangs.org/w/index.php?diff=65420&oldid=30445 * Calamari * (+4) Fix external link
05:14:31 <esowiki> [[User talk:Calamari]] M https://esolangs.org/w/index.php?diff=65421&oldid=64593 * Calamari * (+158)
05:37:08 <esowiki> [[Jeffry Johnston]] https://esolangs.org/w/index.php?diff=65422&oldid=30463 * A * (+22) /* See also */
05:37:20 <esowiki> [[Jeffry Johnston]] https://esolangs.org/w/index.php?diff=65423&oldid=65422 * A * (+1) /* See also */
05:58:02 -!- MDude has quit (Quit: Going offline, see ya! (www.adiirc.com)).
06:46:22 <esowiki> [[User talk:Areallycoolusername]] https://esolangs.org/w/index.php?diff=65424&oldid=64480 * JonoCode9374 * (+1497) /* String Compression */ new section
06:46:59 <esowiki> [[User talk:Areallycoolusername]] M https://esolangs.org/w/index.php?diff=65425&oldid=65424 * JonoCode9374 * (-2) /* String Compression */
07:18:21 -!- Sgeo__ has joined.
07:21:39 -!- Sgeo_ has quit (Ping timeout: 248 seconds).
07:30:20 -!- Sgeo_ has joined.
07:33:22 -!- Sgeo__ has quit (Ping timeout: 246 seconds).
07:37:28 -!- rdococ has left ("Leaving").
08:05:54 -!- Sgeo__ has joined.
08:08:43 -!- Sgeo_ has quit (Ping timeout: 246 seconds).
08:09:29 <esowiki> [[@]] https://esolangs.org/w/index.php?diff=65426&oldid=65117 * A * (+2526) /* Computational class */
08:14:59 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
08:18:16 -!- Lord_of_Life has joined.
08:58:26 -!- Sgeo_ has joined.
09:01:17 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
09:01:39 -!- wob_jonas has joined.
09:22:10 -!- andrewtheircer has joined.
09:38:47 <esowiki> [[User talk:Gamer]] https://esolangs.org/w/index.php?diff=65427&oldid=65320 * Gamer * (+29)
09:41:43 <esowiki> [[Keg]] https://esolangs.org/w/index.php?diff=65428&oldid=65409 * A * (-6) /* Truth-machine */ Originally from EdgyNerd, then I golfed it.
09:47:59 <esowiki> [[User talk:Gamer]] https://esolangs.org/w/index.php?diff=65429&oldid=65427 * Andrew3335 * (+511)
09:48:30 <esowiki> [[User talk:Gamer]] https://esolangs.org/w/index.php?diff=65430&oldid=65429 * Andrew3335 * (+6)
10:45:04 <esowiki> [[TPLHBPTBOTEW]] https://esolangs.org/w/index.php?diff=65431&oldid=59885 * Gamer * (-96) /* Commands */
10:54:32 <esowiki> [[TPLHBPTBOTEW]] https://esolangs.org/w/index.php?diff=65432&oldid=65431 * Andrew3335 * (+582)
10:59:21 <esowiki> [[TPLHBPTBOTEW]] https://esolangs.org/w/index.php?diff=65433&oldid=65432 * Andrew3335 * (-6)
11:20:43 -!- andrewtheircer has quit (Remote host closed the connection).
11:43:22 -!- Sgeo__ has joined.
11:47:01 -!- Sgeo_ has quit (Ping timeout: 244 seconds).
12:14:11 <esowiki> [[User talk:Areallycoolusername]] M https://esolangs.org/w/index.php?diff=65434&oldid=65425 * A * (+389) /* String Compression */
12:25:58 -!- APic has quit (Ping timeout: 246 seconds).
12:36:55 -!- APic has joined.
12:40:27 <esowiki> [[Bucket]] M https://esolangs.org/w/index.php?diff=65435&oldid=61797 * A * (-120) Make it look much less scary
12:48:23 -!- Sgeo_ has joined.
12:51:17 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
13:03:18 -!- Phantom__Hoover has joined.
13:03:18 -!- Phantom__Hoover has quit (Read error: Connection reset by peer).
13:17:19 <esowiki> [[User talk:Areallycoolusername]] M https://esolangs.org/w/index.php?diff=65436&oldid=65434 * A * (+261)
13:31:41 <esowiki> [[Bucket]] M https://esolangs.org/w/index.php?diff=65437&oldid=65435 * A * (+111) /* Implementation in C (provided output instructions just for debugging) */
13:31:56 <esowiki> [[Bucket]] M https://esolangs.org/w/index.php?diff=65438&oldid=65437 * A * (+0) /* Implementation in C (provided output instructions just for debugging) */
14:06:45 -!- FreeFull has joined.
14:53:40 <esowiki> [[User talk:JonoCode9374]] https://esolangs.org/w/index.php?diff=65439&oldid=64213 * Areallycoolusername * (+229)
15:04:16 -!- andrewtheircer has joined.
15:04:34 <andrewtheircer> idea: eso supporting infinite computational power, code and input and output
15:06:39 -!- atslash has quit (Quit: Leaving).
15:55:37 -!- MDude has joined.
16:27:54 -!- wob_jonas has quit (Remote host closed the connection).
16:39:21 <andrewtheircer> fun fact: september 13th, 2108 is the earliest date for any smartphone to reach one million hours
16:41:54 -!- AnotherTest has joined.
16:41:56 -!- andrewtheircer has quit (Remote host closed the connection).
16:50:39 <HackEso> U+1F937 SHRUG \ UTF-8: f0 9f a4 b7 UTF-16BE: d83edd37 Decimal: 🤷 \ 🤷 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+200D ZERO WIDTH JOINER \ UTF-8: e2 80 8d UTF-16BE: 200d Decimal: ‍ \ \ Category: Cf (Other, Format) \ Bidi: BN (Boundary Neutral) \ \ U+2642 MALE SIGN \ UTF-8: e2 99 82 UTF-16BE: 2642 Decimal: ♂ \ ♂ \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+FE0F VARIATION SELECTOR-
17:02:52 <zzo38> Is there a NNTP server that allows downloading copies of very old Usenet articles if I know the message ID of the article I wish to download (even if no article number is stored for such messages)? I received a follow-up to a (allegedly) eighteen year old article. (There are actually at least six articles leading up to it, which I have the message IDs of.)
17:06:21 <fizzie> I don't know about a NNTP server, but Google Groups (or rather, its Usenet integration) used to have a way of doing that.
17:06:33 <fizzie> Unfortunately I can't seem to figure out how to do it any more.
17:08:02 <fizzie> Oh, if you know the group the message was in, you can search for that group first, and then when you have a group open the little down arrow from the search box opens an advanced search form with "Message ID" as one of the fields.
17:14:29 -!- xkapastel has joined.
17:27:37 <zzo38> Google Groups is not work on my computer (although I have once found one link that does work, except that it seem to try to hide email addresses), and I do not have or want a account there. Also, the newsgroup it belongs to is probably rec.arts.int-fiction (it is possible, although unlikely, that a follow-up message is posted to a different newsgroup than the original was).
17:28:08 <zzo38> (Also I want to download the message into my local bystand database)
17:56:23 <zzo38> (Also, I have seen URLs linking to stuff on Google Groups, and I think a problem with it is that the URL does not include the message ID. I have seen other web sites also with messages from Usenet, and they don't have the message ID in the URL either, unfortunately.)
18:38:35 <fizzie> The Google Groups URLs don't include message IDs, one likely reason being that it's organized in terms of "topics" (threads) first. But each message has a "show original" option, which shows almost the raw message, including the Message-ID header. The one difference is that email addresses have been redacted.
18:38:48 -!- clog has quit (Ping timeout: 244 seconds).
18:39:07 <fizzie> It's an unfortunately modern-style website, though, so it's no surprise it doesn't work well.
18:41:13 <fizzie> There are some messages from rec.args.int-fiction from 2001 in Google Groups, so it might have the message(s) you're interested in. I don't think there's necessarily a way to get the message data with email addresses intact.
19:01:30 <zzo38> Is there a header that can be added to tell Google (and other archiving services) not to mangle email addresses, in case the author of the message wants it to remain intact?
19:10:23 <zzo38> (One problem is that sometimes there is the possibility that many programs will believe something to be a email address even though actually it isn't.)
19:14:11 <zzo38> Also, is there a way to access the raw message directly by a URL containing the message ID (and anything else it contains remains constant)?
19:17:25 -!- ranzinida has joined.
19:22:33 <fizzie> I think unfortunately the answer is no to both.
19:46:37 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
19:49:36 -!- Lord_of_Life has joined.
19:54:27 <zzo38> I think I figured out. First, you prefix the message ID without < and > by "http://groups.google.com/groups?selm=", and then it redirects to a URL starting with "https://groups.google.com/forum/#!msg/". Replace that prefix with "https://groups.google.com/forum/message/raw?msg=" and then the message can be accessed.
20:00:14 <zzo38> Actually, I found that it is actually a double redirect.
20:06:43 -!- lldd_ has joined.
20:13:32 -!- Lord_of_Life_ has joined.
20:15:55 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
20:16:25 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:17:03 -!- Phantom_Hoover has joined.
20:17:03 -!- Phantom_Hoover has quit (Changing host).
20:17:03 -!- Phantom_Hoover has joined.
20:26:28 -!- ranzinida has quit (Remote host closed the connection).
20:43:00 <zzo38> One possible work-around to the mangling the email addresses is to add a new header, which contains the information needed to demangle the message.
20:46:12 -!- clog has joined.
20:49:30 <zzo38> Perhaps, to add "Demangle-Head" and "Demangle-Body". For Demangle-Body, it consists of a sequence of tokens separated by white-space. For each at sign in the body of the message, take everything between it and the nearest white-space before it, and add that as a token into the header value.
20:52:12 <zzo38> For Demangle-Head, it is similar, but each token is preceded by a header name and then a colon; if there is a colon with no header name specified, then it is the same as the previously specified header name.
20:52:27 -!- heroux has quit (Ping timeout: 268 seconds).
20:53:47 <zzo38> In this way, if a message is downloaded from Google Groups or any service that performs similar mangling, the original text can be recovered.
21:14:13 -!- AnotherTest has quit (Ping timeout: 245 seconds).
21:19:17 -!- unlimiter has joined.
21:28:44 -!- lldd_ has quit (Quit: Leaving).
21:31:48 <esowiki> [[Bucket]] https://esolangs.org/w/index.php?diff=65440&oldid=65438 * Salpynx * (+1) 'Derivative' was confusing/incorrect. ('Variant' meaning clarified by the code golf contest)
21:37:18 -!- unlimiter has quit (Quit: I LOVE CATS!!!).
21:56:16 <zzo38> Perhaps, a new THREAD command should be added into NNTP, which searches for follow-ups to the specified message ID, and outputs the list of message IDs.
22:29:59 <zzo38> How long ago is the Earth spinning at (close enough to) the current rate and the other related stuff that the calendar would be usable from? That is what I would have defined the year zero as.
22:58:36 -!- unlimiter has joined.
23:13:28 -!- unlimiter has quit (Quit: mildshjgdoshgomdshqgqdsfghp).
23:44:11 -!- xkapastel has quit (Quit: Connection closed for inactivity).
23:49:03 -!- joast has quit (Quit: Leaving.).
23:58:04 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=65441&oldid=65428 * JonoCode9374 * (+111) /* See also */
00:17:12 -!- oerjan has joined.
00:24:52 <oerjan> <Taneb> Girl Genius theory: the entire thing's going to be a shaggy dog story, with Agatha, Gil, and Tarvek being unable to claim their titles due to having died in Castle Heterodyne during the Si Vales Valeo procedure <-- only tarvek really needs to worry. gil never actually died, and agatha's title is decided by the castle, which already knows and doesn't care.
00:25:55 * oerjan @tells in private, just in case
00:26:03 <HackEso> dontaskdonttelllist: quintopia myname int-e
00:27:30 <oerjan> also there's the future detective story where agatha definitely rules mechanicsburg.
01:15:26 -!- Phantom_Hoover has quit (Remote host closed the connection).
01:27:31 <zzo38> Is there something like OpenID but that does not require a web browser?
01:34:09 <zzo38> Now I am writing a document of a idea of it
01:48:32 -!- Sgeo_ has changed nick to Sgeo.
02:36:50 -!- mniip_ has joined.
02:41:07 -!- mniip has quit (Ping timeout: 620 seconds).
02:41:55 <esowiki> [[User talk:Calamari]] https://esolangs.org/w/index.php?diff=65442&oldid=65421 * Areallycoolusername * (+362) Asking Calamari for MS DOS clarification
02:44:08 -!- mniip_ has changed nick to mniip.
03:13:31 -!- xylochoron[m] has quit (*.net *.split).
03:13:34 -!- ^[ has quit (*.net *.split).
03:13:35 -!- lynn has quit (*.net *.split).
03:13:44 -!- ^[ has joined.
03:13:46 -!- lynn has joined.
03:14:47 -!- xylochoron[m] has joined.
03:15:13 -!- j-bot has quit (Ping timeout: 265 seconds).
03:33:48 <zzo38> http://zzo38computer.org/textfile/miscellaneous/openid_no_html
03:44:39 <esowiki> [[User talk:Calamari]] https://esolangs.org/w/index.php?diff=65443&oldid=65442 * Areallycoolusername * (+42) /* Issues With Page */
03:58:47 <zzo38> Oops! The rec.arts.int-fiction.mbox.zip file I found on archive.org does not quote lines beginning with "From " as it should.
04:07:06 <zzo38> At least it does not contain mangled email addresses, even though the data seems to come from Google.
04:22:03 -!- oerjan has quit (Quit: Nite).
04:31:39 <zzo38> Is it possible for a file in Linux to be both a dynamic library and also a stand-alone executable file, that it can fork/exec itself?
04:51:21 -!- adu has quit (Quit: adu).
05:25:22 -!- Sgeo_ has joined.
05:29:13 -!- Sgeo has quit (Ping timeout: 268 seconds).
06:28:26 -!- xkapastel has joined.
06:45:57 -!- heroux has joined.
06:50:34 -!- heroux has quit (Ping timeout: 246 seconds).
06:52:16 <esowiki> [[User:Gamer]] M https://esolangs.org/w/index.php?diff=65444&oldid=63564 * Gamer * (+2) /* Madbrain (Python 3) */
06:52:55 <esowiki> [[User:Gamer]] M https://esolangs.org/w/index.php?diff=65445&oldid=65444 * Gamer * (+1) /* Madbrain (Python 3) */
06:53:20 <esowiki> [[User:Gamer]] https://esolangs.org/w/index.php?diff=65446&oldid=65445 * Gamer * (-8) /* Madbrain (Python 3) */
06:54:10 <esowiki> [[User:Gamer]] https://esolangs.org/w/index.php?diff=65447&oldid=65446 * Gamer * (+6) /* Madbrain (Python 3) */
06:54:34 <esowiki> [[User:Gamer]] M https://esolangs.org/w/index.php?diff=65448&oldid=65447 * Gamer * (-1) /* Madbrain (Python 3) */
06:56:26 <zzo38> Now I wrote a program that provides a NNTP interface for downloading a single message from Google Groups if you know its message ID (the only supported command is ARTICLE with a message ID; you can't select newsgroups or do anything else), which can be used as a protocol extension for bystand. (Bystand has the ability to do NNTP communication with local programs.)
07:01:49 <Sgeo_> zzo38, write a program to convince Google to uncensor alt.hypertext so I can see Tim Berner-Lee's announcement
07:02:24 <Sgeo_> https://groups.google.com/forum/#!msg/alt.hypertext/eCTkkOoWTAY/urNMgHnS2gYJ
07:03:13 <Sgeo_> https://www.w3.org/People/Berners-Lee/1991/08/art-6484.txt
07:08:00 <Sgeo_> Apparently literally anyone can edit MDN https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP$compare?locale=en-US&to=1569093&from=1551070
07:12:04 <zzo38> I don't know how to convince Google to uncensor alt.hypertext, although if the message is readable anyways by the second URL, then you can read it anyways I think, isn't it?
07:13:55 <Sgeo_> I only found that second URL now, after I complained about Google's censorship
07:14:29 <Sgeo_> Or well, their destruction of valuable history
07:16:21 <zzo38> See if the Usenet archives on archive.org include the messages you want, maybe
07:17:02 <zzo38> (But know that some lines are not quoted properly in the mbox file.)
07:19:58 <zzo38> If you want, set up your own NNTP server with a copy of all messages you want to save.
07:23:06 <int-e> How did it go, "The price makes it a personal computer, the performance makes it a workstation, and the unit sales make it a mainframe."
07:25:46 <int-e> I don't really know what went wrong though. Not enough software?
07:41:05 -!- AnotherTest has joined.
07:42:28 <Sgeo_> int-e, what is that about, a specific computer?
07:42:35 <Sgeo_> Oh I didn't see your first line
07:46:38 <int-e> Sgeo_: That happens to me all the time. (missing context)
07:47:10 <int-e> Wow, go really hates unused things.
07:48:30 <int-e> I get the point but this is really annoying in explorative code.
07:51:47 -!- heroux has joined.
08:16:40 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
08:17:27 -!- Lord_of_Life has joined.
08:32:17 -!- andrewtheircer has joined.
08:34:55 -!- Sgeo_ has quit (Read error: Connection reset by peer).
08:35:23 -!- Sgeo_ has joined.
08:49:56 -!- andrewtheircer has quit (Remote host closed the connection).
08:51:25 -!- Sgeo_ has quit (Read error: Connection reset by peer).
08:51:50 -!- Sgeo_ has joined.
09:05:41 <int-e> shachaf: do you think http://paste.debian.net/1095332/ is a sane thing to do?
09:06:26 <int-e> (btw I'm not sure why they had to abandon the "while" keyword)
09:12:56 <int-e> merging generators of course.
09:15:59 <shachaf> Oh, you're asking whether the implementation is reasonable given the task (spawn a thread that reads from two channels and merges the values into an output channel).
09:17:22 <int-e> Partly. Partly I'm wondering whether using channels as lazy lists is sane.
09:18:07 <int-e> (I actually believe it may be sane in terms of incurred overhead, if I also use the buffering feature.)
09:18:33 <shachaf> I think that depends on your use of lazy lists.
09:19:06 <shachaf> Turning [1..n] into a channel to do an iterator thing is surely not reasonable.
09:19:58 <shachaf> Probably some uses could be OK? But they're not really the same thing.
09:26:05 <int-e> I'm toying with smooth numbers again... so a) they're not all that predictable and b) laziness comes up because I don't really know how far I will need them.
09:27:01 <int-e> So in a way I'm pondering a trade-off between boilerplate for explicit chunking and convenience.
09:28:00 <shachaf> I feel like introducing preemptive threads to emulate laziness is not a net gain.
09:28:27 <shachaf> But possibly it works for your case.
09:28:34 <shachaf> Since when are you using Go?
09:29:12 <int-e> Since today? I'm not sure "using" is the right word.
09:33:44 <int-e> interface{} ... hey, does that mean that they're fully embracing duck-typing?
09:34:29 <int-e> type Duck interface{ quack() }
09:36:25 <shachaf> Did you know Go does type-checking at runtime to generate vtables?
09:36:34 <shachaf> It does string comparison of interface method names and so on.
09:47:02 -!- xkapastel has quit (Quit: Connection closed for inactivity).
09:57:47 <shachaf> Also I'm barely keeping my eyes open so I'll go to sleep.
10:33:22 -!- Sgeo__ has joined.
10:36:56 -!- Sgeo_ has quit (Ping timeout: 268 seconds).
11:27:51 -!- Sgeo_ has joined.
11:31:25 -!- Sgeo__ has quit (Ping timeout: 276 seconds).
12:09:24 -!- Sgeo__ has joined.
12:13:01 -!- Sgeo_ has quit (Ping timeout: 276 seconds).
13:06:33 <int-e> Oh... let's define an interface... hmmm, interfaces need names... I know! Let's call the interface "Interface"! https://golang.org/pkg/sort/#Interface
13:51:19 -!- Sgeo_ has joined.
13:54:13 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
14:23:33 <int-e> 6 hours later it dawns upon me that Go doesn't have generics... which is... fascinating.
14:25:11 <int-e> The solution seems to be a) interfaces; b) a perversion of the DRY principle (to wit: "DO repeat yourself") and c) reflection. The `sort` package features all of these.
14:28:03 <int-e> (sort.Float64s, sort.Ints, sort.Strings are repetitions of boilerplate code; Slice() takes an argument of type interface{} which is akin to `void *`, and does some reflection under the hood. And there's the aforementioned "Interface" interface that is used to drive the internal sort methods.)
14:38:40 -!- diverger has joined.
14:59:10 -!- Sgeo_ has quit (Ping timeout: 244 seconds).
15:08:47 -!- Sgeo has joined.
15:10:11 <fizzie> To be fair, for anything outside the sort package the name of the "Interface" interface is "sort.Interface", which isn't *that* silly.
15:10:19 <fizzie> The lack of generics is probably the most talked-about thing of the language.
15:11:11 <fizzie> There's a draft design for Go 2.0 generics, which is not yet a proposal, but a "starting point for discussion".
15:11:11 <int-e> I now have four code snippets that sort a slice of ints and I like none of them: sort.Ints(ps), sort.IntSlice(ps).Sort(), sort.Sort(sort.IntSlice(ps)), sort.Slice(ps, func (i, j int) bool { return ps[i] < ps[j] })
15:11:43 <fizzie> The "Summary of Go Generics Discussions" document is 22 pages.
15:11:44 <int-e> Mainly because I don't see *why* I have to tell anybody that it's a slice of ints at that point.
15:12:19 <int-e> and the sort.Slice() variant is a bit too verbose.
15:14:21 <fizzie> https://go.googlesource.com/proposal/+/master/design/go2draft-generics-overview.md https://go.googlesource.com/proposal/+/master/design/go2draft-contracts.md
15:14:23 <int-e> (And the sort.Slice() variant is also not overly type-safe, I can pass anything for 'ps' and get a runtime error if it's not a slice. This is alleviated by the fact that ps is repeated in the comparison function. On the downside, ps is repeated in the comparison function.)
15:16:57 <fizzie> I don't like any of those either, but I think I've used sort.Sort(sort.IntSlice(ps)) generally.
15:17:31 -!- Sgeo has quit (Ping timeout: 268 seconds).
15:19:42 <int-e> I'm happy that func SortSlice(data []T, less func(x, y T) bool) is one of the motivating examples in the first document :)
15:20:44 <fizzie> I think I picked sort.Sort(sort.IntSlice(ps)) so that it'd look consistent with a sort.Sort(foo.OtherKindOfSlice(qs)) call nearby.
15:21:08 <fizzie> (I guess I could've added a Sort() convenience method in OtherKindOfSlice too.)
15:21:45 -!- Sgeo has joined.
15:22:45 -!- Sgeo has quit (Read error: Connection reset by peer).
15:23:02 -!- Sgeo has joined.
15:24:15 <int-e> Why is it that C provides sort() and bsearch() but no merging function.
15:25:15 <int-e> (Which I guess is why Go does the same.)
16:17:11 -!- unlimiter has joined.
16:27:28 -!- unlimiter has quit (Quit: flushed).
16:30:41 <int-e> OUCH. primes := []int{2, 3, 5, 7, 9, 2147483647}
16:33:24 <int-e> (from the go language specification)
16:33:45 <esowiki> [[PAX16 CPU]] N https://esolangs.org/w/index.php?oldid=65449 * Areallycoolusername * (+888) Created page with "The '''PAX16''' computer, is a computer that runs using the PAX processor, made by [[User: Areallycoolusername|Areallycoolusername]]. The PAX processor uses an esolang called..."
16:33:58 <esowiki> [[PAX16 CPU]] https://esolangs.org/w/index.php?diff=65450&oldid=65449 * Areallycoolusername * (-2) /* Specifics */
17:06:45 -!- xkapastel has joined.
17:09:58 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65451&oldid=64612 * Areallycoolusername * (+381)
17:12:40 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65452&oldid=65451 * Areallycoolusername * (+0) /* Html/Javascript Simplified */
17:18:20 <fizzie> Heh, I completely skipped over the 9.
17:19:17 <Sgeo> I didn't know Karsten Koch's Blue Valley was a module
17:23:52 <int-e> fizzie: yeah I do recognize that particular Mersenne prime :)
18:10:31 -!- Phantom_Hoover has joined.
18:16:34 -!- unlimiter has joined.
18:21:56 <zzo38> Do you like my idea of monads in JavaScript? I have just made one mistake, which is, that if you write "return" without writing "return yield" then it is necessary to define the value of the return, such as by writing: listMonad.return=x=>[x]; If you write "return yield" then it does not need that. (If you want it to use the .return function anyways, then you can add parentheses.)
18:26:47 <rain2> instead of monads how about delimited continuations
18:27:20 <rain2> then we don't need to write in do notation
18:43:16 <zzo38> Yes, you could use delimited continuations
18:50:10 <zzo38> Although, one of the points of the idea I wrote is that you can capture a state that you can then rewind later.
18:51:13 <zzo38> (This is not shown in the example I provided)
19:32:55 -!- grumble has quit (Quit: inside we both know what's been going on, we know the game and we're gonna play it).
19:40:00 -!- grumble has joined.
19:50:01 -!- AnotherTest has quit (Ping timeout: 246 seconds).
19:57:39 <zzo38> Also, do you know if there is a MIME type for bbcode?
19:59:32 <zzo38> (It would be helpful if you want to integrate NNTP with some web forum software. I have also seen suggested to use Markdown; this has some advantages, such as easier to read as plain text if you do not have a Markdown renderer, and also there is a MIME type for Markdown defined; however, a lot of web forum software is not using Markdown.)
20:12:26 -!- unlimiter has quit (Quit: took a pill).
20:14:11 -!- Lord_of_Life_ has joined.
20:17:39 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
20:17:42 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:20:03 -!- b_jonas has joined.
20:42:09 -!- xkapastel has quit (Quit: Connection closed for inactivity).
20:51:15 <int-e> Hmm, more small things... go has no min() and max() functions for integers either.
20:59:38 <fizzie> Yes. Maybe another odd omission somehow copied over from C?
21:04:02 -!- AnotherTest has joined.
21:17:55 -!- AnotherTest has quit (Ping timeout: 248 seconds).
21:31:48 -!- xkapastel has joined.
21:41:17 -!- atslash has joined.
21:45:15 -!- AnotherTest has joined.
21:52:10 -!- AnotherTest has quit (Ping timeout: 276 seconds).
23:00:11 -!- Phantom_Hoover has quit (Remote host closed the connection).
23:22:15 -!- b_jonas has quit (Remote host closed the connection).
00:19:05 -!- FreeFull has quit.
01:43:55 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:35:02 -!- tromp_ has joined.
02:36:31 -!- tromp has quit (Ping timeout: 252 seconds).
03:00:00 -!- Taneb has quit (Quit: I seem to have stopped.).
03:01:38 -!- Taneb has joined.
04:14:14 <zzo38> My opinion is that unusenet: URIs should be used to reference a article on Usenet and Unusenet. But, as far as I know, no software implements it.
04:45:58 <zzo38> I think that Funge-98 should include the specification for in case you do not have a unique identification for your implementation, to define a handprint value specific for that use (perhaps zero).
04:46:34 <Sgeo> I never heard of Unusenet before
04:49:23 <zzo38> Sgeo: It is not well known, but, I invented Unusenet. It is a format for newsgroup hierarchy names which are not part of Usenet, and the specification also mentions a few other things (although the stuff other than the newsgroup hierarchy names is a optional specification).
04:49:53 <zzo38> Any newsgroup name that begins with the two letters "un" followed by one or more digits and then a dot, is Unusenet.
05:09:53 <zzo38> I also starting to write a document for using Glk with Befunge 98.
06:56:21 <int-e> . o O ( I can't type "buf". It almost always comes out as "bug" at first. )
07:00:05 <esowiki> [[FAKE]] N https://esolangs.org/w/index.php?oldid=65453 * Argv0 * (+3048) Creation of the page
07:03:02 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=65454&oldid=65382 * Argv0 * (+11) Added FAKE
07:13:12 <esowiki> [[Keg]] https://esolangs.org/w/index.php?diff=65455&oldid=65441 * JonoCode9374 * (+748) /* Command Glossary */
07:34:13 <zzo38> (If you wish to add a NNTP which isn't Usenet, please use Unusenet to assign the newsgroup name rather than assigning it arbitrarily, if possible.)
07:36:50 -!- AnotherTest has joined.
07:37:32 <shachaf> int-e: If only all my bugs were so kind as to identify themselves like that.
07:38:14 <shachaf> zzo38: What if it's a number of digits larger than the number of atoms in the universe?
07:41:06 <int-e> shachaf: Btw, I like some aspects of Go. The slices are pretty neat. And I may also somewhat like the receiver style OO.
07:43:39 <int-e> I miss generics and overloaded operators (bignum code looks so ugly...)
07:50:50 -!- Sgeo_ has joined.
07:53:47 -!- Sgeo has quit (Ping timeout: 245 seconds).
08:03:18 <shachaf> I think there are lots of nice things about Go.
08:03:56 <shachaf> I wonder whether to prefer "x.f(y)" over "f(x, y)"
08:04:17 <shachaf> I think the main benefit is that f goes in a special namespace rather than the global one.
08:04:34 <shachaf> Even if you have function overloading those are pretty different.
08:16:49 -!- Lord_of_Life has quit (Ping timeout: 276 seconds).
08:20:04 -!- Lord_of_Life has joined.
08:36:18 -!- AnotherTest_ has joined.
08:36:36 -!- AnotherTest has quit (Ping timeout: 268 seconds).
08:36:36 -!- AnotherTest_ has changed nick to AnotherTest.
08:42:39 -!- AnotherTest has quit (*.net *.split).
08:46:07 -!- AnotherTest has joined.
08:46:27 -!- Sgeo_ has quit (Ping timeout: 248 seconds).
08:50:43 -!- AnotherTest has quit (Ping timeout: 248 seconds).
08:51:49 -!- AnotherTest has joined.
08:56:17 -!- AnotherTest has quit (Ping timeout: 245 seconds).
08:57:35 -!- AnotherTest has joined.
09:01:42 -!- AnotherTest has quit (Ping timeout: 245 seconds).
09:05:51 -!- AnotherTest has joined.
09:16:39 <int-e> Oh well. My smooth number approximator in Go works.
09:34:09 <int-e> shachaf: in the end I did not use the goroutines-as-generators idea, the overhead was way too big for what I intended to do
09:34:09 -!- AnotherTest has quit (Ping timeout: 252 seconds).
09:35:58 <shachaf> I thought you said something about not caring about overhead.
09:36:27 <int-e> well millions of goroutines with 2k stack space each...
09:36:34 <int-e> ...I ran out of memory
09:36:52 <int-e> And I tend to care about that.
09:38:58 <int-e> shachaf: http://paste.debian.net/1095429/ if you're curious (no particular reason why you should be)
09:42:50 -!- wob_jonas has joined.
09:44:49 -!- AnotherTest has joined.
09:45:45 <int-e> It's about as fast as my Haskell code but it uses far less memory (the comparison is unfair though; the Haskell code does a lot of implicit bookkeeping for producing a lazy list of smooth numbers in increasing order, whereas the Go code embraces mutability instead for a similar effect.)
09:47:25 <wob_jonas> int-e: yeah, I know, I still have to do a better search
09:47:28 <int-e> wob_jonas: For fun, 11111111111111111051649690525458095629710973775872 is a decent 103-smooth lower approximation of 10^50/9.
09:47:46 <wob_jonas> [ try 11111111111111111051649690525458095629710973775872x
09:48:19 <wob_jonas> int-e: also, I'll probably spread this task in forums other than #esoteric, because it's a nice one
09:50:12 <wob_jonas> The scientist from https://www.xkcd.com/585/ return, in https://www.questionablecontent.net/view.php?comic=4066 of all places
09:50:38 <int-e> Anyway this made a surprisingly nice target for learning some Go basics.
09:53:48 <wob_jonas> int-e: are you writing the search program such that it is parallel over multiple cpu cores, or will be in a future version?
09:55:39 -!- AnotherTest has quit (Quit: ZNC - http://znc.in).
09:55:40 <wob_jonas> it doesn't need to be multi-threaded for that, you can split the search space and run multiple processes, possibly mmapping a common read-only table
09:55:50 -!- AnotherTest has joined.
09:56:17 <int-e> There already is a top-level loop that re-runs the same kind of search with slightly different parameters.
09:57:18 <wob_jonas> int-e: right, but in parallel or only in sequence?
09:57:26 <wob_jonas> if it's in parallel, then I assume it uses multiple cpu cores
09:57:35 <int-e> In sequence, and I'm not inclined to change that.
09:57:41 <wob_jonas> (unless you're like running it on a GPU or multiple hosts or something)
09:58:07 <wob_jonas> I'll probably run multiple in parallel, because the algorithm I'm using is eash to modify to do that
09:58:11 <int-e> Even though it would be ridiculously easy, at least locally (just spawn a "goroutine" for each task).
09:59:20 <int-e> The program is chugging away at 140% CPU usage actually. (Parallel GC, I guess.)
10:00:03 -!- AnotherTest has quit (Ping timeout: 245 seconds).
10:00:22 <int-e> Go is. But honestly I don't expect to see any improvement.
10:00:35 <wob_jonas> oh right, it doesn't know that it doesn't need to gc
10:01:28 <int-e> (In the 80 minutes that this program is running, it has found 11111111111111111051649690525458095629710973775872 36 times and 11111111111111111215673466122483207680856045806875 4 times. The Haskell version has found 11111111111111111215673466122483207680856045806875 about 80 times.)
10:01:53 <int-e> (Using way more CPU time, I think I was up to 19 hours.)
10:02:26 <int-e> wob_jonas: It does need GC actually... plenty of fresh big nums are produced and most of them are discarded
10:05:17 -!- AnotherTest has joined.
10:05:54 <int-e> (finding the same result over and over indicates that the approach is hitting its limit. So /probably/ we either have an optimum or the optimum is hard to find (there are such hard-to-find smooth numbers, but explaining what they are would give away my approach))
10:08:29 <wob_jonas> int-e: my current approach searches such solutions that don't have many large prime factors, and it can actually exhaust those and finds every solution exactly once. but what "not too many large prime factors" means depends on how fast I'll make the program, so I can cover a larger space if I make the program faster
10:11:47 -!- AnotherTest has quit (Ping timeout: 248 seconds).
10:11:51 <wob_jonas> I've been considering other ways to search, but I haven't considered any that finds the same solution multiple times, except from where I restart the program with different parameters
10:12:23 -!- AnotherTest has joined.
10:13:47 <wob_jonas> I did consider searches that miss some unlucky solutions though
10:14:03 <wob_jonas> unlucky in ways other than having more than a few large prime factors
10:25:54 <int-e> Hmm let's give 10^200/9 a try. How bad could it be?
10:28:26 <int-e> (I just want to see whether this also finds the same solutions over and over again.)
11:16:44 -!- AnotherTest has quit (Ping timeout: 272 seconds).
11:37:38 -!- AnotherTest has joined.
11:42:52 -!- AnotherTest has quit (Ping timeout: 276 seconds).
11:54:20 -!- AnotherTest has joined.
11:58:52 -!- AnotherTest has quit (Ping timeout: 268 seconds).
12:01:45 <esowiki> [[Letters++]] N https://esolangs.org/w/index.php?oldid=65456 * Saka * (+2675) Created page with "'''NOTE: WORK IN PROGRESS PAGE. WILL IMPROVE AS TIME GOES ON... hopefully...'''<br> '''Letters++''' is an esolang created by [[User:Saka]], that is made of, as the name sugges..."
12:09:49 -!- AnotherTest has joined.
12:10:47 <esowiki> [[Letters++]] https://esolangs.org/w/index.php?diff=65457&oldid=65456 * Saka * (+69)
12:13:41 -!- glowcoil has quit (Remote host closed the connection).
12:14:02 -!- glowcoil has joined.
12:14:18 -!- AnotherTest has quit (Ping timeout: 244 seconds).
12:14:29 -!- AnotherTest has joined.
12:20:27 <int-e> wob_jonas: http://paste.debian.net/1095448/ is where the program is after 2 hours, and it has not repeated itself (much) yet.
12:27:39 -!- AnotherTest has quit (Ping timeout: 264 seconds).
12:28:09 * int-e should probably stop bragging about this.
12:28:45 <wob_jonas> int-e: why does that paste have a row of ones?
12:29:23 -!- AnotherTest has joined.
12:29:25 <int-e> wob_jonas: because that's how I compare to the target number
12:29:30 <int-e> put it in the middle :)
12:30:02 <wob_jonas> I instead print their difference in exponential format
12:31:30 <wob_jonas> like "bestprod=11111111111111158344848599503479968356777700860000, diff=4.723E+34," and there's more after that line that tell about where it is in the search space
12:39:40 <esowiki> [[User:Dtuser1337]] N https://esolangs.org/w/index.php?oldid=65458 * Dtuser1337 * (+11) oof
13:13:51 -!- AnotherTest has quit (Ping timeout: 264 seconds).
13:26:15 <wob_jonas> I should make the next version print the full factorization
13:47:09 -!- AnotherTest has joined.
13:53:09 -!- AnotherTest has quit (Ping timeout: 250 seconds).
13:55:39 -!- joast has joined.
14:02:15 -!- AnotherTest has joined.
14:12:19 -!- AnotherTest has quit (Ping timeout: 248 seconds).
14:14:39 -!- AnotherTest has joined.
14:22:51 -!- AnotherTest has quit (Ping timeout: 264 seconds).
14:26:25 -!- xkapastel has joined.
14:27:48 -!- AnotherTest has joined.
14:28:34 <wob_jonas> Forced Fruition is from the Lorwyn set? that makes so much sense actually. I thought it was an older card than that, but it really suits Lorwyn's mood
14:32:15 -!- AnotherTest has quit (Ping timeout: 244 seconds).
14:32:49 -!- AnotherTest has joined.
14:42:34 -!- AnotherTest has quit (Ping timeout: 272 seconds).
14:43:00 <esowiki> [[Powder]] https://esolangs.org/w/index.php?diff=65459&oldid=60758 * Areallycoolusername * (+97) /* Documentation */
14:43:15 -!- AnotherTest has joined.
14:44:02 <esowiki> [[Powder]] https://esolangs.org/w/index.php?diff=65460&oldid=65459 * Areallycoolusername * (+21) Typo
14:44:55 <esowiki> [[Powder]] https://esolangs.org/w/index.php?diff=65461&oldid=65460 * Areallycoolusername * (-34) /* Documentation */
14:47:39 -!- AnotherTest has quit (Ping timeout: 252 seconds).
14:49:17 -!- AnotherTest has joined.
14:54:44 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65462&oldid=65390 * Areallycoolusername * (+701) Re: A language defined by its implementation
14:55:26 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65463&oldid=65462 * Areallycoolusername * (+22) /* Re: Your Comment On My Github Pull Request */
14:58:39 -!- ARCUN has joined.
14:59:27 -!- AnotherTest has quit (Ping timeout: 264 seconds).
14:59:31 <ARCUN> Is Objective-C really worthwhile to learn? I've noticed that it's just C, with some salt
15:00:15 <ARCUN> Im not trying to go into IOS development, I just wanted to learn a new language
15:00:50 -!- AnotherTest has joined.
15:02:55 -!- ARCUN has quit (Remote host closed the connection).
15:03:41 -!- ARCUN has joined.
15:11:30 <ARCUN> I've realized that almost all programs in c, if the headingovernment is replaced with "#import <Foundation/Foundation.h>", it will most likely result in the same function.
15:12:04 <ARCUN> What exactly was Apple thinking when they made a C copy?
15:13:29 -!- ARCUN has quit (Remote host closed the connection).
15:23:57 -!- AnotherTest has quit (Ping timeout: 252 seconds).
15:27:13 -!- AnotherTest has joined.
15:31:00 -!- AnotherTest_ has joined.
15:31:11 -!- AnotherTest has quit (Client Quit).
15:31:12 -!- AnotherTest_ has changed nick to AnotherTest.
15:35:27 -!- AnotherTest has quit (Ping timeout: 245 seconds).
15:36:53 -!- wob_jonas has quit (Remote host closed the connection).
15:38:08 -!- AnotherTest has joined.
15:39:24 <Taneb> They were probably thinking "I don't really want to write Java or C++"
15:42:44 <rain2> rust is a bad language
15:44:44 <myname> rust prevents you from shooting yourself in the foot. i like that in a language.
15:46:01 <myname> also, it is an awesome low-level language to write in. we wrote a small OS in university and had a way more comfortable environment than the C people
15:49:10 <myname> like, you just redefine panic! and get runtime errors shown with filename and line number. that would be impossible to do in C if you use any third party library
15:51:09 <myname> also, writing ones own free is so nice since you don't need anybookkeeping for how many memory you need to free at a given location
15:58:59 -!- AnotherTest has quit (Ping timeout: 248 seconds).
15:59:23 -!- Sgeo has joined.
16:09:55 -!- Sgeo_ has joined.
16:10:14 <zzo38> shachaf: The number of digits after "un" in Unusenet won't be larger than the number of atoms in the universe, because, the number indicated after the letters "un" is either zero or the number of components in a domain name.
16:13:16 -!- Sgeo has quit (Ping timeout: 246 seconds).
16:13:17 -!- AnotherTest has joined.
16:22:32 -!- AnotherTest has quit (Ping timeout: 245 seconds).
16:24:18 -!- AnotherTest has joined.
16:32:38 -!- AnotherTest has quit (Ping timeout: 244 seconds).
16:40:48 -!- b_jonas has joined.
16:51:23 -!- AnotherTest has joined.
17:19:13 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=65464&oldid=63754 * Gamer * (-39)
17:20:59 -!- Sgeo__ has joined.
17:24:33 -!- Sgeo_ has quit (Ping timeout: 258 seconds).
17:31:19 <esowiki> [[Compressed Malbolge]] N https://esolangs.org/w/index.php?oldid=65465 * Palaiologos * (+600) Created page with "Compressed Malbolge, made by [[User:Palaiologos]] in 2019, is a compressed variant for [[malbolge unshackled]], designed to fit my large blobs inside [https://codegolf.stackex..."
17:31:47 <esowiki> [[Compressed Malbolge]] https://esolangs.org/w/index.php?diff=65466&oldid=65465 * Palaiologos * (+0)
17:41:01 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65467&oldid=65454 * Palaiologos * (+26) Add Compressed Malbolge
17:44:30 <int-e> . o O ( 648000 parsec = 0 km? )
17:50:37 <int-e> What did they mean by "Apple made a C copy"? Swift? Because if this is about Objective C, Apple didn't create the language... they endorsed it (probably the NeXT folks had some influence).
17:52:50 -!- FreeFull has joined.
17:56:26 <j4cbo> also a lot of objc’s weirdness is because it was designed as a *strict* superset of C
18:55:07 -!- zzo38 has quit (Ping timeout: 268 seconds).
19:08:26 -!- Sgeo__ has quit (Read error: Connection reset by peer).
19:08:52 -!- Sgeo__ has joined.
19:18:41 <HackEso> Moo is the sound made by a cow as it freezes.
19:39:42 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65468&oldid=65463 * Areallycoolusername * (+0) /* Re: Your Comment On My Github Pull Request */
19:45:17 <esowiki> [[User talk:JonoCode9374]] https://esolangs.org/w/index.php?diff=65469&oldid=65439 * Areallycoolusername * (+198)
20:00:31 -!- Phantom_Hoover has joined.
20:11:59 -!- andrewtheircer has joined.
20:12:41 -!- lldd_ has joined.
20:15:23 -!- Lord_of_Life_ has joined.
20:18:25 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
20:18:39 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:29:38 -!- AnotherTest has quit (Ping timeout: 272 seconds).
20:45:43 -!- andrewtheircer has quit (Remote host closed the connection).
20:47:53 <HackEso> http://zzo38computer.org/textfile/miscellaneous/magic_card/cards.txt
20:48:00 <HackEso> zzo38cards are at http://zzo38computer.org/textfile/miscellaneous/magic_card/cards.txt
20:49:10 -!- lldd_ has quit (Quit: Leaving).
21:25:56 -!- Sgeo_ has joined.
21:29:48 -!- Sgeo__ has quit (Ping timeout: 272 seconds).
21:33:12 <esowiki> [[User talk:JonoCode9374]] https://esolangs.org/w/index.php?diff=65470&oldid=65469 * JonoCode9374 * (+212)
22:21:25 -!- Sgeo__ has joined.
22:24:29 -!- Sgeo_ has quit (Ping timeout: 244 seconds).
22:43:12 -!- b_jonas has quit (Quit: leaving).
22:48:53 -!- Phantom_Hoover has quit (Quit: Leaving).
23:36:10 -!- xkapastel has quit (Quit: Connection closed for inactivity).
23:37:08 -!- xkapastel has joined.
01:28:22 -!- joast has quit (Ping timeout: 245 seconds).
02:18:08 -!- adu has joined.
03:06:10 -!- xkapastel has quit (Quit: Connection closed for inactivity).
04:09:21 -!- Sgeo_ has joined.
04:13:12 -!- Sgeo__ has quit (Ping timeout: 268 seconds).
04:43:55 -!- Sgeo__ has joined.
04:46:49 -!- Sgeo_ has quit (Ping timeout: 246 seconds).
04:50:28 -!- FreeFull has quit.
05:03:31 <esowiki> [[Keg]] https://esolangs.org/w/index.php?diff=65471&oldid=65455 * A * (+36) /* Extended command glossary */ Invented shorter name
05:35:57 -!- GeekDude has quit (Ping timeout: 258 seconds).
05:46:25 -!- GeekDude has joined.
06:06:03 -!- moei has joined.
08:18:48 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:20:16 -!- Lord_of_Life has joined.
08:32:25 -!- john_metcalf has joined.
09:43:56 -!- AnotherTest has joined.
11:38:04 -!- AnotherTest has quit (Ping timeout: 246 seconds).
13:29:36 -!- atriq has joined.
13:30:34 -!- Taneb has quit (Read error: Connection reset by peer).
13:35:04 -!- atriq has changed nick to Taneb.
13:39:58 -!- joast has joined.
13:44:45 <esowiki> [[Hello++++]] https://esolangs.org/w/index.php?diff=65472&oldid=56982 * Gamer * (+32)
13:45:04 <esowiki> [[Hello++++]] M https://esolangs.org/w/index.php?diff=65473&oldid=65472 * Gamer * (+2) /* Interpreters */
14:18:56 -!- Sgeo__ has quit (Read error: Connection reset by peer).
14:19:24 -!- Sgeo__ has joined.
14:33:50 -!- xkapastel has joined.
14:54:22 -!- Sgeo_ has joined.
14:54:53 -!- cpressey has joined.
14:55:57 <Taneb> What is your new esolang.
14:56:02 <cpressey> https://gist.github.com/cpressey/2e0cc1b07b716a7793ba2d674fa8bee9
14:56:12 <cpressey> It's a second-order concatenative language.
14:56:40 <cpressey> It's probably not Turing-complete.
14:57:34 -!- Sgeo__ has quit (Ping timeout: 246 seconds).
15:03:14 <int-e> cpressey: so the type is ([Int] -> [Int]) -> ([Int] -> [Int])?
15:03:29 * int-e is trying to get the gist without reading the whole thing
15:04:31 <cpressey> int-e: That's correct (unbounded Int to be clear)
15:05:25 <int-e> > let i = (.) (1:); s = (.) (\(a:b:ss) -> (a-b):ss) in (s . s . i) id []
15:05:27 <lambdabot> *Exception: <interactive>:3:28-48: Non-exhaustive patterns in lambda
15:05:30 <int-e> > let i = (.) (1:); s = (.) (\(a:b:ss) -> (a-b):ss) in (s . i . i) id []
15:14:12 -!- wob_jonas has joined.
15:16:17 <wob_jonas> cpressey: is this a release or merely an escape?
15:16:27 <int-e> cpressey: so... http://paste.debian.net/1095634/ ?
15:18:33 <wob_jonas> cpressey: I don't understand. why wouldn't second order functions be enough for turing-completeness? you can just have second order functions that implement a while loop.
15:19:47 <wob_jonas> oh, you want the second order to be a concatenative language too
15:21:04 <int-e> cpressey: same code, a few more type signatures: http://paste.debian.net/1095635/
15:21:26 <wob_jonas> cpressey: could you perhaps translate Blindfolded Arithmetic into such a thing? each ordinary instruction of Blindfolded arithmetic is a plain function that treats a fixed-size top part of the stack as the register file, and you need a single second order function to turn the whole thing into a loop
15:21:36 <wob_jonas> you'd have to change the exit condition, but that isn't much of a problem
15:22:37 <int-e> oh I missed the pop operation.
15:23:35 <cpressey> int-e: Your code looks not dissimilar to mine
15:23:58 <int-e> and I got the while wrong. Hmm.
15:24:36 <cpressey> wob_jonas: The last few paragraphs try to talk about why even that is difficult (how do you select the instruction, if all you have are strictly-singly-nested loops?)
15:24:41 <wob_jonas> and note that you don't even need the hard part of Blindfolded arithmetic, because you can just have built-in conditinoal functions
15:25:04 <int-e> cpressey: so here's another version: http://paste.debian.net/1095636/
15:25:10 <wob_jonas> cpressey: that's the part that doesn't matter here, because you can have value conditional (not code conditional) instructions built into your language as primitives
15:26:22 <wob_jonas> basically you translate an ordinary program to an explicit instruction pointer and a big loop that blindly loops around all instructions of the original program, but only stores the results of those instructions if the program counter points to that particular instruction
15:26:26 <int-e> cpressey: funny how much clearer that makes the language to my brain :P
15:26:50 <int-e> cpressey: (of course the point isn't so much the code itself as the exercise of writing it)
15:26:56 <wob_jonas> when the program counter points to somewhere else, you compute the result and ignore it. it's inefficient, but works.
15:28:43 <cpressey> Built-in conditionals might work, but seem a bit like cheating.
15:28:52 <cpressey> Alas, I must be off. A la prochaine.
15:28:54 -!- cpressey has quit (Quit: WeeChat 1.4).
15:29:32 <wob_jonas> well, if you don't want built-in conditionals, then you have to look at how you can program Blindfolded arithmetic.
15:33:00 -!- wob_jonas has quit (Remote host closed the connection).
16:22:17 -!- john_metcalf has quit (Quit: john_metcalf).
16:39:06 -!- b_jonas has joined.
17:03:15 -!- FreeFull has joined.
17:48:41 <esowiki> [[Special:Log/newusers]] create * Redwolf10105 * New user account
17:50:44 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65474&oldid=65418 * Redwolf10105 * (+161) /* Introductions */
18:36:34 <esowiki> [[Bootstrapping]] N https://esolangs.org/w/index.php?oldid=65475 * Lucas * (+23) Redirecting to [[Bootstrap]]
18:40:36 <esowiki> [[Bootstrap]] https://esolangs.org/w/index.php?diff=65476&oldid=61778 * Lucas * (+66) Link to [[Wikipedia:C (programming language)|C at Wikipedia]]
18:46:09 -!- user24 has joined.
18:46:43 -!- user24 has quit (Remote host closed the connection).
18:49:50 <esowiki> [[Fusion Tag]] M https://esolangs.org/w/index.php?diff=65477&oldid=57100 * Lucas * (+4) Link to [[bootstrap]]
18:50:12 <esowiki> [[MUMON]] M https://esolangs.org/w/index.php?diff=65478&oldid=12083 * Lucas * (+4) Link to [[bootstrap]]
18:52:02 <esowiki> [[Pipe]] N https://esolangs.org/w/index.php?oldid=65479 * Redwolf10105 * (+5141) Created page with "Pipe is a language designed by Programming Puzzles and Code-Golf user RedwolfPrograms. Nonnegative integers can be stored either in a stack or in a value known as the pipe. Pu..."
19:03:20 -!- xkapastel has quit (Quit: Connection closed for inactivity).
19:20:05 <int-e> @tell cpressey http://paste.debian.net/1095661/ has an example of a tag system in Wagon. (This generalizes to arbitrary tag systems.) It uses two nested loops. It may be possible to get away with a single loop, actually.
19:35:41 <esowiki> [[Special:Log/newusers]] create * CrispyPin * New user account
19:38:48 -!- AnotherTest has joined.
19:42:24 -!- lldd_ has joined.
19:43:22 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65480&oldid=65474 * CrispyPin * (+293)
20:08:10 <HackEso> smlist: shachaf monqy elliott mnoqy Cale
20:18:47 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:22:15 -!- xkapastel has joined.
20:23:34 -!- Lord_of_Life has joined.
20:52:59 -!- lldd_ has quit (Quit: Leaving).
20:54:32 -!- AnotherTest has quit (Ping timeout: 272 seconds).
22:08:46 -!- b_jonas has quit (Ping timeout: 246 seconds).
22:10:05 -!- b_jonas has joined.
22:42:42 <int-e> @tell cpressey One more update for Wagon, now with an actual translation from tag systems and more comments: http://paste.debian.net/1095671/
23:04:38 -!- moei has quit (Quit: Leaving...).
00:13:51 -!- FreeFull has quit.
00:25:52 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
00:29:43 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65481&oldid=65468 * Areallycoolusername * (+414)
00:31:46 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65482&oldid=65481 * Areallycoolusername * (+320) /* Re: Your Comment On My Github Pull Request */
00:39:33 -!- Sgeo has joined.
00:50:15 -!- ARCUN has joined.
00:50:43 <ARCUN> Does anyone know how I can aquire an original Commodore 64?
00:51:41 <Hooloovo0> I assume you're looking for it on the cheap?
00:52:15 <Hooloovo0> I'm not really sure... ebay is probably not your best bet for that... not sure what is
00:52:34 <Hooloovo0> it's not like it's an extremely rare machine, though
00:53:20 <ARCUN> I might ask cpressey. I bet he would know, as he already has one
00:56:01 -!- ARCUN has quit (Remote host closed the connection).
01:32:30 <esowiki> [[ABC]] M https://esolangs.org/w/index.php?diff=65483&oldid=63966 * Dtuser1337 * (-3) fixing the code in hello world
01:37:19 -!- tromp_ has quit (Ping timeout: 258 seconds).
01:51:56 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:40:20 <esowiki> [[Deadfish 2]] https://esolangs.org/w/index.php?diff=65484&oldid=63614 * Dtuser1337 * (+15)
02:40:38 <esowiki> [[Deadfish 2]] https://esolangs.org/w/index.php?diff=65485&oldid=65484 * Dtuser1337 * (-15) Undo revision 65484 by [[Special:Contributions/Dtuser1337|Dtuser1337]] ([[User talk:Dtuser1337|talk]])
02:41:04 <esowiki> [[Deadfish 2]] https://esolangs.org/w/index.php?diff=65486&oldid=65485 * Dtuser1337 * (+23)
02:41:15 <esowiki> [[Deadfish 2]] https://esolangs.org/w/index.php?diff=65487&oldid=65486 * Dtuser1337 * (+1)
02:43:20 <esowiki> [[ABC]] https://esolangs.org/w/index.php?diff=65488&oldid=65483 * Dtuser1337 * (+6) much better, i guess?
02:45:02 <esowiki> [[ABC]] https://esolangs.org/w/index.php?diff=65489&oldid=65488 * Dtuser1337 * (+13) /* Discussions */
02:49:18 -!- tromp has joined.
02:54:57 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65490&oldid=65452 * Dtuser1337 * (-1) /* Lua */
03:08:30 -!- laerling has quit (Quit: ZNC - https://znc.in).
03:08:47 -!- laerling has joined.
03:11:05 <esowiki> [[Deadfish 2]] https://esolangs.org/w/index.php?diff=65491&oldid=65487 * Dtuser1337 * (+43)
03:12:23 <esowiki> [[ABC]] https://esolangs.org/w/index.php?diff=65492&oldid=65489 * Dtuser1337 * (+43)
04:50:06 -!- Sgeo has quit (Read error: Connection reset by peer).
04:50:34 -!- Sgeo has joined.
07:11:49 -!- tromp has quit (Read error: Connection reset by peer).
07:12:10 -!- tromp has joined.
07:41:02 -!- Sgeo_ has joined.
07:44:12 -!- Sgeo has quit (Ping timeout: 245 seconds).
07:48:07 -!- Sgeo__ has joined.
07:51:43 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
07:56:22 -!- cpressey has joined.
08:02:18 <int-e> controversial currency?
08:02:28 <HackEso> The password of the month is surprising.
08:02:42 <cpressey> I would have guess that it's the categorical dual of ncurrency.
08:03:11 <int-e> that's too categorical for me this early in the morning
08:04:09 <HackEso> block device:Block devices are a concession made in Unix to make raw hard disks and magnetic tape have a similar interface to regular files and terminals. Since magnetic tapes can't write individual bytes, only entire blocks, the interface isn't exactly the same, thus the dreaded dd obs= option was born. \ comonad:Comonads are just monads in the dual category. They are hard to get into. \ elrond:Elrond is a rogue program originally created to police the Ma
08:04:46 <int-e> Hah I didn't expect "individual".
08:07:40 <myname> the password of the month reminds me of a situation i had during apprenticeship. i needed to decide for a password and somebody said "i am going to type anything" and i said "brilliant. out new password will be 'anything'"
08:07:42 <HackEso> 2/3:he Matrix, eventually gaining increased individuality and becoming a threat to the Machines themselves. \ nundrum:A nundrum is the categorical dual of a conundrum: a problem whose solution is useless. \ palindrome:A palindrome is a word that remains the same if you take it to the mirror dimension, and then take each individual letter back to the normal dimension separately. \ sober space:Sober spaces are the dual of Stoned spaces. Taneb invented them.
08:07:57 <HackEso> 3/3: \ splay:Splay is a painful pastime that is dual to cosplay and the supersymmetric partner of ordinary play. Recuperation, when even possible, may require wearing a stume.
08:11:12 <shachaf> int-e: Do you not even like adjunctions?
08:13:58 <HackEso> 1/1:pikachu:Pikachu is a universal quantifier for Chu spaces. \ universal property:Universal properties are the best.
08:14:05 <cpressey> The wiki has a link to the IRC channel, which contains its own wiki
08:16:02 <shachaf> What would the existential quantifier for Chu spaces be?
08:17:51 <cpressey> Gesundheit. Because it's a witness to a Chu.
08:18:53 <b_jonas> one of those is a b_jonaswisdom too
08:19:10 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
08:20:28 <shachaf> Presumably it's //block device//
08:21:28 -!- Lord_of_Life has joined.
08:37:26 -!- b_jonas has quit (Quit: leaving).
08:44:05 <cpressey> shachaf: I read your writeup about error handling. The thing it reminded me the most of, I guess, is Haskell's Data.Either, especially how can be used as a monad, to make it "flat".
08:46:01 <int-e> lambdabot: did you nudge cpressey about my Wagon efforts? ;-)
08:48:31 <cpressey> int-e: Ah yes it did. My fault for not knowing how my IRC client works.
08:50:24 <cpressey> int-e: Very cool. I'll have to test it out when I get a moment.
08:52:30 <shachaf> cpressey: Yes, though I feel like monads don't quite deliver on their promise for this sort of thing.
08:52:40 <shachaf> For example monad transformers are a mess.
08:53:44 <shachaf> Haskell functions also don't have an implicit place for "return" to be lexically bound to like e.g. C functions.
08:53:58 <shachaf> So instead it behaves dynamically bound like exceptions.
08:58:11 <cpressey> *brow furrows* I think you want "return" to be dynamically bound, otherwise, you can only call the function from one place? I must be misunderstanding you.
08:59:05 <shachaf> Hmm, I guess the thing I'm talking about is something in between.
08:59:06 <int-e> we're in a bind and I don't know what it is
08:59:19 <shachaf> It has to do with a thing I haven't figured out yet.
08:59:42 <int-e> (I don't know what you mean by "dynamically bound" here)
08:59:47 <shachaf> What I mean is: When you see the keyword "return", you can look at the program statically and figure out where it'll jump to.
08:59:51 -!- mniip has quit (Quit: This page is intentionally left blank.).
09:00:13 <shachaf> Or the compiler can do it.
09:00:49 <int-e> 'return' is as dynamic as you get in C... the function could be called from anywhere.
09:01:01 <shachaf> Oh, I just mean you can see which block it returns from.
09:01:07 -!- mniip has joined.
09:01:19 <shachaf> int foo() { if (...) return 0; ... } -- you can tell that that return returns from foo.
09:01:28 <shachaf> Whereas "Left 0" could be going anywhere.
09:01:37 -!- AnotherTest has joined.
09:01:52 <shachaf> Maybe this isn't really fair to say, though.
09:03:11 <int-e> Left 0 >> ... will end up inside ... "next", for some value of "next".
09:03:29 <cpressey> shachaf: You can find the set of callpoints it can potentially return to, and you could, for instance, insist that some condition pertains at all those points... this is sometimes called having an effect system.
09:03:54 <int-e> It's really entirely different from 'return' in C.
09:04:14 <cpressey> which block it returns *from* should be... lexical?
09:04:28 * cpressey tries to imagine a language in which it is not
09:04:37 <shachaf> I agree that it's pretty different, but they were presented as similar?
09:04:43 <int-e> cpressey: INTERCAL, I suppose
09:05:11 <shachaf> There's the similarity where you can write: "foo = either id id $ do { ...; when p (Left x); ... }" to implement early exit.
09:05:14 <int-e> cpressey: and maybe aspect-oriented programming as a paradigm? I don't know enough about that.
09:06:15 <shachaf> cpressey: I think the more direct analogy is maybe delimited continuations.
09:06:21 <int-e> (but arguably even if you don't know where you're coming from and where you'll go next, all imperative programming languages have a notion of "here, right now")
09:07:13 <cpressey> int-e: dear god, an aspect that can splice in a return statement...
09:09:44 <shachaf> Man. I should figure out all my half-coherent language ideas.
09:10:04 -!- Sgeo_ has joined.
09:10:31 <int-e> shachaf: better you than us ;-)
09:11:02 <shachaf> I should just type them all into the channel and have you figure them out for me.
09:12:22 <int-e> I thought that was what you were doing already.
09:13:06 -!- Sgeo__ has quit (Ping timeout: 258 seconds).
09:36:37 -!- wob_jonas has joined.
09:42:33 -!- WhoaNelly has joined.
09:42:38 <wob_jonas> cpressey: yeah, in current languages you can do that only by explicit call-ec objects or similar. but I can imagine a language where some of those keywords (return, next/last/redo/retry) use an implicit lexical variable and can refer to the outer named function where the block/lambda was created
09:43:19 <wob_jonas> but since I mostly program in a goto-less style, this doesn't come up often
09:45:01 <wob_jonas> you'd also need loop labels and goto labels to generate exit variables that can be bound by closures even if they go to an outer function, but at that point they become full call/cc continuations, because you can jump to them even after the block that contains them has exited
09:45:15 <wob_jonas> and that may be the main reason why that's not usually implemented\
09:47:54 <wob_jonas> I imagine this would most likely happen in a golf language, since they don't care too much about an efficient runtime, they might mix all sorts of paradigms and primitives that you rarely use but always add a lot of overhead to the interpreter, so eg. many slot assignments are always backtrackable just in case you use prolog-style backtracking, eve
09:47:55 <wob_jonas> rything can be pointed to by weak references, every number could contain a symbolic formula, you have full call/cc everywhere, etc
09:48:22 <shachaf> wob_jonas: This is related to the things we talked about a while ago.
09:48:54 <cpressey> shachaf: Have you ever worked out how to code a conventional try/except-type exception handler in continuation-passing style, as an exercise?
09:49:37 <shachaf> I think I have a good idea of how it'd go?
09:56:22 <cpressey> Basically, you have a regular continuation and an exception continuation. Every time you try, you extend the exception continuation. Every time you throw, you continue on the exception continuation instead of the regular one.
09:58:54 <shachaf> This is how JavaScript people write their programs by hand anyway.
09:59:35 <shachaf> Presumably this is equivalent to the Either thing?
10:00:00 <shachaf> "... -> (success -> r) -> (failure -> r) -> r"
10:00:20 <shachaf> "... -> (Either success failure -> r) -> r"
10:00:55 <shachaf> Which you can further turn into "... -> Either success failure" if you're using r parametrically.
10:03:08 <cpressey> I think you can compare it to a lot of things, I was thinking of it as more of a good place to start thinking about: how would you make this better? (You seem to want something better.)
10:04:09 <shachaf> Hmm, I think exceptions are probably a bad idea in the first place, so I'm not sure why you'd start there.
10:04:28 <shachaf> I guess writing it by hand is more explicit than exceptions, at least.
10:04:48 <cpressey> You're still writing the moral equivalent of "try" and "throw", aren't you?
10:05:28 <shachaf> I'm not sure what the moral value of "try" and "throw" is.
10:05:41 <shachaf> I think the main goal should be something where it's as easy as possible to read the code and see how control flow can happen.
10:06:07 <cpressey> You have code that can signal an error. You have code that can handle an error. Those are the moral values of "throw" and "try" respectively.
10:06:21 <cpressey> If you don't have those, well.
10:06:23 <shachaf> How can you tell whether code can signal an error?
10:06:45 <wob_jonas> shachaf: be more specific, what things that who talked about a while ago?
10:06:51 <cpressey> If you can't tell if code has encountered an error or not, you've got worse problems than this!
10:06:56 <shachaf> wob_jonas: Geo and that sort of thing.
10:07:26 <shachaf> I guess the exception answer is "based on types" (checked exceptions) or "anything can signal an error at any time" (unchecked exceptions).
10:07:34 <wob_jonas> cpressey: no, not an either. you want to non-local exit through all the stack frames that don't catch exceptions
10:07:49 <wob_jonas> so you'd have a global variable that stores the continuation where you have to jump when you throw
10:08:06 <cpressey> wob_jonas: as I said, I think you can compare it to a lot of things :)
10:08:07 <wob_jonas> and a try statement sets that global variable but saves its old value
10:08:21 <cpressey> I didn't say it was very similar though :)
10:10:12 <cpressey> Forcing it all into Either is like forcing all your non-local exits into local-exits-and-always-checking-the-exit-code
10:13:51 <shachaf> I feel like if your error handling system is made of indirect jumps it's already too complicated, or something.
10:13:57 <cpressey> using Either is a lot more like shell programming where you say (echo 'hi' && touch foo && cat foo) || echo 'badness'
10:14:28 <wob_jonas> note that this only works well if you have a dynamic-unwind that you can use to run destructors as the stack is rolled off, otherwise you have to rewrite all destructors (and all python-with statement) into a try
10:14:54 <wob_jonas> shachaf: wait, how is geo relevant for that?
10:15:10 <cpressey> wob_jonas: yeah, you have to weave destructors into your exception continuation too
10:15:25 <wob_jonas> shachaf: no, geo doesn't allow jumping out from inside a lambda block
10:15:46 <wob_jonas> it wouldn't even if it implemented lambdas
10:16:03 <wob_jonas> geo only allows you to break to the innermost block, and a function would count as such an innermost block
10:16:22 <wob_jonas> or did we talk about a hypothetical extension that would allow jumping out farther with block labels? hmm
10:16:29 <wob_jonas> that may have happened, I'll have to look at the logs
10:16:53 <wob_jonas> cpressey: one of the old toy languages that I once birthed into existence but now I'm ashemed of the details and my excuse is that I was young
10:17:13 <wob_jonas> and there's a third one that's lost
10:17:26 <wob_jonas> and a fourth one which is called psz
10:17:33 <shachaf> I don't mean Geo, just the things I was talking about when we were talking about Geo.
10:17:54 <wob_jonas> I think ruby would be particularly well suited for this
10:18:02 <wob_jonas> at least old ruby, before 1.9 came along
10:18:03 <shachaf> I think the Ruby solution is terrible.
10:18:15 <shachaf> The whole proc vs. lambda thing is such a mess.
10:18:31 <shachaf> Hmm, does Ruby implement function return with exceptions?
10:25:00 <shachaf> Hmm, I should go to sleep.
10:25:14 <shachaf> But in the future I should ask about one of the big things I'm trying to figure out.
10:26:24 <Taneb> I would like to go to sleep right now but sadly it is not going to sleep time here
10:26:35 <Taneb> It's not even being asleep time
10:30:04 <lambdabot> Local time for shachaf is Wed Aug 14 03:30:01 2019
10:30:18 <shachaf> Uh oh. It's way past going to sleep time.
10:30:24 <shachaf> I guess I can't go to sleep now.
10:30:33 <Taneb> You should retroactively be asleep
10:38:26 <esowiki> [[Drive-In Window]] M https://esolangs.org/w/index.php?diff=65493&oldid=61623 * Dtuser1337 * (+0) /* Pre-program delcarations */
10:39:24 <HackEso> 2019-08-14 10:39:24.695076581 +0000 UTC August 14 Wednesday 2019-W33-3
10:39:37 <wob_jonas> it's not sleep time, it's work time
10:43:53 <cpressey> Given a function, I would like to get a list of all exceptions that could possibly be raised by that function, and from where, and (ideally) for what reasons. You could devise a static analysis that does this. It'd be more of an analysis tool than a language feature though.
10:45:56 <wob_jonas> that's very often all exceptions, if the function takes a callback
10:46:30 <int-e> potentially minus a few
10:46:43 <wob_jonas> or if it calls a virtual method or otherwise does some dynamic call where you can't determine the target of the call statically
10:47:38 <esowiki> [[Fusion Tag]] https://esolangs.org/w/index.php?diff=65494&oldid=65477 * Ais523 non-admin * (-4) Undo revision 65477 by [[Special:Contributions/Lucas|Lucas]] ([[User talk:Lucas|talk]]): the word's being used here in a slightly different sense to in the linked article, so linking it is here probably more confusing than useful at the moment
10:49:56 <esowiki> [[Bootstrap]] https://esolangs.org/w/index.php?diff=65495&oldid=65476 * Ais523 non-admin * (+10) people generally dislike unmarked external/cross-namespace links here; technically the link is marked by being a slightly different shade of blue, but it's a clue that most people miss
10:51:50 <cpressey> Yeah, I wouldn't expect to get very useful results when running it on foldl...
10:52:58 <int-e> you could still do something like: exceptions thrown by arguments + exceptions found by static analysis - exceptions handled
10:53:39 <int-e> where the first term is treated as symbolic.
10:55:02 -!- Sgeo__ has joined.
10:58:23 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
11:11:18 -!- AnotherTest has quit (Ping timeout: 245 seconds).
11:12:37 <cpressey> yeah, not just arguments, anything that you determine you can't statically analyze (but you can report those callsites too). Vaguely interested now, looking at if there are any static analysis frameworks for Python.
11:12:59 <cpressey> I guess there's the ast module
11:20:00 <cpressey> https://python-ast-explorer.com/ if anyone is interested in what its AST looks like presently.
11:22:44 <myname> that rotating logo is oddly satisfying
11:23:33 -!- mniip_ has joined.
11:24:44 <int-e> ... why does webGL not work ... oh, graphics driver update. hrm :)
11:25:02 -!- mniip has quit (Ping timeout: 600 seconds).
11:25:19 <int-e> I was going to check whether http://int-e.eu/~bf3/tmp/moebius8.html still works :P
11:32:40 -!- mniip_ has changed nick to mniip.
12:34:26 <esowiki> [[Disan]] https://esolangs.org/w/index.php?diff=65496&oldid=56724 * YamTokTpaFa * (+24) Why, A, why did you make such this page....
12:34:57 <esowiki> [[Is]] https://esolangs.org/w/index.php?diff=65497&oldid=56401 * YamTokTpaFa * (+24) +CAT languages
12:35:25 <esowiki> [[ParrBF]] https://esolangs.org/w/index.php?diff=65498&oldid=13826 * YamTokTpaFa * (+23) Don't forget +CAT languages
12:42:52 <esowiki> [[Jumpback]] https://esolangs.org/w/index.php?diff=65499&oldid=43383 * YamTokTpaFa * (+24) +CAT languages
13:05:04 -!- john_metcalf has joined.
13:11:22 -!- WhoaNelly has quit (Read error: Connection reset by peer).
13:33:35 -!- Sgeo_ has joined.
13:36:43 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
14:00:44 <cpressey> https://catseye.tc/installation/PL-%7BGOTO%7D running in a web page at last, by the magic of the Haste compile
14:30:48 -!- unlimiter has joined.
14:34:38 -!- MDude has quit (Ping timeout: 245 seconds).
14:45:02 -!- unlimiter has quit (Quit: WeeChat 2.5).
14:51:59 <esowiki> [[Special:Log/newusers]] create * Shakil t * New user account
15:40:51 -!- Xunie has quit (Remote host closed the connection).
15:49:03 <wob_jonas> by the way, ICFP contest results will be available during the long weekend
15:49:35 <Taneb> "the long weekend" sounds like an event in the backstory of a post-apocalypting story
15:49:48 <Taneb> "Ever since the Long Weekend, we have never known peace"
15:51:06 -!- Sgeo__ has joined.
15:54:13 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
15:57:47 <wob_jonas> Taneb: no, I just call any weekend that is longer than 48 hours as long weekend. they last 49 hours, 72 hours, 73 hours, 96 hours, 97 hours, 120 hours, or even 144 hours.
15:59:03 <cpressey> Since Saturday ends the week and Sunday begins a new week, I object to calling the unit as a whole a "weekend".
15:59:22 <Taneb> I object to weeks that begin on Sunday
15:59:40 <wob_jonas> 49 or 73 hours is only possible near --10-28, and 120 or 144 hours is only possible near --12-25
16:00:13 <wob_jonas> cpressey: we use Monday as the start of the week, which makes more sense exactly because of this
16:01:15 <Taneb> wob_jonas: what's the significance of --10-28?
16:01:20 -!- cpressey has quit (Quit: A la prochaine.).
16:01:49 <int-e> wob_jonas: don't you miss some 24k - 1 variants?
16:01:59 <Taneb> Also Day of the Establishment of an Independent Czecho-Slovak State
16:02:13 <int-e> (I mean things 71)
16:03:48 <wob_jonas> int-e: yeah, those are possible too
16:04:42 <wob_jonas> 71 hours, and now 95 hours is possible too
16:27:28 <Taneb> Dumb idea: IRC client that lets you write comments in the logs
16:27:45 <Taneb> That are displayed but not actually sent
16:28:04 <wob_jonas> Taneb: irssi already does that, with the /echo command
16:28:22 <wob_jonas> useful in macros where you may want to print something other than what you send or receive
16:32:08 <kmc> doesn't end up in the log, though
16:32:45 <wob_jonas> that depends on how you set up the log I think
16:33:05 <wob_jonas> you can also send invalid commands to the server if you want
16:33:36 <wob_jonas> or messages to a channel that is invite-only and only you are joined
16:39:02 -!- Sgeo_ has joined.
16:42:21 -!- Sgeo__ has quit (Ping timeout: 244 seconds).
16:45:45 <kmc> if you just want to write to a log you can PM yourself
16:48:54 -!- wob_jonas has quit (Remote host closed the connection).
17:08:18 -!- FreeFull has joined.
17:13:25 -!- xkapastel has joined.
17:21:04 -!- Sgeo__ has joined.
17:24:12 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
17:26:03 -!- Sgeo_ has joined.
17:29:12 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
17:52:06 -!- Sgeo_ has quit (Read error: Connection reset by peer).
17:52:34 -!- Sgeo_ has joined.
17:55:02 -!- b_jonas has joined.
18:18:56 <HackEso> olist 1175: shachaf oerjan Sgeo FireFly boily nortti b_jonas
18:22:06 -!- Sgeo_ has quit (Read error: Connection reset by peer).
18:22:34 -!- Sgeo_ has joined.
18:25:12 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65500&oldid=65482 * Areallycoolusername * (+345)
18:45:30 -!- AnotherTest has joined.
19:14:33 -!- Sgeo__ has joined.
19:17:32 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
19:24:04 -!- Sgeo_ has joined.
19:28:15 -!- Sgeo__ has quit (Ping timeout: 268 seconds).
20:18:17 -!- Lord_of_Life_ has joined.
20:20:54 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
20:21:11 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:24:49 -!- atslash has quit (Read error: Connection reset by peer).
21:26:07 -!- atslash has joined.
21:28:44 -!- Phantom_Hoover has joined.
21:30:47 -!- AnotherTest has quit (Ping timeout: 252 seconds).
21:36:40 <b_jonas> It's sometimes interesting to experience history backwards. NES Metroid is quite a good port of Super Metroid to a simpler hardware. Super Metroid is huge, so obviously Metroid can't have everything from it, but it does a really good job of showing as much of what we love as possible. Many things in it a really recognizable.
21:38:47 <b_jonas> It's a pity they had to cut the MB phase 2 and 3
21:42:04 <b_jonas> But apart from that, Tourian is a particularly faithful representation (even if, according to the story, it's a different Tourian than in Super Metroid)
22:00:48 -!- xkapastel has quit (Quit: Connection closed for inactivity).
22:35:19 -!- Phantom_Hoover has quit (Quit: Leaving).
22:56:49 -!- b_jonas has quit (Quit: leaving).
23:16:49 -!- tromp has quit.
23:34:39 -!- tromp has joined.
23:35:27 -!- tromp has quit (Remote host closed the connection).
23:38:33 -!- Sgeo_ has quit (Read error: Connection reset by peer).
23:45:16 -!- Sgeo has joined.
00:07:58 <shachaf> http://blog.sigfpe.com/2009/10/buffons-needle-easy-way.html is TG
00:09:45 -!- ais523 has joined.
00:24:05 -!- tromp has joined.
00:27:44 -!- ais523 has quit (Quit: quit).
00:28:51 -!- tromp has quit (Ping timeout: 264 seconds).
00:51:22 <esowiki> [[Disan]] M https://esolangs.org/w/index.php?diff=65501&oldid=65496 * A * (-18)
00:53:56 -!- FreeFull has quit.
01:00:42 -!- tromp has joined.
01:04:55 -!- tromp has quit (Ping timeout: 252 seconds).
01:49:51 -!- ais523 has joined.
01:50:29 <ais523> wob_jonas: is 48 hours + 1 second a long weekend? (possible due to leap seconds, or do you count the extra second as part of one of the 48 hours?)
01:54:35 -!- tromp has joined.
01:59:21 -!- tromp has quit (Ping timeout: 250 seconds).
02:26:07 -!- ais523 has quit (Quit: quit).
03:42:36 -!- tromp has joined.
03:47:27 -!- tromp has quit (Ping timeout: 264 seconds).
04:38:48 -!- atslash has quit (Quit: This computer has gone to sleep).
04:42:18 -!- atslash has joined.
05:30:52 -!- tromp has joined.
05:36:03 -!- tromp has quit (Ping timeout: 264 seconds).
05:57:22 -!- adu has quit (Quit: adu).
06:21:25 <myname> "Must have knowledge of object oriented programming using HTML/CSS, JQuery"
06:21:25 <myname> https://jpl.jobs/jobs/2019-10773-Engineering-Technical-Facilities-Part-Time-Internship
06:57:29 -!- tromp has joined.
07:02:03 -!- tromp has quit (Ping timeout: 252 seconds).
07:03:52 -!- tromp has joined.
07:26:21 -!- cpressey has joined.
07:34:09 -!- tromp has quit (Remote host closed the connection).
07:39:20 <cpressey> Still on (my personal spin on) shachaf's error handling thing, I think one problem is languages that raise exceptions at the drop of a hat. "Key not found in map" and "divisor is zero" are not exceptional conditions in the same sense "file not found" or "connection was reset" are.
07:40:18 <cpressey> You can statically insist that the key exists, that the divisor is zero, that the list is not empty, that the pointer is non-null.
07:41:34 <int-e> cpressey: I could get behind that, yeah. As the name suggests, exceptions /should/ be used for exceptional conditions that a caller cannot be reasonably expected to handle.
07:44:55 <shachaf> I certainly agree that exceptions for those things are scow.
07:45:09 <shachaf> Well, even C raises an exception on division by 0.
07:46:57 <cpressey> A good way to express these static checks is to write tiny proofs that they can't happen. Dependent types lets you do that, but IMO they're difficult to use and they'll never get widespread adoption. Refinement types seem to do much the same thing (in fact might be a kind of dependant typing) but are much more intuitive.
07:47:47 <shachaf> Those seem like good ideas that have never been made that usable as far as I know.
07:48:15 <int-e> Then again once you have a good exception mechanism I suppose it's unavoidable that they will be used for things like keys not present in a map, and as a general non-local return mechanism as well.
07:48:58 <cpressey> Apparently the next version of Ada will have dependent types. If so, it will make it the only non-experimental *imperative* language to have them, as far as I know.
07:49:17 -!- tromp has joined.
07:49:38 <int-e> Java's Error/Exception distinction is actually an attempt to distinguish between exceptions-as-exceptional-situations and exceptions-as-part-of-the-interface
07:49:53 <cpressey> Granted, "no one" uses Haskell, "no one" uses SMT solvers
07:50:19 <int-e> cpressey: news to me on both accounts
07:50:33 <int-e> (Most Isabelle users use SMT solvers all the time!)
07:50:34 <cpressey> Haskell is a good idea that has never been made usable
07:50:40 <int-e> (Of course nobody uses Isabelle)
07:51:07 <int-e> (This one is actually much closer to the truth. I suspect there are about 100 serious Isabelle users? Maybe I'm wrong.)
07:51:08 <cpressey> For refinement types, my point of reference is Liquid Haskell
07:52:03 <cpressey> int-e: To be fair, there are a lot of systems *like* Isabelle, if you added up all those users, it might make a dent in the statistics.
07:52:09 <int-e> It's really hard to estimate these things! (Coq is inexplicably far more popular. It's so much harder to use!)
07:52:31 <cpressey> I got the impression Lean is the New Hawtness in this area
07:53:31 <int-e> Z3 is an SMT solver, like CVC4 and Yices?
07:53:38 <cpressey> a name which will forever make my think of Infocom when I read it
07:53:39 <int-e> Not in the same boat, I thought.
07:54:11 <cpressey> I think Z3 is more SAT than SMT
07:54:29 <int-e> Nah, Z3 is an SMT-solver.
07:54:58 <cpressey> yeah. http://theory.stanford.edu/~nikolaj/programmingz3.html
07:55:03 <int-e> SMT = Satisfiability modulo theories = DPLL + theory oracle; all the SMT solvers have a SAT solver core.
07:55:49 <int-e> This is in contrast to first-order theorem provers like Vampire, iProver, E, the old Prover9 and Mace4 ... and a bunch of others I forgot.
07:57:10 <int-e> What seems to be true is that SMT solvers are slowly acquiring limited first-order logic support (*some* universal quantifiers). But I don't know whether this is practical.
07:57:27 <cpressey> Hmm... so the reason Z3 has bindings to a bunch of regular programming languages is because you're supposed to write the "tactics" in the regular programming language?
07:57:57 <cpressey> I mean, among other reasons I suppose
07:58:04 <int-e> cpressey: Compilers can use SMT solvers for loop optimizations (in particular elision of bounds checks)
07:58:28 <int-e> (using the linear integer arithmetic fragment)
07:58:50 <cpressey> right, and Liquid Haskell uses a SMT solver (Z3 or some others) to let you write tiny proofs of the properties of the functions you've written
07:59:53 <int-e> And for such things it's nice to have an API instead of having to write out thousands of SMT-lib files, to be parsed by the solver, and then reading back the solver's output...
08:00:41 <int-e> And then there's incremental solving... (basically: you set up common constraints, then add and remove some additional constraints repeatedly)
08:02:00 <cpressey> A bit like superoptimization, except for theorems?
08:02:00 <int-e> Anyway, lots of stuff going on in that area.
08:03:25 <int-e> I just think of it as an advanced backtracking technique. Meta-backtracking, if you will.
08:05:34 <int-e> Hrm... I thought this program was going to run for about 8 hours... it's at 1136 minuts already.
08:05:36 <cpressey> Even without such a general solution, you can fairly easily build a static analysis phase that complains if you say x/y in a context where you don't know y is 0, and so forth.
08:06:17 <int-e> Ah of course static analysis tools are also an important target for SMT solver APIs :)
08:06:34 <int-e> (Though I guess the compiler example is a special case of that.)
08:07:01 * int-e goes looks up supercompilation. (I have a vague idea, but no definition.)
08:08:00 <int-e> https://en.wikipedia.org/wiki/Metacompilation is impressively short :P
08:10:23 <cpressey> I know it as "here is a constraint, go try every (short!) permutation of machine instructions to find one that satisfies it"
08:10:36 <cpressey> Often takes longer than 8 hours
08:11:02 <cpressey> https://en.wikipedia.org/wiki/Superoptimization
08:11:23 <cpressey> I guess "supercompilation" is a different thing
08:11:56 <int-e> Ah!!! I conflated two different terms there. Thanks!
08:12:28 <int-e> (Totally different concepts.)
08:13:36 <int-e> cpressey: "often takes longer than 8 hours" <-- I hope that in practice you determine in advance how much time you want to spend on this kind of foolishness and then you take the best result you got in that timeframe?
08:13:57 <int-e> (I guess you can also optimize as a continuous process and deploy everyt improvement you find)
08:16:33 <int-e> I can actually see a company like Google doing such things. "We spend 0.001% of our computational power on trying to superoptimize our inner loops. If we manage to improve one of them by 1% that will pay off." (numbers are adjustable.)
08:17:49 <cpressey> int-e: I think, other than for research and entertainment, it is mainly done by compiler developers
08:18:56 <int-e> I suppose nVidia & co. are also doing such things?
08:19:38 <shachaf> whoa, lots of conversation
08:19:41 <int-e> (Whenever there's a new game release, a few weeks later there's a graphics driver update, presumably with specially crafted binaries for the most important shaders.)
08:20:13 <cpressey> Interesting. I can see how hardware manufacturers might care about it too, but I really don't know
08:20:29 <int-e> cpressey: I'm speculating, of course.
08:20:50 <int-e> But consumer graphics cards sell by framerates in popular games.
08:21:17 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:22:13 -!- Lord_of_Life has joined.
08:24:31 <int-e> cpressey: I'm not speculating about the new driver releases... those can be observed in practice. "<manufacturer> releases new drivers after release of <game>, solving some minor glitches and improving framerates by 10%" is a fairly common news item in tech news.)
08:25:14 <int-e> cpressey: I don't know for sure whether they include precompiled shaders, but this would go a long way towards explaining their ridiculous sizes.
08:26:15 <shachaf> It would sure be better if they just gave you an interface that let you optimize your shaders yourself.
08:30:08 <int-e> "Supported operating systems: Microsoft Windows 98, 98SE, ME, 2000, XP, 2003, Media Center, Vista and Windows 7" ... hmm I think I approve of this list ;-)
08:32:48 <int-e> Oh wow, I had not seen that yet... nVidia has "Game Ready Drivers" (focusing on "support for the latest games") and "Studio Drivers" ("prioritizes stability and quality for creative workflows")
08:33:35 <int-e> Anyway, 496MB download. Explain that :)
08:36:53 <cpressey> maybe they forgot to run `strip`
08:40:18 <shachaf> Are programs over 1024 bytes even necessary?
08:40:39 <shachaf> Just imagine the best program out of all 1024-byte programs.
08:40:55 <shachaf> I wish I had a halting oracle.
08:41:02 -!- AnotherTest has joined.
08:41:25 <int-e> shachaf: yes it will halt (you won't prove me wrong) ;-)
08:42:03 <shachaf> But my program was "while (1);"
08:42:32 <int-e> what's your uptime?
08:44:21 <int-e> There's a second part to this... a halting oracle is not what you really want.
08:44:51 <int-e> What good is a program that halts after 10^10^10^10 operations? And that's a small number in the context of computability...
08:44:57 <shachaf> well, i'd at least like it to halt with what it's doing to Sun
08:45:24 <int-e> I don't think the program will affect the Sun much at all. :)
08:45:27 <shachaf> Anyway there are plenty of uses to a halting Oracle.
08:46:05 <shachaf> If you have one you can certainly answer the more limited kinds of question you're talking about too.
08:46:08 <int-e> Sure, you could... determine the truth... of certain mathematical conjectures.
08:46:27 <int-e> (it's not a proof if it involves an oracle)
08:47:15 <int-e> But I imagine a halting oracle wouldn't be cheap.
08:47:26 <shachaf> I could probably extract bits of the shortest proof, one at a time?
08:47:45 <int-e> Maybe it would work like a drug dealer though... you get one question for free. :P
08:48:09 <shachaf> I've asked before what you would do with a single-use halting oracle.
08:48:11 <int-e> ("you" being the whole of humanity :P)
08:48:39 <int-e> (Just imagine the fight we would have over which question to ask!)
08:50:38 <int-e> And imagine the disappointment when we cleverly bundle everything we can think of together in a big conjunction (program that looks for counterexamples to Collatz, Goldbach, Riemann...) and the answer is that the program halts.
08:51:30 <int-e> shachaf: I don't remember you asking that before. Maybe I missed it, maybe it didn't spark my interest at the time. *shrugs*
08:52:37 <shachaf> Maybe I only asked in other places.
08:53:22 <cpressey> I don't want a halting oracle, I want a greater recognition that there are (ideally) two classes of "programs": batch jobs that always halt, and reactive programs that never halt (until the administrator explicitly stops them.)
08:54:09 <cpressey> So many of the programs we use are the reactive kind, but so many of the languages we use assume you're going to write the batch kind
08:54:15 <shachaf> That seems irrelevant to questions about halting oracles.
08:54:30 <shachaf> These are programs that don't halt productively.
08:54:39 <shachaf> I mean, the way in which they don't halt is productive.
08:55:27 <cpressey> I'm in more of an engineering mood than a CS mood this morning I suppose
08:56:24 <shachaf> How do languages assume one or the other?
08:57:05 <cpressey> And it's not a huge practical problem, but, teaching kids to write games in Python or whatever and you have to explain why there is "main" and an "event loop" and this is just distraction
08:58:18 <shachaf> "while (true) { get_input(); compute(); show_game(); }" seems like a pretty reasonable description of what you want the computer to do.
08:59:35 <int-e> cpressey: Hmm, what about initialization? Do you want to do that in awk style, defining a special event for it? BEGIN { ... }
08:59:48 <int-e> (awk and sed are kind of event based ;-) )
08:59:59 <int-e> (in a very awk-ward way, of course.)
09:00:25 <int-e> @google "sedistic"
09:00:27 <lambdabot> https://worldofwarcraft.com/en-us/character/us/hyjal/sedistic
09:01:27 <cpressey> shachaf: A distraction from how you design and code the reactive application that is the game.
09:02:08 <int-e> do people write games in erlang?
09:02:29 <shachaf> Are you saying something other than that there should be higher-level libraries and things for writing games?
09:02:35 <cpressey> int-e: I would totally believe that there are some MMP servers written in Erlang
09:02:37 <int-e> (am I missing another prominent actor-based programming language?)
09:03:40 <cpressey> shachaf: Well, I'm talking about programming paradigms. One such is put front-and-center in most languages, but it is secondary or basically ignorable in a lot of applications.
09:05:31 <int-e> while we're throwing out paradigms... am I the only one who thinks FRP is a mismatch with game programming because it's so hard to make the set of actors dynamic?
09:06:07 <int-e> more precisely, exprssing event flow by arrows
09:07:20 <int-e> The problem is that I formed this idea when I saw the first articles on arrow-based FRP and it stopped me from ever trying FRP myself... so it's quite possible that it's a misconception.
09:09:28 <cpressey> int-e: Well, all the other actor-based languages I can think of, I can't call prominent. And almost all the uses of "FRP" I hear, have only a tangential relation to the FRP you're talking about :)
09:09:30 <int-e> (There's a second aspect that's holding me back there... lazy evaluation and real-time are at odds as well.)
09:10:13 <Taneb> int-e: a lot of proponents of FRP hold that arrow-based FRP doesn't count, for what it's worth
09:10:52 <int-e> (And I have not encountered FRP outside of Haskell, which is probably entirely my own fault.)
09:11:05 <cpressey> It's functional because it's got functions in it, it's reactive because it reacts to events, it's programming because it's a program
09:11:11 <int-e> Taneb: sounds fair
09:11:18 <cpressey> I conclude that Visual Basic is FRP
09:12:16 <int-e> (this is just a refinement of the view that Excel is a functional programming model... it's reactive because cell updates trigger further cell updates)
09:14:05 <cpressey> int-e: Excel is honestly a lot closer to FRP than many JS libraries
09:14:25 <int-e> cpressey: I think the weakest link here is "P".
09:14:41 <int-e> (of the three letters FRP)
09:20:33 <int-e> cpressey: Have you ever played with Squeak?
09:22:18 -!- john_metcalf has quit (Read error: Connection reset by peer).
09:23:10 <cpressey> int-e: Not really. Smalltalk never really excited me. Though I can see how it's probably a bit closer to what I'm talking about here.
09:23:11 <int-e> (I tried it once... and couldn't get over the fact that you have to work within the Smalltalk VM for everything. I want my external editor...)
09:23:41 <int-e> (And I want actual source code as well. Not "click on this window representing a class to add a method to it")
09:24:20 <cpressey> Yeah, not really a fan of languages that want to stay inside their own "hermetic" environment
09:24:28 <Taneb> (I tried it once but gave up because something wanted me to middle-click)
09:24:45 <Taneb> (at the time I was on a laptop with no middle click)
09:25:36 <int-e> cpressey: Which is sad because Smalltalk per se looks kind of cool.
09:26:35 <int-e> Maybe I should look at Swift. (I saw it's "Objective C minus C", so that should give us Smalltalk again :P)
09:27:16 <int-e> struct Player { <-- uhm... yeah... nope.
09:28:39 <int-e> (Just peeking... and it looks a lot closer to Go than I expected from that description (tbf, the description came from Wikipedia).)
09:28:58 <int-e> shachaf: "nope" as in "not Smalltalk" and also "not minus C".
09:29:15 <int-e> shachaf: "struct" is a big part of C to me ;)
09:30:09 <shachaf> I don't think Swift is very Smaltalky.
09:30:43 <cpressey> I think Objective C is probably cursed. I will not go into details, unless perhaps you ply me with rum. Ahhrrr.
09:30:56 <int-e> shachaf: And you're right.
09:31:48 <int-e> shachaf: 'At WWDC 2014, Apple introduced a new language, Swift, which was characterized as "Objective-C without the C".' is the description I was referring to, from https://en.wikipedia.org/wiki/Objective-C#Apple_development_and_Swift
09:32:02 <shachaf> I once looked into Objective C. I reimplemented NSObject and things to figure out what was going on.
09:32:08 <int-e> shachaf: And now that I took a closer look I totally disagree with that description.
09:32:13 <shachaf> Anyway it's a bizarro language.
09:32:28 <cpressey> Aye, Swift would of course inherit the curse.
09:33:36 <int-e> shachaf: I guess they still have keyword arguments, and methods, and they dropped all the unmanaged, unsafe memory stuff.
09:34:09 <int-e> 'let 🐶🐮 = "dogcow"'
09:34:21 <int-e> just what I always wanted... smileys as identifiers. yuck.
09:38:19 <int-e> oh, perhaps shachaf would like this: if let constantName = someOptional { ... } else { ... }, corresponding to case someOptional of Just constantName -> ... | Nothing -> ...
09:39:21 <shachaf> It's related to the thing I want but it seems kind of worse.
09:39:56 <shachaf> Wait, no, I'm thinking of a different Swift feature with a similar syntax.
09:41:03 <shachaf> It seems like a reasonable syntax for a special case of pattern matching? Not particularly better or worse than case.
09:41:35 <cpressey> It seems like a way to overload the term "else"
09:42:38 <cpressey> Why not go all the way and overload "or"
09:42:41 <shachaf> "guard let" is the one I was thinking of that was kind of annoying.
09:43:45 <shachaf> guard let x = y { ...; return ...; }
09:43:52 <shachaf> Uh, guard let x = y else { ...; return ...; }
09:44:08 <shachaf> The else block has to have an exit statement.
09:45:02 <shachaf> I think it would be better if: Instead of requiring an exit, it could provide a substitute value; instead of being part of the "let" syntax, it was just an expression, as in "let x = guard y else { ... }"
09:47:47 <cpressey> I like && and || in Bourne shell for this.
09:48:28 <cpressey> The exit code is only nominally an integer; it's actually some kind of error-type value.
09:51:01 <cpressey> ; should really do what && does (I think there's some flag in modern shells that makes it so.)
09:53:19 <int-e> oh they do the Java thing where an enum is really more of a tagged union...
09:53:59 <int-e> and the matching syntax for that is ugly: case .upc(let numberSystem, let manufacturer, let product, let check):
09:54:05 <int-e> shachaf: I first saw it in Java
09:55:09 <shachaf> I thought Java made you use class inheritance to emulate tagged unions.
09:55:35 <int-e> Java goes a bit beyond that. An Enum is syntax for a base class (the enum type) and subclasses for each enum element... which can carry their own data and methods.
09:55:59 <int-e> No, modern Java does that for you.
09:57:25 <shachaf> I looked it up and it didn't seem to be that way but I might've looked at the wrong thing.
09:57:27 <int-e> @google java enums
09:57:28 <lambdabot> https://www.w3schools.com/java/java_enums.asp
09:58:27 <int-e> yeah it didn't because it has too little detail
09:58:36 <int-e> I'm sure you can find something though :P
10:00:20 <shachaf> I looked at a bunch of things before asking. But maybe now I've found an example of the thing you're talking about.
10:00:45 <shachaf> Oh well, I don't care about Java.
10:09:13 <int-e> shachaf: Hmm I seem to be misremembering the details. https://docs.oracle.com/javase/specs/jls/se12/html/jls-8.html#jls-8.9.1 <-- each enum element has a class body, but I'm not sure whether that's enough to associate arbitrary additional fields to each case. I don't want to try either. The examples I've seen just associate fixed values with each case (planets with weight and size seem to be...
10:10:34 <int-e> and it's amazingly hard to find the *documentation* of this feature... I had to start with "java syntax reference" because with anything more specific the search results would be swamped with useless secondary sources (tutorials, guides... well-intentioned but they barely scratch the surface)
10:10:53 <int-e> ... back to Swift.
10:11:31 <shachaf> Why are you looking at all these languages lately?
10:11:44 <shachaf> Did you also come to the conclusion that all languages are terrible?
10:13:24 <int-e> I've realized that I've never looked at what those languages really are.
10:13:59 <int-e> I mean, "C-like managed language" is not detailed enough to criticize or embrace a language :P.
10:14:12 <shachaf> Did you hear about this exciting update? https://blogs.dropbox.com/tech/2019/08/the-not-so-hidden-cost-of-sharing-code-between-ios-and-android/
10:14:24 <shachaf> 23:30 <shachaf> So Dropbox's new "mobile strategy" is to write everything twice, once for each platform.
10:14:27 <shachaf> 23:31 <shachaf> How did we get to the point where each platform has its own programming language that you have to use? Wasn't this the point of high-level languages in the first place?
10:15:01 <cpressey> shachaf: I'll thank you to stay out of my walled garden
10:15:23 <shachaf> This is how you computers now.
10:15:37 <int-e> We allowed vendor-lockin for software (in the name of security) is how we got to this point.
10:16:36 <int-e> There's really no mystery to it. Apple in particular wants this to be expensive. But I don't think Google is far behind, Microsoft has been doing the same thing on an API rather than a language level, for ages.
10:29:52 <fizzie> int-e: While you can have custom fields and methods on an enum constant, you can't readily *access* them, because the enum constant is of the enum type. It's a little like doing `SomeConcreteClass foo = new SomeConcreteClass() { String notSoUseful = "foo"; };`.
10:30:02 <fizzie> int-e: What you *can* do with them is define some abstract methods in the enum type, and then implement them in the constant: https://ideone.com/TlCjqB
10:30:41 <fizzie> The standard example is 8.9.3-3 in https://docs.oracle.com/javase/specs/jls/se12/html/jls-8.html#jls-8.9.3
10:32:21 <cpressey> int-e: Remember Microsoft J++?
10:37:12 <cpressey> Well, it's not important, the main point is, yes, this sort of thing has been going on for ages
10:37:37 <int-e> cpressey: But I do remember C# of course.
10:38:02 -!- zombocoder has joined.
10:40:20 <int-e> cpressey: As I recall it, Java was meant to be platform-independent, so it's in a different category :P
10:40:37 <int-e> Of course now it's meant to be a money-maker for Oracle.
10:43:23 <shachaf> Do you like Buffon's needle?
10:43:29 <int-e> Anyway, done with Swift for now. Things that stood out are enums, properties, and extensions.
10:43:40 <int-e> shachaf: only once it's bent into a circle
10:43:54 <shachaf> I only like it when it's bent into the word "this".
10:44:19 <HackEso> This is something people on the channel like to talk about. We're often unsure what this is, though.
10:44:54 <int-e> `learnappend this// Nobody likes this.
10:44:54 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: learnappend: not found
10:45:10 <int-e> `learn-append this// Nobody likes this.
10:45:10 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: learn-append: not found
10:45:37 <HackEso> https://hack.esolangs.org/repo/file/tip/bin
10:46:21 <int-e> `learn_append this Nobody likes this.
10:46:24 <HackEso> Can't open wisdom/thi: No such file or directory. \ Learned 'thi': Nobody likes this.
10:46:50 <shachaf> i recommend le/rn_append hth
10:47:43 <int-e> `le/rn_append this//Nobody likes this.
10:47:45 <HackEso> Learned 'this': This is something people on the channel like to talk about. We're often unsure what this is, though. Nobody likes this.
10:47:59 <HackEso> Nobody killed the cyclops Polyphemos after he tried to eat a shipful of sailors, and this perceived injustice made Poseidon so mad he swore vengeance at him and the gods couldn't calm him down for ten years.
10:48:14 <int-e> sounds like a b_jonas entry
10:48:19 <fizzie> Speaking of the cross-platform mobile thing, heard a lot about Flutter again while visiting MTV. I think I'd give it a go if someone forced me (or a tiny team) to build something on "both platforms" (...) with identical features.
10:48:22 <Taneb> That sounds like something I'd have written 6 years ago
10:48:42 <HackEso> https://hack.esolangs.org/repo/log/tip/wisdom/nobody
10:49:47 <shachaf> fizzie: Both platforms: iOS *and* Mac OS.
10:50:24 <shachaf> fizzie: I think the solution will be to write my own UI library.
10:50:59 <int-e> `mkx learn_append//echo "Usage: le/rn_append keyword//Text you'd like to append."
10:51:09 <HackEso> Can't do inplace edit: wisdom/ is not a regular file. \ /hackenv/bin/learn_append: line 5: wisdom/: Is a directory \ Learned '': cat: wisdom/: Is a directory
10:51:25 <int-e> ``mv learn_append bin
10:51:25 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `mv: not found
10:51:31 <int-e> `` mv learn_append bin
10:51:38 <HackEso> Usage: le/rn_append keyword//Text you'd like to append.
10:51:55 <shachaf> Unfortunately this wouldn't have helped with your first two attempts.
10:52:03 <int-e> I'm not very good at this.
10:52:31 <HackEso> total 4 \ lrwxrwxrwx 1 1000 1000 13 Jul 8 2017 rm -> ../bin/forget \ lrwxrwxrwx 1 1000 1000 17 Jul 8 2017 rn -> ../bin/slashlearn \ -rwxr-xr-x 1 1000 1000 225 Apr 7 2018 rn_append
10:52:42 <int-e> shachaf: Yeah but those didn't end up in the repository history so I regard them as harmless.
10:53:37 <int-e> seriously? le/rm ?
10:53:47 <HackEso> 9046:2016-09-16 <shachäf> ` ln -sf ../bin/forget le/rm \ 9044:2016-09-16 <shachäf> mkx le/rm//rm "wisdom/$1"
10:56:38 <HackEso> wisdom is always factually accurate, except for this entry, and, uh, that other one? It started with, like, an ø?
10:59:22 -!- zombocoder has quit (Ping timeout: 246 seconds).
11:09:40 <esowiki> [[User:CrispyPin]] N https://esolangs.org/w/index.php?oldid=65502 * CrispyPin * (+123) Created page with "In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move."
11:11:53 -!- zombocoder has joined.
11:25:59 -!- zombocoder has quit (Read error: Connection reset by peer).
11:29:53 <esowiki> [[Talk:Rail]] https://esolangs.org/w/index.php?diff=65503&oldid=39735 * CrispyPin * (+338)
11:33:08 -!- limbo_ has quit (Quit: Lost terminal).
11:49:10 -!- zombocoder has joined.
11:55:38 -!- tromp has quit (Read error: Connection reset by peer).
11:58:31 -!- wob_jonas has joined.
11:58:48 -!- tromp has joined.
12:01:24 <wob_jonas> ais523: yes, I guess if you measure it accurately enough, then 2017-01-01 was a long weekend too because of the leap second
12:06:41 <wob_jonas> cpressey: yeah, raising an exception for floating point division by zero by default is a stupid decision that some languages including python and perl do for legacy reasons
12:06:57 <wob_jonas> and the workarounds to do a floating point division without raising an exception aren't even simple there
12:07:52 <HackEso> bash: -c: line 0: syntax error near unexpected token `3.0/x' \ bash: -c: line 0: `python3 -cx=0.0;print(3.0/x)'
12:08:01 <wob_jonas> ``` python3 -c'x=0.0;print(3.0/x)'
12:08:07 <HackEso> Traceback (most recent call last): \ File "<string>", line 1, in <module> \ ZeroDivisionError: float division by zero
12:08:23 <wob_jonas> ``` python3 -c'import numpy; x=numpy.float64(0.0); print(3.0/x)'
12:08:25 <HackEso> -c:1: RuntimeWarning: divide by zero encountered in double_scalars \ inf
12:09:45 <wob_jonas> it's like two more lines of code to ingore that warning
12:11:24 <wob_jonas> ``` python3 -c'a = dict(); x = a["foo"]' # raising an exception when looking up a key in a dictionary and it's not found, that I can understand
12:11:24 <HackEso> Traceback (most recent call last): \ File "<string>", line 1, in <module> \ KeyError: 'foo'
12:12:01 <wob_jonas> ``` python3 -c'a = dict(); del a["foo"]' # but python's dict is the only dictionary that's pedantic enough to raise an exception when a key is not found when you're trying to remove it
12:12:05 <HackEso> Traceback (most recent call last): \ File "<string>", line 1, in <module> \ KeyError: 'foo'
12:12:27 <wob_jonas> ``` python3 -c'a = dict(); a["foo"] = "bar"; x = a["foo"]; del a["foo"]'
12:15:47 <wob_jonas> "<shachaf> it's a shady industry" => groan
12:25:49 <esowiki> [[Osis]] N https://esolangs.org/w/index.php?oldid=65504 * A * (+1695) Created page with "[[Osis]] is a stack-based language specialized in sequences. Not only as in the commands, but also as in how it calculates the sequences. With smart memory usage and memoriz..."
12:26:26 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65505&oldid=65504 * A * (+94)
12:26:39 <esowiki> [[Osis]] https://esolangs.org/w/index.php?diff=65506&oldid=65505 * A * (+9)
12:30:16 <esowiki> [[Trance]] N https://esolangs.org/w/index.php?oldid=65507 * A * (+416) Created page with "[[Trance]] is a useless language that only has replacement commands. ==Syntax== <pre> 1: Replace all inputted 0's to 1's. 0: Replace all inputted 1's to 0's. </pre> ==Computat..."
12:33:59 <wob_jonas> "<cpressey> ; should really do what && does (I think there's some flag in modern shells that makes it so.)" => set -e; I use it in HackEso one-liners all the time, and it's not particularly modern
12:34:19 <wob_jonas> ``` set -e; echo one; true; echo two; false; echo three; echo four
12:35:07 <wob_jonas> automatically exit when a command fails, unless it's syntactically in such a position that cares about whether it succeeds (it's not really the semicolon that's special
12:39:48 <wob_jonas> "<fizzie> int-e: While you can have custom fields and methods on an enum constant, you can't readily *access* them," => yeah, java has learnt the good practices of data hiding from HQ9+
13:02:43 -!- xkapastel has joined.
13:06:46 <cpressey> int-e: Uh oh. I got around to testing your Wagon implementation on the test cases in my document and there are... discrepancies.
13:08:32 <int-e> I tested a few, but I didn't test them all.
13:08:41 <cpressey> int-e: https://gist.github.com/cpressey/9969c27e7a877af15bf81665c96c815f
13:12:52 <int-e> Oh did I get the order of the subtraction arguments wrong...
13:17:10 <int-e> That's annoying; it makes negating the top of the stack quite a bit harder.
13:17:36 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65508&oldid=65506 * A * (-86)
13:17:38 <wob_jonas> isn't there some way to just rearrange elements near the top?
13:17:59 <int-e> yes there is but it involves using 'r' a lot.
13:18:05 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65509&oldid=65508 * A * (+0) /* Command reference */
13:19:35 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65510&oldid=65509 * A * (+63) /* Command reference */
13:19:49 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65511&oldid=65510 * A * (+0) /* Powers of 2 */
13:20:54 <int-e> cpressey: so if you change opS to opS (a : b : ss) = b-a : ss does that fix it?
13:22:06 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65512&oldid=65511 * A * (-12)
13:25:35 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65513&oldid=65512 * A * (+9) /* Command reference */
13:25:58 <cpressey> not sure to what extent this affects the fromTag compiler
13:26:13 <cpressey> the helper functions look easy to fix
13:27:17 <cpressey> and there is just one s in the main body of it, from what I can see
13:27:53 <cpressey> I was wondering at some point whether I should add x/X for swap ("eXchange")
13:29:29 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65514&oldid=65513 * A * (-1) /* Powers of 2 */
13:30:53 -!- zombocoder has quit (Ping timeout: 245 seconds).
13:31:29 <int-e> Yeah I'm fixing this... it'll just generate quite a bit more code
13:31:44 <int-e> "iriisririiisissr" swaps the top two elements of the stack
13:32:29 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65515&oldid=65514 * A * (-26)
13:32:29 <int-e> or, readable: 1r 0r 1r 2r
13:32:46 <cpressey> Ah ha right, there's another small thing
13:32:48 <int-e> (where the numbers correspond to pushing that number on the stack)
13:32:56 <cpressey> The doc says the argument to r must be 0 or 1
13:33:20 <cpressey> I did this because I was too lazy to specify what order the retained elements are pushed back onto the stack
13:33:49 <cpressey> so 2r is technically undefined behaviour
13:34:05 <int-e> that *will* be annoying.
13:34:25 <int-e> but let me fix the subtraction thing first.
13:35:10 <int-e> (I didn't think about that... to me it seemed obvious that the retained elements should just stay where they are)
13:36:41 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65516&oldid=65515 * A * (+35)
13:36:52 <int-e> Okay, the subtraction issue is resolved. Now let me think about whether I can reasonably deal with the 'r' thing...
13:38:18 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65517&oldid=65516 * A * (+34) /* Period [1,2] */
13:38:32 <esowiki> [[Osis]] M https://esolangs.org/w/index.php?diff=65518&oldid=65517 * A * (+11) /* Command reference */
13:40:23 <wob_jonas> You should put a page on the wiki about this Wagon thing, pointing to where it's defined and the implementation and other info
13:48:30 <int-e> cpressey: Nah, the 'r' thing messes up everything for me. With only 0 and one, you cannot change the adjacency relations of elements on the stack (viewed as a ring with the last element linked to the first).
13:49:38 <int-e> so all data movement has to happen through arithmetic... which may be possible, but it's bound to be much harder than what I've been doing.
13:50:48 -!- zombocoder has joined.
13:52:12 <cpressey> I should have been clearer and/or done a more proper release. I'm sorry.
13:53:52 <int-e> ah you can do the in-place swap a = a-b; b = b+a; a = -a-b;
13:54:42 <wob_jonas> cpressey: nah, no release is completely normal. these things tend to just escape without a release.
13:58:19 <esowiki> [[Wagon]] N https://esolangs.org/w/index.php?oldid=65519 * B jonas * (+433) Created page with "Wagon is a stack-based language created by cpressey in 2019. It's advertised as a "second-order concatenative language". It uses a stack of unbounded size integers and a sma..."
14:07:47 <wob_jonas> so in a wagon program, all the while loops are nested, like as an ordinary program they would look like *[*[*[...*[*[*]*]*...]*]*]* where the brackets are while loops and each star can be any sequence of ordinary non-looping instructions that act on the stack?
14:08:11 <wob_jonas> so you can't have two loops that aren't nested but are next to each other, like *[*]*[*]*
14:08:41 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65520&oldid=65467 * B jonas * (+12)
14:10:20 <int-e> cpressey: Oh well, I think I can make this work, but wow is it tedious ;)
14:23:31 <esowiki> [[Wagon]] https://esolangs.org/w/index.php?diff=65521&oldid=65519 * B jonas * (+64)
14:25:56 <int-e> cpressey: for example, diriisririisrirsirdiisriririisrirsirdiriisriisiriisrirsirsiisrir swaps the top two elements of the stack
14:26:42 <int-e> (without using 2r)
14:27:46 <wob_jonas> so is this why you were talking about super-optimizers?
14:27:53 <wob_jonas> to find shorter wagon instruction sequences?
14:29:22 <int-e> no, definitely not
14:29:29 <int-e> that was just a general SMT discussion
14:35:25 <cpressey> wob_jonas: your statements about *[*[...]*]* and *[*]*[*]* are correct
14:36:30 <wob_jonas> cpressey: ok, I think that qualifies this as an esolang
14:41:46 <int-e> cpressey: so instead of 1586 characters, I now have 22826 characters...
14:42:41 <int-e> cpressey: but it works again, and never uses r with arguments other than 0 and 1: http://paste.debian.net/1095871/
14:44:14 <int-e> (I even got the basic logic to work again, which I was a bit skeptical about at first)
14:47:07 <int-e> (with a builtin swap it would be 4430 characters; there are 292 swaps in that code now.)
14:47:52 <int-e> But who cares... I'm sure this can be optimized quite a bit.
14:56:10 <cpressey> I'll try to put out a more proper release tomorrow.
14:56:17 -!- cpressey has quit (Quit: A la prochaine.).
14:56:55 <int-e> http://paste.debian.net/1095873/ is a bit better, 15378 characters
15:00:19 -!- zombocoder has quit (Ping timeout: 248 seconds).
15:04:09 -!- zombocoder has joined.
15:04:21 <esowiki> [[Talk:Wagon]] N https://esolangs.org/w/index.php?oldid=65522 * Int-e * (+257) Put link here for future reference.
15:12:19 -!- zombocoder has quit (Read error: Connection reset by peer).
15:18:21 -!- Sgeo_ has joined.
15:21:39 -!- Sgeo has quit (Ping timeout: 248 seconds).
15:29:07 -!- zombocoder has joined.
15:38:51 -!- wob_jonas has quit (Remote host closed the connection).
15:57:17 -!- onon has joined.
16:36:48 -!- Bowserinator has quit (Read error: Connection reset by peer).
16:37:24 -!- probablymoony has joined.
16:38:18 -!- Bowserinator has joined.
16:39:13 -!- moony has quit (Ping timeout: 246 seconds).
17:03:37 -!- FreeFull has joined.
17:08:34 -!- b_jonas has joined.
17:12:02 -!- xkapastel has quit (Quit: Connection closed for inactivity).
17:37:37 -!- sleepnap has joined.
17:40:03 -!- AnotherTest has quit (Quit: ZNC - http://znc.in).
17:40:13 -!- AnotherTest has joined.
17:44:07 -!- AnotherTest has quit (Read error: Connection reset by peer).
17:44:09 -!- AnotherTest_ has joined.
17:44:33 -!- AnotherTest_ has changed nick to AnotherTest.
17:47:07 -!- Phantom_Hoover has joined.
17:47:28 -!- unlimiter has joined.
17:50:50 -!- unlimiter has quit (Client Quit).
18:02:21 -!- unlimiter has joined.
18:11:48 -!- tromp_ has joined.
18:14:09 -!- tromp has quit (Ping timeout: 252 seconds).
18:29:30 -!- zombocoder has quit (Read error: Connection reset by peer).
18:43:24 -!- unlimiter has quit (Quit: thank you all).
19:02:59 -!- jix has quit (Ping timeout: 248 seconds).
19:06:13 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds).
19:07:15 -!- AnotherTest has quit (Ping timeout: 248 seconds).
19:09:51 -!- jix has joined.
19:12:12 -!- AnotherTest has joined.
19:18:23 -!- AnotherTest has quit (Ping timeout: 245 seconds).
19:21:50 -!- sleepnap has quit (Quit: Leaving.).
19:29:51 -!- AnotherTest has joined.
19:30:02 -!- diverger has quit (Ping timeout: 245 seconds).
19:38:50 -!- Phantom_Hoover has joined.
19:56:03 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65523&oldid=65490 * Salpynx * (+1) Undo revision 65490 by [[Special:Contributions/Dtuser1337|Dtuser1337]] ([[User talk:Dtuser1337|talk]]) Deadfish resets to 0 only at exactly 256, it's a required 'bug'
19:57:22 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
19:57:49 -!- Phantom_Hoover has joined.
19:58:32 <Cale> https://www.youtube.com/watch?v=q3Mc0ChHhlk
19:59:25 <Cale> I get notified by YouTube about it
20:00:08 <shachaf> You gotta like, subscribe, click the little bell, and let us know what you think in the comments below.
20:02:00 <Cale> It's kind of obnoxious how every channel has to ask people to click the bell because the assumption is that they don't know how to use YouTube's UI
20:03:17 <shachaf> I don't think that's the assumption.
20:03:28 <shachaf> The assumption is only that if you tell people to do it, they'll do it more than if you don't.
20:04:52 <Cale> Well, sure, but the problem that caused this is that YouTube's "Home" page doesn't show every video from your subscriptions, and instead shows a bunch of random crap instead. You have to go to "Subscriptions" if you want to see all the videos from the channels you're subscribed to.
20:05:23 <shachaf> The problem is that YouTube hates you and wants you to suffer.
20:05:26 <Cale> But at least if you have the notification bell clicked, you'll get a notification, and I'm not sure but maybe it helps those videos appear on "Home" as well.
20:05:42 <shachaf> Or rather they don't care about you and want to extract the maximum possible engagement out of you.
20:08:50 <b_jonas> shachaf: click on the thumbs up too. if we get four thousand thumbs up on this video, we'll do a special one next week.
20:19:05 -!- Lord_of_Life_ has joined.
20:22:08 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:22:09 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:23:39 <shachaf> int-e: Are you awake at all times?
20:24:01 <int-e> I've been awake at all times modulo 24, I think.
20:32:37 -!- divergence has joined.
21:11:06 -!- sleepnap has joined.
21:16:11 -!- xkapastel has joined.
21:18:47 -!- AnotherTest has quit (Ping timeout: 245 seconds).
21:27:36 -!- unlimiter has joined.
21:34:18 -!- tromp_ has quit (Remote host closed the connection).
21:34:21 -!- adu has joined.
21:38:45 -!- unlimiter has quit (Quit: WeeChat 2.5).
21:53:52 -!- tromp has joined.
21:58:11 -!- tromp has quit (Ping timeout: 252 seconds).
22:00:15 -!- adu has quit (Quit: adu).
22:04:36 -!- b_jonas has quit (Quit: leaving).
22:12:49 <esowiki> [[Black]] M https://esolangs.org/w/index.php?diff=65524&oldid=55554 * ZM * (+4) /* Golly */ Wright's GitHub profile changed
22:18:15 -!- zombocoder has joined.
22:27:43 -!- sleepnap has quit (Quit: Leaving.).
22:32:01 -!- Phantom_Hoover has quit (Quit: Leaving).
22:42:35 -!- sleepnap has joined.
23:07:14 -!- unlimiter has joined.
23:10:03 -!- zombocoder has quit (Ping timeout: 245 seconds).
23:16:40 -!- sleepnap has left.
23:17:32 -!- catern has joined.
23:18:38 -!- FreeFull has quit.
23:19:29 -!- unlimiter has quit (Quit: WeeChat 2.5).
23:28:26 -!- Hooloovo0 has quit (Quit: Temporarily refracted into a free-standing prism.).
23:29:32 -!- unlimiter has joined.
23:31:45 -!- Hooloovo0 has joined.
23:33:09 -!- unlimiter has quit (Client Quit).
23:39:36 -!- tromp has joined.
23:44:03 -!- tromp has quit (Ping timeout: 248 seconds).
00:15:52 -!- zzo38 has joined.
00:33:43 -!- oerjan has joined.
00:34:09 -!- tromp has joined.
00:38:25 -!- tromp has quit (Ping timeout: 252 seconds).
00:40:20 -!- tromp has joined.
00:44:37 -!- tromp has quit (Ping timeout: 245 seconds).
01:38:48 -!- Sgeo__ has joined.
01:41:43 -!- Sgeo_ has quit (Ping timeout: 246 seconds).
01:55:34 -!- probablymoony has changed nick to moony.
02:25:06 <zzo38> https://rabbitboots.com/kfx/index.php/ZZT_On_ZZT#Undocumented_features Now I noticed they mentioned you can push | to access the cheat prompt on the title screen in ZZT. I did not know that, but now I know.
02:37:30 -!- Sgeo__ has quit (Read error: Connection reset by peer).
02:43:39 -!- Sgeo has joined.
03:12:02 -!- xkapastel has quit (Quit: Connection closed for inactivity).
05:22:11 -!- oerjan has quit (Quit: Nite).
06:25:56 -!- tromp has joined.
06:28:38 -!- tromp_ has joined.
06:29:35 -!- tromp has quit (Read error: Connection reset by peer).
06:54:12 -!- Sgeo has quit (Ping timeout: 245 seconds).
07:03:18 -!- tromp_ has quit (Remote host closed the connection).
07:10:11 -!- tromp has joined.
07:11:36 -!- tromp_ has joined.
07:14:25 -!- tromp has quit (Ping timeout: 252 seconds).
07:15:53 -!- tromp_ has quit (Ping timeout: 252 seconds).
07:21:47 -!- tromp has joined.
07:27:31 <esowiki> [[Special:Log/newusers]] create * Messersm * New user account
07:34:55 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65525&oldid=65480 * Messersm * (+218) /* Introductions */
08:04:15 -!- AnotherTest has joined.
08:20:53 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:23:54 -!- Lord_of_Life has joined.
09:01:25 -!- Sgeo has joined.
10:17:53 <shachaf> whoa, it's unknown whether the Post Correspondence problem is decidable with 3 or 4 tiles.
10:26:03 -!- cpressey has joined.
10:32:40 <cpressey> IOCCC winners are denounced; IOCCC switches are debounced
10:35:13 <cpressey> So I have this vanilla term-rewriting language, and a program that can, given a set of rules, check if a given sequence of rewrites is valid or not.
10:35:58 <cpressey> I'm trying to find the shortest distance between this program, and a program that can check if a proof written in propositional logic is valid or not.
10:37:20 <cpressey> You don't need much to turn the one into the other, but you do need a few things, and I want a clear idea of what they are.
10:37:44 <cpressey> First-order logic would be the next step beyond that.
10:39:59 <cpressey> Oh! For anyone who hasn't seen it, this is definitely worth checking out: http://incredible.pm/
10:40:20 <int-e> cpressey: so I made a faster Wagon interpreter: https://gist.github.com/int-e/e4ae1f40f8173d67860d8f8e45c433c0#file-ring-hs
10:42:06 <esowiki> [[Talk:Wagon]] M https://esolangs.org/w/index.php?diff=65526&oldid=65522 * Int-e * (+42) /* Computational Class */ --> link
10:42:39 <Taneb> cpressey: that's pretty neat
10:50:42 -!- zombocoder has joined.
11:09:19 <cpressey> int-e: your implementations make mine look like chicken-scratches. I'll try to make and release a Wagon distribution today. But I have to rewrite the part about computational class first.
11:24:03 -!- AnotherTest has quit (Ping timeout: 264 seconds).
11:27:28 -!- divergence has quit (Read error: Connection reset by peer).
11:28:19 -!- zombocoder has quit (Ping timeout: 246 seconds).
11:28:40 <int-e> Hmm, should I have a look at the cargo cult?
11:29:16 <int-e> (I mean Rust: https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html)
11:29:23 -!- diverger has joined.
11:44:11 <cpressey> https://github.com/catseye/Wagon
11:45:23 <cpressey> I had some thoughts about how you might simulate a TM more directly in a Wagon-like language. Basically you could say something like:
11:47:10 <cpressey> while(!halt) { write(0,0,0); if(s>1) { if(s>2) { if(s>3) { xor(1,0,1) } xor(0,1,1) } xor(1,1,1) } use() }
11:47:36 <cpressey> where use() takes what's been written by write() and modified by xor() and applies it to the tape
11:48:27 <int-e> sure, we can do something like that.
11:48:52 <cpressey> use() still represents "a little control" perhaps
11:54:06 <int-e> cpressey: If you look closely at Tag.hs, I have enough building blocks for boolean circuits plus an extensible circular tape.
11:55:43 <int-e> cpressey: I guess the real challenge with your suggestion is to deal with the variable movement of the TM's head.
11:56:40 <esowiki> [[Wagon]] https://esolangs.org/w/index.php?diff=65527&oldid=65521 * B jonas * (+62) link to the new int-erpreter
11:57:35 <cpressey> int-e: yeah, I was thinking, if you had a slightly different memory model, and an instruction "pop N and add N to position of tape head" - otherwise you need a loop
11:58:11 <cpressey> b/c you only *need* to handle -1 and 1
11:58:59 <int-e> cpressey: I believe you /can/ have a variadic shift by invoking "r" with a flag that indicates whether to move or not, often enough.
11:59:17 <cpressey> oh good grief. yes, possibly you can
11:59:44 <cpressey> r is disappointingly powerful, even with only 0 or 1
12:00:01 <int-e> But it's tricky to get right. (I was happy when I had my new 'landn' operation and that only has two "variable" r operations, the second one undoing the effect of the first.)
12:00:27 -!- zombocoder has joined.
12:02:03 <int-e> cpressey: so it may be powerful, but it's really awkward to use.
12:07:59 <int-e> cpressey: And as mentioned yesterday, the restriction to 0 and 1 gutted it to the point where it cannot be used to permute elements on the stack anymore.
12:08:29 <cpressey> Well, that's good! For some value of "good".
12:10:42 <cpressey> re hugs, cpressey == luddite, I have not actually tested it on hugs, but it's in the "standard Haskell-running script" that I've sort of arrived at
12:11:04 <cpressey> https://github.com/catseye/Wagon/blob/master/bin/wagon
12:11:08 <int-e> cpressey: yeah that's what I thought :)
12:11:27 <cpressey> It makes me happy that I can build Hugs on NetBSD, etc
12:11:28 <int-e> because I honestly can't remember when I last used hugs.
12:12:09 <int-e> But I suspect it has been over a decade.
12:13:44 <cpressey> Ha, running Wagon's test suite on Hugs is actually faster than running it with ghci.
12:14:31 <cpressey> 2.8 seconds versus 6.2 seconds
12:15:08 <cpressey> 0.18 seconds if you compile it with ghc first
12:16:37 <cpressey> I can forgive the ghc team for not making reducing ghci startup time their #1 priority, though.
12:17:46 <int-e> (This is /the/ bottleneck for lambdabot's Haskell evaluation. Which is obviously the most important use case in the world.)
12:18:38 <int-e> It's not ghci exactly; it's mueval, which uses hint, which uses the ghc API in a way similar to, but not quite the same as, ghci does.
12:19:38 <cpressey> This is a terrible idea, but could you not run a sort of "language server daemon" in the backrgound that... yeah
12:20:16 <cpressey> Split lambdabot into a set of microservices
12:21:03 <int-e> cpressey: I'm worried about trading timeouts for a memory leak.
12:21:54 <int-e> (ghci is bad at releasing memory... so a I imagine a long-running haskell evaluation server would inherit that property)
12:23:04 -!- wob_jonas has joined.
12:25:08 <int-e> cpressey: So I have a crazy idea that would involve starting a ghc API session, loading the most important packages, then suspend the RTS, and then fork the process, and proceed with the actual evaluation. But I'm scared of investigating it in detail (the RTS is multi-threaded, and uses pipes internally, and who knows what else)
12:27:00 <wob_jonas> it could be two-graded, using hugs by default, but if evaluation takes long, switch to compiling with ghc
12:27:11 <wob_jonas> would lead to funny unexplainable inconsistencies in behavior
12:30:46 <int-e> s/funny/interesting/ is about as far as I'm willing to go
12:31:04 <int-e> (in the "interesting times" sense of course)
12:47:02 <int-e> #ghc points out that there's a forkProcess operation that does a lot of this work; it may just be enough.
13:08:38 <esowiki> [[Wagon]] https://esolangs.org/w/index.php?diff=65528&oldid=65527 * Chris Pressey * (+383) Make the article a little less stub-like.
13:12:56 <esowiki> [[Wagon]] M https://esolangs.org/w/index.php?diff=65529&oldid=65528 * Chris Pressey * (+0) Category name does not contain a hyphen
13:30:25 -!- xkapastel has joined.
13:45:53 -!- zombocoder has quit (Ping timeout: 245 seconds).
13:58:43 -!- zombocoder has joined.
14:39:05 -!- cpressey has quit (Quit: A la prochaine.).
14:39:31 -!- zombocoder has quit (Ping timeout: 248 seconds).
14:43:42 -!- atslash has quit (Quit: This computer has gone to sleep).
14:45:53 -!- zombocoder has joined.
14:58:05 -!- atslash has joined.
15:02:32 -!- atslash has quit (Ping timeout: 244 seconds).
15:15:52 -!- heroux has quit (Ping timeout: 268 seconds).
15:16:01 -!- heroux has joined.
15:38:16 -!- sleepnap has joined.
15:47:13 <zzo38> cpressey: I wrote a document for using Glk with Funge-98.
15:48:08 <zzo38> The registry doesn't work (as it says, it is obsolete), so, I will ask here instead.
15:49:16 <zzo38> Also, I think that there should be a handprint value defined for unregistered interpreters.
15:53:33 <fizzie> fungot: What do you think? Presumably you have many opinions regarding Funge-98.
15:53:33 <fungot`> fizzie: on the other hand; i'm probably goign to use it is me, by the way,
15:53:59 -!- fungot` has changed nick to fungot.
15:59:12 <esowiki> [[Brainfuck implementations]] M https://esolangs.org/w/index.php?diff=65530&oldid=64583 * Erwijet * (+261) Added erwijet's flexable brainf.net library
15:59:55 -!- zombocoder has quit (Ping timeout: 246 seconds).
16:00:36 -!- wob_jonas has quit (Remote host closed the connection).
16:12:20 -!- Sgeo_ has joined.
16:14:59 -!- Sgeo has quit (Ping timeout: 248 seconds).
16:43:48 -!- Sgeo_ has quit (Ping timeout: 244 seconds).
17:16:34 -!- xkapastel has quit (Quit: Connection closed for inactivity).
17:36:26 -!- zombocoder has joined.
17:43:06 -!- b_jonas has joined.
17:57:09 -!- zombocoder has quit (Read error: Connection reset by peer).
17:57:10 -!- ais523 has joined.
17:58:07 -!- zombocoder has joined.
18:00:25 <b_jonas> what genre of music does my hon. and learned friend fungot listen to?
18:00:25 <fungot> b_jonas: i just want to use local packages, specify file urls. if you want
18:00:48 <fungot> b_jonas: looking at it. relative to s48 that's exactly what i said doesn't make any sense
18:01:26 <esowiki> [[Loose Circular Brainfuck]] N https://esolangs.org/w/index.php?oldid=65531 * Ais523 * (+45) redir
18:04:06 <esowiki> [[Talk:Wagon]] https://esolangs.org/w/index.php?diff=65532&oldid=65526 * Ais523 * (+522) alterrnative Turing-completeness proof: you can implement two-bracket brainfuck
18:26:49 -!- Phantom_Hoover has joined.
18:28:01 -!- FreeFull has joined.
18:39:58 -!- tromp has quit (Remote host closed the connection).
18:40:30 -!- AnotherTest has joined.
18:41:59 -!- xkapastel has joined.
19:12:19 -!- ais523 has quit (Quit: quit).
19:17:27 -!- tromp has joined.
19:22:15 -!- tromp has quit (Ping timeout: 264 seconds).
19:34:04 -!- zombocoder has quit (Ping timeout: 272 seconds).
19:42:33 -!- lldd_ has joined.
19:47:42 -!- adu has joined.
20:05:22 -!- tromp has joined.
20:23:28 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
20:24:00 -!- Lord_of_Life has joined.
20:32:27 -!- AnotherTest has quit (Ping timeout: 264 seconds).
20:45:35 -!- lldd_ has quit (Quit: Leaving).
21:25:44 <zzo38> How to make Ghostscript to not wait until the window is exposed before it will work?
21:42:51 -!- xkapastel has quit (Quit: Connection closed for inactivity).
21:48:43 -!- sleepnap has quit (Quit: Leaving.).
21:52:04 -!- sleepnap has joined.
21:53:03 -!- sleepnap has quit (Client Quit).
23:08:37 -!- b_jonas has quit (Remote host closed the connection).
23:32:07 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
00:32:55 <zzo38> I figured out how. If it is written: gs -dNODISPLAY Then it won't print any pages at all, but other stuff still works.
00:37:54 -!- Sgeo has joined.
00:39:11 -!- Sgeo_ has joined.
00:39:54 <Sgeo_> shachaf, ALGOL 68 or Zig?
00:42:28 -!- Sgeo has quit (Ping timeout: 246 seconds).
01:06:30 -!- FreeFull has quit.
01:10:58 -!- tromp has quit (Read error: Connection reset by peer).
01:52:36 <tswett[m]> So did I mention that I've implemented a programming language? So far, the only thing you can do in it is define uninhabited types.
02:07:43 <zzo38> What programming language is that?
02:08:40 <shachaf> Do you think the idea of a "block of code" as a semi-first-class thing that exists at compile-time makes sense?
02:08:47 <shachaf> Or even a parameterized block.
02:15:05 <zzo38> shachaf: I think it can.
02:16:25 <shachaf> Do you know what it'd be like?
02:17:38 <zzo38> It might depend the programming language, I think.
02:18:01 <shachaf> Yes. If I invent a programming language, what would it be like?
02:21:28 <shachaf> I think this is like a kind of hygienic macro, maybe.
02:21:43 <shachaf> I guess I should read about hygienic macro systems.
02:22:08 <zzo38> Yes, I also thought so, it is like that (although used in a specific kind of context, if the programming language has more than one kind of context).
02:22:50 <shachaf> I want things like block labels (used for early exit) to be semi-first-class, passable at compiletime.
02:22:58 <shachaf> Do you know of a language that does things like that?
02:29:00 <zzo38> The document for PostScript says the limit for strings is 65535, but Ghostscript documentation says 16777216, but, I tried it and it doesn't seems to accept strings longer than 65535.
02:30:00 <zzo38> Did they change it some version that I don't have?
03:51:31 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65533&oldid=65500 * A * (+1351) /* Re: Your Comment On My Github Pull Request */
04:02:30 -!- kolontaev has joined.
04:03:22 <kolontaev> I'm wondering: does SETI@home uses Fast Fourier Transform to find repeating signals, as simple as this?
04:30:54 -!- arseniiv has joined.
05:36:55 -!- tromp has joined.
05:40:17 -!- Sgeo has joined.
05:41:27 -!- tromp has quit (Ping timeout: 264 seconds).
05:43:12 -!- Sgeo_ has quit (Ping timeout: 258 seconds).
05:53:09 -!- galenasphaug has joined.
05:55:51 <zzo38> Now I wrote the program in Farbfeld Utilities to read a PostScript file. (It just uses the Ghostscript Interpreter API, and then converts the data to farbfeld.)
05:56:37 -!- galenasphaug has quit (Quit: galenasphaug).
05:58:02 -!- clownfishman has joined.
06:00:07 -!- sleepnap has joined.
06:01:34 -!- sleepnap has left.
06:03:18 -!- clownfishman has quit (Quit: clownfishman).
06:04:47 -!- clownfishhuman has joined.
06:05:01 -!- clownfishhuman has quit (Remote host closed the connection).
06:06:28 -!- clownfishhuman has joined.
06:13:23 -!- clownfishhuman has quit (Read error: Connection reset by peer).
06:17:13 -!- clownfishhuman has joined.
06:17:25 -!- clownfishhuman has quit (Remote host closed the connection).
06:19:31 -!- clownfishhuman has joined.
06:20:23 -!- rain2 has quit (Ping timeout: 258 seconds).
06:24:17 -!- clownfishhuman has left ("Good Bye").
06:29:16 -!- rain1 has joined.
07:24:24 -!- Vorpal has joined.
07:24:59 -!- tromp has joined.
07:29:21 -!- tromp has quit (Ping timeout: 252 seconds).
07:58:05 -!- tromp has joined.
08:23:37 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
08:25:42 -!- Lord_of_Life has joined.
08:42:26 <esowiki> [[C-INTERCAL]] https://esolangs.org/w/index.php?diff=65534&oldid=59264 * YamTokTpaFa * (+36)
08:45:06 -!- AnotherTest has joined.
08:51:09 -!- zombocoder has joined.
09:48:48 -!- zombocoder has quit (Ping timeout: 245 seconds).
09:50:29 -!- zombocoder has joined.
09:53:54 -!- tromp has quit (Remote host closed the connection).
10:11:52 -!- tromp has joined.
10:12:00 -!- zombocoder has quit (Quit: Leaving.).
10:17:41 -!- Sgeo_ has joined.
10:21:01 -!- Sgeo has quit (Ping timeout: 268 seconds).
10:30:09 -!- heroux_ has joined.
10:30:10 -!- heroux has quit (Read error: No route to host).
10:30:31 -!- heroux_ has changed nick to heroux.
11:02:36 -!- FreeFull has joined.
11:53:48 -!- b_jonas has joined.
11:56:07 <b_jonas> tswett[m]: is that because it's a language where you have to do everything during compile time?
12:24:08 -!- tromp has quit (Read error: Connection reset by peer).
12:28:23 -!- tromp has joined.
12:32:59 -!- tromp_ has joined.
12:33:00 -!- tromp has quit (Read error: Connection reset by peer).
13:10:02 <int-e> b_jonas: how are your smooth numbers coming along?
13:11:06 <tswett[m]> b_jonas: I'm not sure what you mean.
13:16:12 -!- atslash has joined.
13:31:02 <b_jonas> tswett[m]: if you compute everything at runtime in the type system, then you don't actually need instances of the types
13:31:16 <b_jonas> int-e: haven't worked on it yet, sorry
13:31:35 <tswett[m]> No, it's because I just haven't implemented values yet.
13:39:03 -!- atslash has quit (Quit: This computer has gone to sleep).
13:49:45 -!- andrewtheircer has joined.
15:23:29 -!- andrewtheircer has quit (Remote host closed the connection).
15:41:00 -!- Sgeo has joined.
15:41:58 -!- andrewtheircer has joined.
15:43:48 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
16:12:26 -!- Phantom_Hoover has joined.
16:37:07 <esowiki> [[Commercial]] https://esolangs.org/w/index.php?diff=65535&oldid=52103 * Dtuser1337 * (+52) added mirror link since the original has been deleted
16:52:40 -!- atslash has joined.
16:53:09 -!- FreeFull has quit.
16:57:07 -!- atslash has quit (Ping timeout: 248 seconds).
16:58:07 -!- atslash has joined.
17:01:50 -!- atslash has quit (Max SendQ exceeded).
17:02:23 -!- atslash has joined.
18:13:22 -!- rain1 has quit (Ping timeout: 245 seconds).
18:30:19 <esowiki> [[Drive-In Window]] https://esolangs.org/w/index.php?diff=65536&oldid=65493 * Dtuser1337 * (+72) Now with online interpreter :)
18:40:24 -!- Sgeo_ has joined.
18:41:52 -!- Sgeo has quit (Ping timeout: 246 seconds).
18:50:34 -!- andrewtheircer has quit (Ping timeout: 258 seconds).
18:59:29 -!- MDude has joined.
19:06:31 -!- MDead has joined.
19:06:52 -!- MDude has quit (Ping timeout: 244 seconds).
19:07:01 -!- MDead has changed nick to MDude.
20:15:26 -!- arseniiv has quit (Ping timeout: 272 seconds).
20:16:22 -!- FreeFull has joined.
20:17:38 <zzo38> I made up some Magic: the Gathering card of story of GURPS game I play. Some I put on here, but, I wrote some more on a paper. Now, I can write on the computer, too.
20:18:40 <zzo38> Evil Barber {2UB} Creature - Human Shapeshifter (1/1) ;; {1X}: ~ becomes a copy of target creature with converted mana cost X or target creature card in any graveyard with converted mana cost X, except it is a Shapeshifter in addition to its other types. This effect can be ended as a special action.
20:22:10 -!- Lord_of_Life_ has joined.
20:24:52 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
20:25:03 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:55:14 <esowiki> [[MinISCule]] https://esolangs.org/w/index.php?diff=65537&oldid=65413 * Calamari * (+386) Added additional external references
20:57:51 <esowiki> [[User talk:Calamari]] https://esolangs.org/w/index.php?diff=65538&oldid=65443 * Calamari * (+206) /* Issues With Page */
21:32:19 -!- AnotherTest has quit (Ping timeout: 250 seconds).
21:40:04 -!- atslash has quit (Quit: Leaving).
21:53:17 -!- andrewtheircer has joined.
22:25:23 -!- adu has quit (Quit: adu).
22:26:27 -!- adu has joined.
22:47:50 <zzo38> Axe of Reuse {2} Artifact - Equipment ;; Equipped creature gets +2/+1 and has vigilance. ;; Equip {4}
22:48:02 <zzo38> Do you like this Magic: the Gathering cards? Do you like to make up the cards too?
22:58:32 <b_jonas> dunno, looks ok but I find I have no use for such expensive equipment cards. it's a bit of a pity because Wizards found that Bonesplitter is too powerful, they can't print one like that again, and all they can do with the next equipment is try to race for the remaining slots for decks that need more than 4 equipment.
22:59:31 <b_jonas> I found that Vulshok Gauntlets, with its 2 mana cost and 3 equip cost is as expensive as I dare to
23:02:10 <zzo38> OK. What comment of the other one?
23:02:50 <b_jonas> plus I seem to recall there was some top tier creature that let you use expensive equipment for free in a way that's more efficient than the original Mirrodin block ones
23:03:04 <b_jonas> the shapeshifter? I really can't judge how those work
23:03:44 <b_jonas> I only ever see them as causing trouble with the rules, not as cards in real games
23:04:10 <zzo38> It works fine as far as I can tell from reading the rules.
23:04:55 <b_jonas> sure, there's no specific rules problem with this card
23:05:09 -!- adu has quit (Quit: adu).
23:17:37 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
23:44:55 <shachaf> happy to report that the kittens are extremely good
23:45:09 <kmc> you got kittens?
23:46:01 <b_jonas> kitten smilies like |\__/| ?
00:32:56 -!- andrewtheircer has quit (Remote host closed the connection).
00:38:16 -!- b_jonas has quit (Ping timeout: 272 seconds).
00:38:42 -!- b_jonas has joined.
01:11:03 -!- b_jonas has quit (Remote host closed the connection).
01:20:51 -!- FreeFull has quit.
01:25:34 -!- ais523 has joined.
01:25:49 <ais523> ugh, I'm dealing with a really annoying missed optimisation atm
01:25:52 <ais523> ptrdiff_t notneg(unsigned char b) { if (b <= 0xC0) __builtin_unreachable(); return -(ptrdiff_t)(unsigned char)~b; }
01:29:00 <ais523> the correct optimisation is «return 1 + (ptrdiff_t)(signed char)b;» but neither gcc nor LLVM finds it (you could also do the increment first)
01:32:37 <ais523> huh, they don't find it even with a cast to signed char in there, although clang finds it if you put a cast to signed /int/ in there (of course, none of these casts make a difference because ~b has to be a positive number in the 0..30 range)
01:33:16 <zzo38> LLVM allows you to specify the range, but I think only for loading from memory.
01:35:05 <ais523> I just get annoyed when compilers produce asm that's worse than the asm I'm expecting
01:35:30 <ais523> (and I'm the sort of person who actually checks that when I write code like -(ptrdiff_t)(unsigned char)~b…)
01:36:17 <zzo38> Is there any command to have a inline LLVM code in a C code?
01:37:03 <zzo38> Also, in Ghostscript, the "forall" command doesn't seems to work properly for strings longer than 800 bytes. (Other commands work (including the "length" command), and it works fine for arrays, but not for strings.) Why does it do that?
01:38:29 <ais523> there's no standard C method to use inline LLVM; clang could theoretically support it as an extension to __asm__ but I don't think it does
01:40:19 <ais523> hmm, so my next problem is, should I write it as 1 + (ptrdiff_t)(signed char)b in the original source, even though that's a lot less clear (the operation I'm using is conceptually a combination of a bitwise-complement and a unary minus, the fact that that does the same thing as an increment is just an intentionally engineered coincidence)
01:42:45 <shachaf> ais523: Oddly enough if you write out a lookup table gcc finds a good implementation.
01:44:59 <ais523> what, if you special-case all 31 possible inputs? :-D
01:45:28 <shachaf> Yes, if you write a switch over the entire range.
01:46:21 <shachaf> (I mean "range of inputs" and not "codomain" or "image", which people refer to as "range" for some reason.)
01:47:05 <zzo38> One possibility is to write a comment.
01:47:55 <zzo38> (Also, which implementation is better might depend on the target computer, maybe?)
01:48:33 <shachaf> What's the context of this function?
01:48:45 <ais523> decoder for a file format
01:49:13 <ais523> it stores references to earlier locations in the file as 1, 2, 4, or 8 bytes, I'm writing a separate function for each
01:49:21 <shachaf> And the speed of this operation is relevant?
01:49:25 <ais523> but the references are bitwise-complemented
01:49:51 <ais523> the format's designed to be extremely fast, faster to use a memory image of the format than actually parsing it
01:50:15 <ais523> this operation needs to be able to compete with pointer dereferences to do that
01:50:21 <ais523> it's a format I'm inventing atm
01:51:02 <ais523> (the idea is that the +1 ends up getting inlined into the dereference of the resulting pointer)
01:51:53 <ais523> I'd store the offsets as with the +1 added if I could, but I can't because 0 is a valid offset and there is a fairly esoteric constraint that the offsets cannot be valid UTF-8
01:52:15 <ais523> #esoteric is definitely the right channel for this :-D
01:52:31 <shachaf> So that's the reason for the 0xc0. I was vaguely wondering before whether it was related to UTF-8.
01:52:59 <shachaf> Maybe you're being deliberately vague.
01:53:28 <ais523> not because it's secret, mostly because it's hard to explain
01:53:50 <ais523> the format's designed for the output of a parser, i.e. the in-memory representation of a parse tree
01:54:10 <ais523> but to be generic enough to be usable in much the same situations as XML is
01:54:50 <ais523> but the idea is that the parser output is just an image in memory, it's not something that you parse into a linked tree of structures like you normally do
01:55:26 <ais523> linked lists are bad performance-wise, and linked trees are very common but probably also beatable in performance for the same reasons, so I wanted to try
01:56:17 <zzo38> XML is often used in cases where it shouldn't be, anyways, I think
01:56:44 <shachaf> I suspect the gains from a more efficient memory encoding are way bigger than the gains from a couple of extra instructions to dereference a pointer.
01:57:00 <ais523> shachaf: that's what I'm hoping, at leasts
01:57:32 <ais523> (not just more efficient, but more compact too, meaning it makes better use of the cache; also less malloc overhead)
01:58:39 <shachaf> I think it's plausible that even with a regular parser, you should have only one or a few calls to malloc for the entire tree, which you free all at once.
01:59:04 <shachaf> There isn't much benefit to mallocing individual nodes.
02:00:33 <ais523> all the parsers I've seen so far malloc individual nodes for the output tree, although I agree there isn't much benefit to it
02:00:46 <ais523> I think the idea is to let you free parts of the tree individually
02:01:17 <shachaf> I suspect there's no real idea, it's just that people learn that that's how you get memory.
02:01:21 <ais523> but the normal operation on a tree is to traverse it, and that lets you build a new tree as you go
02:02:14 <zzo38> In some programs you would free one branch of the tree separately from the rest
02:02:16 <ais523> this program is actually being written in Rust (I translated it into C to test it on gcc), and rust has a #[no_std] annotation that means your program has no support at all from the operating system, it's used for purely algorithmic libraries
02:03:11 <ais523> that means you don't get memory allocation unless the caller gives you a memory allocation callback, and so I try to avoid allocations out of habit, thinking carefully about if I need them
02:03:19 <ais523> often, I don't need much more than one or two for the program
02:03:38 <shachaf> I'd like to know more about possible allocation strategies.
02:04:12 <shachaf> I think I've talked about that in here before.
02:04:29 <ais523> well, the one I'm working on for this program (for the parsers, tree operations, etc.) is a purely linear allocation strategy where everything is written in memory left to right in order, meaning that your algorithms have to be able to manage that
02:05:11 <shachaf> Does this memory go left to right in order of increasing addresses?
02:05:13 <ais523> many algorithms can't, but for a parser it's fairly hopeful because parsing algorithms and tree-traversal algorithms both naturally work like that
02:05:48 <ais523> yes, increasing addresses (decreasing is possible I guess but it's sufficiently alien that you normally get less support from the standard library, OS, processor, etc.)
02:06:15 <shachaf> Unless it's the call stack.
02:06:28 <ais523> writing left to right unfortunately means that reading right to left is sometimes required, but reads on a parse tree are generally more random-access than writes as it is (you're often trying to match both branches of the tree to something)
02:06:36 <shachaf> I like the idiom of having a global (or thread-local) arena that can be used effectively as a stack but with the frames manually managed.
02:06:43 <ais523> the call stack in x86 is the wrong way up and I am very upset at this
02:07:27 <shachaf> So functions that produce variable-size output that's only needed briefly can just write into there.
02:07:33 <zzo38> I wrote one program which needs the caller to specify a memory allocation function, although you can just put realloc and it will work, which is normally what would be done, I think.
02:07:39 <ais523> there's one /really big/ technical advantage to having the call stack the other way round, which is that in x86, overflows beyond the end of a stack-allocated array overwrite the function's return address by default, which is just about the worst possible thing to overwrite
02:08:05 <shachaf> ais523: I've heard that brought up as a security benefit and I don't really buy it.
02:08:18 <zzo38> In some instruction sets the call stack is not addressable
02:08:22 <ais523> if the call stack goes the other way, the situations in which that happen are much less common, requiring you to be writing to an array of a function which called the current one
02:08:36 <ais523> that said, having a separate call stack and data stack is a much better idea for multiple reasons
02:08:40 <shachaf> char buf[n]; sprintf(buf, "%s", ...); seems pretty common to me.
02:08:49 <shachaf> Yes, I agree that that makes more sense.
02:09:51 <ais523> shachaf: well, that example is broken regardless of which way up the stack goes (although with a stack that goes upwards, sprintf would at least be able to detect that something was wrong; it knows where its own return address is in memory, but not where its caller's is)
02:10:14 <moony> yea.. that seems like a security /issue/
02:10:17 <ais523> I'm not sure if anyone would write sprintf like that, but maybe they would
02:10:29 <moony> in fact, that's exactly how ROP works
02:10:41 <shachaf> ais523: Or, I mean, char buf[n]; gets(buf); or whatever.
02:11:07 <shachaf> Many of the classic buffer overflow problems involve calling another function so changing the stack direction doesn't help much.
02:11:08 <ais523> moony: well, ROP is one of the most effective ways to exploit this, but the exploit isn't ROP, it's just that the exploit lets you use ROP
02:11:30 <ais523> gets should be simple enough to be inlined
02:11:46 <moony> also thumbs-up for using rust. If you're trying to allow custom allocators, use what is already provided
02:11:48 <shachaf> I would be pretty surprised if gets was inlined.
02:12:01 <shachaf> Rust seems to be pretty bad at custom allocators or unusual allocation strategies.
02:12:05 -!- botnick has joined.
02:12:20 <ais523> so would I, mostly because that function is such a bad idea that I doubt much effort has been put into optimising it
02:12:34 <ais523> I'm not sure if Rust's #[global_allocator] is stable yet, but that makes custom allocators very easy
02:12:49 <ais523> unusual allocation strategies are IME either very easy or very hard
02:13:06 <shachaf> I think the main reason I think that is that Rust is all about destructors, which muddle deallocation with other code.
02:13:10 <moony> i thought rust's allocation choice could be done per function
02:13:46 <ais523> right, the issue there is not so much allocation but deallocation
02:13:59 <moony> shachaf: there is the Drop trait, which can be useful. Could possibly implement a trait that keeps tabs on what allocator was used to make a object
02:13:59 <shachaf> Unfortunately those issues are connected.
02:14:06 <ais523> although, it wouldn't be too hard to give the various allocators their own portions of address space and use the pointer value to tell them apart
02:14:32 <shachaf> I feel like you just want to do the right thing statically.
02:14:39 <ais523> btw, separately from this project, I had an idea about a very eso allocation strategy
02:14:51 <shachaf> If you're adding a bunch of dynamic behavior like that there should be a good reason for it.
02:14:57 <ais523> the idea was that all the pointers in the entire program would be doubly-linked
02:15:13 <ais523> like, to point from one object to another, you need to point to a pointer field that points back at you
02:15:20 <moony> i think the cache would commit suicide
02:15:40 -!- botnick has quit (Read error: Connection reset by peer).
02:15:43 <ais523> now, the great thing about this strategy is that you can move objects around in memory at will
02:15:52 <ais523> because you already know where all the inbound pointers are and can just update them
02:15:55 <moony> that's the strategy a lot of VMs use
02:16:17 <ais523> yes, I was inspired by compacting garbage collectors, the idea was to do the same thing without a GC
02:16:30 <ais523> I'm not sure if this is useful, and it probably isn't, which is why I described it as very eso
02:16:51 <moony> reducing memory fragmentation could be useful if you keep memory organized at the same time
02:17:01 <moony> and do a bit of the memory usage predictor's work for it
02:17:06 <shachaf> Did you see that malloc that merges pages which don't have overlapping allocations?
02:17:07 <ais523> yes, this is one of those cases where the advantages are clear but the disadvantages are terrifying
02:17:34 <ais523> at first I thought "surely that isn't necessary", but then came up with some pathological programs where it is
02:17:57 <shachaf> I think my current attitude is that if your program is doing zillions of little mallocs and frees everywhere it's probably doing things badly anyway.
02:18:14 <ais523> e.g. imagine a program that allocates 100 million 8-byte objects, deallocates 99 out of every 100, then allocates 1 million 800-byte objects
02:18:20 <moony> if it comes to that, use a slab allocator for some of those objects
02:18:42 <moony> assuming they're all uniform
02:18:56 <ais523> my thoughts on the matter is that the only difficult case is what happens if a program deallocates a lot of small objects, then needs to allocate large objects that are too large for the remaining spaces
02:19:21 <ais523> all the other cases are trivial by comparison
02:19:56 <ais523> I don't think this is a remotely common pattern for long-running interactive applications, but I can see a batch process doing something like that when moving on from one phase of computation to another
02:20:13 <moony> I think Dwarf Fortress has an issue with that
02:20:18 <moony> albet with larger objects
02:20:20 <ais523> maybe, if you have a random malloc pattern, there should be some sort of compaction phase whenever your program shifts modes
02:21:01 <moony> in The Powder Toy everything is preallocated because malloc pauses are unacceptable
02:21:09 <ais523> anyway, this is what inspired the "everything is doubly-linked" idea because it's one of the only ways, short of a GC, to solve the problem
02:21:30 <ais523> (that said, preventing the problem happening in the first place by using a more predictable malloc/free scheme is probably better!)
02:21:57 <moony> If you know the max number of objects, then just allocate that, the linux kernel won't mind
02:22:10 <ais523> moony: are they preallocated /and/ prefaulted?
02:22:38 <moony> not prefaulted, but they generally get faulted very early in the app's lifespan so it's not an issue
02:22:41 <ais523> animalloc doesn't have any pauses other than page faults, and those will happen even with a preallocation strategy unless you prefault all your pages too
02:22:56 <moony> could add prefaulting for fun
02:23:11 <shachaf> Did you know that merely reading from an mmapped page in Linux will only fault it in as a CoW zero page rather than giving you your own memory?
02:23:16 <ais523> moony: it's one line of code
02:23:35 <moony> ais523: and that is?
02:24:18 <ais523> actually I'm wrong, I thought madvise could do it on arbitrary memory, but the most aggressive prefault it supports is a request to preload into /cache/ faster
02:24:42 <moony> ok nvm it is prefaulted, we run the simulation clear no matter what
02:24:53 <ais523> mmap can do it with MAP_POPULATE but that requires you to actually be getting the memory from mmap
02:24:54 <moony> so the action of wiping the sim should cause prefaulting
02:25:21 <moony> as we technically "use" the memory
02:25:43 <ais523> …why are mmap and madvise not synchronized in what requests they support
02:26:28 <moony> ..prolly should work on reducing allocations in the game's graphics
02:26:52 <moony> the sim is effectively malloc free
02:26:59 <moony> but graphics are pretty CPU hungry too
02:28:07 <moony> we still haven't squashed the malloc in INST code
02:28:27 <ais523> OK, I've now implemented the 1, 2, 4, and 8 byte versions of this function
02:28:56 <ais523> the -~ gets optimized to +1 only in the 8-byte case (presumably because LLVM can't optimize the - movzx ~ sequence when the number is known to be negative)
02:30:56 <ais523> one interesting thing is that the optimizer implements the comparison with 0xC100000000000000 using a 56-bit shift and a comparison with 0x000000C1; I can believe that all those leading zeroes are actually fastest, but think there miight be a better way
02:31:34 <moony> that sounds like it would be faster on Nephelem era CPUs, but not sure about newer things
02:31:44 <moony> (Nephelem has some.. weird constraints)
02:32:58 <ais523> right, I can see why a comparison of the bottom 8 bits with 0xC1 (which would be mathematically correct) might be slower on some processors
02:33:13 <Hooloovo0> I could also see it being smaller code
02:33:20 <moony> ^ check if it's smaller
02:33:36 <moony> fitting as many instructions in 16 bytes as possible is usually a goal
02:33:38 <Hooloovo0> shift-right is probably 1 instruction, and compare 8 bit is another
02:34:03 <Hooloovo0> and fitting 0xc100000... as an immediate is going to be longer
02:34:38 <ais523> you'd simply have to replace "cmp $0xc0,%rsi" (7 bytes) with "cmp $0xc0,%sil" (4 bytes)
02:34:54 <ais523> as Hooloovo0 says, the only difference is the leading zeroes on the immedite
02:35:05 <moony> there's a subtle difference here
02:35:26 <moony> the 32-bit registers and 64-bit ones are different, if i recall right
02:35:53 <ais523> Hooloovo0: it's a 64-bit compare using a 32-bit immediate, x86_64 doesn't use 64-bit immediates apart from one instruction
02:36:17 <moony> ais523: can you make a quick listing of the ASM here?
02:36:23 <ais523> mov %rdx,%rsi \ shr $0x38,%rsi \ cmp \ $0xc0,%rsi
02:36:29 <ais523> err, I added an extra slash
02:36:39 <ais523> mov %rdx,%rsi \ shr $0x38,%rsi \ cmp $0xc0,%rsi \ ja 2e
02:36:47 <ais523> (then the value in %rsi is no longer used, nor are the flags)
02:36:52 <moony> can't downgrade to a 32-bit register.
02:37:02 <ais523> moony: %esi is just the bottom half of %rsi
02:37:18 <moony> No, they're treated different if i remember right
02:37:36 <ais523> the complication you're thinking of is that if you ever assign to %esi directly, it gets automatically zero-extended into %rsi
02:37:54 <moony> alright, i'm being a derp
02:38:01 <ais523> i.e. the /top half/ of %rsi is like a register of its own with its own weird rules
02:38:28 <ais523> (meanwhile, assigining to %si or %sil does not clear any other part of %rsi, the rule's only for the $e* variant of registers specifically)
02:39:05 <shachaf> I saw a post recently about which amd64 registers aren't special-cased in some way. It's only a few of them.
02:39:05 <moony> that last bit i did /not/ know
02:39:12 <ais523> …which is why xchg %ax, %ax is a no-op, because that's a 16-bit write
02:39:25 <moony> Hooloovo0: yes, welcome to x86
02:39:35 <ais523> shachaf: six of r8..r15 are not special-cased, I think
02:39:36 <moony> it's all in the name of (misguided) backwards compatibility
02:40:04 <ais523> I can't remember which two it is that are, it's either 10 and 11, 11 and 12, or 12 and 13
02:40:12 <shachaf> Yes, https://twitter.com/rygorous/status/1162078329706405888
02:40:30 <shachaf> ais523: Wait, writing to ax doesn't zero the top half of rax?
02:40:46 <ais523> this is what I was missing when we had our nop discussion a while back
02:41:24 <moony> Hooloovo0: i await the day RISC-V takes over the world with sane design
02:41:26 <ais523> so 90 is a nop because it's special-cased, even though that instruction would normally decode to xchg eax, eax (this forces you to use a different encoding if you actually want the swap)
02:41:45 <ais523> but 66 90 is a nop semantically, it swaps ax with itself and that doesn't have side effects
02:42:02 <ais523> (although it's almost certainly special-cased anyway, that's just for performance reasons)
02:42:13 <shachaf> I feel like I came across this fact once before but I completely forgot about it.
02:42:24 <moony> I want RISC-V to take over the world
02:42:44 <ais523> this is why disassemblers can disassemble 66 90 to xchgw ax, ax without being incorrect
02:44:11 <shachaf> Until now I thought that anything that only wrote to the lower 32 bits automatically zeroed the upper 32 bits.
02:44:13 <moony> I want a decently priced linux capable RISC-V board
02:44:15 <moony> then i will be happy
02:45:12 <ais523> fwiw, the special-casing on r12 is almost forgivable, the issue is that some notation is needed to be able to specify not using a register; x86 sacrificed the ability to write an address that requires multiplying the stack pointer by a constant (somewhat understandably) to give the encodings it needed
02:45:38 <ais523> and r12 is encoded by specifying "stack pointer, except second set of registers" and that would therefore need a special-case decode to allow you to multiply it by a constant
02:46:11 <shachaf> Yes, both r12 and r13 are inheriting restrictions from rsp and rbp.
02:47:55 <ais523> I came up with a new optimisation idea a while back: the idea is that when you're implementing an array of structures as parallel arrays (e.g. for alignment reasons), you take a pointer into the array with smallest elements
02:48:16 <ais523> and index into the others by multiplying the /pointer/ by a constant and adding another constant with an appropriately calculated value
02:48:35 <ais523> (or if the arrays don't have fixed addresses, e.g. in a re-entrant function, another register)
02:48:55 <ais523> in the non-fixed-address scenario this saves one register over the obvious way of writing things and isn't any longer or slower
02:49:16 <ais523> although it's really highly illegal in C, you can do it in x86 asm just fine
02:49:19 <moony> Hooloovo0: if you think the base x86-64 stuff is insane
02:49:42 <ais523> AVX seems to have hit a sweet spot of performance and sanity, IMO
02:49:50 <ais523> then it started going back downhill from AVX2 onwards
02:50:13 <ais523> I've come to the decision to target AVX1 as my baseline instruction set
02:50:23 <shachaf> It gave a lot of integer instructions that were missing in AVX1.
02:50:25 <ais523> shachaf: nothing massively wrong, it just has some jarring inconsistencies and missing features
02:50:48 <moony> also the useless instructions
02:50:52 <moony> that only have one use
02:50:56 <moony> and are junk for anything else
02:51:00 <shachaf> A while ago I wanted to write vectorized code and I couldn't use AVX.
02:51:07 <ais523> e.g. there are no instructions to operate on 256-bit values as a whole, only pairs of 128-bit values
02:51:17 <ais523> you can't shift the top half of a ymm value into the bottom half
02:51:41 <ais523> which is weird, because you can shift the top half and bottom half of a ymm value separately into the top and bottom halves respectively of a second ymm value
02:51:42 <moony> RISC-V's vector extension is looking really good
02:51:47 <moony> you seen it, ais523?
02:52:13 <moony> https://github.com/riscv/riscv-v-spec
02:53:07 <moony> completely vector register width agnostixc
02:53:19 <moony> so that old code can utilize larger register sizes easily
02:55:02 <Hooloovo0> should x86 be considered an esolang?
02:55:23 <moony> a esolang that everyone uses
02:56:20 <shachaf> Much less than C++, I think.
03:06:09 <zzo38> What I would want to have is the bitwise operations that MMIX has. There is a bit operation extension for RISC-V, but I think the bit operations of MMIX is better.
03:06:27 <zzo38> (At least, for a 64-bit system, it is better. Perhaps for a 32-bit system maybe it isn't better.)
03:06:34 <moony> zzo38: are MAK and EXT (MAKe and EXTract) in that list?
03:06:43 <moony> they're both bitfield opts
03:06:58 <moony> really powerful, enough that they can replace shiftleft/shiftright instructions
03:07:36 <zzo38> What are MAK and EXT doing?
03:08:07 <zzo38> (I also like the Muxcomp operation, described in esolang wiki)
03:08:09 * moony pulls up MC88100 desc of them
03:10:10 <moony> zzo38: http://bitsavers.trailing-edge.com/components/motorola/88000/MC88100_RISC_Microprocessor_Users_Manual_2ed_1990.pdf pages 3-44, 3-45, 3-46, 3-47, 3-70, and 3-71,
03:10:26 <moony> it has diagrams describing operation, alongside text
03:11:27 <zzo38> Do you have the order number of the page?
03:14:25 <moony> I own the physical manual, forgot that the PDF is annoying to navigate
03:15:24 <zzo38> (I didn't read all of it yet though)
03:20:59 <zzo38> That MAK and EXT is good. (MMIX doesn't have it, but does have MOR and MXOR and SADD (MOR is very useful), and Muxcomp is even more general to do)
03:21:45 <zzo38> (A problem with Muxcomp though, is that it requires a lot of operands.)
03:23:38 <zzo38> Muxcomp is: Form a 5-bit number from the low bits of each of the first five operands to select which bit of the last operand to copy to the low bit of the result, and then the same for the next bit position, and so on.
03:24:49 <zzo38> (Or six bits for 64-bit registers)
03:26:05 <ais523> zzo38: doesn't that effectively implement an arbitrary five-input bitwise operator?
03:26:11 <ais523> with the last operand specifying the truth table?
03:26:20 <kolontaev> what do you use MOR for? if it's useful...
03:27:17 <zzo38> ais523: I suppose so, yes. (You can also perform a shift or rotate of the last operand by setting the other operands properly)
03:27:20 <moony> MAK and EXT have the advantage of practicality
03:27:43 <zzo38> kolontaev: One use is endian switch (including PDP-endian).
03:27:52 <zzo38> But there are some other uses, too.
03:28:41 <ais523> a while back in here we were discussing how Intel had added INTERCAL's select operator ~ to the x86 instruction set
03:29:34 <ais523> the paper discussing it mentioned an instruction that's effectively a bitwise keysort; you stable-sort the bits of one operand using the bits of the other operand as keys
03:30:04 <ais523> that hasn't been implemented but it seems like it could be useful
03:30:12 <ais523> (a select is basically a bitwise-keysort followed by an AND)
03:30:19 <ais523> err, preceded by an AND
03:34:36 -!- ARCUN has joined.
03:35:55 <ARCUN> cpressey: Do you know where I could get an actual Commodore 64? I need one for a project.
03:36:03 -!- ARCUN has quit (Remote host closed the connection).
03:39:21 <zzo38> ais523: Yes, I think it can be useful
03:42:26 <esowiki> [[Commercial]] https://esolangs.org/w/index.php?diff=65539&oldid=65535 * Dtuser1337 * (+8) Formatting codebase.
03:43:44 <zzo38> MMIX doesn't have a "count trailing zero" instruction, but it can easily be done with two instructions (the SADD instruction is popcount(x AND NOT y))
03:43:46 <esowiki> [[Commercial]] https://esolangs.org/w/index.php?diff=65540&oldid=65539 * Dtuser1337 * (-6) continue formatting codebase and move category to bottom
03:45:47 <esowiki> [[Commercial]] https://esolangs.org/w/index.php?diff=65541&oldid=65540 * Dtuser1337 * (-52) /* Implementations */
03:46:20 <ais523> zzo38: is that (x-1) sadd x?
03:46:45 <esowiki> [[ORK]] https://esolangs.org/w/index.php?diff=65542&oldid=53698 * Dtuser1337 * (+13) /* External resources */
04:54:20 <esowiki> [[Camouflage]] https://esolangs.org/w/index.php?diff=65543&oldid=30836 * Dtuser1337 * (+24)
04:54:49 <esowiki> [[ZOMBIE]] https://esolangs.org/w/index.php?diff=65544&oldid=53713 * Dtuser1337 * (+20)
05:08:36 -!- ais523 has quit (Quit: quit).
06:35:06 -!- nfd9001 has joined.
07:19:01 -!- rain1 has joined.
08:24:12 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:27:28 -!- Lord_of_Life has joined.
08:32:07 -!- AnotherTest has joined.
08:52:51 -!- nfd9001 has quit (Ping timeout: 264 seconds).
08:55:08 -!- nfd9001 has joined.
09:02:01 -!- b_jonas has joined.
09:05:41 <b_jonas> ais523: "~b has to be a positive number in the 0..30 range" => I think you mean in the 0..0x3E inclusive range
09:07:43 <b_jonas> "should I write it as 1 + (ptrdiff_t)(signed char)b in the original source" => use an ifdef, with the original version inactive and the optimized version active, write a comment that it's an optimization, and then check that the optimized version is compiled the way you want
09:08:03 <b_jonas> that said, isn't it possible that this is a case where the optimization doesn't matter?
09:10:58 <esowiki> [[Edition]] N https://esolangs.org/w/index.php?oldid=65545 * A * (+874) Created page with "Edition language Double speak example I"$R. C"F"0@i1@i Explanation I Take input "$ Copy the input's length to clipboard R. Read the current file's content into the..."
09:11:12 <b_jonas> "the in-memory representation of a parse tree" => that wasn't my guess
09:12:18 -!- arseniiv has joined.
09:13:41 <b_jonas> "having a separate call stack and data stack is a much better idea" => is it still, now that CPUs cache the top of the call stack as an optimization?
09:16:41 <b_jonas> ais523: moving objects around but without a gc, "at first I thought "surely that isn't necessary", but then came up with some pathological programs where it is" => in the kernel, trying to free up pages when it has lots of individually allocated small structures fragmented around memory
09:17:26 <b_jonas> kernel people are actually working on that, and yes, the disadvantages are terrifying, although I think they're doing it more memory conservingly than doubly linking every individual pointer
09:19:48 <arseniiv> hi. Nice it’s calm and wise here as usual :)
09:20:50 <arseniiv> (I was without IRC for two weeks and in some reason I’m still unpacking)
09:22:40 <b_jonas> "comparison with 0xC100000000000000" => that's because you can't have immediates larger than 32 bits, so it has to be two instructions anyway. that it's a shift of the input is still a bit surprising to me, but apparently that's how you can get it in just two instructions, rather than just three as in loading the constant in two instructions.
09:23:37 <b_jonas> may also depend on the context
09:24:23 <arseniiv> hm I played a game called Weave where you place tiles on a hexagonal grid, each tile having two points marked on each side and connecting these points by curved segments in some fashion as to make various intertwined paths when many tiles are placed together. Now I suddenly wonder if something can be esonalged from there
09:25:26 <b_jonas> "you'd simply have to replace "cmp $0xc0,%rsi" (7 bytes) with "cmp $0xc0,%sil" (4 bytes)" => why? isn't there an encoding of "cmp $0xc0,%rsi" that has a 1-byte immediate?
09:25:57 <arseniiv> turns and “knottiness” of paths could be used for semantics, and there are only so many tiles available to make the composition not so trivial
09:27:00 <arseniiv> also I think I have already seen those tiles somewhere even before that game, but don’t remember where
09:28:06 <arseniiv> and it could be downplayed to square tiles if necessary. If anybody would be interested, I’ll link to that game in G.Play and/or draw examples of tiles
09:28:14 <b_jonas> how would gcc even get the assembler to emit the encoding with the 4-byte immediate?
09:31:34 <int-e> b_jonas: 0xc0 is too big for a one-byte immediate
09:31:52 <int-e> (because they are sign-extended)
09:32:29 <int-e> and I thought picking immediate sizes was the assembler's job, not gcc's.
09:33:16 <int-e> Oh, but choosing operand sizes isn't... that's the point.
09:34:00 <int-e> And intel only offers the choice between one byte immediates and full byte immediates.
09:34:15 <int-e> I meant s/full byte/full size/
09:34:23 <b_jonas> int-e: gcc would know what size the instruction has, in fact the whole part where it outputs assembly rather than the object code directly is mostly for human-debuggability I think
09:35:08 <int-e> I'm not sure that is the case. gcc probably has a good idea how big instructions will be, of course.
09:35:24 <int-e> But I would hope it doesn't rely on always being correct.
09:46:00 <b_jonas> int-e: it certainly dones't have to know for rare slow instructions, because it can handle unknown instructions in asm statements, but for when it generates fast code, it probably knows the instruction size for optimization
09:46:40 <int-e> b_jonas: Sorry, I'll take that as speculation unless you have proof.
09:46:54 <b_jonas> unrelated, but http://www.wyrdplay.org/AlanBeale/CAAPR-ref.html is a small English pronunciation dictionary by the author of 12dicts that seems to be well compiled
09:47:36 <int-e> (For example, a key purpose of things like .align is that the compiler can align code without knowing exactly how big the individual instructions are.)
09:50:56 <b_jonas> int-e: again, gcc generally doesn't know how long the emitted instructions from an asm statement are, which is documented in the gcc docs because it also says that gcc assumes an upper bound and what sneaky things you shouldn't do in the asm statement to violate that
09:51:16 <b_jonas> int-e: and gcc probably can't tell the length of some jump instructions in the first pass
09:51:40 <b_jonas> that said, some of the assembly syntax is probably for humans, not for compilers
09:51:56 <b_jonas> like, do you think the compiler needs both decimal and hex integer syntax?
09:52:32 <b_jonas> the .align too can be useful to make the assembly output more readable, even in the case when the compiler does happen to know how many bytes it emits
09:52:53 <b_jonas> plus .align 16 is shorter than the assembly mnemonic of a 9-byte nop instruction
09:56:14 -!- FreeFull has joined.
10:10:54 -!- botnick has joined.
10:11:24 -!- botnick has quit (Read error: Connection reset by peer).
11:11:57 -!- FreeFull has quit.
11:12:38 <HackEso> Hecatomb \ 1BB \ Enchantment \ When Hecatomb enters the battlefield, sacrifice Hecatomb unless you sacrifice four creatures. \ Tap an untapped Swamp you control: Hecatomb deals 1 damage to any target. \ IA-R, 5E-R, 6E-R, MED-R
11:12:58 <b_jonas> ^ It seems a bit underwhelming that they use the word "hecatomb" for the sacrifice of a mere four creatures
11:13:39 <b_jonas> `card-by-name Epic Struggle
11:13:39 <HackEso> Epic Struggle \ 2GG \ Enchantment \ At the beginning of your upkeep, if you control twenty or more creatures, you win the game. \ JUD-R
11:17:43 -!- livesex_0699 has joined.
11:17:46 -!- livesex_0699 has left.
11:26:39 <b_jonas> (The helix pineaple requires you to pay mana only, not sacrifice creatures.)
12:17:51 -!- andrewtheircer has joined.
12:18:47 <andrewtheircer> idea: programming language only usable from last thursday to next thursday
12:27:33 -!- dog_star_ has changed nick to dog_star.
12:29:12 -!- dog_star has quit.
12:29:33 -!- dog_star has joined.
13:03:56 -!- xkapastel has joined.
13:10:41 -!- tromp_ has quit (Remote host closed the connection).
13:36:24 <esowiki> [[~English]] https://esolangs.org/w/index.php?diff=65546&oldid=37171 * Dtuser1337 * (+24) this is a high level language due to how it looked like.
13:36:57 <esowiki> [[Commercial]] https://esolangs.org/w/index.php?diff=65547&oldid=65541 * Dtuser1337 * (+24)
13:37:30 <esowiki> [[Drive-In Window]] https://esolangs.org/w/index.php?diff=65548&oldid=65536 * Dtuser1337 * (+23)
13:42:59 -!- arseniiv_ has joined.
13:42:59 -!- arseniiv has quit (Read error: Connection reset by peer).
13:48:03 -!- Frater_EST has joined.
13:49:46 -!- Frater_EST has left.
13:50:54 -!- tromp has joined.
13:54:17 -!- MDude has quit (Quit: Going offline, see ya! (www.adiirc.com)).
13:55:51 -!- tromp has quit (Ping timeout: 264 seconds).
14:04:21 -!- tromp has joined.
15:34:10 -!- Sgeo__ has joined.
15:37:07 -!- Sgeo_ has quit (Ping timeout: 248 seconds).
16:10:16 -!- xkapastel has quit (Quit: Connection closed for inactivity).
16:51:12 -!- tromp has quit (Remote host closed the connection).
16:53:04 <zzo38> Is thre a metric-only font format in PostScript?
17:01:57 -!- tromp has joined.
17:10:26 -!- xkapastel has joined.
17:21:38 <zzo38> (I think that I do not make a "crowning achievement")
17:21:47 <b_jonas> zzo38: you mean like for overlaying text on a scanned image of a text? I think you could use a vector font where all the glyphs are blank
17:22:22 -!- Sgeo has joined.
17:23:24 <zzo38> b_jonas: Actually I mean for use with an output driver that will provide its own glyphs or convert to some other format that will then be processed by something which provides its own glyphs, although it would also work to overlay text on a scanned image of text too
17:23:32 <zzo38> andrewtheircer: No, I am Aaron Black.
17:24:00 -!- Sgeo__ has quit (Ping timeout: 272 seconds).
17:25:07 <zzo38> I don't know, but I think it doesn't really matter so much. I am just known as "zzo38", and will not confuse with other people also named Aaron Black, I think.
17:25:21 <b_jonas> zzo38: ok. I'd think a font with blank or dummy vector images would work for that too
17:26:40 <b_jonas> andrewtheircer: of course not
17:26:44 <zzo38> b_jonas: Yes, that would work, I suppose
17:28:15 <b_jonas> zzo38: but maybe otf already has a way to indicate that a font has metrics only. few people know how font formats actually work. maybe oren knows.
17:36:05 <b_jonas> it's not surprising that nobody understand them: there's a lot of historical baggage of evolving technology, and a lot of useful optimization
17:44:06 -!- andrewtheircer has quit (Remote host closed the connection).
17:46:25 -!- tromp has quit (Remote host closed the connection).
17:58:55 -!- tromp has joined.
18:09:09 -!- tromp has quit (Remote host closed the connection).
18:17:16 -!- arseniiv_ has changed nick to arseniiv.
18:39:40 -!- tromp has joined.
18:44:05 -!- tromp has quit (Ping timeout: 244 seconds).
18:54:05 <esowiki> [[PureStack]] https://esolangs.org/w/index.php?diff=65549&oldid=41588 * Dtuser1337 * (+27)
18:55:11 <esowiki> [[Super Stack!]] https://esolangs.org/w/index.php?diff=65550&oldid=37526 * Dtuser1337 * (+24)
18:55:44 <esowiki> [[Super Stack!]] https://esolangs.org/w/index.php?diff=65551&oldid=65550 * Dtuser1337 * (-24)
18:57:48 <esowiki> [[Super Stack!]] https://esolangs.org/w/index.php?diff=65552&oldid=65551 * Dtuser1337 * (+23)
18:59:16 -!- adu has joined.
19:01:28 <zzo38> I think the font formats with METAFONT is good.
19:14:04 <esowiki> [[Emoji]] https://esolangs.org/w/index.php?diff=65553&oldid=46750 * Dtuser1337 * (+104) Adding some categories.
19:19:13 -!- Sgeo has quit (Ping timeout: 244 seconds).
19:21:10 <esowiki> [[Emoji]] https://esolangs.org/w/index.php?diff=65554&oldid=65553 * Dtuser1337 * (+24) Added output only category due to potential no input.
19:22:42 -!- Sgeo has joined.
19:26:39 -!- tromp has joined.
19:27:54 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65555&oldid=65405 * Dtuser1337 * (+39)
19:32:31 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65556&oldid=65555 * Dtuser1337 * (+746) /* Emoji */
19:38:01 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65557&oldid=65556 * Dtuser1337 * (+91) /* suicide */
19:39:25 -!- tromp has quit (Remote host closed the connection).
19:40:31 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65558&oldid=65557 * Dtuser1337 * (+152) /* MATL */
19:40:36 -!- adu has quit (Quit: adu).
19:41:09 -!- FreeFull has joined.
19:54:19 -!- sombrero has joined.
19:56:34 <int-e> Oh the webchat I guess. IRC is a pure text-based protocol, it has no style.
19:56:48 -!- tromp has joined.
19:57:38 -!- Sgeo_ has joined.
19:58:41 <int-e> sombrero: you're the only user of the webchat here, it seems.
20:00:52 <int-e> (But I'm not sure, some people are cloaked which hides this information.) In any case, there are many IRC clients. The Freenode webchat frontend is just one of them.
20:01:04 -!- Sgeo has quit (Ping timeout: 272 seconds).
20:01:28 <int-e> https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients <-- many
20:01:51 <zzo38> Yes, and I use one I wrote by myself. Others may also use programs not mentioned on Wikipedia, too
20:06:57 -!- tromp has quit (Remote host closed the connection).
20:08:47 <sombrero> :v anyway, i would be very happy if take a look to a compilation of drawing http://vixra.org/abs/1907.0332 and give your criticss, It would be pretty nice if this inspires some good ideas to make new stuff ;)
20:10:26 <sombrero> (esoteric answers and comment are well accepted ;P)
20:17:23 <b_jonas> int-e: on freenode, the webchat cloak overrides the other cloaks, so you can't hide it that way
20:18:42 <b_jonas> sorry, apparently that doesn't apply to kiwi (oh I hate that client by the way), only some other webchats
20:18:53 <b_jonas> because sombrero's hostname isn't a cloak
20:22:22 -!- tromp has joined.
20:23:24 -!- Lord_of_Life_ has joined.
20:25:52 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
20:25:53 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:33:41 -!- sombrero has quit (Remote host closed the connection).
20:40:34 -!- Phantom_Hoover has joined.
21:21:55 <zzo38> Priests of Sun {1W} Creature - Human Cleric (1/1) ;; {1W}: Target creature gets +0/+1 until end of turn. ;; {T}: Tap target blocking creature. That creature gets +1/+2 until end of turn.
21:22:22 <zzo38> Priests of Worm {1B} Creature - Human Cleric (1/1) ;; {(B/P)}: ~ gains first strike and haste until end of turn. ;; {T}, Sacrifice a non-artifact creature: Add {BB}.
21:39:13 -!- AnotherTest has quit (Ping timeout: 250 seconds).
21:39:25 -!- Phantom_Hoover has quit (Quit: Leaving).
22:02:07 -!- andrewtheircer has joined.
22:06:17 -!- Bowserinator has quit (Ping timeout: 245 seconds).
22:06:28 -!- Bowserinator_ has joined.
22:28:41 -!- Sgeo has joined.
22:29:52 -!- Sgeo_ has quit (Ping timeout: 244 seconds).
22:36:07 -!- Sgeo_ has joined.
22:39:13 -!- Sgeo has quit (Ping timeout: 245 seconds).
22:47:11 <zzo38> Do you like this cards?
22:48:26 <zzo38> Magic: the Gathering cards
22:48:50 -!- andrewtheircer has quit (Remote host closed the connection).
22:50:04 -!- xkapastel has quit (Quit: Connection closed for inactivity).
23:18:03 -!- nfd9001 has quit (Ping timeout: 264 seconds).
23:18:34 -!- nfd9001 has joined.
23:39:04 -!- tromp_ has joined.
23:40:59 -!- tromp has quit (Ping timeout: 250 seconds).
23:44:31 <arseniiv> @tell sombrero what are polysigns mentioned in the abstract of the thing you linked?
23:45:15 -!- ais523 has joined.
23:45:23 -!- FreeFull has quit.
23:46:48 <ais523> b_jonas: the kernel uses intrusive lists a lot so it may be that a large proportion of the pointers are already doubly linked, that makes doubly-linking all of them a little less insane
23:47:52 <ais523> <b_jonas> "you'd simply have to replace "cmp $0xc0,%rsi" (7 bytes) with "cmp $0xc0,%sil" (4 bytes)" => why? isn't there an encoding of "cmp $0xc0,%rsi" that has a 1-byte immediate? ← no, there isn't, 1-byte immediates only exist as offsets of memory addresses (which is why lea is useful) and on byte instructions
23:48:09 <ais523> at least, on instructions like cmp that use a fairly normal encoding
23:49:13 -!- arseniiv has quit (Ping timeout: 245 seconds).
23:49:22 <b_jonas> ais523: they do exist on ordinary word instructions like cmp, but int-e says that they're signed so it won't work here -- I haven't checked that, it's really hard to figure out from intel manuals which things are sign extended and which ones are zero extended
23:50:03 <ais523> incidentally, it crosses my mind that you could go down to three bytes by using bl/cl/dl rather than sil, or even two bytes if al were available
23:50:21 <shachaf> I think it's often the case that instead of pointers you want to use some alternative like indices, if you have a lot of them. That already allows for some kinds of relocation.
23:50:28 <ais523> there's a simple rule for this, one-byte immediates in x86 are /always/ signed
23:51:00 <b_jonas> they also exist for the shortcut %eax arithmetic instructions, but annoyingly not for mov, despite that a word mov with one-byte immediate would be often very convenient
23:51:02 <ais523> so the only time they're treated as unsigned is if the instruction treats its operand as unsigned /and/ it only has a 1-byte operand, in which case it gets sign-extended to its own length and then treated as unsigned
23:51:40 <b_jonas> ais523: including one-byte offsets for memory operands?
23:52:00 <ais523> this is why the x86_64 ABI has a redzone, it's to make use of the positive offsets on SP
23:52:54 <ais523> anyway, a signed immediate /would/ work here, you'd simply need to do a signed shift rather than an unsigned shift
23:53:55 <ais523> because with the signed interpretation, you're checking for values between 0 and a negative constant
23:53:59 <ais523> which isn't all at one end of the range
23:58:12 <b_jonas> I just realized that it's funny how you first say that x86 doesn't have one-byte immediates for word instructions, then said that they're all signed
23:58:53 <ais523> that's the way that memory works, I think
23:59:10 <moony> Insert complaint about x86's insanity here.
23:59:35 <ais523> don't lawyers have a phrase "in the alternative" for describing situations like this?
00:00:36 <b_jonas> well, you could say that you forgot that the 8-byte immediates are available for the general encoding of the arithmetic, as opposed to the shortcut accumulator destination encoding
00:01:40 <ais523> fwiw, I think modern processors in general are insane because of register renaming
00:02:04 <ais523> compilers go to all this effort to pack their nicely SSAed programs into a set of registers, which is an NP-complete problem
00:02:17 <ais523> then the processor goes to a lot more effort to unpack all thhe register names back into SSA and disregard the actual registers
00:03:05 <shachaf> The Mill people describe their belt system as "hardware SSA".
00:03:41 <ais523> yes, it's pretty similar, but also somewhat limiting I think
00:03:57 <ais523> I prefer doing things the other way round, where each instruction says where the data should be routed to, rather than where the data came from
00:04:22 <ais523> because that allows you to pipeline high-latency instructions, which is half the reason for the register renaming in the first place
00:05:33 <shachaf> I wish I had a better x86 REPL thing.
00:05:46 <shachaf> I could probably write something reasonably easily.
00:06:00 <ais523> asm repl, that's an interesting idea
00:06:31 <ais523> I remember debug.com, arguably that counts, but it was a bit weird in how it worrked
00:08:03 <shachaf> Are there any good debuggers for Linux?
00:08:12 <ais523> what do you mean by "good"?
00:08:33 <ais523> gdb is easily good enough for what I want, but may well not count as "good"
00:08:39 <shachaf> Hmm, I'm not sure. It's probably mostly a UI thing?
00:08:51 <ais523> ddd is a GUI version of gdb, but is incredibly dated
00:08:53 <shachaf> I can figure out the things I want with gdb but it often takes a lot of overhead.
00:09:10 <ais523> there are also a lot of IDEs that run on Linux, of course; probably most of them do
00:09:17 <shachaf> People say Microsoft's debugger is good, but I haven't used it.
00:09:49 <ais523> well, it's integrated with Visual Studio, which IMO automatically makes anything insane
00:10:17 <shachaf> I've barely used Visual Studio. I don't know much about it.
00:10:44 <b_jonas> ais523: yes, and that's made even more insane by how the intel x86 optimization manual says that the longer nop instructions use execution units and a gp register from the register file, so the compiler sometimes has to figure out which register a nop instruction should reference
00:10:47 <ais523> shachaf: the last-but-one time I attempted to install Visual Studio, I ended up needing to entirely reinstall Windows
00:10:59 <shachaf> The debugging APIs in Windows are certainly better than ptrace.
00:11:25 <ais523> although it's a bit slow in terms of how many system calls are needed
00:11:26 <b_jonas> it's strange, you'd think they solve that in the decoder, but no
00:11:38 <shachaf> ptrace does approximately the minimum possible.
00:11:50 <ais523> b_jonas: fwiw, I think there should be two different .align pseudoinstructions
00:11:59 <shachaf> I don't remember all the things Windows does but they generally seem useful.
00:12:00 <ais523> one which uses NOP padding, and the other of which uses ud2
00:12:07 <shachaf> For example, Win32 VirtualAllocEx lets you allocate memory in another process's address space.
00:12:26 <ais523> shachaf: ugh, that seems outright dangerous
00:12:35 <ais523> what if the other process is using a different allocator to the expected allocator?
00:12:39 <shachaf> When you're debugging a process?
00:12:48 <shachaf> VirtualAllocEx is the equivalent of mmap.
00:12:48 <ais523> the ptrace equivalent is to force the other process to call malloc, which seems safer
00:13:07 <shachaf> In general I think many Windows system calls let you specify a process handle.
00:13:27 <shachaf> How do you even do a system call, when you attach to some unknown process?
00:14:01 <shachaf> You at least need to find a syscall instruction, which could mean waiting for the process to do a system call, searching its address space for a syscall instruction, or writing one into its address space.
00:14:35 <ais523> it's documented what you do if the ptrace is stopping at a syscall instruction, you just rewind the IP two bytes
00:14:46 <ais523> if the process isn't stopped at a system call, though, you have to change the IP to point at one
00:14:49 <shachaf> But you need it to be in an executable page, which is often read-only. ptrace lets you write to read-only mappings, but if a file is mapped into memory, it'll secretly convert it to a private mapping from a shared mapping.
00:14:58 <ais523> (there is a system call instruction in the vDSO, that's the one I use for Web of Lies)
00:15:17 <shachaf> That's true, maybe finding the vdso page is your best bet.
00:15:26 <shachaf> (Unless the debugee unmapped it?)
00:15:36 <ais523> well, you just use /proc/*/maps to find where it is
00:15:51 <shachaf> I guess writing a debugger for hostile programs that don't want to be debugged is quite different from writing one for your own programs.
00:15:57 <ais523> unmapping the vDSO is interesting, I didn't think of that
00:16:24 <ais523> also, ptrace doesn't work recursively, which means that you can make yourself almost debugger-immune simply by ptracing yourself or a bunch of child processes
00:16:32 <ais523> (for a debugger to hide from that, it needs to /simulate/ all the ptrace calls itself)
00:17:17 <b_jonas> ais523: I don't think padding with repeated UD2 is a good idea. it encodes to db 0x0F,0x0B| and if you happen to jump to that with the odd alignment, it reads the bytes 0x0B,0x0F which is a perfectly valid two-byte instruction
00:17:49 <ais523> does x86 have an instruction sequence that's invalid from any offset?
00:18:09 <ais523> other than the last byte, possibly, as there are no guaranteed one-byte illegal instructions
00:18:43 <shachaf> Why do you want an illegal isntruction?
00:19:39 <b_jonas> ais523: there are like sixteen one-byte instructions that are currently illegal in x86_64, but they're all just reserved, not guaranteed to be illegal forever
00:19:40 <ais523> because the padding isn't meant to be executed
00:20:35 <b_jonas> yes, padding with 0xCC is probably the best
00:20:39 <shachaf> Or 0xF4 if you're not in ring 0.
00:21:20 <shachaf> I guess I should start using octal instead of hexadecimal.
00:21:29 <ais523> LOCK LOCK LOCK … LOCK NOP is illegal at any offset other than the last
00:21:57 <shachaf> So int3 is 0314 and hlt is 0364.
00:22:09 <ais523> (once you have more than 15 lock prefixes it becomes illegal for a different reason, but that's OK)
00:22:49 <ais523> max length of an instruction is 16 I think
00:23:05 <shachaf> Wait, really? I thought it was 15.
00:23:11 <ais523> …wait, why is LOCK NOP even illegal? NOP is a sort of XCHG instruction, which is one of the few that /can/ be locked
00:23:38 <ais523> oh, because there are two registers, LOCK requires memory to be mentioned
00:23:41 <shachaf> It makes sense for reg-reg xchg to be illegal.
00:24:40 <ais523> while messing around with atomics I discovered that x86 has an XADD instruction
00:24:56 <ais523> which is (r, m) = (m, r+m)
00:25:17 <ais523> notable mostly because it's lockable and has pretty useful semantics for a lockable instruction
00:26:28 <zzo38> I think it can be useful sometimes, yes.
00:26:29 <moony> XADD can also be used to perform the fibbonaci sequence in very little space
00:26:43 <ais523> just two registers, I assume
00:26:56 <zzo38> Yes, I thought that too
00:27:35 <moony> yup, 2 registers fib.
00:28:00 <ais523> now the fun part is: can you do it with /one/ register?
00:28:01 <moony> but 3rd is for loop if you want it to actually halt
00:28:02 <shachaf> But it's not as efficient as repeated squaring, I suppose.
00:28:43 <ais523> one loop iteration, that is
00:28:44 <moony> ais523: quickly thought over the various ways to do addition on x86. My guess is no
00:28:58 <ais523> moony: it'd have to be a vector register I think
00:29:03 <shachaf> Two unbounded registers are enough for any computation.
00:29:16 <moony> I was thinking of vectors too
00:29:20 <shachaf> Man, I wish I had a computer with even one unbounded register.
00:29:38 <b_jonas> ais523: do you need it modulo 2**32, or just the first fifty or so terms?
00:29:38 <moony> you do. it's called RAM. (/s)
00:29:59 <b_jonas> if the latter, then you can do a compare conditional jump thing to do it in one register
00:30:18 <b_jonas> and possibly even some smart hash lookup table thing
00:30:28 <b_jonas> but if you need it forever, then it gets harder
00:30:50 <b_jonas> I think you could use one 64-bit register to compute it mod 2**32:
00:31:02 <moony> fib with a 1 byte value should be doable in 1 reg
00:31:08 <b_jonas> as long as you can have a constant in memory
00:31:21 <moony> because upper lower halves
00:31:25 <zzo38> Why the PostScript binary format does not include dictionaries?
00:31:30 <ais523> b_jonas: I was thinking 32-bit integers, or even floats
00:31:40 <b_jonas> multiply it by a constant 0x00000001_00000000, then swap the upper and lower parts using rotate
00:32:36 <b_jonas> multiply it by 0x00000001_00000001
00:33:17 <b_jonas> I think you could do that even without a constant memory operand, because 0x00000001_00000001 is composite
00:33:53 <b_jonas> multiply by 641 then multiply by 6700417 then rotate right by 32
00:34:15 <b_jonas> low 32 bytes gives the fibonacci number
00:35:11 <shachaf> I'm wondering about a language feature which is sort of the opposite of the ones I've been talking about wanting recently.
00:35:20 <b_jonas> https://www.perlmonks.com/?node_id=715414 is slightly releavnt
00:35:39 <shachaf> I want a type which can have values that are either known at runtime or at compiletime, and can mostly be treated uniformly.
00:35:56 <shachaf> For example an array's length might either be known statically or be a field on a struct.
00:36:31 <shachaf> You might like to be able to write code that works uniformly in both cases.
00:36:35 <ais523> actually AVX is almost certainly enough, you can treat %xmm1 or whatever as four floats, then vhaddps gives you the ability to add and vpermilps lets you move them around inside the register
00:36:40 <b_jonas> ais523: in each step, multiply by phi*2**32, add 2**31, then shift right by 32
00:36:59 <shachaf> So you'd have a "field" on the struct which just refers to a constant compiletime value, or something.
00:36:59 <b_jonas> also works with floats: multiply by phi, round to integer
00:37:06 <ais523> this doesn't work with ints because vpermd can't take input from an immediate for some reason
00:37:10 <shachaf> Are there languages that do that?
00:37:28 <b_jonas> can only give the series starting from the second 1 though
00:37:39 <ais523> shachaf: Rust does several things which are incredibly similar to that
00:37:55 <ais523> but might not quite have the syntax you want
00:37:58 <shachaf> Hmm, do you have an example?
00:38:38 <ais523> you can say print!("{}", obj.field()); and depending on the type of obj, that can either get a value of a field or else compile down to a constant
00:39:14 <ais523> in this case the function containing that would have a type parameter describing the type of obj so that the compilier knew which implementation to use
00:39:43 <shachaf> Another version of this might be a function that can either take an argument at compiletime or at runtime. (In the former case it could be specialized for that argument.)
00:40:27 <ais523> several of the more modern C-replacements (although not Rust, I think) have syntax in which you just write a function and can use it at compile-time if everything it does is safe then
00:40:47 <shachaf> I guess if you have a length() "method" in your language, and you monomorphize polymorphic functions, that more or less accomplishes the same thing, with enough optimizations.
00:40:54 <ais523> fwiw, even gcc compiling C will generate specialised functions if the code implies that they might be useful, at a sufficiently high optimisation level
00:41:29 <ais523> shachaf: right; one weird thing in Rust is that it's idiomatic to rely on this actually happening
00:41:46 <b_jonas> ais523: yeah, but that's another of those optimizations that are hard to get right in the compiler
00:41:47 <shachaf> That sounds like something straight out of C++.
00:41:48 <ais523> e.g. arrays have a compile-time known length but you'd normally write .len() to get at their length anyway
00:42:09 <ais523> because Rust monomorphises whenever you don't explicitly tell it not to
00:42:24 <shachaf> C++ people are all about generating ridiculously inefficient code with recursive nested structs that the compiler can optimize to something efficient.
00:42:29 <b_jonas> the compiler would have to try to inline every call, recursively, to figure out which sets of inlinings result in a simplificatoins
00:42:35 <ais523> shachaf: yes, that's very Rust as well
00:42:48 <shachaf> I think that's not that great an approach.
00:42:52 <b_jonas> just inlining single calls isn't enough, because sometimes everything is hidden behind several layers of functions
00:42:54 <ais523> with the exception that Rust relies a bit less on the optimiser for it
00:43:04 <ais523> the language semantics are such that the optimisation is more or less forced
00:44:52 <shachaf> Imagine you could say struct Arr<T, length = -1> { T* data; if length < 0 { int len; } else { compiletime int len = length; } };, or something.
00:45:38 <shachaf> Of course there are more things about an array that you might want to be either compiletime or runtime.
00:45:49 <shachaf> For example you could track strides for a multidimensional array.
00:46:10 -!- nfd has joined.
00:46:48 <b_jonas> shachaf: sure, Eigen does that with array lengths, and I think some other libraries do too
00:47:12 <shachaf> In general I feel like there are so many different arrayish types you might want, which is kind of annoying.
00:47:21 <ais523> well, the Rust way to do that would be to write [T; 10] for a fixed ten-element array and [T] (which is a different type) for an array of unknown length, but it's trivial to write a function that's generic over both of those
00:47:48 <ais523> (e.g. by specifying the type of your argument as Into<&[T]>)
00:48:19 <shachaf> For example: Array with static length; array with dynamic length; array with dynamic length and (static or dynamic?) capacity, which can't grow past that capacity; array with dynamic length and dynamic capacity that can be grown with an allocator (do you store the allocator too?)
00:48:38 <ais523> I have come to the conclusion that it's generally incorrect for a method to require a specific type from its arguments, rather than a description of what the type needs to support
00:49:01 <ais523> but that description doesn't have to be duck typing, something like Rust's traits or Haskell's typeclasses probably works better
00:49:51 -!- nfd9001 has quit (Ping timeout: 264 seconds).
00:50:09 <ais523> Rust has three arrayish things, [T; len] (compiletime fixed length); [T] (runtime fixed length); Vec<T> (growable)
00:50:22 <b_jonas> (more than three but yeah)
00:50:25 <shachaf> I think doing too much monomorphizing everywhere isn't that great either.
00:50:27 <ais523> that said, I think the "growable up to a fixed capacity" would be useful, but I don't think it's in the standard library
00:50:34 <ais523> b_jonas: three really well-known ones
00:50:41 <shachaf> For example you get a lot generated code, which isn't great.
00:50:42 <ais523> what sort of minor arrayish things does it have?
00:50:43 -!- nfd has quit (Ping timeout: 248 seconds).
00:51:09 <b_jonas> yeah, those are mentioned on the front page of the standard library documentation
00:51:12 <shachaf> ais523: Vec<T> is only growable with a call to a global allocator, right?
00:51:27 <shachaf> In general I'd like my libraries not to depend on things like a global allocator.
00:51:51 <b_jonas> at https://doc.rust-lang.org/nightly/std/index.html#containers-and-collections that is
00:52:12 <b_jonas> shachaf: sure, but if you want a growable type, what should it grow into?
00:52:33 <shachaf> Well, that's one reason I want "growable up to a fixed capacity".
00:52:34 <b_jonas> do you want one that uses a buffer you give it?
00:52:52 <b_jonas> hmm yes, I don't know if the library has such a type
00:52:54 <shachaf> You could tell your caller that you need more space.
00:52:58 <b_jonas> you could define one though
00:53:09 <ais523> ugh, I've been trying to remove doc.rust-lang.org from my browser history
00:53:25 <ais523> I shouldn't have clicked that link
00:53:30 <ais523> moony: well, I often develop Rust offline
00:53:33 <b_jonas> ais523: use the forget feature
00:53:39 <ais523> so I have a local copy of the Rust documentation
00:53:41 <shachaf> I do all my browsing in incognito mode by default so nothing goes in my history.
00:53:42 <ais523> b_jonas: I did, it's just a pain
00:54:15 <ais523> actually, the really annoying thing is that I can't use file:/// URLs for Rust documentation any more, because the page crashes if you don't have cookies/localstorage enabled
00:54:27 <shachaf> ais523: There's also the separate distinction of whether a type "owns" the memory it's referring to or not.
00:54:28 <ais523> and I don't think file:/// supports that
00:54:35 <ais523> so I'm now running a local webserver just for the Rust documentation
00:54:37 <moony> ais523: `rustup doc`
00:54:42 <moony> does that not work
00:55:14 <ais523> b_jonas: it's not that ouch, I've had a local webserver running on here for years because I couldn't figure out how to get rid of it
00:55:14 <shachaf> I guess Rust is full of ways to handle that.
00:55:17 <ais523> now it at least has some purpose
00:55:23 <ais523> (it's only accessible on localhost, at least)
00:55:28 <shachaf> But I think e.g. Box<> assumes you're using the global allocator?
00:55:53 <ais523> shachaf: pretty much the entirety of Rust is about whether types own their memory or not
00:56:09 <b_jonas> shachaf: yes, or at least its destructor does
00:56:12 <ais523> many methods have to be written three times for the three possible ownership relationships
00:56:26 <ais523> Box<> is basically the main API for accessing the global allocator
00:56:39 <ais523> so them being tied to the global allocator really isn't surprising
00:56:40 <b_jonas> and there's not much point using it without
00:56:42 <shachaf> And yet they don't seem to have great support for a lot of allocation strategies.
00:56:49 <ais523> you could have a MyLocalBox or whatever for a different allocator
00:57:13 <ais523> basically nothing in Rust's standard library assumes you're using a Box, it's always done with traits
00:57:39 <ais523> there are standard trait combinations to use to say "this is a custom pointer-like thing" and then it can be used in all the same contexts that Box can
00:57:53 <shachaf> Last I tried Rust much Box was called ~, I think (or maybe @?).
00:58:05 <shachaf> I think @ was for garbage-collected or maybe reference-counted cells.
00:58:36 <ais523> nowadays ~ is called Box and @ was split into Rc and Arc (a Gc was planned but they never got around to it)
00:58:47 <ais523> the Rc/Arc difference is that Arc is thread-safe but slower
00:59:57 <ais523> (Rc can be used in multithreaded programs but Rust won't let you send one between threads, it's confined to a single thread)
01:00:38 <b_jonas> shachaf: that's what cpressey said too ("https://esolangs.org/logs/2019-07-23.html#l2c")
01:00:41 <shachaf> Pervasive reference-counting doesn't seem like a great allocation strategy to me.
01:01:12 <shachaf> b_jonas: No, I'm not annoyed by the language changing as long as I'm not using it.
01:01:28 <shachaf> I'd rather they make it better rather than try to ensure backwards compatibility.
01:02:18 <ais523> shachaf: pervasive reference-counting is one of the reasons that Perl is probably unrecoverable from a performance point of view
01:02:47 <ais523> I found out fairly recently (in the last few days) that Python uses pervasive reference-counting + a cycle-breaker, which seems even worse somehow (especially in a language which could easily use its own VM)
01:03:07 <b_jonas> ais523: what does "use its own VM" even mean?
01:03:16 <ais523> b_jonas: like Java has the JVM
01:03:27 <ais523> OCaml's allocation strategy is really interesting and apparently not widely used
01:04:05 <b_jonas> ais523: in Java's case that means that the programs are compiled down to an executable that the VM can run, and you don't need the compiler, only the VM, to run the program
01:04:06 <ais523> everything is 32-bit aligned, every 32-bit chunk has a tag bit saying whether or not it's a pointer
01:04:17 <b_jonas> but how is that relevant for what you've said above?
01:04:32 <shachaf> ais523: I think this was changed at one point, but for a long time Python objects that had a reference cycle and destructors were just not collected.
01:04:34 <ais523> this means that exact garbage collection is possible (not just conservative) and doesn't need to know anything about the structure of memory apart from the tag bits
01:05:08 <ais523> b_jonas: well, the JVM is an example of something that can implement exact reference counting, and even things like compaction, because it has full control over the structure of all the memory stored there
01:05:25 <ais523> in Java you can swap out GC algorithms without changing the performance of the program
01:05:27 <b_jonas> ais523: doesn't it also mean that you can't easily have an array of numbers in a dynamically allocated thingy though?
01:05:37 <ais523> and I don't think reference-counting + cycle-breaker can possibly be superior to a GC
01:05:54 <ais523> b_jonas: OCaml numbers are only 31 bits wide so that there's room for the tag bits
01:06:14 <b_jonas> ais523: right, so you can't have an array of proper numbers, only of OCaml numbers
01:06:21 <ais523> OCaml has to do fairly insane things to make floats work with this, which is a major downside
01:07:03 <ais523> shachaf: something that detects a situation in which a nonzero reference count exists only because of objects recursively referencing each other
01:07:10 <ais523> and not because the objects are actually referenced
01:07:15 <ais523> and frees all the objects in the cycle
01:07:38 <zzo38> Fix the Rust documentation so that it does not use cookies/localstorage. A documentation page shouldn't require that anyways.
01:07:39 <b_jonas> shachaf: a would-be-thief that decides that if he can't have your bicycle, then you can't either
01:08:13 <shachaf> I mean, how does it work other than effectively doing general GC?
01:08:34 <ais523> shachaf: that's why I think it's ridiculous; it's basically most of the way to a general GC with all the disadvantages of an Rc
01:10:21 <b_jonas> that said, python can work with a pure Gc, and I think the python implementations that run in the jvm do that; and if you know that no dependency of your code needs the gc, then you can run cpython with just the refcounting, disabling the gc
01:11:41 <b_jonas> you can use destructors and/or weak references to make the pure refcounting work
01:12:20 <b_jonas> https://docs.python.org/3/library/gc.html#gc.disable
01:12:35 <b_jonas> (don't click on that if you want to use a local copy of the docs)
01:12:51 <ais523> I don't think I have a local copy of the Python docs
01:13:01 <ais523> maybe I should, but I hardly program in Python
01:13:26 <shachaf> If you program in a language all the time, you probably don't need the documentation.
01:13:50 <ais523> anyway, I had an idea wrt the OCaml way of doing things: for each type, identify the ratio of pointers to non-pointers in it (in terms of bytes), and allocate each type with a given ratio in its own arena
01:14:22 <ais523> /but/, you allocate the pointer and non-pointer parts in separate arenas too (the addresses of the two parts are mathematically related because of the constant ratio)
01:14:56 <ais523> now, you have all the pointers in memory blocks of their own, so that you can GC them really easily, and don't need to waste any bits on tagging things
01:16:28 <ais523> another benefit of this is that it statically guarantees that all pointers are correctly aligned, without needing to waste any bytes on padding
01:16:58 <ais523> I'm not sure what the cache effect would be, there are reasons to think it would help but also reasons to think it would hinder
01:18:51 <ais523> actually, this is almost strictly better than the OCaml approach (which is already pretty good), the only downside is related to unions and other sum types
01:19:02 <ais523> which are, of course, heavily used in OCaml, so that might be a problem
01:19:35 <ais523> unless, hmm, perhaps sum types could be references and the tag is stored in your choice of arena to point the pointer into
01:21:12 <ais523> OCaml is the sort of language that really wants a GC, because it heavily relies on immutable value types that it wants to avoid copying, /but/ also contains mutable data
01:22:09 <ais523> (I think that languages which mutate a lot normally benefit from manual memory management, and with languages which don't mutate at all, reference counting is a more attractive possibility than it would be otherwise)
01:24:00 <shachaf> I think languages should mutate a lot when they can, but they always seem to focus on backwards compatibility.
01:24:16 <shachaf> This is why you should never release your software.
01:24:38 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
01:25:07 <pikhq> I'm increasingly of the conclusion the transistor was a mistake.
01:26:28 <shachaf> do you want to design my language for me twh
01:26:31 -!- Sgeo has joined.
01:26:57 <shachaf> also do you want to see pictures of cute kittens
01:26:59 <ais523> shachaf: Rust is instructive in that but I'm not sure in what direction
01:27:05 <pikhq> Between work and general life demands I'm doing well to keep up on developments in programming languages, really
01:27:12 <pikhq> Also, of course I do. Cute kittens are great.
01:27:22 <ais523> lots of people got upset that it changed so much before being stabilised, but OTOH it ended up really benefitting from the time
01:27:54 <ais523> I do think it's beneficial to really work on a project's specification before the first release, though, making sure it's perfect
01:28:52 <pikhq> There's still some things in the Rust stdlib that I think are kinda questionable...
01:29:58 <zzo38> What things is that?
01:30:23 <pikhq> Allocation failure is generally an unreported and unhandlable error.
01:30:45 <pikhq> Which, yes, I know is more _ergonomic_, but it means you have limited options for handling that error condition.
01:30:53 <shachaf> I think it'd be a pretty reasonable world for every sufficiently large company and so on to use its own programming language, rather than everyone standardizing on a few.
01:31:52 <ais523> pikhq: my experience with allocation failures is that almost every attempt I've seen to handle them is either equivalent to a crash, or more user-hostile than a crash would be
01:31:55 <shachaf> Unfortunately there's a lot of nonsense involved in making programming languages which probably shouldn't be necessary. And also cross-language interoperability is often very bad.
01:32:19 <pikhq> And it feels a touch silly in a language that offers decent error handling approaches, and doesn't have semantics necessitating always-crash behavior
01:32:20 <ais523> arguably /every/ attempt
01:32:34 <pikhq> ais523: For many programs, that is indeed the correct decision.
01:33:12 <pikhq> In Rust it grates because Rust is trying to handle problem spaces where that might _not_ be the best decision.
01:33:21 <ais523> pikhq: in programs where you'd want to do something else, you probably need safety against other sorts of crashes too, or even power failure
01:34:16 <ais523> (also, my guess is that allocation failure in Rust is a panic, which is just about possible to handle, and I'm guessing that programs that care about allocation failure recovery care about panic recovery too)
01:34:38 <pikhq> I believe there is an outstanding RFC for _making_ it a panic.
01:34:57 <ais523> oh, it isn't atm? presumably that's due to a fear that destructors might allocate memory
01:35:13 <pikhq> And yeah, having allocation failure be a panic is probably a reasonable strategy for a lot of programs.
01:35:16 <ais523> I think it would be obviously incorrect to make it anything less than a panic
01:35:43 <ais523> especially as it's almost impossible, on most computers, to reach the point of memory exhaustion
01:35:53 <ais523> memory is a shared resource, so the computer just runs slower and slower and slower as it gets shorter on memory
01:36:12 <ais523> the point of true memory exhaustion doesn't actually get reached because the user has started force-quitting things and even doing hard power offs before then
01:36:18 <shachaf> On my computer if a program uses too much memory, it just makes the kernel kill some other random program.
01:36:18 <pikhq> Pretty frequently the hypothetical ideal allocation failure behavior is for a given task to abort, not for the program as a whole to.
01:36:28 <pikhq> (but of course that's harder to achieve)
01:36:30 <ais523> so an actual memory exhaustion only happens when it's a quota that got exhausted rather than physical memory
01:36:51 <shachaf> Are destructors a good idea? I can't tell.
01:36:58 <pikhq> shachaf: On Windows on the other hand, the kernel just reports memory exhaustion.
01:36:58 <ais523> (my life got a lot better when I realised that I could just set a per-program RAM usage quota)
01:37:14 <pikhq> It has strict commit charge tracking.
01:37:36 <pikhq> (though it's still hard to really get this to come into play, because the swap file scales in size)
01:37:57 <shachaf> It's kind of bizarre that Linux still uses swap partitions instead of files.
01:38:24 <pikhq> To be honest, probably the most common case where allocation is going to report failure is exhaustion of address space on 32-bit systems.
01:38:38 <pikhq> And that one's pretty easy to hit.
01:39:07 <pikhq> Easier still to have an attempt to allocate that would exhaust address space, while still having plenty after the allocation failed.
01:39:18 <ais523> shachaf: re destructors: my belief is no, except when it's syntactic sugar for something else (as is often the case with RAII), but for a slightly strange reason: if you have the sort of object that benefits from a destructor, you probably need to be tracking/organising all the references to the object anyway to be able to use it in a semantically correct way, in which case calling the destructor manually would be trivial
01:39:48 <ais523> re: swap: Linux can use swap files just fine, people are just used to setting up partitions
01:39:59 <shachaf> Can it suspend-to-disk to a swap file?
01:40:09 <shachaf> That's my main reason for having a swap partition.
01:40:47 <pikhq> I wouldn't be surprised if using a swap file ends up having a performance penalty over a swap partition, just because the Linux swap code is pretty poo.
01:41:07 <shachaf> I also don't know why swapoff takes half an hour.
01:41:10 <zzo38> Also maybe the file is fragmented
01:41:15 <pikhq> Not that swapping is _ever_ going to be fast, but Linux seems to do it a page at a time, synchronously.
01:41:26 <ais523> (fwiw, I set my current laptop up with no swap, neither partition nor file, and have so far not regretted that decision at all)
01:41:27 <shachaf> I guess the reason is what pikhq just said.
01:42:29 <ais523> even then, you still get swapping-like behaviour at times of high memory pressure, but the kernel isn't swapping data out to disk, but rather unloading pages from memory that happen to equal the corresponding page on disk
01:43:01 <shachaf> I think there are two main uses for destructors, which RAII wants to unify:
01:43:28 <shachaf> One is objects on the stack, where things get auto-cleaned-up at the end of a scope.
01:43:58 <shachaf> This is convenient but I think something like Python's "with" or Go's "defer" might address it better. It's mostly a control flow thing, not an object thing.
01:44:24 <ais523> does Java's try-with-resources fall into the same category?
01:44:37 <shachaf> The other is objects that contain other objects that contain other objects that have destructors, or something.
01:45:09 <ais523> (the semantics: you write try (expression) {}, and when control leaves the {} for any reason at all, the ".close()" method is called don the expression; this includes exceptions and all control flow structures, in addition to just falling off the end naturally)
01:45:12 <shachaf> Where the whole tree is automatically traversed for you when you destruct the outermost object.
01:46:13 <ais523> of course, things like System.exit() can beat the try-with-resources and prevent .close() from running, but the semantics are that the process can't continue until your destructor has run
01:46:20 <shachaf> I guess there's also the special case where you e.g. use a lock-acquiring-object and then tail-call another function and give it that object.
01:46:32 <shachaf> That's probably not handled with a thing like "with".
01:47:08 <ais523> semantically the only issue is that it wouldn't be a tail-call any more
01:47:29 <shachaf> I mean the case where you pass ownership of the lock-object to the other function.
01:47:40 <shachaf> So it can presumably destruct it at any point.
01:48:03 <ais523> hmm… isn't the lock-object basically just a continuation?
01:48:36 <ais523> I guess it's more like a callback
01:50:59 <ais523> anyway, I have one very strong opinion about memory management, which is: for immutable types that never change, programming languages (possibly unless they're /very/ low level) should provide an API which from the programmer's point of view looks like the objects are copied everywhere and never have multiple references, and should optimise it behind the scenes (which may involve garbage collection or reference counting of a single copy or whatever),
01:51:01 <ais523> but should /never/ allow such objects to mix with any sort of memory allocation scheme that's explicitly controlled by the programmer
01:52:48 <ais523> because the two cases are basically entirely different in terms of how you need to optimise them, and trying to treat them the same way makes both of them much more difficult
01:53:25 <ais523> in particular, the programmer should never need to track immutable things, you can pass them around at will without any semantic issues, forget about them, whatever
01:53:47 <ais523> things that can be mutated are both rarer, and need a lot more care, typically you'll have some very regimented rules for using them already
01:54:13 <shachaf> Maybe your "/very/ low level" boundary is different from mine.
01:54:46 <ais523> for example, in NetHack, keeping track of the memory management for every string in the program is a lot of ridiculous effort, especially when you want to be able to pass the same string to multiple functions or to the same function multiple times
01:54:52 <ais523> so a garbage collector for strings would be really nice
01:55:27 <ais523> OTOH, a garbage collector for in-game items, monsters, etc. would just be semantically wrong, because you want those things to stick around until you explicitly destroy them, and the destruction has a lot of /logic/ impacts that need consideration by the programmer
01:55:31 <zzo38> Is there a driver to use with Ghostscript to write to a DVI file?
01:56:06 <ais523> e.g. if the monster is holding an item, do you want to destroy that too? what if it's a plot-critical item that simply cannot be destroyed? you need to know where the monster "should have been" to place the item in the right location after hte monster is gone
01:56:36 <ais523> so things like monsters are part of the game logic and managing their memory is trivial because you need to manage their state in just as much detail, and the memory management is easy to tack onto that
01:57:55 <ais523> (I've also concluded that there's actually a third category here, things like "the internal state of an algorithm" that are mutable but self-contained and used only temporarily, but those are nearly always either stack-allocated or effectively-stack-allocated)
01:59:16 <ais523> I guess you could make exceptions for, say, treesort, which could in theory be stack-allocated but nearly always isn't
01:59:18 <zzo38> (Also, is it possible to add drivers to Ghostscript without recompiling?)
02:00:20 <shachaf> Why would treesort not be stack-allocated?
02:00:31 <shachaf> Or allocated in some kind of temporary memory.
02:00:37 <ais523> the tree you're building is a recursive data structure the same size as the original list
02:01:03 <ais523> trying to express a stack-allocation of that, especially if the list is coming from a streaming source and you don't know how large it is, is incredibly difficult in most languages
02:01:30 <shachaf> Well, you can allocate in some temporary arena or something with effecitvely stack semantics.
02:01:46 <ais523> using a recursive function to do the stack allocation using its own call frames would work, but is inefficient due to the return addresses cluttering up the stack
02:02:07 <shachaf> Mergesort also allocates a linear amount of memory.
02:02:10 <ais523> so you'd either need an alloca-alike or else a temporary arena
02:02:22 <Hooloovo0> could you do something fancy with tail recursion?
02:02:37 <shachaf> Tail recursion is pretty pointless if you have iteration.
02:03:44 <shachaf> By the way: I realized that "if" evaluates its argument exactly once, at the time it's executed, so it's a lot like a function parameterized on a block.
02:03:56 <shachaf> But "while" re-evaluates its argument so it's not very function-like.
02:04:21 <shachaf> Is "while" an exception among control flow keywords?
02:05:23 <ais523> <Hooloovo0> could you do something fancy with tail recursion? ← I was actually just thinking that, and did some experiments; my conclusion is yes in theory, but no using the x86_64 calling convention
02:05:43 <shachaf> Actually, my real question is: If my function has user-definable control flow constructs, should they be functions, which is enough to support "if", and if so how should they handle "while"?
02:06:29 <ais523> you'd need a calling convention in which the called function cleaned up the section of the stack between stack and base pointer for the caller
02:06:51 <ais523> this calling convention is trivial to define but I don't see any benefit except in this one massively specific case, so I doubt it'd ever be used
02:07:33 <ais523> shachaf: the mathematical solution is call-by-name, and the practical solution most languages use for that is to take a callback parameter, meaning that your language is genereally call-by-value but you call-by-name just this one small part
02:07:53 <shachaf> ais523: There might be more benefit in non-recursive tail calls? But probably you should just manage the memory more epxplicitly if you're doing that.
02:08:16 <ais523> so, e.g., in C, the prototype for while would look liike while(bool(*condition)(), void(*body)())
02:08:33 <ais523> because it's a function pointer not a value, the function you're calling can run it multiple times if it wants to
02:08:36 <shachaf> Except that presumably you're thinking of a closure and not a function pointer.
02:08:48 <ais523> it would normally be a closure in practice
02:09:01 <ais523> doesn't have to be, though, it could just be a function constant
02:09:14 <shachaf> Anyway, I'd want this for an efficient language, where the predicate argument is guaranteed to be inlined at compiletime.
02:09:53 <shachaf> If you have a notion of passing multiple blocks to a function, you could just write "while {p} {body}", which maybe wouldn't be so bad.
02:10:08 <zzo38> I think the user defined control structures should be macros and not functions, and operate at compile time.
02:10:09 <ais523> heh, well I designed Verity a while back: intended for efficiency, call-by-name, callbacks are guaranteed to be inlined (in fact, absolutely everything is guaranteed to be inlined, which in turn means that the language doesn't support recursion)
02:10:25 <ais523> or, well, it does actually support recursion but it does so using a recursion combinator
02:10:35 <zzo38> (The macro expansion will then put in all of the correct code to make it work properly at run time)
02:10:56 <ais523> it doesn't support recursion via having a function call itself because that would just inline it
02:11:15 <shachaf> zzo38: I'd like them to be something between macros and functions.
02:11:21 <ais523> shachaf: hmm, I think that might be valid syntax in Perl (once you change "while" to something that isn't a keyword)
02:11:26 <shachaf> Maybe this just means hygienic macros, but I think it's a bit more than that.
02:11:40 <shachaf> For example, I'd like a block to optionally take parameters.
02:11:49 <shachaf> So you might write "for(xs) {\x; ... }"
02:12:08 <shachaf> That's not just an AST, exactly, it's a compiletime object that can be called.
02:12:31 <zzo38> Yes, that makes sense, it could be hygienic macros that you can add blocks to take parameters. So, you can have anonymous macros perhaps?
02:12:55 <shachaf> I guess you could, though it doesn't seem that useful.
02:13:18 <zzo38> I think may would be useful.
02:14:02 <b_jonas> ais523: impossible to reach memory exhaustion => unless you deliberately put a memory limit to catch it early, whether by setrlimit or through the memory allocator function itself
02:14:02 <shachaf> So my old language idea is, you have an operator that captures "the rest of block" and passes it as an argument to an expression.
02:14:23 <shachaf> So instead of writing "if(p) { body }", you can write "{ if(p)`; body }"
02:14:42 <b_jonas> but I do agree that it's usually not worth to handle an out of memory condition other than guaranteeing that it will crash properly rather than randomly corrupt memory
02:14:53 <ais523> b_jonas: yes, this is why I have a setrlimit on every program I start from the command line by default nowadays
02:15:08 <shachaf> And also instead of writing "for(xs) {\x; ... }", you can write "{ x := for(xs)`; ... }"
02:15:16 <ais523> (to catch fast memory leaks in programs I write, which I'd nearly always be running from the command line)
02:15:57 <shachaf> If you're using this idea, you could maybe have "while" pass a special block that breaks from the loop when you pass it false. Then you could have "{ while`(p); body }".
02:16:11 <shachaf> I don't really like this, though, it seems pretty complicated.
02:16:33 <ais523> shachaf: last time we discussed this, I think we had a debate about if it was a monad or not
02:16:44 <ais523> my current thoughts on this is that it works very well for if-like things but much less well for while-like things
02:16:50 <shachaf> What about for-like things?
02:17:15 <ais523> unsure, but currently leaning towards working
02:17:39 <shachaf> I think it works quite well for "{ loop`; ... }" and "{ x := for(xs)`; ... }"
02:17:56 <shachaf> I think this is nicer than almost any "for" construct in any language.
02:18:26 <shachaf> For example I don't think anyone has a nice way to express "{ x := for(ns)` + 1; ... }"
02:18:28 <ais523> fwiw, I think "each" is a good name for it in this context
02:19:18 <ais523> this also generalises to "any" loops pretty well, but those aren't in common use (maybe they should be)
02:19:19 <shachaf> You can also write "{ x := for(xs)`; y := for(ys)`; if(x < y)`; ... }" and get something like list comprehensions.
02:19:36 <ais523> the loop exits unless there's an exception in the loop body
02:19:47 <ais523> if there is an exception it just moves onto the next loop iteration
02:19:53 <shachaf> How do you express the exception?
02:20:22 <ais523> normally it would be some sort of assertion failure, these loops are normally only used in declarative languages
02:20:32 <shachaf> You can also write "{ x := for(for(xss)`)`; ... }
02:20:40 <ais523> but I've found myself writing them in, e.g., Java
02:20:54 <shachaf> I've hardly seen loops like this, or maybe I just haven't recognized them.
02:21:10 <ais523> where they're an ugly sort of "for (a : …) try { … ; break } catch (Exception ex) {}
02:21:40 <ais523> you basically use them when you have multiple approaches that might potentially work, and just want to find one that works
02:21:51 <shachaf> I think just writing a break at the last line of your loop is simple enough.
02:21:55 <ais523> oh, that's not quite right, because if /every/ iteration fails you want to throw an exception
02:22:15 <ais523> ideally that's a combination of all the others, but I haven't yet seen a language that does that
02:22:35 <shachaf> Probably related to Python-style for-else.
02:22:37 <ais523> "could not communicate by TCP because the socket is closed, nor via carrier pigeon because no pigeons were available"
02:22:50 <ais523> I keep forgetting how for-else works
02:23:03 <shachaf> I used to think it was bizarre but now I think it's very natural.
02:23:13 <ais523> is it that the else block only runs if the loop has no iterations?
02:23:15 <shachaf> Though possibly it's even more natural to express it directly with my language idea.
02:23:32 <shachaf> The else block runs if the loop exits via the condition, instead of a break.
02:24:02 <ais523> the terminology is insane though
02:24:14 <ais523> but the semantics are useful
02:24:33 <ais523> oddly, I think it's the "break" I disagree with here rather than the "else"
02:24:44 <ais523> because "break" is indicating "found"/"success" which the word "break" doesn't really imply
02:24:54 <shachaf> In my language thing, you can label blocks with, say, @, and the label lets you exit them.
02:24:56 <ais523> (likewise, "continue" is indicating failure)
02:25:05 <ais523> perhaps "done" is a good name for "break"
02:25:24 <b_jonas> "I keep forgetting how for-else works" => isn't that because there are at least two unrelated things with a name similar to them?
02:25:44 <shachaf> So "{ x := for(xs)`; ... }" actually means somthing like: { break := @`; x := for(xs)`; continue := @`; ... }
02:27:20 <b_jonas> ais523: I'd prefer "break" or "last" (especially if you have the full quadruplet "retry/redo/next/last"), because "done" is already used in a conflicting sense in sh
02:27:26 <shachaf> So if you wrote "for (xs) { body } else { notfound }" explicitly, it would be something like: { done := @`; { x := for(xs)`; continue := @`; ... }; notfound }
02:28:04 <shachaf> Who cares about sh? The only good thing about sh syntax is the way it handles variables.
02:30:23 <ais523> b_jonas: what does retry do?
02:31:25 <b_jonas> ais523: jumps to right before the start of the loop. not the start of the loop body, the start of the whole loop
02:33:06 <ais523> neat, that's a possibility I hadn't thought of
02:33:21 <ais523> now I sort-of want a control flow operator to go back to the previous loop iteration
02:33:47 <b_jonas> ais523: jumps to right before the start of the loop. not the start of the loop body, the start of the whole loop
02:34:08 <ais523> I think you sent the wrong line?
02:35:05 * moony tries to wrap head around this
02:35:37 <ais523> shachaf: repeats the current loop iteration
02:35:55 <ais523> so it's basically a goto to the start of the block, without increasing the loop counter or anything like that
02:36:30 <ais523> I've used it a few times but it doesn't seem massively useful
02:36:56 <shachaf> I like the way both break and continue are forward jumps, and only the loop construct itself does a backward jump.
02:37:22 <zzo38> I implemented Z-machine in C, JavaScript, and Glulx; now I do in PostScript. Later, I could try other stuff, such as PC, and Famicom (which I have started to do some time ago but haven't finished it), and possibly others too. What others will you implement Z-machine on?
02:37:28 <ais523> it's debatable where continue jumps to
02:37:52 <ais523> I'm not sure it's observable whether it's a forwards or backwards jump (and at the asm level, backwards is normally more efficient unless the loop entry has been unrolled)
02:38:04 <shachaf> The C standard defines it as a forward jump.
02:38:17 <shachaf> I also think that's a much more sensible definition.
02:38:40 <zzo38> Yes, forward jump is sense, and then the optimizer could alter it
02:39:21 <shachaf> Let me see if I can label all the points in a loop to support these behaviors.
02:39:43 <ais523> in BF, is ] a conditional or unconditional jump?
02:39:53 <shachaf> { @break; forever`; @retry; { @thing; forever`; @redo; x := for(xs)`; { @continue; BODY; }; thing; }; break; }
02:39:59 <ais523> (you can even make the argument that ] is conditional but [ is unconditional)
02:40:45 <ais523> what does thing do? I'm still getting used to this notation
02:41:17 <shachaf> It exits the loop when you haven't used redo.
02:41:43 <shachaf> There's probably a better way to express this.
02:43:20 <ais523> I can see what that operation doesn't have a standard name :-D
02:43:56 <ais523> in a more normal notation, the labels go here: retry: while(condition) { redo: BODY; continue:; } break:;
02:44:53 <shachaf> I like break-from-named-block much more than goto for control flow.
02:45:15 <shachaf> It probably doesn't clarify things here, though.
02:45:35 <shachaf> (I think this is a good argument for retry/redo being confusing.)
02:46:26 <zzo38> I prefer goto rather than named continue/break.
02:46:54 <moony> I prefer named continue/break
02:46:58 <moony> goto has too many ways to be evil
02:47:43 <shachaf> I even wonder whether you should just not have continue/break and be explicit about writing the labels when you want them.
02:48:28 <zzo38> moony: Well, so does any other feature, I think.
02:48:30 <ais523> hmm, the only situation in which I find myself tempted to use goto, and it clearly isn't a standin for a missing control structure, is when you have lots of if statements with the same body but they're scattered around the function so you can't combine the conditions, and they're too tightly tied to local variables to extract into a function
02:48:38 <ais523> you can use temporary booleans for that instead but I think the goto is clearer
02:48:58 <zzo38> Yes, and I think there are also other situations where goto is clearer.
02:48:59 <shachaf> ais523: This sounds like a use case for the "blocks" I was describing earlier.
02:49:04 <ais523> shachaf: I think the issue is that the loops are too generically named
02:49:43 <zzo38> I have once written how to convert a program with goto so that it only uses labeled continue/break, which, for example can be used with JavaScript.
02:49:50 <ais523> something like Python's for-else has a clearly defined intended use, Haskell's map also has a clearly defined intended use, but both operations become a for loop in most languages even though they function very differently
02:50:17 <ais523> things like continue and break have unclear semantics because the loops they're short-circuiting/exiting have varying semantics
02:50:59 <shachaf> With your goto notation, for (x in xs) { BODY } else { ELSE } is "for (x in xs) { BODY; continue: }; ELSE; break: "
02:51:56 <ais523> and a label before the ELSE should probably be called "fail"
02:53:43 <shachaf> Man, { x := for(xs)`; if(valid(x))`; switch(x)`; { case(A)`; ... }; { case(B)`; ... } }
02:54:21 <shachaf> for (x in xs) { if (valid(x)) { switch(x) { Case A: ...; Case B: ... } } }
02:55:35 <ais523> hmm, that's semantically correct but isn't it basically an if/else chain?
02:55:58 <ais523> the original purpose of a switch was to hint to a compiler that it might want to make a jump table
02:56:13 <ais523> but I guess that nowadays, maybe switches are just syntactic sugar for the if/else chain
02:59:24 <shachaf> Anyway I don't believe in exceptions so you'd need some other way to express "any".
02:59:52 <shachaf> I think it might reasonable to say that the loop breaks by default and you can explicitly tell it to continue instead.
03:00:16 <shachaf> But it seems infrequent enough that you can probably just write out the control flow yourself?
03:00:24 <ais523> well, I'm using "exception" in a general sense, it's any situation where the code says "OK, this won't work"
03:00:39 <ais523> I think people normally just use "continue" for failures and "break" for successes
03:00:50 <ais523> then an any loop is just a regular for loop
03:00:57 <shachaf> Maybe you can require an "else" clause for "any" loops.
03:18:56 -!- ais523 has quit (Quit: quit).
04:03:47 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
04:09:42 -!- Lord_of_Life has joined.
04:11:20 -!- kolontaev has quit (Quit: leaving).
04:24:20 <esowiki> [[ADxc]] N https://esolangs.org/w/index.php?oldid=65559 * A * (+467) Created page with "==Example== Suppose your snippets were AD, xc, 123, and ;l. Then: * AD should produce 1 * [[ADxc]] should produce 2 * ADxc123 should produce 3 * and ADxc123;l should produce..."
05:22:59 <esowiki> [[JUMP]] https://esolangs.org/w/index.php?diff=65560&oldid=41105 * Dtuser1337 * (+66) Adding some category.
05:24:15 <esowiki> [[Tarpit]] https://esolangs.org/w/index.php?diff=65561&oldid=40466 * Dtuser1337 * (+22)
05:28:18 <esowiki> [[JUMP]] https://esolangs.org/w/index.php?diff=65562&oldid=65560 * Dtuser1337 * (+34) Woosh
05:31:33 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=65563&oldid=64960 * Dtuser1337 * (+84) /* Jug */
05:32:33 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=65564&oldid=65563 * Dtuser1337 * (+2) /* JUMP */
06:16:02 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=65565&oldid=65564 * Dtuser1337 * (+207) My implementation of truth machine in emoji-gramming.
06:27:39 <esowiki> [[Turth-machine]] https://esolangs.org/w/index.php?diff=65566&oldid=63931 * Dtuser1337 * (+80) formatting codebase and adding categories.
06:30:17 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65567&oldid=65558 * Dtuser1337 * (+43) /* Trigger */
06:31:41 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=65568&oldid=65565 * Dtuser1337 * (-6) /* Turth-machine */
06:35:56 <esowiki> [[Turth-machine]] https://esolangs.org/w/index.php?diff=65569&oldid=65566 * Dtuser1337 * (+45)
07:03:59 <esowiki> [[Capuirequiem]] https://esolangs.org/w/index.php?diff=65570&oldid=58513 * Dtuser1337 * (-1) /* External resources */
07:05:09 <esowiki> [[RETURN]] https://esolangs.org/w/index.php?diff=65571&oldid=38078 * Dtuser1337 * (+13) /* External resources */
07:06:53 <esowiki> [[Nil]] https://esolangs.org/w/index.php?diff=65572&oldid=52918 * Dtuser1337 * (+1) /* External resources */
07:11:10 -!- Sgeo_ has joined.
07:14:56 -!- Sgeo has quit (Ping timeout: 272 seconds).
07:15:52 <esowiki> [[CopyPasta Language]] https://esolangs.org/w/index.php?diff=65573&oldid=56021 * Dtuser1337 * (+13)
07:53:24 -!- AnotherTest has joined.
08:25:27 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:26:12 -!- Sgeo__ has joined.
08:27:41 -!- Lord_of_Life has joined.
08:29:51 -!- Sgeo_ has quit (Ping timeout: 268 seconds).
09:09:16 -!- arseniiv has joined.
09:53:49 <b_jonas> yes, that's how I think of it. imagine added labels like A: for (init; cond; step) { B: body; C: } D:
09:54:07 <b_jonas> then retry/goto jumps to A, redo jumps to B, next/continue jumps to C, last/break jumps to D
10:43:43 <arseniiv> ah, these polysigns are simply amateur algebra (bordering crackpottery), bleh. We take a vector space spanned by e[0], …, e[n−1], add a product e[i] e[j] = e[(i + j) mod n] and factor it all so e1 + … + en = 0. Why don’t people read good math textbooks and speak the consensus language
10:45:32 <arseniiv> though an analysis paper by Hagen von Eitzen doesn’t go in this straightforward way so IDK, maybe one can’t factor an algebra this way
10:46:58 <arseniiv> Taneb: a person named sombrero posted a link on some images hosted on vixra ≈yesterday. I didn’t look at them but I saw that word in the abstract and went investigating what it is
10:47:27 <arseniiv> unfortunately, my expectations were confirmed
10:48:16 <arseniiv> (amateur math with crackpotish philosophical claims)
10:48:42 <arseniiv> and also an old one: the analysis paper is 2009
10:49:08 <shachaf> b_jonas: Where that expands further to A: init; while (cond) { B: body; C: step; } D: presumably
10:49:35 <arseniiv> linear algebra is sufficient to do many many things people try to invent
10:50:05 <arseniiv> (of course it’s a trivial statement here)
10:50:21 <b_jonas> shachaf: well actually more like A: { init; while (cond) { B: body; C: step; } } D: if you care about the scope of the variables declared in init
10:52:18 <shachaf> One of the nice things about my system is that many things gets correctly scoped by default.
10:52:48 <shachaf> Instead of Go-style "if x := e; p(x) { ... }" you can just write "{ x := e; if(p(x))`; ... }"
10:53:16 <arseniiv> (ah, now I see the author uses a R[x] as a base because its multiplication is almost right)
10:54:07 <b_jonas> shachaf: "if x:= e; p(x) { ... }" is actual syntax?
10:54:40 <b_jonas> that looks odd to me because in ruby (and julia too) the semicolon would end the condition and start the loop body, but I guess it makes sense because sh works that way too
10:55:11 <b_jonas> the sh syntax for while loops allows you to put multiple statements in the condition too, which means you can put the test anywhere in the middle of the loop, you don't need a separate do-while loop or if-break
10:55:21 <shachaf> I think something like "if (auto x = e; p(x)) { ... }" is syntax in recent C++ too.
10:55:45 <b_jonas> shachaf: dunno, I can't follow that
10:56:17 <b_jonas> in perl you can write { my $x = e; p(x) or last; body }
10:56:29 <shachaf> It just declares something that's only in the scope of the if.
10:58:30 <shachaf> Presumably it means the same as { x := e; if (p(x)) { ... } }
11:00:20 -!- heroux has quit (Ping timeout: 248 seconds).
11:07:55 -!- heroux has joined.
11:12:52 <int-e> Hmm, this looks like a good preamble for a SMETANA program to me :) Step 1. Swap step 1 with step 2. Step 2. Go to step 1.
11:18:54 <b_jonas> Imagine an alternate universe where English didn't become a lingua franca, so there are entire libraries where all the identifiers are in German, ones where all of them are Russian, ones where all of them are in French,
11:19:19 <b_jonas> but you sometimes end up with names mixing words from different languages because the concept has a name popularized by an earlier library,
11:19:39 <b_jonas> and perhaps the oldest libraries with the worst names, like ncurses in our world, would even be all in latin.
11:20:17 <shachaf> It's ironic that you're calling English a "lingua franca" in that description.
11:20:35 <b_jonas> and then some libraries with English names would appear too.
11:21:10 <b_jonas> and you'd have to learn the basics of three or four different languages to understand source code, which was basically the status of scientific research in the 1960s
11:23:46 <b_jonas> yes, you'd probably have to know not only the root words, but also conjugation in latin, french, italian, german, and russian to be able to guess the spelling of identifiers if you want to write code
11:24:01 <Taneb> Sounds fun, we should make this happen
11:24:39 <b_jonas> Taneb: sure, but do it in a modern way, where latin is excluded but instead we have chinese identifiers too
11:25:07 <b_jonas> I mean using latin directly is excluded, we can still have the french and italian and portugeese identifiers of course
11:28:17 <Taneb> Hmm, a lot of libraries are American, so would naturally be written in English
11:28:24 <Taneb> Or maybe Spanish or Navajo or something
11:29:09 <b_jonas> and we may have some short identifiers that are ambiguous because they mean something different depending on what language you're reading them in
11:29:16 <b_jonas> I wonder if we can engineer such a situation in common keywords
11:30:43 <HackEso> signs of the zodiac? ¯\(°_o)/¯
11:31:34 <int-e> Oh I just realized that SMETANA may just be powerful enough to write a quine in. (But I'm targeting SMETANA To Infinity! for now.)
11:32:28 <int-e> Well, if we steal the output instruction from S2I that is.
11:32:39 <int-e> No output, no quine... :)
11:32:57 <shachaf> What if you just put the quine in memory?
11:33:05 <shachaf> For example, in the text section.
11:33:42 <int-e> shachaf: Maybe you should refresh your memory (no pun intended) on what SMETANA is.
11:35:17 <b_jonas> tha handle transform tool in gimp 2.10 is such a blessing, it was so hard to do proper alignments of multiple pictures with affine or perspective transforms before that
11:35:34 <int-e> (SMETANA suffers from being a finite state machine; all data has to be encoded somehow in the program itself as written. So you need some serious compression to allow the program to contain a representation of itself, which stretches the term "quine" beyond the limits I'm willing to allow.)
11:37:22 <b_jonas> how does it stretch the term "quine"?
11:37:23 <int-e> shachaf: Of course we could define other output conventions without extending the language... like looking at the trace and mapping certain predetermined addresses to characters.
11:37:38 <shachaf> int-e: I didn't even know about SMETANA until I looked it up 25 minutes ago.
11:38:17 <shachaf> But I was making a general joke that is equally bad in any language.
11:38:50 <shachaf> (The joke is, define "output" to be some region of memory. At program startup, the program is loaded into memory, and therefore you can define that region to be the output and call it a quine.)
11:39:27 <int-e> b_jonas: Well, I don't know how to delineate decompression and a BASIC-style 'LIST' function that makes quines trivial.
11:40:12 <lambdabot> Local time for shachaf is Mon Aug 19 04:40:08 2019
11:40:28 <int-e> it's getting worse
11:40:39 <fungot> b_jonas: not very quickly, and it has a non-real-time gc, but that's just what the user expected type character, got ' ( 1 2 3)
11:42:57 <int-e> fungot's almost making sense again (though I guess that last part is closer to Lisp than to J?)
11:42:58 <fungot> int-e: lms that doesn't violate her fnord, either. probably still aren't. is slib standard?
11:43:30 <int-e> oh well, the moment of clarity has passed
11:46:28 <shachaf> fungot: Was that Lisp or J?
11:46:28 <fungot> shachaf: ( define ( get-move-console) count)). the funge-98 standard is also written in scheme
11:46:44 <b_jonas> fungot: the reason why people don't take you seriously is that you aren't using the One True Style for formatting your code. don't put whitespace after the left parenthesis or after the quote
11:46:44 <fungot> b_jonas: goes where no other music fnord or has been in jail. we went to another bar. then we only need to cons stuff onto the top of
12:07:52 <b_jonas> peksy arthropods, thinking that I invited them just because I left food open on the counter
12:08:26 <b_jonas> if you want food, buy your own, darn it
12:10:45 -!- j-bot has joined.
12:16:45 -!- andrewtheircer has joined.
12:30:12 <b_jonas> is there a strongly typed golf language where, if your code isn't well-typed, it tries to put extra stuff like parenthesis and other extra stuff into your code until it's well-typed, so if you use the type system well, you can omit a lot of things from the parse tree?
12:30:28 <b_jonas> would need a good built-in library and good heuristics for what to insert
12:31:00 <b_jonas> and might be harder to program in than Jelly
12:33:30 <b_jonas> also, is there a golf language that is basically the same as haskell but with a much more golfier syntax?
12:33:46 <b_jonas> I don't think blsq counts as such
12:52:53 <b_jonas> oh, I get it! if a C compiler environment isn't made for hard realtime programs, then the library defines the PRIoMAX macro to "llo", meaning that the maximum priority that your threads will be able to run is very low
12:57:40 <b_jonas> ``` gcc -O -Wall -o /tmp/a -x c - <<<$'#include<inttypes.h>\n#include<stdio.h>\n int main(void){ printf("maximum thread priority: %s\\n", PRIoMAX); return 0; }' && /tmp/a
12:57:41 <HackEso> maximum thread priority: lo
12:57:49 <b_jonas> that's slight better, it's only low, not very low
13:15:24 -!- andrewtheircer has quit (Quit: Ping timeout (120 seconds)).
13:15:48 -!- arseniiv_ has joined.
13:17:33 -!- andrewtheircer has joined.
13:17:34 -!- arseniiv has quit (Ping timeout: 246 seconds).
13:54:05 <esowiki> [[Special:Log/newusers]] create * Mid * New user account
14:16:34 <b_jonas> apparently the We The Robots comics has ended the long hiatus, except it's not at the old address "http://www.chrisharding.net/wetherobots/" but at "http://www.wetherobots.com/" now
14:16:40 <b_jonas> I haven't noticed until now
14:16:46 <b_jonas> this is what happens when you break urls
14:29:55 -!- sleepnap has joined.
14:30:57 <esowiki> [[ABCD]] https://esolangs.org/w/index.php?diff=65574&oldid=46025 * Dtuser1337 * (+18)
14:39:34 <b_jonas> question. is it possible to make a terminfo entry for irc that tells how to output colors and bold and italic with the mirc codes, and if so, will gcc output colored error messages in HackEso?
14:40:04 <b_jonas> I don't know if gcc's colored error messages respects that
14:40:54 <b_jonas> I made a terminfo entry once, but only by editing a single value in an existing entry
14:44:18 <b_jonas> I should check the ncurses sources in case it already has such an entry though
14:54:45 <b_jonas> whoa... are the terminfo thingies no longer distributed with ncurses? where do they come from then?
15:01:57 <b_jonas> I'll check what debian thinks
15:04:46 <b_jonas> the compiled entries come from the ncurses-term package, now how do I find what the source package is for that?
15:06:01 <b_jonas> and the source package is apparently ncurses
15:07:13 <b_jonas> called ncurses-6.1/misc/terminfo.src
15:08:02 <b_jonas> now the question is, can terminal libraries handle that the same code toggles bold on and off?
15:08:14 <b_jonas> and also the way how you can't put a digit after a color code?
15:08:46 <b_jonas> if not, we need a filter after it, which would be ugly
15:09:13 <b_jonas> I guess for the latter, I can just force put two bold codes after a color code
15:09:21 <b_jonas> and for the former, just hope it works
15:17:32 -!- xkapastel has joined.
15:19:35 <b_jonas> that debian package ncurses-term, by the way, contains the _additional_ compiled terminfo entries, the decades of legacy terminals that nobody uses anymore
15:23:09 <Taneb> Imagine if people started adding footnotes* to their IRC messages
15:23:39 <b_jonas> it's actually split around the directory tree too, so the important terminfo entries are in /lib/terminfo , the rest are in /usr/share/terminfo , in case you're mounting usr late
15:32:32 <b_jonas> fungot, do you have a calendar? has SGDQ 2019 started yet?
15:32:32 <fungot> b_jonas: wtf is that? that problem haunts me. i don't think
16:03:19 -!- joast has quit (Quit: Leaving.).
16:03:58 -!- joast has joined.
16:52:42 <fizzie> fungot: I take it you don't watch speedruns then?
16:52:42 <fungot> fizzie: if i remove the fan, heatsink, installation instructions and finally the body is ( are) returned. this expression type is used at a german bank for financial simulations. but that's a mere one character :) i'm not complaining
16:52:58 <b_jonas> fungot, 45 minutes is how many hours?
16:52:59 <fungot> b_jonas: you could just select another transport module system in the works to start off by reading sicp or htdp.
16:53:19 <b_jonas> fungot: don't remove the fan and heatsink! the cpu will overheat
16:53:19 <fungot> b_jonas: is that what you mean
17:04:13 -!- Phantom_Hoover has joined.
17:20:25 <HackEso> The password of the month is surprising.
17:21:15 -!- Sgeo has joined.
17:24:12 -!- Sgeo__ has quit (Ping timeout: 272 seconds).
17:38:36 -!- FreeFull has joined.
17:53:49 -!- andrewtheircer has quit (Remote host closed the connection).
18:02:45 -!- arseniiv_ has changed nick to arseniiv.
18:09:56 <arseniiv> Taneb: I¹ proved² the Riemann hypothesis³ false⁴
18:10:30 <arseniiv> but the page is too short for the footnote section so no one will know what I meant
18:12:41 <arseniiv> though one footnote can be crammed into the margin (¹ I — Roman numeral 1)
18:12:56 <int-e> . o O ( "I proved the Riemann hypothesis" [is] false. )
18:13:31 <b_jonas> int-e: ah yes, newspaper heading grammer
18:13:48 <int-e> Oh. We can claim that this is a portmanteau.
18:14:04 <int-e> (hypothesis and is -> hypothesis)
18:14:35 <HackEso> friend:friend is a portmanteau of fritter and rend \ ism:Isms are philosophies, religions or ideologies that have branched off from older ones, such as Leninism or Buddhism. Etymologically "ism" is a backformation from portmanteaus on "schism". \ portmanteau:«Portmanteau» is the French spelling of “port man toe”.
18:39:37 <arseniiv> int-e: :D but is omission of this kind grammatical?
18:40:10 <arseniiv> <int-e> (hypothesis and is -> hypothesis) => ah, quite clever
18:40:47 <arseniiv> one can even claim that hypotheses < hypothesises :D
18:41:21 <arseniiv> or not, it seems different phonetically?
18:41:38 <int-e> arseniiv: FWIW I initially intended to provide a footnote 4 that would redefine "false", but didn't find any nice formulation...
18:42:49 <arseniiv> though this is not nice at all
18:43:37 <arseniiv> I had in mind conflating unprovedness, unprovability and proved negation
18:44:09 <int-e> arseniiv: https://www.youtube.com/watch?v=8keZbZL2ero is somehow relevant
18:44:11 <arseniiv> but decided to let it vague (v) for a time
18:55:55 -!- Melvar has quit (Quit: WeeChat 2.4).
19:26:05 -!- ais523 has joined.
19:26:18 -!- ais523 has quit (Client Quit).
19:26:31 -!- ais523 has joined.
19:26:55 <ais523> <b_jonas> is there a strongly typed golf language where, if your code isn't well-typed, it tries to put extra stuff like parenthesis and other extra stuff into your code until it's well-typed, so if you use the type system well, you can omit a lot of things from the parse tree? <b_jonas> also, is there a golf language that is basically the same as haskell but with a much more golfier syntax? ← yes to both, and it's the same language: Husk
19:27:37 <b_jonas> hmm, there doesn't seem to be an article on the wiki
19:29:58 <ais523> CGCC users rarely bother with creating wiki articles for their golflangs :-(
19:30:14 <ais523> they normally just link to the github repo to let people know wha the language is
19:30:27 <ais523> https://github.com/barbuz/Husk in this case
19:30:38 -!- Sgeo_ has joined.
19:31:04 <esowiki> [[Husk]] N https://esolangs.org/w/index.php?oldid=65575 * B jonas * (+158) stub
19:31:33 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65576&oldid=65520 * B jonas * (+11) Husk
19:32:16 <b_jonas> oh no, not yet another golf language with its own custom eight-bit character set
19:33:02 <ais523> most golf languages do that
19:33:09 <ais523> because control codes are /really/ hard to read and type
19:33:34 <ais523> (a golf language I'm sporadically working on has its own /six/-bit character set, which has the advantage that I can make it a subset of ASCII)
19:33:48 -!- Sgeo has quit (Ping timeout: 245 seconds).
19:34:34 <b_jonas> I guess it's still better than if the golf language has a tricky variable length compression, so reading and writing it is more difficult than just translating characters
19:34:48 <b_jonas> like a hufmann encoding or even worse
19:35:28 <b_jonas> of course Jelly's compressed string modes are sort of like that
19:45:06 -!- heroux has quit (Ping timeout: 268 seconds).
19:46:59 -!- adu has joined.
19:51:39 -!- heroux has joined.
20:03:32 <arseniiv> ais523: thanks for an interesting language!
20:04:02 <arseniiv> though golflangs make my head spin, there are so many details because of need to compress
20:04:31 <arseniiv> nondeterministic typing there is cool
20:05:20 <arseniiv> (hopefully it’s implemented in such a way as to not blow up combinatorily)
20:08:09 <arseniiv> I’d type overloaded multimethods using union typing, but am I right it’s not easily added to Hindley—Milner-like inference?
20:08:16 <ais523> it might blow up at compile time but that's probably forgivable, golflang programs are short
20:09:12 -!- Melvar has joined.
20:10:01 <b_jonas> I wonder if there's a golf language that has a built-in that gets the OEIS sequence from its index, and to compute its terms, tries to automatically run code in the OEIS entry, so requires Maple and Mathematica plus ten gigabytes of other software to run.
20:10:22 -!- sleepnap has quit (Quit: Leaving.).
20:10:52 -!- sleepnap has joined.
20:11:23 <b_jonas> and of course you download a snapshot of the OEIS at the time you build the compiler, so that it doesn't cheat by looking info up on the internet that may be newer than the language
20:13:25 -!- sleepnap has quit (Client Quit).
20:19:13 -!- Melvar has quit (Ping timeout: 245 seconds).
20:19:37 -!- Melvar has joined.
20:21:10 <ais523> b_jonas: I think someone tried that once but failed
20:21:47 <ais523> a better approach would probably be to encourage people to submit OEIS programs in a standard machine code; WebAssembly comes to mind
20:21:48 <b_jonas> yeah, this does seem like an interesting language
20:22:11 <b_jonas> ais523: does WebAssembly have bigints?
20:22:32 <ais523> it's a machine code, so not natively in the same sense that x86 doesn't have native bigints
20:22:38 <ais523> but you can run GMP or the like on it easily enough
20:23:03 <b_jonas> ais523: I mean as a standard library that's usually accessible or something, not as a "built-in"
20:23:27 <ais523> WebAssembly doesn't have standard libraries, you're supposed to compile your own language's standard library onto it
20:23:31 <b_jonas> so that you don't have to bundle a copy of the bigint multiplication routine with the code of every quickly growing sequence
20:23:57 <ais523> a typical WebAssembly program is shipped with a decent proportion of libc
20:23:58 <b_jonas> (though I presume you'd allow a single object file that implements multiple OEIS sequences)
20:24:17 <ais523> I guess object files might make more sense than executables, in that case
20:25:24 <esowiki> [[Husk]] https://esolangs.org/w/index.php?diff=65577&oldid=65575 * B jonas * (+465)
20:25:46 <b_jonas> it could be executables, that's not the difference I care about here
20:25:56 <b_jonas> just that there are bunches of OEIS sequences that are closely related
20:26:08 <b_jonas> so it would be redundant to copy the code to each one
20:26:32 -!- Lord_of_Life_ has joined.
20:27:39 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
20:29:27 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:36:44 -!- ais523 has quit (Ping timeout: 272 seconds).
21:08:56 -!- ais523 has joined.
21:10:27 <ais523> well, executables are self-contained, but object files don't have to be
21:11:58 <shachaf> I wrote a program to generate ELF executables but it seems to me object files might actually be trickier
21:12:26 <shachaf> Hmm, maybe just differently tricky.
21:13:02 <shachaf> The tricky thing is that you need a bunch of information in sections for the linker to interpret. But it can handle relocations and so on for you, I suppose.
21:13:46 <b_jonas> shachaf: do you also emit basic debug information like the code span of each function?
21:14:17 <b_jonas> I guess that is sort of redundant because gdb can guess the function from the function symbols, without the debug info
21:14:30 <shachaf> (Because the program just emits some fixed handwritten x86 code.)
21:14:57 <shachaf> I do emit function information, I think. But the only function is _start.
21:15:36 <HackEso> \ tmp/out.a: file format elf64-x86-64 \ \ \ Disassembly of section .text: \ \ 0000000000000178 <_start>: \ 178:48 31 ed xor %rbp,%rbp \ 17b:49 89 d2 mov %rdx,%r10 \ 17e:48 b8 66 69 6e 61 6c movabs $0xa796c6c616e6966,%rax \ 185:6c 79 0a \ 188:50 push %rax \ 189:b8 01 00 00 00 mov $0x1,%eax \ 18e:bf 01 00 00 00 mov $0x1,%edi \ 193:48 89 e6 mov
21:16:00 <ais523> what sort of calling convention is that? :-D
21:16:10 <ais523> I'm used to seeing functions starting out by messing around with sp and bp
21:16:13 <ais523> but zeroing bp is weird
21:16:20 <ais523> I'm guessing it's just being used as a general-purpose register?
21:16:29 <shachaf> That's standard in the amd64 ABI.
21:16:39 <shachaf> To mark the outermost stack frame.
21:17:05 <ais523> couldn't the outermost stack frame actually need it as a base pointer, though?
21:17:56 <shachaf> I think _start normally calls another entry point almost immediately.
21:17:57 <ais523> oh, that string says "finally"
21:18:17 <ais523> I initially misread it as "fitally", I'm not as good at converting hex to ascii in my head as I'd like
21:18:58 <ais523> hmm… do you have an opinion on caller-saved versus callee-saved registers?
21:19:17 <b_jonas> `perl -eprint pack"q",0xa796c6c616e6966 # let's ask a computer to do that, just to check
21:19:41 <shachaf> I don't have a strong opinion, at least. Maybe I had one in the past.
21:20:27 <shachaf> I think someone who knows more about register renaming and things than I do should give me an opinion.
21:27:45 -!- asdfbot has joined.
21:29:15 <shachaf> I think it's reasonable for _start to be special in this way because it's not actually a function.
21:29:41 <moony> =rasm xor rax, rax
21:29:49 <moony> =rasm2 xor rax, rax
21:30:54 <moony> =rasm2 -s att xor %rax, %rax
21:31:06 <moony> =rasm2 -satt xor %rax, %rax
21:31:24 <shachaf> Which order should I write the operands in in my assembler?
21:31:34 <moony> radare2 on hackeso when
21:31:42 <b_jonas> shachaf: use NASM syntax, it's better than either intel or att
21:32:00 <moony> it's intel-like yes
21:32:03 <b_jonas> that is if this is an assembler for x86
21:32:58 <shachaf> Presumably I want to target a bunch of platforms
21:33:34 <moony> shachaf: https://github.com/asmotor/asmotor contribute to this instead then
21:34:31 -!- LBPHacker has joined.
21:34:38 -!- BWBellairs has joined.
21:34:43 <moony> `welcome LBPHacker
21:34:44 <b_jonas> you should probably use xor %eax,%eax though, because it encodes shorter
21:34:44 <HackEso> LBPHacker: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <https://esolangs.org/>. (For the other kind of esoterica, try #esoteric on EFnet or DALnet.)
21:34:45 <LBPHacker> blame moony for everything I do here :P
21:35:44 <shachaf> Why contribute to that instead?
21:35:55 <moony> good, multi-CPU assembler.
21:36:09 <moony> more assemblers is just more competing standards right now
21:36:29 <b_jonas> see http://yasm.tortall.net/ for x86
21:37:03 <b_jonas> or invent your own syntax that looks similar to the others but is incompatible in subtle ways that are hard to debug
21:37:22 -!- sleepnap has joined.
21:37:24 <shachaf> I primarily wanted a library rather than something with a parser anyway
21:37:48 <moony> capstone not work?
21:38:19 <moony> oh, right, capstone's a disassembler
21:38:38 <moony> http://www.keystone-engine.org/
21:39:04 <moony> that's it's assembler counterpart
21:39:19 <b_jonas> for disassembling, you can try Agner's disassembler
21:39:39 <moony> or http://www.capstone-engine.org/ as i mentioned
21:41:27 <shachaf> There's only one application I previously wanted a general disassembler library for, and it was kind of ridiculous.
21:42:12 <b_jonas> did it involve malware research or kernel debugging?
21:42:44 <shachaf> No, the goal was to make a variant of strace that traces I/O to memory mapped files precisely.
21:43:36 <shachaf> In order to trace exactly which bytes were read from or written to, you need to disassemble the instruction.
21:44:41 <shachaf> I think there are some debuggers that have this feature.
21:44:41 <b_jonas> that, or mprotect all of the mapped pages to 0 permissions after every access, and catch the segfault and see what the siginfo says
21:45:17 <shachaf> That's the approach I'm proposing.
21:45:17 <b_jonas> wait, can't intel's built-in debug faults already tell what's read and written, and doesn't the kernel expose that in siginfo?
21:45:34 <shachaf> Certainly not stepping through every instruction, that seems way too slow.
21:45:50 <shachaf> But when you get the SEGV you need to figure out exactly which octets were read or written.
21:45:52 * ais523 has been reading the x86_64 ABI
21:46:02 <ais523> it gives advice on how to implement exabyte-size functions
21:46:10 <ais523> I wonder what circumstances would require you to write one of those
21:46:24 <moony> I can not imagine a sane one
21:47:02 <moony> why do me and ais523 have the same name color in weechat
21:47:22 <moony> we're alphabetical miles apart
21:47:35 <b_jonas> I don't know how all that x86 stuff works
21:47:48 <moony> b_jonas: it works via a generator that runs on hot garbage
21:48:06 <b_jonas> ais523: a compiler may have to, when it's forced to compile firefox
21:48:33 <moony> maybe you unroll a massive loop?
21:49:12 <moony> LBPHacker: help i need ideas for why one would use a exabyte sized functions
21:49:38 <ais523> I still have trouble imagining exabytes of data, although there are probably some companies who store that much nowadays
21:49:41 <b_jonas> though I think they don't have functions larger than gigabyte sized
21:49:42 <ais523> but exabytes of /code/?
21:50:06 <ais523> I guess when you're writing an ABI you need to take all eventualities into account
21:50:48 <b_jonas> ais523: right, so that twenty years later, when the required hardware is available, different groups of people don't start inventing incompatible exensions
21:50:59 <shachaf> ais523: I doubt there's any company that stores an exabyte of data on one machine.
21:51:29 <ais523> my guess is that nobody does but I'm not sure
21:51:30 <moony> I wonder what happens if you give GCC infinite (to the max x86-64 allows) RAM and have it compile a exabyte sized function
21:51:43 <moony> ais523: the most we can store per machine right now is about 1PB i think
21:52:10 <moony> so 1024 machines per exabyte
21:52:18 <ais523> there are definitely use cases in which you want as much in-memory storage as possible in one machine and don't care if it's lost to a crash
21:52:39 <b_jonas> moony: even a petabyte is a lot, yeah
21:53:02 <b_jonas> you'd need 32 hard disks, each one 32 terabytes size, or something
21:53:12 <LBPHacker> moony: I'm missing a lot of context here but iirc x86-64 supports an address space of 2**52
21:53:12 <moony> ais523: the most RAM per machine right now is 8TB, assuming a AMD EPYC based server.
21:53:19 <b_jonas> ais523: such as video games, sure
21:53:28 <ais523> moony: so not even in the petabyte range
21:53:33 <b_jonas> or trying to break cryptography stuff by building huge tables
21:53:42 <moony> and this is asof just a few days ago btw
21:53:44 <LBPHacker> or are we talking possibly out of memory
21:53:56 <moony> before the latest EPYC units were released, it was a max of 4TB per machine
21:54:15 <moony> LBPHacker: possibly out of memory i bet
21:54:20 <moony> memory paging/swapping/whatever
21:54:32 <b_jonas> LBPHacker: I disagree, https://esolangs.org/logs/2019-08-05.html#luc
21:54:59 <b_jonas> LBPHacker: it's the 5-level one that would support 52 bits I think
21:55:12 <b_jonas> the current cpus support only up to 48 bits
21:55:39 <LBPHacker> well I mean I remember 9+9+9+9+12, which is the 4-level
21:55:41 <b_jonas> moony: what's the most fast solid state storage you can have in a machine?
21:55:50 <LBPHacker> how many address pins your cpu has is another matter :P
21:55:58 <moony> I dunno, i know some servers with 48+ NVME slots
21:56:11 <ais523> even if your CPU is short on address pins you could always use… bank switching!
21:56:12 <LBPHacker> see this is why I don't do addition
21:56:36 <ais523> although it tends not to play very nicely with the concept of an operating system
21:56:48 <moony> b_jonas: with a modern EPYC system, I think it'd max out at 128 NVMe devices, assuming you somehow utilized all 128 PCIe lanes from both CPUs
21:57:18 <b_jonas> LBPHacker: I gave up on arithmetic years ago, when I debugged a segfault for hours, then found that I allocated 8092 bytes instead of 8192
21:57:20 <moony> (Yes, EPYC servers are currently the most capable. Perfect.)
21:57:34 <b_jonas> these days I'd let the computer figure out the size from a multiplication or shift
21:57:41 <LBPHacker> lol. yes, that is why I don't do decimal either
21:58:07 <b_jonas> moony: and how large can those NBMe devices be?
21:58:07 <moony> how many SATA devices can you have per PCIe lane
21:58:34 <b_jonas> shachaf: yes, that too, though sometimes I mess that up too
21:58:59 <b_jonas> moony: also how many ways is the largest possible NUMA in a machine?
22:00:44 <ais523> haha, the PLT uses one format for the first 102261125 entries and changes to a different format from the 102261126th onwards
22:00:54 <b_jonas> computer hardware is getting ridiculously powerful. good thing I have my programmable calculator, with 2 kilobytes of RAM, battery-backed to make it persistent, in the shelf
22:00:55 <moony> I think EPYC zen 2 server processors are one NUMA P each\
22:01:07 <ais523> I wonder how many programs a) care about the PLT format at all and b) are unaware of that detail
22:01:21 <moony> b_jonas: 128 cores per server \o/
22:02:11 <moony> 128 cores, with slots for 4 accelerator cards
22:02:28 <ais523> (the reason is that there's some shared code between the entries that they normally reach via a jump, but you can't write the jump instruction when you're too far from the start of the PLT)
22:02:50 <b_jonas> moony: nice. have you ever written a program for those that spawns 128 parallel processes to speed up something, but some library you call in them tries to be automatically smart and spawns 128 parallel threads in each of them?
22:03:21 <shachaf> If I generate an amd64 program, should I just not use a PLT?
22:03:30 <b_jonas> that's happened to me on 12 cores only, I haven't seen a 128 core machine
22:03:42 <moony> b_jonas: 128 core machines are on the market as of a few days ago
22:03:46 <ais523> shachaf: I'm sceptical about the value of the PLT and GOT
22:03:46 <moony> they're 2-way as well
22:03:52 <shachaf> Also, should I take Microsoft's approach and say "x64" instead of "x86-64" or "amd64"? It's shorter.
22:04:08 <shachaf> ais523: Hmm, what's the alternative to the GOT in ELF files?
22:04:13 <ais523> x64 probably refers to an unrelated CPU
22:04:18 <moony> b_jonas: they're also impressively cheap, 7k for the highest end 64-core CPU from AMD
22:04:26 <moony> and it absolutely kills in terms of performance
22:04:51 <moony> somethingsomething50kfor56coresfromintel
22:04:55 <ais523> shachaf: well, the GOT basically lets you find addresses that aren't compile-time constants, but doing arithmetic on %rip can also do that if you know that the entire program has moved the same amount
22:05:04 <b_jonas> I'd like a powerful computer, but not that powerful
22:05:11 <ais523> so it'd only be useful when connecting between two parts of the program that are ASLRed by different amounts
22:05:30 <moony> b_jonas: AMD has 16-core processors for desktop for about $800 i think, coming to market real soon
22:05:46 <shachaf> ais523: Right, but isn't every library loaded at a random address?
22:06:39 <ais523> shachaf: yes, but there isn't a whole lot of actual communication done between libraries through, e.g., shared global constants
22:07:26 <shachaf> But what about calls to library functions?
22:07:31 <ais523> so I'm not sure that I see any particular difference between absolute and position-independent code; you need the dynamic linker to update function calls in one library to point to the other anyway
22:07:58 <ais523> the purpose of the PLT is pretty much just so that you can avoid editing the .text segment, which forces you to use a private rather than shared map
22:08:09 <shachaf> Right, so the PLT seems kind of pointless.
22:08:24 <shachaf> But isn't the GOT the alternative that doesn't edit .text?
22:08:39 <ais523> the GOT and PLT are very similar
22:09:09 <ais523> the difference is that GOT is general-purpose and the PLT is just wrappers for function calls
22:09:23 <ais523> (this lets you give a location in the PLT when you need to give someone a function pointer for a callback)
22:09:45 <moony> LBPHacker: exascale R316 when
22:09:56 <ais523> that said, position-independent code doesn't move while it's running, so if you need to give someone a function pointer, you could probably just lea it yourself and pass them the resulting absolute address
22:10:01 <b_jonas> why do we have to have these interesting conversations during the night when I have to get up early the next day? the sleep cycle of this channel is messe dup
22:10:14 <shachaf> Maybe I'm saying GOT when I mean something else.
22:10:15 <moony> it's just the afternoon here
22:10:28 <moony> GOT sounds an awful lot like GDT
22:10:39 <shachaf> What's the way you're proposing to call a dynamically linked function?
22:10:42 <moony> I know GDT, but not GOT..
22:12:11 <shachaf> I think you should have something like "movq some_offset(%rip), %rax; callq %rax", where that offset is an offset into a segment the dynamic linker populates with the correct address at load time.
22:12:47 <shachaf> Or maybe that's not what I think?
22:14:29 <ais523> shachaf: my suggestion is callq 0(%rip) in the executable, the dynamic linker edits the 0 to the actual distance when the executable is loaded
22:14:54 <ais523> that works well for executable → library calls as long as they're both in the first 31 bits (they typically will be)
22:15:08 <shachaf> But that requires editing .text such that it can't be shared, right?
22:15:12 <ais523> it doesn't work as well for library → library calls, though, because you'd ideally want to be able to store the libraries in a shared mapping
22:15:22 <ais523> right, that prevents a shared .text
22:15:23 <shachaf> Maybe you're saying that's irrelevant.
22:15:32 <ais523> I consider it insufficiently relevant
22:15:48 <shachaf> One thing I like being able to do is load a new copy of a .so at runtime repeatedly.
22:16:04 <shachaf> I guess that's still possible with that approach.
22:16:17 <shachaf> But it might require a page to be W|X.
22:16:21 <ais523> but if it's a problem, the next step would be to have a separate section that groups together jumps to functions, do calls by calling that section, and have the dynamic linker edit the jump targets
22:16:43 <shachaf> I was going to say that sounds like the PLT, but I guess the PLT has an extra level of indirection.
22:17:07 <ais523> I don't understand why it has that extra level
22:17:23 <shachaf> I think it's to allow lazy loading.
22:17:45 <shachaf> I think lazy loading is probably a bad idea, though.
22:18:23 -!- AnotherTest has quit (Ping timeout: 245 seconds).
22:18:23 <ais523> the remaning hard case is when one library (or the executable) refers to a global variable in another library (or the executable)
22:18:35 <ais523> my preferred solution to this would be simply to ban it :-D
22:18:47 <shachaf> Hmm, I use this in the aforementioned use case.
22:19:27 <shachaf> Specifically my program is made of two parts, a loader binary and an application .so.
22:19:29 <ais523> in cases like this, getter/setter methods would normally be a better API
22:19:58 <shachaf> The .so refers to some global variables defined in the loader to share state across reloads.
22:20:08 <shachaf> I suppose the loader could just pass it a pointer.
22:21:04 <ais523> ooh, I think I know why the PLT might be useful: it's to avoid invalidating function pointers into a library after it's reloaded
22:21:34 <shachaf> I think those are invalidated anyway.
22:21:47 <ais523> I guess they have to be
22:21:48 <shachaf> Well, I'm loading the library with dlopen.
22:22:05 <shachaf> (In the loader->library direction.)
22:27:15 -!- arseniiv has quit (Ping timeout: 248 seconds).
22:27:25 <ais523> anyway, my current hobby is being annoyed at compiler optimisers
22:27:37 <shachaf> One annoying thing about structuring the program this way is that the .so can't use any global variables (that survive across reloads).
22:27:54 <shachaf> Most of the global variables I'm importing from the loader really belong in the library anyway.
22:28:21 <ais523> unsigned short f(unsigned long long *p) { unsigned long long rp = *p; if ((rp & 0xFF00000000000000LLU) != 0x8000000000000000LLU) return 0; return (unsigned short)((rp ^ 0x8000000000000000LLU) >> 48); }
22:28:33 <ais523> ^ that is the test function that I've been working on optimising
22:28:53 <shachaf> I feel like, if you want to make your programs fast, optimizing compilers are rarely the right place to look.
22:29:22 <ais523> this compiles to 45 bytes with gcc -Os, 34 bytes with clang -Os
22:29:48 <ais523> I got it down to 13 bytes of hand-written asm
22:30:04 <shachaf> Oh man. That's a lot of bytes.
22:30:07 <ais523> the reason I'm annoyed is that I want to be able to write clear code and rely on compiler optimisations
22:30:52 <ais523> I had a go at trying to generate good asm via repeatedly hand-optimising the C file
22:31:18 <ais523> that got it down to 24 bytes on clang and 17 on gcc, but at the cost of requiring -fno-strict-aliasing
22:32:01 <b_jonas> "<ais523> haha, the PLT uses one format for the first 102261125 entries and changes to a different format from the 102261126th onwards" => I wonder if I should addquote that
22:32:48 <ais523> helps on clang, at least
22:33:05 <ais523> you can hit an LLVM optimiser idiom and get back to strictly conforming C, which is nice
22:33:06 <b_jonas> getter/setter methods? why not a function that returns the address of the variable instead?
22:33:31 <ais523> I guess that works in most cases
22:33:44 <ais523> I like getter/setter because it abstracts away the way in which the variable is stored internally
22:34:09 <ais523> but many of the cases you'd need that, e.g. if you need to move the variable to thread-local-storage, still let you take references to it
22:34:20 <ais523> `` printf "%x" 102261125
22:34:59 <b_jonas> ais523: isn't the extra indirection so that you can take a function pointer to a function in another library, and equality-compare it in C to the same function pointer taken from a third library, and make them return equal?
22:35:06 <b_jonas> the extra indirection in the PLT that is
22:35:27 <shachaf> How does the PLT let you do that?
22:35:41 <b_jonas> ais523: you have made sure that you aren't using a too old compiler or an MS compiler, right?
22:36:06 <ais523> shachaf: ^ this is a really good example of my belief that immutable things should be treated as indistinguishable from values, with any references managed behind the scenes
22:36:52 <ais523> reference-== on immutable things is not a useful operation (except possibly as an optimisation hint) and if you accidentally expose it in your language semantics, a lot of contortions are needed to avoid breaking programs that rely on it
22:37:02 <b_jonas> ais523: for a thread-local variable, you call the function again each time you're not sure you're in the same thread. that's how errno works.
22:37:18 <ais523> in retrospect, errno was a mistake
22:37:23 <ais523> but it took a while for that to become apparent
22:37:32 <moony> errno is a big mistake
22:37:39 <b_jonas> ``` gcc -E - <<<$'#include<errno.h>\nerrno' | tail
22:37:40 <HackEso> # 25 "/usr/include/x86_64-linux-gnu/bits/errno.h" 2 3 4 \ # 50 "/usr/include/x86_64-linux-gnu/bits/errno.h" 3 4 \ \ # 50 "/usr/include/x86_64-linux-gnu/bits/errno.h" 3 4 \ extern int *__errno_location (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); \ # 36 "/usr/include/errno.h" 2 3 4 \ # 58 "/usr/include/errno.h" 3 4 \ \ # 2 "<stdin>" 2 \ (*__errno_location ())
22:38:00 <ais523> that "leaf" in the header file is curious
22:38:04 <b_jonas> moony: yes, and C99 at least partly gets rid of it by allowing such fast functions as sqrt to not necessarily set it
22:38:12 <ais523> when would a function need to know that it's /calling/ a leaf functiion
22:38:47 <ais523> hmm, apparently it means "this function will never call a callback function, nor longjmp"
22:39:09 <ais523> which does seem potentially useful as an optimisation hint
22:42:20 <shachaf> So when foo is a dynamiclly linked function and it's used as a function pointer, what does that pointer point to?
22:43:15 <b_jonas> shachaf: I don't know. it might not even work the way I explained, maybe it points to different places depending on which library you're naming the function pointer. I never tested it.
22:43:16 <shachaf> Apparently it's not the PLT entry.
22:44:17 <shachaf> I made a test program but now I gotta figure out what it's actually doing.
22:45:08 <shachaf> A PLT entry isn't even generated when you get a function pointer. Only when you call the function directly.
22:45:30 <shachaf> Which is pretty bizarre because "calling the function directly" nominally happens through a function pointer, in C.
22:46:34 <b_jonas> shachaf: does it really? I thought the function (reference) just decays to a function pointer when used as such, just like how an array decays to a pointer
22:46:47 <b_jonas> and when you call it, that doesn't happen
22:47:21 <shachaf> That's what the C standard says.
22:47:44 <b_jonas> not that that's an observable reference, and in any case, this is something that can and will be optimized
22:47:49 <shachaf> When I get back to the computer I'll test it more directly.
22:48:59 <b_jonas> but still, I think compilers will likely optimize it, because direct function calls are pretty common
22:49:10 <shachaf> Hmm, maybe it is observable, for the reason you said (making function pointers equal across libraries).
22:49:39 <shachaf> Since each library has its own PLT.
22:50:37 <b_jonas> shachaf: does C even guarantee the thing about making function pointers equal?
22:52:12 <b_jonas> I'm not sure you are even allowed to compare two function pointers without invoking undefined behavior unless one of them is a null pointer
22:52:57 <b_jonas> for equal comparisons, you don't get UB
22:53:21 <b_jonas> but I don't know if two function pointers to the same pointer are guaranteed to be equal, even within a compilation unit
22:53:25 <ais523> you can compare for equality, but not for < and >
22:53:44 <b_jonas> ais523: right, but what result do you get?
22:54:02 <b_jonas> does f == f have to return true if f is a function?
22:54:03 <ais523> who knows, this is C we're talking about :-D
22:54:19 <shachaf> Yes, with optimizations it turns into a PLT call in gcc.
22:55:03 <b_jonas> I think you can do equal comparisons on function pointers only because some apis treat null pointers in a special way
22:55:27 -!- b_jonas has quit (Quit: leaving).
22:56:05 <shachaf> Yes, the function pointer comes from the GOT.
23:00:57 <shachaf> Ugh, dynamic linking is so complicated.
23:02:08 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
23:09:40 <shachaf> I'm kind of annoyed that when you lookify up something about dynamic linking or ELF files or whatever most of the search results are about random programs that print error messages involving those things rather than anything about how those things actually work.
23:17:10 <shachaf> At least writing an emitter is probably way better than writing a loader (which needs to handle all the old things no one uses anymore).
23:17:15 -!- xkapastel has quit (Quit: Connection closed for inactivity).
23:19:13 <shachaf> I'm confused by the last paragraph in https://www.airs.com/blog/archives/549
23:19:21 <shachaf> "It is possible to design a statically linked PIE, in which the program relocates itself at startup time."
23:19:31 <shachaf> Why does the program need to relocate itself? Doesn't the kernel do that?
23:35:18 -!- sleepnap has quit (Quit: Leaving.).
23:36:56 <pikhq> I'd have to look to check, but I think this is "relocation" in the sense of "processing ELF symbol relocations", not in the sense of "mapping into memory"
23:37:34 <pikhq> Because a static PIE binary is more-or-less a shared object that happens to have an entry point and no external dependencies.
23:37:58 <shachaf> Why would ELF symbol relocations be relevant for a statically linked executable?
23:39:34 <pikhq> The executable's GOT and PLT needs populated.
23:40:15 <shachaf> What, are you from Pittsburgh now?
23:40:29 <shachaf> I don't see why a statically linked executable would have a GOT or PLT.
23:41:06 <pikhq> Because you're implemented a static PIE binary by emitting, essentially, a shared object. That happens to have an entry point.
23:41:43 <shachaf> Yes, but that's just a technicality due to the kernel only randomizing ET_DYN files.
23:41:58 <shachaf> There's no need to emit a DYNAMIC segment.
23:43:58 <pikhq> Trying to remember exactly how musl does static PIE binary support...
23:45:00 <ais523> <rustc LLVM> movzwl -0x2(%rdi,%rax,1),%ecx \ mov %ecx,%edx \ xor $0x8060,%edx \ movzwl %dx,%edx
23:45:12 <ais523> that last movzwl is just some really obvious dead code
23:45:37 <ais523> the top 16 bits of %edx didn't stop being 0 just because you XORed the bottom 16
23:47:18 <ais523> I need to stop taking it personally when compilers generate ridiculous code, but still, that one really hurts
23:48:17 <ais523> meanwhile, clang optimised (x ^ 0x807F) >= 0x00A0 into (x ^ 0x8060) >= 0x00A0 which doesn't really change anything but is amusing
23:49:29 <pikhq> Looks like musl's implementation is that it links in the dynamic linker to static PIE binaries.
23:50:18 <pikhq> Or, rather, a portion of it.
23:50:56 <pikhq> https://git.musl-libc.org/cgit/musl/tree/ldso/dlstart.c It's this portion.
23:51:24 <pikhq> Just the startup code for the dynamic linker, not the full thing.
23:52:25 <pikhq> Oh, it's doing very very little.
23:52:34 <pikhq> Not even really processing relocations.
23:55:02 <ais523> later on there's also the beautiful "xor %r8d,%r8d \ movzbl %r8b,%eax" (with, AFAICT %r8 dying immediately afterwards)
23:59:39 -!- tromp_ has quit (Remote host closed the connection).
00:23:13 -!- FreeFull has quit.
00:26:56 -!- sleepnap has joined.
00:28:52 -!- tromp has joined.
00:28:58 -!- sleepnap1 has joined.
00:31:14 -!- sleepnap has quit (Ping timeout: 244 seconds).
00:33:15 -!- tromp has quit (Ping timeout: 252 seconds).
00:52:25 -!- ais523 has quit (Quit: quit).
01:01:38 -!- sleepnap1 has quit (Quit: Leaving.).
02:37:32 -!- heroux has quit (Ping timeout: 245 seconds).
02:37:44 -!- heroux has joined.
03:50:08 -!- Sgeo__ has joined.
03:52:58 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
05:33:23 -!- tromp has joined.
05:33:39 -!- uplime has quit (Quit: ZNC 1.7.3 - https://znc.in).
05:34:08 -!- uplime has joined.
05:37:57 -!- tromp has quit (Ping timeout: 252 seconds).
06:45:19 -!- tromp has joined.
07:01:01 <rain1> $ a=b b=a; echo $((a))
07:01:03 <rain1> bash: b: expression recursion level exceeded (error token is "b")
07:38:51 -!- xkapastel has joined.
07:58:56 -!- AnotherTest has joined.
08:12:32 -!- Phantom_Hoover has joined.
08:27:58 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
08:28:55 -!- Lord_of_Life has joined.
08:37:04 -!- Phantom_Hoover has quit (Quit: Leaving).
09:13:46 -!- onon has left ("†").
09:44:24 <Taneb> I've just realised that the idea I had for writing a text editor is, rougly speaking, Smalltalk
09:52:17 -!- cpressey has joined.
09:56:31 <cpressey> Good morning. I've been reading the R7RS. It's been making me laugh.
09:58:32 <cpressey> I don't mean to say that it is laughable; overall, I like Scheme.
09:58:40 <rain1> what funny abut it
09:59:02 <rain1> think R7RS could be better but course corrected well
09:59:59 <cpressey> Mainly, it's amusing when they leave so much wiggle room.
10:00:14 <cpressey> For example, a Scheme implementation is allowed to use symbols outside Unicode if it wants.
10:01:33 <rain1> they don't even specify stuff about filesystem paths for importing files
10:01:53 <rain1> in case someone wants an SQL database backed complaint r7rs implementation
10:01:59 <rain1> the result is you cannot portably do a multiple file project
10:04:56 <rain1> https://rain-1.github.io/scheme-srfi-1.html
10:06:47 <cpressey> rain1: Is it ironic that *none* of those look like https://srfi.schemers.org/srfi-55/srfi-55.html ?
10:07:24 <rain1> wow i didnt even realize that
10:07:43 <cpressey> (require-extension (srfi 1)) might work in one or more of those
10:07:43 <rain1> but yeah this is the mess we're in
10:07:51 <rain1> and everybody is wondering why nobody uses scheme
10:12:17 <cpressey> I still prefer it over Common Lisp and Clojure (but I'm probably not typical). I'd like it even more if mutability was forbidden. I thought there was a SRFI for this, but I went looking for it again and I couldn't find it.
10:12:47 <rain1> I would remove the call/cc and similar operators
10:12:53 <rain1> I think it's become clear that they aren't useful
10:16:00 <cpressey> Scheme (and Haskell) have a lot of features in them that are mainly to support PL research and education... I'd put call/cc in that bucket.
10:16:31 <cpressey> For learning about continuations, it's cool. Will I ever actually *use* it...? Probably not.
10:48:39 <int-e> continuations are easy
10:48:45 <int-e> delimited continuations are weird
10:49:06 <Taneb> All programming constructions are weird
10:49:08 <int-e> (bla bla shift bla bla reset bla bla)
10:49:51 <int-e> Taneb: that was an opinion, of course
10:50:05 <int-e> Or maybe a statement that I grokked the former but not the latter.
10:50:42 <Taneb> Whereas what I said was a contrarian but defensible statement made partially in jest
10:57:33 <shachaf> All continuations are delimited, though.
10:57:47 -!- xkapastel has quit (Quit: Connection closed for inactivity).
10:57:58 <cpressey> Therefore continuations are easy and weird
10:59:01 <cpressey> I have the start of a CPS concatenative language but I had to use a nonstandard definition of function composition to get it
10:59:50 -!- arseniiv has joined.
11:00:05 <shachaf> I'm mystified by this, actually:
11:00:30 <shachaf> * I feel like I understand undelimited continuations
11:00:41 <shachaf> * I feel like I don't understand delimited continuations
11:00:49 <shachaf> * All continuations are delimited
11:01:24 <shachaf> Actually, see "A theory of regulation." in https://www.bloomberg.com/opinion/articles/2017-01-24/metrics-fees-and-regulations
11:01:55 <cpressey> Thing I didn't expect after your list of bullet points about continuations: a link to Bloomberg.com
11:02:26 <shachaf> I only realized that I was quoting that article after I finished writing the bullet points.
11:03:15 <int-e> shachaf: I'm confused by the shift/reset syntax, and how it translates to the common functional (a -> r) -> r idea.
11:04:08 <int-e> Maybe I just haven't read the right paper(s) yet.
11:04:51 <shachaf> Haskell Cont continuations are delimited by runCont.
11:05:36 <int-e> As I said, I'm mainly confused by shift & reset.
11:06:08 <cpressey> I suspect "delimited" refers to something that's not actually the continuation per se -- but I don't really know.
11:06:37 <int-e> Well, whole program continuations are silly.
11:07:28 <shachaf> Oh, my pseudo-continuation thing has a delimiter, normally written {}.
11:07:34 <int-e> To carve out a context from a program you need a point where the context starts, and a hole, "delimiting" it from two sides.
11:08:26 <shachaf> When you write { ...foo`...; ... }, foo gets "{\x; ...x...; ... }" as an argument.
11:08:48 <shachaf> Rather than the entire rest of the program.
11:11:27 <shachaf> In the classic Scheme shift-reset thing, shift is a binder, right?
11:11:31 <arseniiv> int-e: shift/reset confuses me too. This or previous year I have seen something more natural but I don’t remember if it was purely about delimited continuations or something other
11:12:58 <arseniiv> hm how algebraic effects relate to continuations? At least syntactic ideas about the former are more understandable for me
11:14:20 <arseniiv> that handling case-like construct and data-like definition of an effect
11:14:25 <shachaf> Oh, I think I understand shift/reset now.
11:15:05 -!- atslash has joined.
11:15:19 <arseniiv> IMO shift takes on itself too much, and that effect syntax takes from it some control to the “reset” side
11:16:08 <arseniiv> and then suddenly it starts to resemble control constructs from imperative languages, e. g. try/catch
11:17:53 <arseniiv> oh also I had read something that made me think I understood shift/reset, but now I remember it only vaguely
11:21:20 <shachaf> int-e: OK, I now understand shift-reset and can work the examples.
11:22:38 <shachaf> I'm not sure why shift is called shift, and why it doesn't take a lambda.
11:32:09 <shachaf> The shift/reset in http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-e.pdf seem a bit more reasonable.
11:55:07 -!- adu has quit (Quit: adu).
12:03:47 <int-e> okay... next question... why?
12:04:03 <fungot> int-e: i hope something good came in the mail
12:04:33 <int-e> That's a better answer than I hoped for. But it's still not very satisfying.
12:05:38 <cpressey> So "delimited" means that instead of one thing called call/cc you have two things called shift and reset
12:06:21 <int-e> shachaf: there's a subtlety around the behavior of ; inside reset though...
12:06:47 <cpressey> Here's a stack. No, there's no stack now. Okay, now there's a stack again, but it's a different stack.
12:06:49 <int-e> shachaf: reset (foo; shift ...) doesn't capture the 'foo' part.
12:07:35 <int-e> shachaf: otherwise the tree walking wouldn't make sense (I think)
12:09:19 <int-e> cpressey: Yeah I guess that explains it operationally, more or less... shift = "capture the stack between here and the latest reset on the heap, and return a closure that, when invoked, puts it back on the stack".
12:13:45 <cpressey> int-e: if it explains anything operationally, it was by accident
12:14:15 <cpressey> it was more about... well, hard to say. I am prattling.
12:15:48 <int-e> Oh was I finding patterns in the noise... mistaking them for communication? I believe that's a common mistake for humans :)
12:15:56 <int-e> (So maybe I'm human? Who knew...)
12:19:43 <cpressey> I'll chalk it up to coincidence. I was perhaps trying to answer "why?"
12:20:23 <int-e> This is all so dysfuncational!
12:21:28 <cpressey> Do I really want continuations that have been made more useful by making them delimited continuations? Isn't the point kind of to make it *less* useful? To make it easier to analyze, etc.
12:21:47 <cpressey> If I wanted useful, I'd just not deal with continuations at all.
12:22:26 <int-e> I rather suspect that continuations were meant to be useful.
12:22:27 <cpressey> I guess there is some kind of control structure that delimited continuations can capture, that "regular" ones can't, but I haven't seen what it is
12:23:35 <cpressey> doesn't interest me enough to justify me hunting it down unfortunately
12:24:03 <int-e> I wonder about the history.
12:24:16 <int-e> This may have been an accident.
12:27:03 <cpressey> I dunno, I kind of stopped paying listening to academics after I heard Wadler compare monads to a solution to Descartes' mind-body problem.
12:27:06 <int-e> (Made-up history: 1. We want exception-like behavior, a bit like setjmp/longjmp, but memory-safe! Let's make something that captures the current state of the stack so we can resume at this point later. Let's name it call/cc. 2. call/cc is slow because it has to capture all of the current stack... let's add a mechanism to limit the amount of stack we safe! (reset / shift=call/cc up to last...
12:27:12 <int-e> ...reset). 3. Hmm, what can we use this new primitive for? 4. 100 papers. )
12:27:59 -!- PaniniTheDevelop has joined.
12:28:01 <cpressey> int-e: I believe continuations, the concept, started in denotational semantics.
12:28:20 <cpressey> So if it's "We want to write a function that describes exception-like behaviour" then yes
12:28:36 <int-e> cpressey: let's focus on steps 2-4 :)
12:30:25 <int-e> ("1. God gave us call/cc." - Let's pretend I wrote that instead ;) )
12:30:28 <cpressey> int-e: https://cs.indiana.edu/~dyb/pubs/monadicDC.pdf refers to a 1987 paper called "Beyond continuations" that
12:31:01 <int-e> `relcome PaniniTheDevelop
12:31:02 <HackEso> PaniniTheDevelop: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <https://esolangs.org/>. (For the other kind of esoterica, try #esoteric on EFnet or DALnet.)
12:31:18 <int-e> PaniniTheDevelop: ask on #freenode
12:32:14 <int-e> (oh. register where?)
12:33:13 <int-e> sorry, I somehow assumed the IRC server
12:34:02 <int-e> `bf 64+"!dlroW ,olleH">:#,_@
12:37:58 <int-e> `ibin/befunge 64+"!dlroW ,olleH">:#,_@
12:38:22 <int-e> Now what was the official way to do that...
12:38:56 <int-e> the `ibin/befunge was important
12:40:25 <int-e> `! befunge 9857727254>\#+:#*9-#\_$.@
12:41:22 <HackEso> `! emulates the ! command of our former bot EgoBot. You write `! then the name of the language then a program, and it runs the program you give and returns the result. We used to use it to test out esoprograms in-channel all the time, but the set of included esolangs is fairly old now and so it's rarely used.
12:41:53 <esowiki> [[Special:Log/newusers]] create * PaniniTheDeveloper * New user account
12:42:23 <int-e> One more hoop to jump through.
12:45:50 <int-e> It will ask you to introduce yourself at some point... I don't know whether it tells you immediately after creating the account or when you attempt to edit a page though. (Maybe both, but perhaps only the latter.)
12:47:15 <int-e> Anyway, we're all sorry for those hoops but we did suffer from a lot of spam in the past (including some that figured out how to solve the befunge captcha, either automatically or perhaps by employing humans that are rewarded simply for creating an account successfully.)
12:51:36 <cpressey> If the latter, it is probably the only instance ever of people being paid to code in Befunge.
12:52:06 <cpressey> Anyway I didn't realize there was a captcha at all
12:54:37 <int-e> cpressey: I imagine the reward to be more along the lines of being allowed to download a couple of pornographic videos.
12:55:26 <int-e> or maybe a "stress-test" of the network connection of "a friend".
13:01:44 <int-e> I should stress that I don't know. I'm extrapolating from https://krebsonsecurity.com/ mostly.
13:21:38 -!- PaniniTheDevelop has quit (Remote host closed the connection).
14:09:28 <esowiki> [[Emoji]] M https://esolangs.org/w/index.php?diff=65578&oldid=65554 * Dtuser1337 * (-35) removing unnecessary newlines.
14:09:54 <esowiki> [[Emoji]] https://esolangs.org/w/index.php?diff=65579&oldid=65578 * Dtuser1337 * (+35) Undo revision 65578 by [[Special:Contributions/Dtuser1337|Dtuser1337]] ([[User talk:Dtuser1337|talk]]) Oops
14:11:46 <esowiki> [[Emoji]] M https://esolangs.org/w/index.php?diff=65580&oldid=65579 * Dtuser1337 * (+1) trying out new thing.
14:17:22 <rain1> I think delimited continuations are easier
14:17:28 <rain1> for one thing you can algebraically axiomatize them
14:17:52 <rain1> (2004) Axioms for Delimited Continuations in the CPS Hierarchy - Yukiyoshi Kameyama
14:18:49 <rain1> if you wanted to define orthogonal language constructs in terms of continuations you need multiple-prompt continuations to separate them though
14:39:47 <arseniiv> <int-e> ("1. God gave us call/cc." - Let's pretend I wrote that instead ;) ) => no, God gave us the integers, he couldn’t have given us two different things at once, it would be cheating
14:40:30 <arseniiv> if you’re right, call/cc = integers
14:42:15 <arseniiv> but what about call/pred then? I know Kronecker probably meant only nonnegative/positive integers, but it’s more fun if we’d take them all
14:42:32 <arseniiv> oh one time I was bored and tried to make Peano-like axioms for Z
14:49:35 <int-e> arseniiv: I thought he gave use more tablets full of commandments but Moses was too lazy to carry them down the mountain?
14:50:17 <int-e> should've used paper
14:50:40 <Taneb> arseniiv: hmm, 0 is in Z, succ is a bijection from Z -> Z such that succ(x) != x
14:51:48 <Taneb> Induction's the tricky one, as always
14:51:55 * int-e tries to find context
14:52:08 <int-e> ah. "I was bored and tried to make Peano-like axioms"
14:52:47 <arseniiv> I added prev and tried to make sure pred succ = succ pred = id
14:52:59 <Taneb> If K is a set such that 0 is in K and for every integer n, n being in K implies that succ(n) and succ^-1(n) is in K, then K contains every integer
14:53:28 <Taneb> arseniiv: I was trying to be sneaky and rely on pred existing due to succ being bijective
14:53:28 <arseniiv> Taneb: yeah, I wrote it in that way, though using pred instead of succ^−1
14:53:32 <int-e> Z is the monoid given by the presentation <s,p | sp = ps = 1>
14:54:28 <int-e> arseniiv: we can translate that back into peano style, surely.
14:54:54 <int-e> It just won't be nearly as nice as Peano's axioms... unfortunately.
14:55:19 <arseniiv> though all said, I like the definition of N as a free monoid on one generator :)
14:55:42 <arseniiv> then we can add multiplication more or less naturally
14:56:12 <int-e> In reality I like Z as a quotient of N x N (with (a,b) = (c,d) whenever a + d = b + c)
14:56:52 <arseniiv> yeah it’s a nice construction and works for more things, I forgot what it’s named in general
14:57:37 <int-e> Just like Q is the quotient of (Z x (Z - {0})) w.r.t (a,b) = (c,d) <--> a*d = b*c)
14:58:15 <Taneb> a + 0 = a, a + succ(b) = succ(a + b), a + succ^-1(b) = succ^-1(a + b), exercize: show that this is consistent
14:58:51 <int-e> Taneb: what do you mean by succ^-1?
14:58:57 <rain1> is ^-1 just a constructor
14:59:18 <rain1> or maybe succ^-1 is a single constructor
14:59:24 <int-e> Taneb: I'd be happier if you used `pred` and axioms for the interaction of succ and pred
15:01:00 <Taneb> int-e: I define succ to be a bijection, and succ^-1 is the inverse function of succ, which you can call pred if you like
15:02:12 <int-e> so putting that equationally, you have pred(succ(x)) = x and succ(pred(x)) = x.
15:03:07 <rain1> http://minikanren.org/workshop/2019/minikanren19-final4.pdf I like this
15:04:07 <int-e> fortuntately, the rewrite rules +(x, 0) -> x, +(x, s(y)) -> s(+(x,y)), +(x, p(y)) -> p(+(x,y)), s(p(x)) -> x, p(s(x)) -> x are terminating and confluent, and there are distinct normal forms (e.g., 0 and s(0)), so the system is consistent. (Exercise: Figure out what having distinct normal forms has to do with "consistency")
15:05:34 <rain1> what theorem is that
15:05:52 <cpressey> I am probably missing something, but, how is this not group theory
15:05:56 <rain1> I guess its some fundamental result from term rewriting theory
15:07:26 <int-e> (Solution to exercise: Since we're specifying an algebraic structure by equations alone, there's always a model that consists of a single element. So the natural analogue of "consistency" is not "has a model", but "has a non-trivial model", which means a model with more than one element.)
15:07:55 <int-e> This /is/ related to standard consitency formulated in terms of booleans: we don't want to have false = true.
15:16:27 <int-e> cpressey: "how is this not group theory" -- term rewriting is closer to universal algebra (you can have an arbitrary number of functions of arbitrary arity, and you can talk about presentations of such structures (given by equations between terms that may contain variables, like that s(p(x)) = x above) and stuff like that. And then you can ask questions like whether two terms (0 and s(0)) are...
15:16:33 <int-e> ...the same. To that end, one can try to "complete" the system, by which checking whether t = u amounts to reducing t and u to a normal form with respect to a complete (terminating and confluent) system, and then comparing those normal forms syntactically.).
15:17:55 <int-e> https://en.wikipedia.org/wiki/Knuth%E2%80%93Bendix_completion_algorithm is not the best Wikipedia article ever... but it might serve as a starting point nonetheless. Note that the seminal paper is titled "Simple Word Problems in Universal Algebras", so the universal algebra angle was there from the very beginning.
15:19:26 <int-e> Sorry, I've worked in this field for 8 years. Some things stick :P
15:20:34 <cpressey> Is it not the case that "Peano-like axioms for Z" would be roughly the same as "Axioms for (infinite, ordered) groups"
15:21:24 <int-e> abelian would've been my first instinct
15:21:52 <cpressey> But s() induces an order, I'm sure
15:22:16 <int-e> until it runs into a cycle (and cycle avoidance is the main challenge here)
15:22:25 <cpressey> I sure hope it induces an order, or I've wandered into an episode of The Twilight Zone
15:22:51 <int-e> modulo 3 you have 0 < 1 < 2 < 0 < 1 < 2 < 0 < 1 ...
15:23:06 <int-e> That's not much of an order, if you ask me.
15:23:27 <int-e> Anyway, that's what derailed *my* train of thought.
15:23:51 <int-e> And at least it's still a quasi-order.
15:24:53 <int-e> and even a... https://en.wikipedia.org/wiki/Well-quasi-ordering
15:25:19 -!- xkapastel has joined.
15:25:27 <cpressey> I think I see what you're getting at
15:30:33 * cpressey tries to think of how to extend the Peano axioms to ensure that the set is infinite
15:31:32 <Taneb> I think the peano axioms do imply the set is infinite
15:32:09 <int-e> (the axiom schema, not the proof method)
15:32:35 <Taneb> Because succ is injective and there's no natural n such that succ(n) = 0
15:32:36 <rain1> couldn't you just assume you had a finite model then add one to the biggest number
15:34:08 <cpressey> I'm completely lost then. That's okay.
15:34:46 <cpressey> I'm not sure where the modulo 3 thing came from.
15:35:29 <rain1> well if you had a finite model
15:35:36 <rain1> take the biggest element
15:35:44 <rain1> the assumption is that S(biggest) is not in that set
15:36:03 <rain1> if it was in the set, then you have S(biggest) = something so theres a loop, kind of like modular arithmetic
15:36:09 <Taneb> rain1: I don't think that that's where cpressey is lost
15:40:14 <cpressey> I don't really know anything about model theory so I have no intuitions here, but if you have axioms for infinite ordered groups, I would expect that there is no finite model that would satisfy them
15:40:47 <cpressey> On the other hand I can see how you could have a finite model satisying axioms for abelian groups, that doesn't sound wrong to me
15:41:03 <cpressey> And that's where modulo 3 could come in, I can see that
15:41:36 <int-e> cpressey: oh well I'm having a totally different wtf moment about this: https://www.gq.com/story/war-against-sneaker-bots
15:45:44 <Taneb> int-e: it's amazing the things that happen in this world
15:48:55 <int-e> or, to quote Brian Krebs, 'For readers unfamiliar with this term, “shoe botting” or “sneaker bots” refers to the use of automated bot programs and services that aid in the rapid acquisition of limited-release, highly sought-after designer shoes that can then be resold at a profit on secondary markets.'
15:49:24 <int-e> Taneb: And disturbing.
15:57:40 -!- Sgeo_ has joined.
16:00:52 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
16:03:34 <cpressey> What they don't tell you is that the shoes are highly sought-after because, properly applied, they will eradicate 80% of the world's diseases
16:05:15 <int-e> . o O ( Instead of dozens of different causes, everybody will die from shoe poisoning from this point onward. )
16:06:37 -!- sebbu2 has joined.
16:08:04 <int-e> cpressey: I'm only half kidding. I have a genuine problem with applying percentages to causes of death when we're dealing with a 100% mortality rate in the long run.
16:09:12 -!- Vorpal has quit (Ping timeout: 245 seconds).
16:10:25 -!- sebbu has quit (Ping timeout: 268 seconds).
16:11:03 <Taneb> I remember seeing some headline that eating cheese reduces death rate from all causes
16:11:14 <Taneb> The obvious jokes were made
16:14:31 -!- Vorpal has joined.
16:14:31 -!- Vorpal has quit (Changing host).
16:14:31 -!- Vorpal has joined.
16:37:03 <cpressey> What they don't tell you is that the shoes are highly sought-after because they cause the wearer to become invisible and able to sneak up on dragons and slay them and take their treasure.
16:37:21 <cpressey> And the reason they don't tell you these things, is because they're not true.
16:41:58 -!- sebbu has joined.
16:45:43 -!- sebbu2 has quit (Ping timeout: 246 seconds).
16:46:07 -!- sebbu2 has joined.
16:48:48 -!- sebbu has quit (Ping timeout: 245 seconds).
16:48:53 -!- sebbu2 has changed nick to sebbu.
17:00:04 <cpressey> Hmm. Four languages called "Robin" on Github, and only one of them's mine.
17:00:12 -!- cpressey has quit (Quit: A la prochaine.).
17:21:24 -!- Phantom_Hoover has joined.
17:31:55 -!- b_jonas has joined.
17:35:05 -!- xkapastel has quit (Quit: Connection closed for inactivity).
17:35:37 <b_jonas> fungot, has SGDQ started yet?
17:35:38 <fungot> b_jonas: is it 1974? what's for supper? can i program as if it was much thanks to oerjan)). how do you duplicate the list d e k f g c h i j w p r
17:36:09 <HackEso> olist 1176: shachaf oerjan Sgeo FireFly boily nortti b_jonas
17:38:01 <b_jonas> "<shachaf> Why would ELF symbol relocations be relevant for a statically linked executable?" => the program will refer to symbols in vdso
17:54:27 <b_jonas> "<cpressey> Here's a stack. No, there's no stack now. Okay, now there's a stack again, but it's a different stack." => right, a cactus stack, because if you capture a continuation and leak it, it keeps a reference to the stack frame (and all stack frames below) even though you've exited those already
17:54:50 <moony> all hail the cactus stack
17:55:19 <moony> pointy and prickly and stabs whoever dares touch it
17:58:28 <rain1> fungot, has SGDQ started yet?
17:58:28 <fungot> rain1: i got it set up a return address) to each function, correct?)
18:04:45 <b_jonas> int-e: that may be the history, but it also happens to allow cooperative context switching between execution threads, which is sort of nice to show how powerful that primitive is
18:05:58 <b_jonas> alternately maybe it started because someone wrote a lisp an interpreter that stored the stack frames individually allocated in a linked list on the heap, and then noticed that now his interpreter is so inefficient that they can implement call/cc without making it too much worse
18:07:00 <b_jonas> `! befunge 64+"!dlroW ,olleH">:#,_@
18:07:10 <HackEso> `! emulates the ! command of our former bot EgoBot. You write `! then the name of the language then a program, and it runs the program you give and returns the result. We used to use it to test out esoprograms in-channel all the time, but the set of included esolangs is fairly old now and so it's rarely used.
18:08:34 <fungot> rain1: well i guess i could
18:08:51 <fungot> moony: so i've always tied another on top of scheme, i don't know how
18:13:17 <b_jonas> "<int-e> ... I have a genuine problem with applying percentages to causes of death when we're dealing with a 100% mortality rate in the long run." => the mortality rates are usually given in deaths per year though, so they don't add up to 100%, they add up to about 1/70 year^-1
18:24:26 <b_jonas> fungot: is the weather warm at wherever you are too? I guess you're in a server room with nice heat conditioning.
18:24:28 <fungot> b_jonas: ( map ' ( 1 2 4 8 16... 2n, the difference between what?! what good is a kaiser roll without a little
18:25:15 <b_jonas> today's the last hot day though
18:25:26 -!- Sgeo_ has quit (Ping timeout: 258 seconds).
18:26:33 <b_jonas> it will be less hot during the week
18:30:08 -!- moony has changed nick to nogoawayiciloo.
18:30:18 -!- nogoawayiciloo has changed nick to moony.
18:38:30 -!- FreeFull has joined.
18:41:23 -!- moony has quit (Quit: Bye!).
18:41:40 -!- asdfbot has quit (Ping timeout: 272 seconds).
18:42:14 -!- moony has joined.
18:44:55 -!- Sgeo has joined.
19:15:27 <shachaf> int-e: It doesn't? It seems to in the (reset (begin ...)) example on Wikipedia.
19:18:21 <shachaf> int-e: In my variant, {} is the delimiter, and { a; b; c; } means { a; { b; c; } }, but I don't think regular shift/reset does that.
19:25:46 <moony> I need to take higher math classes sooner, so i can understand some of the stuff talked about in here :P
19:31:41 <b_jonas> moony: I'm not sure it would let you understand the crazy stuff on this channel, but I do support the idea of taking math classes
19:32:14 <moony> b_jonas: fair. And I would take the classes anyways
19:32:44 <b_jonas> it's worth for things other than understanding #esoteric
19:33:03 <shachaf> Mathematical Anti Telharsic Harfatum Septomin
19:34:26 <moony> because things like set theory
19:38:17 <b_jonas> why set theory in particular?
19:40:35 <shachaf> let this = Goodstein's theorem in Do you like this?
19:51:43 -!- Vorpal has quit (Ping timeout: 245 seconds).
19:56:46 -!- Vorpal has joined.
19:56:46 -!- Vorpal has quit (Changing host).
19:56:46 -!- Vorpal has joined.
20:01:32 <shachaf> whoa, https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket
20:27:21 -!- Lord_of_Life_ has joined.
20:28:21 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
20:30:04 <moony> b_jonas: I see it a lot, and think it could be useful for software optimization, as well
20:30:16 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:32:09 <shachaf> int-e: Oh, maybe you're right. I wish I could test this.
21:02:41 -!- b_jonas has quit (Quit: leaving).
21:23:32 -!- moony has changed nick to asdfbot2.
21:28:01 -!- asdfbot2 has quit (Quit: Bye!).
21:28:23 -!- moony has joined.
21:39:06 -!- AnotherTest has quit (Ping timeout: 268 seconds).
21:50:42 -!- xkapastel has joined.
21:56:25 -!- ais523 has joined.
21:56:48 <ais523> I'm currently trying to learn the theorem prover / SAT solver Z3
21:58:16 <shachaf> Oh, I was trying to use Z3 the other day.
21:58:24 <ais523> it produces some pretty esoteric answers sometimes
21:58:45 <ais523> for example, if you ask it "find an integer x such that x * x > 3", it pretty consistently produces the answer -8
21:58:56 <ais523> which is a valid answer to the question, but not one I would have thought of
22:00:23 <ais523> `! brachylog A×↙A>3∧Aw
22:00:39 <ais523> Brachylog's answer to the same question is more expected
22:07:02 <shachaf> Hmm, when you link against a .o, does dead coffee elimination on functions you don't use typically happen?
22:07:32 <shachaf> It seems like that would put a bunch of restrictions on the .o
22:08:02 <shachaf> Or maybe this is why people use .a instead of .o files, because it can only be done on the file level?
22:08:20 <moony> for C/C++ using GCC/Clang, it only happens if you use -fLTO, which adds a lot of link-time data that can be used for dead code elimination, among other optimizations
22:08:45 <shachaf> Man. That sounds mega complicated.
22:09:10 <shachaf> I want to write my own linker for my own program but I still want to use C libraries.
22:09:14 <moony> it's compilerspecific
22:09:32 <shachaf> But .o files are a standard format.
22:09:48 <shachaf> Probably some kind of .note.gnu.whatever section
22:09:54 <shachaf> What's the situation on Windows?
22:10:08 <moony> Windows is dominated by MSVC, which is closed source
22:10:31 <shachaf> And the PE format is pretty well documented
22:12:10 <moony> i don't really use windows
22:15:48 <ais523> shachaf: by default, you get no dead code elimination with .o but do get dead code elimination with .a (in the sense that an entire file in the archive won't be used if nothing in it is referenced)
22:16:55 <ais523> the way LTO is implemented is normally a fairly good approximation to "let's just do all the actual work of the compile during the link"
22:17:12 <ais523> of course some of it is done during the compile step, but it moves a number of compile steps to happen at link-time instead
22:17:26 <ais523> this needs a very configurable linker so that you can ask it to call back into the compiler
22:20:04 <shachaf> Wow, that sounds horrible.
22:20:22 <shachaf> Why does it need to call back into the compiler?
22:22:13 <ais523> to do the rest of the optimisation
22:22:31 <shachaf> Is it things like cross-module inlining?
22:22:59 <shachaf> That sounds so complicated.
22:24:41 <ais523> it's basically cross-module everything, a typical LTO is the equivalent of just dumping your entire program (and its libraries) into one file with #include and optimising that
22:25:45 <shachaf> Then why not just do whole-program compilation?
22:26:10 <ais523> that's pretty much what's happening, I think
22:26:24 <ais523> but -fLTO is stronger than -fwhole-program because it looks in the libraries for things to optimise in too
22:26:47 <ais523> also, you do get incremental builds to some extent
22:26:59 <ais523> because there is a lot of work the compiler has to do before it even starts to optimise the program
22:27:11 <ais523> and many optimisations are done first on a single procedure before being extended to being interprocedural
22:27:14 <shachaf> The problem is that I want to write my program in a non-gcc language.
22:27:32 <shachaf> But I want to use some libraries written in C.
22:29:46 <ais523> it's probably best to not LTO against them, in that case
22:29:55 <ais523> unless your compiler and theirs have a common backend
22:30:08 <ais523> I'm not aware of any LTOers which try to parse asm, although it's an interesting idea
22:30:25 <ais523> generally speaking optimisations want a higher-level source format anyway so that they know what UB they're allowed to exploit
22:30:26 <shachaf> Isn't the basic idea of a linker that it supports linking code written in multiple languages?
22:30:34 <shachaf> That's the only reason you need a linker or object files.
22:31:03 <ais523> no, the main reason you need a linker is for updating separately compiled files so that they reference each other
22:31:12 <ais523> that's useful even within a single language
22:31:28 <ais523> many linkers do support multiple source languages, typically by only working at the asm level anyway
22:31:36 <moony> GCC and LLVM both use a intermediate language for LTO
22:31:43 <moony> LLVM uses it's IR, as expected
22:31:46 <ais523> but I was once paid to write a linker, and that linker was specific to a single language
22:32:21 <ais523> its main purpose was to generate glue code to allow different compilation units to call functions defined in each other
22:32:57 <shachaf> But splitting a program into multiple translation units is an implementation detail of a compiler.
22:33:03 <shachaf> You could just do whole program compilation.
22:34:37 <ais523> the main reason not to is because the separate translation units make incremental builds much easier to implement
22:35:04 <ais523> (obviously, implementing incremental builds with whole-program compilation isn't impossible, but building a file at a time is a really easy way to do them and it's what's normally done in practice)
22:35:17 <shachaf> I'm not sure how much incremental builds matter.
22:35:33 <ais523> …do you never work on large programs?
22:35:59 <ais523> even on something like NetHack, which isn't even large, there are at least tens of seconds difference between an incremental build and a full rebuild
22:36:16 <shachaf> I mean that I find the argument that compilers should be way faster and then incrementality doesn't matter so much pretty compelling.
22:36:34 <shachaf> Hmm, I bet NetHack would compile faster if it was in one translation unit.
22:36:55 <ais523> it would, there are a lot of headers that are recursively included in everything
22:36:57 <fizzie> We have [REDACTED] lines of code in [REDACTED], and incremental builds are pretty [REDACTED] for it.
22:37:28 <shachaf> Certainly [REDACTED] benefits from incremental builds.
22:37:51 <shachaf> But it's probably written in C++ or something.
22:38:23 <ais523> I sort-of would prefer to go the other way, I think compilers should consider spending more effort than they do a) proving the input program correct and b) optimising it
22:39:09 <shachaf> Well, a very fast debug-only build should be available.
22:40:21 <shachaf> At one point Chromium started combining its translation units into larger chunks (I think ~30 files each maybe?) to make compilation faster.
22:40:48 <shachaf> The trouble with (some) C++ code is that all the code is in headers, so each translation includes the entire program.
22:42:39 <fizzie> Heh, the Chrome build instructions start with: "Are you a Google employee? See go/building-chrome instead."
22:43:34 <fizzie> I mean, the Chromium build instructions.
22:44:28 -!- ais523 has quit (Remote host closed the connection).
22:45:41 -!- ais523 has joined.
22:45:51 <fizzie> I think they've been switching build systems every now and then. I guess it's still GN+Ninja though.
22:46:05 <fizzie> But it definitely was GYP before, and I think something else before that.
22:48:22 <shachaf> I'm trying to build NetHack now to compare build times.
22:48:44 <shachaf> But the build instructions are convoluted so I still haven't figured it out.
22:49:32 <ais523> shachaf: for NetHack 3.4.3, try this patch: https://bilious.alt.org/?452
22:49:53 <ais523> it automates all the manual steps of the build
22:50:29 <ais523> that has a different build system
22:50:40 <ais523> but it's a bit easier to use than 3.4.3's once you have an appropriate hints file
22:50:48 <shachaf> ais523: Hmm, instead of application/octet-stream you should serve your .patch fail as text/plain so it opens in browsers.
22:51:52 <shachaf> Oh, I was only looking for executable files in the hints directory, with tab completion. So I thought there was only one for Mac OS.
22:52:33 <ais523> the one for Linux mostly works apart from the directories I think
22:52:47 <ais523> oh, hmm, apparently bilious is downloading it /from/ my website
22:53:18 <ais523> text/plain is the wrong MIME type for a diff, though (and there are security reasons not to use text/plain for /anything/ online, blame Microsoft)
22:53:39 <moony> ais523: what's MS do
22:54:18 <ais523> moony: some versions of IE interpret text/plain as text/html if they think the file looks sufficiently HTMLlish
22:54:27 <ais523> this allows XSS attacks against plaintext files
22:54:48 <ais523> (last time this conversation came up, someone successfully XSS-attacked oerjan via a plaintext log file)
22:54:59 <ais523> (so it's not just a theoretical issue)
22:55:03 <ais523> log for #esoteric, that is
22:57:10 <fizzie> There were some workarounds though. Like, X-Content-Type-Options=nosniff on IE >= 8.0, which is... well, it's something.
22:57:42 <shachaf> Well, I really don't like application/octet-stream because no browser shows a preview option.
22:57:44 -!- FreeFull has quit.
22:57:51 <moony> note to self: put demo for this madness on hellomouse.net
22:57:54 <ais523> the workaround we were always told to use on Wikipedia was to serve as text/css
22:57:55 <shachaf> This is really a problem with browsers, but all browsers have this behavior.
22:58:19 <ais523> fwiw, when I followed the link it opened in my text editor, with syntax highlighting
22:58:24 <fizzie> ais523: I think that works on older versions of IE than just the header.
22:58:32 <ais523> but I suspect that's a consequence of some configuration I did in the past
22:59:01 <ais523> "on Wikipedia" here = to prevent people XSS-attacking Wikipedia itself
22:59:08 <fizzie> I'm sending "Content-Type: text/plain" + "X-Content-Type-Options: nosniff" from hack.esolangs.org/tmp/... URLs.
22:59:39 <fizzie> I guess that should probably be served from a different second-level domain than the wiki, actually.
22:59:56 <fizzie> But I don't want to pay for esolangsusercontent.com or some such.
23:01:07 <ais523> are the wiki cookies marked HTTP-only?
23:01:17 <ais523> that would probably be enough as far as mitigations go
23:01:42 <ais523> I'd test this but I'm not particularly inclined to fire up IE on the live internet
23:01:55 <ais523> especially as the version of IE that I have installed is IE6
23:02:35 <fizzie> I think at least some of them are.
23:02:46 <shachaf> Man, NetHack has all sorts of problems.
23:02:54 <fizzie> "Set-Cookie: esolang_wiki_session=[redacted]; path=/; secure; HttpOnly"
23:02:55 <shachaf> Like multiple incompatible definitions of "struct monst".
23:04:44 <ais523> that's a new one for me
23:05:04 <shachaf> Putting everything into one translation unit will show all sorts of odd things.
23:05:21 <shachaf> Some of them are sort of reasonable, like #defines for common words without #undefs.
23:05:49 <ais523> objects.h gets compiled twice, the first time uses a dummy definition for struct monst
23:07:43 <shachaf> objects.c is compiled twice? Oh no.
23:08:24 <ais523> several of the files that are compiled are generated from other compiled files at build time
23:13:26 -!- Phantom_Hoover has quit (Quit: Leaving).
23:20:51 <ais523> what's the name for the version of boolean satisfaction where you can put as many forall quantifiers as you like at the start, but don't get other quantifiers or quantifiers anywhere else?
23:21:06 <ais523> e.g. "find x, y, such that forall a, b, c, f(a,b,c,x,y) is true"
23:22:47 <shachaf> Someone told me the name of that recently but I've forgotten it.
23:28:39 <shachaf> Without -O, NetHack builds in <5 seconds on my machine.
23:28:42 <esowiki> [[Blackspace]] N https://esolangs.org/w/index.php?oldid=65581 * A * (+219) Created page with "[[Blackspace]] is an [[esoteric programming language]] completely based on the old-fashioned control characters. Currently this page is a placeholder. [[Category:2019]] Cat..."
23:28:42 -!- Sgeo has quit (Read error: Connection reset by peer).
23:29:05 -!- Sgeo has joined.
23:29:19 <esowiki> [[Husk]] M https://esolangs.org/w/index.php?diff=65582&oldid=65577 * A * (+30)
23:33:12 <shachaf> (This is unrelated to the one-translation-unit thing, which isn't working very well in this code base.)
23:33:50 <shachaf> Also a big problem is that you can only get parallelization in most compilers by breaking up your code into multiple translation units.
23:38:45 <ais523> I thought that but forgot to say it in-channel
23:47:40 -!- atslash has quit (Quit: This computer has gone to sleep).
23:49:54 <shachaf> Is -O even relevant to a program like NetHack?
23:52:04 <ais523> yes, we need to do optimisation rounds every now and then
23:52:38 <ais523> vanilla NetHack was designed for very old computers where it ran very slowly, so a lot of optimisation was needed for that and means that we can afford to be sloppy when running old parts of the code on modern computers
23:53:05 <ais523> but NetHack derivatives like NH4 take advantage of the speed of modern computers to do things like continuously saving the game (the save code is pretty slow)
23:53:31 <ais523> also, reading code compiled at -O0 hurts to look at
23:53:50 <ais523> it often doesn't even really use registers, everything gets loaded from memory for one instruction then put right back into memory
23:54:58 <moony> there can be programs that behave differently because of how unoptimized -O0 is
23:55:10 <moony> and languages like Rust kinda depend on -O1 or better to even make good code
23:55:20 <shachaf> But if you're recompiling for development (which is the case where you want incremental builds) you presumably don't care about that so much.
23:55:33 <shachaf> Yes, Rust has certainly taken that part of the C++ philosophy.
23:56:25 <moony> i.e. take Rust futures
23:56:28 <moony> if they weren't optimized
23:56:36 <moony> a single Future object could reach 100s of KBs large
23:56:39 <ais523> shachaf: I consider the generation of suboptimal asm to be a bug
23:56:56 <ais523> in either the compilier or the source code, but the source code is normally easier to fix
23:57:08 <shachaf> But generating optimal assembly is uncomputable.
23:57:10 <ais523> I'll write a piece of the program, then look at the generated asm to see if it's fast enough or if I need to do better
23:57:24 <ais523> shachaf: depends on what the program is doing
23:57:42 <ais523> in many cases you just have a finite-state machine, optimising that is very computable
23:57:50 <moony> I think part of the difficulty in generating optimal asm is, yknow, x86 itself
23:57:50 <shachaf> Something like a computer game, even NetHack, is more like a real-time system.
23:57:57 <ais523> why do you think I'm learning Z3? :-D
23:58:14 <shachaf> It's a bug if it's too slow but if you don't miss your deadlines it's fine.
23:58:25 <moony> ais523: compiler for a FSM language that generates nearly optimal ASM when
23:58:26 <ais523> shachaf: I actually really disagree with this
23:58:38 <ais523> I am upset at all the electricity that's being wasted in parts of the cycles that could be idle
23:58:53 <ais523> moony: I'm really seriously considering it atm
23:59:07 <moony> i mean, that'd be amazing for some problems
23:59:19 <shachaf> ais523: I bet more cycles are being used to display NetHack in a GUI terminal than on computing NetHack.
23:59:25 <ais523> actually, Z3 is sufficiently high level that I think you could express it in only a few hundred lines or so of Z3 + a program wrapping it
23:59:52 <ais523> whether Z3 could actually run the resulting program with any sort of efficiency would be the real question
23:59:54 <moony> ais523: good luck handling the insanity that is per-processor behavior and SSE
00:00:02 <moony> Agner's docs be with you
00:00:22 <ais523> moony: well, I was planning to a) optimise for size, because that's objective; b) at least initially concentrate only on the integer registers
00:00:47 <shachaf> At any rate, if you're talking about repeated recompilation during development, you should include the cost of the optimizing compiler in your wasted cycles.
00:01:11 <ais523> yes, there's an argument for using only limited optimisation during development
00:01:12 <shachaf> If you're building a program to ship to many people, it makes sense to spend more time optimizing it. But that's a tiny fraction of your builds.
00:01:15 <ais523> that's pretty much what -Og is for
00:01:37 <ais523> and -Og's generated code is far from terrible, given the tradeoffs it has to make
00:08:04 <moony> ais523: have fun handling instructions like the multiply instruction
00:08:41 <moony> output registers are fixed
00:08:57 <ais523> that doesn't make it harder, just more tedious
00:09:03 <ais523> I guess that's what you meant by "have fun"
00:09:10 <moony> that's what i ment
00:09:15 <moony> it's annoying and tedious :P
00:09:15 <ais523> (actually, from Z3's point of view it makes things easier due to having fewer possibilities to try)
00:09:50 <shachaf> Oh man: https://mightyapp.com/
00:10:45 <moony> what they don't mention:
00:11:05 <moony> maybe use firefox instead, heard it's faster
00:12:06 <shachaf> No, that's the secret sauce optimization superpower.
00:12:41 <shachaf> Web software wasn't in the cloud enough, so now you have a second layer of cloud.
00:13:26 <moony> *runs off to hellomouse to share*
00:34:09 <ais523> I wonder if that mightyapp thing is a joke
00:34:14 <ais523> I don't think there's enough information to tell
00:34:25 <ais523> and I can believe both that it's meant as a joke, and that it's meant seriously
00:35:19 <shachaf> It's certainly a joke, but I don't think it's meant as one.
00:35:22 <ais523> I'm leaning towards joke, on the basis that a) the name is wrong and b) there aren't any terms of service or the like, which a company seriously setting something like this up would almost invariably have
00:35:53 <moony> i hope it's a joke. it's certainly funny
00:35:57 <ais523> also, the "request access" link goes to a different domain
00:36:16 <ais523> so this has been set up on a really low budget by someone without programming expertise, which seems at odds with the claims they're making
00:36:33 <ais523> so that makes it most likely that it's a prank, and second most likely that it's a scam, I think
00:36:43 <ais523> "an actual product we intend to commercialise and have the skill to make" is a distant third
00:37:45 <ais523> the ironic thing is, a product like that genuinely /could/ make most pages load faster, I suspect
00:38:48 <moony> HTML is /way/ too complex
00:38:54 <moony> HTML replacement when
00:38:59 -!- iczero has joined.
00:39:56 -!- xkapastel has quit (Quit: Connection closed for inactivity).
00:40:59 <HackEso> iczero: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <https://esolangs.org/>. (For the other kind of esoterica, try #esoteric on EFnet or DALnet.)
00:44:20 <esowiki> [[Malbolge]] https://esolangs.org/w/index.php?diff=65583&oldid=64726 * A * (+218) /* External resources */
00:44:35 <esowiki> [[Malbolge]] M https://esolangs.org/w/index.php?diff=65584&oldid=65583 * A * (-1) /* External resources */ typo
00:50:53 -!- arseniiv has quit (Ping timeout: 245 seconds).
00:55:27 -!- adu has joined.
01:06:23 <esowiki> [[Malbolge programming]] M https://esolangs.org/w/index.php?diff=65585&oldid=52491 * A * (+181)
01:07:39 <esowiki> [[Malbolge programming]] https://esolangs.org/w/index.php?diff=65586&oldid=65585 * Ais523 * (-67) /* External resources */ you kind-of have to read the instructions to learn the language, a denormalizer isn't going to do much to help (especially as it affects data as well as code)
01:15:01 -!- adu has quit (Quit: adu).
02:58:44 -!- moony has quit (Ping timeout: 252 seconds).
03:00:34 -!- iczero has quit (Ping timeout: 252 seconds).
03:00:41 -!- Bowserinator_ has quit (Ping timeout: 250 seconds).
03:09:47 -!- Bowserinator has joined.
03:10:18 -!- moony has joined.
03:10:30 -!- iczero has joined.
03:11:57 -!- ais523 has quit (Quit: quit).
04:21:03 -!- Sgeo_ has joined.
04:23:49 -!- Sgeo has quit (Ping timeout: 258 seconds).
04:29:24 <esowiki> [[Malbolge]] M https://esolangs.org/w/index.php?diff=65587&oldid=65584 * MilkyWay90 * (+1)
05:37:05 -!- atslash has joined.
06:17:52 -!- atslash has quit (Ping timeout: 244 seconds).
06:41:54 -!- diginet has quit (Quit: diginet has quit!).
06:43:57 -!- b_jonas has joined.
06:45:48 <b_jonas> "<shachaf> Isn't the basic idea of a linker that it supports linking code written in multiple languages?" => yes, so g++ can invoke gold in a way that it can link C, fortran and C++ together; ghc can invoke a linker such that it can link C and haskell together, and rustc can link rust and c together. If you want to link any two of C++, haskell and rust, you still can, but you have to guess all the magic
06:45:54 <b_jonas> linker incantations required.
06:46:03 <esowiki> [[Truth-machine]] M https://esolangs.org/w/index.php?diff=65588&oldid=65568 * A * (+283) /* Malbolge */ Normalized using my normalization tool
06:46:11 <b_jonas> It's pretty sad really, especially the haskell part.
06:47:28 <b_jonas> "<shachaf> I mean that I find the argument that compilers should be way faster" => the people who say that are the ones with sour grape because they don't have a good optimizing compiler
06:49:34 <b_jonas> "<shachaf> Well, a very fast debug-only build should be available." => still no. debug build should be somewhat faster, but it should still optimize. debug build is -O, production build is -O2. that debug builds used to be fast a decade ago itself was an artifact of that compilers were worse at optimizing and producing debug info for the optimized file that a debugger can read. that's no longer a
06:49:40 <b_jonas> limitation, compilers got better in everything.
06:52:24 <b_jonas> "<ais523> the workaround we were always told to use on Wikipedia was to serve as text/css" => interesting
06:54:32 <b_jonas> "<shachaf> Man, NetHack has all sorts of problems." => there are (or used to be) tables in C files generated by a program built at compile time, where the program that generates it includes a header that has macros that refer to the table in the generated output.
06:55:06 <b_jonas> those unclear dependency orders were what really made me angry about its code organization
06:58:54 <b_jonas> "<ais523> moony: well, I was planning to a) optimise for size," => I suggest that you optimize for the number of instructions instead, then size for equal number of instructions
07:00:37 <b_jonas> "<ais523> yes, there's an argument for using only limited optimisation during development / that's pretty much what -Og is for" => no, AFAIK -O is for limited optimization during development, -Og is a close variant of that that specifically won't do optimizations that would confuse a runtime debugger (provided you use a new enough version of gdb)
07:05:56 <shachaf> If compilers got better in everything why are they way slow?
07:08:20 <b_jonas> shachaf: they're not slow. I can compile anything much faster than I used to be able to on a current machine than how much it took me on an ancient machine with gcc 2.95
07:08:51 <b_jonas> at least, they didn't slow down so much, so with faster hardware, it is effectively faster
07:08:58 -!- b_jonas has quit (Remote host closed the connection).
07:12:31 <shachaf> tcc is way faster than gcc
07:12:42 -!- cpressey has joined.
07:13:55 <cpressey> Good morning. I disagree with the statement "All continuations are delimited".
07:15:01 <cpressey> If you accept a model where a computation can run without end, such as (I dunno) Turing machines, then I think you have to accept there are continuations without end too.
07:16:29 <cpressey> Even on a real computer, when the OS starts a program, it passes it a continuation (conceptually at least), and when that program "terminates", all it's doing, is continuing that continuation.
07:20:50 <shachaf> I have a good feel for how delimited continuations work now but I'd like an implementation to test some things with.
07:22:42 <cpressey> shachaf: I have such a language bookmarked, need to find it. It uses prompt/control I think
07:22:54 <shachaf> Does Racket or something have it?
07:23:15 <cpressey> shachaf: https://github.com/manuel/wat-js
07:23:25 <shachaf> That is not a promising URL.
07:24:13 <cpressey> I'm not really into these thigns.
07:25:02 <cpressey> meanwhile a duckduckgo search for "racket delimited continuations" returns a hit on the Racket docs
07:25:06 <shachaf> I guess it's just that the implementation is in JavaScript or something?
07:25:30 <shachaf> I did look at the Racket documentation but I couldn't quickly figure out a way to make it work, or whether shift/reset is included at all.
07:26:04 <shachaf> One thing that I'd like to have along with delimited continuations is something like destructors or Go's "defer", code that runs when you exit a scope.
07:26:09 <cpressey> Looks like it's got call/prompt
07:26:31 <shachaf> Maybe I just need to figure out the right #lang incantation.
07:27:13 <cpressey> shachaf: https://docs.racket-lang.org/reference/cont.html lists shift and reset and cupto and prompt and allllll the things
07:27:53 <cpressey> re destructors, I think you'd use dynamic-wind for conventional continuations
07:29:14 <shachaf> I guess I just needed (require racket/control)
07:32:24 <shachaf> OK, some of my questions have been answered.
07:34:05 <shachaf> I guess it's even better than I thought in most respects.
07:34:36 <shachaf> Can you do the thing I want? I want a thing that creates an early exit point that can be used later.
07:34:58 <shachaf> Something like (reset (let ((exit ...)) (...whatever, which may include more resets... (exit x))))
07:42:16 -!- xkapastel has joined.
07:47:51 -!- AnotherTest has joined.
07:54:51 <shachaf> Maybe the answer is that I should be using a prompt tag instead of shift/reset.
07:59:32 -!- wob_jonas has joined.
07:59:40 -!- wob_jonas has changed nick to lob_jonas.
08:00:00 <lob_jonas> That said, the programs that we can compile have gotten huge, which is part of why compilation can be slow.
08:02:56 -!- atslash has joined.
08:04:01 <lob_jonas> shachaf: if you want an exit point, which is a much simpler special case of a continuation to which you can only go out in the stack, not in again once you exited the frame where you created it, then try call/ec, see "https://docs.racket-lang.org/reference/cont.html?q=call%2Fec#%28def._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._call%2Fec%
08:04:35 <lob_jonas> it's like longjmp because it can jump out from deep inside a function call, but not back once the setjmp exited
08:05:26 <shachaf> What I actually want is neither of them.
08:05:29 <lob_jonas> except it differs from longjmp because it still handles dynamic-wind destructors
08:05:46 <lob_jonas> you want something in between, delimited?
08:07:32 <lob_jonas> you could create a weak cell or ephemeron or whatever those are called these days, where the weak key points to a dummy object that you create in the stack frame to which you want to delimit the continuation, and the value holds the continuation itself. then you can't invoke the continuation through this once the delimiting stack frame has exited.
08:07:38 <shachaf> Well, what I actually want is evaluated entirely at compiletime, for one.
08:07:50 <shachaf> I don't want any continuations or even indirect jumps at runtime.
08:07:53 <lob_jonas> not only you can't invoke it, it can be garbage collected some time after the stack frame exits
08:08:12 <shachaf> But the semantics might be similar in other ways.
08:09:17 <lob_jonas> so you want something like a goto/comefrom?
08:09:50 <lob_jonas> only it can see the label in an outer function that created the closure, lexically?
08:11:08 <lob_jonas> and do you want it to be able to re-enter a stack frame too, not just exit?
08:11:26 <shachaf> I think maybe prompt-at is something like what I want. But it seems to want you to make your own tag for some reason? I must be misunderstanding it.
08:11:26 <lob_jonas> even through a closure that you leak out? nah, that'd be difficult
08:11:36 <shachaf> There should be no closures since it all happens at compiletime.
08:11:49 <cpressey> Continuations are like the least compile-time thing I can think of
08:12:53 <shachaf> That's why I didn't want to model my feature as continuations, at first.
08:13:04 <shachaf> But I think it might just be the right thing unfortunately.
08:14:41 <cpressey> If it's just the right thing, why is it unfortunate? You speak in riddles.
08:16:48 <shachaf> I can do part of what I want with the shift/reset in http://hackage.haskell.org/package/CC-delcont-0.2.1.0/docs/Control-Monad-CC.html , at least
08:17:02 <shachaf> Oh, it's unfortuantely because delimited continuations are super-mega-complicated
08:17:08 <cpressey> May I suggest you write some test cases for the feature, so that you at least have a clear idea what it... does?
08:17:19 <shachaf> Sure, I've talked about some of this before.
08:18:10 <shachaf> Hmm, that would be easier if I knew what it was exactly. But then I wouldn't need to learn from continuations.
08:18:25 <cpressey> The test cases are to help you know what it is exactly
08:19:38 <shachaf> I have a 2000 line file full of various examples trying various things.
08:19:51 <cpressey> One thing. Many test cases for one thing.
08:20:28 <shachaf> Most of the file is about this one feature.
08:21:26 <shachaf> I'm a bit confused by what you're asking. You want coherent working test cases for this thing, but the problem is that I'm confused about what this thing is.
08:22:08 <shachaf> Maybe I can try it anyway.
08:23:09 <cpressey> How would you identify this thing? "In this instance I would expect it to do this, in this other instance I would expect it to... (etc)" These are test cases.
08:23:36 <rain1> https://github.com/rain-1/continuations-study-group/blob/master/scripts/2010-asai-kitani-eval11-numbers.ml
08:24:05 <rain1> there is a compiler and interpreter that implements lambda calculus with delimited continuations
08:28:37 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
08:32:15 -!- Lord_of_Life has joined.
08:33:18 <esowiki> [[Alphabetti spaghetti]] https://esolangs.org/w/index.php?diff=65589&oldid=46644 * Stasoid * (+120) /* Interpreter */
08:41:23 <shachaf> cpressey: http://slbkbs.org/tmp/2019-08-21-cpressey-test-cases.txt is something.
08:41:37 <shachaf> These aren't actually test cases because I don't know what these lambdas actually are.
08:44:47 <cpressey> shachaf: That is at least clearer.
08:46:24 -!- andrewtheircer has joined.
08:59:14 <cpressey> shachaf: This is my "compile time" interpretation: ` is syntactic sugar (or rather the lack of it) for ;. @ is a label just after the block it's used in. defer is remembered when it's seen, but code isn't generated for it, until a jump out of the block.
09:00:23 <shachaf> I agree on the latter two.
09:00:28 <shachaf> I'm not sure what you mean by the first one?
09:02:48 <cpressey> for (xs, \x -> { BODY }) <==> { x := for(xs)`; BODY }
09:03:00 <cpressey> looks like you could transform that syntactically?
09:03:13 <shachaf> defer is special because it inserts the code at every exit (once at the block's }, and once for uses of @, I suppose).
09:03:22 <shachaf> Yes, it's certainly intended to be a syntactic transformation.
09:03:51 <shachaf> { x := for(xs); y := for(ys); BODY } turns into for(xs, \x -> for(ys, \y -> { BODY }))
09:04:02 <cpressey> ok, I have to afk for a bit, but it doesn't look like you need to think much about continuations for this
09:04:03 <shachaf> Er, I forgot the two `s in the left side.
09:04:08 <rain1> you can use staging to make things happen at compile time
09:04:33 <shachaf> And { x := for(for(xss)`)`; BODY } turns into for(xss, \xs -> for(xs, \x -> { BODY })) and so on.
09:04:36 <rain1> delimited continuations + staging is a powerful technique
09:04:58 <rain1> http://okmij.org/ftp/meta-programming/calculi.html#circle-shift
09:05:01 <shachaf> I agree that this is just a syntactic transformation, that's kind of the point.
09:05:25 <shachaf> One question here is, what is "for", and what's the type of "exit", and what are these lambdas?
09:06:36 -!- tromp has quit (Remote host closed the connection).
09:20:29 <shachaf> "for" is something like a function, but evaluated/inlined at compiletime.
09:21:07 <shachaf> "exit" is also a thing like that, and so is the argument to "for".
09:21:52 <shachaf> These are very similar to regular delimited continuations, except for the demand that they only exist at compiletime. So you can't pass "exit" or one of these lambdas as an argument to a regular function.
09:22:57 <shachaf> Do you know of a language that has that kind of thing?
09:23:54 -!- tromp has joined.
09:25:41 <lob_jonas> shachaf: how about... the language you're eventually going to create to test this thing?
09:27:21 <cpressey> shachaf: I think one reason you don't really need continuations for this is because you don't actually retry anything with these operators.
09:27:31 <cpressey> "Continuations" at compile-time are "labels".
09:27:47 <andrewtheircer> fun fact: a town in west virginia requested foreign aid from the USSR to repair a bridge
09:29:28 <shachaf> I agree about continuations at compile-time.
09:29:51 <shachaf> This is why I said for a long time that I don't really want continuations because what I want is much simpler.
09:36:04 <shachaf> lob_jonas: Yes, that sounds like a good one.
10:02:11 -!- arseniiv has joined.
10:17:02 -!- lob_jonas has quit (Quit: Ping timeout (120 seconds)).
10:19:38 -!- andrewtheircer has quit (Remote host closed the connection).
10:51:02 <cpressey> shachaf: I should probably let you sleep, but: when you capture a continuation, sometimes it's to continue it more than once (e.g. backtracking) but you're not doing that here.
10:53:14 <cpressey> "for" looks like a function that takes a function, to me. If you want to say, it must be an anonymous function which lexically follows the "for", so you can optimize/analyze it better, you can do that.
10:57:53 <cpressey> For the life of me @ looks a lot like setjmp/longjmp. You also want some static guarantees (you can't pass the value of @ around) but those are additional; the basic mechanism is that.
11:01:36 <cpressey> Your additional lexical constraints might be misleading you into thinking it's an essentially lexical mechanism, but I don't think it is.
11:04:32 -!- xkapastel has quit (Quit: Connection closed for inactivity).
11:06:32 <lambdabot> Local time for shachaf is Wed Aug 21 04:06:31 2019
11:18:57 -!- lob_jonas has joined.
11:32:43 <lob_jonas> cpressey: I just got scheduled for dental root canal operation. The first time in my life. I was sort of mentally prepared for that. But
11:33:32 <lob_jonas> the root canal specialist surgeon said that he's looked at the X-ray and my tooth looked nasty so I'll need three appointments for this tooth.
11:33:53 <lob_jonas> I was already scared of this operation, but now I'm more scared.
11:42:14 <cpressey> lob_jonas: I had a root canal once. It took multiple appointments, and in the end they couldn't save the tooth anyway. It wasn't fun, and there was some pain. But it's also not amongst my worst memories (I rarely think of it.)
11:42:45 <cpressey> It's also the sort of thing where it's a finite amount of time, and you can remind yourself of that during it.
11:44:35 <lob_jonas> cpressey: yes, the point of a root canal is that you only get them when they've given up on the tooth already, it can't be saved (or so the denist believes), so they turn it to an undead tooth with some metalic golem core surrounded by the empty shell of what used to be the tooth.
11:45:15 <lob_jonas> also I hear the experience with it has a high variance, it's terrible for some people but acceptible for others.
11:45:54 <lob_jonas> which makes sense because I had three wisdom teeth extracted, and they all behaved differently
11:46:19 <lob_jonas> (the first one was terrible, the second one was trivial, the third one was ok but the gum healed ugly)
11:51:27 -!- PaniniTheDevelop has joined.
12:33:03 -!- PaniniTheDevelop has quit (Remote host closed the connection).
12:47:57 -!- xkapastel has joined.
12:56:43 -!- lob_jonas has quit (Quit: Ping timeout (120 seconds)).
13:54:59 <esowiki> [[FAKE]] M https://esolangs.org/w/index.php?diff=65590&oldid=65453 * Argv0 * (+61) Typos and grammar corrections
14:09:50 -!- PaniniTheDevelop has joined.
14:15:01 -!- mich181189 has quit (Ping timeout: 250 seconds).
14:15:12 -!- mich181189 has joined.
14:15:45 -!- Lymee has joined.
14:15:50 -!- ProofTechnique has quit (Ping timeout: 250 seconds).
14:16:22 -!- sparr has quit (Ping timeout: 250 seconds).
14:16:43 -!- Lymia has quit (Ping timeout: 250 seconds).
14:16:44 -!- Lymee has changed nick to Lymia.
14:18:06 -!- ski has quit (Ping timeout: 268 seconds).
14:18:24 -!- zzo38 has quit (Ping timeout: 272 seconds).
14:18:36 -!- ProofTechnique has joined.
14:18:41 -!- ski has joined.
14:21:10 <Taneb> Hmm, is there a thing like linear types that is linear kinds?
14:30:34 -!- sparr has joined.
14:35:43 <esowiki> [[ROT-13]] N https://esolangs.org/w/index.php?oldid=65591 * A * (+335) Created page with "[[ROT-13]] is an extension of the [[ROT13]] encoder/decoder. ==Alphabetic characters== They are simply rotated using this following lookup table: <pre> ABCD...WXYZ NOPQ...JKLM..."
14:39:56 -!- PaniniTheDevelop has quit (Remote host closed the connection).
14:41:17 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65592&oldid=65525 * PaniniTheDeveloper * (+253) /* Introductions */
15:11:13 -!- tromp has quit (Remote host closed the connection).
15:32:02 -!- tromp has joined.
15:51:26 -!- adu has joined.
15:58:37 -!- cpressey has quit (Quit: A la prochaine.).
16:36:23 -!- tromp_ has joined.
16:38:35 -!- tromp has quit (Ping timeout: 252 seconds).
17:12:05 -!- b_jonas has joined.
17:21:23 -!- PaniniTheDevelop has joined.
17:24:57 -!- FreeFull has joined.
17:28:29 -!- Phantom_Hoover has joined.
17:37:31 <esowiki> [[Esolang:Sandbox]] https://esolangs.org/w/index.php?diff=65593&oldid=62912 * PaniniTheDeveloper * (+64)
17:38:44 <esowiki> [[Esolang:Sandbox]] https://esolangs.org/w/index.php?diff=65594&oldid=65593 * PaniniTheDeveloper * (-39)
17:38:48 <kmc> Taneb: sure, kinds are just like a type system but one level up
17:39:12 <kmc> in a linear kind system you could do data Foo a = Bar a but not data Foo a = Bar a a or data Foo a = Bar
17:39:18 <kmc> you have to use the type variable 'a' exactly once
17:39:25 <esowiki> [[Esolang:Sandbox]] M https://esolangs.org/w/index.php?diff=65595&oldid=65594 * PaniniTheDeveloper * (-25)
17:39:32 <kmc> whether that is useful, I do not know
18:39:43 <shachaf> cpressey: Joke's on you, I was already asleep.
18:39:49 <shachaf> Joke's on me, cpressey isn't here.
18:40:57 <shachaf> In lens things we talked about "linear functors" and "affine functors" and so on.
19:22:29 <kmc> and what does that mean
19:23:55 <shachaf> They're like the things you said.
19:24:47 <shachaf> You can write a Lens' (Foo a) a for your first Foo and a Traversal (Foo a) a for the second Foo and so on.
19:25:21 <shachaf> data Maybe a = Nothing | Just a is an example of an affine functor, since it's of the form "Ax + B"
19:26:33 <shachaf> I guess every linear functor is going to be of the form "(E,a)" for some E, like a 1D vector space.
19:47:08 <esowiki> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=65596&oldid=65592 * PaniniTheDeveloper * (+0)
19:49:45 <esowiki> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=65597&oldid=65596 * PaniniTheDeveloper * (+0) Undo revision 65596 by [[Special:Contributions/PaniniTheDeveloper|PaniniTheDeveloper]] ([[User talk:PaniniTheDeveloper|talk]])
19:50:16 -!- PaniniTheDevelop has quit (Remote host closed the connection).
20:09:13 -!- Sgeo_ has quit (Read error: Connection reset by peer).
20:09:38 -!- Sgeo_ has joined.
20:14:19 -!- b_jonas has quit (Quit: leaving).
20:26:35 -!- Lord_of_Life_ has joined.
20:29:51 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
20:29:57 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:47:43 -!- xkapastel has quit (Quit: Connection closed for inactivity).
20:59:07 -!- xkapastel has joined.
21:53:27 -!- AnotherTest has quit (Ping timeout: 264 seconds).
22:27:46 -!- FreeFull has quit.
22:51:16 -!- arseniiv has quit (Ping timeout: 248 seconds).
22:57:10 -!- Phantom_Hoover has quit (Quit: Leaving).
23:37:43 -!- xkapastel has quit (Quit: Connection closed for inactivity).
01:05:33 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65598&oldid=65523 * Areallycoolusername * (+456) /* Ruby */
01:06:04 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65599&oldid=65598 * Areallycoolusername * (+6) /* Ruby */
01:12:33 -!- esowiki has joined.
01:12:41 -!- j-bot has joined.
01:12:41 -!- jix has joined.
01:12:41 -!- shachaf has joined.
01:12:42 -!- dingwat has quit (Changing host).
01:12:42 -!- dingwat has joined.
01:12:43 -!- ProofTechnique has quit (Changing host).
01:12:43 -!- ProofTechnique has joined.
01:12:45 -!- tswett[m] has quit (Changing host).
01:12:45 -!- tswett[m] has joined.
01:12:52 -!- adu has joined.
01:12:52 -!- joast has joined.
01:12:52 -!- mniip has joined.
01:12:52 -!- howlands has joined.
01:12:52 -!- HackEso has joined.
01:12:52 -!- erdic has joined.
01:12:52 -!- paul2520 has joined.
01:12:54 -!- atslash has joined.
01:12:55 -!- diverger has joined.
01:12:55 -!- myname has joined.
01:12:55 -!- haavard has joined.
01:12:55 -!- hakatashi has joined.
01:12:55 -!- ocharles has joined.
01:12:55 -!- rickbutton has joined.
01:12:56 -!- mich181189 has quit (Changing host).
01:12:56 -!- mich181189 has joined.
01:13:26 -!- Melvar has joined.
01:13:26 -!- rain1 has joined.
01:13:26 -!- economicsbat has joined.
01:13:50 -!- ski has joined.
01:13:50 -!- sebbu has joined.
01:13:50 -!- catern has joined.
01:13:50 -!- Taneb has joined.
01:13:50 -!- APic has joined.
01:13:50 -!- rodgort has joined.
01:13:50 -!- sftp has joined.
01:13:50 -!- \oren\ has joined.
01:13:50 -!- olsner has joined.
01:13:50 -!- aji has joined.
01:13:50 -!- fizzie has joined.
01:14:06 -!- ski has quit (Max SendQ exceeded).
01:14:06 -!- APic has quit (Max SendQ exceeded).
01:14:20 -!- ski has joined.
01:14:23 -!- APic has joined.
01:14:55 -!- tswett[m] has quit (Ping timeout: 249 seconds).
01:15:48 -!- j-bot has quit (Ping timeout: 242 seconds).
01:15:48 -!- xylochoron[m] has quit (Ping timeout: 248 seconds).
01:21:07 -!- wmww has joined.
01:21:46 -!- Cale has joined.
01:21:47 -!- Effilry has joined.
01:21:48 -!- uplime has joined.
01:22:00 -!- moony has joined.
01:22:08 -!- Soni has joined.
01:23:22 -!- BWBellairs has joined.
01:23:42 -!- Effilry has changed nick to FireFly.
01:28:14 -!- xylochoron[m] has joined.
01:29:16 -!- tswett[m] has joined.
01:30:34 -!- 07IACCY0P has quit (Changing host).
01:30:34 -!- 07IACCY0P has joined.
01:30:38 -!- 07IACCY0P has changed nick to relrod.
01:50:00 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65600&oldid=65533 * A * (+3176)
02:15:02 -!- j-bot has joined.
02:35:45 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65601&oldid=65600 * Areallycoolusername * (+134) Questioning what looks like a bot shell
02:40:23 -!- Hooloovo0 has quit (Quit: Temporarily refracted into a free-standing prism.).
02:44:43 -!- Hooloovo0 has joined.
03:06:25 -!- oerjan has joined.
03:17:51 * oerjan looks at five days of logs and skips and jumps
03:31:47 -!- mich181189 has quit.
03:32:01 -!- mich181189 has joined.
03:47:10 -!- clog has quit (Ping timeout: 268 seconds).
03:50:12 -!- clog has joined.
04:00:02 -!- Lord_of_Life has quit (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine).
04:02:21 -!- Lord_of_Life has joined.
04:31:17 -!- Vorpal has quit (Ping timeout: 245 seconds).
04:49:00 -!- Vorpal has joined.
04:49:00 -!- Vorpal has quit (Changing host).
04:49:00 -!- Vorpal has joined.
08:09:31 <Taneb> Five days of skips and jumps is a lot of skips and jumps
08:19:13 <oerjan> well i mostly only skipped between mentions of my name so - not many.
08:19:17 -!- AnotherTest has joined.
08:21:32 <esowiki> [[User talk:Areallycoolusername]] M https://esolangs.org/w/index.php?diff=65602&oldid=65436 * A * (+3413) Reply
08:22:47 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65603&oldid=65601 * A * (+3386)
08:29:01 <Taneb> oerjan: how have you been?
08:29:30 -!- wob_jonas has joined.
08:29:38 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
08:29:51 <wob_jonas> oerjan: there's an olist in it, but you probably don't skip over that
08:30:09 <oerjan> indeed, since it contains my nick
08:31:02 -!- Lord_of_Life has joined.
08:33:22 -!- cpressey has joined.
08:37:03 <cpressey> Taneb: do linear kinds ensure that a type is only used once?
08:39:43 <Taneb> cpressey: that's what kmc suggested
08:41:09 <cpressey> It's hard to read every line of the log
08:49:20 <HackEso> oerjan: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <https://esolangs.org/>. (For the other kind of esoterica, try #esoteric on EFnet or DALnet.)
09:32:08 -!- oerjan has quit (Quit: Later).
10:07:18 -!- arseniiv has joined.
11:25:20 -!- sebbu has quit (Quit: reboot).
11:28:51 <wob_jonas> apparently the Hungarian word "meztelen" has four different variations: "meztelen, mezítelen, mezítlen, mezitelen".
12:02:33 -!- cpressey has quit (Ping timeout: 245 seconds).
12:04:01 -!- cpressey has joined.
13:30:08 -!- moei has joined.
14:14:43 -!- atslash has quit (Ping timeout: 258 seconds).
14:15:23 -!- atslash has joined.
14:21:06 -!- atslash has quit (Ping timeout: 268 seconds).
14:22:10 -!- atslash has joined.
14:42:51 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=65604&oldid=65464 * PaniniTheDeveloper * (+25)
14:43:36 -!- PaniniTheDevelop has joined.
14:44:52 -!- lifthrasiir has quit (Ping timeout: 248 seconds).
14:45:07 -!- lifthrasiir has joined.
14:47:07 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=65605&oldid=65604 * PaniniTheDeveloper * (-12)
15:05:08 -!- Sgeo_ has quit (Ping timeout: 248 seconds).
15:19:09 -!- wob_jonas has quit (Remote host closed the connection).
15:25:09 -!- PaniniTheDevelop has quit (Remote host closed the connection).
15:41:41 -!- sebbu has joined.
15:56:53 -!- cpressey has quit (Quit: A la prochaine.).
16:08:29 -!- arseniiv has quit (Read error: Connection reset by peer).
16:08:39 -!- arseniiv has joined.
16:17:04 -!- xkapastel has joined.
16:49:22 -!- FreeFull has joined.
16:59:04 -!- arseniiv has quit (Quit: gone completely :o).
18:14:22 -!- b_jonas has joined.
18:36:48 -!- Phantom_Hoover has joined.
19:23:57 -!- rain2 has joined.
19:26:18 -!- rain1 has quit (Ping timeout: 245 seconds).
19:30:12 -!- xkapastel has quit (Quit: Connection closed for inactivity).
20:06:25 <HackEso> I'm sorry, #esoteric has regulars, not members. Who told you about members? There are definitely no members here, and you wouldn't be allowed to know about them, anyway.
20:06:50 <HackEso> homestuck:Homestuck is a cult religion for disaffected teens. Gamzee drives the bus. Best summarized by http://www.mspaintadventures.com/storyfiles/hs2/05743.gif \ iditarod:The Iditarod is a race so incredibly difficult that it has a prize for coming in last place. \ pineapple:Pineapple is a hybrid species descended from a cultivar of spinach and wild ivy, making it a class 6 vegetable. \ promise problem:A promise problem is one that happens because you pr
20:07:40 <HackEso> 2/3:ou promise too much. Their reduction to NP is p. difficult. \ subtle:The 'b' sound is pronounced in 'subtle', it's just difficult to hear. \ tea:Tea is concentrated fuel made by distilling occult herbs in a silver alambic. Americans attempted to reduce its potency by dumping some in the Ocean. \ tg:TG is short for Turing-Gödel, the highest possible level of difficulty for a multiplayer game. At this level, it's undecidable whether you can manage to h
20:08:11 <HackEso> 3/3:alt before losing or not.
20:08:38 <int-e> it's interesting that it miscounted by 5 initially?
20:09:11 <shachaf> You mean that `2 miscounted by 5?
20:10:05 <int-e> Yes. But maybe there's been a hostmask change between now and when `2/`1/`n were last tweaked.
20:13:15 <shachaf> Maybe there's some way it can be made more resilient.
20:13:34 -!- erisd has joined.
20:14:31 <int-e> best not to touch it
20:14:39 <int-e> at least it didn't lose any characters :)
20:28:37 -!- Lord_of_Life_ has joined.
20:31:00 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
20:31:31 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:33:33 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=65606&oldid=65603 * Ais523 * (-6444) rm likely copyright infringement
20:43:46 -!- erisd has quit (Remote host closed the connection).
20:49:31 <shachaf> kmc: did you see that bolete
20:50:59 <b_jonas> lol, some of those wisdoms are actually good, not like the ones I write
21:24:21 -!- AnotherTest has quit (Ping timeout: 250 seconds).
21:39:03 -!- ARCUN has joined.
21:40:01 <ARCUN> So Linux has ELF, Windows has PE, and Mac has Mach-o. Would it be possible to create a new executable file format for a new OS?
21:42:04 -!- ARCUN has left.
21:58:43 -!- ARCUN has joined.
21:59:40 <ARCUN> shachaf: No, this is Areallycoolusername. I just put an acronym since my username is too long.
21:59:53 -!- ARCUN has quit (Remote host closed the connection).
22:00:58 <esowiki> [[BFC]] M https://esolangs.org/w/index.php?diff=65607&oldid=58053 * ZM * (+4) Adding backlink to main BF article for convenience
22:01:21 <shachaf> Why do you both do the thing where you join, write one message into the chat, and leave?
22:01:41 <shachaf> Gratuitous joins/quits are annoying.
22:39:28 -!- ARCUN has joined.
22:41:45 <ARCUN> shachaf: This is because there is no telling whether you'll get a response a few minutes after your message has been sent. So instead of waiting for a potentially long amount of time, I quit, and check back on the logs to see if anyone has responded.
22:43:30 -!- Sgeo has joined.
22:45:20 <shachaf> I recommend just staying in the channel.
22:45:55 <shachaf> You don't need to stare at the channel while you wait for an answer, if your computer supports multi-tasking.
22:46:57 <shachaf> Anyway, it would certainly be possible to make your own format. There are plenty of them out there already: https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats
22:48:26 <shachaf> You could just use ELF, which is supported by many systems and fairly simple.
22:49:22 <ARCUN> I was thinking of a format that is automatically made whenever you make a program, so you dont have to run a command to get an executable.
22:49:50 <shachaf> What does that have to do with which format you use?
22:54:43 <ARCUN> No matter the format, you usually have to run a command that turns a program into a runnable executable.
22:55:09 <ARCUN> What if you make a format that is automatically made after making a program
22:55:32 <ARCUN> It's easier on the OS I'm trying to make
22:57:21 <shachaf> "automatically made" isn't a statement about the format but about the process of making.
23:02:10 <moony> I know that the halting problem is uncomputable, but is it possible to prove that a function is a Finite State Machine?
23:04:12 <shachaf> Sure? It's also possible to prove that a program halts.
23:04:14 -!- Phantom_Hoover has quit (Quit: Leaving).
23:05:03 -!- ARCUN has quit (Ping timeout: 260 seconds).
23:06:32 <moony> shachaf: Elaborate?
23:06:59 -!- moei has quit (Quit: Leaving...).
23:16:25 -!- FreeFull has quit.
23:22:22 <shachaf> It's possible to prove that a specific program halts, for example by running it until it halts.
23:22:43 <shachaf> Did you mean a decision procedure?
23:24:36 <moony> Yes, a decision procedure.
23:26:59 <moony> to test if a function is a FSM
23:27:06 <moony> or a lower class automata is that's not possible
23:29:03 <shachaf> I think you'll need to specify what you mean a bit more, but it sounds like the answer is no.
23:30:19 <moony> Is a given function of a program a Finite State machine. Yea, don't think it is.
23:30:34 * moony derp, didn't elaborate
23:31:49 <kmc> moony: you can define a subset of programs that are "obviously" FSMs and can be checked to be such
23:31:56 <kmc> for example by requiring all data structures have an explicit bound
23:32:53 <kmc> but if your language allows unbounded state, then determining whether a given program actually has a bound on how much state it uses should be undecidable
23:33:11 <kmc> that should be an easy reduction from the halting problem
23:34:13 -!- b_jonas has quit (Remote host closed the connection).
23:34:18 <moony> kmc: Thanks. Perfect reliability wasn't a requirement anyways, so just using tests to spot various "obvious" FSMs should be enough
23:34:26 <shachaf> In particular every program that halts is a finite state machine, and halting is decidable for finite state machines.
23:35:40 <moony> Could also augment in checks to catch common unhalting issues
23:35:51 <moony> (as a flag, as there'd be overhead from these kinds of checks)
23:42:20 -!- ais523 has joined.
23:43:25 <ais523> wow, there's one huge advantage to programming an SMT solver: when you want to test that your function does what you expect, you can simply write the properties it's supposed to have and the SMT solver proves that your function has those properties
23:44:13 <ais523> I think all programming languages should work like this
23:44:49 <kmc> that's also why quickcheck is so great, although of course it's not exhaustive
23:45:08 <kmc> it still gets you a huge test suite for very little effort
23:45:28 <shachaf> ais523: You can even ask it to synthesize a function for you!
23:45:51 <shachaf> Well, not quite trivially.
23:46:18 <kmc> i had a dream of a language where you can put arbitrary predicates on types (refinement types) and it will prove what it can at compile time, and quickcheck the rest, and then optionally check at runtime as well
23:46:19 <ais523> shachaf: how? even a nontrivial method, I'd be very interested in
23:47:02 <shachaf> I actually don't have the answer to your question, but my friend keeps telling me about the program synthesis things he was doing with SMT solvers.
23:49:29 <fizzie> Here's the overall structure of this website: <!DOCTYPE> <html> <head>...</head> <body> <form> <input type="hidden"> <!DOCTYPE> <html> <head>...</head> <body> ... </body> </html> </form> </body> </html>
23:49:43 <shachaf> I think this was the project: http://pl.eecs.berkeley.edu/projects/chlorophyll/
23:52:16 <ais523> fizzie: I'm wondering where that <input> tag ends
23:52:34 <ais523> this structure is so illogical that I don't think the normal inference rules would help
23:53:32 <ais523> shachaf: hmm, so pretty close to what I'm doing, just optimised for potato rather than x86
23:54:01 <kmc> that is madness
23:54:08 <kmc> you can parse it and then dump the DOM
23:54:41 <ais523> oh, btw, after answering a couple of Malbolge questions on StackOverflow I had ideas for a worse version of it
23:55:10 <ais523> but am not certain a) if it's TC, or b) letting people see the spec is remotely a good idea
23:55:26 <shachaf> somebody set up us the DOM
23:55:41 <ais523> (the possibilities if it becomes public are that it's ignored, in which case it's neutral as to whether it was released or not, or that people try to program in it, which may be a bad thing)
23:57:38 <shachaf> ais523: Isn't <input type="hidden"> a self-closing tag in HTML?
00:00:04 <ais523> where does the data go, then?
00:00:20 <fizzie> Sorry, I omitted that part, should've put some ... in there.
00:00:33 <fizzie> Both of the DOCTYPEs are XHTML 1.0 Transitional, by the way.
00:00:43 <ais523> it's more fun if inner document is inside the input
00:03:25 <ais523> hmm… if you're going to nest HTML like that there should logically be a </!DOCTYPE> to show where the inner document ends
00:03:40 <ais523> also, if this is /X/HTML, the browser should refuse to display iit
00:05:26 -!- tromp_ has quit (Remote host closed the connection).
00:06:38 -!- zzo38 has joined.
00:24:55 <moony> ais523: you know anything about VSDGs?
00:27:03 <ais523> I don't know what the acronym stands for, which leads me to suspect not
00:27:41 <ais523> Wikipedia doesn't know either
00:27:46 <moony> Value State Dependence Graph. https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-705.pdf
00:33:42 <zzo38> My opinion of PostScript is that it isn't a very good protocol or document format, but it is a OK programming language.
00:39:02 <moony> ais523: was asking because I thought it'd be something you'd be interested in. (I'm considering trying something with it myself)
00:41:04 <ais523> 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
00:41:30 <ais523> 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
00:42:21 <ais523> 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
00:42:35 <ais523> so I didn't really notice they existed
00:43:31 <ais523> (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)
00:43:41 -!- tromp has joined.
00:44:28 <ais523> ooh right: the compiler I wrote for work uses a VSDG-based internal representation, I only just realised
00:45:20 <ais523> 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
00:45:44 <ais523> (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)
00:46:57 <ais523> the other difference is that we had control flow combinators that could introduce loops in the graph
00:48:39 -!- tromp has quit (Ping timeout: 264 seconds).
01:03:11 -!- tromp has joined.
01:07:47 -!- tromp has quit (Ping timeout: 252 seconds).
01:16:29 -!- iovoid has joined.
01:20:50 -!- Sgeo_ has joined.
01:23:55 <ais523> 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
01:24:01 -!- Sgeo has quit (Ping timeout: 268 seconds).
01:24:27 <ais523> because it's a finer-grained representation than typical source is, and there are no ordering constraints unless they're needed for correctness
01:25:26 <ais523> ugh, this VSDG thesis uses «printf("%i",(x++)+(x++));» as an example of code with unspecified behaviour, but the behaviour is actually undefined
01:25:36 <ais523> in particular there's no guarantee that it prints either 0 or 1, like the author expected
01:26:47 <pikhq> Yeah, you're mutating the same l-value twice with no sequence point.
01:26:50 <ais523> «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)
01:27:02 <ais523> `! c printf("%i %i", x++, x++);
01:27:14 <pikhq> I think it might be implementation-defined?
01:27:14 <ais523> did we fix that thing yet?
01:27:38 <pikhq> Though actually, could just be unspecified.
01:27:54 <ais523> `` echo 'int main(void) { printf("%i %i", x++, x++); }' | gcc -Wall -x c -o /tmp/a.out /dev/stdin; /tmp/a.out
01:27:55 <HackEso> [01m[K/dev/stdin:[m[K In function ‘[01m[Kmain[m[K’: \ [01m[K/dev/stdin:1:18:[m[K [01;35m[Kwarning: [m[Kimplicit declaration of function ‘[01m[Kprintf[m[K’ [[01;35m[K-Wimplicit-function-declaration[m[K] \ [01m[K/dev/stdin:1:18:[m[K [01;35m[Kwarning: [m[Kincompatible implicit declaration of built-in function ‘[01m[Kprintf[m[K’ \ [01m[K/dev/stdin:1:18:[m[K [01;36m[Knote: [m[Kinclude ‘[01m[K<stdio.
01:28:09 <ais523> `` echo 'int main(void) { printf("%i %i", x++, x++); }' | gcc -x c -o /tmp/a.out /dev/stdin; /tmp/a.out
01:28:11 <HackEso> [01m[K/dev/stdin:[m[K In function ‘[01m[Kmain[m[K’: \ [01m[K/dev/stdin:1:18:[m[K [01;35m[Kwarning: [m[Kimplicit declaration of function ‘[01m[Kprintf[m[K’ [[01;35m[K-Wimplicit-function-declaration[m[K] \ [01m[K/dev/stdin:1:18:[m[K [01;35m[Kwarning: [m[Kincompatible implicit declaration of built-in function ‘[01m[Kprintf[m[K’ \ [01m[K/dev/stdin:1:18:[m[K [01;36m[Knote: [m[Kinclude ‘[01m[K<stdio.
01:28:27 <shachaf> ais523: I wrote http://slbkbs.org/tmp/2019-08-21-test-cases.txt ; I don't remember whether we talked about all the things in that document.
01:28:37 <ais523> `` echo -e '#include <stdio.h>\nint main(void) { printf("%i %i", x++, x++); }' | gcc -x c -Wall -o /tmp/a.out /dev/stdin; /tmp/a.out
01:28:38 <HackEso> [01m[K/dev/stdin:[m[K In function ‘[01m[Kmain[m[K’: \ [01m[K/dev/stdin:2:34:[m[K [01;31m[Kerror: [m[K‘[01m[Kx[m[K’ undeclared (first use in this function) \ [01m[K/dev/stdin:2:34:[m[K [01;36m[Knote: [m[Keach undeclared identifier is reported only once for each function it appears in \ /hackenv/bin/`: line 5: /tmp/a.out: No such file or directory
01:28:39 <pikhq> ``echo 'int printf(); int main(void) { printf("%i %i", x++, x++); }' | gcc -x c -o /tmp/a.out /dev/stdin; /tmp/a.out
01:28:40 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: `echo: not found
01:28:51 <ais523> `` echo -e '#include <stdio.h>\nint main(void) { int x = 0; printf("%i %i", x++, x++); }' | gcc -x c -Wall -o /tmp/a.out /dev/stdin; /tmp/a.out
01:28:52 <HackEso> [01m[K/dev/stdin:[m[K In function ‘[01m[Kmain[m[K’: \ [01m[K/dev/stdin:2:51:[m[K [01;35m[Kwarning: [m[Koperation on ‘[01m[Kx[m[K’ may be undefined [[01;35m[K-Wsequence-point[m[K] \ 1 0
01:29:01 <ais523> ooh, gcc things it is UB
01:29:21 <ais523> I'm not sure it's right, though
01:29:32 <pikhq> Huh, is the ',' in an argument list not a sequence point?
01:29:36 <pikhq> I would've assumed it was.
01:30:45 <ais523> apparently the function call is a sequence point, but there isn't a sequence point between the arguments
01:31:05 <ais523> `` echo -e '#include <stdio.h>\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
01:31:07 <HackEso> /dev/stdin: In function ‘main’: \ /dev/stdin:2:51: warning: operation on ‘x’ may be undefined [-Wsequence-point] \ 1 0
01:31:22 <ais523> `` echo -e '#include <stdio.h>\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
01:31:23 <HackEso> /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
01:36:33 <ais523> I'm reading the standard to try to determine whether that's UB or not
01:37:00 <ais523> 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
01:37:19 <ais523> (n1570.pdf 6.5.2.2.10)
01:38:46 <ais523> that said, I can't find the part of the standard that makes "modify twice between sequence points" UB
01:38:54 <ais523> I know it exists, or used to, I just can't find it
01:42:18 <ais523> 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."
01:42:40 <ais523> the language has been very tightened up since the earlier C standards
01:42:55 <ais523> `` echo -e '#include <stdio.h>\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
01:42:56 <HackEso> /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
01:43:45 <ais523> 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."
01:44:40 <ais523> 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."
01:45:34 <ais523> "previous and next" is pretty unclear in this case!
01:58:34 -!- tromp has joined.
01:59:57 <shachaf> Is having a pregenerated memory layout that contains pointers a good reason to disable ASLR?
02:01:03 <ais523> I think it depends on how important that pregenerated memory layout it is, and what sort of attack surface your program has
02:03:34 -!- tromp has quit (Ping timeout: 276 seconds).
02:03:35 <shachaf> Go disables ASLR on their binaries (by default?) because they say the language is memory-safe so it's irrelevant and harder to debug.
02:04:27 <ais523> doesn't that make it more likely to be vulnerable to meltdown/spectre-type exploits?
02:05:23 <ais523> 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)
02:05:31 <shachaf> I hear it's often possible to use tricks to get information about memory layout so ASLR isn't that great anyway.
02:05:47 <ais523> well, it depends on how fine-grained it is, I guess
02:06:18 <shachaf> Programs with long loading times would be the candidates for this.
02:06:35 <ais523> 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
02:06:38 <shachaf> I hear emacs used to support loading from a core file instead of from scratch, to make load times faster.
02:07:06 <ais523> but it's still better than being off entirely
02:07:06 <pikhq> Doesn't it still have unexec?
02:07:20 <pikhq> https://github.com/typester/emacs/blob/master/src/unexec.c Ah-yup
02:07:25 <ais523> OTOH, I can imagine a malloc implementation that randomizes the address on every call
02:07:27 <pikhq> Oh, wait, that's ancient bull
02:07:49 <ais523> a.out format executable
02:07:57 <ais523> do those even work on modern Linux? I guess they do
02:08:15 <pikhq> Your distro might not compile in support for it.
02:08:21 <shachaf> 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.
02:08:32 <pikhq> Still, Linux _itself_ has been fantastic at maintaining ABI support.
02:08:44 <pikhq> It's userspace that's been pretty bad at it.
02:08:46 <shachaf> It could be loading assets, which have no pointers and therefore can just load things without pointers into memory.
02:08:55 <ais523> shachaf: in-game load times, the main bottleneck is sending data to the GPU, I think
02:09:06 <shachaf> pikhq: If only the kernel ABI was all you needed!
02:09:09 <ais523> it's pretty much being sent a memory image /already/, with no real computations
02:09:35 <ais523> most games are pretty good about the CPU-related parts of startup time, IME
02:09:45 <ais523> probably not all of them though
02:09:50 <pikhq> shachaf: I mean, you _could_ static link everything.
02:10:06 <ais523> 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
02:10:09 <shachaf> I want to make graphical programs which means I want to use something like OpenGL.
02:10:13 <pikhq> Though if you want to use GL, you are in for a _rough_ time.
02:10:24 <shachaf> By rough you just mean impossible, right?
02:10:29 <ais523> either that or because it's prefaulting the files it uses from disk into memory
02:10:38 <shachaf> The only official ABI for portable hardware-accelerated graphics is dynamic linking.
02:10:41 <pikhq> shachaf: Yeah, basically.
02:11:18 <ais523> wouldn't a statically linked graphical application potentially be limited to one type of GPU anyway?
02:11:36 <ais523> there's no obvious reason why a dynamically-linked-in graphics library would be portable
02:12:08 <pikhq> The fact that the entire GPU interface lives in userspace is fucking awful, but there we are.
02:12:20 <shachaf> OpenGL is a mostly portable API for multiple GPUs.
02:12:32 <ais523> pikhq: I think it's better than, say, drawing scrollbars in kernel code
02:12:39 <pikhq> (okay, not the _entire_, but a sizable chunk of it is)
02:12:47 <pikhq> ais523: I mean yes, but that's the other extreme, ain't it?
02:12:55 <ais523> shachaf: yes, but couldn't two different libraries implement that API, each specialised for a particular card?
02:13:03 <shachaf> "bad thing X isn't as bad as other random bad thing Y" isn't really an argument for thing X.
02:13:09 <ais523> pikhq: yes, but IIRC Windows actually does that, or at least used to
02:13:27 <ais523> so presumably we have to find a tradeoff point in between
02:13:53 <pikhq> The reasonable approach is the kernel provides an abstract interface for the hardware.
02:13:54 <shachaf> ais523: Sure? Those are the different dynamic implementations of libGL.so.
02:14:07 <pikhq> Like it does for every other device.
02:14:21 <pikhq> Nobody has to dynamically link in a hard drive driver.
02:14:48 <shachaf> The hard drive doesn't run software written in a secret instruction set that you only get a compiler into.
02:15:22 <ais523> right, you don't even get a compiler for its secret instruction set
02:15:41 <ais523> 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
02:15:53 <pikhq> shachaf: Which is itself just absurd IMO.
02:15:55 <ais523> (some people have got interesting code running on hard drives, though)
02:15:56 <pikhq> But that's how it evolved.
02:16:26 <ais523> pikhq: I can see potential worries about forwards compatibility, but the real reason is likely to be different
02:16:33 <pikhq> 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.
02:16:58 <ais523> 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
02:17:10 <ais523> CPU microcode is probably secret at least partly for this reason
02:17:44 <pikhq> shachaf: I mean that prior to DRM (the Linux API), X11 mmapped /dev/mem and had access to IO ports.
02:18:07 <pikhq> Which meant that X11 was portable to basically every kernel!
02:18:22 <ais523> pikhq: the latter makes a lot of sense, imagine doing a system call every time you wanted to send a byte to the GPU
02:18:25 <pikhq> ... because it was effectively as privileged as the kernel
02:18:28 <shachaf> The X11 server, but clients had a standard protocol to send drawing commands to.
02:18:44 <shachaf> So from the perspective of someone writing a program it was just part of the platform API. That seems OK.
02:18:56 <shachaf> (Except the protocol presumably didn't allow for very efficient graphics.)
02:19:05 <ais523> a different split would probably involve some sort of X11 renderer that ran in the kernel
02:19:18 <pikhq> Or a kernel generic framebuffer driver.
02:19:25 <pikhq> Similar to fbdev, with more features.
02:20:09 <pikhq> 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.
02:20:10 <ais523> but modern GPU libraries don't want a framebuffer
02:20:15 <shachaf> There are a few other standard ABIs that are only available via dynamic linking, like DNS and user lookup.
02:20:25 <shachaf> But for the most part you can reimplement those yourself with a bit of work.
02:20:33 <ais523> a framebuffer that implies you're doing all your rendering in software
02:20:35 <pikhq> shachaf: musl supports user lookup without it dynamic linking. :)
02:21:03 <ais523> pikhq: what about when PAM is in use?
02:21:13 <pikhq> musl speaks the glibc nscache protocol.
02:21:23 <pikhq> ais523: Oh, yes, for PAM you're still stuck.
02:23:12 <shachaf> Time to scrap all of Linux userspace.
02:24:19 <pikhq> 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.
02:24:24 <shachaf> Given that GPU manufacturers aren't cooperative, what's the best graphics API an operating system could provide?
02:24:51 <ais523> it'd have to be very extensible, I think
02:25:05 <ais523> GPUs keep inventing new features that aren't in any API that existed at the time
02:26:18 <pikhq> And designing brand new APIs to support them.
02:26:45 <pikhq> Not that I can blame them; GL isn't a great fit to GPUs anymore. But even so.
02:27:42 <shachaf> So it still sounds like my answer is that I have to do dynamic linking.
02:27:47 <ais523> I guess one potentially useful extreme would be something like GLSL but a bit more powerful, used to express /everything/
02:28:09 <ais523> although that'd be putting a lot of trust in the compiler to recognise what you were trying to do and optimise it
02:28:53 <pikhq> shachaf: What you could maybe do is limit what the dynamic library is allowed to do.
02:29:17 <pikhq> Like, if you forced that .so to have _no_ dependencies?
02:29:48 <shachaf> But libGL depends on libc and whatever else.
02:29:59 <pikhq> Yes, and that's why it's a problem for ABI compat.
02:30:05 <ais523> 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)
02:30:21 <pikhq> ais523: Long-term ABI stability.
02:30:41 <shachaf> Oh, maybe you're answering the "what could a platform do in general" question, rather than the "what can I do right now" question.
02:30:42 <pikhq> Force libGL to have a fixed ABI and no interaction with things that could possibly change.
02:30:52 <pikhq> Oh, yes, that's what I'm answering.
02:31:36 <ais523> 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
02:31:37 <shachaf> Sure, minimal dependencies would be better, of course.
02:31:39 <pikhq> 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.
02:31:50 <ais523> e.g. you could just place rendered bitmaps in a particular location in shared memory
02:32:02 <ais523> if you don't care about compatibility with X, you could even use the Linux framebuffer!
02:32:11 <pikhq> 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.
02:32:19 <shachaf> ais523: I use a 3840x2160 resolution so software renderers get slow pretty quickly.
02:32:36 <pikhq> 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.
02:32:43 <shachaf> I just want software that's simple and reliable and straightforward to run.
02:33:51 <pikhq> Build software against symbols that are defined in the LSB, and static link in all other dependencies, I guess.
02:34:10 <pikhq> Not a great answer, but that's at least an ABI that's likely to be supported for some time.
02:34:20 <pikhq> (also really limiting)
02:34:31 <ais523> 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
02:34:50 <ais523> and of course there's the issue of security updates too
02:35:33 <shachaf> What sort of dependencies are you talking about?
02:35:40 <pikhq> Problem is, if you don't bundle dependencies you're at serious risk of ABI breakage.
02:35:47 <ais523> shachaf: the most recent time this happened it was zlib
02:36:06 <pikhq> Because the Linux userspace is only somewhat concerned with ABI stability.
02:36:21 <shachaf> How do you "force your OS's versions" of a statically linked library?
02:36:46 <pikhq> You don't, unless they're being aggressively LGPL-compliant. :)
02:36:59 <ais523> shachaf: LD_PRELOAD works, but normally the shipped dependencies have been linked in dynamically anyway which makes it even easier
02:37:04 <pikhq> Typically on Linux, if you're bundling dependencies you're bundling .so files.
02:37:11 <ais523> also the last time this happened I had the program's source available so I just modified it
02:37:21 <shachaf> pikhq: LGPL is bad for many reasons, but one of those reasons is encouraging dynamic linking.
02:37:48 <ais523> (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)
02:38:02 <pikhq> _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.
02:38:24 <shachaf> I'm presumably targeting every common platform.
02:38:45 <pikhq> Well, on Windows this is an easy question to answer.
02:38:52 <pikhq> Ship a binary. It'll outlive you.
02:39:09 <ais523> pikhq: I'm not convinced, I've had plenty of experience with Windows binaries breaking on later versions of Windows
02:39:25 <ais523> I've had programs written against Windows 3.1 break on Windows 98, for example
02:39:33 <pikhq> Okay, granted I'm overselling it.
02:39:39 <ais523> eventually I got exasperated enough to look for any alternative, and ended up moving to SunOS and later Linux
02:39:43 <pikhq> Really, it will _probably_ work, but there's cases where it won't.
02:39:52 <shachaf> I remember Windows XP could still run binaries from Windows 2.
02:40:04 <pikhq> Past a certain point Windows' ABI compat is best-effort.
02:40:13 <pikhq> shachaf: 32-bit Win10 probably still can.
02:40:31 <ais523> 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)
02:43:09 <ais523> …maybe something like WebAssembly is a good way to produce a long-lived executable?
02:43:33 <ais523> being designed to be portable over anything else is also more likely to leave it stable to old programs, and ported to new OSes
02:43:43 <ais523> but it basically has no kernel API to speak of
02:44:04 <shachaf> People are now talking about using WebAssembly to deploy code to their own servers and it seems horrible to me.
02:45:33 <ais523> I actually think WebAssembly is going to be a pretty important technology, maybe not for everything, but for a wide range of applications
02:47:34 <pikhq> shachaf: People be using waaay worse stuff already.
02:48:44 <pikhq> 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.
02:49:09 <pikhq> Perhaps with it effectively running as a kernel, rather than having an underlying OS that mostly is irrelevant.
02:49:43 <shachaf> Yes, people are doing bad things, but that's not an excuse for other bad things.
02:49:54 <shachaf> Docker-style containers are scow.
02:52:29 <pikhq> Conceptually, I don't think so.
02:52:36 <pikhq> Basically every implementation detail is, though.
02:52:37 <ais523> fwiw, I just looked through my old executables and found one written in 2004; it works just fine in Wine
02:55:56 <ais523> 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)
02:56:07 <ais523> presumably they still have viruses from 2004 in their definitions :-)
02:56:47 <pikhq> Win10 says "This app can't run on your PC."
02:57:04 <pikhq> Disappointing, but at least that's a very clear error message.
02:58:07 <ais523> BACKGAM.EXE: MS-DOS executable, NE for MS Windows 3.x
02:58:48 <pikhq> I'm on 64-bit Windows, so there's that.
02:59:10 <ais523> I'm not sure what file's output even means
02:59:20 <ais523> is that a specific sort of PE? or something older
02:59:35 <ais523> the first two bytes are MZ so it's probably PE
02:59:42 <pikhq> That's an older binary file format.
03:00:28 <pikhq> It was the successor to the MZ file format, used by Win16 and OS/2.
03:01:15 <pikhq> The MZ bytes are because NE _also_ supports a DOS MZ stub.
03:02:05 -!- ais523 has quit (Quit: sorry for my connection).
03:02:21 -!- ais523 has joined.
03:02:46 <ais523> presumably it's a 16-bit executable, then
03:02:46 <shachaf> Are there any technical advantages to ELF or PE?
03:03:12 <ais523> there are big technical advantages to arbitrary section support, which I'm not sure ELF's predecessors had
03:03:36 <pikhq> I am pretty sure PE does not support that.
03:03:38 <ais523> do you mean ELF vs. PE, as opposed to ELF and PE compared to their predecessors?
03:04:03 <pikhq> PE is a Windows variant of COFF.
03:04:13 <pikhq> COFF is the binary format ELF was built to improve upon.
03:05:08 <pikhq> Among other things, PE isn't really built to handle relocations in the way that ELF does...
03:05:21 <pikhq> You can do relocations, yes, but they're all textrels.
03:05:33 <ais523> PE relocations are weird
03:05:51 <shachaf> Does that mean modifying the text section?
03:05:56 <pikhq> 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.
03:06:13 <ais523> 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
03:06:23 <ais523> but if they did there would be a need to relocate everything
03:06:28 <pikhq> On x86_64, the code's just intrinsically PIC, so this doesn't happen
03:06:37 <ais523> like, every address in the code needs changing
03:08:20 <ais523> hmm, after reading up a bit on PE, I have decided it is insane
03:08:58 <ais523> ELF has been adopted by most operating systems, not just Linux (although Mac OS X uses its own thing)
03:09:28 <pikhq> 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.
03:09:43 <ais523> PE does support arbitrary sectiions, though
03:09:56 <shachaf> PE supports specifying your desired stack size, which ELF doesn't seem to.
03:10:06 <shachaf> But it seems there may be a GNU extension (which Linux ignores so it's irrelevant).
03:10:18 <ais523> https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats seems useful
03:11:40 <shachaf> Oh, I should've thought to look there.
03:11:48 <shachaf> PE files can contain an icon! That's a big advantage.
03:13:07 <shachaf> I don't see a reason an executable program should be more than one file by default.
03:13:16 <shachaf> Including .so files with your program just seems ridiculous.
03:13:54 <ais523> 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)
03:14:07 <ais523> Windows uses the same general mechanism for lots of purposes, some of which are insane
03:14:26 <shachaf> I know someone who includes information about command line arguments in an ELF section.
03:14:28 <ais523> "this is my icon" seems like a reasonable use though
03:14:50 <ais523> shachaf: I think there should be a machine-readable command line arguments standard
03:17:08 <ais523> fwiw, the icon system on Ubuntu (and presumably other distributions?) appears to allow the desktop theme to override icons
03:17:33 <ais523> which is mostly used for generic icons like "text editor" that multiple programs are allowed to use
03:18:31 <zzo38> I think the program shouldn't need icons, and just the text is good enough mostly
03:19:43 <pikhq> Yeah, that's Freedesktop behavior I think.
03:20:12 <ais523> "ownership" of programs seems to be very different on different OSes
03:20:31 <ais523> for example, Windows < 8 used to organize programs on the Start menu by manufacturer
03:20:49 <ais523> and they're probably still organised that way in Program Files
03:21:18 <ais523> whereas the FHS suggests chopping them up into pieces, storing each file in a directory appropriate to its purpose
03:21:49 <pikhq> The FHS is also assuming most of the FS hierarchy is owned by the OS.
03:22:16 <pikhq> 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.
03:23:28 <ais523> ooh, that's a good way to express the difference betwen /opt and /usr/local
03:24:06 <ais523> this implies that packages should aim for /usr if being uploaded to the OS package manager, and /opt if being sideloaded, right?
03:24:21 <ais523> (with /usr/local being for things that were built manually)
03:26:22 <\oren\> http://orenwatson.be/v0tgil.htm#vocabpics
03:27:02 <shachaf> I'm confused. Is that supposed to be a phonetic spelling?
03:27:39 <shachaf> Oh, this isn't an English thing, never mind.
03:27:45 <\oren\> it's vötgil, a IAL that's so bad it's hilarious
03:28:15 <\oren\> and therefore, I have started learning and using it and making resources about it
03:28:31 <shachaf> whoa, https://en.wikipedia.org/wiki/ALGOL_58
03:28:40 <shachaf> I didn't know there was such a thing as ALGOL 58.
03:29:10 <shachaf> Have you considered the following novel thesis:
03:29:15 <shachaf> Good things are better than bad things.
03:29:20 <\oren\> When was the first actual compiler for ALGOL made
03:29:31 <pikhq> \oren\: This is... not a good language.
03:30:00 <pikhq> "Every word in Vötgil has exactly three letters"
03:30:06 <\oren\> wait till u see the grammar
03:30:09 <pikhq> Ah, I _see_, you're doing Toki Pona only less well
03:30:49 <\oren\> nah the grammar has infinite recursion,unlike toki pona
03:31:14 <pikhq> Wow, that grammar is actually pretty shit
03:32:16 <\oren\> also it differs from toki pona in having lots of words for manmade objects
03:32:32 <pikhq> And in not having much of a point, good or bad
03:32:49 <pikhq> (I mean, Toki Pona is silly, but at least it has a reason for being the way it is)
03:33:00 <ais523> and Minecraft support? or does Toki Pona have that too?
03:33:15 <pikhq> 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.
03:33:24 <\oren\> I think there is a mincraft localizationfor toki pona
03:33:57 <pikhq> Hah, caaaalled it. The vocab is all supposed to be English-cognate.
03:34:09 <\oren\> well, the funny thing is, it looks like english up until you interpret eisenmann literally
03:34:35 <\oren\> he says, e.g. a descriptor always goes before the word it describes
03:34:45 <\oren\> so you have to say the bird red is
03:36:08 <\oren\> and a preposition goies between the words it modifies
03:36:37 <\oren\> which means a preposition has to attach to the verb, *before* the direct object
03:37:49 <pikhq> So, either the grammar works nothing like he intends, or he is just bad at describing the grammar in a clear way.
03:37:56 <\oren\> I make with wood a house
03:38:03 <ais523> wow that grammar is bad
03:38:42 <\oren\> the grammar is based on me interpreting eisenmann literally and paying no attention to his example sentences
03:38:59 <pikhq> That is at least the more interesting version.
03:39:07 <pikhq> Because his examples seem to suggest "lol it's English"
03:39:13 <\oren\> because if I went by his examples it would just be english
03:39:38 <\oren\> he's since moved on to breadspeak
03:39:52 <\oren\> (yes, that's the name of his current conlang)
03:40:19 <ais523> something seems odd about a conlang whose vocabulary is so English-inspired
03:41:20 <\oren\> I mean,volapük was also full of clipped english words
03:41:43 <\oren\> with some german ones like klig (war)
03:41:50 <ais523> Esperanto is a kind of consensus-Indo-European, which makes more sense
03:43:41 <pikhq> Though consensus-Indo-European as viewed by a Russian speaker, which is a bit weird phonotactically.
03:44:22 <\oren\> Another interesting thing is vötgil has morpemic roots for such meanings as "foot" "pound" "dollar" "mile" and "gallon"
03:45:31 * ais523 is wondering if it would be possible for a conlang to actually be a con, as in confidence trick
03:46:02 <pikhq> What, like Interlingua?
03:47:11 -!- tromp has joined.
03:51:19 -!- tromp has quit (Ping timeout: 250 seconds).
04:59:03 -!- ais523 has quit (Quit: quit).
05:26:05 <shachaf> Does your text section have to be called .text?
05:32:08 <moony> As far as i'm aware, i don't think so? Why not test
05:33:34 -!- oerjan has joined.
05:35:03 -!- tromp has joined.
05:36:19 <shachaf> Well, it's certainly not true for executing ELF files, since sections are ignored entirely.
05:36:30 <shachaf> I was wondering whether there's some situation where some linkers expect it.
05:40:01 -!- tromp has quit (Ping timeout: 276 seconds).
05:53:47 <oerjan> <int-e> 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
05:56:25 <oerjan> iow, `1 and `2 share the same chopping into lines, `2 just starts displaying the second one.
06:12:57 <shachaf> Shouldn't `2 handle that case?
06:34:00 -!- tromp has joined.
06:41:50 <oerjan> if it did, then it would break if you cycle back to line 1 because now it's longer than the cutoff
06:42:21 <shachaf> It could break that line into two lines and then show line 3.
06:42:30 <shachaf> That's certainly not confusil.
07:13:10 -!- tromp has quit (Remote host closed the connection).
07:28:59 -!- tromp has joined.
08:31:00 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
08:32:48 -!- Lord_of_Life has joined.
08:43:14 -!- AnotherTest has joined.
08:48:07 -!- tromp has quit (Remote host closed the connection).
08:56:23 -!- tromp has joined.
09:29:41 -!- oerjan has quit (Quit: Later).
09:51:20 -!- wob_jonas has joined.
09:51:52 -!- tromp has quit (Remote host closed the connection).
10:01:28 -!- tromp has joined.
10:01:30 <wob_jonas> 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,
10:01:57 <wob_jonas> and this impacts some other simple one-instruction languages too.
10:04:25 <wob_jonas> 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.
10:04:41 <wob_jonas> I don't think I've ever seen an a.out executable alive, I only read about them in history books.
10:07:01 <wob_jonas> 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
10:09:33 <wob_jonas> 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
10:10:10 <wob_jonas> 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
10:10:55 <wob_jonas> 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.
10:12:21 <wob_jonas> and note that even for the file system, mkfs and fsck and tune2fs and fdisk are still in userspace
10:13:26 <wob_jonas> 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
10:14:07 <wob_jonas> 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
10:17:13 <wob_jonas> "<shachaf> 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
10:17:14 <wob_jonas> 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.
10:17:43 <wob_jonas> 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.
10:19:02 <wob_jonas> 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.
10:20:16 <wob_jonas> 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
10:22:03 <wob_jonas> 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
10:22:35 <wob_jonas> we used to have kernels that were just one megabyte long, I'd like that back
10:22:58 <wob_jonas> (one megabyte long with full reiserfs support)
10:23:47 <shachaf> glibc is a mess and every time I have to read the code for anything in it I'm sad.
10:23:52 <wob_jonas> "<ais523> and of course there's the issue of security updates too" => excatly
10:24:07 <shachaf> Still not as sad as when I have to read anything in /usr/include/c++/, of course.
10:24:12 <wob_jonas> 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
10:24:33 <wob_jonas> shachaf: why? do you get underscore sickness?
10:24:41 <shachaf> Underscores are only a small part of it.
10:24:55 <shachaf> If there were good userspace libraries I'd be more sympathetic to that advice.
10:25:06 <wob_jonas> 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
10:26:06 <shachaf> Why are you saying not to worry because it'll get worse?
10:26:12 <shachaf> I'd prefer for it to get better.
10:27:57 <wob_jonas> "<ais523> …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?
10:29:12 <shachaf> 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.
10:30:57 <wob_jonas> "<shachaf> 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
10:33:57 <shachaf> I think it's because of the LGPL or because of everything being bad and people just doing whatever.
10:36:39 -!- cpressey has joined.
10:39:47 <wob_jonas> shachaf: I don't think it's because of LGPL that libc is bad
10:42:26 <cpressey> People get things to work and don't care that the result is ugly because, well, they work.
10:42:54 <wob_jonas> cpressey: sure, I know, I work with computers too, I know how it goes
10:42:56 <cpressey> This is by no means unique to software.
10:43:24 <wob_jonas> the next project is always urgent, there's never time or motivation to clean up the previous one to work properly
10:43:59 <wob_jonas> 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.
10:44:10 <cpressey> Why people think they need more and more new versions of C, though -- that, I'm not sure of.
10:44:54 <cpressey> Aha. At least C18 was basically a bugfix update. This makes me relatively happy.
10:45:47 <cpressey> C2x looks like a trainwreck though.
10:45:50 <wob_jonas> 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.
10:46:30 <wob_jonas> 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.
10:47:31 <wob_jonas> 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.
10:49:06 <cpressey> I'm only going by what I saw when glancing at Wikipedia articles.
10:49:46 <wob_jonas> 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.
10:50:46 <wob_jonas> 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.
10:51:26 <wob_jonas> 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.
10:52:19 <wob_jonas> 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.
10:53:03 <cpressey> What C needs most is better static analysis, to actually prevent the buffer overruns and use-after-free's and so forth.
10:53:29 <wob_jonas> cpressey: I don't think that's the task of C. that's the task of higher level languages like rust.
10:54:19 <cpressey> Erm well, then you could say, what the world needs is to stop using C so much.
10:54:44 <wob_jonas> cpressey: no, some people can use C just fine without making their code full of stupid bugs
10:55:08 <wob_jonas> all the linux kernel people mostly manage it too
10:55:49 -!- xkapastel has joined.
10:55:53 <wob_jonas> 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
10:56:23 <wob_jonas> most of the time, when I write code, I don't mind the bounds-checked and memory safe operations, even if they're slower
10:56:50 <wob_jonas> 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++
10:57:04 <cpressey> I'm of the opinion that if you need to optimize it *that* much, you probably should just use assembler anyway
10:57:20 <wob_jonas> 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
10:57:27 <wob_jonas> I don't recommend it to most people, but some people do manage it fine
10:58:12 -!- tromp has quit (Remote host closed the connection).
10:58:23 <wob_jonas> 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
10:58:41 <wob_jonas> but sure, sometimes you want to write the code directly in assembler, as ais523 says
10:59:05 <wob_jonas> 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
10:59:22 <shachaf> wob_jonas: No, people ship .so files with their executables because of the LGPL.
10:59:42 <wob_jonas> it would be really inconvenient to do the boundary part if all you had was mandatory memory-safe high-level languages and machine code
10:59:43 <shachaf> cpressey: They work but they don't work well.
11:00:02 <wob_jonas> you'd effectively need to define the rules of C, perhaps without the compiler and concrete syntax, to do it
11:00:35 <wob_jonas> and note that gcc can do inline assembly where stuff is passed to assembly code through specific registers, and even condition flags now
11:01:01 <wob_jonas> (the gcc syntax is a bit awkward, but if you deal with writing your own assembly code, you can learn it too)
11:01:43 <HackEso> =@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 .
11:02:05 <wob_jonas> ^ that's one of the secret incantations, the other is the syntax to pass a variable to inline asm in a specific register
11:03:44 <wob_jonas> 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
11:04:08 <wob_jonas> I have done this in my previous job for image processing stuff
11:05:20 <wob_jonas> 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
11:05:30 <wob_jonas> I may also meet a case when I need to
11:09:53 <cpressey> 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.
11:10:35 <wob_jonas> cpressey: I was using C++, and not portable one either
11:10:57 <wob_jonas> one that basically tells which AVX instruction to use
11:11:16 <wob_jonas> and optimized for the AVX instruction set
11:13:12 <wob_jonas> hopefully soon I'll be able to write that directly in rust
11:13:33 <wob_jonas> they already have a decent backend for the compiler
11:13:49 <wob_jonas> and they added some of the x86-specific stuff
11:14:27 <wob_jonas> not as good as C++ for that sort of thing yet, but improving
11:17:01 -!- tromp has joined.
11:17:22 <cpressey> "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
11:18:33 <wob_jonas> cpressey: most of the software I write is throwaway one used for research that nobody else will run on their machine
11:19:16 <wob_jonas> and care about the kernel and image editor and video compressor and other programs doing all their nonsense efficiently too
11:19:22 <myname> i love that rust ships with a complainer
11:19:47 <wob_jonas> not the browser, or the tax filing software, mind you
11:19:58 <wob_jonas> myname: perl does too, it's an old idea
11:20:14 <wob_jonas> well, depends on which complainer you mean
11:20:38 <int-e> cpressey: ah but are you willing to pay a reasonable price for that?
11:20:40 <wob_jonas> do you mean the one that gives the long explanation for error messages, or the lint-like tool?
11:21:15 <myname> mainly the type- and memory-checker
11:21:32 <wob_jonas> myname: sorry, I mean the former is rustc --explain, the latter is clippy
11:21:45 <wob_jonas> but apparently you just mean that rustc gives decent error messages
11:21:46 <int-e> 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.
11:21:59 <wob_jonas> don't worry, it will no longer be able to keep it up once they make the generic system powerful enough
11:22:11 <myname> wob_jonas: i mean that rust enforces you to write clean code by design
11:22:28 <int-e> (And more difficult too)
11:23:07 <wob_jonas> 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
11:23:25 <wob_jonas> python is sort of like that too by the way
11:24:20 <wob_jonas> 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,
11:24:34 <wob_jonas> install it to HackEso, document it, and submit it to the python guys to perhaps get it adapted officially.
11:25:08 <wob_jonas> 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++)
11:25:42 <myname> i hate the errors i make in python
11:26:20 <myname> like, "foo"+bar with bar beint a number will throw an error. i kinda get that, but i hate when it happens
11:27:11 <int-e> wouldn't it be grand if there was a type checker to catch those...
11:27:20 <cpressey> 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.
11:27:53 <cpressey> 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
11:27:55 <myname> 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
11:28:05 <cpressey> and with no specification, what are you even doing
11:28:05 <int-e> cpressey: Yeah I'm afraid tests will remain state of the art for some time still.
11:28:11 <myname> but no, python decides to play along until it doesn't
11:28:54 <cpressey> 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.
11:29:29 <myname> is prooving code in production really something people do?
11:29:51 <int-e> 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.
11:30:31 <myname> cpressey: interesting.have to have a look if there are useful frameworks for that
11:30:34 <cpressey> myname: Amazon something something AWS, Microsoft something something USB stack, I'd have to find the references
11:30:38 <wob_jonas> 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?
11:30:53 <int-e> cpressey: Dependent type systems leave that sweet spot behind (type inference doesn't work anymore) so I'm rather skeptical of those.
11:31:02 <wob_jonas> I haven't. I tried, but they take a very long amount of time to run.
11:31:34 <cpressey> int-e: Liquid Types are a sweet spot between dependent types and HM :)
11:31:42 <myname> i assume haskell to be relatively easy to proof first order properties for
11:32:22 <myname> i don't know where to even start for something like java without a full-blown model checker
11:32:27 <wob_jonas> 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.
11:32:37 <int-e> cpressey: hmm new keyword for me
11:32:56 <int-e> or possibly buzzword, need to see about that
11:33:05 <cpressey> int-e: https://wiki.haskell.org/Liquid_Haskell
11:36:15 -!- tromp has quit (Remote host closed the connection).
11:36:35 <int-e> Meh, it mentions "stack". :-P
11:36:43 <cpressey> int-e: I agree "Liquid Types" is a horribly-hip-sounding name.
11:37:02 <cpressey> Short for "logically qualified types" I believe
11:38:04 <int-e> https://www.microsoft.com/en-us/research/video/liquid-types/ agrees
11:38:30 <cpressey> 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)
11:39:42 <myname> okay, should be fairly easy there
11:40:13 <int-e> "What Are 10 Examples of Liquids?" - "liquid types" is not the perfect search term.
12:06:26 <cpressey> 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
12:08:40 <int-e> "MVars have race conditions"?
12:09:15 <int-e> cpressey: Maybe you mean deadlocks?
12:09:19 <wob_jonas> do you have any specific questions?
12:09:34 <cpressey> "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."
12:09:51 <int-e> I don't get the race conditions angle.
12:10:19 <int-e> The other two, yes, they are true.
12:10:24 <cpressey> All of Control.Concurrent seems to read like this. "We have these but you shouldn't use them, really"
12:11:43 <int-e> You have to think about lock dependencies with MVars.
12:11:59 -!- tromp has joined.
12:12:20 <int-e> (Assuming you use MVars as locks. MVars are also mailboxes, message queues of length 1.)
12:12:55 <wob_jonas> you also have to think of deadlocks when you use them as queues
12:13:13 <int-e> MVars are *simple*. STM is a huge black box.
12:13:13 <myname> 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"
12:14:37 <cpressey> 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.
12:15:15 <int-e> cpressey: So, again, I agree with that quote, except for the race conditions part, which to me suggests a completely broken MVar implementation.
12:15:28 <myname> do you have any opinion about eta/frege?
12:17:10 -!- tromp has quit (Ping timeout: 276 seconds).
12:18:11 <int-e> 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...
12:20:08 <wob_jonas> or people just write bad code with MVars, which has race conditions that put their own high-level data in a corrupt state
12:20:25 <int-e> (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.)
12:20:44 <wob_jonas> yeah, specific questions are better
12:20:54 <cpressey> myname: I'm not generally a fan of languages that are slight variations on other languages.
12:20:55 <wob_jonas> especially with code samples and expected output and stuff like that
12:21:06 <int-e> Do we have real-life stories of STM livelocks?
12:21:38 <int-e> Or maybe just a scenario where the rts spends 99% of the time in managing the STM transactions, so nothing productive happens?
12:22:06 <myname> cpressey: valid point, but both are not really aimed to be slight variations afaik
12:22:17 <int-e> 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?
12:23:07 <cpressey> 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)
12:23:58 <cpressey> "Frege is a Haskell for the JVM." ... What does it mean to be "a Haskell"?
12:24:16 <int-e> 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.
12:24:19 <cpressey> If it was "Frege is a Haskell compiler for the JVM" that would be fine
12:25:27 <int-e> cpressey: Maybe you should learn you a Haskell for the greater good!
12:25:50 <int-e> (typing this is painful)
12:29:04 <myname> both attempt to compile haskell for the jvm with different approaches
12:29:17 <myname> frege does overload the dot operator, for example
12:29:29 <myname> like, foo.bar is different from foo . bar
12:29:59 <cpressey> 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.
12:31:29 <cpressey> int-e: I would believe that STM scares off everyone who is not already rather expert at writing concurrent code, yes
12:40:59 -!- arseniiv has joined.
12:52:06 -!- Vorpal has quit (Ping timeout: 258 seconds).
13:23:02 <cpressey> I'll probably just use Control.Concurrent.Chan when it comes to it, it should be fine (single reader, multiple writers, nondeterminancy is okay).
13:26:36 <int-e> 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).
13:27:51 <int-e> STM doesn't solve that one, and bounded channels are comparatively crude.
13:33:17 <cpressey> int-e: I don't see any mention of what it means for a channel to become full, in the Chan docs
13:34:41 <cpressey> In fact it mentioned the word "unbounded"
13:34:53 <int-e> Yes. Which hides a problem...
13:35:31 <int-e> ...namely, if your reader cannot keep up with the producers, you have a (kind of) memory leak at your hands.
13:35:56 <cpressey> Ehm. Technically yes. In practice, this is unavoidable though, right?
13:36:23 <int-e> Sure but you can be more clever about it, if your scheduler knows about channels.
13:37:02 <wob_jonas> In some cases, the producer can block, or detect the problem and drop frames
13:37:03 <int-e> 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 :)
13:38:20 <int-e> (And something that I found surprising when I first heard about it.)
13:38:49 <int-e> (And that's the main reason I bring it up. It could be a pretty nasty surprise.)
14:39:28 -!- ais523 has joined.
14:40:39 <ais523> wob_jonas: wait, how is a[a[a[x]]]++ UB? the increment has to happen after all the array dereferences
14:41:31 <wob_jonas> ais523: isn't it an UB if it increments a[x] or a[a[x]] because the indexes coincide?
14:42:08 <ais523> no, because the dereference is sequenced before the increment as the increment uses its output
14:42:15 <int-e> that needs a language lawyer, I think
14:44:33 <ais523> 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
14:44:46 <int-e> 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.
14:44:53 <wob_jonas> 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
14:45:20 <wob_jonas> but I think the post and preincrement has or had extra UB rules more strict than for other assignments
14:45:29 <ais523> <wob_jonas> (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?
14:45:32 <wob_jonas> so that they can be rearranged by the optimizer
14:45:54 <ais523> wob_jonas: /that/ example is UB because the ++s aren't sequenced with respect to each other
14:47:21 <ais523> <int-e> 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
14:47:42 <ais523> I've actually written code in the last form, it taking 1000 times longer than expected seems about right
14:48:19 <ais523> (the programs being verified were very simple and would normally take less than a minute to write)
14:48:42 <int-e> I think I include some amount of debugging and testing in the "just coding" category already.
14:49:14 <ais523> yes, but you can have a project that's heavily tested and yet still be confident that it's wrong
14:49:15 <int-e> And sure, the factor is worse for programs that you already know how to write :P
14:49:20 <ais523> because the spec implies a lot of hidden complexity
14:49:45 <ais523> "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
14:50:06 <int-e> Because, ironically, you will *not* know in detail *why* they are correct; you'll be replicating an internalized pattern instead.
14:50:34 <ais523> 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
14:51:08 <cpressey> ais523: I think that's also kind of a weakness though. You can't check a program against itself.
14:51:12 <int-e> (I have also written formally verified code. It wasn't trivial, and I think a factor of 100 is pretty much what we got.)
14:51:24 <int-e> machine-checkable.
14:51:51 <cpressey> (Well ok you CAN, but it's a tautology.)
14:51:55 <ais523> cpressey: I guess you'd need to get two different people to write the /specification/ and see if the programs matched
14:52:03 <ais523> which would be useful, because buggy specifications are very common
14:52:15 <ais523> I did a thought experiment about FizzBuzz recently
14:52:26 <cpressey> ais523: Basically yes, it's kind of like coding theory. 3 specifications would be ideal, you could go with majority-rules
14:52:29 <int-e> Oh, target language makes a difference... we exported code to Haskell in the end, and purity helps.
14:52:49 <int-e> If you want mutable data structures, things get worse.
14:53:35 <ais523> 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"
14:53:56 <int-e> "the program /is/ the spec" <-- in many cases that's only true if you don't care about performance...
14:54:17 <ais523> 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?"
14:54:47 <ais523> "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?"
14:55:02 <ais523> "how do we parallelise this?"
14:55:12 <ais523> int-e: I see that as a deficiency in the languages more than anything else
14:55:13 <wob_jonas> 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
14:55:47 <wob_jonas> and so are other cases where there's only one assignment and that's the outermost expression
14:56:15 <cpressey> ais523: Well, you can definitely give a specification which doesn't entail any particular efficient implementation strategy; how should such a language pick one?
14:56:30 <wob_jonas> at least according to the C11 rules
14:56:39 <cpressey> I mean, ideally, yeah, you could give it hints in comments or something, but - far from an easy problem
14:57:02 <int-e> 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.
14:57:44 <int-e> So that will be part of the program...
14:57:54 <ais523> cpressey: I don't think it's impossible that computers will eventually be better at that than humans
14:58:06 <int-e> Maybe in an ideal world where we could solve the halting problem my attitude would be different ;-)
14:58:33 <ais523> 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)
14:58:46 <int-e> Yeah that's a classic.
14:58:49 <ais523> and thought this might actually be viable in a golfing language
14:59:21 <int-e> It usually comes up in the following form: "We can write a TM that solves SAT in polynomial time iff NP \subset P"
15:00:10 <int-e> (the point with NP being that we can check in polynomial time whether we've succeeded)
15:00:20 <ais523> 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
15:00:46 <ais523> also I'm pretty sure you don't mean \subset there, you probably mean either = or \subseteq
15:00:50 <int-e> (which is something you need, really; "all possible algorithms" need to be filtered for correct algorithms for your task at hand, somehow)
15:00:56 <ais523> (which are equivalent in this case because P \subseteq NP)
15:01:24 <int-e> Yes I mean \subseteq.
15:01:49 <int-e> I wanted to write NP (= P :P
15:02:22 * ais523 suddenly realises that (= and =) as operators would not be ambiguous in a C-like language, although )= would be
15:02:36 <int-e> (which Isabelle/jEdit expands to ⊆.)
15:02:46 <ais523> err, LALR(1)-ambiguous, that is; )= might be unambiguous if you have a generael parser
15:03:54 <int-e> . o O ( a =( b && c )= d <-- it would be horrible nontheless )
15:04:18 <cpressey> Still waiting for the esolang that uses Earley or CKY to find all possible parses and interpret them all in parallel
15:04:19 <ais523> int-e: you wrote =( not )=, which is what the unambiguity relies on
15:04:45 <ais523> cpressey: that's probably only interesting if this is somehow the only way to gain TCness
15:05:13 <int-e> anyway... let's drop this
15:05:23 <int-e> it's a tangent of a tangent anyway
15:05:33 <int-e> (not speaking geometrically)
15:05:34 <ais523> isn't that what the channel's about? :-)
15:05:57 <ais523> geometrically, a tangent to a line is the line itself, and tangents are lines, so you can't stack them more than one level
15:06:34 <int-e> indeed. hence the qualification.
15:06:58 <ais523> anyway, I had ideas about a declarative golfing language which makes a guess about what order to run the commands in
15:07:34 <ais523> basically by knowing what the computational complexity of each possible flow pattern for each command is, then trying to avoid bad complexities
15:08:08 <ais523> 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
15:08:51 <cpressey> finding the path of least complexity sounds rather complex by itself
15:09:20 <ais523> yes, but that's O(whatever) in the size of the program, not the size of the data it processes
15:09:45 <ais523> this explains where the controversy over the computational complexity of regex-with-backreferences comes from
15:09:58 <ais523> you can find articles online saying it's NP-complete, but I think it's in NL
15:10:03 <int-e> cpressey: Hmm. "Insulting instruction in step $rs.\n" <-- do you recognize this?
15:10:45 <ais523> 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
15:11:02 <int-e> cpressey: you're good :)
15:11:24 <cpressey> Very few of the languages I've designed have used the term "step"
15:11:47 <ais523> a very long time ago, I started writing an esolang-based text adventure
15:12:04 <ais523> it had a set of stairs where the steps were SMETANA commands, and swapped around as you tried to climb them
15:12:31 <ais523> (but you could go up or down, making it into a puzzle)
15:13:47 <cpressey> ais523: regex-with-backreferences is CFL, isn't it?
15:14:31 <wob_jonas> "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
15:14:40 <ais523> cpressey: no, it's more powerful; it can solve a^n x a^n x a^n which a CFL can't
15:15:34 <ais523> 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
15:15:39 <int-e> 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.)
15:16:20 <wob_jonas> "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
15:16:33 <ais523> 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?
15:16:59 <ais523> codegolf.stackexchange.com persuaded me to allow omission of the final newline in BuzzFizz, but I'm not sure that's correct
15:18:23 <int-e> This is non-technical, but I hate it when cat-ing a text file messes up my next prompt, so I like final newlines.
15:18:25 <ais523> that said, "text files must end with a newline" is an archaic rule that very few people seem to care about nowadays
15:18:35 <int-e> (Yes I could use a different prompt, but that's besides the point.)
15:18:42 <wob_jonas> 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)?
15:19:05 <ais523> 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
15:19:29 <ais523> 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
15:19:37 <ais523> #include <file> normally has a newline after it anyway, though
15:19:40 <wob_jonas> 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
15:20:02 <cpressey> Page feed is underrated, that's all I'll say
15:20:17 <wob_jonas> "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
15:20:23 <ais523> cpressey: you mean formfeed? or is this a new control character I'm unaware of?
15:20:53 <ais523> 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)
15:20:53 <int-e> ais523: in practice it's probably least controversial to just treat the end-of-file as a newline unless immediately preceded by a newline.
15:21:08 <wob_jonas> #include <file> normally has a newline after it anyway, though => the C syntax does, sure, but the TeX \includefile is weirder
15:21:19 <ais523> wob_jonas: I can't think of a terminal control code that would have that effect non-interactively
15:21:25 <arseniiv> on control characters: one time I was enamored by US, RS, GS and FS (an alternative to CSV)
15:22:07 <ais523> 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
15:22:18 <ais523> even then you need to know the terminal width to do it, though
15:22:39 <ais523> arseniiv: I can see RS and FS as a CSV alternative
15:22:45 <ais523> what do the other two do, though?#
15:23:04 <wob_jonas> ais523: uh, "\b\r\n" sort of, but I'm not sure it works in the first line
15:23:35 <wob_jonas> 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
15:23:36 <ais523> \b\r\n is equivalent to \r\n on just about everything, I think
15:24:00 <ais523> just tested gnome-terminal
15:24:02 <wob_jonas> ais523: hmm, I don't remember how that worked
15:24:37 <wob_jonas> ais523: yeah, cursor-right with an arg count might work better
15:24:42 <arseniiv> 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…
15:24:46 <ais523> 'as many spaces as the width of the terminal, then a "\r"' does work, just tested that
15:25:11 <ais523> arseniiv: oh, file separator not f ield separator
15:25:33 <wob_jonas> arseniiv: \x1F is for the biggest blocks, \x1C is for the smallest blocks, in sequence for the two between, forget their names
15:25:40 <ais523> I'm upset at people not caring about the C1 control codes
15:25:59 <ais523> there's a Unicode encoding, UTF-1, that's designed to allow them all to be given literally
15:26:05 <ais523> but it's not very popular
15:26:17 <arseniiv> ais523: wob_jonas: found it: https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text thought wob_jonas has said it already
15:26:55 <wob_jonas> arseniiv: no, I got them backwards
15:27:03 <wob_jonas> it's backwards from how it should be
15:27:14 <wob_jonas> \x1C is for the largest blocks and \x1F for the smallest
15:27:25 <wob_jonas> that always annoys me so I should have remembered
15:27:31 <arseniiv> I was mixing them up once I think too
15:27:57 <ais523> 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
15:28:07 <ais523> I guess that makes clashes less likely, but it's also less semantically correct
15:29:40 <arseniiv> also you may laugh but I once thought that UTF-1 (by some dark magic) is a 1-bit encoding
15:30:57 <ais523> that doesn't seem particularly implausible?
15:31:04 <arseniiv> UTF-8, UTF-16, UTF-32 and UTF-7 all contributed to this, yeah
15:31:20 <arseniiv> though I think I hadn’t known the last one then
15:31:23 <ais523> you'd just find some arbitrary-width numeric encoding (e.g. Fibonacci encoding), use it to encode all the codepoints, and concatenate
15:32:06 <ais523> (also a UTF-6 but, confusingly, it's a 5-bit encoding)
15:32:25 <ais523> and UTF-9 which was an April Fools RFC
15:33:00 <ais523> <Wikipedia> The use of UTF-32 under quoted-printable is highly impractical
15:34:15 <ais523> huh, UTF-1 is actually more efficient in space usage than UTF-8 up to and including U+38E2D
15:34:19 <wob_jonas> UTF-5 and UTF-6? I hadn't heared of those
15:34:44 <ais523> basically because it doesn't limit continuation bytes to a particular range, they can be ASCII or extra start bytes
15:36:24 <ais523> 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
15:37:25 * ais523 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
15:37:36 <wob_jonas> 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
15:38:29 <ais523> although it's confusing to read because it gives character codes in decimal-coded-hexadecimal
15:38:59 <ais523> it refers to Ecma-35 for encoding handling, though, and Ecma-35 compatibility is why things like UTF-1 were invented
15:39:11 <wob_jonas> 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
15:40:00 <ais523> wob_jonas: I was planning to do that anyway
15:40:09 <ais523> but it's not particularly useful because C1 codes can be encoded using C0 codes
15:40:18 <ais523> (for the benefit of 7-bit terminals)
15:40:23 <ais523> and that only makes them a byte longer
15:40:39 <ais523> 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
15:42:16 <ais523> 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
15:46:59 <ais523> ooh, I /finally/ understand the distinction between presentation and data cursor movement commands
15:47:08 <ais523> it's to do with right-to-left languages
15:47:23 <ais523> the presentation cursor movement commands move, e.g., "left" or "right"
15:47:37 <ais523> the data cursor movement commands move, e.g., "forwards" or "backwards" through the text
15:47:49 <ais523> so the correspondence between them is different when over LTR text and when over RTL text
15:48:52 -!- ais523 has quit (Quit: sorry for my connection).
15:49:05 -!- ais523 has joined.
15:52:29 <wob_jonas> ok, chapter 5.4 in ECMA 48 is relevant.
15:54:06 <kmc> it's control codes hour
15:54:11 <kmc> any good esolangs based on ECMA-48?
15:54:39 <ais523> arguably Ecma-48 /is/ an esolang
15:54:44 <ais523> apart from that, probably not
15:55:33 <wob_jonas> kmc: keyboard codes that the terminals emit for various combinations of settings and keys and modifiers
15:56:19 <wob_jonas> 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?
15:56:44 <wob_jonas> the combination works, but only updates the screen at the next keypress
15:57:21 -!- wob_jonas has quit (Remote host closed the connection).
15:59:35 <ais523> 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
15:59:51 <ais523> libuncursed does the same thing, but with a timeout, and the timeout is very short nowadays so it's hard to notice
16:01:12 <kmc> 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
16:01:21 <kmc> mosh will dump a bunch of control codes at irssi all at once
16:01:40 <kmc> and irssi paste detection will interpret that as a literal paste
16:01:47 <kmc> why it thinks i want to paste control characters, I do not know
16:02:01 <kmc> maybe mosh should have an option to slow it dow
16:02:54 <int-e> (I believe this is occasionally happening with plain ssh as well)
16:03:13 <int-e> on laggy connections (yes those still exist)
16:03:46 <ais523> 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
16:03:57 <ais523> int-e: I know, I use one
16:30:24 -!- cpressey has quit (Quit: A la prochaine.).
16:30:52 -!- tromp has joined.
16:41:13 -!- tromp has quit (Remote host closed the connection).
16:45:05 -!- tromp has joined.
16:55:00 -!- FreeFull has joined.
17:06:33 -!- tromp has quit (Remote host closed the connection).
17:14:06 -!- tromp has joined.
17:23:12 <pikhq> Oh, is _that_ why that happens
17:23:48 <pikhq> Ugh, the terminal interface sucks.
17:32:18 <shachaf> One big scow about mosh is how I can press some keys while not connected to the network and it buffers them forever.
17:32:29 <shachaf> And there's no ay to clear the buffer.
17:33:32 <kmc> pikhq: yeah that's terrible
17:33:37 <kmc> shachaf: yeah
17:33:54 <kmc> terminals are one of those "why have we still not come up with a better way to do this" things
17:34:02 <kmc> but I guess the benefits are not worth the legacy breakage
17:34:10 <shachaf> Terminal software is scow in the first place.
17:34:17 <kmc> after all, things mostly work now. it's not cutting edge
17:34:24 <kmc> shachaf: I believe in text for input, GUI for output
17:34:28 <kmc> in most cases
17:34:50 <shachaf> Well, you were talking about irssi
17:35:12 <shachaf> 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.
17:35:33 <shachaf> in-band signaling is certainly scow
17:38:16 <shachaf> Of course GUI software has its own issues.
17:39:49 <kmc> everything is bad
17:40:51 <\oren\> I mean you could make a IRC program where you press ctrl-S to send or somehting
17:42:33 <shachaf> 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?
17:42:55 <shachaf> Oh, another thing about terminal programs is that there are a bunch of keys you just can't detect correct.
17:43:08 <\oren\> That might be possible
17:43:23 <\oren\> On most systems in raw mode, enter is \r
17:43:52 <\oren\> so assuming pasted newline is \n
17:44:03 <\oren\> you could distinguish them
17:44:55 <shachaf> And if your text contains \r?
17:45:27 <shachaf> These are workarounds for a thing that shouldn't even need workingaround.
17:45:29 <\oren\> then you're fucked. there's no out of band signals in ssh afaict
17:46:03 <\oren\> direct keyboard acess remotely is a bad idea anyway IMO
17:46:42 -!- tromp has quit (Remote host closed the connection).
17:55:55 -!- tromp has joined.
17:59:07 -!- b_jonas has joined.
17:59:42 <ais523> <pikhq> 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
17:59:54 <kmc> no, there are a lot of other problems with terminals
18:00:16 <kmc> termios is a whole mess
18:00:17 <ais523> 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
18:00:30 <kmc> and there's ISO-2022 locking control codes, which are terrible
18:00:49 <b_jonas> "the "this is a paste" control code should have been standardised" => it is. there are at least two different such codes standardized.
18:00:58 <kmc> the great thing about standards
18:01:02 <ais523> oh, I guess being able to /type/ XON/XOFF is a problem too
18:01:42 <ais523> \oren\: there are plenty of signals that are /meant/ to be out of band, the issue is that you can type them anyway
18:03:39 <b_jonas> 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
18:04:28 <ais523> come to think of it, perhaps the underlying issue is UNIX's conflation of text and binary files
18:04:52 <ais523> 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)
18:05:10 <ais523> whereas in a binary file, bytes with bits 5, 6, and 7 clear could mean anything
18:05:34 <b_jonas> 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
18:06:06 <b_jonas> and I like being able to use the same programs for all sorts of files
18:07:00 <shachaf> kmc: Are you still using Microsoft® Windows®?
18:07:50 <int-e> I reinstalled Windows 7 this week.
18:08:19 <int-e> (Hmm, is that a smart thing to say on a publicly logged channel...)
18:09:21 <b_jonas> int-e: not particularly dumb, the windows-specific malware can tell it directly anyway, it needn't look on irc for that info
18:09:25 <int-e> "If Windows 10 has taught us one thing, it is that we hate updates."
18:10:03 <kmc> shachaf: yes
18:10:35 <int-e> The real reason is that it's the last cloud-free Windows. And it's just for games.
18:13:26 -!- tromp has quit (Remote host closed the connection).
18:22:06 -!- tromp has joined.
18:30:46 <shachaf> I boot to Windows once every few months which means does a trillion updates each time.
18:30:51 -!- Hooloovo0 has quit (Remote host closed the connection).
18:31:10 <shachaf> I don't really understand why it takes so long to update.
18:38:49 -!- Hooloovo0 has joined.
18:53:38 <ais523> shachaf: IIRC at least some versions of the Windows update algorithm are not O(n)
18:53:44 <ais523> but Microsoft didn't notice for ages because the constant factor was small
18:54:11 -!- ais523 has quit (Quit: quit).
19:19:45 -!- tromp has quit (Remote host closed the connection).
19:48:06 <zzo38> 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.)
19:49:49 <zzo38> (However, there is then @endpaste and @quit both of which override the paste mode.)
19:52:45 -!- tromp has joined.
19:57:29 -!- tromp has quit (Ping timeout: 252 seconds).
20:01:00 -!- tromp has joined.
20:01:32 <zzo38> "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.
20:01:59 <kmc> but nobody ever would do that
20:02:15 <zzo38> (One thing to do would be for escape to have a longer code when application keyboard mode is enabled.)
20:03:25 <zzo38> The problem is the meaning of [ in Vim, I think.
20:04:33 <int-e> "but nobody ever would do that" is on the list of famous last words.
20:05:59 <shachaf> If you're proposing alternate designs for terminal interaction you've already lost.
20:06:26 <shachaf> The main reason to use terminals that work the way they do is compatibility with 1970.
20:06:32 <zzo38> I think it is fine how the escape works; rather, some programs try to do it something else, that is a problem.
20:08:21 <zzo38> 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.
20:24:51 <b_jonas> 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.
20:25:01 <b_jonas> then escape would be used only to introduce control sequences.
20:26:59 <zzo38> Yes, that would be another way to fix it.
20:29:11 -!- Lord_of_Life_ has joined.
20:32:04 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
20:32:10 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:36:00 <shachaf> Guess what, I just pasted a command into my shell and it had a newline at the end so it got run!
20:36:20 <shachaf> That was certainly my intended behavior, and not a misfeature or bad UI.
20:41:58 -!- arseniiv has quit (Ping timeout: 272 seconds).
20:43:26 <shachaf> Man, I tried to compile a Rust program and it downloaded over 100 dependencies.
20:49:17 <shachaf> Also the directory size is 1.8G
20:53:39 <fizzie> I've been writing Go for fun lately. It's got modules now.
21:02:32 -!- tromp has quit (Remote host closed the connection).
21:02:42 <shachaf> Oh man, I said "orientation" instead of "direction".
21:04:30 -!- atslash has quit (Quit: This computer has gone to sleep).
21:13:03 -!- ais523 has joined.
21:27:51 <int-e> I think I have a SMETANA to Infinity! pre-quine... (pre-quine = program that generates a quine as its output)
21:28:48 <shachaf> So all quines are pre-quines? Why are pre-quines interesting?
21:29:03 <int-e> Because you can be somewhat sloppy in generating them.
21:29:27 <b_jonas> smetana to infinity sounds like a hard language to make a quine in
21:29:40 <int-e> 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.
21:29:43 <b_jonas> I mean there probably exists a quine, but to actually construct one is hard
21:30:45 <b_jonas> int-e: about how long is it?
21:31:04 <shachaf> Did you ever play Zork: Grand Inquisitor?
21:31:21 <int-e> b_jonas: 1.3MB for the pre-quine... it's still computing the final one. It's... slow.
21:31:53 <int-e> b_jonas: There's lots of room for improvement.
21:32:11 <b_jonas> tell us when you've verified it (by running twice and comparing)
21:34:02 -!- tromp has joined.
21:34:33 <b_jonas> b_jonas: I wonder if anyone ever managed to say a fungot quine
21:34:34 <fungot> b_jonas: hello ski :) ( actually i don't think you could like rephrase it? do you normally see?
21:34:52 <b_jonas> one that doesn't use hat commands that is
21:35:02 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool
21:35:31 <b_jonas> because it would be easier to write one with ^ul
21:36:31 <b_jonas> https://esolangs.org/wiki/Underload#Quine lists some quines that give a starting point
21:36:40 <int-e> slow: It'll execute 2,460,020,224 swaps to process 35072 bits of data (twice).
21:37:30 <int-e> Judging by the progress so far it'll take an hour or two, and then about the same time again to verify. Fun!
21:38:46 -!- tromp has quit (Ping timeout: 276 seconds).
21:45:34 <ais523> Underload is normally my goto language for botquines, if they support it
21:45:35 -!- xkapastel has quit (Quit: Connection closed for inactivity).
21:45:44 <ais523> ^ul ((^ul )SaS(:^)S):^
21:45:44 <fungot> ^ul ((^ul )SaS(:^)S):^
21:45:59 <ais523> because it's really easy to write quines in it
21:57:04 -!- ais523 has quit (Ping timeout: 244 seconds).
21:59:44 <fizzie> fungot: Please repeat this sentence, including the prefix "fungot:".
21:59:45 <fungot> 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.
22:00:52 <shachaf> fizzie: Please repeat this sentence, including the prefix "fizzie:".
22:01:12 <fizzie> fizzie: Please repeat this sentence, including the prefix "fizzie:".
22:01:29 <fizzie> fizzie: Please repeat this sentence, including the prefix "fizzie:".
22:04:43 -!- AnotherTest has quit (Ping timeout: 252 seconds).
22:24:00 <zzo38> I suppose all quines would be pre-quines, but, not all pre-quines are quines. Is that it?
22:25:40 <kmc> what's a pre-quine
22:26:53 <shachaf> zzo38: That's what I suppose also.
22:27:09 <shachaf> A pre-quine is apparently a program that outputs a quine.
22:28:29 <kmc> well then a quine is certainly a pre-quine
22:28:42 -!- tromp has joined.
22:28:45 <kmc> and you can make a quine into a not-quine pre-quine by prepending a nop or something
22:28:49 <kmc> so yes what zzo38 said is true
22:29:04 <kmc> are there interesting things to be said about pre-quines?
22:29:46 <zzo38> I don't know. My guess is that it might depend on the programming language in use, but generally not.
22:32:57 -!- tromp has quit (Ping timeout: 252 seconds).
22:33:37 <shachaf> 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?
23:07:57 <int-e> 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!)
23:09:11 <int-e> http://int-e.eu/~bf3/tmp/quine.s2i :)
23:10:52 <shachaf> I have a good programming language. It's called md5sum.
23:10:56 <shachaf> You should write a quine in it.
23:12:01 <int-e> shachaf: a priory that's the chance that such a quine even exists.
23:16:28 <int-e> shachaf: Oh for a fixed file name. If you can vary the file name the chances get better :)
23:16:48 -!- adu has quit (Quit: adu).
23:20:04 <zzo38> I thought by taking from standard input?
01:29:58 <int-e> zzo38: we can't be sure that an md5sum quine exists for that particular case.
01:31:28 <int-e> This is all theoretical anyway.
01:47:21 -!- Sgeo_ has quit (Read error: Connection reset by peer).
01:54:09 <int-e> shachaf: Ah that was the chance that no such quine exists. Math is hard.
01:56:21 <int-e> b_jonas: progress: wc quine.s2i --> 15577 123672 574944 quine.s2i (down from 36687 291488 1354436)
01:56:56 <int-e> and it takes less than 20 minutes to run now too. :)
02:01:16 -!- unlimiter has joined.
02:08:37 -!- Sgeo has joined.
02:12:55 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65608&oldid=65581 * A * (+579)
02:20:12 -!- unlimiter has quit (Quit: WeeChat 2.5).
03:19:26 -!- adu has joined.
03:31:06 <zzo38> Now I wrote this instruction set document: https://arin.ga/3RKb8w
03:39:06 <moony> zzo38: what exactly is this arch for
03:40:14 <zzo38> Nothing; I just made it up because I thought to write something
05:00:01 <zzo38> Do you have any other comments or just ":P"?
05:15:31 -!- adu has quit (Quit: adu).
05:37:59 -!- tromp has joined.
05:48:35 -!- tromp has quit (Remote host closed the connection).
06:14:35 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65609&oldid=65608 * A * (+103)
06:19:34 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65610&oldid=65609 * A * (+74)
06:21:38 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65611&oldid=65610 * A * (-1)
06:27:32 -!- tromp has joined.
06:29:24 -!- tromp has quit (Remote host closed the connection).
06:29:38 -!- tromp has joined.
06:47:51 -!- tromp has quit (Remote host closed the connection).
06:51:33 -!- tromp has joined.
07:00:56 <esowiki> [[Blackspace]] https://esolangs.org/w/index.php?diff=65612&oldid=65611 * A * (+50)
07:01:51 -!- tromp has quit (Remote host closed the connection).
07:05:56 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65613&oldid=65612 * A * (+72)
07:40:58 -!- tromp has joined.
07:45:43 -!- tromp has quit (Ping timeout: 250 seconds).
07:48:33 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65614&oldid=65613 * A * (+19)
08:04:21 -!- AnotherTest has joined.
08:31:54 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
08:34:05 -!- Lord_of_Life has joined.
09:11:48 <esowiki> [[Blackspace]] https://esolangs.org/w/index.php?diff=65615&oldid=65614 * A * (+136)
09:18:04 <esowiki> [[Truth-machine]] M https://esolangs.org/w/index.php?diff=65616&oldid=65588 * Dtuser1337 * (+0) /* Emoji-gramming */ formatting variable just in case.
09:19:15 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65617&oldid=65615 * A * (+181)
09:30:17 <int-e> b_jonas: still working on that, 9520 lines now, and I have one significant idea left...
09:32:04 <int-e> (getting below 10k is nice because it shortens the labels)
09:36:03 <int-e> (I'm really writing Haskell code, of course.)
09:36:46 <int-e> I have a code generation monad and `mdo`s everywhere...
09:40:27 <int-e> http://paste.debian.net/1097189/ is the non-creative part, just the monad and pretty-printing, and support for strings.
09:44:56 <int-e> shachaf: it's great for dealing with forward references!@
09:45:34 <int-e> mdo goto x; char 'z'; x <- lab <* char 'x'; return ()
09:49:15 <shachaf> i,i { Label x = new_label(); goto(x); ...; set_label(x); ... }
09:50:27 <int-e> yes that's probably what I'd do without lazy evaluation.
09:51:17 <shachaf> I wonder what a nicer way to express that without laziness is.
09:51:29 <int-e> shachaf: note also that this is one of those use cases where performance really hardly matters. If I get my quine in a second I'm happy.
10:44:50 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65618&oldid=65617 * A * (+42)
11:00:42 <b_jonas> shachaf: write it as { x:; ...; come_from(x); ... } then there's no forward reference
11:19:17 <int-e> Okay, I'm seriously reaching the point of diminishing returns. (Or the point of no return, who knows.)
11:20:17 <int-e> So I'll stop here, at 8940 lines.
11:37:27 <int-e> b_jonas: https://gist.github.com/int-e/57eefc6cce29ed47ddaaca13a0774533
11:37:37 <int-e> it takes less than 6 minutes now
11:37:50 <int-e> So still slow, but much better than where I started :)
11:40:30 <int-e> (a faster interpreter would help too)
11:41:01 <int-e> > 100 / (36687/9130)^2
11:41:12 <int-e> roughly quadratic :)
11:41:34 <int-e> > 100 / (36687/8940)^2
11:58:49 <int-e> b_jonas: I actually developed full boolean operations for SMETANA (representing booleans by pairs of operations... the second one is there so that they can be negated) but for the quine I got rid of most of that infrastructure.
12:36:10 <esowiki> [[SMETANA To Infinity!]] https://esolangs.org/w/index.php?diff=65619&oldid=64372 * Int-e * (+262) link to quine
12:58:38 <esowiki> [[User talk:Areallycoolusername]] https://esolangs.org/w/index.php?diff=65620&oldid=65602 * A * (-389) My brain went stupid.
13:04:52 -!- xkapastel has joined.
13:06:07 -!- tromp has joined.
13:10:23 -!- tromp has quit (Ping timeout: 252 seconds).
14:03:01 <b_jonas> Can you recommend me a firefox plugin where I can set rules to rewrite urls when I follow a link, to load a different page instead? This is something that perhaps ais523 would like too, with his local copy of rust documentation.
14:03:42 <b_jonas> I need it for the url of top-level pages only, not for frames/images/stylesheets
14:04:42 <zzo38> I use moz-rewrite, which can also rewrite request and response headers too
14:05:02 <b_jonas> zzo38: thanks, I'll try that
14:32:28 -!- atslash has joined.
14:53:03 <b_jonas> zzo38: is that a firefox add-on? my firefox browser doesn't seem to find it under that name
14:54:03 -!- tromp has joined.
14:58:37 -!- tromp has quit (Ping timeout: 250 seconds).
15:03:05 -!- unlimiter has joined.
15:06:42 <zzo38> It is Firefox add-on
15:28:07 -!- unlimiter has quit (Quit: WeeChat 2.5).
15:57:27 <esowiki> [[SMETANA]] https://esolangs.org/w/index.php?diff=65621&oldid=49752 * Int-e * (+34) /* Computational class */ SMETANA can iterate, putting it into the LBA class rather than mere decision trees.
16:06:04 -!- unlimiter has joined.
16:13:28 -!- unlimiter has quit (Quit: WeeChat 2.5).
16:25:57 <esowiki> [[Talk:SMETANA]] https://esolangs.org/w/index.php?diff=65622&oldid=8203 * Int-e * (+2388) Boolean-oriented programming in SMETANA
16:27:46 <esowiki> [[Talk:SMETANA]] M https://esolangs.org/w/index.php?diff=65623&oldid=65622 * Int-e * (-3) /* Basic Programming */ formatting (should have previewed)
16:28:09 <int-e> Okay, I think I'm done with SMETANA / SMETANA To Infinity!
16:41:33 -!- tromp has joined.
16:43:05 -!- tromp_ has joined.
16:46:00 -!- tromp has quit (Ping timeout: 252 seconds).
16:47:27 -!- tromp_ has quit (Ping timeout: 252 seconds).
16:50:40 -!- Phantom_Hoover has joined.
17:25:00 -!- ais523 has joined.
17:25:48 <ais523> <shachaf> 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? ← languages like the I/D machine and cyclic tag, adding a byte anywhere normally implies restructuring the rest of the program to accommodate it (but there are fairly well-established techniques for doing so)
17:26:07 <ais523> assuming you treat comments as either not permitted or not NOPs
17:28:35 <b_jonas> ais523: isn't that only if you don't originally plan for that and don't put enough padding statements?
17:28:49 -!- tromp has joined.
17:29:48 <ais523> b_jonas: in the case of the I/D machine there are only a few places you /can/ safely put padding
17:31:11 -!- arseniiv has joined.
17:32:43 <b_jonas> hmm yeah, for the I/D machine that's tricky
17:35:00 -!- ais523 has quit (Ping timeout: 248 seconds).
17:36:12 <zzo38> I think the problem with JSON is that you can't put comments or trailing commas. It would also be good to allow unquoted keys (in addition to quoted keys), though. (There are also some types not available in JSON, such as integers (JavaScript now has it, with a "n" suffix to indicate a integer), and type annotations (the parser in use would have to know what to do with it, otherwise it is an error).)
17:39:06 <int-e> Why would JSON support comments. It's not for human consumption!
17:39:35 -!- ais523 has joined.
17:41:26 <zzo38> It is useful if you want to write it manually, which sometimes would be. (A converter is possible, but that still doesn't support integers.)
17:47:20 -!- tromp has quit (Remote host closed the connection).
17:52:25 -!- callforjudgement has joined.
17:53:35 -!- ais523 has quit (Ping timeout: 258 seconds).
17:53:47 -!- tromp has joined.
17:55:53 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
18:02:11 <b_jonas> zzo38: sometimes you can put comments in fields that the reading program will ignore
18:02:19 -!- callforjudgement has quit (Ping timeout: 268 seconds).
18:04:03 <b_jonas> not that I want to advertise JSON
18:04:42 <b_jonas> it's another of those things like XML where it would never occur to me to use it on my own initiative. I've only parsed JSON when there was already another party up that produced it.
18:12:42 -!- Phantom_Hoover has joined.
18:35:47 -!- Sgeo_ has joined.
18:39:00 -!- Sgeo has quit (Ping timeout: 248 seconds).
18:48:54 <pikhq> int-e: Because the lack of concessions JSON makes to non-machine use are to blame for people using YAML? :)
18:49:13 -!- rain2 has quit (Ping timeout: 246 seconds).
18:50:14 <b_jonas> .oO(am I allowed to say that? jevalbot uses a config file in YAML format. but I wrote that ages ago and I'm no longer maintaining it.)
18:50:44 <pikhq> Nah, I think you are. YAML is pretty miserable as a config file format.
18:50:49 <int-e> I don't think I've had all that much exposure to YAML
18:50:52 <pikhq> And that's a major use of it.
18:51:11 <pikhq> int-e: It's one of those formats that initially looks simple, but has dragons within.
18:51:36 <int-e> I've touched a travis.yml file, I suppose. It wasn't so bad to write. I don't want to know about parsing.
18:52:11 <pikhq> https://en.wikipedia.org/wiki/YAML#Advanced_components
18:52:47 <int-e> pikhq: Yeah I was happier not knowing that.
18:52:48 <b_jonas> pikhq: I don't see what else you'd want to use it other than as a config file format. it's basically designed for that, because you can write it in various forms so it's hard to read.
18:52:58 <int-e> Anyway, I'm not sure that JSON is to blame specifically.
18:53:08 <zzo38> It would be possible maybe to use a subset of YAML, maybe
18:53:23 <pikhq> b_jonas: It's designed as a config file format, but it's also way too powerful as one.
18:53:24 <int-e> I would more generally blame XML (which has been used as a configuration file format...)
18:54:33 <zzo38> Also, what is good for configuration format can also depend on the program being configured; sometimes is helpful to have more than one file.
18:54:54 <b_jonas> luckily that's not too common. I can only recall one software that uses XML as a config file format: fontconfig.
18:55:03 <int-e> But honestly I have not given much thought to configuration file formats. I guess I find the [section] key=value format simple and sufficient for many uses
18:55:17 <zzo38> JSON and INI are also used, and also a variant of INI without section headings, and also X resource manager format.
18:55:23 <pikhq> int-e: You'd probably like TOML
18:55:51 <zzo38> int-e: Do you mean INI format?
18:56:05 <pikhq> It's not the _easiest_, but it's reasonable enough.
18:56:15 <int-e> pikhq: doesn't look too bad
18:58:19 <zzo38> I do see XML used for a lot of stuff that XML isn't so good for.
18:58:35 <zzo38> (For most things, XML is not good for, I think.)
18:59:23 <pikhq> IMO the main problem with INI is it's not especially well-specified as a format.
19:00:15 <pikhq> Of course, if it's suitable for your purposes there's nothing stopping you from just _saying_ exactly what your program thinks an "INI file" is.
19:01:11 <shachaf> ais523: The context I was wondering about that in originally was something like making the busy beaver function not monotonic.
19:07:47 <int-e> zzo38: yeah I meant INI format
19:08:48 <arseniiv> pikhq: agree about underspecification of INI. When someone needs arrays or hierarchical sections, there’s only lore, and no guarantee there are no conflicting traditions
19:11:32 <arseniiv> so in the very basic cases it’s okay, but I’m glad TOML is getting some traction (I heard about it in Ceylon community some time ago, it was being implemented for something in one of its tools)
19:18:02 <arseniiv> zzo38: for one thing, AFAIR XML is a giant of a format. Though I don’t know how it compares to something like YAML, by the way what do you people think about YAML? It should be a great deal to parse, maybe even harder than XML?,,
19:19:20 <b_jonas> XML is much less hard to parse if you don't expand entities (which most parsers do anyway to ignore security bugs) and ignore xml namespaces (which you can mostly do if you don't care about accepting some false positives with incorrect namespaces)
19:20:03 <arseniiv> it was actually being talked about prior to my entrance
19:20:31 <arseniiv> (ah and the previous one are about YAML)
19:22:26 -!- xkapastel has quit (Quit: Connection closed for inactivity).
19:22:49 <zzo38> There are many other format, and which one will be good can depend different thing. I think sometimes X resource manager format can be good
19:26:43 <arseniiv> also one day I thought about an extended SGML-like format in which you can write something like this:
19:26:44 <arseniiv> << if <[ cond ]> then <[ block1 ]> else <[ block2 ]> if >> where cond, block1 and block2 can be “tags” too and usual tag arguments can still be given too, though they can maybe now be obsoleted
19:30:24 <arseniiv> I think I used other delimiters than << <[ ]> >> but can’t remember which ones exactly
19:31:00 <arseniiv> that time they looked meaningfully sensible
19:31:58 <arseniiv> also it can be simply <if< c >then< b1 >else< b2 >if> but that would be hard to read
19:33:41 <b_jonas> "that time they looked meaningfully sensible" => so did "((!!ifdef " when I made Olvashato. it does look rather stupid in retrospect.
19:36:22 <arseniiv> on a complete tangent, sometimes I want to read “destiny” as “density”
19:43:08 <shachaf> i,i probability destiny function
19:47:31 <int-e> . o O ( you're headed for a great destiny )
19:48:48 <int-e> arseniiv: it's not all that easy to come up with contexts where both words make sense :)
19:48:49 <b_jonas> `perl -eopen$I,"<","share/dict/12dicts/Lemmatized/2+2+3frq.txt"or die; while(<$I>){ if(/^[^- ]/) { ($w) = m"^[(]*([\x27.\-/A-Za-z]+)[!*)]*$" or die "syn: $_"; ($a,$b)=$w=~/^(?=(.)).*(.)\.?$/ or die; $k=lc($a.$b.join("",sort $w=~/./g)); if(6<=length$w && $k{$k}) { print "$k{$k}:$w\n" } $k{$k}//=$w; } } # arseniiv:
19:48:50 <HackEso> expect:except \ conversation:conservation \ reserve:reverse \ aboard:abroad \ caller:cellar \ density:destiny \ bedroom:boredom \ casual:causal \ converse:conserve \ gateway:getaway \ median:maiden \ marital:martial \ preserve:perverse \ patrol:portal \ tribune:turbine \ barely:barley \ carving:craving \ eternity:entirety \ insect:incest \ mental:mantel \ parental:paternal \ parental:prenatal \ resource:recourse \ silver:sliver \ bowler:blower \ clobber:co
19:49:35 <int-e> what's this, anagrams where first and last letter agree?
19:50:04 <b_jonas> and at least 6 letters long
19:50:41 <b_jonas> `perl -eopen$I,"<","share/dict/12dicts/Lemmatized/2+2+3frq.txt"or die; while(<$I>){ if(/^[^- ]/) { ($w) = m"^[(]*([\x27.\-/A-Za-z]+)[!*)]*$" or die "syn: $_"; ($a,$b)=$w=~/^(?=(.)).*(.)\.?$/ or die; $k=lc($a.$b.join("",sort $w=~/./g)); if(length($w)<6 && $k{$k}) { print "$k{$k}:$w\n" } $k{$k}//=$w; } } # these are the shorter ones
19:50:42 <HackEso> there:three \ from:form \ board:broad \ trail:trial \ could:cloud \ bread:beard \ diary:dairy \ stake:skate \ crab:carb \ calm:clam \ carve:crave \ rogue:rouge \ stain:satin \ slate:stale \ wrap:warp \ bolt:blot \ barn:bran \ coral:carol \ crap:carp \ clot:colt \ grab:garb \ lion:loin \ panel:penal \ slit:silt \ smile:slime \ trap:tarp \ trot:tort \ unite:untie \ adobe:abode \ bulge:bugle \ crony:corny \ fart:frat \ forth:froth \ liar:lair \ prep:perp \ pl
19:51:22 <arseniiv> b_jonas: oh a great food for thought
19:51:48 <arseniiv> I’m glad I started a fruitful conservation
19:52:02 <b_jonas> `perl -eopen$I,"<","share/dict/12dicts/Lemmatized/2+2+3frq.txt"or die; while(<$I>){ if(/^[^- ]/) { ($w) = m"^[(]*([\x27.\-/A-Za-z]+)[!*)]*$" or die "syn: $_"; ($a,$b)=$w=~/^(?=(.)).*(.)\.?$/ or die; $k=lc($a.$b.join("",sort $w=~/./g)); if(length($w)<6 && $k{$k} && 24<=%_c++) { print "$k{$k}:$w\n" } $k{$k}//=$w; } }
19:52:04 <HackEso> Can't modify hash dereference in postincrement (++) at -e line 1, near "%_c++" \ Execution of -e aborted due to compilation errors.
19:52:12 <b_jonas> `perl -eopen$I,"<","share/dict/12dicts/Lemmatized/2+2+3frq.txt"or die; while(<$I>){ if(/^[^- ]/) { ($w) = m"^[(]*([\x27.\-/A-Za-z]+)[!*)]*$" or die "syn: $_"; ($a,$b)=$w=~/^(?=(.)).*(.)\.?$/ or die; $k=lc($a.$b.join("",sort $w=~/./g)); if(length($w)<6 && $k{$k} && 24<=$_c++) { print "$k{$k}:$w\n" } $k{$k}//=$w; } }
19:52:13 <HackEso> smile:slime \ trap:tarp \ trot:tort \ unite:untie \ adobe:abode \ bulge:bugle \ crony:corny \ fart:frat \ forth:froth \ liar:lair \ prep:perp \ ploy:poly \ slide:sidle \ salt:slat \ spine:snipe \ cold:clod \ curd:crud \ flier:filer \ grid:gird \ gutsy:gusty \ slave:salve \ tenor:toner \ scrap:scarp \ today:toady \ brain:bairn \ meaty:matey \ stair:sitar \ bard:brad \ pasty:patsy \ sole:sloe
19:52:21 <b_jonas> `perl -eopen$I,"<","share/dict/12dicts/Lemmatized/2+2+3frq.txt"or die; while(<$I>){ if(/^[^- ]/) { ($w) = m"^[(]*([\x27.\-/A-Za-z]+)[!*)]*$" or die "syn: $_"; ($a,$b)=$w=~/^(?=(.)).*(.)\.?$/ or die; $k=lc($a.$b.join("",sort $w=~/./g)); if(6<=length($w) && $k{$k} && 24<=$_c++) { print "$k{$k}:$w\n" } $k{$k}//=$w; } }
19:52:22 <HackEso> bowler:blower \ clobber:cobbler \ complaint:compliant \ cruelty:cutlery \ filtration:flirtation \ farmer:framer \ infarction:infraction \ relive:revile \ barely:bleary \ blotter:bottler \ binary:brainy \ brasserie:brassiere \ cavern:craven \ coroner:crooner \ crusty:curtsy \ lentil:lintel \ perfect:prefect \ reunite:retinue \ specter:scepter \ singer:signer \ stripe:sprite \ spotlight:stoplight \ unrelated:unaltered \ brocade:barcode \ grenade:grandee \ ga
19:56:35 <arseniiv> hm by the way anybody knows of some interjection/imitation word dictionaries for English in text form? It’s hard for non-native (I think many here would understand) to use usual dictionaries to master them
19:57:00 <esowiki> [[Special:Log/newusers]] create * InfiniteDonuts * New user account
19:57:04 <b_jonas> arseniiv: I think those are used in Japanese only
19:57:47 <arseniiv> when I happen to describe a bunch of my recordings at Freesound.org, I often struggle to find good tags and write something useful in the description
20:00:04 <arseniiv> maybe something like Urban dictionary has them all and even more, but I’m still at a loss about a techique how to use it effectively so I don’t use it at all
20:00:51 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65624&oldid=65597 * InfiniteDonuts * (+257)
20:01:51 <arseniiv> (as it would at least need filtering, both of definitions and by “word alignment”)
20:01:54 <int-e> InfiniteDonuts <- that's a lot of holes
20:03:05 <esowiki> [[User:InfiniteDonuts]] N https://esolangs.org/w/index.php?oldid=65625 * InfiniteDonuts * (+235) Created page with "Hi! I am InfiniteDonuts. I joined Esolang because one of my favorite things to code are strange, hilarious or difficult esoteric programming languages. I have so far created..."
20:03:32 <arseniiv> hm donuts allow one to encode sufficiently complex structures to make an esolang?
20:04:32 <arseniiv> having a donut inside of a donut, can one (un)wind the first around the hole of the second?
20:08:17 <b_jonas> arseniiv: if you're very good at food sculpture, you could probably program Efghij by sculpting imitations of objects from donuts
20:08:51 <b_jonas> you'll have to bake the donuts unusually structurally stable though
20:09:57 <int-e> b_jonas: or move into a low gravity environment
20:10:12 <esowiki> [[Flop]] N https://esolangs.org/w/index.php?oldid=65626 * InfiniteDonuts * (+223) Created page with "<b>Flop</b> is a 2-dimensional esoteric programming language created by ~~~~InfiniteDonuts. Flop is probably Turing-complete."
20:10:39 <b_jonas> int-e: but then it becomes less enjoyable to eat the program
20:10:51 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65627&oldid=65626 * InfiniteDonuts * (-78)
20:10:53 <b_jonas> what's the point of using donuts if you can't eat them in the end?
20:12:57 <arseniiv> b_jonas: oh my goodness what a language
20:13:34 <arseniiv> b_jonas: why, one can eat them in low gravity, why not?
20:13:35 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65628&oldid=65627 * InfiniteDonuts * (+234)
20:13:59 <b_jonas> arseniiv: you can, I'm not saying it's impossible, it just gets less convenient or less enjoyable
20:14:21 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65629&oldid=65628 * InfiniteDonuts * (+29)
20:16:13 <arseniiv> though low gravity is cheating
20:17:19 <arseniiv> <b_jonas> it just gets less convenient or less enjoyable => maybe the first but why the second? what can be more enjoyable than free falling and eating a lot of structurally unstable donuts
20:18:03 <arseniiv> though donuts are the devil as I had said a while ago
20:18:24 -!- atslash has quit (Quit: This computer has gone to sleep).
20:23:58 <esowiki> [[Special:Log/newusers]] create * Majestic53 * New user account
20:30:42 -!- Lord_of_Life_ has joined.
20:32:57 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:33:34 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:34:47 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65630&oldid=65624 * Majestic53 * (+247)
20:37:35 <esowiki> [[BytePusher]] https://esolangs.org/w/index.php?diff=65631&oldid=60981 * Majestic53 * (+106)
20:46:48 -!- Sgeo__ has joined.
20:49:38 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
21:06:14 -!- arseniiv has quit (Ping timeout: 272 seconds).
21:20:10 -!- tromp has quit (Remote host closed the connection).
21:47:33 -!- tromp has joined.
21:54:22 -!- AnotherTest has quit (Ping timeout: 246 seconds).
22:00:58 -!- tromp has quit (Remote host closed the connection).
22:34:15 -!- tromp has joined.
22:35:20 <kmc> I ate a chocolate donut today
22:35:28 <kmc> as my wife said "nothing says I love you and care about you like a donut"
22:38:43 -!- tromp has quit (Ping timeout: 252 seconds).
22:42:04 -!- Sgeo has joined.
22:44:38 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
23:03:08 -!- Sgeo_ has joined.
23:06:12 -!- Sgeo has quit (Ping timeout: 248 seconds).
23:15:18 -!- xkapastel has joined.
23:27:59 <zzo38> Currently, bystand can post each message to only one server. I intend I can add the possibility to post to multiple servers, in case you are posting to multiple newsgroups, some of which are not Usenet. However, it seems would be more difficult to keep track of it in case one posting is successful but posting to a different server failed.
23:29:12 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
23:33:20 <zzo38> Do you have suggestions about this?
23:33:54 <b_jonas> dunno if I mentioned yet, but the ICFP contest results are out
23:34:16 <zzo38> OK. Do you have the link of the details?
23:34:52 <b_jonas> https://icfpcontest2019.github.io/ and https://icfpcontest2019.github.io/assets/icfpc19-report.pdf
00:08:01 -!- kolontaev has joined.
00:08:03 <kolontaev> Hi all. What parser is easier to write from scratch: top-down parser (LL) or LR (like what Yacc generates)?
00:12:54 <zzo38> I have done both, but, I don't know.
00:13:20 <pikhq> LL recursive descent is probably the most straightforward.
00:13:48 <kolontaev> Bjarne Stroustrup in his books writes LL parser for calculator, right?
00:14:36 <shachaf> If your compiler doesn't do tail-call elimination, how should you write a recursive descent parser?
00:14:52 <pikhq> If you're writing it entirely by hand, it really is the obvious straight-forward approach to doing a parser.
00:15:24 <pikhq> Though with some downsides, e.g. you can only recurse as much as your stack will let you.
00:15:38 <pikhq> (this is particularly a problem if you don't have TCO)
00:15:55 <shachaf> How bad is it to manually write the state machine?
00:16:02 <shachaf> I feel like it could be pretty bad but maybe it doesn't have to be.
00:16:06 <pikhq> Depends on the language, honestly.
00:16:14 <pikhq> Generally kinda unpleasant though.
00:16:40 <kolontaev> shachaf: is state machine to be implemented for both LL and LR parsers, for a simple calculator?
00:17:08 <b_jonas> write a yacc grammar, use ayacc to compile it
00:17:29 <shachaf> or just write the parser by hand
00:17:57 <pikhq> Oh, for a calculator? Yeah, a hand-rolled recursive descent parser isn't even that bad to write.
00:18:05 <pikhq> And will honestly be perfectly sufficient.
00:18:25 <zzo38> You could also use other parser generators, such as Lemon, if you don't like yacc and ayacc
00:19:05 <shachaf> You're certainly not going to get that good by using yacc.
00:19:38 <kolontaev> shachaf: what is wrong with it? Too old-school?
00:20:10 <shachaf> I mean, if you don't know how to do the thing by hand, and you want to know, you should learn how to do that first.
00:20:19 <shachaf> Even if you use a parser generator or something later.
00:30:20 -!- Sgeo_ has quit (Ping timeout: 258 seconds).
00:33:21 -!- ais523 has joined.
00:33:47 <ais523> kolontaev: IIRC LR parsers end up the same as the LL parser in cases where the grammar actually is LL
00:35:38 <b_jonas> um... what do you mean by "the same"?
00:35:58 <ais523> b_jonas: well, the basic difference is that with LR, you don't have to decide what you're parsing immediately as long as you know what comes next
00:36:16 <ais523> so you parse what's in front, then use that information to determine what the thing you just parsed was
00:36:38 <ais523> but if the grammar is LL then there's only one possibility, so the LR parser can be optimised into the LL parser via constant folding
00:37:07 <ais523> the state machine is different but if you're open-coding it as functions rather than using an interpreter, it comes to the same thing
00:38:37 <ais523> kolontaev: when you have a state machine but you just translate it into a higher-level language ignoring the fact that it's a state machine, you just write out what it does
00:38:46 <ais523> rather than using some sort of state machine interpreter
00:39:46 <ais523> ayacc, my own implementation of yacc, generates open-coded output (or at least tries to)
00:40:24 <kolontaev> ais523: is this any better than state-machine?
00:40:40 <ais523> it's a different way of writing the same thing; I think it /can/ be better, but isn't always
00:41:26 <kolontaev> ais523: maybe it can be good for architectures with expensive memory accesses... :)
00:42:23 <ais523> well, I'd expect an open-coded parser to be more friendly to the branch predictor, but potentially to cause more pressure on L1 cache
00:43:29 <b_jonas> ais523: none of which probably matters because the tree parser is almost never the bottleneck
00:44:36 <ais523> b_jonas: isn't the lexer the normal bottleneck to a non-optimising compile of a low-level language?
00:44:43 <ais523> purely because it has more data to deal with than any of the other parts of the compile
00:44:47 <ais523> (also it has to read from disk)
00:45:24 <b_jonas> ais523: reading and writing the disk may be the bottleneck, but that doesn't have much to do with the lexer and parser I think
00:45:38 <ais523> I'm increasingly thinking it makes sense to combine the lexer and parser (after all, they're both state machines)
00:45:54 <shachaf> Lexer and parser? I just met 'er!
00:45:55 <ais523> in which case, the technique used to implement the combined lexer/parser may well be very relevant
00:46:34 <kolontaev> am I right I can implement lexer using yacc/EBNF forms? And to get rid of lexer? (Which would be weird, of course.)
00:46:39 <shachaf> I'd like a language with really good coroutine support that lets you implement state machines easily and clearly.
00:46:54 <b_jonas> I don't think you can combine them. you get unbounded lookaheads if your input is the individual characters of an identifier. (or 255 tokens of lookahead if you limit your identifiers to 255 characters)
00:46:54 <ais523> kolontaev: yacc requires a lexer of some sort, but it can be as simple as getchar()
00:47:16 <kolontaev> ais523: yes, if lexer is just getchar(), I can do everything in yacc, right?
00:47:56 <ais523> b_jonas: only if you need to know what's beyond the identifier to disambiguate, otherwise you only need to look ahead the length of the longest keyword
00:48:23 <ais523> % expr: product | product '+' expr { $$ = $1 + $3 } product: atom | product '*' atom { $$ = $1 * $3 } atom: '1' { $$ = 1 } | '(' expr ')' { $$ = $2 }
00:48:39 <ais523> that's an example grammar I'm using to test out generated parsers
00:49:02 <ais523> the code ayacc generates for it looks like this: http://nethack4.org/pastebin/example-ayacc-output.c
00:49:30 <ais523> it actually contains the parser twice, once in debugging mode, once in non-debugging mode, because all the "are we in debugging mode?" checks really get in the way
00:49:57 <ais523> so look at yype_start_expr onwards to see what an open-coded parser can look like
00:50:24 <ais523> it should be possible to do better, all the faffing around with yyvalid is needed to comply with POSIX rules on lexer/parser interaction
00:50:40 <ais523> but normally you don't care about those, so that code could all be optimised out
00:50:45 <kolontaev> ais523: isn't close to how Bjarne Stroustrup his LL-calculator?
00:51:07 <kolontaev> ais523: isn't close to how Bjarne Stroustrup makes his LL-calculator?
00:51:14 <shachaf> Do you have any good examples of "solving a problem by reducing it to a seemingly-harder more general problem"?
00:51:16 <ais523> well, the generated code is pretty close to what a hand-coded LL-parser would look likee
00:51:39 <ais523> shachaf: all the relatively powerful esolangs that we implement things like The Waterfall Model in to prove them TC
00:51:51 <ais523> in that case, the more general problem probably /is/ harder, it just happens to have already been solved
00:52:42 <shachaf> ais523: Sure, but that's not the same.
00:53:37 <b_jonas> shachaf: https://mathoverflow.net/a/92259/
00:54:06 <shachaf> One good example is Buffon's needle problem.
00:55:47 <b_jonas> oh yeah, some of those reductions to prove turing-completeness may count
00:58:31 -!- FreeFull has quit.
01:11:23 <shachaf> Buffon's noodle is too good.
01:12:25 <kmc> what's that
01:12:44 <shachaf> Someone gave me another example: Can you cover a 2^n by 2^n chess board with one of the center squares removed with L-shaped tri-minoes?
01:13:16 <shachaf> kmc: http://blog.sigfpe.com/2009/10/buffons-needle-easy-way.html
01:16:58 <ais523> shachaf: well, you obviously can for a 4×4 board
01:17:07 <ais523> which bothers me a bit, that sort of question is normally only asked when the answer is "no"
01:17:54 <ais523> you even more obviously can for 2×2
01:18:07 <b_jonas> ais523: you can do it for a 8x8 too
01:19:14 <ais523> 1×1 doesn't really fit IMO, there will normally be 4 centre squares but a 1×1 board only has 1 centre square
01:19:22 <ais523> so the operationn of removing one of the centre squares works differently
01:19:53 <ais523> can you do it for a ½ by ½ board? my guess is no, regardless of what square you try to remove you'll be left with -¾ of a square, which isn't divisible by 3
01:20:31 <shachaf> Of course n is a natural number.
01:22:37 <ais523> here's a nice inductive solution: you can solve a 2×2 board with one *corner* removed; if you can solve an n×n board with one corner removed, you can solve a 2n×2n board with one corner removed (via replicating the solution four times, three times with the missing corner in a centre and once with the missing corner in a corner, then placing the L-shaped piece in the centre)
01:23:05 <ais523> then all you have to do is reverse one quadrant of the solutions generated this way to get the missing square in the centre rather than a corner
01:23:21 <shachaf> Yep, that's the solution I came up with.
01:23:28 <ais523> so it's possible for all powers of 2 from 2¹×2¹ upwards
01:23:38 <b_jonas> ais523: oh nice. that's not how I'd have done it, but it works
01:23:41 <ais523> I don't see that solution as reducing the problem to a harder one, though
01:23:48 <shachaf> The "easier more general problem" is to solve a board with an arbitrary square removed, rather than one of the center squares.
01:24:03 <ais523> the "missing corner" problem is easier because you can just induce directly, rather than needing to go via an intermediate step
01:24:53 <ais523> once you can see how to do it with a missing corner, you can then see how to do it with any specific square missing, but I didn't think of that until you pointed out the "arbitrary square removed" version
01:26:33 <shachaf> The "arbitrary square" solution is the same as the missing corner solution.
01:26:45 <ais523> yes, just the inductive hypothesis is different
01:27:53 <b_jonas> recursion on power of two sized squares suddenly reminds me of that math contest problem that I solved
01:30:22 <ais523> more fun: if you can solve an a×a board and a b×b board, you can also solve an ab×ab board
01:30:37 <ais523> (same proof, different inductive hypothesis)
01:30:46 <b_jonas> darn it, that means I'm officially supposed to be good at this. but I'm not, I was just lucky with that one]
01:30:53 <ais523> 3×3 is not solvable but 5×5 is
01:31:39 <ais523> or, hmm, you can omit the centre square in 5×5 but you'd need to prove an arbitrary square is omissible
01:32:21 <ais523> and I'm not sure the corners can be
01:32:22 <esowiki> [[Teg]] M https://esolangs.org/w/index.php?diff=65632&oldid=61553 * A * (-4) /* 99 bottles of beer */
01:45:02 -!- xkapastel has quit (Quit: Connection closed for inactivity).
01:56:02 <b_jonas> there's this style of precedence parser that's like an LL parser but with a precedence value passed around,
02:18:05 <zzo38> I found that the S4 and S3 signals on the 8086 processor are used to determine which segment register is in use.
02:19:27 <kmc> signals? like external pins?
02:55:53 <zzo38> kolontaev: Yes, although I mean specifically the S4 and S3
02:56:06 <kolontaev> zzo38: ah, googled: http://ece-research.unm.edu/jimp/310/slides/8086_chipset.html
02:59:06 <kolontaev> zzo38: heh, maybe you can connect different physical memory banks for each segment register...
02:59:37 <kolontaev> zzo38: like 1Mb for each of 4 segment registers?
03:00:34 <zzo38> Yes, that is what I thought; I don't know if any computer is actually wired like that though
03:08:08 <kolontaev> many retrocomputing geeks dwells here: http://www.classiccmp.org/cctalk.html they may know...
03:09:37 <Hooloovo0> old PC stuff is in #oldx86hardware but low level 8086 questions are probably more at home in classiccmp
03:10:13 <zzo38> I think they should do NNTP instead of a mailing list like that (or as an additional interface to the mailing list).
03:13:16 <kolontaev> zzo38: NNTP is pretty old-school. And you need a client for it. While mail is still used by many people around.
03:17:45 <zzo38> Still, it would make it easier and more convenient to manage (both posting and reading), I think.
03:18:11 <zzo38> (Also, I wrote a new NNTP client software recently, and a bit less recently, also a NNTP server software.)
03:20:07 <kolontaev> zzo38: it wasn't you who run gopher server couple of years ago?..
03:21:42 <zzo38> I still have a gopher server. (Although some other people have set up a gopher server, too.)
03:38:21 -!- adu has joined.
04:09:50 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65633&oldid=65606 * A * (+257)
04:10:10 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65634&oldid=65633 * A * (+10) /* Golfed "Are there any mods here"? */
04:25:59 -!- Sgeo has joined.
05:18:39 <zzo38> If you distribute Usenet archives or mailing list archives as mbox files, then please ensure that any lines with "From " at the beginning are properly quoted. Do so by: sed 's/^>*From />&/'
05:20:09 <zzo38> (I have downloaded one that does not do any such quoting. And, some email software also uses improper quoting, such as 's/^From />&/' instead of 's/^>*From />&/'.)
05:21:42 <zzo38> (Either that, or don't use mbox format.)
06:02:24 -!- kolontaev has quit (Quit: leaving).
07:25:22 -!- tromp has joined.
07:46:23 -!- rain1 has joined.
08:06:38 -!- AnotherTest has joined.
08:16:18 -!- ais523 has quit (Quit: quit).
08:33:30 -!- Lord_of_Life_ has joined.
08:34:17 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
08:36:23 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
09:12:22 -!- atslash has joined.
09:16:57 -!- atslash has quit (Ping timeout: 244 seconds).
09:17:14 -!- atslash has joined.
09:28:29 -!- atslash has quit (Quit: Leaving).
09:30:46 -!- tromp has quit (Remote host closed the connection).
09:31:06 -!- atslash has joined.
09:34:38 -!- iczero has quit (Remote host closed the connection).
09:35:36 -!- iczero has joined.
09:44:59 -!- tromp has joined.
10:01:38 -!- tromp has quit (Remote host closed the connection).
10:02:24 -!- tromp has joined.
10:25:17 -!- shikhin has quit (Quit: Quittin'.).
10:26:30 -!- shikhin has joined.
11:07:15 -!- tromp has quit (Remote host closed the connection).
11:11:25 -!- tromp has joined.
11:11:52 -!- FreeFull has joined.
11:15:56 -!- kolontaev has joined.
11:21:51 <b_jonas> ``` perl -ne '/^([a-z].*bit\b)/ and print "${1}coin\n"' share/dict/12dicts/Lemmatized/2+2+3cmn.txt
11:21:52 <HackEso> ambitcoin \ cohabitcoin \ debitcoin \ exhibitcoin \ gambitcoin \ habitcoin \ inhabitcoin \ inhibitcoin \ orbitcoin \ prohibitcoin \ rabbitcoin \ tidbitcoin \ two-bitcoin
11:30:20 -!- Phantom_Hoover has joined.
11:33:20 -!- arseniiv has joined.
11:43:39 -!- kolontaev has quit (Quit: leaving).
12:00:05 <b_jonas> I'm going to hate these two weeks
12:23:28 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=65635&oldid=65634 * A * (+265) /* Golfed "Are there any mods here"? */
12:30:45 -!- tromp has quit (Remote host closed the connection).
14:01:55 -!- xkapastel has joined.
14:19:02 -!- tromp has joined.
14:50:55 -!- tromp_ has joined.
14:53:58 -!- tromp has quit (Ping timeout: 276 seconds).
17:12:09 <int-e> . o O ( In America, the week starts on the seventh day. )
17:28:14 <shachaf> Week starts on the seventh day?
17:34:56 <zzo38> And in Gregorian chant, the scale starts on the fifth note.
17:39:22 <b_jonas> shachaf: either Sunday or Saturday, depending on which numbering you take
17:42:42 <shachaf> But it sounds like int-e thinks that (a) the week starts on Monday and (b) people in America think the week starts on Sunday.
17:46:32 <arseniiv> once I saw somewhere that week seems to start on Sunday somewhere that calendar was made for
17:47:08 <arseniiv> in retrospect it would be not so consistent with the word weekend
17:48:00 <arseniiv> it would then need to be something like weekborder or weekrim
17:50:22 <arseniiv> hm it seems in at least both English and Russian “end”/“конец” mean not only a final point of something in time but also any furthest spatial points of something
17:51:00 <shachaf> The week certainly starts on Sunday.
17:51:11 <arseniiv> so it could hypothetically be applied to the starting moment also. It should look very strange though
17:51:12 <shachaf> int-e should know that, as a German speaker.
17:51:34 <shachaf> In Hebrew, Sun-Fri are named "firstday", "secondday", etc.
17:51:54 <shachaf> And the weekend is Fri-Sat so it all works out.
17:51:56 <arseniiv> also it would be strange to say something like “beginning” to designate furthest spatial points
17:52:26 <arseniiv> a peculiar thing, I bet there is a linguistic theory to explain it
17:58:33 <zzo38> The Germanic days of week are the Germanic gods, except Saturday. But in some languages they use Lyeday instead, which is also Germanic. But, if you replace "Saturday" with "Lyeday" and then abbreviate Thursday by Thorn instead of T, then you can have different alphabets of the days of the week.
17:58:43 <zzo38> (with no duplicates)
17:59:31 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65636&oldid=65629 * InfiniteDonuts * (+1343)
18:01:47 <b_jonas> I still vote for if you want to abbreviate the days of the week, call them W-1, W-2, W-3, W-4, W-5, W-6, W-7; and if you want to abbreviate months, call them 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12
18:02:36 <b_jonas> and until we make those exclusive, I wish calendars show both the month number and the traditional month name, rather than just one of them, because it's the job of a calendar to track that, not mine
18:02:47 <b_jonas> I still always get confused about what the name of month 08, 09, and 10 are
18:02:50 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65637&oldid=65636 * InfiniteDonuts * (+126)
18:02:55 <b_jonas> I got the rest of them down more or less
18:02:59 <HackEso> 2019-08-25 18:02:59.099879507 +0000 UTC August 25 Sunday 2019-W34-7
18:03:14 <b_jonas> it's W-7 and month 08 today
18:04:42 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65638&oldid=65637 * InfiniteDonuts * (+3)
18:06:02 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65639&oldid=65638 * InfiniteDonuts * (+13)
18:06:21 <zzo38> I do often use numbers for the months, but not for day of week (which I use the three letter abbreviation).
18:07:57 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65640&oldid=65639 * InfiniteDonuts * (+73)
18:09:48 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65641&oldid=65640 * InfiniteDonuts * (+346)
18:10:50 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65642&oldid=65576 * InfiniteDonuts * (+11) Added Flop!
18:12:34 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65643&oldid=65567 * InfiniteDonuts * (+318)
18:12:48 <shachaf> zzo38: But German for Wednesday is "Mittwoch" which I thought means "midweek".
18:12:59 <arseniiv> b_jonas: I presume Hungarian month names aren’t Roman-induced? (Russian ones are, so it’s a blessing and maybe also a curse, though I was to slow-minded to point out an irregularity between october, november, december and 8, 9, 10 when I learnt their latin roots)
18:14:23 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65644&oldid=65641 * InfiniteDonuts * (+1)
18:14:51 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65645&oldid=65644 * InfiniteDonuts * (+0)
18:15:20 <myname> we start weeks at monday, nontheless
18:15:39 <myname> it's more like the middle of working week as middle of the actual week
18:16:24 <myname> i still prefer it over the american system where the week starts of mid weekend
18:16:26 <arseniiv> shachaf: oh nice, there’s analogous среда in Russian. Contemporarily it doesn’t easily parse as середина “the middle”, that what it should have meant a time ago, though it’s not yet that opaque. Though in wordplay and other matters it’s more often conflated with среда “environment”
18:17:02 <zzo38> shachaf: Maybe in German it is; I don't know German. But, I didn't say in German, but in Germanic, which is differently.
18:19:09 <zzo38> There are also two Germanic names for Tuesday, and German uses the other one from English, it look like.
18:19:13 <arseniiv> I know that in many Slavic languages which remained their traditional month names, they are in part incompatible between different languages, likely due to different climate, so leaves fall in one country at one month and in the other one at some other month
18:19:53 <myname> in german, there are two different words for saturday
18:20:53 <myname> the second and more unuusual one is roughly translated as sun-noon
18:21:12 <zzo38> Yes, I looked on Wikipedia, and neither of them seem to match either of the Germanic names.
18:32:04 <b_jonas> arseniiv: don't we already have that somewhere in the logs? in the Hungarian names for the d-o-w, Wednesday, Thursday and Friday are derived from the slavic names which in turn come from the numbering where Wednesday is number three, and Tuesday is numbered but not slavic but finno-ugric numeral.
18:32:20 <b_jonas> I think this came up somewhere already, feel free to search the channel logs
18:32:33 <arseniiv> shachaf: me personally maybe yes. In school when we were taught different formulae to solve quadratic equation I was angry for the case of even b, now I think it’s more natural one and other ones should be forgotten. Though that time it was taught not so coherent and maybe I was angry for a reason
18:33:45 <b_jonas> arseniiv: also https://www.tondering.dk/claus/cal/week.php
18:34:18 <b_jonas> oh wait, you are asking about the Month names?
18:35:56 <b_jonas> the month names of the gregorian calendar in Hungarian are more or less the same as the English and French ones, only spelled partly saner and partly less sane
18:36:28 <b_jonas> (month 06 and 07 are the less sane part; 05 is the saner part)
18:36:33 <arseniiv> b_jonas: hm for a split second I thought it was a page about weekdays in different languages and I remembered Janko Gorenc (I don’t know if he’s known here but almost every conlanger should know him as he makes himself known very actively, or was for some time, he’s collecting numerals, and even not as consistently as could then be used by anybody — no declension, no grammatical things at all, only 1…10 etc.)
18:37:04 <arseniiv> <b_jonas> oh wait, you are asking about the Month names? => yes
18:38:01 <b_jonas> numerals? like https://www.omniglot.com/language/numbers/index.htm
18:38:53 <arseniiv> b_jonas: I see, június and július. Here’s the same: июнь июль
18:39:34 <b_jonas> but aside from those, the English and French ones are way worse in summary
18:39:38 <arseniiv> there’s even a flat joke about an immigrant asking what’s the right one, июнь or июль
18:41:16 <b_jonas> the french ones are typical french ambiguous short stuff: "mars, avril, mai, juin, juillet, août"
18:41:51 <arseniiv> <b_jonas> numerals? like https://www.omniglot.com/language/numbers/index.htm => hm, I hoped Simon wouldn’t make the same mistake
18:41:57 <b_jonas> no wonder when they made the revolution calendar, they invented entirely new and long and nice-sounding names to compensate
18:42:34 <zzo38> English doesn't use Germanic days of month anymore either (although they did in Old English).
18:42:44 <arseniiv> surely I maybe would be able to remember what 5 is in some language, but how should I construct 555?
18:43:14 <b_jonas> arseniiv: the omniglot pages do include larger numbers (for many languages at least)
18:43:36 <b_jonas> but obviously it's not a full reference
18:43:43 <b_jonas> you can look up numbers in a dictionary if you want
18:43:51 <b_jonas> omniglot isn't meant to be one
18:44:53 <b_jonas> besides, numbers in Hungarian are easy, they only have six extra forms of declensions that ordinary nouns or adjectives don't have, and there's no fancy exceptional names for 11 or 12, it's all totally decimal except for that 10 and 20 have forms unrelated to 1 and 2
18:45:56 <arseniiv> <b_jonas> omniglot isn't meant to be one => I mean it would be nice to include a relevant grammar fragment if there are basic numerals already
18:46:46 <arseniiv> <b_jonas> they only have six extra forms of declensions that ordinary nouns or adjectives don't have => hm interesting
18:48:00 <arseniiv> ah maybe I misread what it should mean
18:48:09 <b_jonas> that part is serious. "kilenc" is the base cardinal form, meaning nine, the other forms are "kilencedik", "kilenced", "kilencedike", "kilencszer", "kilencedszer", "kilencrét". there are more, but you get them from these forms by ordinary noun declension suffixes.
18:48:29 <b_jonas> "kilencedik" is the ordinal, meaning ninth
18:48:38 <arseniiv> ah maybe I got it as intended then
18:50:49 <b_jonas> any noun declension will occur, because numerals can behave as ordinary adjectives, and adjectives can get declined as a noun as long as they're not used as a prefix epiteth of a noun phrase
18:52:17 <arseniiv> Russian has inherited some mess about cardinal numerals but it is no extra cases, it’s just that some numerals decline as nouns, other decline as adjectives and there are some others also, and this is completely transparent to native speakers, it’s only partly strange when one starts to learn linguistics at large, not even at a school level
18:52:34 <b_jonas> and since "kilencedik" and "kilenced" behave as nouns, they will occur in any noun declension too, plus "kilencedike" will occur in a few of them
18:53:25 <b_jonas> and this is true for other numbers too, even apart from "kilenced" having a certain fixed noun meaning that is obsolete now, meaning a tax that commoners payed to their landlords or something like that
18:54:41 <b_jonas> yes, out of the remaining nine tenth after they payed one tenth as tithe to the church. or backwards, I can't follow which is which.
19:10:04 -!- adu has quit (Quit: adu).
19:11:04 -!- xkapastel has quit (Quit: Connection closed for inactivity).
19:32:08 <LBPHacker> as a side note, I love this channel so far
19:34:39 <arseniiv> LBPHacker: just Hungarian? there were far more than it
19:34:56 <LBPHacker> arseniiv: yeah I'm reading the logs now
19:35:15 <arseniiv> how can you not detect sweet cyrillic letters I carefully typed on my keyboard :P
19:35:24 <LBPHacker> but Hungarian is one word my eyes are *very* trained to spot
19:55:29 <b_jonas> you could use computers to spot words. they're good at it.
19:59:27 <HackEso> arvomioksesi oikseni henkohattaan luulevanamme lähestyvyydyt pysyvemmistä komentuelliksemme ahdosta soletettävälimiin plastaskemiksempaili
20:00:20 <b_jonas> fizzie: there used to be some wisdom entries with hungarian text, but I don't think any of them remained
20:00:26 <b_jonas> I think I deleted all of them
20:29:36 <HackEso> 1/1:lion//Lions are the catamorphisms of the animal world. They get eaten by poets in stone dens. \ lifthrasiir//lifthrasiir is shunned by the rest of his country for being no good at League of Legends. \ learning//Learning is disco, baby. \ ghoti//“Ghoti” is a very fishy spelling. \ at//At is a daemon for procrastinating commands.
20:29:45 <arseniiv> though if that were me, I’d deleted my own too maybe
20:30:17 <HackEso> 1/2:206) <locks> who's walter bright and why is he so bright <nddrylliog> locks: he's to D what I'm to ooc <nddrylliog> locks: guilty \ 916) <augur> DIE <augur> oh hey elliott \ 1117) <ais523> nowadays I tend not to have a physical form at all though <zzo38> Interesting.............??? \ 1095) <metasepia> `addquote \item <elliott\_> `addquote <olsner> two quotes about quotes about django <olsner> I guess the worst part is that I appear in all three ha
20:30:20 <HackEso> 2/2:ckego quotes about django \\ <olsner> elliott\_: another quote? you're not helping \texttt{:/} ← and three giraffes. \ 1142) <ion> Homeopathic encryption: add 9 parts NULs to 1 part of data, shake well into three directions, repeat the process 30 to 100 times.
20:32:13 -!- Lord_of_Life_ has joined.
20:34:12 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:35:06 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:43:35 <HackEso> b_jonas egy nagyon titokzatos személy. Hollétéről egyelőre nem ismertek. He is often too busy with appeasing the M:tG gods to make any sense.
20:43:51 <b_jonas> that one does have hungarian words, and I wasn't even the one who created it
20:44:55 <b_jonas> arseniiv: I created lots of silly wisdoms, then later deleted many of them
20:45:12 <b_jonas> wisdom/b_jonas is probably the only one that contains hungarian words that I didn't create
20:47:19 <arseniiv> <b_jonas> hungarian words that I didn't create => I parse it that way now
20:48:03 <arseniiv> it implies you created some Hungarian words, probably every other one :D
20:48:50 <b_jonas> well, it's pretty likely that I created some Hungarian words, though probably not the ones in the wisdoms
20:49:02 <b_jonas> and it may be just one wisdom, wisdom/ha
20:49:09 <b_jonas> I thought there were a few other ones, but maybe no
21:02:32 -!- arseniiv has quit (Read error: Connection reset by peer).
21:03:00 -!- arseniiv has joined.
21:43:32 -!- tromp_ has quit (Remote host closed the connection).
21:45:28 -!- AnotherTest has quit (Ping timeout: 245 seconds).
21:59:14 -!- tromp has joined.
22:04:16 -!- tromp has quit (Ping timeout: 264 seconds).
23:12:09 -!- FreeFull has quit.
23:14:53 -!- atslash has quit (Quit: This computer has gone to sleep).
23:19:33 -!- b_jonas has quit (Quit: leaving).
23:26:23 -!- tromp has joined.
23:30:42 -!- tromp has quit (Ping timeout: 252 seconds).
23:45:21 -!- MDude has joined.
23:58:21 -!- Phantom_Hoover has quit (Quit: Leaving).
00:36:20 -!- xkapastel has joined.
01:00:53 -!- arseniiv has quit (Ping timeout: 245 seconds).
01:06:36 -!- tromp has joined.
01:11:27 -!- tromp has quit (Ping timeout: 264 seconds).
01:39:00 <zzo38> "X-Clacks-Overhead is a non-standardised HTTP header..." I have seen it in NNTP too (when downloading a message from the aioe.org help desk newsgroup).
02:45:27 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:54:50 -!- tromp has joined.
02:59:13 -!- tromp has quit (Ping timeout: 250 seconds).
03:15:10 -!- diginet has joined.
03:57:49 <zzo38> I have a book of philosophy of mathematics and logic. In one chapter they mention set theory with intuitionistic logic and Uniformity Principle.
03:57:55 <zzo38> Do you know of that?
04:24:28 -!- MDude has quit (Ping timeout: 244 seconds).
04:43:23 -!- tromp has joined.
04:48:03 -!- tromp has quit (Ping timeout: 264 seconds).
04:52:21 -!- arseniiv has joined.
05:14:31 -!- MDude has joined.
05:41:54 <zzo38> Also they say that a set that is neither finite nor infinite is a "Dedekind set", but I cannot find that on Wikipedia.
05:45:48 <shachaf> What is Uniformity Principle?
05:47:10 <shachaf> Do you like identity-based encryption?
05:49:14 <zzo38> How is identity-based encryption working?
05:50:19 <zzo38> Uniformity Principle is defined as: Whenever an extensional binary relation R links every set of natural numbers X to some natural number n, there is some n that gets related to R by all such sets X.
05:50:50 <zzo38> forall X. exists n. R(X,n) -> exists n. forall X. R(X,n)
05:51:01 <shachaf> This is the description I heard:
05:51:04 <zzo38> (This is with intuitionistic logic, not classical logic.)
05:51:32 -!- sprocklem has quit (Read error: Connection reset by peer).
05:51:34 <shachaf> You can use any string as a public key and encrypt things with it, and a central authority can issue private keys that can be used to decrypt.
05:51:48 <shachaf> For example you could encrypt to a username.
05:53:30 <zzo38> I think it isn't so good probably
05:53:40 -!- arseniiv has quit (Ping timeout: 248 seconds).
05:54:35 <shachaf> I think it's pretty neat that it's possible.
06:02:03 <shachaf> Another thing you can do is "attribute-based encryption".
06:31:34 -!- tromp has joined.
06:34:21 -!- tromp has quit (Remote host closed the connection).
06:34:33 -!- tromp has joined.
06:39:34 <esowiki> [[ ]] https://esolangs.org/w/index.php?diff=65646&oldid=62052 * Dtuser1337 * (+18) Adding the year.
06:41:13 -!- sprocklem has joined.
06:45:30 <esowiki> [[Microscript]] M https://esolangs.org/w/index.php?diff=65647&oldid=45776 * Dtuser1337 * (-13) /* Commands */ seems like the <code> tag dosent work when in <pre> tag.
06:46:05 <zzo38> This defines the set of truth values as pairing propositions p with {x:x=0 and p} to make a set of sets. In conventional mathematics this is {{},{0}}, but with the kind described in this book with intuitionistic and uniformity, such a set is neither finite nor infinite.
06:46:26 -!- tromp has quit (Remote host closed the connection).
06:47:25 <zzo38> It also has, that a set being nonempty is different from a set being inhabited.
06:47:32 -!- tromp has joined.
06:48:02 <esowiki> [[Jumper]] https://esolangs.org/w/index.php?diff=65648&oldid=65161 * Dtuser1337 * (+18) Woosh
06:52:05 <esowiki> [[Jolf]] https://esolangs.org/w/index.php?diff=65649&oldid=47253 * Dtuser1337 * (+18) Yare yare daze
06:52:16 <shachaf> zzo38: Is "inhabited" just stronger than nonempty because it names a specific inhabitant?
06:52:51 <shachaf> zzo38: Do you like this? https://home.sandiego.edu/~shulman/papers/lcm-bloomington-talk.pdf
06:52:56 -!- nfd9001 has joined.
06:54:43 <zzo38> shachaf: It is stronger because it is intuitionistic logic, where (exists x. not phi) does not follow logically from (not forall x. phi).
06:55:40 <shachaf> I think those slides make a pretty compelling case for using linear logic for this sort of thing.
07:10:43 <zzo38> Does page ten have "n > n" but should it be "n > N"?
07:30:04 -!- AnotherTest has joined.
08:05:39 -!- wob_jonas has joined.
08:07:05 <wob_jonas> "<shachaf> You can use any string as a public key and encrypt things with it, and a central authority can issue private keys that can be used to decrypt." => sure. the central authority fixes an algorithm to generate a random private/public keypair with a reproducible random generator seeded with the super-secret key of the central authority plus t
08:07:36 <wob_jonas> there are only two problems: the central authority has to verify somehow who gets to own each identity, and the central authority has to make sure that the root key isn't stolen or lost.
08:17:59 <shachaf> wob_jonas: You can encrypt without asking the central authority.
08:18:10 <shachaf> The public key is just an arbitrary string.
08:18:39 <wob_jonas> can you also decrypt without asking the central authority?
08:19:05 <shachaf> You get a decryption key from them.
08:19:39 <wob_jonas> do you just encrypt everything with the central authority's public key and they decrypt the messages (or their block cypher keys at least) for you?
08:20:11 <shachaf> No, you don't need to give them the message itself.
08:21:04 <wob_jonas> sure, you only need to give the encrypted block cypher key
08:21:16 <wob_jonas> that's shorter than the message usually
08:21:32 <wob_jonas> it's of a fixed size even if the message has a whole video
08:22:14 <shachaf> They give you a single decryption key that you can use to decrypt any message that was encrypted with your name by anyone.
08:22:20 <wob_jonas> but then, how do you keep the message secret, unless there's a second layer of encryption or something? send it by snail mail?
08:22:34 <wob_jonas> shachaf: now that sounds more impossible
08:27:03 <shachaf> https://en.wikipedia.org/wiki/ID-based_encryption talks about it apparently.
08:29:19 -!- atslash has joined.
08:34:40 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
08:36:27 -!- Lord_of_Life has joined.
09:12:51 <wob_jonas> so, um, dumb question but does https://esolangs.org/wiki/Flop qualify as a Brainfuck-like?
09:14:30 <wob_jonas> it has a separate code and data memory, has a single head pointing into the data memory, can increment or decrement or zero-test the value under the data head but not much more
09:15:00 <wob_jonas> but has more general control flow than brainfuck
09:15:50 <wob_jonas> or maybe the data memory and code memory are supposed to be the same array, like in befunge
09:17:01 <wob_jonas> not easy to tell anything from the description because it has no interpreter and no nontrivial programs
11:09:09 -!- atslash has quit (Ping timeout: 258 seconds).
11:09:21 -!- atslash has joined.
11:19:08 <wob_jonas> https://www.youtube.com/channel/UCiyuYC0D4-AO0AonCfMifPQ has some nice classical music
11:29:59 <int-e> Oh what a brilliant idea... let's display ads (in the console) when installing packages. How about running a crypto miner for half an hour before allowing your package to be installed?
11:33:35 <myname> if you make ads in terminal, i want at least some animation and mouse interaction
11:35:25 <int-e> https://github.com/standard/standard/issues/1381 is the experiment in question
11:36:39 <int-e> The irony is that this really hilights a security problem.
11:37:03 <wob_jonas> display ads when installing packages => sure, installers for some commercial packages do that
11:37:16 <int-e> Maybe I should open a ticket asking how much he wants for planting a backdoor.
11:37:16 <myname> int-e: npm already has so much of those, one more or less won't matter
11:37:30 <wob_jonas> running a crypto miner for half an hour => I wouldn't exclude it, the installer also takes half a day to complete
11:37:32 <int-e> (That should be an attractive funding source!)
11:40:38 <int-e> (The source also mentions https://github.com/kethinov/no-cli-ads ... which is the corresponding ad-blocker.)
11:40:51 <int-e> (Let the games begin!)
11:43:12 <int-e> Oh well. I received a U2F token in the mail and installation was almost painless (one configuration file for udev and things worked...)
11:47:36 <myname> forken would be an interesting dick move
11:50:01 <int-e> is "forken" denglish?
11:51:08 <int-e> anyway, forking is a way to relieve the pain of the maintainer, so it is a solution to the problem as stated. (Framed properly: "I'm tired of maintaining this software for free.")
11:52:28 <myname> not maintaining, just making an adless-standard fork that automatically merges standard overnight
13:20:03 -!- arseniiv has joined.
13:31:17 -!- xkapastel has joined.
13:59:41 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65650&oldid=65645 * InfiniteDonuts * (+103)
14:00:17 <esowiki> [[SNUSP]] https://esolangs.org/w/index.php?diff=65651&oldid=53706 * InfiniteDonuts * (+39)
14:01:12 <esowiki> [[PATH]] https://esolangs.org/w/index.php?diff=65652&oldid=33608 * InfiniteDonuts * (+45)
14:01:40 <esowiki> [[PATH]] https://esolangs.org/w/index.php?diff=65653&oldid=65652 * InfiniteDonuts * (+9)
14:02:42 <esowiki> [[User:InfiniteDonuts]] https://esolangs.org/w/index.php?diff=65654&oldid=65625 * InfiniteDonuts * (-24)
14:06:17 -!- Melvar has quit (Quit: WeeChat 2.4).
14:49:38 -!- atslash has quit (Ping timeout: 244 seconds).
14:50:21 -!- atslash has joined.
15:02:16 <zzo38> npm has some switches to control installation, you could perhaps use --ignore-scripts to skip the ads maybe
15:03:23 <zzo38> (I don't know if it works; I haven't tried it, but if the ads are loaded in that way then it might)
15:12:25 <zzo38> (And, it seems to be, as far as I can tell. It has a "funding" package as a dependency; the "funding" package executes itself as soon as it is installed.)
15:15:54 <int-e> well that seems a bit pointless
15:16:20 <int-e> (if you don't trust the author/maintainer with their installation script, why would you trust them with their other code?
15:17:28 <zzo38> Yes, that makes sense, although it is a simple way to skip the installation scripts for whatever reason (including, that you may wish to review the code before running the scripts, or add additional steps in between, or whatever else you might want).
15:32:27 <zzo38> I think Rogers system is better than Magnuson system.
15:34:26 -!- Melvar has joined.
15:35:23 -!- Sgeo has quit (Ping timeout: 268 seconds).
15:49:33 <zzo38> "Another common way of expressing the base is writing it as a decimal subscript after the number that is being represented (this notation is used in this article)." I have also seen the base spelled out in words as the subscript, but it can be long. Also I have seen some documents use a hexadecimal subscript (in the same document with decimal subscripts!).
15:49:45 <zzo38> So, I propose to use subscripts with roman numbers instead.
15:55:02 <zzo38> What do you think of this?
16:02:34 <Hooloovo0> I would avoid roman numerals if at all possible
16:02:43 <Hooloovo0> they're really hard to use for numbers >~10
16:05:10 -!- Phantom_Hoover has joined.
16:13:29 <arseniiv> zzo38: in totally ambiguous scenarios, I’d propose writing the base in unary. Ironically, unary doesn’t belong to the family of numerations to which decimal or binary do
16:14:37 <arseniiv> though it’s not enough, I’d write all the digits too maybe (and then unary is unnecessary), like 1001011_(01)
16:14:59 <zzo38> arseniiv: That is going to be even more long than using words, I think.
16:19:39 <arseniiv> <zzo38> Also they say that a set that is neither finite nor infinite is a "Dedekind set", but I cannot find that on Wikipedia. => seems like a terminological confusion. There are several definitions of (in)finiteness of a set, varying in strength when no presuppositions like the axiom of choice are made. When the latter is present, though, Dedekind (in)finite is equivalent to “usual” (in)finite. This can be useful: https://en.wikipedia.org/wiki/Fin
16:19:39 <arseniiv> ite_set#Other_concepts_of_finiteness
16:22:03 <arseniiv> ah, this is in intuitionistic concept, then I don’t know how it relates
16:22:43 <arseniiv> <zzo38> arseniiv: That is going to be even more long than using words, I think. => agree for ten, disagree for two :)
16:23:10 <arseniiv> https://en.wikipedia.org/wiki/Finite_set#Other_concepts_of_finiteness
16:24:00 <arseniiv> hopefully it still could be useful. They couldn’t name those sets Dedekind without any connection to Dedekind finiteness
16:26:09 <zzo38> Yes, it is shorter than words in case of two, but, often you will use larger numbers for the base. If it is roman numbers then is as much as unary in case of two
16:33:22 -!- FreeFull has joined.
16:37:00 -!- b_jonas has joined.
16:53:23 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65655&oldid=65650 * B jonas * (+24)
16:55:53 <HackEso> olist 1177: shachaf oerjan Sgeo FireFly boily nortti b_jonas
17:49:38 -!- MDude has quit (Ping timeout: 245 seconds).
17:50:27 -!- MDude has joined.
18:12:19 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65656&oldid=65643 * InfiniteDonuts * (+86)
18:17:39 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65657&oldid=65655 * InfiniteDonuts * (+258)
18:20:23 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65658&oldid=65657 * InfiniteDonuts * (+147)
18:21:23 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65659&oldid=65658 * InfiniteDonuts * (+6)
18:30:54 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65660&oldid=65659 * InfiniteDonuts * (+164)
18:32:43 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65661&oldid=65660 * InfiniteDonuts * (+16) /* A Brief Tutorial */
18:33:58 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65662&oldid=65661 * InfiniteDonuts * (-18) /* Sample Programs */
18:55:27 -!- nfd9001 has quit (Ping timeout: 245 seconds).
19:31:02 -!- xkapastel has quit (Quit: Connection closed for inactivity).
19:37:59 -!- ivzem[m] has joined.
20:11:11 <esowiki> [[Funge-98]] https://esolangs.org/w/index.php?diff=65663&oldid=59451 * Quuxplusone * (+21) documentation of 'p' had the arguments in the wrong order
20:14:47 <esowiki> [[Funge-98]] https://esolangs.org/w/index.php?diff=65664&oldid=65663 * Quuxplusone * (+36) /* Instructions */ fix description of % and / for clarity
20:21:20 <esowiki> [[Funge-98]] https://esolangs.org/w/index.php?diff=65665&oldid=65664 * Quuxplusone * (+170) /* Instructions */ add "greater", and asciibetize the table
20:31:27 -!- Phantom__Hoover has joined.
20:32:45 -!- Phantom___Hoover has joined.
20:33:04 -!- Lord_of_Life_ has joined.
20:34:38 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
20:35:28 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:35:48 -!- Phantom__Hoover has quit (Ping timeout: 244 seconds).
20:35:55 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:47:19 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65666&oldid=65662 * InfiniteDonuts * (-10)
21:09:58 <esowiki> [[Befunge]] https://esolangs.org/w/index.php?diff=65667&oldid=62225 * Quuxplusone * (-4692) Remove VB.NET code. Esolang isn't a source code repository for interpreters, afaik. Put that code on GitHub or something.
21:10:29 -!- omegasome has joined.
21:10:39 -!- omegasome has changed nick to hppavilion[1].
21:10:58 <hppavilion[1]> I mainly connected because: It's my first day of college!
21:11:45 <hppavilion[1]> Also, I can't get to slashnet to join #xkcd and I don't know if irc.slashnet.org is down or if it's the uni's wifi or what
21:14:16 -!- hppavilion[1] has quit (Client Quit).
21:14:38 -!- hppavilion[1] has joined.
21:18:51 <b_jonas> hi hppavilion[1]! I was wondering if we lost you, you haven't been here for months
21:19:15 -!- hppavilion[2] has joined.
21:19:37 <hppavilion[2]> You had for a while, but I think I'm gonna re-add this channel as an autojoin
21:19:46 <b_jonas> might be about a year by now
21:20:59 <hppavilion[2]> Also, I just bound hexchat to my vpn (<I'd plug a sponsor link here if I were internet-famous enough to have one>) so slashnet works
21:21:42 <hppavilion[2]> You know what's sorta crazy that I realized early this morning?
21:22:01 <hppavilion[2]> If I were born a few decades ago, today would could the first time in my life I'd have internet access.
21:22:32 -!- hppavilion[1] has quit (Ping timeout: 245 seconds).
21:22:41 <HackEso> Any regular who gives the slightest Rogue One spoiler shall be hunted down in real life and have their intestines removed through their eye sockets. Members would not be exempt if they existed, which they don't.
21:22:57 <b_jonas> hppavilion[2]: ^ I wanted to ask if that's still true
21:23:20 <hppavilion[2]> b_jonas: It isn't, but the spoiler rule DOES apply to other movies
21:23:48 <hppavilion[2]> I *may* have contemplated hiring a hitman on that NFL player who tweeted out an Endgame spoiler.
21:24:42 -!- Camto[m] has joined.
21:26:00 <shachaf> Does it apply to The Empire Strikes Back?
21:27:58 <b_jonas> movies only? does it apply to tv series, webcomics, novels, short stories?
21:30:04 -!- AnotherTest has quit (Ping timeout: 272 seconds).
21:34:25 -!- nfd9001 has joined.
21:34:37 -!- atslash has quit (Ping timeout: 245 seconds).
21:37:40 -!- atslash has joined.
21:39:02 <b_jonas> I think we should rearrange the wisdoms then if Rogue One isn't particularly the target
21:41:13 <b_jonas> ``` set -e; slashlearn "spoiler//Don't give movie spoilers on channel. If you do, hppavilion may hire a hitman to hunt you down in real life and torture you in refined ways."; forget rogue one
21:41:16 <HackEso> rm: cannot remove 'wisdom/rogue': No such file or directory \ rm: cannot remove 'wisdom/one': No such file or directory \ Learned 'spoiler': Don't give movie spoilers on channel. If you do, hppavilion may hire a hitman to hunt you down in real life and torture you in refined ways.
21:41:22 <b_jonas> ``` set -e; slashlearn "spoiler//Don't give movie spoilers on channel. If you do, hppavilion may hire a hitman to hunt you down in real life and torture you in refined ways."; forget "rogue one"
21:41:24 <HackEso> Relearned 'spoiler': Don't give movie spoilers on channel. If you do, hppavilion may hire a hitman to hunt you down in real life and torture you in refined ways.Forget what?
21:41:28 <HackEso> Don't give movie spoilers on channel. If you do, hppavilion may hire a hitman to hunt you down in real life and torture you in refined ways.
21:41:42 <HackEso> hppavilion is the generator including, but not limited to, hppavilion[1], hppavilion[2], and hppavilion[42]. hppavilion is of length 37-42i-28j+4k-28ij+38ik+62jk+20ijk. A common alternative definition is the set of all items yielded by the general case of the generator. Not to be confused with hppavilion^k or hppavilion_m.
21:42:13 <HackEso> higgledy piggledy / hp pavilion / doesn't like jokes that are / written in text; // uncontroversially, / one in a million is / roughly the chance they won't / be left perplexed
21:42:14 <HackEso> hppavilion[1] se describe en las notas al pie. ¿Porqué no los dos? Nadie lo sabe. No es tan cluecless. Él aspira a ser más incomprensible que esta sabiduría.
21:42:41 <shachaf> Is that supposed to be a quaternion?
21:43:18 <b_jonas> should we mention that he hates movie spoilers in one of those?
21:44:41 <b_jonas> ``` perl -pi -e's"(jokes)"movie spoilers or $1"' wisdom/hppavilion1
21:47:02 <shachaf> What kind of higgledy piggledy is that?
21:47:08 <HackEso> 9631:2016-11-06 <oerjän> learn_append hppavilion[1] \xc3\x89l aspira a ser m\xc3\xa1s incomprensible que esta sabidur\xc3\xada. \ 8609:2016-06-26 <boil̈y> learn_append hppavilion[1] No es tan cluecless. \ 6238:2015-11-23 <oerjän> undo 6237 \ 6237:2015-11-22 <quintopïa> le/rn hppavilion[1]/HP pays $3.5m a year to name an arena in San Jose after him. \ 5917:2015-08-22 <boil̈y> learn hppavilion[1] se describe en las notas al pie. \xc2\xbfPorqu\xc3\xa9
21:47:23 <HackEso> 11916:2019-08-26 <b_jonäs> `` perl -pi -e\'s"(jokes)"movie spoilers or $1"\' wisdom/hppavilion1 \ 5743:2015-06-25 <hppavilion̈1> revert \ 5742:2015-06-25 <ZomieChenëy> learn hppavilion1 is ZombieCheney \ 5607:2015-06-18 <shachäf> ` sed -i -e \'s/\\w\\+ \\w\\+ //\' -e \'s/leave them/be left/\' wisdom/hppavilion1 \ 5606:2015-06-18 <hppavilion̈1> learn hppavilion1 is higgledy piggledy / hp pavilion / doesn\'t like jokes that are / written in text; //
21:47:57 <HackEso> higgledy piggledy / hp pavilion / doesn't like movie spoilers or jokes that are / written in text; // uncontroversially, / one in a million is / roughly the chance they won't / be left perplexed
21:49:38 <hppavilion[2]> shachaf: And re. ESB: While the tides of battle in the Great Spoiler War have clearly let lay that sufficiently old movies are fair game, I sometimes lay awake at night, fondly picturing a world where even the ending of Citizen Kane is protected for future generations
21:51:49 <shachaf> if a movie can be spoiled with a single sentence it probably isn't a good movie hth
22:09:13 -!- nfd9001 has quit (Ping timeout: 276 seconds).
22:12:33 -!- hppavilion[2] has quit (Ping timeout: 245 seconds).
22:16:46 -!- nfd9001 has joined.
22:22:52 -!- nfd9001 has quit (Ping timeout: 276 seconds).
22:26:36 -!- nfd9001 has joined.
22:37:10 -!- nfd9001 has quit (Ping timeout: 276 seconds).
22:43:21 -!- Sgeo has joined.
22:45:56 -!- arseniiv has quit (Ping timeout: 248 seconds).
22:49:13 -!- atslash has quit (Ping timeout: 245 seconds).
22:49:37 -!- atslash has joined.
22:55:29 -!- FreeFull has quit.
23:21:35 -!- Phantom___Hoover has quit (Ping timeout: 268 seconds).
23:28:37 <kmc> shachaf: I can think of some really good movies that have a big exciting twist, but I'm not sure it really spoils enjoyment of the movie to know what's coming
23:28:45 <kmc> I think people have studied it and concluded it usually doesn't
23:30:12 <shachaf> I think my statement was probably too strong, depending on what you mean by "spoil"
23:43:34 -!- b_jonas has quit (Quit: leaving).
00:04:31 <HackEso> 35) <ehird> With enough crappiness a display can show you invisible pink unicorns. \ 995) <fizzie> "May you live in INVISIBLE TIMES." --Old Chinese proverb. (It can look confusing when written with the proper Unicode.)
00:55:00 -!- adu has joined.
01:24:17 -!- ARCUN has joined.
01:24:43 <ARCUN> I just got Cygwin.
01:24:53 <ARCUN> what fun things can I do?
01:25:30 <ARCUN> I'm asking, as I currently don't have an active project.
01:25:52 <shachaf> You could write a compiler for my programming language.
01:27:26 <shachaf> Is there a reason to use Cygwin nowadays with WSL?
01:28:14 <ARCUN> I'm using it, since I don't have a PC of my own. I run it on a flashdrive
01:28:24 <ARCUN> Its so far pretty good
01:28:50 <ARCUN> If did have a PC, though, I'd be using WSL instead
01:29:48 <ARCUN> When you finish your lang, tell me on my talk page
01:30:01 <shachaf> I don't have a wiki account.
01:30:16 <shachaf> My language is going to be so good, if I make it.
01:30:55 <ARCUN> I'd like to see it in action when you complete it
01:31:06 <shachaf> You could write some fancy software.
01:31:20 <shachaf> Maybe you can make a good debugger for me.
01:32:43 <ARCUN> Well, that'll happen when you make a wiki account and tell me about it
01:32:51 -!- ARCUN has left.
01:46:15 -!- nfd9001 has joined.
02:02:40 -!- Sgeo_ has joined.
02:04:52 -!- Sgeo has quit (Ping timeout: 248 seconds).
02:24:06 -!- adu has quit (Quit: adu).
03:19:06 <esowiki> [[Ojc]] N https://esolangs.org/w/index.php?oldid=65668 * A * (+215) Created page with "[[Ojc]] (standing for O[b]j[e]c[t]) is an [[object-oriented]] language designed to be very concise. It is influenced by both Smalltalk and Simula. [[Category:Languages]] Cat..."
03:29:10 -!- nfd9001 has quit (Ping timeout: 272 seconds).
03:36:36 -!- MDude has quit (Ping timeout: 248 seconds).
03:56:23 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65669&oldid=65668 * A * (+2283) No Simula, since I can't learn it.
03:57:50 -!- Sgeo__ has joined.
04:01:08 -!- Sgeo_ has quit (Ping timeout: 248 seconds).
04:31:45 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65670&oldid=65669 * A * (+1049) Examples
04:31:58 <HackEso> 417) <NihilistDandy> Capitalism is a cancer. But I'm a smoker, anyway, so...
04:37:28 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65671&oldid=65670 * A * (+1467) /* Doing math */
04:37:55 <esowiki> [[Ojc]] https://esolangs.org/w/index.php?diff=65672&oldid=65671 * A * (-6) /* Doing math */ Typo
04:59:54 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65673&oldid=65672 * A * (+5602) /* Math in Ojc */
05:28:51 <esowiki> [[Ojc]] https://esolangs.org/w/index.php?diff=65674&oldid=65673 * A * (+1392) /* Sets */
05:30:31 -!- nfd9001 has joined.
05:30:40 -!- sebbu2 has joined.
05:33:48 -!- sebbu has quit (Ping timeout: 245 seconds).
05:38:49 <shachaf> Is the "top-level scope" in a file really like a regular scope or do languages just trick you to make it look like one?
05:39:15 <shachaf> It seems pretty different.
05:41:04 <pikhq> Pretty sure it's regular in Tcl.
05:41:08 <pikhq> But Tcl is a weirdo.
05:42:04 <shachaf> OK, one property of regular scopes is typically that "{ a; b; c; }" means the same as "{ a; { b; c; } }", and if b is a declaration, it's only visible inside the inner block.
05:42:21 <shachaf> I guess that's actually still true in C.
05:43:09 <shachaf> But say you have a thing that reads multiple files and lets declarations refer to each other -- then that's not true anymore.
05:43:14 <shachaf> Definitions are being exported.
05:43:45 <shachaf> I want to have things that modify a scope, as in "const { int x = 1; int y = 2; }" instead of "const int x = 1; const int y = 2;". But I want those declarations to go into the same scope as the regular declarations.
05:43:53 <shachaf> (const is maybe not the best example but you get the idea.)
05:44:28 <shachaf> It's possible that "exported" declarations should be marked explicitly rather than just looking like regular variable declarations?
05:54:21 <Sgeo__> I'm starting to suspect that nVidia's notion of stereoscopy is limited and I should write my own.
05:54:51 <shachaf> you wouldn't copy a stereo
05:58:50 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65675&oldid=65674 * A * (+4753) /* Sets */
05:59:26 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65676&oldid=65675 * A * (-1486) /* Dictionaries */
05:59:48 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65677&oldid=65676 * A * (+1488) /* Sets */
06:20:05 <int-e> btc is weird... why do you split inputs like this? https://bitinfocharts.com/bitcoin/block/530048/183hmJGRuTEi2YDCWy5iozY8rZtFwVgahM
06:25:29 <shachaf> Is there something special about that transaction?
06:25:50 <int-e> It's padded. All the inputs come from the same address.
06:26:00 <Sgeo__> I think I accidentally defined a homogenous coordinate system
06:26:22 <Sgeo__> nVidia has an equation PsInput.x += Separation*(〖PsInput〗_w-Convergence)
06:26:46 <Sgeo__> I decided I wanted to be able to represent PsInput.x += some_constant, which that equation doesn't allow
06:26:51 <int-e> So why would you pad transactions... to slow down the overall transaction rate maybe? This was at a local BTC price peak, too. I don't know.
06:27:01 <Sgeo__> So x += realSep * w - virtualSep * Convergence
06:27:19 <Sgeo__> When realSep = 0, then the equation cannot be converted to the nVidia form
06:27:38 <Sgeo__> (is equation the right word here? It feels wrong. Formula?)
06:28:14 <Sgeo__> * when realSep = 0 and virtualSep and Convergence are non-9
06:28:48 <int-e> Anyway, enough time wasted on this. (I started looking into this because I tried to understand this peak: https://www.blockchain.com/charts/output-volume?timespan=30days
06:30:31 <int-e> ... bit as far as I can see this is just many transactions siphoning off tiny amounts from a single rich address (output of transaction = balance of input). So basically how a bitcoin exchange might operate.)
06:31:01 <shachaf> int-e: I saw that, but I meant why you were looking at it in the first place, or whether this is common.
06:31:04 <int-e> But meh I really shouldn't waste time on this.
06:32:53 <int-e> I don't know whether this kind of padding is a common tactic, I don't even know what exactly it's supposed to achieve.
06:33:22 <int-e> It's a curiosity, really. Odd enough to make me wonder, not important enough to make me care.
06:58:02 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65678&oldid=65677 * A * (+1809) /* Classes */
06:59:45 <esowiki> [[User:JonoCode9374]] https://esolangs.org/w/index.php?diff=65679&oldid=65144 * JonoCode9374 * (+10) /* Languages I've Inspired (feel free to add anything I've missed) */
07:08:23 -!- wob_jonas has quit (Ping timeout: 245 seconds).
07:15:51 -!- Sgeo_ has joined.
07:19:34 -!- Sgeo__ has quit (Ping timeout: 244 seconds).
08:05:22 -!- AnotherTest has joined.
08:21:10 -!- cpressey has joined.
08:23:32 <cpressey> Good morning. I wonder how well Haskell's $ operator would work in an S-expression-based language.
08:24:42 <shachaf> So instead of (f (g x)) you'd write ($ f (g x))
08:25:16 <cpressey> I was thinking you'd write (f $ g x)
08:25:34 <shachaf> I should've lowercased that because it was very much not serious.
08:27:49 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65680&oldid=65666 * B jonas * (+119)
08:28:41 -!- wob_jonas has joined.
08:32:22 <cpressey> shachaf: Your error handling thing reminds me of "lexical exceptions", though I don't remember if it's something I saw somewhere, or something I made up once
08:32:46 <cpressey> In "lexical exceptions" you're only allowed to throw X in a location that is lexically enclosed by a catch X
08:33:36 <esowiki> [[Talk:Ojc]] N https://esolangs.org/w/index.php?oldid=65681 * JonoCode9374 * (+262) Lps
08:34:13 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:34:20 <cpressey> That doesn't make them totally static, for example if you have local functions, you could write a recursive function inside that lexical block, and throw inside it
08:34:40 <shachaf> Is X an exception type or something lexically bound?
08:35:19 <cpressey> I am sorely tempted to tell you it is a lexically bound exception type
08:35:46 <cpressey> It's some kind of exception type, sure.
08:35:46 <shachaf> I think I'm asking what sort of identifier X is, or where it comes from.
08:36:36 <cpressey> When you throw, you almost always throw a newly-created value, whether it is a value of type "exception" (as it usually is), or not
08:36:51 <cpressey> Throwing existing values is... not something I've seen done.
08:37:12 -!- heroux has quit (Ping timeout: 268 seconds).
08:37:27 -!- heroux has joined.
08:37:28 <cpressey> Maybe you make up a new exception value, out of some local variables you have - that's common.
08:37:34 <shachaf> I'm confused about what binds the values.
08:37:55 <cpressey> I don't know what you mean by that.
08:38:12 -!- Lord_of_Life has joined.
08:38:31 <shachaf> Maybe you can write a more specific example?
08:39:56 <cpressey> try { raise KeyError(12); } catch KeyError(n) { print(n); } <-- is ok
08:40:20 <cpressey> try { foo(); /* which raises KeyError */ } catch KeyError(n) { print(n); } <-- is not ok, is not lexical
08:40:51 <wob_jonas> cpressey: so you only have lexical gotos?
08:41:32 <cpressey> btw, I hate that the opposite of "catch" is "throw" but the opposite of "raise" is "lower", and I usually end up saying "raise" and "catch" even though they're not opposites
08:41:39 <shachaf> I was wondering whether you meant something like "try { raise foo; } catch foo { ... }" where the identifier "foo" is bound by the catch.
08:43:29 <cpressey> wob_jonas: I guess so, but as I noted, they're still dynamic w.r.t. the stack, if you have e.g. a local recursive function in that lexical block
08:43:33 <wob_jonas> cpressey: I recommend "raise" and "except" then, as in python3
08:43:51 <shachaf> Can you give a recursive function example?
08:44:19 <shachaf> I don't really understand what you mean.
08:44:47 <cpressey> try { var f = function(m) { if m < 100 then f(m+1) else raise KeyError(13); } catch ...
08:44:48 <shachaf> Oh, I see, you mean you *define* a function inside a try.
08:44:59 <shachaf> Right, I'd just figured out what you meant.
08:45:50 <wob_jonas> but what happens if you copy f and leak it out of that scope? do you get a full call/cc?
08:46:45 <cpressey> wob_jonas: I guess it raises an exception that will never be caught. I guess you could also try to prevent it from leaking out.
08:47:08 <shachaf> This seems like a bizarre combination.
08:47:27 <cpressey> Well, I think this must be something I made up, rather than something I encountered somewhere.
09:24:28 -!- arseniiv has joined.
09:29:41 <cpressey> wob_jonas: I guess making the exception thrown by the escaped function, get caught by the lexical catch handler, would be a sensible way to handle it too (given that approximately none of this is very sensible)
09:30:21 <wob_jonas> cpressey: in that case what you have is a call/cc
09:30:25 <esowiki> [[Talk:Ojc]] M https://esolangs.org/w/index.php?diff=65682&oldid=65681 * A * (+528)
09:31:10 <esowiki> [[Talk:Ojc]] M https://esolangs.org/w/index.php?diff=65683&oldid=65682 * A * (+81) Link to tutorial
09:32:58 <esowiki> [[Ojc]] M https://esolangs.org/w/index.php?diff=65684&oldid=65678 * A * (+195) /* Tutorial */
09:34:03 <esowiki> [[Special:Log/move]] move * A * moved [[Ojc]] to [[Salt]]: Because Ojc is not interesting
09:34:04 <esowiki> [[Special:Log/move]] move * A * moved [[Talk:Ojc]] to [[Talk:Salt]]: Because Ojc is not interesting
09:34:49 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65689&oldid=65685 * A * (+4)
09:35:29 <esowiki> [[Talk:Salt]] M https://esolangs.org/w/index.php?diff=65690&oldid=65687 * A * (-3)
09:37:36 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65691&oldid=65689 * A * (+17) /* Documenting the class */ A mess
09:38:15 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65692&oldid=65691 * A * (-33) Smalltalk->Salt
09:39:40 <esowiki> [[Talk:Salt]] M https://esolangs.org/w/index.php?diff=65693&oldid=65690 * A * (+435)
09:45:29 <cpressey> wob_jonas: yes, and that feels slightly too "powerful" for what this was intended to achieve, probably, but who knows.
09:46:01 <wob_jonas> cpressey: you can always have a restriction of call/cc, such as call/ec
09:47:49 <wob_jonas> an explicitly bounded continuation where you tell how long you have to save the state
09:48:11 <shachaf> I'd like to know how linear continuations work.
09:51:59 -!- CountArthurStron has joined.
09:52:54 -!- CountArthurStron has quit (Client Quit).
09:53:10 -!- ArthurStrong has joined.
09:56:28 <cpressey> I have a language which is too "normal" to be an esolang, but is too weird to be a "normal" language.
09:57:44 <wob_jonas> cpressey: if in doubt, make an entry about it on esolangs.org, but don't definitely claim that it's an esolang
09:57:57 <wob_jonas> we have a few such entries already
09:58:20 <cpressey> I've made so many esolangs that the languages I've made that aren't particularly esoteric will probably be considered esolangs by many
09:58:24 -!- ArthurStrong has quit (Quit: leaving).
09:59:26 -!- ArthurStrong has joined.
09:59:54 <shachaf> Do you think C++ is an esolang?
10:00:30 <Taneb> I think C++ is certainly a programming language that is esoteric
10:00:38 <Taneb> Whether it's an esoteric programming language is another matter
10:01:01 <wob_jonas> so almost every programming language is esoteric, right? especially modern ones
10:01:16 <shachaf> I think C++ is the way it is for nearly the same reasons esolangs are the way they are.
10:01:50 <shachaf> People enjoy doing things under odd constraints that make them hard but achievable.
10:01:53 <cpressey> myname: https://github.com/catseye/Robin/tree/develop-0.3 (I'm trying to get the next version of released)
10:02:24 -!- ArthurStrong has quit (Client Quit).
10:02:39 -!- ArthurStrong has joined.
10:03:59 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65694&oldid=65692 * A * (+5853)
10:10:41 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65695&oldid=65694 * A * (-6) I should not make a Smalltalk-based language yet before I learn Smalltalk.
10:11:28 <esowiki> [[Talk:Salt]] M https://esolangs.org/w/index.php?diff=65696&oldid=65693 * A * (+90)
10:27:48 -!- Sgeo__ has joined.
10:29:40 <esowiki> [[Hello world program in esoteric languages]] M https://esolangs.org/w/index.php?diff=65697&oldid=65656 * A * (+29) /* SADOL */
10:31:17 -!- Sgeo_ has quit (Ping timeout: 268 seconds).
10:41:10 <cpressey> I think it's too freaky to be a "normal" language, even if it's not an esolang. So I think, things like trying to add Haskell's infix $ operator to it, are fair game.
10:41:35 <cpressey> Should probably just try hand-converting some Scheme code to use it first just to see what it looks like though.
10:48:32 <HackEso> The password of the month is surprising.
10:58:23 -!- xkapastel has joined.
11:01:10 <int-e> . o O ( cpressey doesn't believe in type signatures )
11:03:03 <int-e> oh I've found a few.
11:05:09 <cpressey> https://gist.github.com/cpressey/030883cadaf9a12a802cd6c95affc01e
11:06:22 <cpressey> It *does* reduce the number of parens, just like it does in Haskell. Whether it does so nicely, or not, I don't know.
11:06:32 <int-e> cpressey: now I want to get rid of the outermost parentheses as well
11:06:59 <int-e> (and `if` is a bit awkward
11:07:51 <cpressey> int-e: Why don't I believe in type signatures?
11:07:55 <int-e> I've used ghc's BlockArguments for if-then-else last weekend... https://gist.github.com/int-e/57eefc6cce29ed47ddaaca13a0774533#file-quine-hs-L319-L329
11:08:03 <int-e> cpressey: because your code uses them so sparingly
11:08:23 <int-e> cpressey: whereas I, almost religiously, put signatures on all top-level bindings.
11:08:34 <int-e> partly as documentation, partly to localize type errors
11:09:49 <cpressey> int-e: If I thought of these modules as public, I would probably try harder to do that. But this is largely experimental stuff.
11:09:57 <int-e> (The latter was the driving factor historically. I just got tired of working on modifying a function and getting a type error in a different function as a result.)
11:10:14 <wob_jonas> cpressey: I think some older lisps (of the common lisp side, not the scheme side) had this syntax extension where you can use square brackets as well as round parens, and a close square bracket closes all round paren that was open since the matching open square bracket
11:10:41 <wob_jonas> cpressey: is your dollar sign syntax the same, except you write round parenthesis instead of square brackets and a dollar sign instead of a left round parenthesis?
11:11:00 <wob_jonas> because if so, then the bracket thing is more general
11:12:15 <int-e> cpressey: anyway indentation is the best bracket-avoiding mechanism. ;)
11:13:07 <cpressey> wob_jonas: I don't like the "this one close paren closes all open parens" approach because the parens are unbalanced.
11:14:59 <cpressey> int-e: re ifThenElse, I was wondering on the weekend if Haskell's `if` couldn't just be defined as a function :: Boolean -> a -> a
11:15:19 <cpressey> `then` and `else` are good syntax though, justifies the sugar
11:15:20 <HackEso> /srv/hackeso-code/multibot_cmds/lib/limits: line 5: exec: then`: not found
11:16:00 <int-e> cpressey: there are advocates of that idea, but if-then-else is common enough and the alternative would have more parentheses and worse (usually type) errors.
11:17:47 <int-e> cpressey: the main downside, I guess, is that the syntax really only works for booleans; it can't be overloaded for a DSL.
11:19:16 <wob_jonas> cpressey: sure, in a *lazy* language you can define it as a function, only in haskell you have to call it something different from "if" because that name is taken by a keyword
11:20:04 <wob_jonas> but I'm used to strict languages, where it can't be defined as a plain function
11:20:06 <int-e> (A secondary issue is that I never really know how to layout if-then-else, especially inside do blocks. I do something, but it never feels right and I'm not sure how consistent I am... might be worth checking.)
11:20:16 <cpressey> wob_jonas: my point was they didn't need to define that keyword, they could've made `if` a function defined in the prelude
11:20:53 <cpressey> int-e: I have the same issue, I usually avoid it and use `case` instead
11:20:57 <wob_jonas> I think the function is there in the libraries under some other name
11:21:24 <int-e> :t Data.Bool.bool -- almost
11:21:58 <lambdabot> Data.Bool.HT if' :: Bool -> a -> a -> a
11:21:58 <lambdabot> Data.Bool.HT ifThenElse :: Bool -> a -> a -> a
11:21:58 <lambdabot> NumericPrelude ifThenElse :: () => Bool -> a -> a -> a
11:23:28 <fizzie> I was going to ask isn't if' the canonical name for that.
11:23:51 <lambdabot> Data.Bool.HT if' :: Bool -> a -> a -> a
11:23:51 <lambdabot> Control.Conditional if' :: ToBool bool => bool -> a -> a -> a
11:23:51 <lambdabot> Data.ProtoLens.Compiler.Combinators if' :: Exp -> Exp -> Exp -> Exp
11:23:55 <lambdabot> Data.Bool bool :: a -> a -> Bool -> a
11:23:55 <lambdabot> Data.Bool.Compat bool :: () => a -> a -> Bool -> a
11:23:56 <lambdabot> Control.Error.Util bool :: a -> a -> Bool -> a
11:24:29 <int-e> @pl if b then t else f
11:24:30 <cpressey> Apparently HT stands for... Henning Thielemann?
11:24:49 <myname> just define bools like (\xy.x) and (\xy.y), that eliminates the need of an if altogether
11:24:49 <Taneb> Sounds conceivable
11:24:55 <int-e> fizzie: @pl is the only reason I can think of that this name would be "canonical".
11:25:05 <wob_jonas> myname: that's hard in the original Haskell type system
11:25:18 <fizzie> int-e: Well, my definition of "canonical" here is "I've heard of it with that name".
11:25:43 <int-e> fizzie: That's not the canonical definition of "canonical". ;-)
11:27:25 <int-e> (Though if you've heard it somewhere that may support the idea that it is indeed canonical. But it might also be an idiosyncracy of your source, and not enshrined in any canon that everybody subscribes to.)
11:28:23 <int-e> ("Everybody" is, of course, referring to a certain subculture or clique. :P)
11:31:31 <fizzie> It may be that the reordered "bool :: a -> a -> Bool -> a" is more useful as a function anyway.
11:33:54 <fizzie> @hoogle Maybe a -> a -> a
11:33:55 <lambdabot> Test.Framework.Providers.API orElse :: Maybe a -> a -> a
11:33:55 <lambdabot> Control.Error.Util (?:) :: Maybe a -> a -> a
11:33:55 <lambdabot> Universum.Monad.Maybe (?:) :: Maybe a -> a -> a
11:34:35 <fizzie> @hoogle a -> Maybe a -> a
11:34:36 <lambdabot> Data.Maybe fromMaybe :: a -> Maybe a -> a
11:34:36 <lambdabot> System.Directory.Internal.Prelude fromMaybe :: () => a -> Maybe a -> a
11:34:36 <lambdabot> Distribution.Compat.Prelude.Internal fromMaybe :: () => a -> Maybe a -> a
11:36:51 <lambdabot> • Variable not in scope: if' :: Bool -> Expr -> Expr -> t
11:36:51 <lambdabot> • Perhaps you meant ‘f'’ (imported from Debug.SimpleReflect)
11:38:28 -!- nfd9001 has quit (Ping timeout: 258 seconds).
11:39:04 <fizzie> @pl \c a b -> bool a b c
11:40:13 <cpressey> I don't even know enough Haskell syntax to write a `case` on one line
11:40:22 <fizzie> @pl \a b c -> if c then a else b
11:40:51 <fizzie> Maybe it just knows enough about if' to translate if/then/else into it.
11:40:54 <wob_jonas> cpressey: it's like case expr of { pat0 => expr0; pat1 => expr1; }
11:41:26 <wob_jonas> I'm not sure, I don't remember haskell syntax
11:41:48 <int-e> > case otherwise of False -> "oops"; True -> "okay!"
11:41:54 <int-e> > case otherwise of { False -> "oops"; True -> "okay!" }
11:42:50 <int-e> => in case is the mark of an ML programmer?
11:44:21 <cpressey> OK. I think it is just that @pl does not parse the syntax.
11:44:46 <int-e> cpressey: how would you make \b f t -> if b then f else t point-free?
11:45:06 <int-e> @pl would just not work with the syntax.
11:45:41 <wob_jonas> @pl \b f t -> if b then f else t -- @pl parses all of Haskell syntax, didn't you know?
11:45:56 <int-e> It really doesn't.
11:45:59 <wob_jonas> @pl \b f t -> if b then f else t {- such as block comments -}
11:46:21 <wob_jonas> and that thing with the minus sign that I saw the last time
11:46:22 <int-e> @pl \xs -> case xs of [] -> not; x:xs -> supported
11:47:03 <int-e> @pl f x | odd x = 1 | otherwise = 2
11:47:13 <int-e> > @pl f x = if odd x then 1 else 2
11:47:15 <lambdabot> <hint>:1:1: error: parse error on input ‘@’
11:47:20 <int-e> @pl f x = if odd x then 1 else 2
11:48:10 <int-e> @pl is an awful hack, really.
11:49:12 <cpressey> int-e: I'm not qualified to say how one could write `if'` point-free.
11:52:05 <cpressey> My inclination would be to write it in CPS. Which doesn't help?
11:53:06 <int-e> You need a destructor for Bool. Something like if' or bool. ;-)
11:53:49 <int-e> Or maybe a way of sectioning anything.
11:54:03 <int-e> (if then else) b t f = (if b then t else f) ;-)
11:56:06 <cpressey> "You need something else to complete it, something like if' itself" sounds a bit like my thought process was, yeah
11:57:33 <lambdabot> Num t1 => t2 -> t3 -> (t2, t1, t3)
11:58:21 <cpressey> Sometimes Haskell reminds me of PL/I
11:58:43 <cpressey> "If some sequence of characters has a reasonable interpretation, the language will make that interpretation"
12:01:30 <myname> sounds also a lot like irp
12:03:40 <lambdabot> • Couldn't match expected type ‘Integer -> t’
12:03:41 <lambdabot> with actual type ‘(Integer, Integer)’
12:04:03 <lambdabot> • Data constructor not in scope: Int
12:04:08 <lambdabot> <hint>:1:14: error: parse error on input ‘Int’
12:09:15 <int-e> well, a lot of things don't work as types
12:09:25 <int-e> if-then-else, case expressions...
12:09:48 <int-e> in fact, since sections are lambdas, sections cannot really be expected to work on the type level
12:39:41 -!- MDude has joined.
12:40:51 <arseniiv> <int-e> You need a destructor for Bool. Something like if' or bool. ;-) => yeah, why isn’t it standard yet?
12:42:27 <arseniiv> I was confused, don’t mind that
12:47:40 <int-e> . o O ( retract, withdraw )
12:53:57 <int-e> So... "nub" is the very essence of brevity.
12:57:53 -!- Sgeo_ has joined.
13:00:11 <arseniiv> int-e: yeah I wrote that and then it occurred I could write “I take back”
13:01:18 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
13:32:27 -!- sebbu2 has changed nick to sebbu.
13:55:45 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65698&oldid=65680 * InfiniteDonuts * (+229)
14:32:38 <cpressey> For whatever it's worth, version 0.3 of Robin has been released. Already I know things I want to change for 0.4. But at least it is a little better than 0.2 was. https://github.com/catseye/Robin
14:36:31 <wob_jonas> cpressey: is this the questionable esoteric language that you've mentioned?
14:40:54 <cpressey> version 0.2 was in 2014, btw, so this is, like, a long-overdue update of something I haven't touched in 5 years, basically
15:20:27 <esowiki> [[SIMPLE (preprocessor)]] N https://esolangs.org/w/index.php?oldid=65699 * B jonas * (+1395) Created page with "'''SIMPLE''' is a text preprocessor created by [[David Madore]] in 1998, inspired by m4. SIMPLE has special syntax to expand a function parameter with each of its tokens qu..."
15:21:07 <esowiki> [[SIMPLE]] https://esolangs.org/w/index.php?diff=65700&oldid=8359 * B jonas * (+71)
15:21:59 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=65701&oldid=65642 * B jonas * (+28) [[SIMPLE (preprocessor)]]
15:23:52 <esowiki> [[David Madore]] https://esolangs.org/w/index.php?diff=65702&oldid=59714 * B jonas * (+28)
15:28:50 -!- wob_jonas has quit (Remote host closed the connection).
15:32:13 -!- ArthurStrong has quit (Quit: leaving).
15:58:29 -!- cpressey has quit (Quit: A la prochaine.).
16:15:03 <arseniiv> rats live on no evil star, huh
16:15:49 <Taneb> arseniiv: won't lovers revolt now?
16:17:05 <arseniiv> Taneb: don’t know how well-known that palyndrome is, I took it from cpressey’s generated text :D
16:18:04 <arseniiv> ah, seemingly it is more or less known
16:18:55 <arseniiv> in poems and stories and music albums
16:22:45 <esowiki> [[Functional()]] https://esolangs.org/w/index.php?diff=65703&oldid=57492 * Hakerh400 * (-16) Update interpreter link
16:25:47 <esowiki> [[Bitwise Trance]] https://esolangs.org/w/index.php?diff=65704&oldid=59794 * Hakerh400 * (-3) Update interpreter link
16:25:55 <Taneb> arseniiv: I stole it from the song "Bob" by Al Yankovic
16:26:41 <esowiki> [[BitBounce]] https://esolangs.org/w/index.php?diff=65705&oldid=60020 * Hakerh400 * (+2) Update interpreter link
16:29:43 <esowiki> [[Functasy]] https://esolangs.org/w/index.php?diff=65706&oldid=60557 * Hakerh400 * (+93) Update interpreter link
16:30:30 <esowiki> [[Examinable Invocation Vector]] https://esolangs.org/w/index.php?diff=65707&oldid=62375 * Hakerh400 * (-188) Update interpreter link
16:31:01 <esowiki> [[Realm]] https://esolangs.org/w/index.php?diff=65708&oldid=64710 * Hakerh400 * (-164) Update interpreter link
16:41:18 -!- b_jonas has joined.
16:41:27 <b_jonas> I just saw something funny
16:41:42 <b_jonas> water was trapped between the two panes of the double-layered window of the bus
16:41:49 <b_jonas> was a few centimeters high
16:41:56 <b_jonas> it made nice waves as the bus accelerated
16:42:30 -!- FreeFull has joined.
17:11:05 <esowiki> [[SIMPLE (preprocessor)]] https://esolangs.org/w/index.php?diff=65709&oldid=65699 * B jonas * (+54)
17:45:04 -!- Phantom_Hoover has joined.
18:01:18 <j-bot> b_jonas: 22.5 33.75
18:15:39 * APic just thought, wtf, ##Esoteric is invite only
18:15:45 <APic> Then i realized it has one Hash less
18:19:37 <kmc> we are Officially Esoteric™
18:21:03 <esowiki> [[Special:Log/newusers]] create * Antirapistrapistclub * New user account
18:22:55 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65710&oldid=65630 * Antirapistrapistclub * (+419)
18:23:11 <esowiki> [[User:Antirapistrapistclub]] N https://esolangs.org/w/index.php?oldid=65711 * Antirapistrapistclub * (+0) Created blank page
18:23:20 <esowiki> [[User talk:Antirapistrapistclub]] N https://esolangs.org/w/index.php?oldid=65712 * Antirapistrapistclub * (+0) Created blank page
18:26:59 <int-e> That could just mean that they don't like their user name/talk page links to be red.
18:32:41 <b_jonas> Phantom_Hoover: [ is not the name of the language, it's the shortcut invocation for the bot
18:32:51 <b_jonas> j-bot, jeval: 0.45 * 50 75
18:32:51 <j-bot> b_jonas: 22.5 33.75
18:35:10 <b_jonas> and > is also not the name of a language, but it's a shortcut to evaluate things in a different language
18:37:43 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65713&oldid=65698 * InfiniteDonuts * (+69) /* Cat */
18:38:01 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65714&oldid=65713 * InfiniteDonuts * (-1) /* Infinite Loop */
18:42:14 <b_jonas> cpressey: the definitions in https://github.com/catseye/Robin/blob/master/stdlib/cmp.robin#L147 don't seem right
18:42:41 <b_jonas> either that or the documentation for what those functions are supposed to do
19:15:29 -!- Melvar has quit (Quit: WeeChat 2.4).
19:31:29 -!- laerling has left ("Leaving").
19:32:33 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
19:36:55 <esowiki> [[Special:Log/newusers]] create * Zektay77 * New user account
19:37:04 <arseniiv> @tell cpressey (hello) in your Robin description on Github, you said PicoLisp has macros; one of my friends says it isn’t true. I personally don’t know anything about it and then I can tell him something if you wish
19:38:09 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65715&oldid=65710 * Zektay77 * (+87) /* Introductions */
19:38:37 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65716&oldid=65715 * Zektay77 * (+85) /* Introductions */
19:52:45 -!- Phantom_Hoover has joined.
19:54:57 <shachaf> Should I use 0x8B or 0x89 for encoding reg-reg mov on x86?
19:57:56 -!- Melvar has joined.
19:58:23 <shachaf> Or more generally if there are redundant encodings like that with "foo r/m,r" and "foo r,r/m" is there a reason to prefer one?
20:09:02 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65717&oldid=65716 * Mid * (+139) /* Introductions */
20:15:45 -!- unlimiter has joined.
20:21:37 <b_jonas> shachaf: dunno, check (recent versions of) the intel optimization manual, the amd optimization manual, the optimization manual for your specific processor generation, and Agner's manuals
20:33:57 -!- Lord_of_Life_ has joined.
20:36:40 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
20:36:49 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:57:25 -!- xkapastel has quit (Quit: Connection closed for inactivity).
21:23:37 -!- sftp has quit (Excess Flood).
21:24:09 -!- sftp has joined.
21:31:54 -!- flux98 has joined.
21:31:56 -!- flux98 has left.
21:34:13 -!- unlimiter has quit (Quit: WeeChat 2.5).
21:43:07 -!- xkapastel has joined.
21:51:43 -!- b_jonas has quit (Quit: leaving).
21:53:01 -!- Melvar has quit (Ping timeout: 246 seconds).
21:53:26 -!- Melvar has joined.
21:55:19 -!- AnotherTest has quit (Ping timeout: 276 seconds).
23:10:43 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds).
23:33:32 -!- FreeFull has quit.
00:14:04 <esowiki> [[Special:Log/newusers]] create * Toel F * New user account
00:36:43 -!- arseniiv has quit (Ping timeout: 245 seconds).
00:40:56 -!- tromp_ has joined.
00:42:43 -!- tromp has quit (Ping timeout: 252 seconds).
00:57:32 -!- MDude has quit (Ping timeout: 245 seconds).
01:36:33 <esowiki> [[Special:Log/newusers]] create * SoundOfScripting * New user account
01:41:07 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65718&oldid=65717 * SoundOfScripting * (+303) Followed instructions.
01:42:14 <esowiki> [[User:SoundOfScripting]] N https://esolangs.org/w/index.php?oldid=65719 * SoundOfScripting * (+1067) Created page with "This is the page of the terrible language designer [https://www.esolangs.org/wiki/User:SoundOfScripting User:SoundOfScripting]. I like to make esolangs, even if they are not p..."
01:43:27 <esowiki> [[User:HereToAnnoy]] https://esolangs.org/w/index.php?diff=65720&oldid=65380 * SoundOfScripting * (-992) Alternatively, delete this page.
01:44:18 <esowiki> [[Arrows]] M https://esolangs.org/w/index.php?diff=65721&oldid=57337 * SoundOfScripting * (+5) Changed to User:SoundOfScripting
01:44:42 <esowiki> [[TheSingularity]] M https://esolangs.org/w/index.php?diff=65722&oldid=55647 * SoundOfScripting * (+5) Changed to User:SoundOfScripting
01:46:40 <esowiki> [[WCDA]] M https://esolangs.org/w/index.php?diff=65723&oldid=53754 * SoundOfScripting * (+57) Changed to User:SoundOfScripting
01:47:36 <esowiki> [[Focus]] M https://esolangs.org/w/index.php?diff=65724&oldid=55649 * SoundOfScripting * (-60) Changed to User:SoundOfScripting
01:48:15 <esowiki> [[TwoFiftyFive]] M https://esolangs.org/w/index.php?diff=65725&oldid=53836 * SoundOfScripting * (+5) Sorry for the eidit spam! Just a handful more pages. ======= Changed to User:SoundOfScripting
01:48:44 <esowiki> [[Tables]] M https://esolangs.org/w/index.php?diff=65726&oldid=53826 * SoundOfScripting * (+5) Changed to User:SoundOfScripting
01:49:21 <esowiki> [[Neg]] M https://esolangs.org/w/index.php?diff=65727&oldid=55788 * SoundOfScripting * (+5) maybe I'm just dumb and I could've changed my username
01:49:43 <esowiki> [[GetWhen]] M https://esolangs.org/w/index.php?diff=65728&oldid=55798 * SoundOfScripting * (+5) Changed to User:SoundOfScripting
01:51:23 <esowiki> [[User:Language]] M https://esolangs.org/w/index.php?diff=65729&oldid=56602 * SoundOfScripting * (+45) Changed to User:SoundOfScripting
01:52:37 <esowiki> [[D.U.C.K.]] M https://esolangs.org/w/index.php?diff=65730&oldid=60740 * SoundOfScripting * (+5) Changed to User:SoundOfScripting
01:52:59 <esowiki> [[Braincells]] M https://esolangs.org/w/index.php?diff=65731&oldid=65379 * SoundOfScripting * (+5) Last one! Changed to User:SoundOfScripting
02:00:51 -!- xkapastel has quit (Quit: Connection closed for inactivity).
05:29:19 -!- ArthurStrong has joined.
06:08:08 <esowiki> [[BitBounce]] M https://esolangs.org/w/index.php?diff=65732&oldid=65705 * Hakerh400 * (-1)
06:52:46 -!- tromp_ has quit (Read error: Connection reset by peer).
06:53:07 -!- tromp has joined.
06:59:17 -!- tromp has quit (Ping timeout: 252 seconds).
07:12:45 -!- nfd9001 has joined.
07:13:14 -!- tromp has joined.
07:17:59 -!- tromp has quit (Ping timeout: 252 seconds).
07:30:57 -!- tromp has joined.
07:31:54 -!- tromp_ has joined.
07:35:13 -!- tromp has quit (Ping timeout: 252 seconds).
08:11:42 -!- clog has quit (Ping timeout: 244 seconds).
08:15:08 -!- Phantom_Hoover has joined.
08:15:21 <esowiki> [[Spin]] https://esolangs.org/w/index.php?diff=65733&oldid=33886 * Dtuser1337 * (+18) Adding a year category.
08:24:58 <esowiki> [[Spin]] https://esolangs.org/w/index.php?diff=65734&oldid=65733 * Dtuser1337 * (+140) Adding examples.
08:35:48 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
08:38:24 -!- Lord_of_Life has joined.
08:54:32 -!- cpressey has joined.
08:55:03 -!- AnotherTest has joined.
08:55:22 <cpressey> Good morning. Idea for the day: design an esoteric parsing combinator library.
08:55:38 <cpressey> Maybe based on Fokker's X combinator. Except for parsing, of course.
08:57:15 <shachaf> I feel like I should know a whole bunch more about parsing.
09:07:52 <cpressey> Recursive descent parsing is easy and fun, but only works on some grammars. If you write a RDP manually you can manually add code to do non-context-free things like track a symbol table or generate code.
09:08:49 <cpressey> There are algorithms that will return all possible parses for general context-free grammars. They're not as efficient, most programming languages don't need them, but they're also fun in their way.
09:09:11 <cpressey> I don't know what a PEG is, I should probably find out some day.
09:12:16 <cpressey> Table-based parsing of LR-type grammars I find not-fun and have basically ignored all my life.
10:03:41 <cpressey> The LR-grammar parsing stuff is very esoteric, though, and should not be ignored. Maybe someone could make an esolang where it works like shift/reduce parsing, except it's not just a parser, it's a Turing-complete language.
10:10:52 -!- clog has joined.
10:13:08 <cpressey> Not that different from a push-down automaton, really, I guess
10:13:21 <shachaf> This reminds me of the mostly unrelated topic of alternating finite automata.
10:13:45 <shachaf> I wanted to figure out whether they're a realistic implementation strategy for regular expressions.
10:14:52 <cpressey> It sounds realistic in the sense that you could implement it. Whether there would be any advantages to doing so or not, I don't know.
10:16:22 <cpressey> I think it's conventional to convert NFAs to DFAs, but you can also execute NFAs directly. Which is more efficient in the modern era probably depends on cache configuration and all that gory stuff.
10:24:02 -!- MDude has joined.
10:50:29 <shachaf> The advantage would be support for intersection and complement.
10:56:17 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
11:02:43 <cpressey> I assume you mean, improved support... I think most regex implementations aren't oriented at optimizing the compilation-to-FA step.
11:03:03 <cpressey> You only need to compile the RE once, and typically use it more than once
11:03:21 <cpressey> Also, you should probably sleep
11:08:00 <rain1> https://github.com/kragen/peg-bootstrap/blob/master/peg.md
11:08:05 <rain1> this is my favorite page to learn about PEG
11:39:07 -!- xkapastel has joined.
12:05:57 <cpressey> The Wikipedia article is also not bad (as they go). My understanding is, someone looked at how CFGs actually get implemented (as RDPs) and turned that back into a grammar formalism.
12:06:21 <cpressey> Expedient yes; mathematically satisfying, not really
12:11:41 -!- AnotherTest has quit (Ping timeout: 252 seconds).
12:15:34 <int-e> Oh, that kind of RDP. (Google finds something entirely different.)
12:23:27 -!- arseniiv has joined.
12:24:03 <esowiki> [[Special:Log/newusers]] create * Thecatlover1996 * New user account
12:28:22 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65735&oldid=65718 * Thecatlover1996 * (+242) /* Introductions */
12:28:27 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=65736&oldid=65605 * Thecatlover1996 * (+50) /* Language overview */ Tape has length 30,000
12:58:54 -!- ArthurStrong has quit (Quit: leaving).
12:59:10 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=65737&oldid=65736 * Ais523 non-admin * (+168) /* Language overview */ clarify the nature of the tape
13:00:50 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=65738&oldid=65737 * Ais523 non-admin * (+106) /* Computational class */ clarify that BF requires an unbounded tape or unbounded values to be TC
13:03:10 <esowiki> [[Special:Log/newusers]] create * Trickbrain26 * New user account
13:12:32 <esowiki> [[C-]] M https://esolangs.org/w/index.php?diff=65739&oldid=42106 * Ais523 non-admin * (-4) unpipe link to Wikipedia
13:19:32 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=65740&oldid=65735 * Trickbrain26 * (+140) /* Introductions */
13:38:50 -!- AnotherTest has joined.
13:49:24 -!- Vorpal has joined.
13:49:24 -!- Vorpal has quit (Changing host).
13:49:24 -!- Vorpal has joined.
13:52:12 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65741&oldid=65714 * InfiniteDonuts * (+116)
13:53:41 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65742&oldid=65741 * InfiniteDonuts * (-66) /* A Brief Tutorial */
13:54:04 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65743&oldid=65742 * InfiniteDonuts * (-15) /* Introduction */
13:54:28 <esowiki> [[Flop]] M https://esolangs.org/w/index.php?diff=65744&oldid=65743 * InfiniteDonuts * (+0) /* A Brief Tutorial */
13:57:34 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65745&oldid=65744 * InfiniteDonuts * (-136)
13:57:57 <esowiki> [[Flop]] M https://esolangs.org/w/index.php?diff=65746&oldid=65745 * InfiniteDonuts * (+9) /* Introduction */
14:00:33 <esowiki> [[Flop]] https://esolangs.org/w/index.php?diff=65747&oldid=65746 * InfiniteDonuts * (-99)
14:01:35 <esowiki> [[Flop]] M https://esolangs.org/w/index.php?diff=65748&oldid=65747 * InfiniteDonuts * (+0) /* A Brief Tutorial */
14:13:29 <rain1> perhaps Stephen Wolfram's ideas presented in "A New Kind of Science" can provide useful insight for your endeavour
14:22:42 <esowiki> [[User:Orby]] https://esolangs.org/w/index.php?diff=65749&oldid=60360 * Orby * (+12)
14:39:37 -!- heroux has quit (Ping timeout: 245 seconds).
14:40:29 -!- heroux has joined.
15:34:38 <esowiki> [[Flop]] M https://esolangs.org/w/index.php?diff=65750&oldid=65748 * InfiniteDonuts * (-2900)
15:34:57 <esowiki> [[PATH]] https://esolangs.org/w/index.php?diff=65751&oldid=65653 * InfiniteDonuts * (-54) /* Variations */
15:35:11 <esowiki> [[SNUSP]] https://esolangs.org/w/index.php?diff=65752&oldid=65651 * InfiniteDonuts * (-39) /* See also */
15:35:41 -!- ais523 has joined.
15:36:09 <ais523> cpressey: have you seen recursive ascent parsers? it's basically the open-coded version of LR, but much easier to understand than the table-driven version
15:37:01 -!- arseniiv has quit (Read error: Connection reset by peer).
15:37:59 <ais523> the basic idea is that whenever you have a grammar ambiguity that can't immediately be resolved with your lookahead symbols but can be resolved later, you call a function that can parse either of the two things you want to be able to parse, and returns which of the two it parsed
15:38:30 <ais523> (occasionally you'll need multiple functions that disambiguate in different ways depending on what comes next, but that's rare)
15:48:07 <cpressey> You could also fall back to something like CYK for the non-LL parts (overkill, of course)
15:48:17 -!- cpressey has quit (Quit: A la prochaine.).
15:49:30 -!- arseniiv has joined.
15:50:15 <rain1> just use s-expressinos
15:52:51 <ais523> for what? the language you're parsing? that doesn't work too well if you don't control the format
15:53:06 <ais523> even when you do, s-expressions tend to have some amount of variety in what constants they support
15:53:43 <ais523> I've been working with SMT2 recently, whose syntax is a proper subset of Common Lisp's (although the semantics are quite different), and it can be hard to find off-the-shelf parsers for it even though it's just s-expressions
15:53:57 <ais523> due to things like #x1234 as a hexadecimal number
15:54:11 <rain1> that's a frustrating problem
15:54:35 <rain1> i feel like lisp and s-expressions has more potential but kind of flopped because of issues like the one you state
15:55:04 <ais523> lisp is basically designed to be manipulated by lisp code, it isn't really designed to be manipulated by code in arbitrary other languages
15:58:14 <rain1> i would design READ to be based on a list of regexes
16:02:16 <ais523> (there's also the problem that SMT2 is very strongly typed, so, e.g., #x00 and #x0000 are constants of different type, the former is 8 bits wide, the latter 16 bits wide; this is something a generic parser is unlikely to tell you about)
16:03:06 <rain1> ah yes you would definitely need a custom reader for that
16:13:42 <ais523> in general I think the idea of a generic parser that handles a wide range of languages wouldn't really work, languages' semantics often ends up being mirrored in the syntax
16:15:54 * ais523 tries to imagine what a sexpy version of Incident would look like
16:15:56 <ais523> I don't think it works
16:27:02 -!- ais523 has quit (Remote host closed the connection).
16:28:03 -!- ais523 has joined.
16:34:03 -!- ais523 has quit (Remote host closed the connection).
16:35:17 -!- ais523 has joined.
16:43:44 -!- Lord_of_Life_ has joined.
16:46:28 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
16:46:41 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
17:25:40 -!- Phantom_Hoover has joined.
17:27:22 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65753&oldid=65697 * Dtuser1337 * (+110) /* Macmac */ new lang and removing newline as a shortcut.
17:33:14 -!- b_jonas has joined.
17:35:47 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=65754&oldid=65753 * InfiniteDonuts * (-404)
18:01:30 <esowiki> [[User talk:Language]] M https://esolangs.org/w/index.php?diff=65755&oldid=60717 * Dtuser1337 * (+1) Moving category to the bottom
18:04:46 -!- FreeFull has joined.
18:05:18 <kmc> hello b_jonas
18:05:20 <kmc> what's new?
18:07:12 <esowiki> [[A]] https://esolangs.org/w/index.php?diff=65756&oldid=60788 * Dtuser1337 * (+23) Rerorerorerorero
18:11:39 <esowiki> [[RISBF]] https://esolangs.org/w/index.php?diff=65757&oldid=56849 * Dtuser1337 * (+18) I Love You Kitchen Gun :D
18:32:14 <arseniiv> chkdsk eats memory like crazy :o
18:32:45 <b_jonas> well, depending on what parameters you start it with, obviously
18:32:53 <ais523> because it has to hold the entire filesystem metadata in memory?
18:33:09 <b_jonas> but it has to check for, like, blocks that are marked as occupied but to which nothing points, or inconsistent forwards-backwards pointers or cycles
18:33:13 <b_jonas> which could be anywhere in the file system
18:33:24 <b_jonas> arseniiv: oh, this is on Windows?
18:33:39 <b_jonas> makes sense, it's not called chkdsk on unixen
18:35:27 <arseniiv> though I bet it could understand something like -f -r -x but I just copied the forms given in the help message
18:36:05 <arseniiv> it’s quite scary when low on memory
18:36:33 <arseniiv> apps crash, the screen turned black for some time for an unknown reason
18:37:20 <b_jonas> I only run programs, and put my files into directories
18:37:51 <arseniiv> :D I mean, various software for entertaining purposes like skype or streamWriter
18:38:42 <arseniiv> (don’t ask me why skype is here. I don’t know either)
18:39:11 <b_jonas> but only the windows version, not the mobile phone version
18:39:22 <b_jonas> I use it because it lets me call some co-workers and relatives
18:40:22 <arseniiv> I meant the first one here, though I had to install the second to be able to chat with people for chatting who with the first skype remains
18:40:54 <b_jonas> install the mobile version to do what?
18:41:31 <arseniiv> basically to do what I do with the first one
18:41:45 <arseniiv> though I wanted to test the grammar a bit
18:43:21 <arseniiv> we had tested several different messengers out there these times and hadn’t migrate properly to any of them yet, so it’s skype for a while
18:43:51 <b_jonas> the people I know use like four different ones
18:44:00 <arseniiv> though it visibly degraded as a group chat software
18:45:46 <arseniiv> it upgraded in several regards, but many bugs were introduced, and sufficiently much of functionality, removed
18:46:47 <b_jonas> I know. you can no longer just invite another person by skype username. you have to do a search, which searches in all fields, and then choose the person with the given skype username, and you can't even easily tell the skype username, only the displayed name, you have to get some hidden properties box to find it out.
18:48:15 <b_jonas> you could probably DOS a user by registering thirty users with the same displayed name and avatar picture (and changing those to follow that person), because nobody would be able to invite them then
18:48:28 <arseniiv> and also I want to complain about widespread lack of support of composite fonts. It’s a pretty simple concept in light of modern font rendering libraries, and still does it appear so rarely in the software with multilingual potential like chat things not based on web browsers
18:49:36 <b_jonas> anything I say about skype might be imprecise of course, because it may have changed ten updates ago
19:07:07 -!- tromp_ has quit (Remote host closed the connection).
19:33:37 -!- xkapastel has quit (Quit: Connection closed for inactivity).
19:42:45 -!- ais523 has quit (Quit: quit).
19:44:45 -!- tromp has joined.
19:49:17 -!- tromp has quit (Ping timeout: 252 seconds).
19:51:15 -!- tromp has joined.
19:52:51 -!- tromp_ has joined.
19:55:31 -!- tromp has quit (Ping timeout: 252 seconds).
19:57:21 -!- tromp_ has quit (Ping timeout: 252 seconds).
19:59:31 -!- arseniiv_ has joined.
20:00:53 -!- arseniiv has quit (Ping timeout: 245 seconds).
20:11:42 -!- aloril_ has quit (Ping timeout: 245 seconds).
20:35:23 -!- Lord_of_Life_ has joined.
20:38:32 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
20:39:50 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:41:27 -!- xkapastel has joined.
20:42:02 -!- Vorpal has quit (Remote host closed the connection).
20:47:58 -!- Vorpal has joined.
20:50:05 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=65758&oldid=65738 * PaniniTheDeveloper * (+5)
20:50:10 -!- aloril has joined.
20:58:41 <esowiki> [[Befunge]] https://esolangs.org/w/index.php?diff=65759&oldid=65667 * PaniniTheDeveloper * (+80)
21:00:28 -!- Cale has quit (Ping timeout: 276 seconds).
21:04:08 -!- hppavilion[1] has joined.
21:12:21 -!- Cale has joined.
21:25:01 <arseniiv_> I read a neat problem just now: given a small segment of a conic, how do you distinguish is it a circle, an ellipse, a parabola or a hyperbola?
21:25:07 -!- arseniiv_ has changed nick to arseniiv.
21:26:42 <arseniiv> maybe someone not knowing it prior, would be interested to solve it for themselves or openly. I have already spoilered myself into a part of the solution so I don’t count
21:31:08 <b_jonas> arseniiv: should I tell the solution, or would you just like to figure it out yourself?
21:35:15 -!- AnotherTest has quit (Ping timeout: 252 seconds).
21:35:41 <arseniiv> as you wish; I see at least two avenues: using foci and something related or drawing a cartesian coordinate system, taking coordinates of several points and then calculating some invariants. I don’t remember particularities of either except one thing about optics
21:36:41 <arseniiv> hopefully we won’t spoil it for anybody interested
21:37:05 <b_jonas> arseniiv: what I'd do is to just the sort of brute force way, which is to compute the parameters of the quadratic form of the conic from five points on the arc.
21:37:37 <b_jonas> there's a nice easy but not very well known way to do that efficiently that is described in the yellow geometry book that I bought only this year, which I can tell if you want.
21:38:23 <b_jonas> it would probably be possible to do something more geometric, that is, going most of the way with a straightedge construction to find points on the involution that the conic implies on the ideal line,
21:38:55 <b_jonas> but I don't think that helps, because that's the sort of theoretical construction that you either couldn't do in real life, or only engineers could do in real life and I'm not an engineer
21:39:15 <b_jonas> arseniiv: something matrix-y, yes
21:40:26 <arseniiv> I am aligned more to the second, algebraic/computational way here, too. I’m profound in forgetting essential theorems of synthetic geometry needed for the first path
21:40:41 -!- tromp has joined.
21:40:47 <b_jonas> this is one that you can't forget once you learn about it, it's a beautiful method
21:40:58 <b_jonas> it's a pity I hadn't learned it earlier
21:41:27 <arseniiv> b_jonas: like, some 5th-order matrix? or less, 3rd order, something from projective linear algebra?
21:41:52 <b_jonas> yes, you have to solve a rank 5 linear equation
21:43:08 <arseniiv> hm, with a row for every point?
21:43:34 <b_jonas> take the 6x5 matrix where each row is [x0**2, x1**2, x2**2, 2*x0*x1, 2*x0*x2, 2*x1*x2] where [x0, x1, x2] is a coordinate for a point, one row per point
21:44:30 <arseniiv> oh, homogeneous coordinates, makes sense
21:45:06 <arseniiv> and what is the right part and what are unknowns here?
21:46:26 <b_jonas> it's 6x5, so you solve for a nonzero vector orthogonal to each row
21:46:53 <b_jonas> if that vector is [a00, a11, a22, a01, a02, a12], then its components give the quadratic form
21:47:51 <b_jonas> this works because [a00, a11, a22, a01, a02, a12]^T*[x0**2, x1**2, x2**2, 2*x0*x1, 2*x0*x2, 2*x1*x2] is exactly the equation of the conic
21:49:30 <b_jonas> so once you have that, just check the sign of the determinant of [a00,a10;a01,a11] to tell if it's a hyperbola
21:50:08 <b_jonas> this one even lets you make this more numerically stable if you take more than five points
21:50:41 <b_jonas> that is, if you have a lot of sample points but each one has some error
21:50:57 <int-e> hyperbole is totally on topic for this channel.
21:52:19 <arseniiv> and then, I guess, we can take four points and deduce something like “the most <something> quadratic form” using least squares to solve the underdetermined system
21:52:54 <b_jonas> I would like to note that it gets much harder to find the conic if you have three points and two tangents. Apart from degenerate cases, there are always exactly four real solutions or no real solutions. It was REALLY not obvious to me why there can't be exactly two solutions.
21:52:55 <arseniiv> (or three points, but that would be more boring probably)
21:54:36 <arseniiv> (hopefully we wouldn’t talk in circles)
21:54:51 <b_jonas> Four points and one tangent is easier. Apart from degenerate cases, there are zero or two possible conics; there's an easy way to test which one of those is the case; and a not too hard way to solve the conic, though harder than for five points.
21:55:38 <b_jonas> The yellow book actually describes the case of computing a conic from four points and one tangent, but it doesn't even mention the more tricky case of three points and two tangents.
21:55:48 <b_jonas> I only know about that one from the wob.
21:56:05 <b_jonas> If you want me to spoil some of that later, you can ask me.
21:56:17 <int-e> arseniiv: parables seem to be rare. Ellipses on the other hand...
21:56:39 <HackEso> 1060) <kmc> ah yes, like the parable of jesus feeding the masses with expired jell-o
21:56:49 <arseniiv> b_jonas: though currently I’m not interesting in going on a tangent
21:57:05 <b_jonas> The yellow book is Richter Gerbert: "Perspectives on Projective Geometry", Springer (2019). It was one of the best purchases I've done this year.
21:57:25 <int-e> b_jonas: is that a pun
21:57:57 <int-e> perspective in connection with projective geometry
21:58:05 <b_jonas> yes, the book title is a pun
21:59:29 <b_jonas> The other three geometry reference books on my shelf next to this one tell very little of this stuff, though they do tell some other useful info.
21:59:43 <int-e> I guess there's a certain pun potential in "purchase", but it's not realized in your statement.
22:00:05 <b_jonas> The Hajós does tell some of the basics, like about the equation of comics in general and classifying them.
22:00:40 <b_jonas> int-e: well yes, I rarely make English puns
22:02:44 <b_jonas> my hon. and learned friend fungot, has SGDQ 2019 started yet?
22:02:44 <fungot> b_jonas: unless it uses recursion or something. " i'll let you know
22:02:55 <b_jonas> oh thanks, that'll be great
22:03:06 <b_jonas> some of the games may have recursion
22:04:11 -!- tromp has quit (Remote host closed the connection).
22:04:16 -!- b_jonas has quit (Quit: leaving).
22:04:32 <arseniiv> fungot: maybe you also do know when my chkdsk will finish, too?
22:04:32 <fungot> arseniiv: the package name, obviously. ( wondering why i thought it was c, i don't see
22:05:06 <arseniiv> hm they too make puns, about seeing C, but none about chkdsk
22:06:34 <int-e> (chkdsk should just fsck off)
22:06:44 <int-e> (it's not good, but it's a pun)
22:07:25 -!- hppavilion[1] has quit (Ping timeout: 268 seconds).
22:17:31 -!- tromp has joined.
22:19:43 <arseniiv> ah, I was going to suggest a thing and then forgot it
22:20:05 <arseniiv> hyperbolic good, parabolic good and elliptic good!
22:21:06 <arseniiv> or maybe the other way: lawful ellipse, chaotic ellipse and what is the other… neutral ellipse
22:24:42 <arseniiv> hm speaking of what, I’ve seen a 3×3 table of planar geometries in a geometric book. One axis was how angles behave (elliptic, parabolic, hyperbolic) and the other was the more known one, whether the quadratic form is ++ euclidean, +0 “galilean” (how is it called?) or +− pseudoeuclidean
22:25:06 <arseniiv> those are the only ones with some properties, I don’t remember which ones
22:25:37 <arseniiv> for instance, they are all constant-curvature
22:26:46 <arseniiv> how the angles behave is precisely what is the signature of the quadratic form, it was some other property
22:29:02 <arseniiv> for example, euclidean-0 should be the usual euclidean plane, euclidean-+ should be the elliptic plane and euclidean-− should be the hyperbolic plane
22:30:01 <arseniiv> yes it should be the sign of the constant curvature, though I don’t remember if it was defined in this way, and certainly the curvature wasn’t defined there for a general case
22:32:53 <esowiki> [[User:SoundOfScripting]] M https://esolangs.org/w/index.php?diff=65760&oldid=65719 * SoundOfScripting * (-21) Okay now I can be dormant again.
22:37:47 -!- hppavilion[1] has joined.
22:48:14 -!- FreeFull has quit.
23:25:58 -!- tromp has quit (Remote host closed the connection).
23:54:45 -!- Phantom_Hoover has quit (Quit: Leaving).
23:59:01 -!- tromp has joined.
00:03:23 -!- tromp has quit (Ping timeout: 252 seconds).
00:10:08 -!- hppavilion[1] has quit (Ping timeout: 268 seconds).
00:20:17 -!- xkapastel has quit (Quit: Connection closed for inactivity).
00:28:12 <esowiki> [[Talk:Zahlen]] N https://esolangs.org/w/index.php?oldid=65761 * A * (+276) Created page with "==Questions== What is the difference between a set and a list in Zahlen, and how to push logical/set/list values onto the stack? --~~~~"
00:32:11 -!- xkapastel has joined.
00:42:17 <esowiki> [[Hello world program in esoteric languages]] M https://esolangs.org/w/index.php?diff=65762&oldid=65754 * Dtuser1337 * (+1) /* Log */ Nani!? I added space???
00:45:56 <esowiki> [[Unicat]] https://esolangs.org/w/index.php?diff=65763&oldid=44887 * Dtuser1337 * (+18)
00:48:51 <esowiki> [[Blackspace]] M https://esolangs.org/w/index.php?diff=65764&oldid=65618 * A * (+290)
00:49:37 <esowiki> [[Talk:Zahlen]] M https://esolangs.org/w/index.php?diff=65765&oldid=65761 * A * (-56)
00:56:52 -!- arseniiv has quit (Quit: gone completely :o).
01:08:17 -!- HackEso has quit (Remote host closed the connection).
01:08:55 -!- HackEso has joined.
01:30:32 -!- tromp has joined.
01:30:45 <esowiki> [[User:Trickbrain26]] N https://esolangs.org/w/index.php?oldid=65766 * Trickbrain26 * (+16) Created page with "I love Esolangs:"
01:32:55 <esowiki> [[User:Trickbrain26]] https://esolangs.org/w/index.php?diff=65767&oldid=65766 * Trickbrain26 * (+55)
01:35:25 -!- tromp has quit (Ping timeout: 276 seconds).
01:52:01 -!- Sgeo has joined.
01:53:48 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
02:38:28 -!- nfd9001 has quit (Ping timeout: 276 seconds).
02:40:17 -!- xkapastel has quit (Quit: Connection closed for inactivity).
03:16:05 <esowiki> [[Zahlen]] M https://esolangs.org/w/index.php?diff=65768&oldid=60322 * A * (+1096) /* Miscellaneous operators */
03:16:40 <esowiki> [[Zahlen]] M https://esolangs.org/w/index.php?diff=65769&oldid=65768 * A * (+30) /* Examples */
03:18:35 -!- adu has joined.
03:18:43 -!- tromp has joined.
03:23:13 -!- tromp has quit (Ping timeout: 252 seconds).
03:35:10 <esowiki> [[Zahlen]] M https://esolangs.org/w/index.php?diff=65770&oldid=65769 * A * (+332) /* Digital root calculator */ Average
04:30:27 <esowiki> [[Pyth]] M https://esolangs.org/w/index.php?diff=65771&oldid=54848 * A * (+124)
04:39:30 -!- iczero has changed nick to webpack.
05:55:57 <esowiki> [[Special:Log/newusers]] create * CarlosLuna * New user account
06:02:28 <esowiki> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=65772&oldid=65740 * CarlosLuna * (+363) /* Introductions */
06:05:09 <esowiki> [[Zahlen]] https://esolangs.org/w/index.php?diff=65773&oldid=65770 * A * (+132) /* Examples */
06:06:34 <esowiki> [[Zahlen]] M https://esolangs.org/w/index.php?diff=65774&oldid=65773 * A * (+42) /* Examples */
06:08:53 <esowiki> [[///]] https://esolangs.org/w/index.php?diff=65775&oldid=52040 * CarlosLuna * (+86) /* Implementation */
06:19:23 -!- nfd9001 has joined.
07:07:26 -!- ArthurStrong has joined.
07:11:44 -!- cpressey has joined.
07:39:25 -!- tromp has joined.
08:09:36 -!- AnotherTest has joined.
08:32:03 -!- tromp has quit (Remote host closed the connection).
08:36:21 -!- AnotherTest has quit (Ping timeout: 252 seconds).
08:38:53 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
08:39:31 -!- Lord_of_Life has joined.
08:46:13 -!- tromp has joined.
08:55:21 -!- AnotherTest has joined.
09:52:34 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65776&oldid=65695 * A * (-22290) It's all trash, I'm gonna redo it.
10:00:42 -!- wob_jonas has joined.
10:02:21 <HackEso> can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance after answer ask aunt brass can't cast castle chance class command dance demand disaster draft enhance example fast glass graph grass half last laugh mask master nasty pass past path plant rather sample shan't staff task vast
10:04:41 <wob_jonas> `learn can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, castle, chance, class, craft, command, contrast, dance, demand, disaster, draft, enhance, example, fast, glass, glance, grant, graph, grass, half, last, laugh, mas
10:04:42 <wob_jonas> k, master, nasty, pass, past, path, photograph, plant, rather, sample, shan't, staff, task, vast
10:04:44 <HackEso> Relearned 'can't': can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, castle, chance, class, craft, command, contrast, dance, demand, disaster, draft, enhance, example, fast, glass, glance, grant, graph, grass, half, last, laugh, mas
10:04:48 <wob_jonas> `learn can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, castle, chance, class, craft, command, contrast, dance, demand, disaster, draft, enhance, example, fast, glass, glance, grant, graph, grass, half, last, laugh, mas
10:04:49 <wob_jonas> k, master, nasty, pass, past, path, photograph, plant, rather, sample, shan't, staff, task, vast.
10:04:49 <HackEso> Relearned 'can't': can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, castle, chance, class, craft, command, contrast, dance, demand, disaster, draft, enhance, example, fast, glass, glance, grant, graph, grass, half, last, laugh, mas
10:04:53 <HackEso> can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, castle, chance, class, craft, command, contrast, dance, demand, disaster, draft, enhance, example, fast, glass, glance, grant, graph, grass, half, last, laugh, mas
10:05:59 <wob_jonas> `learn can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, chance, class, craft, command, contrast, dance, demand, disaster, draft, enhance, example, fast, glass, glance, grant, graph, grass, half, last, laugh, mask, maste
10:05:59 <wob_jonas> r, pass, past, path, photograph, plant, rather, sample, shan't, staff, task, vast.
10:06:06 <HackEso> Relearned 'can't': can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, chance, class, craft, command, contrast, dance, demand, disaster, draft, enhance, example, fast, glass, glance, grant, graph, grass, half, last, laugh, mask, maste
10:07:11 <shachaf> half a screen of HackEso spam
10:08:02 <wob_jonas> `learn can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, chance, class, craft, command, contrast, dance, demand, draft, enhance, example, fast, glass, glance, grant, half, last, laugh, mask, master, pass, past, path, pho
10:08:02 <wob_jonas> tograph, plant, rather, sample, shan't, staff, task.
10:08:12 <HackEso> Relearned 'can't': can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: advance, advantage, after, answer, ask, aunt, branch, can't, cast, chance, class, craft, command, contrast, dance, demand, draft, enhance, example, fast, glass, glance, grant, half, last, laugh, mask, master, pass, past, path, pho
10:08:43 <shachaf> can't you figure out what the right length is and then just type that one line in
10:08:49 <shachaf> this is a denial of service attack on me
10:09:05 <wob_jonas> shachaf: then you or oerjan will complain that I edit entries outside the channel... ok wait
10:12:02 <HackEso> can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: after, answer, ask, class, dance, example, fast, glass, half, last, laugh, pass, past, plant, rather, staff.
10:12:56 <wob_jonas> sorry, you're right about the smap
10:27:04 -!- arseniiv has joined.
11:41:55 <HackEso> Spam is a delicious meat product. See http://www.spamjamhawaii.com/
11:42:11 <HackEso> Turing is what you are doing when you Tur.
11:43:33 <HackEso> Unbound implicit parameter (?haskell::Wisdom) \ arising from a use of implicit parameter `?haskell'
11:43:49 <HackEso> Church invented a sane model of computation, but Turing was better with marketing, so now theoretical computer science defines everything based on obsolate hardware like tape recorders.
11:52:04 <HackEso> IRC is short for "Internet Relay Chat". It is named so because all the servers are constructed from relays.
11:53:25 <wob_jonas> cpressey: the definitions in https://github.com/catseye/Robin/blob/master/stdlib/cmp.robin#L147 don't seem right
11:53:28 <cpressey> Yes, I've decided to make my presence known by generating pages of HackEso spam
11:54:12 -!- Vorpal has quit (Ping timeout: 245 seconds).
11:54:37 <cpressey> wob_jonas: feel free to suggest another test case
11:59:30 <cpressey> very very pedantically, I think they should have different names (gte? gt? lte? lt?) but I'm sure that's not what you're referring to
11:59:49 <wob_jonas> cpressey: I don't have a problem with the names
11:59:57 <wob_jonas> cpressey: is it supposed to be a signed integer comparison?
12:00:12 <wob_jonas> and how do I input negative integers in Robin S-expressions?
12:01:07 <cpressey> wob_jonas: yes, and (subtract 0 10) is how you can say -10
12:01:25 <wob_jonas> cpressey: can't I just directly input -10 ? would be so much easier
12:03:37 <wob_jonas> anyway, then (assert (> 6 4)) (assert (> 1610612736 (subtract 0 1610612736)))
12:04:12 <wob_jonas> (assert (equal? #f (> (subtract 0 1610612736) 1610612736)))
12:05:46 <wob_jonas> I don't complain about the name because the names similar to what lisps have, so they fit your general naming scheme
12:08:30 <cpressey> There may be problems with large numbers.
12:09:15 <wob_jonas> cpressey: then either fix that or document that
12:10:07 <cpressey> wob_jonas: I'm working on 0.4 now, I'll put it in the queue. Thanks for the report.
12:10:32 <cpressey> (display (subtract 1610612736 (subtract 0 1610612736))) ; it says -1073741824
12:11:29 -!- Sgeo_ has joined.
12:14:38 -!- Sgeo has quit (Ping timeout: 245 seconds).
12:15:27 <cpressey> > (1610612736 :: Int32) - ((0 :: Int32) - (1610612736 :: Int32))
12:18:20 <cpressey> I guess it could compare sign first, + > -, then only if signs the same do the subtract
12:19:48 -!- ArthurStrong has left.
12:24:43 <HackEso> absolute value:The absolute value of a number, also known as its cosign, is its distance from zero regardless of direction. It shouldn't be negative, but Sgeo is trying to break maths. \ ciol:ciol is a language designed by moon_, it started as a scheme to annoy colleagues by making a programming language that has insults as commands. \ color:Color is a phenomenon from outer space designed to
12:24:47 <HackEso> Char is a prominent component of charcoal.
12:25:10 <HackEso> Long is the Chinese word for dragon.
12:45:24 -!- adu has quit (Quit: adu).
13:17:41 <int-e> what's this game? whoever gets the longest streak of wisdom-non-entries wins?
13:39:40 <HackEso> int-e är inte svensk. Hen kommer att spränga solen. Hen står för sig själv. Hen gillar inte färger, men han gillar dissonans. Er hat ein Hipster-Spiel gekauft.
13:45:54 <HackEso> wisdom is always factually accurate, except for this entry, and, uh, that other one? It started with, like, an ø?
13:55:16 -!- wmww has quit (Ping timeout: 248 seconds).
13:55:25 -!- wmww has joined.
13:55:49 -!- ivzem[m] has quit (Ping timeout: 248 seconds).
13:55:49 -!- tswett[m] has quit (Ping timeout: 248 seconds).
13:56:24 -!- ivzem[m] has joined.
13:56:42 -!- ineiros has quit (Ping timeout: 245 seconds).
13:57:12 -!- fungot has quit (Ping timeout: 252 seconds).
13:58:40 -!- ineiros has joined.
14:01:03 -!- tswett[m] has joined.
14:03:18 -!- fungot has joined.
14:13:30 <cpressey> wob_jonas: https://github.com/catseye/Robin/blob/develop-0.4/stdlib/cmp.robin
14:14:30 <cpressey> If you can find another hole in it, I will take that as a sign that I should start learning to use QuickCheck.
14:16:59 <Cale> You should of course do that anyway, QuickCheck is pretty great.
14:26:17 <HackEso> Color is a phenomenon from outer space designed to drive humanity insane and bring forth the new age of Cthulhu.
14:30:15 <wob_jonas> cpressey: (assert (> 0 (subtract (subtract 0 1073741824) 1073741824)))
14:32:12 <wob_jonas> (who cares about zero. it's not even a real number. nobody will use it in real calculations. real calculations involve real numbers.)
14:33:48 <cpressey> Well, I guess I'll be setting up QuickCheck tomorrow, although how (or if) I'm going to integrate it with this language, I don't know
14:34:08 <wob_jonas> can't you call into this language from Haskell?
14:34:48 <wob_jonas> I'm not sure if QuickCheck really helps here though
14:34:52 <cpressey> The first version had unbounded Integers, where none of this would be an issue, but then I was like "Oh I want this to conceivably be simple to implement in assembly" like an idiot
14:36:26 <cpressey> I can certainly test it from Haskell, but I'd somewhat rather not have the tests be written in Haskell
14:36:36 <wob_jonas> cpressey: then add arithmetic primitives. they don't really make the interpreter more complex, nor make the language harder to learn. the number of primitives isn't really the important thing you want to optimize for.
14:37:21 <cpressey> The number of primitives is exactly what this language optimizes for.
14:37:35 <cpressey> I could just stop working on it.
14:58:19 -!- cpressey has quit (Quit: A la prochaine.).
15:29:11 -!- webpack has changed nick to iczero.
15:33:46 -!- atslash has quit (Quit: Leaving).
15:42:05 -!- atslash has joined.
16:04:17 <HackEso> can't is the most frequent word whose pronunciation varies between /ɑː/ and /æ/ depending on dialect. A list is: after, ask, last, answer, class, half, pass, past, path, rather, dance, example, fast, glass, laugh, plant, staff, advance, advantage, branch, cast, chance, contrast, demand, glance, grant, master, photograph, sample, task, aunt, basket, bath, command, disaster, draft, draught, enhance, grass, laughter, mask, vast.
16:28:56 -!- ais523 has joined.
16:29:20 <ais523> wob_jonas: ?? my parents have different accents and would disagree as to the pronunciation of almost all those words, but agree on "can't"
16:29:30 <ais523> does anyone actually pronounce it as "cant"?
16:35:29 <wob_jonas> ais523: yes, both pronunciations exist. see file:///D:/ambrus/a/refe/dict/alan-pron/CAAPR-ref.html which gives /ɑː/ as the british and /æ/ as the american pronunciation for all these words; https://english.stackexchange.com/q/276763/ ; https://en.wiktionary.org/wiki/can%27t
16:35:42 <wob_jonas> ais523: but not everyone pronounces all these words with the same vowel
16:37:05 <ais523> oh, I see, US versus British English
16:37:20 <ais523> almost all those words vary between dialects within British English, but "can't" is much more consistent
16:37:25 <wob_jonas> ais523: I once asked, if someone pronounces both "can" with a /æ/, then how do they distinguish between "can't dance" and "can dance". one person replied that they always pronounce "can" the verb with an unstressed vowel
16:37:26 <ais523> so it seems weird putting them on the same list
16:37:41 <wob_jonas> ais523: it's not quite just US versus british. some british people use one vowel, some the other
16:37:52 <wob_jonas> there's a split within british pronunciation
16:38:02 <ais523> wob_jonas: on most of those words, just not (as far as I know) on "can't"
16:38:24 <ais523> fwiw, even if "can" and "can't" use the same vowel, you can tell them apart by the presense of the "t"
16:38:29 <ais523> which is not silent or anything
16:38:51 <wob_jonas> ais523: that's why I'm giving an example with a "t" or "d" following it, as in "can't dance"
16:39:02 <wob_jonas> in which case the extra "t" is hard to hear
16:39:34 <ais523> you'd have to leave a gap between the words, English does a lot of flowing one word into the next but t…d is one situation where you really can't
16:40:55 <wob_jonas> ais523: that sounds nice in theory, but when I actually listen to English, some speakers don't seem to put a pause, which sometimes makes "can't" followed by a "t" or "d" confusing to me
16:41:28 <ais523> well, it's hard to come up with generic rules for pronouncing English
16:41:38 <ais523> people will do their own thing no matter what, and some accents are more or less unintelligible
16:41:49 <wob_jonas> it's possible that "can't" works differently from the other words, I just don't notice that because I don't follow all these accents
16:41:59 <ais523> generally speaking, for pretty much any word, you can find someone who pronounces any given vowel in it as pretty much any other vowell
16:42:05 <ais523> (this is an exaggeration but not much of one)
16:43:04 -!- wob_jonas has quit (Remote host closed the connection).
16:43:25 -!- ais523 has quit (Quit: quit).
17:04:45 -!- FreeFull has joined.
17:07:59 <esowiki> [[Talk:TwoFiftyFive]] M https://esolangs.org/w/index.php?diff=65777&oldid=53835 * SoundOfScripting * (+15) changed signature
17:22:04 -!- Phantom_Hoover has joined.
17:40:35 -!- Sgeo_ has quit (Read error: Connection reset by peer).
17:41:00 -!- Sgeo_ has joined.
17:42:11 -!- b_jonas has joined.
18:06:47 <Cale> It's the pronunciation of the 'a' which lets you tell apart "can dance" from "can't dance" even if the latter is slurred together.
18:07:23 <kmc> i think they're identical for me?
18:09:45 <Cale> If I'm pronouncing things slowly, the a's are identical, but when I'm speaking very quickly, the 'a' in "can" becomes just ə or elided altogether.
18:10:03 <Cale> But that doesn't happen with "can't"
18:24:27 <kmc> hard fo me to tell
18:24:31 <kmc> when i'm paying attention
18:32:17 <b_jonas> kmc: you can't tell or you can tell?
18:36:30 <b_jonas> ais523: how does the word "shan't" behave then?
18:38:13 <esowiki> [[List of ideas]] https://esolangs.org/w/index.php?diff=65778&oldid=61782 * InfiniteDonuts * (+47) /* Music */
19:17:16 -!- nfd9001 has quit (Read error: Connection reset by peer).
19:17:40 -!- nfd9001 has joined.
20:32:05 -!- ais523 has joined.
20:32:20 <ais523> b_jonas: "shan't" has almost died out, I think
20:32:47 <ais523> the word "shall" is mostly only used in formal contexts nowadays, and eliding it with "not" would only happen in informal speech, so as a result the word is rarely used at all
20:33:00 <ais523> my best guess is that it works like "can't" but I haven't heard people say it enough to be sure
20:33:01 <int-e> "Shan't" shan't be pronounced lest you sound like an old fart.
20:33:06 <shachaf> I was once told that "shan't" was very slangy, similar to "ain't".
20:33:36 <ais523> shachaf: right, this is a bad combination (a very informal phrase containing a word that's only used in formal settings)
20:33:53 <ais523> "shouldn't" or "mustn't" would be way more common in informal speech nowadays
20:33:56 <ais523> (or "can't" used incorrectly)
20:34:18 <int-e> "Thou shan't pass!" just doesn't sound intimidating enough...
20:34:47 <ais523> surely it should be "thou shalt not pass"?
20:34:57 <ais523> although hardly anyone can remember how to conjugate "thou" + verb nowadays
20:35:52 <int-e> ais523: I'm assuming that it would still be contracted to "shan't" for lack of alternatives.
20:36:12 <ais523> maybe it wouldn't be contracted because there isn't a viable contraction?
20:36:24 <int-e> Somebody should look this up.
20:36:30 <int-e> But it won't be me ;-)
20:36:37 <ais523> I guess the normal grammar rules would give "thou shan'st", but that has the letters in the wrong order
20:36:54 <ais523> I looked up the conjugation of "shall" after "thou", it does indeed conjugate to "shalt"
20:37:11 <int-e> So what did they use in the movie, hmm.
20:37:11 <shachaf> Where does the s come from?
20:37:59 <ais523> shachaf: most "thou" conjugations end -st
20:38:08 <int-e> "Du gehst." <-- German still has the "st".
20:38:13 <ais523> but there are a few exceptions, such as "shall" going to "shalt" not "shallst"
20:38:35 <shachaf> Most? I can only think of a few.
20:39:22 -!- Lord_of_Life has quit (Ping timeout: 272 seconds).
20:39:26 <ais523> Wikipedia lists only six that don't; I'm not sure if that's meant to be an exhaustive list or not
20:39:32 <ais523> but implies that the vast majority of verbs do
20:39:39 <ais523> in both present and perfect tense
20:40:05 <ais523> wait, no, it lists six irregular forms
20:40:10 <ais523> but some of those /also/ end -st
20:40:55 <ais523> the regular form is to add -st or -est
20:41:05 <shachaf> Ah, you're right, I was only thinking of the irregular forms for some reason.
20:42:01 -!- ais523 has quit (Quit: sorry for my connection).
20:42:14 -!- ais523 has joined.
20:42:18 -!- Lord_of_Life has joined.
20:42:24 <int-e> Oh well. The movie has "You shall not pass." What about the book?
20:47:28 <b_jonas> ais523: ok, I'll just ignore shan't then
20:48:04 <int-e> The book has "You cannot pass!"
20:48:31 <int-e> Spoken, not cried out loud.
20:48:56 <ais523> I wonder how the "thou shall not pass" phrasing ended up in public consciousness, then? (I remember it specifically as containing a misconjugated verb, but maybe others remember differently/)
20:49:29 <ais523> that said, "he"/"she"/"it" still exist in modern English, and their conjugations changed from -th to -s at some point
20:49:37 <ais523> so maybe "thou"'s has also changed
20:49:48 <b_jonas> I do sometimes use "shall", but yes, it's rare. I don't think I use "shan't" except in quoting someone else using it (Harry Potter and the PS says, IIRC, in the first chapter, that Dudley has learnt a new word, "shan't". let me check that.)
20:49:54 <int-e> ais523: movies stick
20:50:07 <ais523> int-e: but apparently it wasn't in the movie either
20:50:37 <ais523> b_jonas: it's the sort of word that petulant children might have used in the past
20:50:45 <int-e> ais523: https://www.youtube.com/watch?v=mJZZNHekEQw certainly fooled me then
20:51:00 <ais523> although nowadays you'd expect "won't" instead (modern children are unlikely to learn "shan't" as a word…)
20:51:09 <b_jonas> ais523: right, that chapter plays in about 1980
20:51:22 <ais523> <int-e> Oh well. The movie has "You shall not pass." What about the book?
20:51:39 <b_jonas> ais523: "cannot" IIRC.. let me check
20:51:52 <ais523> maybe there's more than one English version of the movie?
20:51:53 <int-e> b_jonas: I did check, fwiw.
20:51:55 <ais523> this would be far from unheard of
20:52:14 <b_jonas> ais523: https://scifi.stackexchange.com/questions/35262/where-did-you-shall-not-pass-come-from says both the movie and the book says "cannot" (Gandalf)
20:52:24 <ais523> the first Harry Potter book (and thus the corresponding film) has different names in American and British English…
20:52:59 <b_jonas> ais523: wait, the film has different names too? really?
20:53:43 <ais523> b_jonas: not matching the book would surely be a marketing disaster
20:55:07 <int-e> shachaf: maybe ais523 is speaking in jest
20:55:35 <ais523> I think it'd be survivable but that the people actually marketing it wouldn't want to risk it
20:55:44 <b_jonas> ais523: the books were already famous by the time the first movie was released, and "Harry Potter" is enough for recognizability
20:56:19 <b_jonas> ais523: you're right, the film has different titles too
20:56:27 <ais523> <Wikipedia> Harry Potter and the Philosopher's Stone (released in the United States, India and Pakistan as Harry Potter and the Sorcerer's Stone)
20:56:29 <b_jonas> was its dubbing changed too?
20:56:38 <ais523> my guess is that they recorded the relevant lines multiple times
20:56:41 <int-e> Ask me about names in the Neverending Story. :P
20:56:52 <ais523> it wouldn't have been a noticeable amount of extra work for the actors
20:57:11 <shachaf> int-e: Did you read _Jim Knopf_?
20:57:49 <int-e> (Bastian = Bastian. Atreju = Atreyu. Xayide = Xayeede. Engywuck = Engywook. Fuchur = Falkor. It makes sense, but it did surprise me a lot when I first saw these...)
20:58:10 <int-e> shachaf: I have not read Jim Knopf. I only know Momo in german.
20:58:47 <shachaf> You haven't read Jim Knopf?!
20:58:57 <shachaf> Did you see the recent movie? I have it on Blu-Ray.
20:59:07 <shachaf> Unfortunately I don't have a Blu-Ray reader so I haven't seen it.
20:59:43 <int-e> (And which of those three books is "the recent movie" based on?)
21:00:18 <ais523> <Wikipedia> Because the American title was different, all scenes that mention the philosopher's stone by name had to be re-shot, once with the actors saying "philosopher's" and once with "sorcerer's".
21:00:56 <b_jonas> ais523: I was told that most big budget popular movies have separate dubbings for continental french and canadian french, as well as for european portugese and brazilian portugese; but I thought most of them don't have multiple english dubs.
21:01:03 <shachaf> https://www.imdb.com/title/tt3072732/
21:01:30 <b_jonas> it's different in text of course, which is easier to change, eg. it's cheap for some software to have separate american vs british english text
21:01:34 <ais523> b_jonas: that's mostly just because it'd be a waste, Brits are used to seeing American English in films
21:01:57 <b_jonas> ais523: yeah, but the HP movies have mostly british characters
21:02:11 <ais523> the situation with computer games is weird, many computer game manufacturers have separate European and American translation teams
21:02:13 <b_jonas> what happens with films like that?
21:02:27 <ais523> so often you get separate British English and American English translations
21:03:02 <ais523> but sometimes the American English translation is reused to save time, e.g. if they want to get a release out in the UK more quickly
21:03:02 <b_jonas> video games are different, because they're made with most of the dialog in japanese originally, as opposed to films where most of the dialog is in english originally
21:03:14 <ais523> this leads to translation inconsistencies between a game and its sequel sometimes
21:03:23 <ais523> (because one is the British English version, one is the American English version)
21:03:25 <b_jonas> ais523: are those translations of the text of the video game, or of the voice acting or dubbing of the video game?
21:03:38 <int-e> b_jonas: you should make that into a wisdom entry
21:03:47 <ais523> b_jonas: normally text
21:03:53 <ais523> I don't play a whole lot of games that have voice acting
21:04:02 <int-e> (it says more about the video games that you play than about video games in general)
21:04:37 <ais523> int-e: well, two out of the three largest console manufacturers are Japanese, and this thus affects all their first-party games
21:04:45 * int-e plays a lot of contemporary click&point adventures, and most of those have voice acting
21:05:05 <shachaf> Are there a lot of contemporary click⅋point adventures?
21:05:13 <b_jonas> int-e, ais523: yes, the bias comes from how I see people play a lot of nintendo games
21:05:14 <int-e> ais523: Hmm. You may have a point there. I'm focused on the PC platform.
21:05:42 <b_jonas> even though nintendo games are less popular here in europe (still quite popular, mind you), I see them a lot on the internet
21:05:59 <int-e> shachaf: there are a lot of contemporary point&click adventures
21:06:15 <int-e> shachaf: I don't think any of them use linear logic of the kind you alluded to
21:06:18 <shachaf> What are a few? I thought they were pretty rare nowadays.
21:06:51 <int-e> (unless you get into game mechanics where items sometimes get used up? hmm. there's an opportunity to overthink this here, certainly.)
21:06:53 <ais523> shachaf: how do you typo an upside-down ampersand? I have a huge number of characters on my keyboard but don't know how to type that one
21:07:32 <b_jonas> I don't think that was a typo
21:07:36 <shachaf> I don't, but I like to imagine a world in which I do.
21:07:57 <shachaf> First I pressed <compose> & &, and it didn't do anything, but I was kind of hoping it would.
21:08:11 <ais523> that's the first thing I tried too :-D
21:08:13 <shachaf> So then I just inserted it.
21:08:20 <b_jonas> shachaf: two ampersands? why not an ampersand and a grave accent?
21:08:35 <int-e> one minute of searching in gucharmap: ⅋
21:08:35 <ais523> b_jonas: it's by analogy with ¿ and ¡
21:09:03 <ais523> RFC 1345, the most complete repository of compose sequences I know of (although it disagrees with X on some issues), doesn't have a compose sequence for ⅋
21:09:17 <shachaf> I have the best Unicode searcher. It's very convenient.
21:09:19 <HackEso> [U+214B TURNED AMPERSAND]
21:10:23 <ais523> I guess that my taste in games is focused heavily on gameplay over other factors, also I can't easily download large games or run those with DRM on my computer (because DRM normally requires an Internet connection)
21:10:42 <ais523> these considerations combined mean that voice acting is very unlikely to be present in a game I play
21:11:06 <ais523> that said, there is some amount of voice acting in some games I play, but it typically implies that I'll own a physical version (and it may well be a console game)
21:11:50 <ais523> …the other impressive thing about RFC 1345 is that it is about non-ASCII character sets and compose sequences, yet is written entirely in ASCII
21:12:04 <ais523> I think the main reason for defining all the compose sequences was to make it possible to readably write the rest of the document
21:12:20 <b_jonas> http://www.faqs.org/rfcs/rfc1345.html doesn't seem to mention the upside down ampersand
21:12:36 <b_jonas> ah yes, ais523 looked it up already
21:15:17 <shachaf> Hmm, my Unicode selector is already the best, but it's kind of cobbled together out of multiple pieces which isn't ideal.
21:15:29 <shachaf> I should write an even better Unicode selector thing.
21:15:39 <ais523> …actually no, this isn't ASCII, is it? it's /actually/ ISO646
21:15:47 <ais523> if it were ASCII it'd be able to use things like square brackets literally
21:16:13 <shachaf> The trouble is that rendering Unicode text is really hard.
21:17:36 <shachaf> There's pretty much only one free library for Unicode text layout, and it has some problems.
21:17:54 <shachaf> And also the author/maintainer seems to be a jerk about any criticisms of it.
21:18:39 <ais523> hmm, theoretically libuncursed2 is planned to do Unicode text /layout/ (although not rendering, it just works out where to put the characters)
21:19:09 <shachaf> Well, layout is the hard part.
21:19:58 <shachaf> As far as I can tell there's no specification for how to do it or anything like that.
21:20:31 <shachaf> Librarie that do it just get a bunch of language-specific implementations from people who speak particular languages.
21:20:40 <ais523> the main complexities are a) grapheme clustering, which definitely is specified; b) bidirectional layout, which I think is specified but haven't checked
21:20:52 <ais523> but libuncursed2 is monospace only
21:21:03 <ais523> it's a curses replacement that I was working on, then stopped
21:21:28 <shachaf> Oh, monospace-only is probably easier.
21:21:30 <ais523> (so was libuncursed1, for that matter; libuncursed2 is meant to have a less ridiculous API, though, whereas libuncursed1's was almost curses-compatible)
21:21:41 <shachaf> I want to lay out general text.
21:22:16 <shachaf> I just want a library that implements the necessary algorithms and doesn't insist on taking over the world with regard to memory management or whatever.
21:22:23 <b_jonas> shachaf: pango is probably one of the very few libraries that tries to tackle all its complexity, yes
21:22:26 <shachaf> I can't tell why harfbuzz wants to reference-count everything as its only API.
21:22:31 <shachaf> Pango just uses harfbuzz, right?
21:22:48 <b_jonas> I don't know what it uses underneath, I just use its api
21:23:01 <b_jonas> I know it has dependencies
21:23:22 <b_jonas> it has to do lots of magic about accessing fonts installed on the system
21:24:02 <b_jonas> well, it has lots of user-configurable knobs, so I think you can turn whatever magic you don't want off
21:24:19 <b_jonas> but I don't see how you want to do general text layout without magic, unless you know a lot about every script there is in unicode
21:24:20 <shachaf> I want to be able to put glyphs in a font atlas thing and have them rendered on the GPU anyway.
21:24:33 <b_jonas> or every script there is in existing fonts, rather
21:24:52 <shachaf> Presumably given a particular string I can figure out which glyphs are necessary for rendering it.
21:25:03 <b_jonas> shachaf: no, that's pango's job
21:25:10 <b_jonas> figuring out which glyphs to render and where exactly
21:25:37 <b_jonas> then you can use pango with multiple different frontends that actually draw the glyphs there if you want to render them, including on GPU
21:25:52 <shachaf> I also want libraries that don't ever call malloc.
21:25:59 <shachaf> That seems like a pretty reasonable request.
21:26:17 <b_jonas> that... may be hard in this case
21:26:43 -!- AnotherTest has quit (Ping timeout: 245 seconds).
21:26:53 <b_jonas> you want the same library to do both, right? help with text layout and never call malloc that is
21:27:26 <shachaf> I don't want any library to call malloc. That doesn't seem that unreasonable.
21:27:28 <b_jonas> you can probably make a version that calls your own malloc-like functions if you really need to
21:28:04 <shachaf> I definitely don't want libraries to do reference counting. That's just ridiculous.
21:28:05 <b_jonas> though it might be hard because you may have to go down to all dependencies including gobject
21:28:26 <b_jonas> shachaf: again, that will be hard with the current status of these libraries
21:29:03 <b_jonas> and for rendering layout, that seems an unreasonable requirement to me. surely you want them to cache the information they learned out about fonts and stuff, and they need refcounting for that
21:29:45 <ais523> libuncursed, at least, inherently needs memory from somewhere; what would be your suggested API for that?
21:30:09 <ais523> (note that the intended API uses nothing but Unicode strings and 32-bit integers to make it easy to wrap from arbitrary languages)
21:30:21 <shachaf> Hmm, I could pass in some amount of memory that it requests.
21:30:22 <ais523> calling malloc seems like the obvious method
21:31:07 <shachaf> The main thing I want is a clear understanding of the memory usage and allocation profile of my program.
21:31:20 <b_jonas> I for one am fine with libraries like this doing malloc and some reference counting
21:32:03 <ais523> shachaf: is it OK if all the routines that can allocate memory have a name clearly indicating that?
21:32:17 <b_jonas> shachaf: you can still do that with malloc, you can probably replace malloc
21:33:00 <shachaf> That would be better, and it would also be better if I can pass in an allocator rather than it calling the global malloc.
21:33:22 <b_jonas> sure, there are some functions where I want to make sure that they don't malloc, but for anything like text layout or rendering, using malloc is fine for me,
21:33:42 <b_jonas> assuming it can clean up after itself of course, doesn't leak memory like crazy
21:38:19 <b_jonas> also for english pronunciation, article http://www.madore.org/~david/weblog/d.2019-08-29.2618.html is fresh out from the press
21:38:36 <ais523> huh, it's written in English?
21:38:45 <ais523> I guess that makes sense given its topic
21:39:21 <b_jonas> ais523: David alwasy writes some articles in English, it's just less common than it used to be in the early years of his blog
21:39:30 <b_jonas> (the blog is very old, so some change is not surprising)
21:40:24 <b_jonas> but http://www.madore.org/~david/weblog/d.2015-03-20.2284.html is new and also in English
21:41:40 <shachaf> "always writes some articles in English" is a modal logic thing?
21:41:48 <shachaf> "always eventually", I guess.
21:43:18 <b_jonas> hmm yeah, http://www.madore.org/~david/weblog/d.2013-09-29.2161.html is in french and is about english language
21:43:51 -!- ais523 has quit (Quit: sorry for my connection).
21:44:03 -!- ais523 has joined.
21:46:00 <b_jonas> and these days David keeps writing more and more stuff on Twitter rather than on the blog, and some of that is always in English too
21:54:58 <ais523> my own answers: warn=worn; fairy≠ferry; spear it≠spirit; fire≠far; law=lore; ant?=aunt ("aunt" varies); full≠fool; sun=son; horse=hoarse; pain=pane; hire?=higher (both vary); threw=through; luck≠look; would=wood; poor≠pure; brewed=brood; steering≠stirring; shed≠shared; morning=mourning; tower≠tyre ("tire" doesn't exist in en_GB); farm≠form; sat≠set; dolly≠Dali; hit≠heat; bury=berry; putt≠put; nose=knows; tower≠tar;
21:54:59 <ais523> earn=urn; [h]urry≠[f]urry; [n]earer≠[m]irror; stow≠store; poor=pour; hairy≠Harry; fir=fur; for=four; surely≠Shirley; cot≠caught; meet=meat; cap≠cup
21:56:05 <b_jonas> does "tire" not exists even as an uncommon verb?
21:56:18 <ais523> b_jonas: oh yes, I missed the verb possibility
21:56:38 <ais523> it's mostly only used as "tired" but does exist as a verb on its own
21:57:22 <b_jonas> as in "I tire of this farce!" when Jabba drops Oola into the Rancor pit in Darths & Droids http://www.darthsanddroids.net/episodes/1210.html
21:57:42 <shachaf> b_jonas: If the library wants to do caching that seems fine, but surely it should have a lower-level interface where I can control the caching?
21:58:19 <b_jonas> shachaf: I don't know the details. you can probably control at least as much to be able to ask to purge the cashes
21:58:57 <b_jonas> you can check the manual at https://developer.gnome.org/pango/unstable/ if you want, or a local copy
21:59:38 <shachaf> Ugh, I definitely don't want to use glib.
21:59:45 <shachaf> Every time I've tried to use a glib thing it's been miserable.
22:00:13 <b_jonas> shachaf: I think pango itself doesn't use glib, only cairo does
22:00:19 <b_jonas> pango uses gobject, which is sort of related
22:00:42 <b_jonas> in practice I use pango+cairo together (pango has an easy api for that), so it uses glib
22:00:50 <b_jonas> but only internally, it doesn't expose that
22:01:24 <b_jonas> nor does pango expose gobject I think
22:01:53 <b_jonas> it doesn't bother me this way
22:02:00 <b_jonas> it would bother me if it was exposed of course
22:03:38 <b_jonas> eg. pango uses the type int to give width, not gint
22:20:57 <b_jonas> ais523: my three wrong answers for the poll (despite that no answers are wrong) are for horse, son, and mourning
22:21:13 <b_jonas> I still don't understand how "o" works in English pronunciation
22:21:20 <b_jonas> most of the time I pronounce it randomly
22:21:49 <ais523> it usually matches the vowel in "pot" but sometimes it just means something else, seemingly at random
22:26:08 <b_jonas> "oo" and "ou" confuse me, because I always try to pronounce them as long u (or sometimes short U for ou) when stressed
22:26:34 <b_jonas> but there are a lot of words where it's pronounce as some of the o vowels, but I can never remember which ones
22:26:57 <b_jonas> I do know that "poor" and "pour" are strange, and I pronounce those inconsistently
22:27:20 <b_jonas> and I do know some frequent words like "four" have long o
22:27:39 <b_jonas> but still in many words, it confuses me, and that's what got me in "mourning"
22:28:33 <ais523> oh! you must have tried to pronounce it like "hour"
22:28:45 <ais523> I was trying to figure out what the other viable reading of the word was
22:28:47 <b_jonas> I also know that "your" and "you're" has long o, despite that you has U
22:29:11 <ais523> a good guideline is that an r after a vowel almost always affects how the vowel is pronounced
22:29:13 <b_jonas> as for "horse", I thought it has a _short_ o, and I'm still surprised that it doesn't
22:29:19 <ais523> although the r itself may end up silent
22:29:40 <ais523> "horse" doesn't really have an "o" at all, the vowel is "or"
22:30:19 <ais523> and there are probably exceptions to how "or" is pronounced because there are exceptions to everything, but it's one of the more reliably pronounced out of the various English vowel spellings
22:31:17 <ais523> "our" is ambiguous, it can either be pronounced like "or" or else more like "ower"
22:31:40 <b_jonas> "son" is the worse, because I have heared that word enough, so I should have known how it's pronounce
22:32:11 <b_jonas> for "horse" I can say that I just don't care about them so I don't listen to texts that talk about horses
22:32:20 <b_jonas> I think it's a reasonable excuse
22:32:40 <ais523> well, from my point of view "son" is irregular so it's easy to imagine someone guessing that wrong
22:32:55 <b_jonas> yes, lots of words are irregular, that's sort of the problem
22:33:05 <ais523> but "horse" is regular (apart from the e at the end) so that's more of a surprise
22:33:21 <ais523> (I think the e at the end is needed because "hors" is an imported French word and thus has a silent s)
22:35:03 -!- FreeFull has quit.
22:36:29 <b_jonas> hungarian is so much easier, because there used to be fewer words with irregular spelling. these days there are somewhat more because some people aren't willing to write a lot of english words in their english spelling even long after they're definitely naturalized. "ímél" is the most annoying to me, because so many people still write it as "email" or "e-mail"
22:36:32 -!- xkapastel has joined.
22:36:43 <b_jonas> but "fájl" vs "file" is older
22:37:10 <b_jonas> luckily people get "fájl" right more often because they see it in the localized windows UI menubars
22:38:59 <ais523> I thought Hungarian respelled all loanwords in Hungarian spelling according to their pronunciation?
22:39:15 <b_jonas> among the words that aren't neologisms, the more famous ones that have irregular spelling or may have irregular spelling in some dialects are "kisebb", "egy", "köpeny", "szőlő", "tízes", "húszas", and there's a few more than I forgot
22:39:43 <ais523> although áj is a bit of a weird way to spell English long i
22:39:44 <b_jonas> plus there are a few interjections that don't follow the normal phonology rules so their transcription is odd
22:41:19 <b_jonas> ais523: loanwords are supposed to be respelled if they've become a regular part of the language and they're not proper nouns; but they are kept in the original spelling while they're rare and just ad-hoc borrowed, as long as it's borrowed from a language usually written in latin script (including serbian)
22:42:38 <b_jonas> ais523: I don't find "áj" weird for spelling the english long i. it corresponds closely to the sound.
22:43:07 <ais523> I guess I find it hard to understand what j does in Hungarian
22:46:46 <b_jonas> ais523: in this case I think of it as a semi-vowel that forms a glide with the previous vowel. hungarian has those only _after_ a vowel, not before, which is why people with hungarian accents like me pronounce some english w-words strange.
22:47:45 <b_jonas> there's an analogous u semi-vowel in hungarian too, but it's pretty rare, basically only occurs in the word "autó" and related words, and even then the pronunciation is variable, plus transcribed ancient greek words with a vowel + u
22:48:06 <b_jonas> (vowel other than omikron) + u
22:48:35 <ais523> IIRC Hungarian "ly" is a sound that doesn't exist in English
22:48:47 <b_jonas> "ly" is pronounced the same as "j"
22:49:11 <b_jonas> so I don't see how that would work
22:50:10 <b_jonas> (except in a few old family names that spell "i" as "y", such as Thököly)
22:50:29 <ais523> as Hungarian "j" or English "j"?
22:50:49 <ais523> I thought English "j" was close to Hungarian "gy" (not identical, but close enough to be mutually intelligible)
22:51:25 <b_jonas> Hungarian "j" and Hungarian "ly" are pronounced the same
22:51:45 <b_jonas> and it's basically the same sound as the english "y" when it's a consonant, such as in "yet" and "yellow"
22:51:54 <ais523> hmm, that's a bit of a surprise
22:51:59 <ais523> how do you know which one to spell words with?
22:52:23 <int-e> rote memorization, just like in english?
22:52:23 <b_jonas> except it often occurs after a vowel but before a consonant, in which case English usually doesn't spell it as "y"
22:52:43 <b_jonas> my banes were "muszáj" and "papagáj"
22:53:51 <b_jonas> there are a few rules that help: grammatical suffixes never have "ly" but often have "j", and "ly" doesn't occur at the start of a word excet in "lyuk" and its derivatives
22:53:57 <ais523> <b_jonas> except it often occurs after a vowel but before a consonant, in which case English usually doesn't spell it as "y" ← because that would modify the vowel rather than being a consonant
22:54:06 <b_jonas> there are also hints in that "ly" is rarer than "j", and "ly" is rare before a consonant
22:55:53 <b_jonas> but you do have to learn a long list of words with "ly" and "j" in school, eg. common ones like "folyik, lyuk", and rare ones that teachers like eg. "gólya, sirály, karvaly, papagáj" (four birds), "gálya, bója",
22:56:15 <b_jonas> and even obscure words like "zsöllye" which I never heard or read anyone use except in the context of learning the spelling
22:59:05 <b_jonas> "zsöllye" means the ordinary seats in a theatre, as opposed to the seats in boxes, but everyone just calls them "szék" which means chair
22:59:20 <b_jonas> why would you need a special word for them?
22:59:49 <b_jonas> special words for types of birds, that I can understand
23:00:13 <b_jonas> there are way more than the four I listed that we had to learn
23:22:33 <b_jonas> I guess "bója" is a third one that I can call my bane, besides "muszáj" and "papagáj". all three sound like they should be spelled with "ly", but they aren't
23:23:33 <b_jonas> but these days I think I know all three of them, and all other words
23:25:10 <b_jonas> "j" vs "ly" in all other words that is, not the spelling of all other words in general
23:30:06 <b_jonas> also all newly created words use "j" except where the "ly" is taken from a word they're derived from, so "ly" is a finite list, though there are obscure obsolate words on that list that I may not know
23:30:08 -!- Phantom_Hoover has quit (Quit: Leaving).
23:31:11 <b_jonas> I know even _some_ obscure words with "ly" that I never use and aren't even sure in the meaning, like "csobolyó" and "süly" and "kesely"
23:36:57 -!- b_jonas has quit (Quit: leaving).
23:38:05 <shachaf> ais523: What about the smaller case of one function that returns variable-size data?
23:38:21 <shachaf> I think there are many options other than a malloc call and most of them are better.
23:38:44 <ais523> IIRC the API was designed so that all possible string-returning functions return data that exists literally as part of the executable, so it's just pointers to static strings
23:39:05 <ais523> that's a pretty major restriction but for something like libuncursed2 it may be doable
23:40:23 <ais523> in general there is probably no good cross-language solution
23:41:28 <ais523> count-and-copy is a solution that is capable of being good in some circumstances and is likely to be portable cross-language
23:41:49 <ais523> (you call to ask how much space to reserve, then provide memory of that size for the called function to copy the return value into)
23:42:06 <ais523> but for some functions it doesn't work as you have to do the same calculations twice
23:42:06 <shachaf> That can result in some duplicated work unfortunately.
23:42:25 <shachaf> One thing you can do is turn your function into a coroutine/state machine that can suspend when it needs more memory.
23:42:35 <shachaf> This is kind of similar to a malloc call (but more flexible).
23:43:53 <shachaf> You could pass a large buffer into the function and have it tell you how much it used.
23:44:33 <ais523> I was going to say "that doesn't work because you need memory to record your current state to be able to return it"
23:44:47 <ais523> then I realised that it suspends mid-calculation as soon as it runs out of memory
23:45:07 <shachaf> Right, you give it a "stack frame" struct that it can record its current state in.
23:45:32 <ais523> this is actually a really interesting idea, and I'm not sure it's been tried before?
23:45:43 <ais523> coroutines + memory allocation as two problems that are each used to solve the other
23:48:54 -!- iczero has changed nick to webpack.
23:51:12 <shachaf> Say you're implementing sprintf, which returns a variable-size output.
23:51:41 <shachaf> The normal thing to do is to call it twice to get the length the first time.
23:52:17 <shachaf> But if you're implementing printf using sprintf, you don't even want to allocate a full-size buffer. You want to sprintf to a fixed-size buffer until it's full, then flush it, and repeat until you're done.
23:52:41 <ais523> so ideally you want a coroutine that yields a stream of characters
23:52:45 <shachaf> The coroutine formulation seems the most natural for that sort of thing. It's not even about allocation in that case because you never want the full string in memory.
23:53:15 <ais523> I think you really have hit on an important discovery here
23:53:20 <shachaf> I think yielding a character at a time isn't really what you want (except maybe conceptually).
23:53:41 <shachaf> You just want to give it a buffer and have it fill the buffer as much as it can based on its current state.
23:53:55 <ais523> well, "yield…stream" would ideally have some sort of buffering, but maybe it could exist at a higher level somehow?
23:54:02 <ais523> rather than being built into the source code of the functions in question
23:55:17 <shachaf> Hmm, these are details you can figure out in some reasonable way. The main point is the way flow control should happen.
23:56:52 <ais523> shachaf: ironically, this actually /is/ a flow control problem (in the sense of working out how much should be buffered before sending it)
00:00:39 <shachaf> It would be nice if languages helped you write this kind of coroutine.
00:00:52 <shachaf> Of course you can do it yourself easily enough in a case like this.
00:01:25 <ais523> async (of async/await) does something quite similar to this, but not quite the same as it doesn't handle the memory allocation
00:02:04 <shachaf> (Also which language's async/await? There are many languages that assign slightly different meanings to those names.)
00:02:25 <ais523> well, the general idea of what async does is that it makes a function into a state machine that can be suspended
00:02:56 <ais523> although it's tied to await to choose the timing of that
00:03:14 <ais523> I guess generators more generally are the general case of that
00:03:16 <shachaf> await is about one state machine waiting for another state machine, right?
00:03:56 -!- Sgeo_ has quit (Ping timeout: 272 seconds).
00:03:59 <ais523> sort-of, it basically continues the other state machine while suspending itself, and continues itself if that state machine returns, or blocks if that state machine blocks
00:04:15 <ais523> so allocating memory in this scenario is basically "await memory"
00:05:18 <shachaf> I think malloc is probably one of the less interesting/more extreme use cases of this sort of thing.
00:05:27 <shachaf> Anyway in the simple version of this allocation is just handled explicitly by the caller.
00:05:48 <ais523> no, I mean, say you need more memory
00:05:59 <ais523> you do "await memory" which basically tries to allocate memory from the slice of memory you already have
00:06:11 <ais523> if you don't have enough that causes a yield, with "not enough memory" as the reason
00:06:15 <ais523> then the caller can resize the slice and continue from there
00:06:34 <ais523> if you do have enough, then the allocation (i.e. used-length from capacity) succeeds, so you continue
00:08:52 <shachaf> A simple API would be something like
00:09:22 <shachaf> char buf[100]; SprintfState state; sprintf_init(&state, "test %d %s\n", 123, some_string); while (!state.done) { sprintf_chunk(&state); write(1, buf, state.chunk_size); }
00:10:15 <ais523> not quite, you never told sprintf_init where the buffer was
00:10:25 <ais523> but that's easily fixable I think
00:10:26 <shachaf> Oh, right, that's another argument.
00:10:39 <shachaf> It would either be part of sprintf_chunk or sprintf_init
00:12:19 <shachaf> It'd just be sprintf_chunk(&state, buf, sizeof buf); in this case, since it never needs to refer to old memory or anything like that.
00:12:38 <shachaf> Hmm, this post -- https://gist.github.com/pervognsen/d57cdc165e79a21637fe5a721375afba -- and the one it links to talk about these state-machine-style APIs.
00:12:46 <ais523> I was thinking of a much more radical API than this
00:13:08 <ais523> yes, your API doesn't work because of this:
00:13:24 <shachaf> Sure, I was trying to think of the simplest case where this is useful.
00:13:24 <ais523> char buf[100]; SprintfState state; sprintf_init(&state, "%s", "some really really really … really long string");
00:13:33 <ais523> string needs to go into state, but it has a fixed size
00:13:41 <shachaf> Why does string need to go into state?
00:13:53 <shachaf> Only the maximum number of varargs needs to fit in state.
00:13:55 <ais523> it's the only out parameter of sprintf_init
00:14:22 <ais523> or are you assuming that the caller-provided string remains allocated from sprintf_init to sprintf_chunk?
00:14:25 <shachaf> But state only needs to store a pointer to its arguments.
00:14:45 <ais523> oh, OK; that's kind-of a mentally abhorrent assumption to me
00:15:04 <ais523> because it's a memory usage assumption that a) isn't documented, and b) might not be true from all calling languages
00:15:12 <shachaf> Really? It seems pretty reasonable to me.
00:15:19 <shachaf> You can enforce it with a language like Rust if you want.
00:15:34 <ais523> it took me a moment to check if it was even expressible in Rust
00:15:38 <shachaf> I would certainly document it if I was writing documentation for this.
00:16:20 <shachaf> What's the more radical API you were thinking of?
00:16:30 <ais523> it is, but SprintfState needs to be generic over a lifetime parameter that says how long the parameters to sprintf_init are alive for
00:16:40 -!- sparr has quit (Changing host).
00:16:40 -!- sparr has joined.
00:17:40 <shachaf> I think copying the erally really long string is surely more abhorrent than ensuring its lifetime is correct.
00:17:43 <ais523> OK, so my idea was that you have a buffer that can be any size you like, you give that to sprintf_init and it stores as much as it can in the buffer, internal state, output characters, everything
00:18:14 <ais523> if it doesn't have enough memory to do what it wants to do it stops and returns an out-of-memory, you can then realloc the buffer to be larger and rerun, it'll continue from where it left off
00:18:41 <ais523> you can also dump out the characters written so far (one at a time, as many as possible, or whatever), perhaps shrinking the amount of state that's in use
00:18:47 <shachaf> If you think of this as a coroutine, it makes sense: A routine's arguments are presumably guaranteed to stay alive until the function returns. A coroutine's "arguments" (the arguments to _init) can reasonably be subject to the same assumption.
00:18:58 <ais523> the basic idea is just that you tell it to go as far as possible, then it tells you when it stopped
00:19:08 <ais523> presumably you'd have to give the same arguments with every call in this API
00:20:11 <shachaf> If you do that you'll presumably have to copy the string out of the internal buffer into the place you want it when you're done?
00:20:46 <ais523> well, yes, but that's the same as in your example (you're copying out of buf after calling sprintf_chunk)
00:21:07 <shachaf> Well, I can just give it a buf that points where I want.
00:21:31 <ais523> the only real difference between your and my versions is that buf and state are the same variable and state can thus steal from buf to record as much as it needs to
00:21:40 <shachaf> In this case it's stack-allocated but there's no reason for that in general.
00:21:58 <shachaf> For example if stdout is buffered I can pass my output buffer directly to sprintf_chunk.
00:22:27 <ais523> hmm… perhaps this suggests some general model involving coroutines communicating with streams
00:22:28 <shachaf> Or if I'm writing to a C++ std::string or whatever else I can just pass a pointer to that memory. Then if I need to resize it I can pass a pointer to the new memory to keep writing.
00:22:46 <ais523> it feels like fputs (i.e. the buffered version of write) is a coroutine in its own right
00:23:07 <shachaf> In the sense that it does a blocking write or something else?
00:23:22 <ais523> in the sense that it gathers up input into an internal state buffer
00:24:23 <shachaf> Ugh, I always forget that fputs doesn't include a \n
00:24:34 <ais523> that's why I said fputs not puts :-)
00:25:10 -!- webpack has changed nick to iczero.
00:25:46 <shachaf> Hmm, I should just write a sprintf with this API.
00:26:00 <shachaf> It's obviously much better than the regular API, which is pretty bad.
00:26:19 <ais523> I should go to bed, have to go to work early tomorrow
00:26:24 <shachaf> (There's no way to implement printf out of sprintf or vice versa, without arbitrary allocation.)
00:26:28 -!- ais523 has quit (Quit: quit).
00:30:15 <zzo38> Now I wrote on a paper, a Scrabble variant, which is Go-Scrabble, which is using Go stones in addition to Scrabble.
00:34:21 <shachaf> ais523: I think the kind of API you're talking about is more reasonable in other cases where you have more computation going on.
00:34:51 <shachaf> Maybe I'd characterize it as passing an arena to your coroutine.
00:39:21 -!- Sgeo has joined.
00:41:52 -!- Sgeo_ has joined.
00:44:37 -!- Sgeo has quit (Ping timeout: 245 seconds).
00:50:10 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65779&oldid=65776 * A * (+438)
00:54:42 <HackEso> 1/2:tall//A Tall proof is a proof with a small hole, which can only be filled by another Tall proof. \ eol//EOL stands for End Of Lawn. It's often found past the wabe. oerjan requests your presence there immediately. \ hovercraft//a-é-ro-g-liss-e-ur. If you mention eels, you'll get smacked with one of them in a most unappropriate manner. \ fisdom//Fisdom is the domination by the federal inspection station. \ operation//Operation is the opposite
00:55:29 <HackEso> shachäf Zarutiän Zarutiän Zarutiän
01:00:25 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65780&oldid=65779 * A * (+605) /* Arrays */
01:17:55 -!- arseniiv has quit (Ping timeout: 246 seconds).
02:13:55 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:38:11 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65781&oldid=65780 * JonoCode9374 * (+0) /* Sets */ fixed a formatting error
04:12:26 <esowiki> [[Truth-machine]] https://esolangs.org/w/index.php?diff=65782&oldid=65616 * Dtuser1337 * (+190) /* Madbrain */ mailbox truth machine by me.
04:38:18 <kmc> `quote kmc
04:38:18 <HackEso> 579) <kmc> COCKS [...] <kmc> truly cocks \ 609) <shachaf> You should get kmc in this channel. kmc has good quotes. <shachaf> `quote kmc <HackEgo> 686) <kmc> COCKS [...] <kmc> truly cocks <shachaf> Well, in theory. \ 679) <kmc> damn i should make a quasiquoter for inline FORTRAN \ 682) <kmc> has there been any work towards designing programming languages specifically for stoned people \ 712) <kmc> the problem with PHP is that anyone halfway competent giv
04:38:26 <kmc> `quote kmc
04:38:27 <HackEso> 579) <kmc> COCKS [...] <kmc> truly cocks \ 609) <shachaf> You should get kmc in this channel. kmc has good quotes. <shachaf> `quote kmc <HackEgo> 686) <kmc> COCKS [...] <kmc> truly cocks <shachaf> Well, in theory. \ 679) <kmc> damn i should make a quasiquoter for inline FORTRAN \ 682) <kmc> has there been any work towards designing programming languages specifically for stoned people \ 712) <kmc> the problem with PHP is that anyone halfway competent giv
04:38:35 <kmc> `quote shachaf
04:38:35 <HackEso> 839) <sgeo> GreyKnight, shachaf is like a high-level Forth \ 1059) <@elliott> well, I think if you don't think figuring out who the opposite of shachaf is requires thought, then you don't know shachaf very well
04:39:10 <Sgeo_> ....what was the context for that?
04:40:04 <Sgeo_> Apparently I tried to autocomplete Factor, which as we all know begins with s.
04:52:06 <shachaf> earlier i was going to send you a link to https://www.youtube.com/watch?v=_gKhM8gqbD8 although i don't remember why
05:08:18 <shachaf> isn't it the cutest though
06:11:01 <kmc> we saw a cat today
06:11:08 <kmc> on the way back from thai food
06:11:09 <kmc> standing in someone's driveway
06:11:22 <kmc> did you know the government of thailand made a smartphone app that will tell you where the nearest thai restaurant is
06:11:36 <kmc> they have a huge program to promote thai cuisine
06:14:15 <shachaf> my friend showed me a bunch of cute cat pictures he took the other day
06:19:18 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65783&oldid=65781 * A * (+271)
06:23:04 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65784&oldid=65783 * A * (+182) /* Miscellaneous */
06:52:25 -!- pikhq_ has joined.
06:55:02 -!- pikhq has quit (Ping timeout: 252 seconds).
07:05:27 -!- AnotherTest has joined.
07:56:06 -!- tromp has quit (Remote host closed the connection).
08:03:24 -!- tromp has joined.
08:13:27 -!- tromp has quit.
08:13:45 -!- tromp has joined.
08:19:43 <shachaf> kmc: "void SHA1_str(Str str, U8 output[static SHA1_HASH_BYTES]);"
08:19:46 <shachaf> p. fancy use of static, huh
08:28:12 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65785&oldid=65784 * A * (+77) Dumb 11-line transpiler
08:38:13 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
08:41:16 -!- Lord_of_Life has joined.
08:42:58 -!- wob_jonas has joined.
08:44:29 <wob_jonas> shachaf, ais523: re memory allocation with coroutines, this is usually done with memory alloc callbacks instead of coroutines. many libraries allow you to set a callback to allocate more memory, and some even allow you to pass a cookie to it so it can be a closure different for each state.
08:44:54 <wob_jonas> for writing to streams, a callback to do the underlying write (flush) or read (fill) from buffer is mostly already what happens:
08:45:29 <esowiki> [[Bitwise Trance]] https://esolangs.org/w/index.php?diff=65786&oldid=65704 * Hakerh400 * (-109) That sentence did not make much sense. In the "I/O format" paragraph it says that the program can be terminated from outside based on the output and it does not affect the computational class
08:45:40 <wob_jonas> C++ streams explicitly work that way, and C FILE effectively works that way these days, possibly with optimizations for common cases, though only glibc exposes the interface to make a FILE with custom read/write functions
08:47:04 <wob_jonas> the streams usually don't allocate extra memory, but either write to a file or a fixed-size buffer, but there are versions like asprintf that do allocate
08:48:19 <wob_jonas> mind you, in many cases you use sprintf to format a number in formats other than %f, in which case you can give a bound for the number of characters output, similarly with strftime with numeric formats, so sometimes using a fixed size buffer is reasonable
08:48:52 <wob_jonas> it's just that when you get the buffer size wrong, you get programs that mysteriously fail in months that have a long name, or some such
08:49:51 <wob_jonas> the exception is kernel interfaces, because those usually don't want to call back the user, so those are indeed implemented as coroutines that stop when they passed as much data to the process that it's allocated
08:50:29 <wob_jonas> the most common case is the read call, to which you give a buffer, and you can call it again if the kernel has more input for you
08:51:02 -!- Sgeo__ has joined.
08:51:04 <shachaf> Isn't the interface I specified more general and easier than an allocation callback?
08:51:10 <wob_jonas> but there's also other stuff like readlink and getsockopt where the kernel can tell you how long buffer you need, though often you can guess correctly
08:51:33 <wob_jonas> in particular, for readlink, lstat _usually_ tells you how much of a buffer you need, but that fails for /proc files
08:52:12 <wob_jonas> shachaf: some functions like interpreters are complicated, and may need to allocate way deep in the call stack
08:52:21 <wob_jonas> so arranging to save the state and return in that case is hard
08:52:38 <wob_jonas> the kernel has to do it anyway for syscalls, like I said
08:52:54 <shachaf> I meant easier to use, not easier to implement.
08:52:58 <wob_jonas> and some network interfaces have to as well
08:54:23 <wob_jonas> shachaf: even that is not clear to me. with something like the lua interpreter or the gmp/mpir arbitrary precision integer functions, it's more convenient to set the allocation function once rather than to have to check the return value of almost every call and call it again if it's out of memory
08:54:40 -!- Sgeo_ has quit (Ping timeout: 272 seconds).
08:54:59 <shachaf> I don't think you should try to have exactly the same interface for a programming language interpreter and sprintf.
08:57:29 <wob_jonas> a more typical case when coroutines may help is where you're communicating through network through a protocol that requires lots of back and forth stuff, which you do often want to write as a state machine that returns each time it wants to select
08:59:56 <shachaf> I'm also interested in how compiler support can help you make these things.
09:00:22 <shachaf> Anyway I wonder whether there's an implementation of sprintf specifically that behaves the way I said?
09:00:44 <shachaf> You can't implement either printf or sprintf in terms of the other one efficiently, which is unfortunate.
09:02:41 <shachaf> Hmm, does anyone use glibc obstacks?
09:02:52 <wob_jonas> shachaf: behaves as a state machine that can continue the same sprintf call? I don't think there's one, but it would be sort of unnecessary: you just do separate parts of sprintf individually anyway, and for a single one, redoing the work like you need with snprintf now is not much extra overhead to what printf already has
09:03:24 <wob_jonas> shachaf: no, but subversion uses apache's own implementation from libapr that is similar to them
09:03:27 <shachaf> If you have a large string output with sprintf, you need a large allocation as well.
09:03:40 <shachaf> Whereas printf can just use a constant-size buffer.
09:03:53 <wob_jonas> allocates everything in whatever they call the equivalent of obstacks, and then free everything at once later
09:04:02 <shachaf> Yes, it's probably right that you should just have your own implementation rather than relying on glibc.
09:04:12 <shachaf> I wrote my own and it's only a few lines anyway.
09:04:20 <wob_jonas> they can't use obstacks from glibc because glibc is rather nonportable to non-linux systems
09:04:54 <shachaf> I brought this up because I thought obstack had a printf function, but maybe it doesn't.
09:05:24 <wob_jonas> shachaf: either it has one, or if not, you can make one with the custom stream glibc interface, I don't recall which
09:05:37 <wob_jonas> I don't recall what APR has instead
09:06:42 <wob_jonas> https://www.gnu.org/software/libc/manual/html_mono/libc.html#Custom-Streams glibc C FILE streams with custom read/write callbacks; C++ streams and rust streams and python streams and perl streams have their own variants (perl has like three different mechanisms I think)
09:07:39 <wob_jonas> https://www.gnu.org/software/libc/manual/html_mono/libc.html#Dynamic-Output has obstack_printf
09:09:32 <wob_jonas> glibc scanf has an "a" modifier that does malloc, as in "%as" or "%a[...]", which is why I think it's a mistake for C99 to have specified "%a" as equivalent to "%g" in scanf, because the glibc use is way older,
09:09:54 <wob_jonas> so in practice you can't actually use "%a" on glibc because glibc interprets it the old way, but I don't think anyone uses it anyway
09:10:09 <wob_jonas> it's just silly of C99, they are usually more careful avoiding clashes
09:10:32 <wob_jonas> it's different with clashes where neither clearly precedes the other of course, such as the two uses of "clog"
09:11:43 <wob_jonas> "remove" also clashes, but that's the same problem that the Unhinged Erase card parodies, we basically have only a few synonyms (remove, erase, delete) and a ton of functions that you try to name that way
09:12:13 <shachaf> One of the nice things about Xlib is that it knows three property formats: 8, which is chars, 16, which is shorts, and 32, which is longs.
09:12:34 <shachaf> Even if your long is 64-bit, you get an actual_format integer equal to 32.
09:17:15 <wob_jonas> I know very little about Xlib, and don't expect to have to learn more either, luckily
09:17:26 <wob_jonas> I just use higher-level libraries or programs abstracting it way deep
09:17:43 <wob_jonas> there was one case when I wanted to find out whether a certain functionality is available from Xlib, but I found a workaround instead
09:18:30 <wob_jonas> namely asking the X server to change the current virtual terminal to a different one (from the one where X lives), which X can do because it does so for keyboard shortcuts, and it's one ioctl for them anyway, but I wanted to know how to ask it to do so programmatically
09:34:34 -!- Sgeo_ has joined.
09:38:12 -!- Sgeo__ has quit (Ping timeout: 248 seconds).
09:41:32 <esowiki> [[Talk:Uyjhmn n]] M https://esolangs.org/w/index.php?diff=65787&oldid=61934 * Dtuser1337 * (-12) OH NOOOOOOOOOO!!! THIS MUST BE THE WORK OF AN ENEMY STAND! D:
09:45:59 <esowiki> [[Uyjhmn n]] https://esolangs.org/w/index.php?diff=65788&oldid=54422 * Dtuser1337 * (+66) Adding category because truttle1 forgot to add categories.
09:50:59 <esowiki> [[User:Dtuser1337/sandbox]] N https://esolangs.org/w/index.php?oldid=65789 * Dtuser1337 * (+106) Created page with "this is my sandbox page in which i use to draft some w.i.p stuff and experiment with these. ==some stuff=="
09:51:34 -!- Sgeo__ has joined.
09:54:45 -!- Sgeo_ has quit (Ping timeout: 258 seconds).
09:56:23 <esowiki> [[Talk:AAAAAAAAAAAAAA!!!!]] https://esolangs.org/w/index.php?diff=65790&oldid=14574 * YamTokTpaFa * (+249) /* I'd like to implement, but isn't it pretty difficult to implement its parse? */ new section
10:06:09 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65791&oldid=65785 * A * (+273) /* Sets */
10:14:05 -!- Frater_EST has joined.
10:14:51 <esowiki> [[Point]] M https://esolangs.org/w/index.php?diff=65792&oldid=62914 * Dtuser1337 * (-1) /* Point */
10:16:09 <esowiki> [[Point]] M https://esolangs.org/w/index.php?diff=65793&oldid=65792 * Dtuser1337 * (-1) moving the infobox to the top, yare yare daze.
10:16:57 <esowiki> [[Esolang:Sandbox]] https://esolangs.org/w/index.php?diff=65794&oldid=65595 * Dtuser1337 * (-4137) Do i have any reason to blank this page!?
10:21:00 <esowiki> [[Esolang:Sandbox]] https://esolangs.org/w/index.php?diff=65795&oldid=65794 * Dtuser1337 * (+5646) testing the ASCII art. joseph joestar picture and quotes are used.
10:21:51 <esowiki> [[Esolang:Sandbox]] https://esolangs.org/w/index.php?diff=65796&oldid=65795 * Dtuser1337 * (+907)
10:22:18 <esowiki> [[Esolang:Sandbox]] M https://esolangs.org/w/index.php?diff=65797&oldid=65796 * Dtuser1337 * (-6553) blanking. Arigato, Gyro.
10:23:44 -!- ineiros has quit (*.net *.split).
10:23:45 -!- sprocklem has quit (*.net *.split).
10:23:45 -!- Hooloovo0 has quit (*.net *.split).
10:23:45 -!- Guest77811 has quit (*.net *.split).
10:23:45 -!- GeekDude has quit (*.net *.split).
10:23:45 -!- LBPHacker has quit (*.net *.split).
10:23:49 -!- HackEso has quit (*.net *.split).
10:23:49 -!- Melvar has quit (*.net *.split).
10:23:49 -!- zzo38 has quit (*.net *.split).
10:23:49 -!- lifthrasiir has quit (*.net *.split).
10:23:49 -!- jix has quit (*.net *.split).
10:23:50 -!- shachaf has quit (*.net *.split).
10:24:04 -!- LBPHacker has joined.
10:24:20 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65798&oldid=65789 * Dtuser1337 * (+19) /* some stuff */
10:24:27 -!- Melvar has joined.
10:24:48 -!- HackEso has joined.
10:25:36 -!- GeekDude has joined.
10:25:39 -!- GeekDude has changed nick to Guest24768.
10:25:45 -!- sftp has quit (Excess Flood).
10:26:06 <esowiki> [[Point]] https://esolangs.org/w/index.php?diff=65799&oldid=65793 * Dtuser1337 * (+18) NANI!? A year category!?!?
10:26:24 -!- sftp_ has joined.
10:27:06 -!- Hooloovo0 has joined.
10:27:15 -!- sftp_ has changed nick to sftp.
10:28:19 -!- lifthrasiir has joined.
10:28:54 -!- ineiros has joined.
10:29:22 -!- jix has joined.
10:29:23 -!- quintopia has joined.
10:29:34 -!- sprocklem has joined.
10:29:52 -!- shachaf has joined.
10:29:59 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65800&oldid=65798 * Dtuser1337 * (+109) Yare yare daze
10:30:13 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65801&oldid=65800 * Dtuser1337 * (+1)
10:30:46 -!- xkapastel has joined.
10:35:42 <shachaf> I heard that Objective C implements "blocks" with operating system support for some reason.
10:35:53 <shachaf> Is that true? What's the thing they need it for?
10:38:13 <int-e> are they connected to some user-space threading mechanism?
10:39:04 <int-e> If not I don't really see why OS support would be needed... or helpful. But who knows what Apple's doing.
10:40:28 <int-e> It could be something comparatively trivial like a hot zone.
10:42:31 <int-e> . o O ( I've heard that INTERCAL implements 'come from' with OS support... )
10:42:56 <int-e> It's so easy to make up rumors.
10:43:26 <shachaf> It's certainly possible I misunderstood.
10:45:07 <int-e> Meh the thing with these claims is that they require serious research to refute, unlikely as they seem.
10:46:22 <wob_jonas> shachaf: do you mean like by allocating executable areas or using an executable stacks to make closure stubs?
10:47:50 <wob_jonas> int-e: the intercal one is easier to believe
10:48:11 <wob_jonas> it's an esoteric language, so it may have esoteric implementation strategies
10:48:23 <shachaf> I was wondering whether someone would already know, not asking people to do research for me, of course.
10:49:39 <wob_jonas> I do know a few things that are surprisingly implemented with OS support:
10:50:08 <wob_jonas> one of libcoro's backend uses sigaltstack to set up stacks for newly created contexts in a somewhat portable way;
10:51:14 <shachaf> Windows has some neat OS support for userspace threading (though I think it doesn't go far enough).
10:51:45 <shachaf> It lets you transfer control to your scheduler when a thread blocks on a system call or page fault.
10:52:21 <wob_jonas> there is OS support to implement some atomic stuff, in the form of asking the OS set set some user-space flag if the OS context switches the process when some other user-space flag says that you're in some critical instruction sequence; this helps for single-processor systems on certain old processors that don't have cpu-supported atomic instructio
10:52:34 <wob_jonas> but these days I think they found a new modern use for it, I don't really recall what
10:57:06 <int-e> shachaf: Sorry for all the negativity though. I'm mostly trying to convince myself that I shouldn't spend time going down this particular rabbit hole.
10:58:19 <shachaf> I thought I saw this claim repeated a bunch of times in the past but now I can't find any references to it.
10:58:54 <shachaf> Maybe it's the multi-core scheduling ("Dispatch") that I'm thinking of, though that seems like a different feature.
10:59:39 <int-e> It's just too open-ended a question. There's a wide range of "OS support" ranging from a trivial system call (say something that fuses two other system calls that happen to occur together a lot) to special scheduler and memory system support for who-knows-what.
11:00:41 <int-e> Your best bet is to find somebody who knows and I'm not that person :)
11:00:44 <shachaf> I know! I'm not asking you to invent or research plausible answers.
11:00:50 <shachaf> I wasn't even asking you at all.
11:01:09 <shachaf> I thought maybe typing the question in this channel would be a way to find somebody who knows.
11:01:27 <int-e> Yeah, as I tried to explain, I'm susceptible to going down those trails... wasting a lot of time.
11:01:41 <int-e> My fault really, not yours. You're just a fairly effective trigger.
11:02:51 <int-e> (Without trying to be, I believe.)
11:04:43 <shachaf> Anyway I'm in the int-e fan club.
11:28:06 -!- cpressey has joined.
11:35:31 -!- Sgeo_ has joined.
11:37:33 <int-e> shachaf: speaking of wasting time, did you ever finish any of those pillars in The Witless?
11:38:09 <int-e> (I've had the misfortune of starting that game up again last weekend. But no, no completed pillar yet.)
11:39:13 -!- Sgeo__ has quit (Ping timeout: 245 seconds).
11:52:44 -!- Frater_EST has quit (Ping timeout: 244 seconds).
12:18:24 <cpressey> Functors adhere to a set of equational laws, so I have to imagine that they're algebraic structures in the sense of universal algebra. I also have to imagine that if I ask #haskell if they're ever studied this way, category theory will immediately come up, and won't go away.
12:19:19 <wob_jonas> cpressey: category theory may come up if you ask here as well
12:19:26 <HackEso> Monads are just monoids in the category of endofunctors.
12:23:17 -!- ais523 has joined.
12:23:49 <ais523> C-INTERCAL doesn't make use of any particular OS support, and I don't think CLC-INTERCAL does either (and am more certain that J-INTERCAL doesn't)
12:25:23 <ais523> cpressey: functors are one of the building blocks of category theory; arguably the entire reason category theory was invented was to rigorously define "natural transformation" and those have functors as inputs and outputs, thus functors are kind-of a big deal in category theory
12:26:05 <ais523> futexes are a good example of something that benefits from OS support, but they're only really of use in multithreaded programs
12:26:07 <wob_jonas> but what's the relationship to haskell Functors?
12:26:47 <ais523> I'm not sure how Haskell functors work
12:28:42 <ais523> if you pass a category-theoretic functor through curry-howard, you basically end up with a function f from types to types, that lets you map from an expression that takes type A and has a free variable list of type B, to an expressioin that takes type f(A) andd has a free variable list of type f(B)
12:28:58 <ais523> the Haskell definition seems very close to that, it's just using lambdas rather than free variables
12:29:32 <ais523> (the only reason the category-theoretic definition uses free variables is that there's no guarantee that function types actually exist in any given category, and in fact the input and output of a functor can belong to different categories)
12:33:14 <ais523> hmm… different categories correspond to different programming languages under curry-howard
12:33:31 <ais523> so that means that in theory, an fmap should be able to lift a function from one programming language into another
12:33:55 <ais523> you can imagine a Haskell Functor such that f a is a Haskell type when a is, say, a Perl type
12:34:00 <ais523> then fmap takes a Perl function and compiles it into the corresponding Haskell function
12:34:42 -!- ais523 has quit (Remote host closed the connection).
12:34:55 -!- ais523 has joined.
12:34:59 <HackEso> Monads are just monoids in the category of endofunctors.
12:35:46 -!- hppavilion[1] has joined.
12:40:25 <cpressey> If I look at it purely algebraically, a functor is a unary operation on a monoid that preserves identity and distributes over composition.
12:42:21 <cpressey> So, like, ... toupper(string) is a functor?
12:43:06 <cpressey> toupper("H" .. "i") = toupper("H") .. toupper("i")
12:44:36 <cpressey> and of course, toupper("") = ""
12:45:23 <esowiki> [[Esolang:Community portal]] https://esolangs.org/w/index.php?diff=65802&oldid=63833 * LyricLy * (+0)
12:48:22 <cpressey> By the same token, monads must be algebraic structures of some kind, but their laws involve more machinery, so I thought I'd take a stab at functors first.
12:50:03 -!- hppavilion[1] has quit (Ping timeout: 245 seconds).
12:50:13 <ais523> cpressey: something that confuses me when doing this, and confuses a lot of other people too, is that there are more levels of abstraction here than intuitively seems reasonable and it's easy to pick the wrong one
12:51:06 <ais523> toupper isn't a functor because functors act at the type level (they operate on types, and lift functions between those types in a map-like way)
12:51:12 <ais523> whereas toupper is a function that acts at the value level
12:51:24 <ais523> the reason it's confusing is that all these various levels of abstraction look much the same, despite having subtle differences
12:53:02 <ais523> I get annoyed doing category theory because my intuition nearly always ends up picking the wrong level of abstraction
12:53:18 <cpressey> There are no "types" in universal algebra, though.
12:53:38 <cpressey> I mean, there can be, you can introduce "sorts", but you're not required to.
12:54:03 <cpressey> Nothing in the algebraic definition of a functor seems to require sorts.
12:56:11 <ais523> how do you declare what's a valid input to your functor, then?
12:56:15 <ais523> toupper(6) isn't valid
12:57:02 <cpressey> If you're working with group theory, how do you declare what's a valid element of your group?
12:57:03 <wob_jonas> what? toupper(6) is totally valid, and its result is usually 6, depending on the locale
12:57:29 <ais523> cpressey: this is the sort of problem that category theory is actually designed to solve
12:57:53 <ais523> it takes all these "how do we define the domain of this?" problems and makes them explicit
12:58:09 <ais523> so in the case of groups as seen by category theory, a group is a category with one object
12:58:15 <wob_jonas> wait... toupper acts on a string? no way, that directly contradicts to the C standard. it acts on a character.
12:58:24 <ais523> wob_jonas: cpressey's toupper apparently does
12:59:13 <ais523> the objects in category theory basically act as types for the arrows
12:59:19 <ais523> so category theory says that in group theory, all values have the same type
12:59:53 <cpressey> ais523: I'm completely confused. I can't see how it's a "problem" to be solved.
13:00:04 <ais523> anyway, functors can act on any type that exists in the language, by definition; I guess toupper on a group of strings under concatenation therefore actually is a functor, because there's only one type to map and it supports that type
13:01:58 <cpressey> Pick a monoid, you can define a functor on that monoid. In the toupper example, I picked a monoid of strings. Didn't give details, assumed people would understand strings, like you'd find in formal language theory and such.
13:01:59 <ais523> cpressey: I guess my issue here is the "on a monoid" within "If I look at it purely algebraically, a functor is a unary operation on a monoid that preserves identity and distributes over composition."
13:02:09 <ais523> functor are more general than that, you can define them even on things that aren't monoids
13:02:29 <wob_jonas> ``` set -e; >tmp/a.c echo $'#include<stdio.h>\n#include<ctype.h>\n''int main(void) { printf("toupper(8) = %d\n", toupper(8)); return 0; }'; gcc -Wall -O -o tmp/a.out tmp/a.c; tmp/a.out
13:02:48 <cpressey> ais523: You might be able to define them on semigroups. That seems to be hair-splitting a bit though?
13:03:04 <cpressey> You do need to define them on something that has a concept of composition.
13:03:08 <ais523> cpressey: it's not hair-splitting at all; Functor in Haskell us /usually/ defined on things that are much more general than either monoids or semigroups
13:03:29 <ais523> e.g. List is a functor in Haskell
13:04:03 <ais523> cpressey: a specific /type/ of list is a monoid
13:04:14 <ais523> but you can't do, say, [1] ++ ["a"]
13:04:36 <ais523> List, the actual concept devoid of any specific/concrete element type, is a functor
13:05:36 <cpressey> ais523: Every kind of list you can define in Haskell is a monoid.
13:06:39 <ais523> yes, but that isn't relelvant here; your definition of "a functor is a unary operation on a monoid that preserves identity and distributes over composition." doesn't apply to any specific type of list because the type of list is a monoid in its own right, not a unary operation on a monoid
13:07:36 <ais523> perhaps less confusing as an example: Haskell's Maybe is a functor, but as far as I can tell it isn't a monoid and neither is a typical concrete type of Maybe such as Maybe Bool
13:08:19 <cpressey> ais523: How is fmap defined for Maybe?
13:08:53 <ais523> cpressey: fmap f Nothing = Nothing; fmap f (Just x) = Just (f x)
13:10:28 <ais523> (this operation is actually called "map" in both Java's and Rust's versions of Maybe)
13:12:23 -!- arseniiv has joined.
13:13:10 <cpressey> ais523: OK, I don't know what to say. I don't agree that what I'm talking about has anything to do with Haskell, but your objections seem to be based on that my statements don't make sense in the context of Haskell
13:13:35 <lambdabot> Source not found. It can only be attributed to human error.
13:13:38 <lambdabot> Source not found. Have you considered trying to match wits with a rutabaga?
13:13:42 <lambdabot> Source not found. Sorry about this, I know it's a bit silly.
13:14:33 <ais523> cpressey: I don't think your definition of a functor is remotely related to my definition of a functor
13:14:45 <ais523> it may be an extreme special case but it's missing the general case
13:14:56 <ais523> and the general case requires category theory to define
13:15:26 <cpressey> I'll note that Haskell's Maybe *is* a Semigroup
13:15:32 <ais523> Haskell doesn't actually get all that close to the general case, but its version is more general than yours and so it makes for easy examples
13:15:51 <cpressey> My version doesn't have types, and this makes it *less* general somehow?
13:16:43 <cpressey> If my version is less general, it's because I went with monoid instead of semigroup. I'm happy to backpedal on that.
13:16:47 <ais523> cpressey: yes, because you're requiring everything that your functors apply to everything that exists in the universe of discussion, which is a major restriction
13:17:46 <ais523> the existence of types makes things more general because it allows functors to specify how they behave when multiple different types are in use
13:17:59 <cpressey> "Types are useful when you have types"
13:19:04 <cpressey> I don't know, are you assuming I'm talking about programming? I'm not.
13:19:30 <ais523> no, I'm using programming terminology though because I assumed that category-theoretic terminology wouldn't be understood
13:19:50 <wob_jonas> to the extent that things other than programming are interesting, types are useful outside of programming too
13:22:23 <ais523> hmm… if we restrict ourself to one category and one object, we end up with a semigroup (as you say), and then the category-theoretical definition of "functor" collapses to "function on semigroup elements that preserves identity and preserves composition", which is your definition
13:22:27 <wob_jonas> without types, you end up trying to less-than compare a set of points to a 3xn matrix of complex numbers, or water your
13:22:54 <wob_jonas> and you won't notice that you shouldn't do those things until you get a runtime exception such as the cat dying
13:23:04 <ais523> wob_jonas: I don't think microwaving a kitten is a type error, it's a bad idea for other reasons though
13:24:14 <ais523> cpressey: let me see if I can explain why functors are more general than the semigroup definition: suppose you have two /different/, unrelated, semigroups; but it's possible to define a map from one to the other which preserves identity and preserves composition
13:24:33 <ais523> that's still a functor
13:24:55 <ais523> (there are two generalisations from your definition to the full category-theoretical definition; Haskell generalises it in one dimension, the above example is the generalisation along the other dimensioin)
13:25:01 <wob_jonas> can you give a more concrete example for that?
13:25:25 <ais523> wob_jonas: the simplest example is the degenerate map which maps everything from the first semigroup to the identity element of the second semigroup
13:26:05 <wob_jonas> ok but... that doesn't really answer cpressey's question
13:26:49 <ais523> wob_jonas: I'm trying to answer the question "My version doesn't have types, and this makes it *less* general somehow?", by explaining one way in which the category-theoretical definition is more general than cpressey's is
13:27:22 <ais523> you can think of more useful examples, e.g. there's a functor from the integers-plus-addition to the (integers mod 7)-plus-addition
13:27:25 <ais523> that simply takes the value mod 7
13:27:40 <ais523> preserves identity, preserves composition, it's useful to have a name for this sort of operation
13:28:15 <wob_jonas> but I thought functor was something other than that
13:29:00 <ais523> wob_jonas: well, yes, a functor is more general
13:29:14 <ais523> a homomorphism /between semigroups/ is a type of functor
13:29:18 <ais523> this isn't true for things other than semigroups, though
13:29:23 <wob_jonas> I thought homomorphisms just weren't functors
13:29:44 <wob_jonas> but I don't think I understand what a functor is
13:30:32 <ais523> let's see… in a category, you have objects and arrows (with each object having an identity arrow, and arrows composing)
13:31:01 <ais523> for example, in the category representing a semigroup, there's only one object, its identity arrow is the semigroup's identity, and more generally arrows are elements
13:31:44 <cpressey> ais523: I am still at a loss why your "more general" definition of functor, rejects that toupper() is a functor, while my "less general" defintion accepts that toupper() is a functor, as well as accepting all of your examples are functors as well.
13:31:57 <wob_jonas> but aren't the categories with arrows between supposed to be a generalization of algebraic structures with homomorphisms between?
13:32:11 <ais523> a functor is a map between categories from objects to objects and arrows to arrows that preserves identity and composition
13:32:12 <wob_jonas> what is a "category representing a semigroup" then?
13:33:01 <ais523> cpressey: it turns out that it doesn't reject that toupper is a functor, as long as your source and target categories are very limited (specifically they both have to be the semigroup category of strings under concatenation)
13:33:11 <ais523> wob_jonas: a category with one object is equivalent to a semigroup
13:33:36 <ais523> cpressey: I just hadn't realised you were considering such a limited universeof objects
13:33:39 <cpressey> ais523: Yeah, *I'm not thinking in category theory terms*.
13:34:30 <wob_jonas> so there's one object, plus an arrow for each element of the semigroup, and the arrows compose by the semigroup operation?
13:35:00 <wob_jonas> so that's like the object with the internal morphisms
13:35:48 <ais523> cpressey: in this case I guess you have a valid definition of a special case of a functor (specifically, the case when you're only considering a single semigroup); and if you were working in other settings, the same more general definition could be used to provide a special-case definition for those settings too
13:36:25 <cpressey> ais523: I think that is more or less how abstract algebra works? The thing I said about group theory, remember.
13:36:55 <cpressey> There is usually no assumption that there are multiple kinds of objects you have to distinguish
13:37:15 <ais523> <Wikipedia> Algebraic structures, with their associated homomorphisms, form mathematical categories. Category theory is a formalism that allows a unified way for expressing properties and constructions that are similar for various structures.
13:37:38 <cpressey> And therefore we *must* analyze them with the tools of category theory
13:38:02 <ais523> it's more, category theory is the tool that mathematicians use to specify how the various algebraic structures of abstract algebra relate to each other
13:39:39 <cpressey> It is *the* paradigm, can't escape it, huh.
13:39:47 <ais523> my experience with category theory is that it's more or less impossible to do anything in abstract algebra that doesn't have a category-theoretical interpretation, and that is typically the most general possible interpretation; whether you actually want to think on that level or not is up to you, and it often isn't useful to do so
13:40:04 <ais523> it's mostly only useful when you use it to take a proof from one area of mathematics and use it to prove a theorem in another
13:41:33 <cpressey> I hope I didn't give the impression that that was what I was aiming to do, because it wasn't.
13:43:44 -!- Frater_EST has joined.
13:44:06 <ais523> well, I thought you were interested in learning about what functors were in general
13:45:20 <cpressey> "Functors adhere to a set of equational laws, so I have to imagine that they're algebraic structures in the sense of universal algebra. I also have to imagine that if I ask #haskell if they're ever studied this way, category theory will immediately come up, and won't go away."
13:45:39 <ais523> in particular, I had no way of knowing that you were thinking of the definition as specialised to semigroups as the specific definition you were concentrating on, as opposed to merely being an example of the general definition
13:45:54 <esowiki> [[MUSYS]] https://esolangs.org/w/index.php?diff=65803&oldid=65330 * Salpynx * (+189) Some new examples for an old language. I've started working on a simulator.
13:46:01 <cpressey> I'm not sure how you got "in general" from "in universal algebra".
13:46:33 <cpressey> Or even what "in general" means, in this context, to you.
13:47:00 <ais523> I didn't realise you were considering a special case; "functor", to me, refers only to the general case
13:47:15 <ais523> there's nothing in your statement that suggests that you have a specific special case of functors in mind
13:47:38 <ais523> and the mention of #haskell increased the chance that you were thinking of a definition that's at least as general as Haskell's
13:48:19 <cpressey> fmap id = id; fmap (f . g) = (fmap f) . (fmap g)
13:49:24 <cpressey> I pointed out toupper() conforms to these laws; you said it's not a functor; then later you admitted, okay, it can be a functor.
13:49:40 <ais523> there are /three/ Functor laws in Haskell
13:50:18 <cpressey> Better update https://wiki.haskell.org/Functor then
13:50:19 <ais523> it doesn't comply with the third, which is fmap :: forall a b. (a -> b) -> f a -> f b
13:51:14 <ais523> it's just that Haskell enforces that one by the compiler rather than making the user check that it applies manually, so it doesn't have to be written in a comment
13:52:18 <ais523> now, the reason toupper is a functor on the semigroup of strings, even though it isn't a functor in Haskell, is that the semigroup of strings only has one type – strings – and we have f String = String and forall a b. a = String && b = String
13:52:55 <ais523> but in Haskell, "f" has to be a type constructor and there's no type constructor f for which f String = String, also it's not true that forall a. a = String because Haskell has other types
13:53:43 <cpressey> Haskell has types. It sure does.
13:55:05 <ais523> I'm tempted to go correct that wiki page anyway; Haskell's Functor is not a general representation of mathematical functors, it is specialised to the case in which the type-level mapping is a type-level constructor (rather than a type-level function that isn't a type constructor)
13:56:32 <ais523> (it's also specialised to categories whose objects are Haskell types, but given that it's being imlpemented in Haskell, that's forgivable)
14:04:27 <ais523> cpressey: sorry if I annoyed you by the way; I'm really tired at the moment and that makes it harder for me to predict how my actions will affect other people emotionally
14:07:21 -!- Sgeo_ has quit (Read error: Connection reset by peer).
14:08:27 -!- Sgeo has joined.
14:32:44 -!- Frater_EST has left.
14:34:04 <wob_jonas> ais523: but isn't that limitation solved in a ghc extension, as in type families?
14:34:24 -!- wob_jonas has quit (Remote host closed the connection).
14:54:06 -!- ais523 has quit (Quit: quit).
15:15:32 <esowiki> [[User:YamTokTpaFa]] https://esolangs.org/w/index.php?diff=65804&oldid=65163 * YamTokTpaFa * (+106)
15:16:30 <esowiki> [[ArrowFuck]] https://esolangs.org/w/index.php?diff=65805&oldid=62003 * YamTokTpaFa * (+60) +CATs
15:31:01 -!- cpressey has quit (Quit: WeeChat 1.4).
15:44:18 <esowiki> [[Special:Log/newusers]] create * Ntrupin * New user account
15:45:44 -!- zzo38 has joined.
15:55:04 <esowiki> [[Special:Log/newusers]] create * EdgyNerd * New user account
16:01:00 -!- b_jonas has joined.
16:21:04 -!- tromp has quit (Remote host closed the connection).
16:22:53 -!- tromp has joined.
16:26:25 -!- Phantom_Hoover has joined.
17:08:46 -!- FreeFull has joined.
17:14:17 -!- tromp has quit (Remote host closed the connection).
17:25:06 -!- tromp has joined.
17:31:43 -!- palaiologos has joined.
17:34:20 -!- palaiologos has quit (Remote host closed the connection).
17:34:35 -!- kspalaiologos has joined.
17:41:05 -!- kspalaiologos has quit (Remote host closed the connection).
17:56:38 -!- tromp has quit (Remote host closed the connection).
18:25:44 -!- tromp has joined.
18:42:26 -!- tromp has quit (Remote host closed the connection).
18:42:50 -!- tromp has joined.
18:51:27 -!- choochter has joined.
18:57:49 -!- choochter has quit (Quit: Leaving).
19:00:42 <shachaf> int-e: I haven't played that game in a long time.
19:00:52 <shachaf> I don't think I completed any pillars? I don't remember.
19:13:32 -!- tromp has quit (Remote host closed the connection).
19:39:48 -!- MDude has quit (Ping timeout: 244 seconds).
19:48:26 -!- tromp has joined.
19:52:31 <shachaf> Wow, long conversation about functors.
19:52:44 <shachaf> It looks like mostly people talking past each other?
19:53:05 -!- tromp has quit (Ping timeout: 250 seconds).
19:55:21 <shachaf> A monoid homomorphism is clearly a special case of a functor, and so is Haskell's Functor class.
19:55:41 <shachaf> What's all the argumentationing about?
20:02:23 <shachaf> Maybe *is* a functor, but it's a functor "on" Haskell functions, in the usage above.
20:02:53 <shachaf> The reason the "on a monoid" isn't general enough is that Haskell functions aren't a monoid because you have different types so you can't compose any arbitrary functions.
20:03:59 <shachaf> Whereas «[1] ++ ["a"]» is a red herring because that's not the functor operation that's being discussed ([Int] and [String] are both monoids, separately, and there are no type issues there).
20:04:13 <shachaf> I don't know whether cpressey logreads.
20:13:33 * kmc is back from surgery and feeling good.
20:16:05 -!- tromp has joined.
20:18:20 -!- tromp_ has joined.
20:19:54 <kmc> hichaf ben-kikello
20:20:37 -!- tromp has quit (Ping timeout: 252 seconds).
20:22:49 -!- tromp_ has quit (Ping timeout: 252 seconds).
20:37:23 -!- Lord_of_Life_ has joined.
20:39:40 -!- tromp has joined.
20:40:03 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
20:40:16 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:32:12 <pikhq_> kmc: congrats on surgery
21:37:37 -!- AnotherTest has quit (Ping timeout: 252 seconds).
21:39:15 -!- xkapastel has quit (Quit: Connection closed for inactivity).
21:50:21 <shachaf> kmc is now a surgically-enhanced superhuman
21:51:46 <kmc> something like that
21:52:52 <shachaf> do you do double damage now
21:52:53 <shachaf> https://www.supermegacomics.com/index.php?i=333
22:01:11 <int-e> hmm glowing blue and quad damage
22:35:03 -!- FreeFull has quit.
23:45:46 -!- arseniiv has quit (Ping timeout: 246 seconds).
00:14:15 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
00:27:50 -!- Sgeo has quit (Read error: Connection reset by peer).
00:29:50 -!- Sgeo has joined.
01:04:18 -!- ais523 has joined.
01:13:20 -!- ais523 has quit (Remote host closed the connection).
01:14:33 -!- ais523 has joined.
02:31:54 -!- adu has joined.
02:34:52 -!- atslash has quit (Quit: This computer has gone to sleep).
03:01:55 <zzo38> I thought of a block format for encrypted communications, which could detect tampering and a few other stuff. Each variable size block has a header of four bytes, and then the data of that block. It is possible to transmit only part of a block at once and not the entire block. Also, this is separate from the block used in a block cipher.
03:03:02 <zzo38> The header would be: [1] Checksum of all previous block data [2] Sequence number [3] Meaningless data [4] Block data length
03:04:35 <zzo38> However, right at the beginning instead you will have a special block, which has a data length, random data of that length, and the verification code (which is digitally signed).
03:37:07 -!- hakatashi has quit (Remote host closed the connection).
03:37:30 -!- hakatashi has joined.
03:52:46 -!- ais523 has quit (Quit: quiit).
04:07:29 -!- adu has quit (Quit: adu).
04:32:57 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65806&oldid=65801 * Dtuser1337 * (+176)
04:35:29 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65807&oldid=65806 * Dtuser1337 * (+10)
04:37:56 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65808&oldid=65807 * Dtuser1337 * (+24) /* Beginning of the Sandbox line */
04:42:39 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65809&oldid=65808 * Dtuser1337 * (+19) /* commands */
04:44:22 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65810&oldid=65809 * Dtuser1337 * (+6) /* commands */
04:51:51 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65811&oldid=65810 * Dtuser1337 * (+1198) /* Beginning of the Sandbox line */
07:19:10 -!- tromp has quit (Read error: Connection reset by peer).
07:27:52 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65812&oldid=65811 * Dtuser1337 * (+45) /* commands */
07:30:59 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65813&oldid=65812 * Dtuser1337 * (+8) /* commands */
07:32:14 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65814&oldid=65813 * Dtuser1337 * (+35) /* commands */
07:33:27 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65815&oldid=65814 * Dtuser1337 * (+9) /* commands */
07:40:53 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65816&oldid=65815 * Dtuser1337 * (+151) /* commands */
07:41:07 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65817&oldid=65816 * Dtuser1337 * (+1) /* commands */
07:49:28 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65818&oldid=65817 * Dtuser1337 * (+49) /* commands */
07:59:34 -!- tromp has joined.
08:04:15 -!- tromp has quit (Ping timeout: 252 seconds).
08:05:11 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65819&oldid=65818 * Dtuser1337 * (+304) /* commands */
08:27:00 -!- AnotherTest has joined.
08:40:03 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
08:42:26 -!- Lord_of_Life has joined.
09:01:20 -!- FreeFull has joined.
09:21:41 -!- Frater_EST has joined.
09:24:02 -!- FraterEST has joined.
09:26:59 -!- Frater_EST has quit (Ping timeout: 244 seconds).
09:27:14 <esowiki> [[Esolang:Sandbox]] M https://esolangs.org/w/index.php?diff=65820&oldid=65797 * Dtuser1337 * (+29) Kono dio da!
09:28:14 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65821&oldid=65819 * Dtuser1337 * (+19) /* examples */
09:28:22 -!- FraterEST has quit (Ping timeout: 245 seconds).
09:34:17 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65822&oldid=65821 * Dtuser1337 * (+142)
09:48:57 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65823&oldid=65822 * Dtuser1337 * (+141) /* commands */
09:54:06 <esowiki> [[Madbrain]] https://esolangs.org/w/index.php?diff=65824&oldid=58616 * Gamer * (-10) /* Hello, World! */
09:58:13 -!- Frater_EST has joined.
10:01:25 <esowiki> [[Brainfuck implementations]] M https://esolangs.org/w/index.php?diff=65825&oldid=65530 * A * (-7) /* Normal implementations */
10:03:34 <esowiki> [[Ecndpcaalrlp]] M https://esolangs.org/w/index.php?diff=65826&oldid=61359 * A * (+2) /* Implementation */ Delete my GH repositories
10:04:59 <esowiki> [[Madbrain]] https://esolangs.org/w/index.php?diff=65827&oldid=65824 * Gamer * (+0) /* Hello, World! */
10:05:00 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65828&oldid=65823 * Dtuser1337 * (+101) /* commands */
10:05:20 <esowiki> [[Madbrain]] https://esolangs.org/w/index.php?diff=65829&oldid=65827 * Gamer * (+0) /* Hello, World! */
10:07:05 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65830&oldid=65828 * Dtuser1337 * (+77)
10:08:06 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65831&oldid=65830 * Dtuser1337 * (+25) /* commands */
10:10:58 <esowiki> [[User:Dtuser1337/sandbox]] https://esolangs.org/w/index.php?diff=65832&oldid=65831 * Dtuser1337 * (+15) /* conditional functions */
10:13:05 <esowiki> [[Special:Log/move]] move * Dtuser1337 * moved [[User:Dtuser1337/sandbox]] to [[User:Dtuser1337/Sandbox]]: Making these "S" uppercase
10:16:18 <esowiki> [[Esolang talk:Sandbox]] M https://esolangs.org/w/index.php?diff=65835&oldid=44559 * Dtuser1337 * (-46) Blanking without reason.
10:27:22 <esowiki> [[Madbrain]] https://esolangs.org/w/index.php?diff=65836&oldid=65829 * Gamer * (-56) /* Hello, World! */
10:33:36 <esowiki> [[Madbrain]] https://esolangs.org/w/index.php?diff=65837&oldid=65836 * Gamer * (+2) /* Implementation (Python) */
10:35:28 -!- Lord_of_Life has quit (Read error: Connection reset by peer).
10:36:49 -!- Lord_of_Life has joined.
10:55:43 -!- arseniiv has joined.
11:01:53 <esowiki> [[Piet++]] https://esolangs.org/w/index.php?diff=65838&oldid=58418 * Dtuser1337 * (+27) I used my stand [Za Hando] to add a new category :D
11:21:08 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65839&oldid=65791 * A * (+167)
11:54:13 -!- Frater_EST has quit (Ping timeout: 245 seconds).
12:36:30 <b_jonas> the hideous daystar is confusing my thermometer. it says that it's 62°C outdoors, which is definitely false
12:36:52 <b_jonas> but there's nowhere I can place it here such that it never gets in direct sunshine
12:37:04 <b_jonas> the apartment doesn't have windows facing in other directions
12:45:24 <b_jonas> Re https://esolangs.org/logs/2019-08-29.html#lqf , yes, the dubbing of the Harry Potter movie is changed between the british and american releases to adjust for "Sorcerer's" vs "Philosopher's" in the dialogs. https://www.youtube.com/watch?v=dAniYhY_a24
12:46:04 -!- tromp has joined.
12:50:37 -!- tromp has quit (Ping timeout: 252 seconds).
12:55:06 -!- atslash has joined.
13:05:01 -!- Frater_EST has joined.
13:10:26 -!- atslash has quit (Quit: This computer has gone to sleep).
13:14:09 <esowiki> [[User:Dtuser1337/Sandbox]] https://esolangs.org/w/index.php?diff=65840&oldid=65833 * Dtuser1337 * (+87) /* commands */
13:17:03 <esowiki> [[User:Dtuser1337/Sandbox]] https://esolangs.org/w/index.php?diff=65841&oldid=65840 * Dtuser1337 * (+15) /* conditional functions */
13:20:43 <esowiki> [[User:Dtuser1337/Sandbox]] https://esolangs.org/w/index.php?diff=65842&oldid=65841 * Dtuser1337 * (+133) /* commands */
13:32:33 <esowiki> [[User:Dtuser1337/Sandbox]] https://esolangs.org/w/index.php?diff=65843&oldid=65842 * Dtuser1337 * (+77) /* commands */
14:17:59 <esowiki> [[Esolang:Sandbox]] M https://esolangs.org/w/index.php?diff=65844&oldid=65820 * A * (+25)
14:18:29 <esowiki> [[Esolang talk:Sandbox]] M https://esolangs.org/w/index.php?diff=65845&oldid=65835 * A * (+49) Talk page is also a sandbox
14:34:34 -!- tromp has joined.
14:39:09 -!- tromp has quit (Ping timeout: 252 seconds).
14:40:35 <esowiki> [[Salt]] M https://esolangs.org/w/index.php?diff=65846&oldid=65839 * A * (-749)
14:42:33 <esowiki> [[Salt]] https://esolangs.org/w/index.php?diff=65847&oldid=65846 * A * (+38)
14:43:01 -!- Frater_EST has quit (Remote host closed the connection).
15:21:33 -!- tromp has joined.
15:43:53 -!- AnotherTest has quit (Quit: ZNC - http://znc.in).
15:44:11 -!- AnotherTest has joined.
15:47:32 -!- Sgeo has quit (Ping timeout: 245 seconds).
16:07:25 -!- tromp has quit (Remote host closed the connection).
16:23:46 -!- Phantom_Hoover has joined.
16:23:46 -!- Phantom_Hoover has quit (Changing host).
16:23:46 -!- Phantom_Hoover has joined.
16:24:18 -!- Melvar has quit (Ping timeout: 268 seconds).
16:40:04 -!- atslash has joined.
16:46:41 -!- tromp has joined.
16:48:57 -!- tromp has quit (Remote host closed the connection).
16:49:13 -!- tromp has joined.
17:04:20 -!- Melvar has joined.
17:08:23 -!- tromp has quit (Remote host closed the connection).
17:41:14 <arseniiv> b_jonas: ow… At least the thermometer doesn’t overflow
17:41:49 -!- tromp has joined.
17:43:45 -!- tromp has quit (Remote host closed the connection).
17:43:59 -!- tromp has joined.
17:44:01 <arseniiv> and we here have an unusually cold weather, it should be 7…12° tomorrow. I’d hoped for twenties still, it’s mid-September when it should be becoming sufficiently chiller (and then, only worse)
17:44:34 <arseniiv> (and it will, hopefully there would be a handful of warm days still, but not this week?)
17:44:36 <esowiki> [[Brainfuck implementations]] https://esolangs.org/w/index.php?diff=65848&oldid=65825 * Total Vacuum * (+91)
18:04:10 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
18:21:28 -!- tromp has quit (Remote host closed the connection).
18:42:28 -!- tromp has joined.
18:59:20 -!- Lord_of_Life has joined.
19:07:10 -!- Phantom_Hoover has quit (Remote host closed the connection).
19:10:46 -!- Phantom_Hoover has joined.
19:19:58 <zzo38> One possible substitute for adding a driver in Ghostscript might be to make a "pseudo-driver" by writing PostScript codes to override some of the operators for making output.
19:32:00 -!- AnotherTest has quit (Ping timeout: 244 seconds).
20:01:13 -!- Sgeo has joined.
20:40:12 -!- Lord_of_Life_ has joined.
20:41:13 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
20:43:07 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
20:45:22 -!- atslash has quit (Ping timeout: 244 seconds).
20:45:48 -!- atslash has joined.
20:57:44 <Sgeo> "RESOLVED: ARB_vertex_program. DirectX 8 refers to its similar
20:57:44 <Sgeo> functionality as "vertex shaders". This is a confusing term because
20:57:44 <Sgeo> shaders are usually assumed to operate at the fragment or pixel level,
20:57:44 <Sgeo> not the vertex level."
20:58:31 <kmc> i always heard them called vertex shaders in opengl
20:59:34 <Sgeo> Yes. I think this is an extension from before that was a thing, introducing the concept to OpenGL to the first time
21:00:11 <Sgeo> https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_vertex_program.txt
21:00:30 <Sgeo> ...there's also an incompatible extension called EXT_vertex_shader that this competed with
21:09:07 <Sgeo> I'm looking at WineD3D's OpenGL calls and being utterly perplexed that it's using this
21:13:25 -!- atslash has quit (Ping timeout: 246 seconds).
21:14:07 -!- atslash has joined.
21:18:05 <zzo38> What is the PostScript XUID organization code for UUID?
21:19:48 -!- xkapastel has joined.
22:15:08 -!- Lykaina has joined.
22:15:28 <Lykaina> is this code esoteric enough?
22:15:48 <Lykaina> d l r o w <space> o l l e H <out>
22:16:10 <zzo38> What programming language is it?
22:17:10 <Lykaina> d l r o w <space> o l l e H <out> <out> <out> <out> <out> <out> <out> <out> <out> <out> <out>
22:19:22 <Lykaina> is that the riight number of "character outputs"?
22:19:27 <zzo38> It look like it can be a stack based program language maybe. (But, if you want to write on wiki then you can.)
22:24:10 <b_jonas> Lykaina: is that like unlambda ```````````.H.e.l.l.o. .w.o.r.l.di but backwards?
22:26:15 <esowiki> [[PLEASE]] https://esolangs.org/w/index.php?diff=65849&oldid=55992 * Rdebath * (+14) Turing-Completeness unknown
22:40:20 <esowiki> [[Deadfish]] https://esolangs.org/w/index.php?diff=65850&oldid=65599 * Zzo38 * (+297) PostScript
22:42:06 -!- Lykaina has quit (Quit: leaving).
22:46:18 -!- arseniiv has quit (Ping timeout: 245 seconds).
22:54:45 -!- MDude has joined.
23:21:49 -!- tromp has quit (Remote host closed the connection).
23:59:59 -!- tromp has joined.