00:01:50 <b_jonas> The missing letters make it look like it was optimized for those old typewriters that were missing the letters "í ú ű". You don't see documents typed with that sort of typewriter anymore, so if there are accented letters missing, it's not that set, but it used to be more frequent in old documents.
00:02:36 <b_jonas> http://math.bme.hu/~ambrus/pu/versw has the full poem
00:03:22 <tswett[m]> Instead of having to write "29 DB B8 10 01 8E D8 B8 00 B8 8E C0 29 C0 E4 60 D7 B4 07 AB B0 20 E6 20 CF", I want to, at the very least, be able to write "sub bx bx mov ax 0110 mov ds ax mov ax b800 mov es ax sub ax ax in al 60 xlat mov ah 07 stosw mov al 20 out 20 al iret".
00:04:25 <b_jonas> tswett[m]: that can be hard, because x86 has a rather tricky complex instruction set, and a stupid assembly syntax that doesn't really correspond well to what's encoded
00:05:20 <b_jonas> so you might want to use a nonstandard assembly syntax to make it a bit easier
00:05:20 <tswett[m]> "Fortunately", I'm only using an 8088 processor.
00:05:30 <b_jonas> yeah, but even that subset
00:06:54 <b_jonas> in fact the later additions tend to be somewhat more regular
00:23:55 <tswett[m]> Man, it'd be awfully nice if the 8088 gave you a separate call stack and data stack.
00:24:05 <tswett[m]> Forth pretty much assumes that you've got that.
00:26:15 <b_jonas> tswett[m]: use the BP register to mark the separate data stack, and access that with the usual instructions and convenient addressing modes, without PUSH or POP, while you use the normal stack marked by SP for the call stack
00:27:08 <tswett[m]> I was thinking I'd use the data segment for the data stack.
00:27:46 <tswett[m]> Then use SI and DI (both at once) to indicate the top of the data stack.
00:28:37 <b_jonas> if you want a single data segment, then I think it's best to have the forth data stack in it
00:29:06 <b_jonas> what? why SI _and_ DI (both at once)?
00:29:55 <b_jonas> I could imagine just using SI or DI, but why both?
00:30:03 <tswett[m]> Yeah, come to think of it, there's probably no good reason to do that.
00:30:13 <tswett[m]> Let me see, why did I come up with that idea in the first place.
00:30:26 <b_jonas> using just one of them to indicate the top of the data stack can work
00:30:41 <tswett[m]> It's so that you can use either a string read instruction or a string write instruction without having to adjust SI or DI first.
00:30:54 <tswett[m]> But then again, you'll have to adjust either SI or DI *afterwards* instead.
00:30:59 <b_jonas> also, some forth interpreters store the top word of the stack in a register, not on the actual memory stack, I think that's usually worth
00:31:28 <tswett[m]> So I think I'll just use DI and then copy it into SI if needed.
00:31:39 <b_jonas> I don't think the string instructions help you much
00:31:57 -!- xkapastel has quit (Quit: Connection closed for inactivity).
00:32:12 <tswett[m]> Well, I'm using STOSW somewhere. :D
00:33:31 <tswett[m]> Nyow, this one Forth tutorial-thingamo I'm looking at implements the DUP word like this:
00:34:24 <tswett[m]> It's pushing, with a "push" instruction, and then immediately returning. So apparently "push" uses one stack and "ret" uses another stack.
00:35:00 <b_jonas> tswett[m]: are you sure you're disassembling it correctly? is it possible that the push has a segment override?
00:35:13 <b_jonas> no wait, that's stupid, push can't do that
00:35:33 <b_jonas> or can it? I don't recall how x86_16 and x86_32 works
00:36:03 <b_jonas> I think the segment override applies only to the operand of the push
00:36:04 <tswett[m]> I'm not disassembling anything; it contains literally that assembly code.
00:36:30 <tswett[m]> Yeah, wait, *can* push have a segment override? That wouldn't make sense, you'd need to override the stack pointer register too.
00:36:55 <b_jonas> maybe that's not the part of the code that duplicates the value on the stack?
00:37:03 <b_jonas> but it does some other bookkeeping?
00:40:24 <tswett[m]> It definitely says that this is the implementation of the DUP word.
00:43:58 -!- iconmaster_ has quit (Ping timeout: 276 seconds).
00:44:33 -!- iconmaster has joined.
00:45:15 -!- doesthiswork has joined.
00:49:54 <tswett[m]> You know, I like the idea of the implementation of a Forth word being *just* some machine code.
00:50:30 <tswett[m]> Like, if there's a Forth word corresponding to the XLAT instruction, then the body of that Forth word is just a single byte: d7
00:51:34 <b_jonas> sure, you can compile forth if you want
00:51:36 -!- b_jonas has quit (Quit: leaving).
00:52:07 <kmc> what does XLAT do again?
00:54:07 <int-e> that was a weird one, something like mov al, [bx+al]
00:54:56 <int-e> and I forgot whether al is signed or unsigned here.
00:55:06 <int-e> in *wrong* pseudo-C if bx+al overflows.
00:55:18 <int-e> (al is /probably/ unsigned)
00:55:46 <tswett[m]> "XLAT (translate) replaces a byte in the AL register with a byte from a 256-byte, user-coded translation table. Register BX is assumed to point to the beginning of the table. "
00:58:04 <int-e> The one with a signed offset was the bit test with a memory target, bt r/m*, r*
01:01:08 <int-e> and apparently bt can still do that when used with a memory operand. this is somewhat crazy.
01:02:53 <int-e> Uhm. Or maybe not. Let me check elsewhere...
01:16:57 <int-e> Okay, AMD describes this far more clearly than Intel does, and indeed bit offsets outside of the designated memory operand are supported (meaning the address of the memory operand is not the final memory address being accessed.)
01:25:37 -!- FreeFull has quit.
01:34:09 <kmc> shachaf: https://i.imgur.com/1LxEakY.jpg https://i.imgur.com/IpTZR7P.jpg
02:00:00 <esowiki> [[Sidex]] N https://esolangs.org/w/index.php?oldid=64645 * A * (+4550) Add Sidex
02:00:31 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=64646&oldid=64611 * A * (+12) /* S */
02:10:36 <esowiki> [[Timeline of golfing languages]] N https://esolangs.org/w/index.php?oldid=64647 * A * (+856) Stub timeline page
02:10:54 <esowiki> [[Timeline of golfing languages]] M https://esolangs.org/w/index.php?diff=64648&oldid=64647 * A * (+0) Oops
02:12:56 <kmc> shachaf: it is a cat that is sometimes seen in our yard
02:14:23 <esowiki> [[Timeline of golfing languages]] M https://esolangs.org/w/index.php?diff=64649&oldid=64648 * A * (+397)
02:14:49 <esowiki> [[Timeline of golfing languages]] M https://esolangs.org/w/index.php?diff=64650&oldid=64649 * A * (+64) /* Since 2015 */
02:14:57 <kmc> so i suppose yes
02:15:17 <int-e> "Everyone who uses a computer frequently has had, from time to time, a mad desire to attack the precocious abacus with an axe."
02:20:04 <esowiki> [[Timeline of golfing languages]] https://esolangs.org/w/index.php?diff=64651&oldid=64650 * A * (+176) /* 2015 */
02:20:34 <esowiki> [[Timeline of golfing languages]] https://esolangs.org/w/index.php?diff=64652&oldid=64651 * A * (+99) /* See also */
02:22:36 <int-e> This was written around 1970 by a rocket scientist :)
02:24:28 <esowiki> [[Nop]] https://esolangs.org/w/index.php?diff=64653&oldid=56953 * A * (+234)
02:24:30 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=64654&oldid=64644 * A * (-94)
02:24:30 <int-e> http://library.sciencemadness.org/library/books/ignition.pdf page 97 (113 of the pdf)
02:26:18 <esowiki> [[Hey stack!]] N https://esolangs.org/w/index.php?oldid=64655 * A * (+2850) Created page with "[[Hey stack!]] is a 4th-generation language where you have to declare everything before you use these things. It is a meta-language that can be used to describe anything physi..."
02:26:38 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64656&oldid=64654 * A * (-2778) /* Hey stack! */
02:28:47 <esowiki> [[Char]] M https://esolangs.org/w/index.php?diff=64657&oldid=64532 * A * (-1176) Fix bugs in ARCUN's edits
02:29:22 <esowiki> [[Char]] M https://esolangs.org/w/index.php?diff=64658&oldid=64657 * A * (+68) and +CAT
02:30:56 <esowiki> [[Esolang talk:Categorization]] M https://esolangs.org/w/index.php?diff=64659&oldid=64589 * A * (+236) /* Proposed Categories: Arch-based and Bootstrapped */
02:31:47 <esowiki> [[An arch is simply a curve.]] N https://esolangs.org/w/index.php?oldid=64660 * A * (+1577) Created page with "'''An arch is simply a curve.''' is a self-modifying [[Arch]]-based language where the program itself is an arch. All commands are synonyms of different definitions of the wor..."
02:32:11 <esowiki> [[Arch]] M https://esolangs.org/w/index.php?diff=64661&oldid=64564 * A * (-36) /* Languages */ No xlinks anymore
02:32:28 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64662&oldid=64656 * A * (-1756) /* An arch is simply a curve. */ Tidy up user talk page
02:32:28 <tswett[m]> Pondering whether or not I want to do jumps using POP CS...
02:32:56 <tswett[m]> It's a great idea as long as all of my subroutines start at the same offset into the code segment. :D
02:34:21 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64663&oldid=64662 * A * (+101) /* Collaboration Request */
02:35:00 <int-e> what processor are you targeting?
02:36:29 <int-e> (for all I know, pop cs only ever worked on 8088 and 8086 processors)
02:38:43 <tswett[m]> I wonder if I can use the ES: prefix to make the mod-reg-r/m byte refer to the extra segment instead of the data segment.
02:40:01 <int-e> I mean, that's what the prefix is for.
02:41:48 <esowiki> [[Sidex]] M https://esolangs.org/w/index.php?diff=64664&oldid=64645 * A * (-77)
02:42:10 <shachaf> Should I prefer instruction destination in the first or last position for x86?
02:43:14 <int-e> It's much more entertaining if you have an opinion on that. It doesn't matter which.
02:44:06 <shachaf> I probably want to write an assembler so I should decide on one.
02:44:16 <tswett[m]> The emulator's built-in debugger puts destination first, so that. :D
02:44:16 <shachaf> For three-operand instructions it should obviously be in the middle.
02:44:19 <tswett[m]> As does this random web page. http://pastraiser.com/cpu/i8088/i8088_opcodes.html
02:44:35 <shachaf> I'm used to reading AT&T-style syntax.
02:44:58 <esowiki> [[Sidex]] M https://esolangs.org/w/index.php?diff=64665&oldid=64664 * A * (-396) No named threads, it is off-topic
02:45:06 <int-e> tswett[m]: yes it does
02:47:25 <tswett[m]> I'm starting to think that POP CS is actually a great idea.
02:47:53 <tswett[m]> Just put POP CS right before the first opcode of every subroutine, in the same place.
02:48:10 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64666&oldid=64663 * A * (+41) /* Collaboration Request */
02:48:18 <tswett[m]> Whenever you want to goto another subroutine, you push the new CS and then jump to your POP CS.
02:49:23 <int-e> Well Intel got away with reappropriating that opcode as a prefix for other instructions... so I guess few people thought that way.
02:54:14 <tswett[m]> I think x86 is famously hard to virtualize or whatever.
02:54:46 <tswett[m]> I sorta want to create an "eso-architecture" with the sole goal of being as good at virtualization as possible.
02:55:18 <tswett[m]> I... don't quite know what that would look like.
02:56:26 <tswett[m]> No memory, no registers, no source code. Execution consists of an infinite loop that does nothing.
02:56:38 <tswett[m]> Virtualization is easy because there's only one program.
02:56:41 <int-e> I'm afraid that there's a reason why processors get dedicated virtualization support, especially since "virtualization" nowadays usually implies an extra level of memory management, rather than plain emulation.
02:57:09 <tswett[m]> Not only is it easy to simulate any program, but every program is an accurate simulation of every other program.
02:58:05 <int-e> And we can implement it readily in a grain of sand.
02:58:32 <tswett[m]> I guess that my esoarchitecture would allow you to add layers of "if you would access this memory segment, instead go run this other thing".
02:58:37 <tswett[m]> And, of course, it would not allow you to remove them.
02:58:51 <tswett[m]> But they'd be removed implicitly... or whatever... whenever they're actually invoked.
02:59:29 <tswett[m]> Sudden realization that I don't know what a trap is and how it differs from an interrupt.
02:59:52 <tswett[m]> ("Well," you say, "they're called 'instants' now, and most traps are instants, but I guess a trap could also be an activated ability.")
03:02:47 <int-e> Interrupts are external events; traps are triggered in software. (But obviously this is not 100% consistent... see the 'int' instruction on x86)
03:06:57 <kmc> virtualization shouldn't be anywhere near as difficult as it is on x86 :(
03:08:09 <kmc> > Intel x86 defines two overlapping categories, vectored events (interrupts vs exceptions), and exception classes (faults vs traps vs aborts).
03:08:11 <lambdabot> <hint>:1:45: error: parse error on input ‘,’
03:08:58 <kmc> > traps increment the instruction pointer, faults do not, and aborts 'explode'.
03:09:01 <lambdabot> <hint>:1:40: error: parse error on input ‘,’
03:09:34 <int-e> O I didn't know that there are two forms of hydrogen (H2 molecules).
03:10:23 <int-e> https://en.wikipedia.org/wiki/Spin_isomers_of_hydrogen
03:15:41 <esowiki> [[Talk:Kepler]] M https://esolangs.org/w/index.php?diff=64667&oldid=64590 * A * (+49)
03:18:54 <int-e> (The amazing thing is that this matters---a lot---when liquefying hydrogen, because the state change from the ortho to the para variant releases more energy that is required for evaporation.)
03:22:46 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64668&oldid=64666 * A * (-1) /* Resource Starvation */ typo
03:26:17 <int-e> I also didn't know that nuclear rocket propulsion is not dead. https://en.wikipedia.org/wiki/TEM_(nuclear_propulsion) and "In 2019, the US Congress passed a bill to add a line item to the budget to direct NASA to expend US$100 million to re-initiate development of a nuclear thermal rocket propulsion system, with an aspirational goal of a test flight no earlier than 2024." (from...
03:26:23 <int-e> ...https://en.wikipedia.org/wiki/Nuclear_thermal_rocket )
03:29:33 <kmc> int-e: neat.
03:29:46 <kmc> now cathy's trying to explain to me about electron spin isomers of oxygen
03:29:57 <kmc> (singlet and triplet oxygen)
03:30:21 <kmc> i have only the most rudimentary understanding of molecular orbitals so this is proving difficult
03:35:00 <int-e> tbh I have not really tried to understand this beyond the picture on the wikipedia page.
03:35:45 <int-e> (the thing to understand would be why the spins are restricted to those two configurations)
03:36:15 <kmc> cathy = kmc's wife
03:36:22 <kmc> who studied physical chemistry back in the day
03:41:47 <tswett[m]> It just occurred to me that a potentially convenient way to do a far jump is to just push a code segment and instruction pointer and then do a far return.
03:42:04 <tswett[m]> Only problem is that you can't do a call that way.
03:42:24 <tswett[m]> There's no "pop the code segment and instruction pointer, and push the old code segment and instruction pointer" instruction.
03:42:57 <tswett[m]> That would be kind of an interesting instruction, actually.
03:43:21 <pikhq> Chemistry is weirc.
03:43:34 <pikhq> Also I cannot spell anymore apparently.
03:58:15 -!- adu has quit (Read error: Connection reset by peer).
03:59:14 -!- adu has joined.
04:06:02 <int-e> tswett[m]: so push stuff first... which you can, assuming you know where you are (no position-independent code)
04:06:07 -!- Cale has quit (Ping timeout: 276 seconds).
04:06:13 <int-e> "stuff" being the return address.
04:08:18 <int-e> tswett[m]: you're on the brink of rediscovering return-oriented programming :)
04:10:09 <tswett[m]> Come to think of it, "pop the stack into the instruction pointer and push the old instruction pointer" sounds a lot like a form of call-with-current-continuation.
04:11:02 <tswett[m]> Also, it's pretty rude if the top of the stack is your caller.
04:11:14 <tswett[m]> Because now your caller will return back to you instead of to its caller.
04:12:54 <tswett[m]> Come to think of it, maybe *all* subroutine calls are a form of call-with-current-continuation; it's just that the "current continuation" is given in the form of the stack pointer, and the subroutine is expected to return to it.
04:24:57 -!- Cale has joined.
04:28:10 <shachaf> fun c++ fact: std::tuple is implemented with recursive inheritance rather than just a thing that contains elements as fields
04:28:34 <shachaf> this is apparently because if you inherit from an empty base class, it can be elided, unlike a struct field?
04:46:57 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64669&oldid=64668 * A * (+290) /* Concurrency problems and solutions */
04:47:14 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64670&oldid=64669 * A * (+26) /* Deadlocking */
04:55:07 -!- doesthiswork has quit (Ping timeout: 246 seconds).
04:55:15 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64671&oldid=64670 * A * (+422) /* Concurrency problems and solutions */ Some solutions
04:58:22 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=64672&oldid=64671 * A * (+184) /* Race conditions */
04:59:07 <esowiki> [[Sidex]] M https://esolangs.org/w/index.php?diff=64673&oldid=64665 * A * (+30)
05:00:12 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64674&oldid=64672 * A * (-340) /* Sidex solutions (check if this is okay) */
05:03:31 <esowiki> [[User talk:A]] M https://esolangs.org/w/index.php?diff=64675&oldid=64674 * A * (+178) /* Deadlocking */
05:34:51 -!- iconmaster_ has joined.
05:39:03 -!- iconmaster has quit (Ping timeout: 264 seconds).
05:39:52 -!- iconmaster__ has joined.
05:44:16 -!- iconmaster_ has quit (Ping timeout: 276 seconds).
05:44:55 -!- iconmaster__ has quit (Ping timeout: 276 seconds).
05:45:40 -!- iconmaster has joined.
06:09:21 -!- Sgeo has quit (Read error: Connection reset by peer).
06:09:47 -!- Sgeo has joined.
06:13:01 -!- iconmaster_ has joined.
06:17:27 -!- iconmaster has quit (Ping timeout: 264 seconds).
07:52:00 -!- AnotherTest has joined.
07:52:33 -!- Lord_of_Life has quit (Ping timeout: 268 seconds).
07:55:03 -!- Lord_of_Life has joined.
07:58:36 <esowiki> [[Seabass]] https://esolangs.org/w/index.php?diff=64676&oldid=64641 * Sec-iiiso * (+1) /* Truth-machine */
08:08:49 -!- cpressey has joined.
08:22:26 -!- GeekDude has quit (Ping timeout: 248 seconds).
08:31:24 -!- GeekDude has joined.
08:36:10 -!- Phantom_Hoover has joined.
08:43:49 -!- arseniiv has joined.
08:53:25 -!- iconmaster_ has quit (Ping timeout: 276 seconds).
08:56:41 -!- iconmaster has joined.
09:59:05 -!- wob_jonas has joined.
09:59:29 <wob_jonas> `bobadventureslist http://bobadventures.smackjeeves.com/comics/2829040/20190722/
09:59:31 <HackEso> bobadventureslist http://bobadventures.smackjeeves.com/comics/2829040/20190722/: b_jonas
10:08:07 -!- xylochoron[m] has quit (Ping timeout: 252 seconds).
10:08:29 -!- wmww has quit (Ping timeout: 250 seconds).
10:08:30 -!- tswett[m] has quit (Ping timeout: 250 seconds).
10:08:37 -!- ivzem[m] has quit (Ping timeout: 265 seconds).
10:41:09 <wob_jonas> I thought of a certain esoteric language idea. You know how in some real programming languages, there are very few reserved tokens, you can shadow any builtin or keyword with a name of your own as long as you don't mind not being able to use that keyword within the scope. The examples I know of are metafont and scheme.
10:42:09 <wob_jonas> This, of course, is not necessarily good design, because it can lead to somewhat inflexible syntax, as well as the language having to accept some mistakes silently.
10:42:52 <wob_jonas> And I was thinking of a modified variant of C that does this mildly so just the alphanumeric words can all be shadowed, while the punctuation can still remain reserved.
10:45:56 <wob_jonas> There's a few syntax changes you need, about restricting the sillier compound typenames like "int short unsigned" to a more canonical set, or replacing them with a single word for each type if you prefer that, plus a rule that you can no longer omit the name of a parameter in the heading a function definition.
10:45:59 <wob_jonas> Also excluding most pre-ANSI stuff like the implicit int and the no-prototype function definitions.
10:47:31 -!- wmww has joined.
10:48:06 <wob_jonas> Of course this is easier when you design your language syntax in first place to allow this, like in scheme or metafont, but that wouldn't make the language esoteric.
10:48:14 <wob_jonas> C's odd syntax makes this interesting.
10:55:09 <cpressey> I wonder, you might need to use a general parsing algorithm like CYK to parse declarations, if you do that.
10:55:48 <cpressey> int long; long int struct; long long int volatile;
10:56:35 <wob_jonas> cpressey: no, it's worse than that, it gets actually ambiguous. that's why Im' saying that I don't accept such typenames in this variant.
10:57:28 <cpressey> right, sorry; I guess I meant, CYK plus some disambiguating rule in case it gets multiple parses.
10:58:54 <wob_jonas> I only accept "char", "unsigned char", "signed char", "short int", "unsigned short int", "signed short int", "int", "unsigned int", "signed int", "long int", "unsigned long int", "signed long int", "long long int", "unsigned long long int", "signed long int", "float", "double", "long double" and nothing else; not "long" or "unsigned" etc
11:00:31 <wob_jonas> that way I can tell that "long int f(size_t);" declares a function "f" whose argument is of type "size_t", but "long int (size_t);" declares a variable of type long int whose name is "size_t" etc.
11:01:31 <wob_jonas> There's some ambiguities remaining, but they're benign: as a type name "int (*)(void *const)" is a function type whose argument is either a const pointer or a non-const pointer named "const", but when just naming a type (as opposed to defining a function) that doesn't matter
11:02:14 <wob_jonas> if we allowed "long" as a type name, then "long int (size_t);" could be parsed as declaring a function named "int", ambiguous with declaring a variable named "size_t", which is why I forbid that
11:02:53 <wob_jonas> I also have to say that the storage class keywords ("auto", "static", "extern", "inline") have to be written before the type
11:05:09 <wob_jonas> but most people already write the storage class keywords before the type, and most people always name the dummy arguments in a function definition, so the most visible change is the one about "unsigned" and "long", but even there there are styles that give one-word typedefs to each builtin type
11:05:33 <wob_jonas> so I think the resulting language wouldn't look too alien to people who know C
11:06:29 <wob_jonas> there might be other ambiguities that I haven't considered, in particular I'll have to look up how and where struct definitions are allowed in C, because C is weird that way
11:08:19 -!- xylochoron[m] has joined.
11:08:19 -!- tswett[m] has joined.
11:08:26 -!- ivzem[m] has joined.
11:30:53 -!- ivzem[m] has quit (*.net *.split).
11:37:05 -!- ivzem[m] has joined.
11:43:36 <cpressey> Wow, apparently in normal C you can say "volatile volatile int n;" -- I just tested this.
11:43:41 <cpressey> I wonder if it makes it more volatile
11:50:08 <shachaf> Maybe because of typedefs?
11:51:42 <wob_jonas> and yes, I'd have to also add the restriction that you put "complex", "imaginary", "atomic" before the rest of the type name
11:55:55 <wob_jonas> I wonder if it's valid to define a new struct type with a redundant c-v specifier like "struct foo { int x; char y[8]; } const;"
12:14:58 <shachaf> #define Struct(name) typedef struct name name; struct name
12:15:29 <wob_jonas> yeah, "restrict" and "typedef" are storage class keywords too, I didn't list them all
12:17:13 <wob_jonas> and "inline" isn't one of them, it's an extra keyword
12:23:16 <fizzie> cpressey: You can't "test" whether you can do something in C, you can only test whether you can do it on an implementation.
12:25:01 <fizzie> Or I guess maybe you meant something like "it is allowed; and additionally, I tested it on an implementation", which is reasonable.
12:25:19 <fizzie> (It *is* allowed: C11 6.7.3p5 "If the same qualifier appears more than once in the same /specifier-qualifier-list/, either directly or via one or more `typedef`s, the behavior is the same as if it appeared only once.")
12:26:23 <wob_jonas> right. for const and volatile it even makes sense
12:27:08 <wob_jonas> some old implementations parse "long long int" as the same as "long int", which results in strange silent failures
12:28:05 <fizzie> And long long long is famously too long for GCC.
12:28:43 <shachaf> I tested it by reading the specification.
12:29:15 <wob_jonas> you can also try to test by asking on irc, but that doesn't always work
12:30:00 <fizzie> `` gcc -fdiagnostics-color=never -x c <(echo 'long long long i = 0;')
12:30:01 <HackEso> /dev/fd/63:1:11: error: ‘long long long’ is too long for GCC
12:31:27 <wob_jonas> maybe you care about bash 1 compatibility
12:31:59 <fizzie> I just can't really remember bash, that's all.
12:33:17 <wob_jonas> so you, like, can't remembering what all the expansion syntax like ${foo#bar}, ${foo##bar}, ${foo%bar}, ${foo-bar}, ${foo:-bar}, ${foo:=bar}, ${foo+bar}, ${foo/bar/qux} do?
12:33:26 <fizzie> To be honest, usually I do the above sort of thing as [echo or printf] | gcc -x c - which involves remembering even less.
12:33:44 <wob_jonas> and ${foo:2:1} but that doesn't have bar
12:34:23 <shachaf> i,i if you're so qualified at writing c, how come it isn't on your cv
12:34:23 <fizzie> I think I have finally managed to remember #, ##, %, %% using the mnemonic of # being something that's in front of things.
12:34:51 <wob_jonas> I remember that from the mnemonic that # is before $ and % is after $
12:35:17 <fizzie> And the #/## (resp. %/%%) distinction from ## being longer than #.
12:35:21 <wob_jonas> I still don't know vim regex syntaxes
12:35:36 <shachaf> vim has an option to use regular regex syntax
12:35:54 <shachaf> But also it has intersection! Almost makes me want to switch back to vim.
12:37:01 -!- doesthiswork has joined.
12:37:35 <wob_jonas> how often do you use intersection when just a lookahead wouldn't work?
12:37:45 <wob_jonas> I don't recall ever having wanted such a regex
12:37:58 <wob_jonas> maybe it's useful if you want to match fibonacci numbers that are also catalan numbers or some such thing
12:39:46 <wob_jonas> no, that won't work, the regex doesn't actually match catalan numbers, it generates catalan numbers through a side channel
12:40:10 <wob_jonas> `perl -le$==0,(1x$_)=~/^(|()1(?1)(?1)\2)$(?{$=++})^/,print$=for 0..13
12:40:18 <shachaf> Lookahead is complicated and confusing and intersection+complement usually express the thing I want.
12:40:22 <HackEso> 1 \ 1 \ 2 \ 5 \ 14 \ 42 \ 132 \ 429 \ 1430 \ 4862 \ 16796 \ 58786 \ 208012 \ 742900
12:41:10 <shachaf> I don't know what the thing you wrote is, but it doesn't look regular.
12:42:16 <shachaf> The pattern I want most often is e.g. (P&~Q)
12:43:34 <wob_jonas> shachaf: sure, and most practical cases of that you can write with a negative lookahead too, or in some even simpler way
12:43:56 <wob_jonas> at least that's what I found for the regexes I wrote, but maybe I'm just using the one hammer I got for every problem
12:44:14 <wob_jonas> interestingly TRE doesn't support intersections, I don't know why
12:46:25 <myname> that does remind me of the pcre that only matches non-prime unary numbers
12:47:53 <wob_jonas> myname: yes, https://www.perlmonks.com/?node_id=52469 . it's linked from https://www.perlmonks.com/?node_id=796712 which is the side-channel fibonacci thing.
12:49:48 -!- iconmaster_ has joined.
12:53:55 -!- iconmaster has quit (Ping timeout: 276 seconds).
12:56:06 <cpressey> fizzie: I apologize for using the word "tested" in such a lax way.
12:59:16 <cpressey> What I actually did was, I took the C spec and converted it into a set of assertions in first-order logic
12:59:32 <cpressey> Then I converted those assertions into an Agda program
12:59:52 <cpressey> or whatever it is that Agda calls its source files
13:00:20 <cpressey> Turns out that all behaviour in C is undefined.
13:01:29 <wob_jonas> cpressey: did you also find the contradiction in peano arithmetic and thus rule not only the world but all possible worlds?
13:04:29 -!- Melvar has quit (Quit: WeeChat 2.4).
13:04:51 -!- Melvar has joined.
13:05:23 <cpressey> wob_jonas: Yes! That was quite astonishing.
13:12:10 <cpressey> In other news, I'm not too sure about Skolem's paradox. I think my way of dealing with it is to ignore all of model theory.
13:12:34 <cpressey> As soon as you start using non-standard models, you get too many weird results. I'm just, like, let's not even go there.
13:15:06 <wob_jonas> cpressey: yeah, but thinking of logical compactness or nonstandard models can give a different way to think about proofs, and so sometimes reveals interesting connections, even though it rarely lets you prove anything new that you couldn't without that tool. just like when you're thinking of proofs through category theory.
13:16:47 <wob_jonas> for example, logical compactness lets you see that if there's a ramsey-like property that any infinite structure satisfies, then there's also a bound such that any structure larger than that satisfies it. this doesn't let you prove new ramsey-like theorems, because all the proofs where you prove that an infinite structure doesn't work already natur
13:16:48 <wob_jonas> ally give you upper bounds, but it reveals why the proofs are like that.
13:27:57 -!- kspalaiologos has joined.
13:28:50 -!- kspalaiologos has quit (Remote host closed the connection).
14:59:32 -!- wob_jonas has quit (Remote host closed the connection).
15:04:58 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=64677&oldid=64675 * Areallycoolusername * (+283)
15:05:45 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=64678&oldid=64677 * Areallycoolusername * (+0) /* Race conditions */
15:24:43 -!- cpressey has quit (Quit: WeeChat 1.4).
15:24:44 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=64679&oldid=64678 * Areallycoolusername * (+234) /* Sidex solutions (check if this is okay) */
15:33:07 -!- atslash has quit (Quit: Leaving).
15:45:38 -!- Sgeo_ has joined.
15:47:46 -!- Sgeo has quit (Ping timeout: 248 seconds).
16:03:49 -!- atslash has joined.
16:06:55 -!- Sgeo__ has joined.
16:09:38 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
16:24:50 -!- Sgeo_ has joined.
16:28:05 -!- Sgeo__ has quit (Ping timeout: 268 seconds).
16:42:21 -!- iconmaster__ has joined.
16:46:37 -!- iconmaster_ has quit (Ping timeout: 276 seconds).
17:02:11 -!- DHeadshot has joined.
17:38:49 -!- Sgeo__ has joined.
17:42:26 -!- Sgeo_ has quit (Ping timeout: 272 seconds).
17:42:32 -!- DHeadshot has quit (Ping timeout: 245 seconds).
17:43:12 -!- xkapastel has joined.
17:45:55 -!- iconmaster_ has joined.
17:50:19 -!- iconmaster__ has quit (Ping timeout: 276 seconds).
17:51:09 -!- b_jonas has joined.
17:51:19 -!- DHeadshot has joined.
18:01:56 -!- FreeFull has joined.
18:12:46 -!- DHeadshot has quit (Ping timeout: 246 seconds).
18:15:11 -!- DHeadshot has joined.
19:48:52 <b_jonas> ~eval len('the bot with this invocation character doesn't hang in this channle these days, right?')
19:52:21 -!- Lord_of_Life_ has joined.
19:55:05 -!- Lord_of_Life has quit (Ping timeout: 244 seconds).
19:55:05 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
19:56:28 <b_jonas> it will soon be time for the next OotS strip. please prepare to upload it in a few days.
20:03:24 <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.
20:03:50 <b_jonas> hmm, I think I left a double space in that from when I edited it down
20:05:07 <b_jonas> ``` perl -i -pe 'warn s/ //g, " - $_";' wisdom/o
20:05:09 <HackEso> 1 - 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 eventuallystumble 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.
20:10:47 <b_jonas> ``` perl -i -pe 'warn s/llystumble/lly stumble/g, " - $_";' wisdom/o
20:10:49 <HackEso> 1 - 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.
20:10:55 <b_jonas> ok, now that's a better number of spaces
20:29:34 -!- iconmaster_ has quit (Ping timeout: 276 seconds).
20:30:10 -!- iconmaster_ has joined.
20:33:23 <esowiki> [[Esolang talk:Categorization]] https://esolangs.org/w/index.php?diff=64680&oldid=64659 * Sideshowbob * (+0) /* New category? */
20:46:35 -!- arseniiv_ has joined.
20:47:11 -!- arseniiv has quit (Read error: Connection reset by peer).
20:53:09 -!- DHeadshot has quit (Read error: Connection reset by peer).
20:53:24 -!- DHeadshot has joined.
21:13:22 -!- DHeadshot_ has joined.
21:14:08 -!- DHeadshot has quit (Ping timeout: 258 seconds).
21:29:18 -!- Sgeo_ has joined.
21:32:16 -!- Sgeo__ has quit (Ping timeout: 246 seconds).
21:37:17 -!- AnotherTest has quit (Ping timeout: 252 seconds).
21:58:57 -!- iconmaster__ has joined.
22:03:01 -!- iconmaster_ has quit (Ping timeout: 250 seconds).
22:19:37 -!- DHeadshot_ has left.
22:43:18 -!- kolontaev has joined.
22:52:21 -!- iconmaster_ has joined.
22:55:51 -!- iconmaster__ has quit (Ping timeout: 264 seconds).
22:56:51 -!- iconmaster__ has joined.
22:57:07 -!- iconmaster_ has quit (Ping timeout: 276 seconds).
22:59:36 -!- Phantom_Hoover has quit (Quit: Leaving).
23:01:43 -!- arseniiv_ has quit (Ping timeout: 245 seconds).
23:33:31 -!- iconmaster__ has quit (Ping timeout: 276 seconds).
23:54:52 -!- b_jonas has quit (Quit: leaving).