←2017-08-07 2017-08-08 2017-08-09→ ↑2017 ↑all
00:04:27 <boily> French lesson of the day: Est-ce que les cabots peuvent manger de la poutine? Non, les cabots ne peuvent pas manger de la poutine.
00:04:47 -!- boily has quit (Quit: PERSPIRATING CHICKEN).
00:06:30 -!- wob_jonas has joined.
00:11:36 -!- btiffin has quit (Remote host closed the connection).
00:19:56 <shachaf> `olist 1089
00:20:17 <wob_jonas> ooh!
00:20:34 <shachaf> olist 1089: shachaf oerjan Sgeo FireFly boily nortti b_jonas
00:20:54 <wob_jonas> ah yeah, since HackEgo isn't here, you have to do it manually
00:22:12 <myname> lol
00:23:36 <myname> asciidots looks interesting
00:25:42 <wob_jonas> Mark Rosewater in http://magic.wizards.com/en/articles/archive/making-magic/cats-2017-08-07 writes "While [sabertooth is] not the only word spelled differently on different cards (I'm looking at you "sylex"), such occurrences are infrequent."
00:26:58 <shachaf> wob_jonas: I think I must be missing something about this comic.
00:27:04 <wob_jonas> The word sylex is in the name of "Golgothian Sylex", but what other cards does it appear on, what is the alternate spelling, what the heck is a sylex, and why did it choose to collapse on Betelguse Seven in particular?
00:27:28 <zzo38> Do you know any GURPS game?
00:28:14 <myname> there is a pratchett themed
00:28:26 <zzo38> Do you like the two loader programs I wrote for use with MIX? (One for programs that are only for specific byte sizes of MIX, and one for programs that are independent of byte sizes of MIX.)
00:29:28 <zzo38> (Both of these programs each fit on only one card; you don't need two cards.)
00:34:07 <zzo38> However, I used a different format for the program cards, which are the format which can be loaded more efficiently. The one for specific byte sizes, has seven words per card like the one described in the book, although their format is different, and it skips by 2 instead of by 1 (so if a card specifies an address of 300, then it loads at 300, 302, 304, 306, 308, 310, and 312, instead of 300, 301, 302, 303, 304, 305, 306).
00:35:12 <zzo38> The final card (the "transfer card") will modify the loading routine; there is no special logic for this in the loader program.
00:35:41 <myname> the fuck is MIX?
00:35:55 <wob_jonas> dunno, look on the wiki... oh wait
00:36:12 <zzo38> It is a kind of hypothetical computer invented by Knuth. There is a description in esolang wiki, but esolang wiki does not currently work now.
00:40:45 <zzo38> http://zzo38computer.org/textfile/miscellaneous/mix_stuff
00:45:45 -!- Lord_of_Life has quit (Quit: EliteBNC free bnc service - http://elitebnc.org - be a part of the Elite!).
00:49:16 <tswe_tt> wob_jonas: I did some Gathering and Googlering, and it looks like "sylex" is a misspelling of "cylix".
00:49:55 <wob_jonas> tswe_tt: ah thanks
00:51:26 <wob_jonas> in that case the second half of the question stands. what's a cylix? it's not in my dictionary.
00:51:59 <zzo38> I also don't know what is meaning
00:52:11 <tswe_tt> "Noun. 1. cylix - a shallow drinking cup with two handles; used in ancient Greece. kylix."
00:52:47 <wob_jonas> thanks
00:53:58 <zzo38> That would be like what the picture shows, I guess
00:54:52 <wob_jonas> yeah, all four cylix cards show a chalice (flat cup)
00:57:04 <wob_jonas> of course, M:tG has chalices and goblets too
01:07:16 -!- sleffy has quit (Ping timeout: 246 seconds).
01:10:43 -!- ais523 has quit (Remote host closed the connection).
01:11:54 -!- ais523 has joined.
01:21:20 -!- doesthiswork has joined.
01:37:44 -!- GeekDude has quit (Quit: WeeChat 1.8).
01:45:18 -!- Lord_of_Life has joined.
01:45:18 <tswe_tt> I made the layered unit net generate some exchanges with lambdabot. My favorite one so far...
01:45:34 <tswe_tt> > z (f xarg $mob n)) tswett [x]
01:45:34 <tswe_tt> 12:59:29 <lambdabot> L2DIMAIT #=. (bad exoteric program status reverse copy")
01:46:35 <wob_jonas> lol
01:47:26 -!- GeekDude has joined.
01:50:30 -!- Lord_of_Life has quit (Ping timeout: 240 seconds).
01:52:52 <rdococ> Concept: esoteric, stack-based programming language where the program must pop their clogs before it can halt
01:55:01 -!- augur has joined.
01:57:39 <wob_jonas> pop their what?
01:57:50 <wob_jonas> oh
01:57:57 <wob_jonas> do you mean cogs?
01:58:06 <FreeFull> Can we make a hydraulic esoteric language?
02:00:02 <tswe_tt> Ooh, more fake METAR.
02:00:03 <tswe_tt> LASK 041356Z 23013KT 200 9999 SCT011 BKN007 02/05 A2979 RMK AO2 THITK AO2 SLP123 T01860004
02:03:21 -!- Lord_of_Life has joined.
02:03:54 <shachaf> fizzie: I didn't actually mean "less fizzie". Your presence here is valued and appreciated.
02:04:04 <shachaf> It was just a pun.
02:10:14 <FreeFull> Sin gas
02:15:31 -!- PattuX has quit (Quit: Connection closed for inactivity).
02:24:23 <tswe_tt> I trained a net on timestamps only. Some of the output is pretty funny.
02:24:58 <tswe_tt> The output mostly makes sense. 13:59:26 is followed by 14:02:20, which is followed by 14:25:52.
02:25:15 <wob_jonas> tswe_tt: did it produce invalid dates like 2017-02-29?
02:25:46 <tswe_tt> Just the time component.
02:26:06 <tswe_tt> Here it went from 15:59:45 to 15:00:03.
02:26:29 <tswe_tt> So it thought it was reasonable for 15:59:45 to be followed by another timestamp in hour 15, but then decided to reset the minutes and seconds anyway.
02:26:42 <wob_jonas> you could add some domain-specific knowledge to timestamp generation though
02:27:45 <tswe_tt> Shouldn't be necessary. After just a little more training, it should generate timestamps pretty flawlessly.
02:28:18 <tswe_tt> It occasionally goes backwards a little bit, like from 18:11:03 to 18:10:23.
02:29:14 <tswe_tt> Here it generated 23:03:31 followed by 22:03:30...
02:29:20 <wob_jonas> tswe_tt: clock skew or timezone offset change
02:29:28 <wob_jonas> or even most of a day skipped
02:29:43 <tswe_tt> I think the timestamp 00:00:00 always appears every day, in the training data.
02:29:54 <tswe_tt> Here's a mutant time, 221:29:08.
02:30:31 <tswe_tt> 02:04:17 to 20:04:30. I wonder if it forgot which digit was which in the hour component?
02:31:28 <tswe_tt> Then here it goes from 23:59:08 to 24:00:02 and stays in hour 24 for a while before going back to 23.
02:31:58 <tswe_tt> After a while, it generates the timestamp 00:00:00:00.
02:35:54 <tswe_tt> I want to train a network on this for a while and then do one of those visualization things to see what units are doing what.
02:37:48 -!- imode has joined.
02:46:27 -!- augur has quit (Remote host closed the connection).
02:47:10 -!- augur has joined.
02:51:35 -!- augur has quit (Ping timeout: 240 seconds).
02:59:04 -!- augur has joined.
03:00:46 -!- ATMunn has quit (Quit: ~~~~goodnight~~~~).
03:11:13 -!- erkin has joined.
03:12:54 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
03:18:50 -!- jjthrash has quit (Ping timeout: 255 seconds).
03:25:45 -!- jjthrash has joined.
03:31:49 -!- Lord_of_Life has quit (Ping timeout: 246 seconds).
03:33:38 -!- sleffy has joined.
03:45:51 -!- sleffy has quit (Ping timeout: 255 seconds).
03:56:29 <rdococ> Concept: Esolang where tables can access theirselves, and their parent. e.g. {a = "foo", b = "bar", c = {c = self, d = parent}}.
03:57:04 <rdococ> So that table (let's call it t) would be recursive, and things like t.c.c.c.c.c.c.c.c.c.c.d.c.c.c.c.c.d.a would be valid.
04:05:41 -!- Lord_of_Life has joined.
04:15:47 -!- contrapumpkin has quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…).
04:32:26 -!- erkin has quit (Quit: Ouch! Got SIGABRT, dying...).
05:10:00 -!- doesthiswork has quit (Quit: Leaving.).
05:10:33 -!- doesthiswork has joined.
05:12:54 <zzo38> Heirloom-Mailx allows to write downloaded attachments to pipes. Why doesn't a web browser do this?
05:24:21 <imode> nothing stops you from using curl. :P
05:25:33 <zzo38> Yes, although I think it can be useful at the download prompt. The same is true with upload forms; you should be allowed to enter the local filename (or program to execute) and the remote filename separately.
05:25:59 <zzo38> And I don't like the file dialog boxes either; a simple prompt where you can type in the full path (with tab completion) is best.
05:26:13 <zzo38> I do have curl and yes it is very useful though.
05:41:29 <zzo38> Another possible thing to be useful is an extension to make a shell script equivalent of a HTML form.
05:54:52 <Sgeo_> Any image I had of low-level programming being saner than web dev was just shattered
05:54:53 <Sgeo_> http://wiki.osdev.org/A20_Line
05:55:45 <rdococ> Are there esolangs with support for anonymous, first-class functions, but not closures?
05:55:46 <Jafet> userspace in amd64 is fairly sane
05:59:14 <imode> Sgeo_: legacy x86 is often crufty.
05:59:49 <Jafet> usually you can choose not to use the insane bits, though there is the legacy cruft where ymm registers have split lanes
06:03:31 <Sgeo_> Maybe I should read about MINIX?
06:04:23 <zzo38> I think the original design of IBM PC was reasonable (although there are a few things I would have done differently), although now it is a mess.
06:04:36 <Sgeo_> ...the book recommended is a bit more than I want to pay right now
06:05:08 <pikhq> zzo38: I concur.
06:05:30 <pikhq> The original IBM PC was, in most respects, a very normal computer of its time.
06:05:54 <pikhq> Just made a bunch of natural decisions on how you'd go about designing a computer around the 8080 and off-the-shelf components.
06:06:25 <zzo38> Yes, although there are a few things I would have done differently; such as, altering a few gates of CGA would make CGA much more flexible than it is.
06:07:03 <pikhq> Yeah, that's probably the best example of a case where they could've *easily* done better.
06:07:44 <pikhq> But goodness a lot of cruft got built up.
06:07:48 -!- hppavilion[1] has quit (Quit: HRII'FHALMA MNAHN'K'YARNAK NGAH NILGH'RI'BTHNKNYTH).
06:08:06 <zzo38> (I have the schematics, so I can see which gates to change.)
06:08:54 <pikhq> Sgeo_: For extra fun, the only thing we know of that used the A20 wraparound is *itself* a legacy compat feature.
06:08:56 <zzo38> I think the original "Model F" keyboard design was good too actually.
06:09:11 <pikhq> It was used by DOS's implementation of the CP/M API.
06:09:22 <rdococ> well, that was... odd. didn't expect the wikipedia article on callbacks to mention Roblox of all things.
06:09:59 -!- sleffy has joined.
06:10:02 <pikhq> You see, one of the selling points of the 8086 was that it was a purely mechanical process to convert 8080 asm to it...
06:10:30 <pikhq> So, *if* your 8086 OS implemented the CP/M system call API, then it was trivial to port CP/M software to it.
06:10:34 <pikhq> And DOS did exactly that.
06:10:48 <pikhq> But it had to use the A20 wraparound to do it.
06:11:14 <pikhq> If not for that, the A20 line mess probably wouldn't have happened.
06:11:35 <Sgeo_> o.O
06:12:12 <pikhq> Also, this was actually a damned important feature; most of the early DOS software was actually CP/M ports.
06:13:41 <pikhq> Nobody would've bought an IBM PC if it didn't run WordStar, dBASE, or AutoCAD.
06:13:52 <Jafet> I wonder how many CP/M programs actually needed the wraparound
06:14:12 <pikhq> Jafet: All of them. For technical reasons, the *API* relied on it.
06:14:33 <pikhq> I suspect few of them needed it outside of that, however.
06:14:35 <Jafet> that would do it, then
06:15:13 <pikhq> The API was a call to a weird address, which on an 8080 was just a normal address, but with segmenting involved pretty much had to wrap around.
06:26:16 <shachaf> whoa whoa whoa, "Intel no longer supports the A20 gate, starting with Haswell."
06:28:07 <int-e> bold move, I wonder how many programs that will break.
06:28:38 <pikhq> Wanna bet it's still togglable from the keyboard controller?
06:29:34 <int-e> well, define "keyboard controller"... AFAIK that stuff tends to be emulated by SMM code these days.
06:30:03 <pikhq> The 8042 chip is only so emulatable considering many systems still *ship* with a PS2 port.
06:30:13 <pikhq> i.e. the thing that it actually interfaces with.
06:31:19 <pikhq> TBH, I strongly suspect it broke the use cases of exactly *nobody* to not support the A20 line, though.
06:31:55 <pikhq> It'd only *possibly* break software people are running straight from DOS on a Haswell system.
06:32:06 -!- Lord_of_Life has quit (Remote host closed the connection).
06:32:14 <int-e> maybe highmem.sys actually checked whether the A20 gate worked at some point? :P
06:33:08 <pikhq> If it's running from inside virtual 8086 mode, nothing breaks, so...
06:33:20 <pikhq> Yes, himem.sys could *hypothetically* be broken by that.
06:34:52 <pikhq> Also, given it's recent enough, you could actually probably work around it by using the virtualization extensions to have a *thin* VM that's basically just the base hardware except for a tiny chunk of RAM carved out, and A20 actually works.
06:36:02 <int-e> you can even use paging to get the wrapping behavior right.
06:36:52 -!- erkin has joined.
06:36:54 <int-e> the A20 gate was mighty silly from the moment it was introduced.
06:37:22 <pikhq> It made sense for maybe the year after it was introduced.
06:37:46 <int-e> no, because oce it was there you'd be stuck for it forever :P
06:37:56 <pikhq> The only software that needed it was legacy software *at the time*, so.
06:38:12 -!- doesthiswork has quit (Quit: Leaving.).
06:38:18 <int-e> admittedly updating software wasn't as easy then as it is now
06:41:34 <ais523> just think, the alternative fix would be to permanently alias A20 to 0 if A21 upwards are all 0
06:41:35 <ais523> (or to implement A20-as-0 in virtual 8086 mode)
06:43:02 <zzo38> I thought that 8088 only has twenty address lines anyways? Although, ais523's idea makes sense too, that you can have mirrored addressing of the physical memory perhaps. If 8088 has only twenty address lines and the later versions have more, then it would make more sense for that function to be part of the processor instead, where if you do not use long addressing then it wraps.
06:43:19 <ais523> zzo38: it only has 19 address lines
06:43:29 <ais523> that's why there were backwards compatibility issues when the twentieth was introduced
06:43:42 <ais523> wait, no
06:43:46 <ais523> I'm off by 1
06:43:52 <ais523> it has 20 address lines, A20 is the 21st
06:44:36 <ais523> so some 8086/8088 programs assume that there's no A20 line (by wrapping addresses past 1MB), meaning that later processors which wanted to be compatible tended to disable the A20 line by default
06:44:59 <zzo38> Yes, although due to that backward compatibility issues, I think it would make more sense for that to be a feature of the processor itself. If you do not enable long addressing by the control registers then the processor should automatically output 0 on the A20 line and all higher address lines.
06:45:58 <ais523> zzo38: that's basically the solution the 80386 used
06:46:05 <ais523> although in a bit of an indirect way
06:46:19 <ais523> the A20 line nonsense was mostly related to the 80286 (which also had a number of other problems)
06:46:41 <ais523> actually, a good way to think about the 80386 is "Intel learns how to be backwards compatible in a way that doesn't hold back the future too"
06:47:05 -!- Lord_of_Life has joined.
06:57:43 -!- xkapastel has quit (Quit: Connection closed for inactivity).
06:58:10 <Sgeo_> Is OSDev wiki the best way to learn about this stuff?
07:02:18 -!- ais523 has quit (Remote host closed the connection).
07:03:28 -!- ais523 has joined.
07:06:19 -!- FreeFull has quit.
07:07:13 <\oren\> I just invented a new word. Weaboo, but korea: Weobeo
07:08:47 <rdococ> . o O ( Are there esolangs with support for anonymous, first-class functions, but not closures? I'd say langs in general, but it seems odd enough to me that it would be considered esoteric )
07:28:33 <Jafet> GCC C local functions
07:29:02 <Jafet> you've never heard of it because no one uses it, because it is about as useless as it sounds
07:29:18 <ais523> Jafet: I've heard of it
07:29:38 <ais523> however I believe they are closures, they just only last as long as the surrounding stack frame
07:30:16 <Jafet> oh, apparently they are
07:32:35 <shachaf> I've heard of it but never looked into the details.
07:32:44 <shachaf> How does it work?
07:33:15 <ais523> shachaf: syntax-wise, it's basically the C function definition syntax that appears inside a function body
07:33:18 <shachaf> You can pass a nested function pointer as an argument to another function and it has its local scope?
07:33:29 <ais523> implementation-wise, via the use of a small executable trampoline on the stack
07:33:45 <ais523> and yes, the resulting function can be called (not very useful) but you can also take pointers to it
07:34:00 <shachaf> But the pointer is the same code pointer each time?
07:34:10 <shachaf> Or does it allocate executable memory or something?
07:34:51 <Jafet> nearly all implementations of first-class functions use the same code pointers each time
07:35:07 <shachaf> But then how does it pass the data?
07:35:27 <Jafet> using a data pointer, presumably
07:35:53 <shachaf> https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
07:35:59 <ais523> shachaf: the pointer is to the stack
07:36:03 <shachaf> I'm talking about the "intermediate" example.
07:36:11 <shachaf> ais523: Executable memory on the stack?
07:36:13 <ais523> which is basically a simple wrapper that supplies arguments and calls the actual code
07:36:20 <ais523> shachaf: yes, it's a nightmare for gcc backend writers
07:36:58 <shachaf> I heard about a clever trick used by GHC on iOS, where you're not allowed to allocate writable executable memory (or something).
07:37:07 <shachaf> Or rather used by a library GHC uses.
07:37:45 <shachaf> I think the way it works is, they have a dynamically linked library that has a relative address.
07:37:50 -!- imode has quit (Ping timeout: 240 seconds).
07:38:00 <shachaf> They load it at multiple places in memory, and they put the data pointer next to it.
07:39:33 <Jafet> I thought that ghc implemented closures as functions taking a pointer to the closure data
07:39:59 -!- ais523 has quit (Remote host closed the connection).
07:40:04 <shachaf> I mean the thing where you can pass closures to C.
07:40:07 <shachaf> foreign import "wrapper"
07:40:09 -!- ais523 has joined.
07:43:32 <Taneb> After visiting the centre for computing history in Cambridge, I really want a BBC Micro
07:45:20 <ais523> I used to have one of those
07:45:28 <ais523> I don't think I still do, though; it's possible it broke
07:45:41 <ais523> they should be pretty easy to emulate, come to think of it
07:45:46 <ais523> maybe there's an emulator already
07:45:52 <Taneb> I'd imagine there is
07:48:32 <shachaf> ais523: whoa, it just makes the stack executable
07:48:36 <shachaf> That's ridiculous.
07:48:58 <ais523> the whole thing? or just one page
07:49:02 <ais523> either would be pretty bad though
07:49:45 <ais523> it strikes me that programs would benefit from multiple (processor-provided) hardware stacks
07:50:04 <ais523> one which only holds return addresses, one which is executable, one for small fixed-size locals, one for allocas, etc.
07:50:04 <shachaf> As far as I can tell the whole thing.
07:50:07 <zzo38> Not being able to allocate writable executable memory isn't very good then it makes it difficult to use self-modifying codes.
07:50:12 <shachaf> Of course there isn't that much stack in this process.
07:50:13 <ais523> the extra cost in registers would be negligible
07:50:22 <shachaf> But at least the 33 pages labeled [stack] are +x
07:50:31 <ais523> 33 pages is a lot
07:50:31 -!- augur has quit (Remote host closed the connection).
07:50:38 <shachaf> Yep.
07:50:50 <shachaf> ais523: The Mill does something like that, doesn't it?
07:51:03 <shachaf> Well, not quite to that degree.
07:51:17 <ais523> Itanium probably does something like that too
07:51:33 <ais523> but having the return value stack independent of everything else makes quite a few exploits almost impossible
07:52:10 <ais523> most notably, both the original "overwrite the return address so that it points to data" exploit, and the ROP-based version that gets past W^X
07:57:14 <shachaf> ais523: Oh, it just sets the stack to executable in the ELF flags.
07:57:50 <shachaf> This is scow.
07:58:08 -!- ^v has joined.
08:00:05 <ais523> would sending the stack pointer to point at part of the executable image be more or less scow?
08:00:08 -!- augur has joined.
08:00:53 <shachaf> What do you mean?
08:01:23 <ais523> have a writable part of the executable; instead of writing to the stack, you temporarily shift the stack pointer to point at that part of the executable
08:01:28 <ais523> then move it back when the function returns
08:01:42 <shachaf> Why do you need to do that?
08:01:45 <ais523> you don't
08:02:05 <ais523> I was trying to think of something that would accomplish similar things as making the stack writable, but was even more ridiculous
08:03:20 <shachaf> Ah.
08:03:46 <shachaf> You can write to read-only shared executable memory using ptrace.
08:03:51 <shachaf> That's how gdb sets breakpoints and so on.
08:04:01 <shachaf> Of course at that point it stops being shared.
08:04:33 <ais523> come to think of it, a similar approach that's a bit less ridiculous is to reserve a few "closure slots" in the data segment for each closure to store the values being closed over
08:04:52 <ais523> this wouldn't work if the function were recursive, but would work in other cases
08:05:02 <ais523> and doesn't require any screwing around with memory protection nor segment discipline
08:05:16 -!- augur has quit (Ping timeout: 276 seconds).
08:05:28 <shachaf> I was planning to test with a recursive nested function.
08:05:43 <shachaf> Or rather a recursive nesting function.
08:05:51 <shachaf> But it turned out not be necessary.
08:09:36 <shachaf> It might be halfway reasonable to have a per-thread "stack" containing just executable closures.
08:10:35 <ais523> that'd interact badly with longjmp, unless you told your longjmp implementation about it specifically
08:11:01 <ais523> (and this is less irrelevant than it seems, as longjmp-heavy code is one of the main reasons to want to put random complicated things on the stack)
08:11:12 <shachaf> Speakinig of which, apparently you can implement longjmp using nested functions.
08:11:22 <shachaf> You can jump to labels from the nesting function.
08:12:07 <ais523> yes, I think that works
08:12:11 <ais523> in fact, it's basically just call/cc
08:12:24 <ais523> with a slightly different call sequence
08:12:56 <shachaf> Why call/cc rather than longjmp?
08:13:30 <ais523> because call/cc produces a "continuation" value which is a function that jumps to a particular point when called
08:13:39 <shachaf> In my informal mental hierarchy I have something like callcc > coroutines > longjmp
08:13:48 <Taneb> I think C should have more track and field sports than just longjmp
08:13:52 <ais523> setjmp doesn't do that; a jmp_buf is a value that's only meaningful to lonjgmp
08:13:59 <ais523> *longjmp
08:14:18 <shachaf> Since callcc can use the same continuation multiple times, and coroutines can switch back and forth, and longjmp can only jump up in the stack.
08:14:29 <ais523> so in your case of creating a nested function that creates a jump, you're pretty much literally calling the rest of the code with the current continuation
08:15:00 <ais523> note that the same continuation works multiple times in this case (actually, the same jmp_buf works multiple times with longjmp too, as long as you jump upwards to the same point each time)
08:15:01 -!- TellsTogo has joined.
08:15:18 <TellsTogo> Is the wiki down?
08:15:22 <shachaf> I guess that's true.
08:15:26 <shachaf> Yes, the wiki is down.
08:15:34 <ais523> switch (setjmp(j)) { case 0: longjmp(j,1); case 1: longjmp(j,2); }
08:15:35 <TellsTogo> Tragic..
08:15:41 <ais523> not very useful as written, but it works
08:15:59 <ais523> assuming I haven't forgotten C syntax
08:16:20 <ais523> which I probably have, given that I have a job working with Java atm
08:16:21 <shachaf> I would say that you forgot break, but it doesn't do much here.
08:17:06 <ais523> nah, I remembered it and realised it was unnecessary
08:17:39 <shachaf> I was trying to figure out a good way to make switch statements work for strings in C++.
08:17:49 <zzo38> I haven't known for sure if the same jmp_buf can be worked multiple times with longjmp, so I used something like: while(setjmp(j));
08:17:50 <ais523> oddly enough, most languages in which the switch-equivalent is called `switch` use some sort of `break` in it, although sometimes as a syntax error if it's omitted
08:18:31 <shachaf> You can make something like this work: constexpr auto t = foo("a","bc","def"); switch(t(s)) { case t("a"): ...; ... }
08:18:37 <shachaf> But it's not that great.
08:18:45 <ais523> zzo38: is that even legal? there are very few contexts in which setjmp is allowed, I'm not sure if the test of a while statement is one of them (although the test of an if statement is, so it's plausible)
08:18:57 <ais523> also why do I have a PM tab open with myself
08:19:17 <ais523> this client often opens random PM tabs in response to what I assume are accidental clicks but normally they're with other people
08:19:38 <shachaf> ais523: Go has "switch" which doesn't require "break", but it has an explicit "fallthrough" statement.
08:19:39 <zzo38> ais523: I know there are only some cases where it is legal, but I believe implicitly comparing the result with a constant (in this case zero) is allowed
08:20:09 <zzo38> shachaf: Does FreeBASIC support anything similar?
08:20:10 <ais523> zzo38: is merely comparing with 0 enough by itself? or are there restrictions on how you can use the comparison result, too?
08:20:26 <shachaf> zzo38: I've never used FreeBASIC.
08:21:51 <zzo38> ais523: I think it is allowed in any boolean context, but I think that's all. I think also I have read that it is not allowed to save the result of setjmp or to pass it to anything else though.
08:22:34 <ais523> zzo38: right, the only way you can (legally) check more than two possibilities is to use it as the test of a switch statement
08:22:59 <ais523> however, on most compilers, assigning the result to an int happens to work in practice despite being UB
08:23:56 <zzo38> But work-around is nevertheless possible, by making your own variable (or member of a structure, perhaps one that also has the setjmp buffer) to store the values you need to pass. This can also help if you want temporary override of where to jump back to, for example.
08:29:36 <shachaf> Speaking of Go, did you know that when you cast a type to an interface (or check whether it satisfies an interface), the Go runtime does runtime type checking?
08:29:37 <ais523> zzo38: that's harder if the longjmp is in a signal handler that can be called recursively
08:29:46 <shachaf> Including string comparison of method names and everything.
08:30:05 <ais523> shachaf: Java does that too, however it has a more efficient way to do it than string comparison of method names
08:30:16 <zzo38> ais523: Yes, although I was not considering signal handlers
08:30:34 <shachaf> ais523: Well, in Java you declare interface implementations explicitly, right?
08:30:51 <ais523> shachaf: yes, that's one of the reasons checking is more efficient
08:30:55 <shachaf> In Go a type satisfies an interface if it has all the right methods with the right types.
08:31:14 <ais523> IMO anything interface-like should have namespaced method names
08:31:44 <ais523> which effectively means that even duck typing has "explicit" interface implementations as you wouldn't be using the interface's namespace otherwise
08:31:59 <shachaf> I'm not a big fan of the Go approach.
08:32:09 <ais523> is there anything Go does well?
08:32:31 <shachaf> That depends on what you include in "anything".
08:33:05 <shachaf> I think the designers value simplicity a lot, which is nice. Even if I don't like a lot of their decisions.
08:33:48 <shachaf> It doesn't manifest itself in any particular feature but it makes for a pleasant experience in some cases.
08:34:29 <zzo38> Have you seen my RogueVM designs? It does allow the result of setjmp() to be used in any way, and interface implementations are done by just defining them by a class, but each interface is only two functions (a "read" function and a "write" function), so not quite like interfaces in other programming languages which do more than that I think.
08:34:43 <shachaf> I think language complexity and capacity for abstraction (beyond what Go has) is very often worth it, but it still has a cost that people don't consider.
08:34:46 <ais523> comparing method names at runtime doesn't fit my definition of "simple"
08:34:52 <ais523> although, hmm
08:35:01 <ais523> something like Tcl is simple in some ways, and extremely complex in other ways
08:35:04 -!- mroman has joined.
08:35:32 <shachaf> What languages have namespaces symbols?
08:35:41 <shachaf> I know Common Lisp does.
08:35:44 <shachaf> I guess Rust.
08:35:56 <shachaf> Is it a common feature?
08:36:27 <zzo38> MMIX has namespace symbol in a way (although namespaces in MMIX are really just prefixes)
08:37:48 -!- augur has joined.
08:38:36 <ais523> shachaf: not as common as it should be
08:38:53 <ais523> Java namespaces a lot of things but not method names
08:39:18 <ais523> however, because it has overloading, you can effectively namespace them via dummy parameters belonging to namespaced types
08:40:06 <shachaf> How much do you think C++ would benefit from JIT compilation?
08:41:12 <ais523> literal C++, with no changes to make it JIT-friendlier, probably not much
08:41:23 <ais523> there are too many corner cases which assume AOT behaviour
08:41:29 <izabera> profile guided jitting could possibly help in some tight loops
08:42:37 -!- augur has quit (Ping timeout: 240 seconds).
08:42:39 <Jafet> most profilers don't help at all in high-performance C++, due to the lack of hardware instrumentation
08:43:04 <Jafet> CERN did switch CINT to llvm recently, though
08:43:40 <shachaf> There are already profile-guided AOT optimizers for C++.
08:44:20 <Jafet> I guess branch prediction helps, but a lot of code today is memory-bound
08:44:24 <shachaf> Maybe that's good enough in practice.
08:48:17 <Jafet> I wonder if there is any profile-guided optimisation for malloc
08:49:12 <zzo38> I don't even know how branch prediction is working on most computers, other than MMIX where it is explicit in the program.
08:49:29 <shachaf> zzo38: The Mill doesn't have branch prediction; instead, it has exit prediction.
08:49:39 <shachaf> Do you like this?
08:50:02 <zzo38> How is exit prediction working?
08:50:26 <Jafet> if you can replace each call to malloc with an allocation from a carefully chosen region, it could improve locality
08:50:40 <shachaf> Instead of having an arbitrary instruction stream, instructions are encoded in EBBs, "extended basic blocks".
08:50:48 <Jafet> rust sounds like the ideal candidate for it
08:50:56 <shachaf> You always jump the beginning of an EBB, and you always exit it at exactly one place.
08:51:31 <shachaf> So it predicts which exit it'll take from an EBB.
08:52:04 <shachaf> Don't be a fool. Go easy on your EBBs.
08:52:14 <zzo38> O, OK, well I still don't quite know.
08:52:39 <shachaf> zzo38: Maybe you should watch the Mill videos.
08:53:39 -!- augur has joined.
08:54:20 <ais523> shachaf: how are those encoded in the instruction scheme? it strikes me as suspiciously VLIWy if the compiler is meant to specify how they work
08:55:02 <shachaf> Specify how what work?
08:55:40 <shachaf> The Mill is indeed suspiciously VLIWy.
08:56:26 <Jafet> what's so suspicious about being VLIWy?
08:58:31 -!- augur has quit (Ping timeout: 268 seconds).
08:58:34 -!- sleffy has quit (Ping timeout: 276 seconds).
09:02:29 -!- TellsTogo has quit (Ping timeout: 260 seconds).
09:03:44 <mroman> zzo38: you mean on the CPU level?
09:04:00 <mroman> Most primitive ones just count how many times a jump was taken or not taken
09:04:02 <mroman> then use this
09:04:17 <mroman> well
09:04:20 <shachaf> You could predict indirect jumps, of course.
09:04:27 <shachaf> Some C++ code has a lot of virtual function calls.
09:04:28 <mroman> even less primitive ones always assume that a jump is not taken
09:04:34 <shachaf> I mean JIT, not predict.
09:04:38 <mroman> ah.
09:04:55 <mroman> which is actually quite good I think
09:05:14 <mroman> because then the compiler can just use the right version of the jump (jiz instead of jnz)
09:05:38 <mroman> I know nothing about JIT tho :(
09:05:50 <shachaf> edwardk had a tracing JIT for amd64
09:06:19 <shachaf> It finds indirect jumps that usually go to the same address and replaces them with conditional jumps.
09:06:39 <shachaf> Or even just plain jumps, after checking the pointer once.
09:06:44 <shachaf> Or something. I don't know the details.
09:08:54 <Jafet> of course, CPUs already predict indirect jumps and calls
09:09:32 <shachaf> Sure.
09:10:28 <Jafet> though if you can inline them statically, it would reduce predictor cache pressure
09:11:07 <Jafet> C++ compilers will try to do this
09:11:36 <shachaf> But they can do much better with some profiling data presumably?
09:11:50 <shachaf> Who knows what virtual functions are likely to be called in practice.
09:12:40 <ais523> Jafet: VLIW implies that the instruction stream contains redundant data, which turned out in practice to be inferior to just having the processor infer it
09:12:43 <Jafet> if the call target is not fixed, the code will still need a branch, and it will still involve CPU branch prediction
09:14:11 <Jafet> ais523: yes, but then your cores become complicated and use a lot of power
09:14:15 <shachaf> But I guess you can, say, move the check outside a loop, and have a common case that just has a direct branch?
09:14:18 <shachaf> I don't know.
09:14:49 <mroman> aren't there prefetch instructions?
09:15:06 <Jafet> that sounds like a normal loop hoist, which I would expect any C++ compiler to do, though I don't know
09:15:10 <mroman> (for instruction cache)
09:15:44 <zzo38> I happen to like the kind of branch prediction of MMIX, where the programmer will specify what prediction to use, rather than trying to make it automatic.
09:16:50 <mroman> ah. MMIX has those P prefixes
09:16:55 <mroman> what for?
09:17:21 <shachaf> Jafet: How can it do it without knowing the branch target?
09:17:29 <mroman> Why not just predict "always taken" and then have to use the negated version of jumps if you want it differently?
09:17:49 <ais523> mroman: that makes cold-path exception handlers hard to write
09:18:09 <ais523> because in that situation, you have a number of unlikely jumps from different locations to the same location
09:18:12 <mroman> I have to look up what that is :D
09:18:18 <Jafet> you are right, it doesn't know yet
09:18:36 <ais523> that's IIRC not possible to write in such a way that the non-exceptional path takes every jump, without duplicating the handler
09:19:00 <ais523> I believe the normal very simple "compiler specifies branch prediction properties" is to make backwards jumps predict as taken by default, and forward jumps predict as not taken by default
09:19:33 <mroman> as loops generally jump back, right.
09:19:49 <ais523> mroman: exception handler = code that handles an unusual/exceptional circumstance; cold-path = code that could run in theory but rarely actually does
09:20:31 <mroman> ah right
09:21:20 <Jafet> what is a negated jump? is that where you squat?
09:21:44 <ais523> Jafet: dropping into a buoyant fluid, I guess
09:21:53 <ais523> thus causing you to go temporarily downwards, then rise back upwards
09:22:40 <mroman> Jafet: jnz <-> jiz
09:22:53 <mroman> or jumpIfAbove <-> jumpIfLessOrEqual
09:23:06 <mroman> but it wouldn't really work yes
09:23:13 <ais523> *jumpIfBelowOrEqual, surely?
09:23:25 <Jafet> most jumps are not selected by programmers, but by the compiler
09:23:38 <ais523> IIRC jump-above and jump-greater are different operations in x86 (most likely it's a signedness difference)
09:24:30 <mroman> they are
09:24:37 <mroman> above/below is unsigned
09:24:37 <ais523> hmm, I wonder if there's an asm where you can jump on arbitrary combinations of status flags
09:24:44 <ais523> "jump if odd or equal", that sort of thing
09:26:00 -!- ais523 has quit.
09:58:22 -!- LKoen has joined.
10:05:54 <mroman> jump if prime
10:05:56 <mroman> that'll be usefull
10:27:42 <mroman> DupSwap: Nobody has yet figured out what this is actually useful for. Some say it's useless, other's say... 'Fuck you'.
10:28:52 -!- jaboja has joined.
10:32:39 <mroman> I argue DupSwap is a command for copyright reasons
10:32:41 <mroman> like a fake map
10:33:08 <mroman> If somebody were to steal my sets of commands and is stupid enough to also steal DupSwap
10:33:12 <mroman> I have a solid case there!
10:49:57 -!- Lord_of_Life has quit (Remote host closed the connection).
11:09:44 -!- ybden has quit (Excess Flood).
11:10:23 -!- ybden has joined.
11:16:03 -!- mtve has quit (Ping timeout: 268 seconds).
11:16:22 -!- Lord_of_Life has joined.
11:16:26 -!- LKoen has quit (Remote host closed the connection).
11:17:54 -!- jix has quit (Ping timeout: 268 seconds).
11:18:22 -!- jaboja has quit (Ping timeout: 246 seconds).
11:18:32 -!- jix has joined.
11:19:49 -!- mtve has joined.
11:20:11 -!- jaboja has joined.
11:33:42 -!- boily has joined.
11:34:42 <boily> fungot: how much WIS do you have?
11:34:42 <fungot> boily: you the state would have to be there it's just uh attitude like you know like the buddhist philosophy that you know that these children are out there toting the guns and dealing drugs and you know
11:41:21 <mroman> wait
11:41:22 <mroman> what
11:42:03 <mroman> buddhist philosophy is about children doing guns and dealing drugs.
11:43:52 * boily realigns fungot with current reality
11:43:52 <fungot> boily: and she's not sure what else more to say
11:44:04 * boily shakes the fungot a little bit more
11:44:04 <fungot> boily: like a a money thing here is is the shock of it all in the all in the world
11:44:32 * boily shakes more. just to be sure
11:44:36 -!- LKoen has joined.
11:44:42 <boily> fungot: now, what is buddhism?
11:46:27 -!- wob_jonas has joined.
11:52:43 <wob_jonas> "<pikhq> You see, one of the selling points of the 8086 was that it was a purely mechanical process to convert 8080 asm to it..." => sure, that's why they used the same format for the low half of the flags register, such as inverted carry for subtract operation etc. but why did they insist that any instruction must translate to a single instruction
11:52:43 <wob_jonas> on 8080, as opposed to sometimes translating to a short sequence of instructions? that's put some stupid instructions into the set.
11:58:04 -!- mroman has quit (Ping timeout: 260 seconds).
11:58:06 <wob_jonas> "<ais523> actually, a good way to think about the 80386 is "Intel learns how to be backwards compatible in a way that doesn't hold back the future too"" => no way. the 386 introduced 16-bit operations that cause register tear. they might not have been able to foresee that, but that has already caused problems near the pentiums.
11:59:47 -!- LKoen has quit (Remote host closed the connection).
12:01:28 <wob_jonas> "<ais523> it strikes me that programs would benefit from multiple (processor-provided) hardware stacks" => the problem with that is that it's inefficient to know how much of each stack you want to pop when you exit frames.
12:05:01 <Jafet> hm, citeseer's cache is currently not working
12:05:17 <Jafet> fortunately, google has cached citeseer's cache
12:06:06 <Jafet> perhaps I should also download a local copy of this paper
12:09:26 <wob_jonas> "<ais523> is there anything Go does well?" => sure, there's a lot of things that most modern programming languages do well, and go doesn't mess up either. also, marketing.
12:10:35 <wob_jonas> "<shachaf> What languages have namespaces symbols?" => C++, rust
12:13:48 <boily> don't Java's dot also count as a namespace symbol, with its static methods, and `import static`?
12:14:04 -!- LKoen has joined.
12:15:08 <wob_jonas> boily: I think it's a typo for "namespaced symbols" from context
12:15:19 <boily> oh.
12:17:26 <wob_jonas> "<zzo38> I don't even know how branch prediction is working on most computers, other than MMIX where it is explicit in the program." => some generation of x86 allowed taken/not-taken hints for short branch instructions, and in a backwards compatible way too,
12:18:26 <wob_jonas> but they don't do anything now, which makes sense, because how the cpu does branch prediction changes every few years so any hint that made sense in older cpus might actually make your program perform worse than the no-hint prediction in modern cpus
12:19:37 <wob_jonas> even on MMIX I think the prediction bit is used only on cheaper versions of the hardware, like 486 level
12:23:09 <wob_jonas> "<Jafet> what is a negated jump? is that where you squat? <ais523> Jafet: dropping into a buoyant fluid, I guess thus causing you to go temporarily downwards, then rise back upwards" lol
12:24:48 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
12:29:43 -!- boily has quit (Quit: LADY CHICKEN).
12:51:31 -!- augur has joined.
12:56:33 -!- augur has quit (Ping timeout: 268 seconds).
12:58:13 -!- Lord_of_Life has quit (Changing host).
12:58:13 -!- Lord_of_Life has joined.
12:58:13 -!- Lord_of_Life has quit (Changing host).
12:58:13 -!- Lord_of_Life has joined.
14:00:47 -!- doesthiswork has joined.
14:23:25 -!- xkapastel has joined.
14:26:11 -!- `^_^v has joined.
14:26:32 -!- LKoen has quit (Remote host closed the connection).
14:32:17 -!- Mayoi has joined.
14:35:37 -!- erkin has quit (Ping timeout: 240 seconds).
14:49:23 -!- Cale has quit (Remote host closed the connection).
14:50:46 -!- Cale has joined.
14:52:40 -!- doesthiswork has quit (Quit: Leaving.).
14:57:25 -!- doesthiswork has joined.
15:00:52 -!- jaboja has quit (Ping timeout: 260 seconds).
15:08:17 -!- ATMunn has joined.
15:08:17 -!- ATMunn has quit (Changing host).
15:08:17 -!- ATMunn has joined.
15:09:27 -!- AnotherTest has joined.
15:31:10 -!- Cale has quit (Ping timeout: 276 seconds).
15:35:21 -!- Cale has joined.
15:36:01 -!- Mayoi has quit (Quit: Ouch! Got SIGABRT, dying...).
15:47:31 -!- AnotherTest has quit (Ping timeout: 246 seconds).
15:47:43 -!- AnotherTest has joined.
15:47:53 -!- contrapumpkin has joined.
15:47:59 -!- Cale has quit (Ping timeout: 255 seconds).
15:48:10 -!- Cale has joined.
15:55:51 -!- LKoen has joined.
16:08:35 -!- jaboja has joined.
16:19:08 -!- LKoen has quit (Remote host closed the connection).
16:42:36 <rdococ> humans.
16:42:42 -!- btiffin has joined.
16:57:49 -!- AnotherTest has quit (Ping timeout: 255 seconds).
17:06:14 <rdococ> Damn it, the wiki is still down?!
17:07:10 -!- FreeFull has joined.
17:10:33 -!- zseri has joined.
17:15:56 -!- erkin has joined.
17:22:48 -!- AnotherTest has joined.
17:39:56 <\oren\> https://www.wykop.pl/cdn/c3201142/comment_4PbmfLgqbbQCMtbgNxVNKuLOf77gTHsi.jpg
17:41:25 <\oren\> everyone calls an integral an integral, except poles, who call it a calka
17:42:21 <\oren\> and icelanders, but that's probably on purpose
17:43:28 -!- AnotherTest has quit (Ping timeout: 240 seconds).
17:44:19 -!- LKoen has joined.
17:49:56 -!- wob_jonas has joined.
17:51:24 <wob_jonas> why the fuck do people do a 2d plot of something like records of something over time and connect the data points with straight lines instead of stairs? straight lines makes no sense! the record doesn't even approximate going down linearly, it has jumps when someone gets a new record.
17:51:35 <wob_jonas> it's so stupid
17:51:43 <wob_jonas> so many annoying stupid plots
17:58:24 <Cale> If you think that's dumb, consider 3D pie charts
17:58:43 -!- jaboja has quit (Ping timeout: 268 seconds).
17:58:55 <wob_jonas> Cale: or 3D bar charts with crazy close perspectives, in plots where there's absolutely no need for any 3D. I know.
17:59:49 <\oren\> http://www.businessinsider.com/the-27-worst-charts-of-all-time-2013-6?op=1
18:00:31 -!- LKoen has quit (Remote host closed the connection).
18:01:01 <wob_jonas> Also, I just saw some charts where the numbers on the Y axis were truncated in the image, so all you could see is "5%" "0%" "5%" "0%" "5%" with no way to tell the first digit
18:01:56 -!- LKoen_ has joined.
18:02:56 -!- btiffin has quit (Remote host closed the connection).
18:05:44 -!- AnotherTest has joined.
18:06:50 <wob_jonas> \oren\: wow
18:16:56 -!- AnotherTest has quit (Ping timeout: 255 seconds).
18:23:04 -!- zseri has quit (Ping timeout: 260 seconds).
18:25:41 -!- AnotherTest has joined.
18:27:57 -!- LKoen_ has quit (Remote host closed the connection).
18:28:01 -!- jaboja has joined.
18:34:06 -!- zseri has joined.
18:35:49 <shachaf> Cale: Hale
18:35:53 <shachaf> 3D pie charts are delicious
18:37:24 <shachaf> What is the meaning of the trace of a linear map?
18:38:48 <wob_jonas> shachaf: sum of eigenvalues?
18:39:08 <wob_jonas> also sum of elements in diagonals
18:40:16 <wob_jonas> shachaf: basically, if you have a linear map from a space to the same space, and you change coordinates (on both sides), the eigenvalues don't change, and so the multiset of eigenvalues is an important invariant. but
18:41:18 <wob_jonas> the multiset of invariants is a multiset, which is a bit ugly, so sometimes you want specific scalar-valued statistics from it, and the most important ones are the determinant (product of eigenvalues), trace (sum of eigenvalues), eigenvalue with largest absolute value, and the ratio of the eigenvalues with the largest and second largest eigenvalues
18:41:30 <wob_jonas> these come up in a few places, but I don't quite remember where
18:41:52 <shachaf> Hmm, so it is.
18:42:06 <wob_jonas> the trace is also funny because it satisfies a somewhat simple equality Tr(ABC)=Tr(BCA), which isn't as simple as the determinant one, but still comes up sometimes
18:42:25 <wob_jonas> maybe physicists can tell more about why the trace is important
18:42:32 <wob_jonas> it seems to come up in physics
18:42:44 <wob_jonas> and tensors and stuff
19:26:24 -!- jaboja has quit (Ping timeout: 260 seconds).
19:30:51 -!- jaboja has joined.
19:31:35 -!- LKoen has joined.
19:34:56 -!- Herbstkind has joined.
19:34:56 <wob_jonas> There are somewhat subjective questions like "What's the difference between X and Y?" that if you try to research on the internet, you find only vague answers like "I use X because it seems to work better for me" and answers that are trying to sell something "X is definitely better in all cases for the following five reasons: (long explanation), oh
19:34:57 <wob_jonas> and buy the way, buy our new X+ for just 99 dollars".
19:40:31 <Taneb> wob_jonas, what was the book you were buying yesterday
19:41:34 <wob_jonas> Taneb: ''Arany János Balladái Zichy Mihály rajzaival''. (2016) Kossuth Kiadó, MTA Könyvtár és Információs Központ – Országos Széchényi Könyvtár, ISBN: 978-963-09-8596-3. A kiadás alapja azonos címmel (I–IV. kötet), Budapest, Ráth Mór, 1895–1898.
19:41:50 <wob_jonas> nice facsimile of the old four volume book set with Zichy's beautiful drawings
19:43:42 <wob_jonas> totally in public domain, except possibly a single essay on page 69, which is only pretty likely in public domain and doesn't matter anyway, so I'm going to try to scan it in as high quality as I can get, clean it up, and upload to commons.wikimedia so everyone can access
19:44:10 <wob_jonas> it's such a beautiful collection of drawings that it totally deserves a complete reproduction on the internet
19:44:46 <wob_jonas> the destroyed book plus scanning will cost me less than 10000 HUF in total, which I will gladly pay for this
19:44:51 -!- sleffy has joined.
19:45:01 -!- LKoen has quit (Remote host closed the connection).
19:47:07 -!- oerjan has joined.
19:47:40 -!- erkin has quit (Remote host closed the connection).
19:58:59 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
19:59:20 -!- wob_jonas has joined.
20:01:49 -!- wob_jonas has quit (Client Quit).
20:07:51 -!- Phantom_Hoover has joined.
20:13:37 -!- MDude has quit (Ping timeout: 240 seconds).
20:25:58 -!- imode has joined.
20:36:05 -!- jaboja has quit (Ping timeout: 240 seconds).
20:48:39 -!- hppavilion[1] has joined.
20:58:34 <rdococ> hi hppavilion[1].
20:58:49 <hppavilion[1]> hi rdococ. I just got dilated
21:11:37 -!- augur has joined.
21:11:58 <rdococ> O_o http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
21:12:06 -!- AnotherTest has quit (Ping timeout: 255 seconds).
21:13:06 <rdococ> nested functions + function pointers ≈ first-class functions
21:25:56 -!- zseri has quit (Quit: Page closed).
21:26:51 <fizzie> Hey, the server is answering SSH now.
21:26:59 <fizzie> But it seems to be having some amount of trouble.
21:27:00 -!- PinealGlandOptic has joined.
21:27:31 <fizzie> "Write-error on swap-device (254:1:178952)" "end_request: I/O error, dev sda, sector 25058568" "EXT4-fs error (device dm-0) in ext4_evict_inode:243: Journal has aborted"
21:27:37 <fizzie> Doesn't sound terribly healthy.
21:28:47 <fizzie> There's also 1254 processes marked "[sshd] <defunct>".
21:29:14 <fizzie> Wonder if a reboot would be a good idea.
21:29:21 <oerjan> ribbit
21:30:08 <oerjan> if there are 1254 processes then possibly it hasn't rebooted in a while
21:30:21 <fizzie> Not in 31 days.
21:30:37 <fizzie> Though most of those processes are from today or Aug 5th, for whatever reason.
21:30:54 <oerjan> was Aug 5th when it first disappeared?
21:31:01 <fizzie> They also all have systemd's init process as parent.
21:31:35 <fizzie> "Aug 5 02:17:41" is when syslog stops, so I'm guessing yes.
21:31:51 <fizzie> I guess a reboot is unlikely to make it any *more* broken than it currently is.
21:31:58 <oerjan> wheee
21:32:43 <fizzie> Looks like it's mounted / as read-only as well, presumably due to the errors.
21:33:03 <fizzie> Of course there's the chance that it won't come back up after a reboot, so maybe I should run my backup script to a temporary location just in case.
21:33:06 <rdococ> it's like a chicken walked up to a mountain and pecked the ground, causing a landslide that took a billion computers with it
21:39:42 <fizzie> Looks like mysql isn't up enough to do the backups, anyway.
21:39:53 <fizzie> Oh well, I still have a copy up to Aug 1st.
21:39:57 <Taneb> Actually cooked for the first time in years
21:41:03 <fizzie> Heh, rebooting doesn't work.
21:41:04 <shachaf> What food did you invent?
21:41:15 <Taneb> Cheese and Too Much Ham Omelette
21:41:19 <fizzie> "Failed to start reboot.target: Activation of org.freedesktop.systemd1 timed out" "Failed to open initctl FIFO: No such device or address" "Failed to talk to init daemon."
21:41:53 <fizzie> Taneb: As a marketing trick, maybe call it "Cheese and Extreme Ham Omelette" if you're starting a restaurant.
21:43:42 <Taneb> fizzie, I think I'll stay feeling like an imposter in software development for now
21:46:37 <shachaf> cheese and EXTREME jam omelette
21:49:34 -!- AnotherTest has joined.
21:57:24 <oerjan> <rdococ> . o O ( Are there esolangs with support for anonymous, first-class functions, but not closures? I'd say langs in general, but it seems odd enough to me that it would be considered esoteric ) <-- iirc FALSE might count...
21:58:21 -!- Herbstkind has quit (Quit: Leaving).
21:58:46 <rdococ> I considered the possibility of using partial application or currying to simulate anonymous functions, and function pointers to simulate higher-ordered functions.
21:58:56 <oerjan> i recall when translating my :()^ TC proof from underload to it, it was essential that no dynamically built functions were required.
21:59:13 -!- hppavilion[1] has quit (Ping timeout: 268 seconds).
22:01:48 -!- AnotherTest has quit (Ping timeout: 260 seconds).
22:03:36 -!- AnotherTest has joined.
22:21:19 -!- AnotherTest has quit (Ping timeout: 276 seconds).
22:33:29 -!- LKoen has joined.
22:42:03 <rdococ> Concept: esolangs where functions can not only be passed around as parameters, but their very mechanics can be modified - each individual step in the function is a unit in itself.
22:42:56 -!- wob_jonas has joined.
22:43:09 <wob_jonas> rdococ: like emacs lisp, or (sort of) postscript, or, you know, machine code?
22:43:22 <rdococ> maybe?
22:44:45 <wob_jonas> it's possible to modify code in a lot of languages that allow memory access, it's just very often very nonportable against different implementations, including later ones that are better optimized, which is why people don't like it
22:44:53 -!- tswe_tt has quit (Read error: Connection reset by peer).
22:45:19 <wob_jonas> people have modified BASIC code even in BASIC-era personal computers, mostly to get around various limitations of BASIC or tight memory limits
22:45:23 <rdococ> True, but I was considering a high-level approach in which modifying functions remains consistent between implementations, due to the fact that it is in the specification.
22:46:21 <wob_jonas> that's possible because those interpreters usually store the BASIC code in a rather straightforward way, as a list of characters with keywords represented as one or two byte shortcuts per line, and some sort of linked list structure to link the lines
22:49:51 <wob_jonas> such tricks were not done often, because once you go to so much trouble to learn about the guts of the machine, it's usually better to just write most of your program in machine code with very little use of BASIC, but they did exist
22:51:21 <imode> then there are the forth people.
22:56:14 <wob_jonas> one crazy hack you could do this way is to use the same loop for reading and writing all variables and array items of game state to/from a savefile in a game, with special code to switch the statement between WRITE and INPUT in the lines of code
22:57:03 <wob_jonas> this was necessary on the C64 because its basic didn't have a FIELD statement (nor MKI/CVI functions for that matter, although that wouldn't help here at all), so you saved text to the casette. what a waste!
23:09:17 -!- `^_^v has quit (Quit: This computer has gone to sleep).
23:13:28 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
23:15:42 <Hoolootwo> yeah, that sounds like how I use assembly, at least for tight loops
23:15:49 <Hoolootwo> (on z80)
23:19:48 -!- btiffin has joined.
23:27:33 -!- btiffin has quit (Remote host closed the connection).
23:28:53 -!- HackEgo has joined.
23:30:12 <fizzie> Hoo.
23:30:28 <fizzie> Looks like that worked.
23:30:45 <oerjan> HiEgo
23:31:14 <fizzie> systemd was totally hosed and refused to play ball, but there was a rw-mounted filesystem at /boot, so could stick in there a program that just called the reboot syscall.
23:31:58 <oerjan> Hacky.
23:32:35 <fizzie> So far there aren't even any IO errors in dmesg, and the web server is back up as well.
23:32:43 <shachaf> fizzie: Fortunately we're running regular fshg backups, right?
23:32:49 <fizzie> shachaf: Yes, we are.
23:33:07 -!- oerjan has set topic: http://esolangs.org/ is back, bimetal prismack nowhere to be found | logs: http://codu.org/logs/_esoteric/ http://tunes.org/~nef/logs/esoteric/?C=M;O=D | https://www.dropbox.com/s/fyhqyvy3i8oh25m/wisdom.pdf | ICFP contest ends on 2017-08-07.
23:33:12 <\oren\> hurray, I got a raise!
23:33:18 <fizzie> I had a copy up to <oerjan> slwd decadent//s,.,A,;s,$,.,
23:33:34 <shachaf> \oren\: raise dead?!
23:33:35 <oerjan> famous last hacks
23:33:45 <shachaf> I didn't know \oren\ was a vampire.
23:33:48 <fizzie> (It's once a week, not quite up to continuous integration standards.)
23:34:12 <shachaf> oerjan: What's going on with olist, by the way?
23:34:18 <shachaf> What's what'shisname planning?
23:34:59 <\oren\> shachaf: no I got a raise in salry
23:35:23 <oerjan> shachaf: it appears to be going into fart joke territory hth
23:36:50 <shachaf> \oren\ sprø som salry
23:36:54 <oerjan> shachaf: i'm vaguely assuming durkon is trying to get the vampire to misunderstand some memories in a fatal way. just not sure he's succeeding much...
23:37:17 <shachaf> oerjan: he seems to be p. pleased with whatever he's doing
23:39:02 <\oren\> 🤑
23:39:02 <\oren\> 💰
23:39:02 <\oren\> 🏦
23:39:03 <\oren\> !
23:39:38 <oerjan> economoji
23:40:01 <\oren\> also I watched the emoji movie
23:40:17 <\oren\> it was terrible
23:40:39 <shachaf> Why did you watch it?
23:41:02 <\oren\> becuase I wanted to knwo how bad it is
23:41:12 <shachaf> `unidecode 🤑 💰 🏦
23:41:14 <HackEgo> U+1F911 MONEY-MOUTH FACE \ UTF-8: f0 9f a4 91 UTF-16BE: d83edd11 Decimal: &#129297; \ 🤑 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+0020 SPACE \ UTF-8: 20 UTF-16BE: 0020 Decimal: &#32; \ \ Category: Zs (Separator, Space) \ Bidi: WS (Whitespace) \ \ U+1F4B0 MONEY BAG \ UTF-8: f0 9f 92 b0 UTF-16BE: d83ddcb0 Decimal:
23:41:26 <shachaf> `unidecode 🤑💰🏦
23:41:27 <HackEgo> U+1F911 MONEY-MOUTH FACE \ UTF-8: f0 9f a4 91 UTF-16BE: d83edd11 Decimal: &#129297; \ 🤑 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+1F4B0 MONEY BAG \ UTF-8: f0 9f 92 b0 UTF-16BE: d83ddcb0 Decimal: &#128176; \ 💰 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+1F3E6 BANK \ UTF-8: f0 9f 8f a6 UTF-16BE
23:41:31 <oerjan> . o O ( and now you know. and knowing is half the battle. )
23:42:24 <\oren\> in emojis
23:42:43 <shachaf> `unicode 🤑💰🏦
23:42:44 <HackEgo> U+1F911 MONEY-MOUTH FACE \ UTF-8: f0 9f a4 91 UTF-16BE: d83edd11 Decimal: &#129297; \ 🤑 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+1F4B0 MONEY BAG \ UTF-8: f0 9f 92 b0 UTF-16BE: d83ddcb0 Decimal: &#128176; \ 💰 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+1F3E6 BANK \ UTF-8: f0 9f 8f a6 UTF-16BE
23:42:48 <shachaf> Hmm.
23:42:57 <shachaf> Wasn't there a thing that gave a more concise output?
23:43:10 <oerjan> `unidecode 🤑💰🏦
23:43:11 <HackEgo> U+1F911 MONEY-MOUTH FACE \ UTF-8: f0 9f a4 91 UTF-16BE: d83edd11 Decimal: &#129297; \ 🤑 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+1F4B0 MONEY BAG \ UTF-8: f0 9f 92 b0 UTF-16BE: d83ddcb0 Decimal: &#128176; \ 💰 \ Category: So (Symbol, Other) \ Bidi: ON (Other Neutrals) \ \ U+1F3E6 BANK \ UTF-8: f0 9f 8f a6 UTF-16BE
23:43:45 <oerjan> shachaf: the concise output only works if all the characters are within the ancient version of python's unicode library
23:43:52 <shachaf> Ah.
23:43:58 <shachaf> imo fix it twh
23:44:15 <oerjan> that would probably require upgrading HackEgo's python.
23:44:29 <\oren\> money mouth, bag with dolar sign, bank
23:44:38 <shachaf> Why? Just change the printing format for the fallback.
23:45:33 <\oren\> 🏧
23:46:16 <shachaf> http://www.edgarmcherly.com/spider_rumor.htm
23:46:33 <shachaf> In the time it took me to find that comic I forgot why I was looking for it.
23:46:54 <oerjan> the fallback is to a more general unicode lookup program that isn't just for characters.
23:47:02 <oerjan> `multicode LATIN
23:47:03 <HackEgo> U+0041 LATIN CAPITAL LETTER A \ UTF-8: 41 UTF-16BE: 0041 Decimal: &#65; \ A (a) \ Lowercase: U+0061 \ Category: Lu (Letter, Uppercase) \ Bidi: L (Left-to-Right) \ \ U+0042 LATIN CAPITAL LETTER B \ UTF-8: 42 UTF-16BE: 0042 Decimal: &#66; \ B (b) \ Lowercase: U+0062 \ Category: Lu (Letter, Uppercase) \ Bidi: L (Left-to-Right) \ \ U+0043 LATIN C
23:48:08 <oerjan> i suppose `unidecode could try to parse the output of that.
23:48:30 <shachaf> Doesn't it have Unicode data in a more convenient format?
23:49:18 <\oren\> `` multicod🏧e
23:49:19 <HackEgo> ​/hackenv/bin/`: line 5: $'multicod\360\237\217\247e': command not found
23:49:35 <\oren\> I fail
23:49:35 <oerjan> well right, it's using share/unicodedata.txt or whatever
23:50:50 <oerjan> `` cat share/unic*
23:50:50 <HackEgo> 0000 NULL [.] \ 0001 START OF HEADING [.] \ 0002 START OF TEXT [] \ 0003 END OF TEXT [] \ 0004 END OF TRANSMISSION [] \ 0005 ENQUIRY [] \ 0006 ACKNOWLEDGE [] \ 0007 BELL [] \ 0008 BACKSPACE [] \ 0009 CHARACTER TABULATION [] \ 000A LINE FEED (LF) [ \ ] \ 000B LINE TABULATION
23:51:09 <oerjan> hum.
23:51:12 <\oren\> https://www.youtube.com/watch?v=LcT2Cx1Rbd8
23:51:56 <oerjan> well i don't know how to do it, anyway.
23:52:51 <shachaf> \oren\: Are they no longer underpaying you?
23:53:03 <shachaf> You should try to get even more money. Maybe get a top hat and be a proper capitalist.
23:53:51 <shachaf> imo move to america
23:54:07 <shachaf> and maybe oppress some people?
23:54:23 <\oren\> who would I opress in america, fat people
23:54:24 <\oren\> ?
23:54:35 <shachaf> What did they do to you?
23:55:45 <\oren\> i mean most people in america are already pretty oppressed
23:56:09 <shachaf> Right, so they're used to it.
23:59:13 <shachaf> We're used to it? How do I measure how oppressed I am?
←2017-08-07 2017-08-08 2017-08-09→ ↑2017 ↑all