←2019-01-06 2019-01-07 2019-01-08→ ↑2019 ↑all
00:00:02 -!- danieljabailey has quit (Quit: ZNC 1.6.6+deb1ubuntu0.1 - http://znc.in).
00:07:33 -!- Essadon has quit (Quit: Qutting).
00:10:58 -!- Phantom_Hoover has quit (Remote host closed the connection).
00:11:51 -!- ais523 has quit (Quit: sorry for my connection).
00:12:07 -!- ais523 has joined.
00:16:00 -!- tromp has joined.
00:28:32 <esowiki> [[Talk:Nope.]] https://esolangs.org/w/index.php?diff=58992&oldid=58927 * Areallycoolusername * (+394)
00:36:53 <b_jonas> arseniiv: Baez just wrote back. He fixed the nitrous oxide thing.
00:37:11 <ais523> b_jonas: that sentence out of context raises so many questions
00:37:14 <b_jonas> arseniiv: thanks for spotting it.
00:37:47 <b_jonas> ais523: yeah, especially since my current job involves working on something about something about something about something about nitrous oxide actually
00:42:32 <b_jonas> hmm. maybe eating either a wand of slow monster or a wand of speed monster should take a long time, the wand of slow monster because of the stored slowing charges escaping and slowing down the xorn, and the wand of speed monster because of http://www.mezzacotta.net/owls/?comic=770
00:51:56 <esowiki> [[Talk:Nil]] https://esolangs.org/w/index.php?diff=58993&oldid=53906 * Salpynx * (+1726) fix interpreter exploit
01:52:39 <b_jonas> M:tG stuff. The next set, Ravnica Allegiance, apparently has a keyword ability about how white soldiers were sworn to serve so much that they're still bound to serve after their death, as an oath-spirit.
01:55:09 <b_jonas> That much is great, but it's a mechanic for the Orzhov guild. But the original Ravnica story went that Agrus Kos of the Boros Guild was a famous watch captain who was forced to serve the Azorius guild after his death. So how will that be a mechanic on Orzhov cards?
01:55:34 <zzo38> I don't know why it is Orzhov.
01:55:50 <zzo38> Possibly because the effect is like white mana and black mana?
01:56:36 <ais523> b_jonas: Orzhov flavour has become, over time, "you incur debts to them and spend multiple lifetimes paying them off"
01:56:45 <b_jonas> zzo38: it's Orzhov because ghosts always made sense in black and white, the blue ones were just illusions, and Eventide and then Innistrad cemented them in black and white.
01:57:10 <ais523> it's not soldiers (at least, not just soldiers), it's random people who are in debt to the Orzhov
01:57:24 <zzo38> b_jonas: Yes, that is how I meant, it is black and white
01:57:32 <zzo38> ais523: OK, that also explains, then
01:57:58 <b_jonas> ais523: I'm not saying that it doesn't make sense in Orzhov. I just don't see how it will work, as it seems like this would force them to waste the main selling point of the ghost thing, which is Agrus Kos.
01:58:16 <ais523> b_jonas: Ravnica's flavour gets reinvented often enough that they likely don't care about Agrus Kos any mroe
01:58:35 <b_jonas> Hmm. So Agrus Kos doesn't have to serve forever then?
01:59:20 <b_jonas> Would that mean that of the original crew, only Niv-Mizzet will be here to stay? Or maybe some of the angels will still be here?
02:00:28 <ais523> Rakdos is the only original guild leader who's still guild leader as of Guilds of Ravnica
02:00:45 <b_jonas> Hmm no, the angels aren't from Ravnica.
02:00:46 <ais523> Niv-Mizzet is still alive but in hiding, apparently
02:01:04 <ais523> the full story is likely to be pay-for rather than free, though, so I don't know many of the details
02:01:53 <ais523> err, the Ghost Council isn't a single person, it's still leader of the Orzhov as of Guilds of Ravnica, but not as of Ravnica Allegiance
02:02:22 <b_jonas> Oh, you mean the novelization.
02:03:11 <b_jonas> I was wondering what you meant, because the ability doesn't demand an additional mana payment to get the ghost.
02:03:58 <ais523> why would it? they're in debt already
02:05:19 <b_jonas> Exactly, it makes sense that it's free. That's why your statement confused me.
02:06:04 <ais523> oh, you interpreted "full story" as an idiom, when I meant it literally (i.e. "the entirety of the plot")
02:06:30 <b_jonas> Yeah, more or less.
02:09:18 <b_jonas> `? ance
02:09:19 <HackEso> Spelling of -ance/-ence words: advance, science, conference, experience, finance, insurance, licence, performance, reference, assistance, balance, defence, difference, distance, evidence, acceptance, appliance, audience, compliance, importance, influence, instance, intelligence, maintenance, preference, presence, sentence, sequence, substance, violence, absence, accordance, alliance, appearance, assurance, attendance, circumstance, clearance, confidence, c
02:09:30 <b_jonas> ^ doesn't have "allegiance"
02:13:48 <b_jonas> Heh heh. The new card frame allows Wizard to print split cards with more space in the text box, allowing more complicated split cards than ever.
02:14:00 <b_jonas> I wonder how the Azorius will use that power.
02:38:03 -!- b_jonas has quit (Quit: leaving).
02:54:59 -!- uplime has quit (Quit: e36freak: whats your favorite meal of the day).
02:56:33 <esowiki> [[Nellephant]] N https://esolangs.org/w/index.php?oldid=58994 * Ais523 * (+13572) new language
02:58:40 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=58995&oldid=58959 * Ais523 * (+17) /* N */ +[[Nellephant]]
02:59:02 <esowiki> [[User:Ais523]] https://esolangs.org/w/index.php?diff=58996&oldid=58790 * Ais523 * (+16) +[[Nellephant]]
03:09:02 -!- uplime has joined.
03:15:35 -!- ais523 has quit (Quit: quit).
03:40:43 -!- FreeFull has quit.
03:50:27 -!- pikhq has quit (Ping timeout: 240 seconds).
03:50:52 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
03:51:31 -!- pikhq has joined.
03:53:28 -!- Lord_of_Life has joined.
04:01:15 -!- danieljabailey has joined.
04:10:03 -!- uplime has quit (Quit: WeeChat 2.2).
04:35:21 -!- yaewa has joined.
04:36:38 -!- moei has quit (Ping timeout: 246 seconds).
04:55:04 <imode> is there some kind of catalog on what kinds of memory you can equip an FSM with to make it turing complete?
04:55:13 <imode> tapes, queues, twin stacks, etc.
05:03:19 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=58997&oldid=58974 * Oerjan * (+143) /* Computational class */ CS.SE answer for improved construction is up
05:23:35 <esowiki> [[Subtractpocalypse]] https://esolangs.org/w/index.php?diff=58998&oldid=55746 * Ais523 * (+84) /* See also */ [[Brainpocalypse]]
05:32:45 <esowiki> [[Re:direction]] M https://esolangs.org/w/index.php?diff=58999&oldid=58825 * Ais523 * (+0) /* Computational class */ fmt
07:58:43 -!- tromp has quit (Remote host closed the connection).
07:58:56 -!- tromp has joined.
08:52:33 -!- imode has quit (Ping timeout: 258 seconds).
08:58:26 -!- AnotherTest has joined.
09:20:40 -!- kolontaev has joined.
09:21:24 <kolontaev> Hi all. Am I right Gödel's incompleteness theorems states that it's not possible to create a language in which the sentence "this phrase is a like" would be impossible?
09:26:29 <kolontaev> Hi all. Am I right Gödel's incompleteness theorems states that it's not possible to create a language in which the sentence "this phrase is a lie" would be impossible?
09:26:32 <kolontaev> lie!
09:42:15 <zzo38> I don't think so? But maybe you mean something else.
10:19:55 -!- kolontaev has quit (Quit: leaving).
11:08:18 -!- AnotherTest has quit (Ping timeout: 250 seconds).
11:09:05 -!- AnotherTest has joined.
11:18:54 -!- AnotherTest has quit (Ping timeout: 268 seconds).
11:29:09 -!- wob_jonas has joined.
11:31:05 <wob_jonas> imode: on what to add to an FSM to make it Turing-complete: any of the following are enough: one half-infinite r/w tape with two symbols, one queue with two symbols, two stacks with two symbols, two bigint counters (you can consider a counter as a read-only tape with one symbol at the beginning and all zeroes after).
11:31:40 <wob_jonas> I'm not sure if there's an explicit "catalog" besides TCS textbooks that explain these with proofs
11:51:59 -!- kritixilithos has joined.
12:05:34 -!- arseniiv has joined.
13:08:48 -!- Essadon has joined.
13:09:23 -!- Essadon has quit (Max SendQ exceeded).
14:04:40 -!- kritixilithos has quit (Ping timeout: 250 seconds).
14:09:21 -!- AnotherTest has joined.
14:18:54 -!- AnotherTest has quit (Ping timeout: 252 seconds).
14:22:10 -!- derpy has joined.
15:11:52 -!- AnotherTest has joined.
15:49:16 -!- Lord_of_Life_ has joined.
15:52:29 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
15:52:30 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
16:15:15 -!- uplime has joined.
16:31:18 -!- imode has joined.
16:44:27 -!- derpy has quit (Remote host closed the connection).
16:46:15 -!- derpy has joined.
16:57:51 -!- AnotherTest has quit (Ping timeout: 258 seconds).
17:17:48 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
17:23:10 <esowiki> [[Qwote]] https://esolangs.org/w/index.php?diff=59000&oldid=58969 * Areallycoolusername * (+365)
17:39:02 -!- kritixilithos has joined.
17:59:27 -!- S_Gautam has joined.
18:06:02 -!- imode has quit (Ping timeout: 250 seconds).
18:12:34 -!- oerjan has joined.
18:16:28 <oerjan> @messages-told
18:16:28 <lambdabot> ais523 said 1d 1h 30m 13s ago: simpler construction (untested but feels like it should work): instead of one fallback counter per waterclock, have two global fallback counters that zero each other
18:16:28 <lambdabot> and decrement every waterclock, then use [<] as the inner loop rather than doing something mod-number-of-counters
18:19:05 <oerjan> @tell ais523 So much for not checking IRC until I'd finished the post. As suggested, I think I see how to keep your simpler construction non-negative. Putting the fallback counters and all counter cells at -5, -4, and 0 (mod 20) respectively is enough to allow each fallback to repair stray damage from the shifts of its own decrements without collisions.
18:19:06 <lambdabot> Consider it noted.
18:21:58 <oerjan> @tell ais523 More specifically, a fallback cell can repair itself if it (1) runs often enough (2) is shifted from all other cells by x (mod n) where n>=4 and gcd(x,n)=1. (This ensures no collisions for the repairs.) Taking n=4 and 5 and combining handles two fallbacks.
18:21:59 <lambdabot> Consider it noted.
18:23:19 <oerjan> @tell ais523 The repair distances then become 2x and -2x (mod n), while ordinary distances are x, -x and 0 (mod n).
18:23:19 <lambdabot> Consider it noted.
18:27:29 -!- oerjan has quit (Quit: My work here is done).
18:43:03 -!- imode has joined.
18:57:11 <esowiki> [[Hell69]] N https://esolangs.org/w/index.php?oldid=59001 * Areallycoolusername * (+228) Created page with "Due to technical limitations, the title of this page is incorrect. The actual name is pronounced "Hell to the sixty-ninth power" or just Hell69. This is an esoteric programm..."
19:04:18 -!- Phantom_Hoover has joined.
19:04:19 -!- Phantom_Hoover has quit (Changing host).
19:04:19 -!- Phantom_Hoover has joined.
19:04:57 -!- kritixilithos has quit (Quit: :q).
19:05:01 <Phantom_Hoover> hmm
19:05:14 <Phantom_Hoover> i've tried reading the documentation on this before but it evidently hasn't stuck
19:05:42 <Phantom_Hoover> how do the turing-complete x86 mov instruction things get the instruction pointer to go backwards?
19:11:10 <Phantom_Hoover> like i don't think x86 lets you mov to the IP?
19:11:43 <fizzie> If you mean the "mov is Turing-complete" paper, that one's a cheat, there's a single unconditional "jmp start" at the end.
19:11:46 <fizzie> For the M/o/Vfuscator, it was more complicated; I've forgotten what it did.
19:12:15 <imode> memory mapped instruction pointers are usually cheating but I don't think that's what movfuscator does.
19:12:37 <fizzie> Right -- M/o/Vfuscator uses a mov that causes a fault, plus some setup to make that an infinite loop.
19:12:58 <Phantom_Hoover> i noted that the last instruction in a dump on the github page is mov cs,eax
19:13:01 <fizzie> "While Dolan's paper required a jmp instruction, the M/o/Vfuscator does not - it uses a faulting mov instruction to achieve the infinite execution loop. If you're worried that this is still "jumping", the same effect could be achieved through pages aliased to the same address, wrapping execution around the upper range of memory, ring 0 exception handling, or simply repeating the mov loop indefinitely. A
19:13:06 <imode> didn't it use that fault to re-map memory and just keep shuffling pages back and forth to simulate a loop?
19:13:07 <fizzie> jmp is currently used to dispatch external functions - if this is a problem, avoid using external functions, or compile libraries with the M/o/Vfuscator as well."
19:13:13 <imode> there we go, yeah.
19:13:29 <Phantom_Hoover> does mov to cs cause a fault then
19:13:38 <imode> basically "virtual memory + mov is TC"
19:15:28 <imode> side note: it's possible to encode complete graphs within a hamming graph, yeah? up to a certain size.
19:15:56 <imode> anything past that size and you need to get crafty.
19:16:10 -!- b_jonas has joined.
19:16:20 <fizzie> Phantom_Hoover: Loading an invalid selector definitely would, at least.
19:16:57 <fizzie> Oh, cs? In that case, loading anything does.
19:17:29 <fizzie> "The MOV instruction cannot be used to load the CS register. Attempting to do so results in an invalid opcode exception (#UD). To load the CS register, use the far JMP, CALL, or RET instruction."
19:17:37 <Phantom_Hoover> lol
19:17:43 <fizzie> (Basically, just one more way IP is special.)
19:18:05 <Phantom_Hoover> if you're gonna construct invalid opcodes i think it's a bit much to call it mov
19:18:53 <b_jonas> well, it's no wonder, because calling and returning to special segments have all sorts of extra semantics over the normal jump
19:20:07 -!- FreeFull has joined.
19:20:48 <Phantom_Hoover> does cs even do anything in 32/64 bit mode
19:21:27 <fizzie> Well... it's "documented" under MOV, and the opcode reference just says "MOV Sreg,r/m16". And assemblers assemble it, as you saw. So while it's a reasonable argument to say it's an invalid opcode, it's still pretty mov-y.
19:21:52 <fizzie> CS (and all the other selectors) are pretty relevant in 32-bit protected mode.
19:24:15 -!- AnotherTest has joined.
19:24:21 <b_jonas> do you mean 64-bit protected mode?
19:24:25 -!- FreeFull has quit (Client Quit).
19:24:43 <b_jonas> because it's more relevant in 32-bit protected mode than in 64-bit protected mode
19:24:57 <fizzie> In 64-bit mode, CS (as well as DS, ES and SS) have a hardcoded base of 0, but maybe they had some functionality still left for things other than address calculations? (FS and GS can have a non-zero base, loadable via MSRs, and have OS-specific uses, such as implementing TLS.)
19:26:21 -!- ais523 has joined.
19:28:10 <fizzie> Looks like they do, yes.
19:28:12 <fizzie> "Code segments continue to exist in 64-bit mode even though, for address calculations, the segment base is treated as zero. Some code-segment (CS) descriptor content (the base address and limit fields) is ignored; the remaining fields function normally (except for the readable bit in the type field)."
19:29:17 <Phantom_Hoover> TLS as in the network security protocol?
19:29:24 <fizzie> Thread-local storage.
19:31:48 <fizzie> I guess that makes sense; they've put the bit that makes it possible to run 32-bit code while in IA-32e (aka "long") mode into the CS descriptor.
19:31:59 <fizzie> For further details, consult the "Code Segment Descriptor in 64-bit Mode" chapter of Volume 3.
19:35:49 <b_jonas> fizzie: the bit that distinguishes 16-bit and 32-bit protected mode code is still in the code segment descriptor for example.
19:36:50 <fizzie> Yes, and the privilege bits as well.
19:38:15 <b_jonas> and I think the cpu still allows you to use the legacy 386 method for a call to the operating system through a gate, but only very old 32-bit programs use that, because fast system calls and new fast fast system calls were both introduced before 64-bit mode
19:39:05 -!- FreeFull has joined.
19:41:54 <fizzie> TBH, I'm not sure how much "less of a cheat" the mov fault is compared to the unconditional jmp, since the "host" code needs a `call sigaction` instruction anyway... although OTOH, there'd be non-"mov" code running anyway to load the program to memory, so that's kind of unavoidable when running under an operating system.
19:42:20 <fizzie> It's pretty funky, though -- it uses the "master_loop" label (the start of the movfuscated program) as the signal handler, which just never returns; it sets the SA_NODEFER flag so that the "signal handler" can be interrupted by the signal it's handling.
19:44:17 <fizzie> (I wonder if that consumes some stack per iteration, though. Presumably that state must go somewhere?)
19:44:51 <ais523> can you mov to SP?
19:45:55 <fizzie> Yes? I mean, that's part of the standard function epilogue when using ebp as a frame pointer?
19:46:53 <ais523> that's how you get rid of the stack that's consumed every iteration
19:47:43 <fizzie> Oh, right.
19:48:00 <FreeFull> fizzie: I expect the kernel would push some stuff to the stack before calling the signal handler. Not sure though
19:48:15 <FreeFull> Ah
19:49:00 <fizzie> Looks like that's in fact what it does, when using the "mov loop" as it calls it.
19:58:28 <b_jonas> fizzie: no, the MOV proof actually uses some crazy properties of x86 so that even for the fault handler it invokes and in system mode, it never runs any instruction other than MOV. the cpu only executes MOV, as well as generic fault-handling code that isn't specifically part of any named or directly callable instruction
19:58:43 <b_jonas> it's quite esoteric, you wouldn't believe it until you read the article
19:59:19 <b_jonas> and yes, the setup requires instructions other than MOV
19:59:28 <b_jonas> but after that, it's turing-complete
20:01:11 <b_jonas> and the whole thing requires a custom "operating system", one with very unusual settings that you wouldn't normally use, and that probably isn't convenient if you want to run ordinary programs
20:01:31 <b_jonas> it might not be able to run anything else
20:02:00 <b_jonas> the whole concept seems preposterous and impossible a priori, really
20:02:12 <b_jonas> normally you need an IRET to go back from system code to user code
20:02:53 <b_jonas> or one of these fancy modern fast system call or fast fast system call instructions
20:03:03 <ais523> what sort of system calls can movfuscator manage? none of them (i.e. pure computation only)?
20:03:31 <b_jonas> ais523: I think it's pure computation
20:03:43 <b_jonas> it only promises Turing-completness, not IO-completeness
20:04:00 <b_jonas> though I think it can write to or read from an IO device in a busy loop if it wants to
20:04:08 <b_jonas> as long as it's memory-mapped
20:04:26 <b_jonas> so it may be able to do some IO, like writing on the screen
20:14:38 <arseniiv> this thing: https://en.wikipedia.org/wiki/Baumslag%E2%80%93Solitar_group makes me feel like ordinals somehow
20:15:00 <arseniiv> like some beautiful monstrosity
20:17:33 <arseniiv> or more like monstrous beauty
20:18:42 <b_jonas> `bobadventureslist http://bobadventures.comicgenesis.com/
20:18:43 <HackEso> bobadventureslist http://bobadventures.comicgenesis.com/: b_jonas
20:18:54 <b_jonas> I saw that in the morning, but forgot to list it
20:19:02 <fizzie> b_jonas: That's not what the Dolan 2013 paper does, nor is it what https://github.com/xoreaxeaxeax/movfuscator does. The former uses a jmp, the latter runs under a Unix-like operating system and uses the SIGILL signal handler to loop, which definitely involves non-mov code. But I do remember there was something else that was closer to what you described.
20:19:50 <fizzie> (I just can't seem to be able to place it now, and it's not even linked from https://esolangs.org/wiki/Mov -- wasn't it someone here that did it better?)
20:20:05 <b_jonas> fizzie: yeah, it's probably another article, not the movfuscator
20:20:51 <b_jonas> also, for those who missed the news, there's a new IOCCC contest, with submission deadline in 2019-03
20:21:23 <fizzie> Sort of related, there was the https://github.com/jbangert/trapcc thing, which does computation without executing any actual instructions, just as part of the fault handling.
20:22:20 <ais523> fizzie: that technically also follows movfuscator rules :-)
20:30:10 -!- imode has quit (Ping timeout: 246 seconds).
20:39:25 <Taneb> b_jonas: thanks for the heads up
20:40:02 <b_jonas> also, I'll have to look at this experimental "shelving" and "checkpointing" thing that subversion (apache svn) does to work around the problem that they're not a distributed vcs, and let you do something as a substitute of local commits not pushed to the server
20:40:14 <b_jonas> not the same as a true dvcs, but still have to read how it works
20:41:06 <b_jonas> it's been released for months now, but I haven't looked at the details
20:41:19 <b_jonas> this is about subversion 1.11 for the record
20:41:36 <b_jonas> http://subversion.apache.org/docs/release-notes/1.11
20:46:52 -!- imode has joined.
20:53:23 -!- imode has quit (Ping timeout: 245 seconds).
21:04:01 -!- imode has joined.
21:15:17 <b_jonas> drat, I think they're trying to do something like git stashes, but without git, which is somewhat of a bad idea
21:16:30 <b_jonas> I think that's why I shelved the whole idea as useless and decided to wait the first time it came out
21:20:39 -!- AnotherTest has quit (Ping timeout: 252 seconds).
21:35:30 <arseniiv> I feel now I comprehend a new wisdom: strongly avoid design by comittee whenever possible
21:35:44 <arseniiv> it makes things overlong
21:44:05 -!- imode has quit (Read error: Connection reset by peer).
21:45:15 -!- imode has joined.
21:50:18 -!- newbie has joined.
22:33:24 -!- imode has quit (Ping timeout: 250 seconds).
22:33:41 <ais523> committees are good at catching mistakes but bad at suggesting fixes to them
22:35:19 <b_jonas> which is why instead we use a bug report ticket system, with the developers free to ignore most of the flood of nonsense tickets they get, and the reporters need to take a BIT more care to make real bug reports not look like the ordinary flood of nonsense if they want the bug to get fixed
22:36:20 <b_jonas> I know that after my first report of the sqlite3 floating point to integer comparison bug got almost ignored. it's lucky that I got a reply to it that clued me into what the mistake was. it looked like the tons of clueless reports from people who don't understand how floating-point arithmetic and formatting works.
22:36:47 <b_jonas> it's my most useful bug report ever, and I have to make a proper short writeup about it and put it on my CV
22:37:46 <b_jonas> it's even plausibly deniable that I found it by looking at the source code. it's definitely a bug one could have found by blackbox testing.
22:38:47 <esowiki> [[Bitch]] M https://esolangs.org/w/index.php?diff=59002&oldid=58981 * Helen * (+0) Fixed hello world exampl
22:41:44 <ais523> b_jonas: do you have a link to the report?
22:42:28 <esowiki> [[Bitch]] M https://esolangs.org/w/index.php?diff=59003&oldid=59002 * Helen * (+2) Fixed hello world example*
22:43:41 -!- ais523 has quit (Quit: sorry for my connection).
22:44:02 -!- ais523 has joined.
22:44:26 <b_jonas> ais523: Incorrect comparison between integer and floating-point number in SQLite database engine, leading to index corruption https://www.mail-archive.com/sqlite-users@mailinglists.sqlite.org/msg92963.html https://www.sqlite.org/src/tktview?name=38a97a87a6
22:44:34 <ais523> thanks
22:45:13 <b_jonas> then there's a second one about an incorrect fix to that bug, but that's less interesting
22:46:24 <esowiki> [[Bitch]] M https://esolangs.org/w/index.php?diff=59004&oldid=59003 * Helen * (+149) Added a link to an alternate implementation at TIO & GitHub
22:49:03 <ais523> b_jonas: that's clearly a bug from the report, inserting a float between two ints left the ints out of order
22:50:55 <b_jonas> ais523: of course.
22:51:22 <b_jonas> but I think it doesn't really help a bug report if it starts by claiming that it's a definite bug, because all the nonsense bug reports also do that
22:51:49 <b_jonas> in fact it seems like a slightly better strategy to ask whether it's a bug, and explain the problem clearly in a way they can tell whether it's a bug
22:51:57 <ais523> I guss you want to title it something like "reproducible pragma integrity_check failure"
22:52:12 <ais523> and then give the reproduction, without mentioning ints and floats
22:53:04 <b_jonas> yes, but I have to be careful with "reproducible", lest someone tries it with an msvc compiler or slightly different feature flags, and fails to reproduce it
22:54:02 <b_jonas> only one of the six permutations of the inserts work, which one depends on the compilation flags and stuff like that, and on msvc there was no bug at all (except for the short time when the incorrect fix was committed, but that never went to release)
22:54:32 <b_jonas> the body does say that it's reproducible though
22:55:27 <b_jonas> and it's not even too much of a lie, the index corruption explains why a non-transitive comparison is actually a serious bug in sqlite
22:55:51 <b_jonas> and yes, in this mail, I didn't mention the ints and floats
22:56:16 <b_jonas> the two sqlite devs can run a debugger just fine and localize the problem
22:56:37 <b_jonas> or look at the internal representation of the index
22:57:26 <b_jonas> or look at the query plan and see that the first query is iterating on the index in order
22:57:36 <b_jonas> yet somehow manages to print the rows in the wrong order
22:57:45 <b_jonas> in any case, they'll find the error
22:58:14 <b_jonas> obviously it's easy to say this in retrospect, when they have found the error and fixed it
22:58:31 <b_jonas> oh I see
22:59:07 <b_jonas> ais523: the non-obvious part is that the ticket at https://www.sqlite.org/src/tktview?name=38a97a87a6 wasn't filed by me. sqlite is developed in a closed way, only the dev team files bug reports. my mail doesn't mention the ints and floats
22:59:39 <ais523> right, I was wondering why you weren't credited
23:00:11 <ais523> there's a change I made to C-INTERCAL recently that hasn't been posted in the repo because the lack-of-feature reporter didn't get back to me about how they wanted me to credit them for the idea
23:01:50 <b_jonas> ais523: yeah, that would have made my job easier. this way I'll have to write a summary instead of having a single convenient bug ticket link that links to my email. many of their bug tickets do link to the email where it was reported.
23:02:48 <ais523> write one of those blogposts that gets posted to Reddit and everyone ignores
23:02:53 <b_jonas> I think they did link back to my mail from the ticket for a silly parsing bug
23:03:03 <ais523> report, ticket, an explanation of what caused it, an explanation of how the fix works
23:03:35 <b_jonas> ais523: no, I'll just write a simple HTML page with an explanation, perhaps with a lesson spinned about how you should be careful in perl about sort { $a<=>$b } even if none of your data are NaNs
23:03:55 <ais523> b_jonas: how does that break with non-NaNs?
23:04:01 <b_jonas> same comparison bug
23:04:26 <ais523> oh, if you mix ints and floats
23:04:30 <b_jonas> perl easily automatically numifies strings in a way that you get integers and floats mixed from the same perl code for different inputs
23:04:34 <b_jonas> that, yes
23:04:34 <zzo38> I think SQLite converts any NaN value into null, as far as I can tell, anyways
23:04:57 <b_jonas> zzo38: yes, or at least close to always (I'm not sure if there's any way to get a NaN without breaking some requirement)
23:05:47 <b_jonas> ais523: I mean this is why it's specifically much more relevant to perl than to, say, C or python or ruby
23:06:03 <b_jonas> despite that my first bug report was ignored by claiming that C also compares ints to floats the buggy way
23:06:39 <b_jonas> which is true, but in C you have to be specifically working hard to get the bug because you have to explicitly make a mixed container of ints and floats, and then compare them without casting them to the same type
23:07:09 <b_jonas> which isn't something you can write without either explicitly writing three or four different comparisons for different types, or hiding it behind something even more complicated
23:07:41 <b_jonas> whereas in perl or sqlite, both of which offers you to numify strings easily to int or float depending on the string value, you get the bug easily without trying
23:08:36 <b_jonas> even in ruby or python you have to work at least a little, like creating the int and float values in different places of the code, though after that the non-homogeneous container and mixed comparison is no longer strange
23:08:51 <b_jonas> mind you, I think some of python and ruby actually compare ints to floats the correct way
23:08:54 -!- Soni has quit (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.).
23:09:56 <b_jonas> which isn't too surprising given that both python3 and ruby transparently upgrades ints to bigints on an int arithmetic overflow
23:11:57 <b_jonas> but in sqlite3 it's even worse than in perl, because sqlite3 has automatic indexes that get corrupted from thi
23:13:17 <b_jonas> in perl, the p5p will always blame YOUR code forever without fixing the bug, and in fact it's quite possible that fixing the bug in perl _now_ will break some existing code that relies on the float-int comparison having that exact semantics
23:13:23 <b_jonas> so it's not clear what perl should even do about it
23:13:54 <ais523> I don't think it's fixable without specialcasing <=> inside sort
23:14:29 <ais523> <=> between float and int is not transitive in much the same way that + on floats is not commutative
23:15:12 <b_jonas> ais523: the problem is that sometimes you may want the correct comparison even outside of a sort
23:15:22 <b_jonas> it's not really specific to sort
23:16:05 <ais523> but <=> already returns the correct results, for floating-point values of correct
23:16:33 -!- imode has joined.
23:17:10 <b_jonas> depending on what you mean by correct
23:17:24 <b_jonas> if you mix ints and floats, then I think it doesn't return the correct results,
23:17:38 <b_jonas> and if it returned the correct results from the early days of perl, that would have been better
23:17:42 <ais523> you mean it should return numerically correct results rather than converting either argument?
23:17:46 <ais523> that seems inefficient
23:18:11 <b_jonas> yes, and it's not too inefficient given all the things perl do, it's only a few arithmetic operations that the cpu can do well
23:18:24 <b_jonas> it's true that it's hard to write the code for that correctly, and hard to test that it's correct
23:18:40 <b_jonas> but when done right, it isn't actually too inefficient as arithmetic in perl goes
23:18:46 <b_jonas> with all the SVs around
23:23:42 -!- Soni has joined.
23:37:16 -!- Phantom_Hoover has quit (Remote host closed the connection).
23:51:35 -!- ais523 has quit (Quit: quit).
←2019-01-06 2019-01-07 2019-01-08→ ↑2019 ↑all