←2018-08-23 2018-08-24 2018-08-25→ ↑2018 ↑all
00:45:15 -!- clog has quit (Quit: ^C).
00:45:28 -!- clog has joined.
00:47:20 -!- hpt has joined.
00:50:24 -!- clog has quit (Quit: ^C).
00:50:36 -!- clog has joined.
00:51:00 -!- hpt has quit (Remote host closed the connection).
00:55:17 <zzo38> I think they should add a DATE and TIME command into DOSBOX to set the clock skew amount for the current DOS session.
00:55:36 -!- kiera8 has joined.
00:56:35 <zzo38> What do you think?
00:57:09 -!- clog has quit (Quit: ^C).
00:57:13 -!- kiera8 has quit (Remote host closed the connection).
01:07:09 -!- sftp has quit (*.net *.split).
01:07:44 -!- sftp has joined.
01:13:10 -!- clog has joined.
01:15:16 -!- clog has quit (Client Quit).
01:15:49 -!- clog has joined.
01:17:07 -!- clog has quit (Client Quit).
01:19:30 -!- clog has joined.
01:24:52 -!- clog has quit (Quit: ^C).
01:26:05 -!- nodist has joined.
01:31:19 -!- nodist has quit (Quit: Leaving).
01:36:38 -!- Sgeo has quit (Ping timeout: 272 seconds).
01:37:18 -!- clog has joined.
02:08:37 -!- Sgeo has joined.
02:10:47 -!- boily has quit (Ping timeout: 276 seconds).
02:19:44 -!- S_Gautam has quit (Quit: Connection closed for inactivity).
02:28:50 -!- sparr has quit (*.net *.split).
02:28:50 -!- tromp has quit (*.net *.split).
02:28:53 -!- Vorpal has quit (*.net *.split).
02:30:02 -!- sparr has joined.
02:30:02 -!- tromp has joined.
02:30:02 -!- Vorpal has joined.
02:32:02 -!- quintopia has quit (*.net *.split).
02:32:02 -!- olsner has quit (*.net *.split).
02:32:05 -!- hakatashi has quit (*.net *.split).
02:32:06 -!- paul2520 has quit (*.net *.split).
02:32:06 -!- G33kDude has quit (*.net *.split).
02:32:07 -!- mniip has quit (*.net *.split).
02:32:09 -!- rodgort has quit (*.net *.split).
02:32:10 -!- subleq has quit (*.net *.split).
02:32:11 -!- aloril has quit (*.net *.split).
02:32:11 -!- zzo38 has quit (*.net *.split).
02:32:11 -!- Yurume_______ has quit (*.net *.split).
02:32:12 -!- heroux_ has quit (*.net *.split).
02:32:12 -!- Melvar has quit (*.net *.split).
02:32:13 -!- quintopia has joined.
02:32:27 -!- aloril has joined.
02:32:27 -!- paul2520 has joined.
02:32:37 -!- hakatashi has joined.
02:32:38 -!- heroux_ has joined.
02:33:01 -!- Melvar has joined.
02:33:18 -!- Yurume_______ has joined.
02:33:55 -!- rodgort has joined.
02:33:57 -!- G33kDude has joined.
02:34:30 -!- mniip has joined.
02:34:40 -!- shachaf has quit (Quit: Reconnecting).
02:34:46 -!- shachaf has joined.
02:36:38 -!- paul2520 has changed nick to Guest61282.
02:37:53 -!- Guest61282 has quit (Changing host).
02:37:53 -!- Guest61282 has joined.
02:40:04 -!- G33kDude has changed nick to Guest56097.
02:43:01 -!- shachaf has quit (Changing host).
02:43:01 -!- shachaf has joined.
02:52:32 -!- subleq has joined.
02:54:12 -!- olsner has joined.
02:55:39 -!- zzo38 has joined.
02:57:32 -!- Sgeo has quit (Read error: Connection reset by peer).
03:00:33 -!- nfd has joined.
03:03:09 -!- Sgeo has joined.
03:03:46 -!- nfd9001 has quit (Ping timeout: 268 seconds).
03:05:51 -!- lynn_ has quit (*.net *.split).
03:05:51 -!- Lord_of_Life has quit (*.net *.split).
03:05:52 -!- shikhin has quit (*.net *.split).
03:05:53 -!- brandonson has quit (*.net *.split).
03:05:54 -!- erdic has quit (*.net *.split).
03:05:55 -!- sebbu has quit (*.net *.split).
03:05:55 -!- Taneb has quit (*.net *.split).
03:05:56 -!- Storkman_ has quit (*.net *.split).
03:05:58 -!- zemhill____ has quit (*.net *.split).
03:05:58 -!- lambdabot has quit (*.net *.split).
03:06:00 -!- Cale has quit (*.net *.split).
03:06:03 -!- fizzie has quit (*.net *.split).
03:06:03 -!- \oren\ has quit (*.net *.split).
03:06:03 -!- puck has quit (*.net *.split).
03:06:07 -!- trn has quit (*.net *.split).
03:06:36 -!- lynn_ has joined.
03:06:36 -!- Lord_of_Life has joined.
03:06:36 -!- shikhin has joined.
03:06:36 -!- brandonson has joined.
03:06:36 -!- erdic has joined.
03:06:36 -!- sebbu has joined.
03:06:36 -!- Taneb has joined.
03:06:36 -!- Storkman_ has joined.
03:06:36 -!- zemhill____ has joined.
03:06:36 -!- lambdabot has joined.
03:06:56 -!- puckipedia has joined.
03:07:59 -!- Cale has joined.
03:07:59 -!- fizzie has joined.
03:07:59 -!- \oren\ has joined.
03:07:59 -!- trn has joined.
03:25:34 -!- SakiiR1 has joined.
03:26:41 -!- SakiiR1 has quit (Killed (Sigyn (Spam is off topic on freenode.))).
03:51:05 -!- Sgeo_ has joined.
03:51:40 -!- Sgeo has quit (Ping timeout: 268 seconds).
04:20:36 -!- nct56 has joined.
04:44:50 -!- zzo38 has quit (Ping timeout: 272 seconds).
04:46:41 -!- Sgeo__ has joined.
04:49:01 -!- Sgeo_ has quit (Ping timeout: 268 seconds).
04:51:16 -!- Sgeo has joined.
04:52:06 -!- Sgeo__ has quit (Ping timeout: 268 seconds).
05:11:00 -!- nct56 has quit (Quit: Leaving).
06:08:45 -!- olsner has quit (Quit: ZNC - http://znc.in).
06:11:04 -!- olsner has joined.
06:35:37 <esowiki> [[Lambda Calculus to Brainfuck]] https://esolangs.org/w/index.php?diff=57431&oldid=57411 * A * (+106) /* Bored? Let's enjoy an example */
06:37:25 -!- xkapastel has quit (Quit: Connection closed for inactivity).
06:40:54 <esowiki> [[Lambda Calculus to Brainfuck]] https://esolangs.org/w/index.php?diff=57432&oldid=57431 * A * (+104)
06:51:30 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=57433&oldid=57307 * A * (+138) I have another attempt.
06:52:48 <esowiki> [[Lambda Calculus to Brainfuck]] https://esolangs.org/w/index.php?diff=57434&oldid=57432 * A * (+80)
06:54:06 -!- SopaXorzTaker has joined.
07:08:14 -!- tromp_ has joined.
07:09:08 -!- tromp has quit (Ping timeout: 276 seconds).
07:13:06 -!- Sgeo has quit (Ping timeout: 252 seconds).
07:17:05 -!- Sgeo has joined.
07:24:13 -!- ep100 has joined.
07:27:48 -!- imode has quit (Ping timeout: 260 seconds).
07:49:43 <esowiki> [[Ackermann function]] https://esolangs.org/w/index.php?diff=57435&oldid=8525 * A * (+263) And another implementation that exactly obeys the explanation on Wikipedia
07:52:12 <esowiki> [[Ackermann function]] https://esolangs.org/w/index.php?diff=57436&oldid=57435 * A * (-23)
07:55:42 <esowiki> [[Quine]] https://esolangs.org/w/index.php?diff=57437&oldid=11533 * A * (+71) On Wikipedia
08:00:22 -!- AnotherTest has joined.
08:11:23 -!- AnotherTest has quit (Ping timeout: 252 seconds).
08:23:08 -!- Phantom_Hoover has joined.
08:23:09 -!- Phantom_Hoover has quit (Changing host).
08:23:09 -!- Phantom_Hoover has joined.
08:38:27 -!- AnotherTest has joined.
08:58:42 -!- atslash has quit (Quit: Leaving).
09:01:42 -!- AnotherTest has quit (Ping timeout: 264 seconds).
09:05:35 -!- atslash has joined.
09:09:11 -!- AnotherTest has joined.
09:27:27 * Taneb morning
09:59:18 -!- ep100 has quit (Ping timeout: 264 seconds).
10:13:37 -!- arseniiv has joined.
10:24:35 -!- boily has joined.
10:44:19 -!- boily has quit (Quit: FORWARD CHICKEN).
10:44:23 -!- Fogity has quit (Ping timeout: 260 seconds).
10:44:43 -!- Fogity has joined.
10:58:34 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
11:19:23 -!- xkapastel has joined.
11:34:09 -!- Phantom_Hoover has quit (Ping timeout: 252 seconds).
11:50:01 -!- S_Gautam has joined.
13:16:14 <esowiki> [[Printf]] N https://esolangs.org/w/index.php?oldid=57438 * A * (+503) Created page with "printf is a simple programming language. ==Syntax== It is really VERY simple. It is a version of C in which you can't use any of the keywords and there is only a function cal..."
13:16:24 <esowiki> [[Printf]] https://esolangs.org/w/index.php?diff=57439&oldid=57438 * A * (+1)
13:17:06 <esowiki> [[Printf]] https://esolangs.org/w/index.php?diff=57440&oldid=57439 * A * (+0)
13:17:37 <esowiki> [[Printf]] https://esolangs.org/w/index.php?diff=57441&oldid=57440 * A * (+4)
13:25:05 -!- sleepnap has joined.
13:33:30 <esowiki> [[]] https://esolangs.org/w/index.php?diff=57442&oldid=57076 * Fogity * (+285) /* Example programs */ Added Ackermann function
13:55:28 -!- zzo38 has joined.
13:58:26 <esowiki> [[Printf]] https://esolangs.org/w/index.php?diff=57443&oldid=57441 * Zzo38 * (-103)
14:00:42 -!- Guest27432 has joined.
14:02:35 -!- Guest27432 has quit (Remote host closed the connection).
14:11:24 -!- cwre has joined.
14:16:04 -!- cwre has quit (Remote host closed the connection).
14:21:32 <esowiki> [[User talk:A]] https://esolangs.org/w/index.php?diff=57444&oldid=56687 * Arseniiv * (+396) /* Categorization */ new section
14:22:44 <arseniiv> hope it wasn’t too sarcastic :D
14:46:48 -!- AnotherTest has quit (Ping timeout: 244 seconds).
14:53:34 -!- Sgeo_ has joined.
14:55:42 -!- Sgeo has quit (Ping timeout: 264 seconds).
15:04:49 -!- rubdos25 has joined.
15:06:54 -!- rubdos25 has quit (Remote host closed the connection).
15:09:02 -!- AnotherTest has joined.
15:12:59 -!- S_Gautam has quit (Quit: Connection closed for inactivity).
15:22:41 -!- bradcomp has joined.
15:54:51 -!- tromp_ has quit (Remote host closed the connection).
16:17:12 -!- laerling has joined.
16:27:30 -!- tromp has joined.
16:31:51 -!- tromp has quit (Ping timeout: 252 seconds).
16:35:14 -!- tromp has joined.
16:37:10 -!- imode has joined.
16:44:54 -!- Fogity has quit (Ping timeout: 264 seconds).
16:48:15 -!- Fogity has joined.
16:55:23 -!- xkapastel has changed nick to parentbot.
16:55:45 -!- parentbot has changed nick to xkapastel.
16:56:49 -!- bradcomp has quit (Ping timeout: 252 seconds).
16:59:20 -!- xkapastel has quit.
17:03:06 -!- tromp has quit (Remote host closed the connection).
17:08:09 -!- bradcomp has joined.
17:23:50 -!- S_Gautam has joined.
17:24:34 -!- Phantom_Hoover has joined.
17:24:35 -!- Phantom_Hoover has quit (Changing host).
17:24:35 -!- Phantom_Hoover has joined.
17:29:39 -!- tromp has joined.
17:37:51 -!- laerling has quit (Ping timeout: 252 seconds).
17:40:28 -!- brandonson has quit (Ping timeout: 252 seconds).
17:43:30 -!- bradcomp has quit (Ping timeout: 244 seconds).
17:50:30 -!- bradcomp has joined.
17:57:28 -!- laerling has joined.
17:58:45 <zzo38> It isn't just window functions in the next version of SQLite, but also a few bug fixes including one having to do with upsert.
18:00:27 -!- ais523 has joined.
18:01:28 <ais523> has it been proven that Ⅎ requires parentheses to be Turing-complete?
18:04:14 <ais523> oh, hmm, maybe it's a PDA without them?
18:07:02 <ais523> yep, without parens a program always expands into a list of funtions that exist within the original program, evaluating consists of popping the first so many list entries and pushing the definition
18:07:06 <ais523> which can only see a finite depth into the stack
18:07:42 <ais523> and parens allow multiple functions to be grouped, Underload-style, so that list elements can become arbitrarily complex and thus break through the PDA barrier
18:16:27 <zzo38> This document https://sqlite.org/appfileformat.html mentions four kind of application file formats (fully custom, pile-of-files, wrapped-pile-of-files, SQLite), but also, a SQLite database can be used like wrapped-pile-of-files, and also you can have pile-of-wrapped-pile-of-files, and Microsoft Word format is a wrapped-pile-of-files too actually.
18:17:47 <zzo38> What kind os best depend on the use.
18:22:43 -!- wob_jonas has joined.
18:24:38 -!- brandonson has joined.
18:24:53 -!- LKoen has joined.
18:25:10 <wob_jonas> ais523: I think Ⅎ requires one level of parenthesis, but not more, to be TC, but I'm not quite sure.
18:26:34 <wob_jonas> I've been thinking somewhat of a different language with the same goal (the minimal essence of functional programming), which has a somewhat similar goal, but is clearly not the same language.
18:27:30 <wob_jonas> That language is more complicated to define, because it needs more primitives, but might be slightly easier to implement.
18:28:09 <wob_jonas> Especially easier to implement if you want non-conservative garbage collection for it.
18:29:40 <ais523> wob_jonas: one is enough, yes
18:29:43 <ais523> you can define s with that
18:29:45 <ais523> and k doesn't need any
18:30:38 <wob_jonas> I don't have a finalized canon version of my language though, only vague ideas.
18:31:14 <wob_jonas> My goal was more a compromise towards being very easy to implement, rather than "the essence".
18:32:00 <wob_jonas> Also more compromise to being somewhat easy to use and somewhat efficient, although still not a production language.
18:32:38 <wob_jonas> More like a toy language to illustrate language design and implementing an interpreter and programs in it.
18:33:26 <ais523> come to think of it, this implies that Ⅎ is TC with exactly one pair of parentheses in the whole program
18:34:10 <wob_jonas> I guess Consumer Society would replace its goals in parts, although that one is more esoteric in design and less easy to implement and less easy to use.
18:34:14 <shachaf> ais523: I finally got around to reading about ALGOL 68.
18:34:27 <wob_jonas> ais523: wow
18:34:28 <shachaf> Seems like a good language.
18:34:34 <wob_jonas> that's surprising, but sounds true
18:34:35 <shachaf> What have PL people done anything in the past 50 years?
18:34:57 <ais523> Algol 68 has some really interesting ideas, but is possibly somewhat impractical
18:35:05 <ais523> I think it was a failure at the time because nobody could figure out how to implement it
18:35:12 <ais523> with reasonable efficiency
18:35:59 <ais523> but yes, it still looks more advanced in a way than "mainstream" imperative languages, we've spent the last 50 years just catching back up to it
18:36:37 <wob_jonas> shachaf: C (which was a low level language better aligned to the computers of that era), modern C++ (more powerful and expressive than C), and rust (tries to redo stupid historical problems in C++ while having somewhat the same goals, it's a bit young yet and not fully mature, but otoh C++ is now overmature)
18:36:44 <ais523> and the cutting-edge research has mostly been in different paradigms
18:37:04 <shachaf> wob_jonas: Algol 68 had all sorts of great features that C and C++ don't have.
18:37:24 <wob_jonas> shachaf: all three of these have similar paradigms and goals as algol and fortran I think, but are updated with what can be done on more modern machines
18:37:33 <wob_jonas> shachaf: can you be more specific? I don't know algol 68
18:37:37 <shachaf> It was admittedly garbage collected, which is pretty odd for 50 years ago (and maybe odd for today).
18:37:39 <wob_jonas> what great features specifically?
18:37:52 <shachaf> https://en.wikipedia.org/wiki/Comparison_of_ALGOL_68_and_C%2B%2B talks about some of it.
18:38:04 <wob_jonas> shachaf: I don't think it was odd 50 years ago. wasn't that already when lisp machines with gc were established?
18:38:15 <wob_jonas> mind you, some of them only had gc for fixed-size conses
18:38:17 <wob_jonas> but still
18:38:49 <wob_jonas> prolog has gc, but is newer
18:38:50 <shachaf> I mean, odd for a language that might be in competition with C.
18:39:07 <shachaf> wob_jonas: Also thanks for mentioning Geo, it's more similar to the things I was looking for than I though.
18:39:25 <wob_jonas> shachaf: I don't think C was meant to be in direct competition with algol
18:39:48 <wob_jonas> it was certainly inspired, but then most programming languages are inspired by the other popular programming languages that already existed
18:39:49 <shachaf> I figured out what "break", "continue", "return" etc. mean, I don't remember whether I mentioned.
18:39:52 <ais523> C is a B derivative that adds a type system
18:40:02 <ais523> and B was focused on being as easy to implement as possible
18:40:42 <wob_jonas> shachaf: break, continue, return in what? I admit geo's documentation isn't really complete, and in particular I have no idea what the precise semantics of "var" declarations are.
18:40:57 <shachaf> When you have labeled exit, break/continue/return all just mean exit to a particular label.
18:41:10 <wob_jonas> Also, it's a weird toy language that I made long ago and frozen, it's not a good language, I don't stand by the decisions I made for it anymore.
18:41:21 <wob_jonas> shachaf: yeah, we talked aboutr that
18:41:31 <shachaf> OK, I didn't remember whether I put it that way.
18:41:42 <shachaf> So "return x;" just means "exit @return_label x;"
18:42:24 <shachaf> Algol 68 had nonlocal goto. So strange.
18:42:38 <shachaf> ais523: Was it Algol 68 that you mentioned call-by-name semantics for not long ago?
18:42:58 <wob_jonas> shachaf: I think I mentioned that the C standard and IIRC the C++ standard *define* them that way. the full definition is tricky because they act on both while/do-while/for loops and switches, but
18:43:22 <wob_jonas> gotos are certainly the easiest way to define them in those languages, because they match how they affect the lexical scope and runtime scope of variables.
18:43:30 <wob_jonas> s/runtime scope/runtime liveness/
18:44:04 <wob_jonas> And the construction and deconstruction of variables and temporaries too in C++.
18:45:55 <wob_jonas> I'm saying this for C and C++ in particular, it's slightly less true in perl, and even less true in ruby and rust.
18:46:10 <shachaf> Anyway the reason I ended up reading about Algol 68 was that I was trying to figure out what lvalues are.
18:46:25 <shachaf> C has the notion of lvalues and also of pointers, and they're pretty similar.
18:46:45 <wob_jonas> ais523: what do you mean by "call-by-name"? do you mean just passing function arguments by a pointer/reference to them? because I think fortran has that.
18:46:59 -!- SopaXorzTaker has quit (Remote host closed the connection).
18:47:07 <shachaf> I remember the example ais523 gave was pretty surprising but I don't remember the details now.
18:47:11 <wob_jonas> shachaf: that's tricky because every language treats lvalues differently.
18:47:44 <shachaf> In Algol 68, as far as I can tell, you don't don't ever declare mutable variables exactly.
18:47:48 <wob_jonas> shachaf: what do you mean by nonlocal goto? goto across function boundaries?
18:48:12 <shachaf> You can pass a goto label as an argument to a function, and it looks to it like a function pointer.
18:48:35 <wob_jonas> shachaf: oh, computed/indirect goto. wow.
18:48:53 <shachaf> So the equivalent of "int x = 5;" is something like "int *const x = stack_allocate; *x = 5;"
18:48:58 <shachaf> (With a shorthand syntax.)b
18:49:43 <wob_jonas> no direct mutable variables is surprising for that age, but I'm not sure if it's a feature over C and C++, because you can use one-element arrays in C and references in C++ in a somewhat similar way.
18:50:14 <shachaf> C++ references are something weird and suspicious.
18:50:29 <wob_jonas> in fact there's a trick in C where a library header defines an opaque type as a one-element array if such values are to be passed to library functions by reference but can be allocated on the stack.
18:50:40 <wob_jonas> GMP does that for example
18:51:01 <wob_jonas> shachaf: they're weird, but part of the weirdness is that it took a long time to figure out the right semantics, so there are some historical mistakes on them
18:51:44 <shachaf> I'm not so sure they've figured out the right semantics anyway.
18:51:48 <wob_jonas> done right I think references are a good tool, although one that is prone to overusing
18:51:59 <wob_jonas> shachaf: they're working on it, and some of it is too late to fix
18:52:10 <wob_jonas> some of it they're still trying to add to future versions
18:52:21 <wob_jonas> there are multiple problems to be solved
18:52:57 <wob_jonas> mostly connected with efficient handling of refs to data structures that are not trivial to copy or move or initialize empty or destroy
18:53:19 <wob_jonas> but also with just the current syntax and library support not being good enough
18:53:27 <shachaf> C++ is so complicated.
18:53:37 <shachaf> I like the Algol system because it seems simpler than the C system.
18:53:55 <wob_jonas> and how they combine with more questionable features, such as the new initializer-list-arguments and variadic templates
18:54:06 <shachaf> Though the implicit coercions between ref int and int and so on are suspicious.
18:54:42 <wob_jonas> shachaf: but does the algol system has any inefficiencies, like things you can't do efficiently because of them or that are hard to do efficiently?
18:55:18 <wob_jonas> especially in low-level programs that want to be efficient at runtime
18:55:22 <wob_jonas> which C wants to support
18:55:38 <shachaf> I think it'd be the same?
18:55:57 <wob_jonas> I don't know algol, that's why I'm asking
18:56:33 <shachaf> I don't either.
18:58:10 <wob_jonas> Rust references are very different, they're less powerful than the C++ ones (at least currently, they're working on some of that), and have very different kinds of magic from the C++ references (and I hate some of the rust magic, but some of it is about traits, and that magic would be already there without references, references just make it worse)
18:59:08 <shachaf> Rust has references?
18:59:15 <shachaf> I thought they just have different kinds of pointers.
19:00:36 <wob_jonas> shachaf: sort of. there's something they call references, which differ from the pointers it also has (and the pointers differ from C pointers, but that's a different question), they have very different goals from C++ references, but some of the goals are shared.
19:03:03 <ais523> wob_jonas: here's an example of call-by-name (pseudocode C-like syntax): int x = 3; int f(int y) {x = 5; return y+1;} print(f(x+4));
19:03:09 <wob_jonas> mind you, C pointers are easy to almost simulate with rust pointers, so rust is strictly more powerful in them, with the exception that rust doesn't have an offsetof
19:03:11 <ais523> this prints 10
19:03:25 <ais523> well, Rust has C pointers too
19:03:52 <wob_jonas> ais523: no, it has rust pointers, which are similar to C pointers but differ in two ways
19:04:06 <wob_jonas> well, two ways not counting the lack of offsetof
19:04:12 <ais523> wob_jonas: you can think of call-by-name as effectively passing the concept of "x+4" as an argument, as opposed to 7 (i.e. the value of x+4)
19:04:55 <wob_jonas> ais523: wow, that is strange to have in such an old language, especially if it has that by default. that means making automatic closures.
19:05:22 <wob_jonas> languages took a lot of time until they started to support even explicit closures, except for lisp, most of which had it from the start
19:05:29 <wob_jonas> hmm... I'm not sure
19:05:34 <wob_jonas> maybe lisp didn't have them from the start
19:05:57 <ais523> I don't think it requires closures? it requires some sort of lightweight functional thing, but I don't think it's a closure
19:06:02 <ais523> because it doesn't capture anything
19:06:42 <ais523> err, unless you allow recursion, in which case it captures the current stack depth so that it can disambiguate which version of a local variable you mean
19:06:43 <wob_jonas> both scheme and common lisp has them now, but in scheme and haskell and standard ml, function references and named functions have close to the same syntax and behavior, whereas in common lisp they have different syntax, and in prolog they have different syntax and behavior
19:08:01 <wob_jonas> ais523: it captures at least a pointer to stack. some C++ closures and gcc C closures are implemented that way, although C++ doesn't strictly speaking guarantees this,
19:08:22 <ais523> yes, I think "captures a pointer to stack" is the right way to think about this
19:08:41 <ais523> so it's the same concept as a gcc nested function
19:08:53 <ais523> which is also suffering from the lack of a good name
19:09:01 <wob_jonas> although C++/rust closures have a code size hit because they're specialized for each closure body, whereas gcc C closures have a runtime hit, because they're implemented in a way that that their calling convention is compatible with plain C functions
19:09:15 <ais523> right, the trampoline
19:10:56 <shachaf> ais523: Are you sure Algol 68 does that?
19:10:59 <wob_jonas> there's also the part where gcc C functions require an executable stack, which people hate these days, but that wasn't yet the case when gcc C closures were invented, because back then most CPU MMUs didn't support non-executable readable memory areas on a flat address arch
19:11:16 <ais523> shachaf: Algol 68 doesn't do that, call-by-name is an Algol 60 thing
19:11:26 <shachaf> Oh.
19:11:33 <ais523> Algol 68 changed to call-by-value because people found call-by-name too confusing and too hard to implement
19:11:36 <wob_jonas> and I think gcc's primary target were flat address CPUs even back then
19:12:15 <shachaf> That makes sense.
19:12:18 <wob_jonas> as opposed to segmented ones, which did support non-executable readable segments, which in fact was easy to implement in 286 since they already had to support at least three differently executable segments, if not four
19:12:22 <wob_jonas> more I think
19:12:44 <wob_jonas> 16 bit versus 32 bit, and normal executable segments vs interrupt gates vs system call gates, and I think that's partly orthogonal
19:12:55 <wob_jonas> 32 bit only on the 386 I guess
19:13:47 <wob_jonas> ais523: I believe fortran has had call by reference from the start, which is easier. it just involves passing a transparent-syntax pointer to the argument, even if the argument is a temporary
19:14:35 <ais523> "call-by-reference" is basically just call-by-lvalue (whereas "call-by-value" is call-by-rvalue)
19:14:43 <wob_jonas> programming languages stopped that when functions got cheap enough that people started to make a lot of them, and call by ref became a severe runtime performance hit, especially because cross-compilation-unit it can't be optimized away
19:14:54 <wob_jonas> ais523: yes.
19:14:54 <ais523> by-reference and by-value are basically identical, just differ in whether it's an lvalue or rvalue you're passing
19:15:18 <shachaf> I'm a bit skeptical of lvalues, I think.
19:15:22 <ais523> I think Perl is a good example of an actually call-by-reference language
19:15:29 <ais523> although it's also capable of return-by-reference, which is just bizarre
19:15:39 <wob_jonas> yes, but exclusive call-by-reference is not a good idea if you want efficient low-level programming, which was a goal of C from the start
19:15:57 <wob_jonas> ais523: ... perl is strange though, also for historical reasons
19:16:02 <ais523> the only use for return-by-reference I've discovered so far is the array syntax in A Pear Tree
19:16:51 <shachaf> What is return-by-reference?
19:16:56 <ais523> Perl parses "x[3]" as a call to the function x whose argument is an anonymous array reference to an array containing only the element 3
19:16:57 <zzo38> BASIC does call by reference normally but you can specify BYVAL if you want by values instead
19:17:08 <shachaf> C++ operator[] returns references which seems like one of the only justifications for having references maybe.
19:17:19 <ais523> but it's actually possible to write this function such that you can make it return the array element as an lvalue, so you can still assign to it
19:17:25 <wob_jonas> ais523: it's even more strange that perl has had builtins returning magical references, namely vec and substr, before it had user-definable magic scalars
19:17:27 <arseniiv> ais523: come to think of it, this implies that Ⅎ is TC with exactly one pair of parentheses in the whole program => great and neat, I’ll include it in the article with the now obvious s-k proof
19:17:55 <wob_jonas> I think they added that syntax for substr because BASIC had it (at least most dialects, some BASICs don't even have strings)
19:18:04 <ais523> wob_jonas: @_ is magical too, stealing the magic from @_ is a fun way to do programming puzzles
19:18:13 <wob_jonas> ais523: yeah, I know
19:18:19 <wob_jonas> I have a link for that too
19:19:15 <zzo38> (BYVAL is only valid for numbers though; it cannot be used with strings, structures, or arrays)
19:21:32 <shachaf> So a pointer is a thing whose value is a memory location; an lvalue is a memory location. Is that right?
19:23:25 <wob_jonas> ais523: https://www.perlmonks.com/?node_id=302287 question 1 and 3, https://www.perlmonks.com/?node_id=376362 exercise 6 IIRC
19:23:26 <shachaf> Or maybe an lvalue is a thing that has a memory location, instead.
19:23:36 <wob_jonas> about perl @_ magic
19:23:59 <wob_jonas> shachaf: again, in what language?
19:24:18 <shachaf> C.
19:24:51 <wob_jonas> shachaf: in that case, for C pointers to objects and C lvalues, yes, for pointers to functions, usually but not necessarily
19:25:50 <wob_jonas> and the type of the pointer may restrict what memory locations are allowed, but a void * can point to any data or function (except bitfields) and you can losslessly use it that way
19:26:12 -!- nfd has quit (Ping timeout: 252 seconds).
19:26:25 <wob_jonas> and a struct {} * can point to any structure or union (which may be a bit more restrictive on crazy architectures)
19:27:08 <wob_jonas> shachaf: C technically has lvalues to bitfields, and you can't have pointers to them
19:27:24 <wob_jonas> but they're rare and I hate them
19:27:59 <wob_jonas> (I hate bitfields, and they'd be basically unusable without lvalues.)
19:28:59 <wob_jonas> obviously, "a memory location" is quite general, because C is defined in such a way that you can store practically anything in a memory location, possibly with some indirection involved
19:29:07 <wob_jonas> because you can allocate new memory locations and put anything in them
19:29:37 <\oren\> char * is actually the most general pointer
19:29:42 <\oren\> not void *
19:30:00 <ais523> wob_jonas: I already know how Perl @_ magic works
19:30:04 <ais523> it's possibly more insane than you'd think
19:30:16 <wob_jonas> ais523: sure, I'm just showing some examples of its insane uses
19:30:20 <\oren\> specifically, functions like memcpy take char * not void *
19:30:21 <shachaf> \oren\: did you solve your build system
19:30:24 <ais523> incidentally, the internal implementation of Perl arrays is sufficiently general to allow them to contain other arrays, and even hashes
19:30:30 <ais523> (not references to them, the array/hash itself)
19:30:35 <\oren\> shachaf: no
19:30:39 <ais523> but I'm not sure you can make that happen without XS
19:30:42 <wob_jonas> I might not know how insane it is, I know recent perl has specific optimizations to avoid the slowdown with @_'s crazyness in many cases when that's not needed
19:30:51 <\oren\> shachaf: in fact it takes >12 hours now
19:32:00 <wob_jonas> ais523: I think that would break invariants badly, but otoh arbitrary aliasing of scalars usually doesn't, it only breaks some optimizations, and there are some types of aliasing you can only do with XS or non-core modules.
19:32:16 <ais523> wob_jonas: with that first link, an "intended solution" to question 5 actually got added to the language, presumably after that question was asked
19:33:35 <ais523> wob_jonas: haha, I like the solution to exercise 1 that sets $[
19:33:35 <wob_jonas> ais523: even its implementation? this question allows you to use undocumented features or bugs, and refers to a specific version of perl
19:33:58 <ais523> wob_jonas: it'd be in a later version
19:34:30 <ais523> presumably this was as a replacement for the "my $x if 0;" bug
19:35:37 <wob_jonas> ais523: how do you know what the intended solutions were? I'm not sure xmath ever said explicitly, he only gave hints, and he admitted that people found better solutions for some of the exercises
19:36:02 <ais523> wob_jonas: you're misreading my comment
19:36:18 <ais523> I mean that Perl now has an intentional way to create a static variable lexically scoped to a single subroutine
19:36:20 <wob_jonas> oh, I see
19:36:28 <wob_jonas> "an" intended solution, not "the" intended solution
19:36:34 <wob_jonas> yes, that's "scope"
19:37:01 -!- oerjan has joined.
19:37:41 <wob_jonas> no
19:37:42 <wob_jonas> "state"
19:37:45 <wob_jonas> not "scope"
19:42:55 -!- LKoen_ has joined.
19:44:25 <oerjan> wob_jonas: hm i don't know why HackEso didn't respond to you, then.
19:44:29 <wob_jonas> those crazy old perl puzzles were fun, xmath even credits me with finding an alternate solution he didn't know of
19:45:02 <wob_jonas> oerjan: it might have been an error on my part, like typoing his name (although I think I checked) or messaging him before I identified to freenode
19:45:27 -!- LKoen has quit (Ping timeout: 252 seconds).
19:45:30 <wob_jonas> since it did reply to me later in similar conditions, it's probably solved
19:45:34 <wob_jonas> whatever it was
19:45:38 <wob_jonas> in fact let me ask him now
19:45:51 <wob_jonas> does answer me now
19:45:53 <wob_jonas> and quickly too
19:45:59 <oerjan> good
19:46:14 <wob_jonas> doesn't take twenty seconds to get swapped in like hackeso did
19:46:19 <wob_jonas> it was mostly an upgrade
19:46:29 <oerjan> indeed
19:47:02 <wob_jonas> I should try to install 7za to it so I can extract compressed files downloaded with `fetch more easily
19:47:13 <wob_jonas> I tried for hackego but failed
19:47:19 <wob_jonas> maybe it will work if I tried again
19:47:23 <wob_jonas> but I'm lazy to try now
19:47:30 <wob_jonas> I tried to install a binary
19:47:41 <wob_jonas> but I think there was some incompatibility with system libraries
19:50:08 <wob_jonas> I still can't tell if I should be proud or ashamed of having gotten two consecutive quotes in the hackeso quotedb
19:50:36 <esowiki> [[]] M https://esolangs.org/w/index.php?diff=57445&oldid=57424 * Arseniiv * (+269) more about power
19:51:38 <esowiki> [[]] M https://esolangs.org/w/index.php?diff=57446&oldid=57445 * Arseniiv * (+6) a single word is worth more than a thousand dollars (no)
19:54:38 <ais523> why is that think "usability unknown"?
19:54:43 <wob_jonas> Totally different topic. I'm re-reading Leon Lenderman's pop science book.
19:54:52 <ais523> esoprogrammers are good at using things, if it's TC it's almost certainly usable
19:55:13 <ais523> I guess exceptions could be languages which were inherently very slow, or the like
19:55:14 <arseniiv> why then there is that category?
19:55:28 <ais523> arseniiv: it's for languages where we don't know if you can produce usable programs in them at all
19:55:37 <arseniiv> aaah
19:55:51 <wob_jonas> For much of the book, he talks about his carreer as the director of a particle accelerator, including being responsible for keeping its budget, and then about convincing president Reagan to fund a more expensive future particle accelerator from state funds.
19:55:55 <ais523> there are some languages which are sub-TC but obviously usable, like finite-tape brainfuck
19:56:12 <ais523> but there are some languages which we're not sure whether they approach any sort of meaningful computational class
19:56:30 <arseniiv> then I’ll delete that category from both Ⅎ and YE…A
19:57:22 <wob_jonas> Then a bit later, he gives the simulee that the Big Bang is a "particle-accelerator without a budget constraint", and explains that astrophisicists are examining its consequences with space-based telescopes and making a model about it and that the physics research for astrophysics and particle physics connects.
19:57:35 <esowiki> [[YEOOIIOOIOA]] M https://esolangs.org/w/index.php?diff=57447&oldid=54939 * Arseniiv * (-31) usability known!
19:58:11 <wob_jonas> Am I the only one who finds the "without budget constraints" part strange? Those space-based telescopes cost a ton of money, and Lenderman must have been familiar with that.
19:58:17 <esowiki> [[]] M https://esolangs.org/w/index.php?diff=57448&oldid=57446 * Arseniiv * (-31) it is completely usable when or if implemented
19:58:52 <arseniiv> btw https://esolangs.org/wiki/Category:Usability_unknown is vague on the topic
19:59:26 <arseniiv> someone should write something clearer, then
19:59:31 <wob_jonas> arseniiv: try https://esolangs.org/wiki/Esolang:Categorization , it often gives better desc of the categories
20:00:10 <arseniiv> wob_jonas: not much clearer(
20:00:39 <arseniiv> I remember I’ve read all that thoroughly when writing YE…A article :)
20:01:24 <wob_jonas> I keep reading that page just to remember what categories we use. I've made a page that has nine categories.
20:01:38 <wob_jonas> https://esolangs.org/wiki/Game_of_Life
20:01:41 <arseniiv> oh
20:02:01 <wob_jonas> well, not made, but extended seriously
20:02:42 <wob_jonas> it's still short, but it was even shorter
20:02:53 <wob_jonas> and it's an important language because of its popularity
20:02:58 <arseniiv> btw doesn’t “Turing tarpits” imply “Turing-complete” (categorizationally speaking)?
20:03:04 <wob_jonas> you know, like Intercal
20:03:19 <arseniiv> yeah, GoL is
20:03:26 <arseniiv> …something…
20:03:28 <wob_jonas> arseniiv: yes, but we still add both categories to most lang pages apparently
20:03:35 <ais523> arseniiv: it does, but I think we decided to put both categories on
20:03:38 <ais523> there was a discussion about it a while back
20:03:50 <wob_jonas> there are a few pages that only have the tarpit, but they might be mistakes
20:03:59 <wob_jonas> like, there are language pages still missing [[Category:Languages]]
20:04:06 <wob_jonas> which is a mistake too
20:04:30 <esowiki> [[IPVL]] M https://esolangs.org/w/index.php?diff=57449&oldid=56995 * Oerjan * (-27) Eviscerate non-category
20:04:42 <wob_jonas> I wish the main namespace was reserved for languages (plus redirects), but we don't want to change that now
20:05:06 -!- xkapastel has joined.
20:05:21 <arseniiv> though they say when Conway got to know High life, he said that in a fair world it should be named the life instead of the usual one
20:05:57 <arseniiv> there are a few pages that only have the tarpit, but they might be mistakes => oh then I’ll add this one too
20:06:00 <wob_jonas> just like how the main namespace of Wiktionary is reserved for headword entries (so much that [[Main Page]] is a redirect IIRC), the one for Wikimedia Commons is reserved for galleries, and the one for wikidata is reserved for entries that aren't even in wikitext format
20:06:28 <arseniiv> and the one for wikidata is reserved for entries that aren't even in wikitext format => :D hehe
20:06:32 <esowiki> [[]] M https://esolangs.org/w/index.php?diff=57450&oldid=57159 * Oerjan * (-27) Eviscerate non-category
20:06:48 <wob_jonas> arseniiv: don't believe that to me btw, believe that to ais523 or other trusted people
20:07:56 <wob_jonas> arseniiv: well, it's fair, because that's the main purpose and the largest amount of entries in wikidata, and those entries are still "wiki" in the sense that they're easy to edit by anyone and have full dated version history unfalsifiable by non-admis readable to everyone
20:08:10 <esowiki> [[Printf]] M https://esolangs.org/w/index.php?diff=57451&oldid=57443 * Oerjan * (-27) No such thing
20:08:48 <arseniiv> wob_jonas: believe that to ais523 or other trusted people => reasonable precaution (however I don’t think you’re that far from the consensus)
20:09:16 <wob_jonas> arseniiv: Commons should probably have had media as its main namespace, but they'd have to modify the mediawiki software for that, which probably wasn't worth the trouble, since media files in their own separate namespace was already supported by default in mediawiki (although commons has some enchancements since)
20:10:51 <wob_jonas> also, Commons isn't as strange as Wikidata: the media still all come with a description page in wikitext format, which can be edited and read and version historied and dump downloaded and categorized independently from the media content, and I believe you can even create a page in the namespace with zero versions of the media content uploaded, only
20:10:51 <wob_jonas> shouldn't.
20:12:38 <wob_jonas> arseniiv: ais and the other wiki admins work hard to enforce the conventions
20:13:04 <wob_jonas> arseniiv: by the way, I wanted to ask, where is your nick from, is there a canon pronunciation, and does the "iiv" part want to be a roman numeral?
20:13:50 <arseniiv> ah this is asked sometimes!
20:14:38 <wob_jonas> I'd note that tom7 also calls himself Tom Murphy VII, and explains why on his homepage
20:14:49 <wob_jonas> but iiv isn't a real roman numeral
20:14:52 <wob_jonas> so that's stranger
20:14:55 <wob_jonas> iv could still be
20:15:03 <wob_jonas> which part is asked?
20:15:38 <wob_jonas> people often ask these questions about nicks of various people online, so it's not too surprising
20:15:58 <esowiki> [[Ackermann function]] https://esolangs.org/w/index.php?diff=57452&oldid=57436 * Oerjan * (-213) There's no real difference other than for negatives, so instead change the shorter one to use unsigned.
20:17:46 <wob_jonas> I usually get asked if I named myself of the band called "Jonas Brothers" (no, no relation, I hadn't even heard of them until I started using this nick) or
20:18:07 <wob_jonas> what the "b_" means (nothing much, I just wanted a distinguishing prefix because I previously used "jonas" and still use it on some forums (in the broad sense), but I like the letter "b", it's not too common, and it is the only letter to appear twice in my real world name)
20:18:39 <wob_jonas> They rarely ask how I pronounce it or why "jonas", but sometimes I volunteer to tell the latter anyway.
20:18:49 <esowiki> [[Brainfuck]] https://esolangs.org/w/index.php?diff=57453&oldid=57433 * Oerjan * (-138) This section is for proofs, let's not add unfinished stuff.
20:19:16 <wob_jonas> Although some forums have a general thread addressing every user in general for what their nick origin is, so that could count.
20:20:21 <wob_jonas> On perlmonks the respective thread was for a while called "the node that must not be linked" because it was too long and so put a large demand on the server when many people clicked on a link to it at the same time
20:20:53 <ais523> hmm, now I wonder how easy it would be to make forum software which worked by editing a static HTML page whenever a comment was posted, incrementally
20:20:57 <wob_jonas> since threads in that forum are hierarchical, but don't have a paging system, so they show every reply up to a certain depth when you load a thread in the default view
20:22:21 * oerjan assumed arseniiv was a russian surname
20:22:33 <wob_jonas> I hate interfaces that have a stupid paging system that shows too few entries of a list and are hard to navigate, in general, not just for forum threads. I understand why you need restrictions on how much you of a list show to conserve server and client resources, but many software are overdoing it.
20:22:36 <arseniiv> originally, it came from my first name Arseni[i] and a letter from a patronymic (IDK why I did that, it was long ago), *but* it’s completely normal to read it as arseni⋅iv, as when it’s a Roman numeral (but what would it mean? It could mean anything or just itself, I don’t mean)
20:22:36 <arseniiv> and for the pronunciation part, I myself use something like /arsʲenʲiˈiv/ (whch is somewhat strange as my name is stressed on the second syllable)
20:23:36 <wob_jonas> arseniiv: besides tom7, ais523 and sam512 use numerals in their nick. (sam512 has changed his nick to qntm since). it's sort of common to use numerals in nicks.
20:24:01 <arseniiv> oerjan: haha maybe there is one like this
20:24:09 <wob_jonas> Arsenii is a given name? interesting
20:24:26 <wob_jonas> oerjan: did he say it's russian?
20:24:32 <arseniiv> wait does qntm appear here?
20:24:42 <wob_jonas> arseniiv: he doesn't, and he's not related to esolangs
20:24:49 <arseniiv> ah
20:25:06 <arseniiv> what a pity he doesn’t
20:25:26 <wob_jonas> arseniiv: he's mostly known as a sci-fi writer who publishes short story series online, and has an old webcomic, his homepage is http://qntm.org/
20:25:40 <arseniiv> yeah I know :)
20:25:46 <wob_jonas> but he has a presence on the internet and reacts to emails and comments and messages
20:25:54 <arseniiv> we’ve discussed this even(?)
20:25:58 <oerjan> wob_jonas: well it looks russian, and he is.
20:26:26 <arseniiv> I wrote him a email once, but I fear it was considered spam, as he hadn’t replied
20:28:30 <wob_jonas> ok, maybe he only _used to_ react to emails, but he still gives his email address on https://qntm.org/contact and reacts to comments on his webpage. What he has redacted is (what I presume is) his real name.
20:28:45 <wob_jonas> And also the old alias "sam523" from qntm now.
20:28:57 <wob_jonas> you can still find traces to it in some links, but they're better hidden.
20:29:29 <arseniiv> yes he seemed to write it was his name
20:30:02 <wob_jonas> I dunno why he does that, since people know him under both of those, and this makes it harder to use a web search to find his webpage based on them (though probably still not too hard)
20:30:38 <wob_jonas> I know them under those names from back when he used both and haven't started using qntm as a nick
20:31:09 <wob_jonas> on the other hand, David Madore uses three names too, but is pretty public about all three of them
20:31:14 <arseniiv> IIRC he was posting Ed stories somewhere as if it was a diary, so a reader doesn’t suspect it’s a story (unles she have read other ones) and then woah! is it real?
20:31:19 <wob_jonas> (and even his middle name)(
20:31:40 <wob_jonas> arseniiv: um... what do you mean it is real? I'm quite sure they're fictional
20:31:52 <arseniiv> indeed they are
20:32:01 <wob_jonas> and I don't think he ever claimed they weren't, out of universe
20:32:39 <arseniiv> I mean he used a trope when eh I don’t know how it’s descripted in a small count of words
20:32:52 <wob_jonas> he posted them on everything2 originally, and I think he still uses the nick sam512 there, plus he has a story about a robot called "sam512", and mentions his real name in his webcomic among others
20:33:27 <arseniiv> the one about robot was after all that, wasn’t it?
20:34:03 <arseniiv> after everything2 I mean
20:34:20 <arseniiv> btw I don’t get hyperlinking in everything2
20:34:28 <arseniiv> it’s strange
20:36:26 <wob_jonas> arseniiv: it's an odd system, yes. but then consider how mandatory automatic hyperlinks to CamelCase words and recommended CamelCase page titles was quite popular back then, eg. the c3 wiki, tiki wiki, and IIRC Wikipedia at its start did that too, and it's a pretty stupid idea, and tiki wiki's stupid formatter rules make it even worse
20:38:28 -!- ais523 has quit (Remote host closed the connection).
20:38:31 <wob_jonas> in particular, tiki wiki has several automatic formatting features that come up too often in normal text where you don't want them, but it's hard to escape them, because you have to use a bang prefix to escape them, and you have to know the precise formatter rules because if you add a bang prefix to anything that wouldn't be special formatting, it
20:38:31 <wob_jonas> will show up as a literal bang,
20:38:48 -!- ais523 has joined.
20:38:55 <arseniiv> I was to say, last time I’ve seen it, there were links to common words, and what they mean is a mystery until you follow them
20:39:02 <wob_jonas> these features being at least automatic CamelCase links, superscript formatting of text between carets, and some bracketed stuff
20:39:46 <arseniiv> although CamelCase links are definitely not a great idea, agree
20:40:16 <wob_jonas> mediawiki has much fewer of these stupid formatting features that stand in your way, and much better ways to escape them, although formatting everything indented with spaces as pre blocks is probably a mistake in mediawiki
20:40:44 <arseniiv> bang bang my wiki shot me down
20:40:47 <wob_jonas> arseniiv: they wouldn't be such a bad idea if they were easier to escape, or if they only showed up when the page exists and when you're previewing a page you're editing.
20:41:23 <wob_jonas> the problem is that no wiki is perfect, and most of them are very hard on the system administrators that have to run them, harder than on useres
20:41:51 <arseniiv> (btw how good do you think is Markdown (with common extras) for wikis?)
20:42:55 <wob_jonas> and I've seen many different types of wikis, including two different ones I used as an internal wiki at my previous job, although only from the user and a bit from the moderator side, not from the system administrator side
20:43:00 <wob_jonas> one of them was tiki wiki
20:43:54 <wob_jonas> arseniiv: I don't much like Markdown, and I specifically dislike the StackExchange formatter, which is based on it but changed a lot, but it's better than some other wikis, and still better than tiki wiki
20:45:00 <wob_jonas> I especially hate the variants of the formatter that StackExchange uses for chat lines and for comments resp (as opposed to questions and answers)
20:46:30 <zzo38> I don't like Markdown much either; I like the MediaWiki format
20:47:27 <wob_jonas> What I particularly like in MediaWiki is that it allows you to fall back to a large subset of HTML syntax for when its other syntax are hard to use for the formatting you want. I think zzo38 doesn't like this part.
20:48:09 <wob_jonas> This is convenient because the HTML syntax is sometimes more general, and many people already know enough of it to be able to use some of it on mediawiki without having to read that part of mediawiki manual.
20:48:36 <ais523> wob_jonas: this is also the intended way to do anything nontrivial in Markdown
20:48:37 <wob_jonas> StackExchange's Markdown supports only a smaller subset of HTML, although that is partly deliberate, to restrict what formatting you're allowed to use.
20:48:42 -!- bradcomp has quit (Ping timeout: 252 seconds).
20:48:43 <ais523> which defeats one of the main points of Markdown
20:49:20 <wob_jonas> ais523: I don't know. I think it's a good idea for a wiki formatting language in general, it's just that Markdown's goals are stupid.
20:49:25 <ais523> IMO there are three major goals in a markup syntax: a) be easy/fast to write, b) be readable in the raw markup without rendering it (ideally the markup should look very like the end result), c) be fully general
20:49:45 <ais523> markdown fails somewhat at all three
20:49:59 <ais523> although its main high point is a) as long as you're doing simple things
20:50:22 <ais523> I think it might be interesting to create one that goes all-in on b) and c), perhaps even using things like trailing whitespace to disambiguate
20:50:36 <wob_jonas> If (or when) I design a wiki syntax, then I'll make it mostly based on HTML, with some convenient shorthands like in mediawiki, but even more than mediawiki, because I'll add fewer convenience shortcuts, and I'll make the syntax of custom additions be similar in syntax to HTML.
20:51:06 <wob_jonas> The Everything2/Perlmonks formatters (one is derived from the other) are aligned to that goal, but the execution isn't perfect.
20:51:34 <ais523> come to think of it, POD does very well at a), and better at b) and c) than Markdown does
20:51:48 <wob_jonas> In particular, perlmonks has bracket links, which is good, and convenient custom syntax for both inline code and block code, which is good on a site that discusses a programming language,
20:51:50 <zzo38> Fossil wiki format doesn't support HTML comments or macros; MediaWiki does both, and I think such thing should be added into Fossil as well
20:52:30 -!- bradcomp has joined.
20:52:39 <zzo38> (The system administrator could define macros by use of SQL codes and TH1 codes; if other users define macros then more restrictive SQL codes can be used.)
20:53:56 <wob_jonas> but the bracket links trigger too easily, which is bad, and the format was made before unicode was introduced, so its source can only contain cp1252, of which the gravest consequence is that you can't put non-cp1252 characters in code (inline or block).
20:54:26 <oerjan> <arseniiv> oh no it’s actually unlogged! <-- yeah esowiki or Mediawiki strips out most unicode from the announcements for some reason
20:55:00 <wob_jonas> In perlmonks, bracket links, special tags "c" and "code" and "spoiler" and "readmore", that aren't just a subset of HTML with restrictions for technical and policy reasons.
20:55:10 <wob_jonas> umn
20:55:28 <wob_jonas> s/that aren't/are the only formatter features that aren't/
20:56:46 <wob_jonas> And bracket links almost always trigger if you use a shortest sequence of left square bracket then square bracket.
20:57:23 <wob_jonas> This causes problems especially in chat, because you have to escape indexes like [0] or [$x], which are common in perl code.
20:57:35 <wob_jonas> you can use the convenient c and code tags for them, but still
20:58:48 <zzo38> Fossil wiki has the same problem, although you can use the <verbatim> command and you can also use HTML character entity codes.
20:59:25 <zzo38> (The <verbatim> command in Fossil wiki also can use numbers such as <verbatim-1> so that it can work even if the text contains </verbatim> or </verbatim-1> or whatever)
20:59:39 <wob_jonas> There's also the popular bbcode, which is mostly popularized by phpbb now, and which has various different variants, which I think is also worse than mediawiki syntax but better than tikiwiki.
20:59:48 <zzo38> I think that feature is good and should be added into MediaWiki and bbcode too.
20:59:54 <wob_jonas> I use multiple phpbb-based forums regularly, so I meet that a lot.
21:01:30 <wob_jonas> zzo38: nice. TikiWiki has a sort of nice solution for code by the way: surround it with triple brackets. perlmonks's is similar: surround it with <c>...</c> or <code>...</code>, case insensitive but whitespace sensitive, and is automatically a code block if it has newlines in it, inline code otherwise.
21:02:17 <zzo38> Then what if the code contains triple brackets?
21:02:30 <zzo38> (For example, if you are showing a example of a TikiWiki code)
21:03:14 <wob_jonas> zzo38: I think it has more tricky formatting mechanisms too, but I'm not sure. perhaps not in TikiWiki, but there would be in a well-designed wiki, and I think the triple braces aren't exclusive to tiki
21:03:15 <zzo38> Fossil wiki also allows you to disable all wiki formatting for a wiki page, in case you want to use text only.
21:03:58 <wob_jonas> zzo38: yes, that's useful for importing large amounts of data that is not wiki-formatted
21:04:24 <wob_jonas> it would be even nicer if there was some automatic way to upgrade such a page to wiki-formatted so you can add formatted parts
21:04:45 <wob_jonas> I mean, automatically creating a wiki-format text that is mostly equivalent with the plain text
21:05:01 <wob_jonas> but that might need some tricky heuristics if you want to use it nicely
21:05:24 <wob_jonas> because you don't just want to escape the whole text usually, that makes it hard to add formatting
21:05:25 <zzo38> You could perhaps use an external program to do that, I suppose; the Fossil command-line interface can then be used together with it in order to post the changed file.
21:07:00 <wob_jonas> I hope ais523 will eventually write a vcs that's better than the existing ones.
21:07:17 <wob_jonas> But both designing and implementing one are very hard tasks.
21:07:28 <ais523> I've got some distance with the designing
21:07:33 <wob_jonas> Even if you don't do it from scratch, but use existing vcses.
21:07:37 <wob_jonas> ais523: yeah, I know.
21:07:40 <ais523> but haven't started implementing and it'd take way too long
21:07:49 <wob_jonas> but I also know that both parts are difficult
21:08:59 <wob_jonas> I have multiple requirements that interact in ways that I don't even know how to define a combined semantics that satisfies all of them.
21:09:55 <wob_jonas> Oh by the way, I'd like to add one more request to the vcs, and this one I think is easy to implement regardless everything else:
21:11:26 <wob_jonas> make the official reference documentation available in some collected form such as a manpage or directory of html page like mercurial does, but unlike svn, which only provides it as the outputs of various svn --help commands and unlike hg it's not even easy to discover which such outputs exist.
21:12:14 <wob_jonas> I want to collect all the svn help outputs in the future, it seems feasable but haven't yet done it. I already know you need at least two depths of recursion from the root.
21:12:47 <wob_jonas> hg help lists all the help pages right in the top-level hg help message, and collects all of it in the manpage. that's the Right Thing to do
21:13:06 -!- arseniiv has quit (Ping timeout: 264 seconds).
21:14:01 <wob_jonas> even worse examples are ImageMagick and ffmpeg, but they partly do that because of a lot of pluggable parts developed partly independently (although distributed together) and not enough resources to document them properly
21:15:06 <wob_jonas> On the plus side, svn has a C api that is documented and is even more stable on the long therm than the command-line, plus lots of other features I like in it.
21:15:13 <ais523> wob_jonas: one thing I realised is that the name "scapegoat" is awkward as "sg" already exists
21:15:19 <wob_jonas> I like svn (Apache Subversion is the official name) in general
21:15:28 <ais523> and the obvious solution is a separate executable per command, "sg-commit" or whatever
21:15:42 <ais523> (or just symlinks to a single executable)
21:15:43 <wob_jonas> ais523: or you can use that as the developer codename, and give it a different official name
21:15:47 -!- xkapastel has quit (Remote host closed the connection).
21:15:53 <wob_jonas> what is the sg that already exists?
21:15:54 <ais523> that'd also have the advantage of man pages working in a really simple way
21:15:59 <ais523> wob_jonas: like su but for groups
21:16:04 <wob_jonas> ouch
21:16:06 <wob_jonas> ok
21:16:17 <wob_jonas> ais523: as long as you have a single-level index manpage, that's fine
21:16:43 <ais523> nowadays very few people have permission setups complex enough for sg to be useful, although it is necessary in those cases where you need it
21:16:55 <wob_jonas> ais523: also, if possible, ALSO make the docs available as an online webpage, which is useful for windows users, because it's hard to find a working man reader for win32
21:17:19 <ais523> aimake will generate man pages on UNIX and HTML files on Windows from the same sources
21:17:43 <wob_jonas> ais523: that's fine if you have a 1-depth index for them too in both formats
21:18:56 <wob_jonas> ais523: git in theory has its manpages online as HTML, but they messed it up, and some automatically generated parts of the manpages are missing from it. perl has made the same mistake with the perl core and cpan, but there's now a separate http://perldoc.perl.org/ webpage associated with them
21:19:03 <wob_jonas> which fixes that mistake
21:20:36 <wob_jonas> also, a lot of software, including perl and svn, has some docs that they claim are only for developers of the project itself and so are only distributed in the source code and not collected together with the main docs, but some of which would actually be useful for non-devs and would be easy to add to the normal set of docs
21:21:06 <wob_jonas> I mean, that's partly unavoidable, because sometimes you want developer docs and there's a lot of unmaintained junk in it
21:21:10 <wob_jonas> Linux also does that
21:21:18 <wob_jonas> but still, you have to be careful with it
21:21:50 -!- cods6 has joined.
21:22:35 <wob_jonas> at least since svn is a version control system, it's also self-hosting now, and they run a web service for reading its official version control repository, and you can see the developer docs there
21:24:16 <zzo38> SQLite does put the developer documents that are also useful for other uses too are also made available outside of the source codes, such as the document of the SQLite file format and the document of the VDBE opcodes.
21:24:19 -!- xkapastel has joined.
21:24:44 <wob_jonas> also, I've said this already, and I don't have an immediate need for this, but it would be nice if you put a clear declaration into your official version of ayacc that it is distributed under some free software license, just like you did with uncursed and aimake
21:24:53 <ais523> the file format isn't just internals, though, it's also important for interoperability
21:25:19 <ais523> wob_jonas: I'm not sure if the license on ayacc is decided yet? I'm trying to remember
21:25:29 <ais523> there's no logical reason I can think of not to make it GPLv3 though
21:25:41 <wob_jonas> that, plus the file format is important to estimate some things about how much disk space and disk access and cpu certain workloads use
21:25:44 <ais523> still, I have a job right now (for complicated technical reasons I only work on ayacc while unemployed)
21:26:22 <wob_jonas> ais523: last I've seen, it wasn't, but I think you have made a declaration that's somewhere in the #esoteric logs, which could sort of work in a pinch
21:26:41 -!- cods6 has quit (Remote host closed the connection).
21:26:52 <wob_jonas> ais523: ayacc declares that all code snippets that go into the generated output are under public domain,
21:27:03 <wob_jonas> but doesn't declare a license for the rest of the code
21:27:07 <ais523> yes, that's obviously necessary, unless it's implicit
21:27:14 <ais523> so I would have written it out of habit
21:27:36 <wob_jonas> yes, and that declaration still helps
21:27:47 <wob_jonas> since it lets me more easily distribute a program that uses vanilla ayacc
21:28:04 <wob_jonas> I can distribute the ayacc output with it so people don't have to run it
21:28:29 <wob_jonas> not that I have such a program yet, but still
21:28:44 <wob_jonas> even for what I want to write, I could probably use bison
21:28:54 <wob_jonas> but I prefer ayacc
21:31:02 <ais523> a bison/ayacc polyglot is fairly easy
21:31:13 <ais523> although ayacc has some non-bison features you might want to use
21:32:03 <wob_jonas> yes, and ayacc generates nicer code output, and ayacc is easier to modify in certain ways that I might want to change, such as adding a new output language or language variant, or adding an extension to its syntax
21:32:08 <wob_jonas> I was considering both
21:32:19 <wob_jonas> but only in vague plans that I might not ever do
21:32:27 <ais523> the output isn't as nice as I'd like yet
21:32:32 <ais523> it's also probably slower than bison noutput
21:32:48 <wob_jonas> candidates for language variants are rust and stackless C
21:33:23 <wob_jonas> as for the extensions, I'll probably have to talk to you about what's feasable and what isn't already possible in ayacc before I try
21:35:41 <wob_jonas> I'm sort of thinking an extension where I have a language where some production rules are such that they cause shift-reduce conflicts, and I want to be able to write a proof whose checking is assisted by ayacc that despite this, you can express "any valid parse tree" in the language with some easy automatable transformations of the input, turning i
21:35:41 <wob_jonas> t to a subset of the language that has no shift-reduce conflicts but can still express anything.
21:36:03 <wob_jonas> Such production rules would be ones that allow eliding parenthesis and similar markers to disambiguate precedence.
21:36:37 <wob_jonas> I think something like that is possible, but I don't have the details completely thought out.
21:37:44 <ais523> that seems like an interesting goal but one that's quite different from ayacc's, so if you added it to ayacc you'd essentially just have two different programs bolted together
21:37:46 <wob_jonas> In particular, it's easy to remove the production rules I mark and test if the remaining language has no shift-reduce conflicts, but you also need a way to annotate why you believe it can express any parse tree and check its proof,
21:38:01 <ais523> although unlike bison, ayacc does have the concept of a production being a no-op, e.g. "(a)" and "a" being equivalent
21:38:02 <wob_jonas> and ideally also generate a program that does the transformation on any input.
21:39:34 <wob_jonas> ais523: I don't think it's that different from ayacc, since ayacc already must be able to verify that a language has no shift-reduce conflicts (with false positives, but here too I want to support only proofs of specific form), and it can already parse the description of a grammar to some form it can manipulate, so automatically removing some marke
21:39:34 <wob_jonas> d productions would be easy if you extended the syntax.
21:39:48 <wob_jonas> That's the easy part. The hard part might still be difficult to design and implement.
21:40:26 <ais523> well, I think what would probably be most usable for this would be that, when a conflict is automatically resolved, ayacc could determine whether there was always a way to force the conflict into the other resolution
21:40:30 <wob_jonas> It might not be ayacc's goal, but since ayacc has readable code for these tasks, it would help implementing this.
21:40:36 <ais523> although that'd be useful even with manually resolved conflicts, I guess
21:40:52 <wob_jonas> ais523: I'm thinking of various manual annotations in the grammar for this.
21:40:57 <wob_jonas> It doesn't have to be full automatic.
21:41:18 <wob_jonas> It could also have escape hatches for ambiguities that you can't prove with the annotation language, but prove manually.
21:42:50 <wob_jonas> Like, an annotation would be that I claim that a particular production like {expr -> expr '+' expr} can always be disambiguated by putting parenthesis around it.
21:43:13 <ais523> perhaps the report could say something like "'expr PLUS expr . TIMES': shift/reduce ambiguity resolved as SHIFT, alternative available as '( expr PLUS expr ) . TIMES'"
21:43:14 <wob_jonas> Where in the annotation I tell which "parenthesis" that is.
21:44:16 <wob_jonas> ais523: well, in very simple cases it might be possible to annotate, but I want it on grammars more trivial than just infix operators with different precedence and parenthesis, for in such simple languages, a proof by hand is also easy
21:44:29 <wob_jonas> s/possible to annotate/possible to automate/
21:44:41 <ais523> wob_jonas: I'm thinking about this idea: look for a no-op rule that can be placed on the LHS in order to make it reduce rather than shift
21:45:17 <ais523> doing it the other way round (i.e. to make it shift rather than reduce) is harder because ayacc thinks left to right, so it doesn't have any concept of the place where the closing paren would have to go
21:45:34 <wob_jonas> I need it for cases where from the grammar it's not even obvious that a certain construct means the same as another construct, because it's not implemented by a pass-through rule, either because it's not a primitive construct but a consequence of multiple rules, or because we add debug information that shouldn't change semantics.
21:46:04 <ais523> yes, I think automation would have to rely on pass-through rules
21:46:10 <wob_jonas> Because of debug information, you can write a no-op rule in a way that ayacc doesn't know is a no-op rule
21:46:12 <ais523> I'm not getting ayacc to parse and understand arbitrary semantic actions ;-)
21:46:43 <wob_jonas> The other case comes up for uglier things like some C++ ambiguities, although C++ might be too ugly to produce such an annotated proof.
21:47:14 <wob_jonas> C++ has reduce/reduce ambiguities and other things that are hard to handle with an LR parser.
21:47:34 <wob_jonas> C++ syntax is terribly complicated to even parse correctly these days.
21:47:41 <wob_jonas> even compilers don't always agree on how it works
21:47:54 <zzo38> Is it a full LR parser or a LALR parser? (I don't like C++ syntax; it is too messy)
21:47:58 <shachaf> `olist 1137
21:47:59 <HackEso> olist 1137: shachaf oerjan Sgeo FireFly boily nortti b_jonas
21:48:17 <wob_jonas> I still don't understand how a certain template syntax construct is supposed to be parsed, although I think the new versions of the standard clarify it, the standard is just too complicated.
21:48:24 <wob_jonas> shachaf: oh nice! let me look
21:48:32 <wob_jonas> the Giant is on a roll
21:48:35 <esowiki> [[]] https://esolangs.org/w/index.php?diff=57454&oldid=57448 * Ais523 * (+248) /* Power */ PDA without parens
21:49:18 <wob_jonas> hmm... why don't I see the page title in the esowiki bot's change announcement
21:50:05 <ais523> esowiki isn't very good at Unicode
21:50:42 <wob_jonas> I see
21:50:42 <zzo38> If it does not support Unicode, then use the percent encoding of the URL.
21:50:52 <wob_jonas> the URL is fine
21:50:57 <wob_jonas> it's the page title that is wrong
21:51:09 -!- xa0 has quit (Remote host closed the connection).
21:51:40 <wob_jonas> you can make an URL to a mediawiki page without even mentioning any escaped form of its name, in at least two ways: by its unique page ID and the change ID of any version of it
21:51:52 <wob_jonas> this URL does the latter
21:52:36 <wob_jonas> this is handy for pages of whose escaped title would be too long
21:53:29 -!- xa0 has joined.
21:53:29 -!- xa0 has quit (Excess Flood).
21:54:10 <wob_jonas> and those two IDs are mentioned in the mediawiki dumps and the api.php output and you can refer to them in the api.php interface, so there's a high chance that they can be preserved or at least tracked to a fork or dump of a wiki
21:54:23 <wob_jonas> mediawiki does a lot of things well
21:54:49 <wob_jonas> it's a pity it's implemented in php :-)
21:55:09 <wob_jonas> it was implemented in php before php even became a sane programming language
21:55:36 <wob_jonas> dunno why anyone would do that, I guess they didn't know that mediawiki will be so popular and have so many plugins
21:56:38 -!- xa0 has joined.
21:56:38 -!- xa0 has quit (Excess Flood).
21:56:57 -!- LKoen_ has quit (Quit: “It’s only logical. First you learn to talk, then you learn to think. Too bad it’s not the other way round.”).
21:58:07 <zzo38> I would want a SQLite virtual table extension to access remote MediaWiki files. (You can then make a copy of the wiki by the use of INSERT INTO ... SELECT command.)
21:58:18 -!- xa0 has joined.
21:58:18 -!- xa0 has quit (Excess Flood).
21:58:51 <wob_jonas> zzo38: you could write such an extension, at least for mediawiki instances where the api.php is enabled for at least read use
21:59:01 <wob_jonas> (not all mediawikis have it enabled)
21:59:18 -!- xa0 has joined.
21:59:18 -!- xa0 has quit (Excess Flood).
21:59:44 <wob_jonas> obviously you couldn't access data that's hidden by administrators, such as user passwords and deleted versions, but that's on purpose
21:59:46 <zzo38> I would want to support incremental updates, but I don't know if the MediaWiki API supports that.
22:00:10 <zzo38> I know of course there is no need copying user passwords (or any other user data other than user pages, since your own copy will have its own users).
22:00:23 -!- xa0 has joined.
22:00:23 -!- xa0 has quit (Excess Flood).
22:00:46 <wob_jonas> zzo38: otoh I believe there are already tools for MediaWiki that allow you to copy a remote wiki, and even output it into a new MediaWiki
22:00:50 <ais523> zzo38: the MediaWiki API basically just does queries against the database, but from a predefined subset of queries (those which won't cause excess database load)
22:01:06 <ais523> "batch" operations are supposed to be done on downloadable database dumps
22:01:06 -!- xa0 has joined.
22:01:06 -!- xa0 has quit (Excess Flood).
22:01:15 <wob_jonas> besides api.php, there's also the older [[special:export]] and [[special:import]] , but they can do somewhat less
22:01:28 -!- ChanServ has set channel mode: +o ais523.
22:01:44 -!- ais523 has set channel mode: +b xa0!*@*$##fix_your_connection.
22:02:43 -!- ais523 has set channel mode: -o ais523.
22:02:55 <ais523> those are still widely used for moving pages between wikis
22:03:00 <ais523> say if they got created in the wrong place
22:03:06 <wob_jonas> ais523: yes, and now some of the bigger wikimedia projects also have incremental dumps to preserve server resources (although you could already simulate them on client side with api.php); plus a so-called "tool server", which are servers that have a frequently updated decompressed copy of the projects and where they give shell access to people they
22:03:06 <wob_jonas> believe can perform useful tasks
22:03:26 <zzo38> Sometimes you only want a few files, so using API can be used too
22:03:40 <wob_jonas> ais523: yes, and they're also useful for simple batch downloading of some pages for analysis or conversion
22:04:03 <wob_jonas> ais523: but the api.php can do much more, and has a reasonably well documented and usable interface, at least for the read-only part
22:04:08 <wob_jonas> I haven't yet used the write part I think
22:05:28 <wob_jonas> I don't like how it's called "the API", since there's nothing really exclusive in it, it's just a very good coherent subset of API that exists, so I call it the "api.php interface"
22:05:49 <ais523> wob_jonas: well it's the API because it's the official public endpoint for automated queries
22:05:50 <wob_jonas> but naming something "the API" is a fault some other projects commit too
22:05:53 <ais523> which is what an API is
22:06:16 <zzo38> It can be called "remote API" maybe is better
22:06:32 <wob_jonas> ais523: the dumps are also an official public endpoint for automated queries
22:07:22 <wob_jonas> in fact index.php and its CGI parameters are well-documented, and it puts a lot of extra info in invisible HTML stuff, so it's also an official public endpoint
22:07:27 <ais523> but not interactive, which I guess is part of a requirement for an API and I simply didn't realise it until writing this sentence
22:07:42 <wob_jonas> plus there's the printable format which also helps and is quite official
22:08:13 <wob_jonas> ais523: perhaps the interactive part is reasonable, it's hard to call it "application" otherwise
22:12:31 -!- AnotherTest has quit (Ping timeout: 252 seconds).
22:20:26 -!- woddf225 has joined.
22:23:23 -!- woddf225 has quit (Remote host closed the connection).
22:26:33 -!- sleepnap has left.
22:32:57 <shachaf> `aglist 611
22:32:58 <HackEso> aglist 611: b_jonas shachaf
22:33:13 <shachaf> I don't think listing on every update is necessary, but maybe when there hasn't been one in a while.
22:36:46 <int-e> `grwp axiometric
22:36:47 <HackEso> No output.
22:37:16 -!- ais523 has quit (Quit: quit).
22:46:14 -!- oerjan has quit (Quit: Nite).
22:48:24 <shachaf> wob_jonas: I don't think the semantics of "continue" in the C standard is correct.
22:49:14 <shachaf> wob_jonas: It says that in "while (/* ... */) { /* ... */ continue; /* ... */ contin: ; }", "continue" is equivalent to "goto contin".
22:49:34 <wob_jonas> shachaf: what do you mean by not correct?
22:49:35 <shachaf> But if the /* ... */ after "continue" declares a variable-length array, that's invalid.
22:49:46 <shachaf> Hmm, you're right.
22:49:53 <shachaf> I mean it's not what they're intending, and what everyone implements.
22:49:54 <wob_jonas> shachaf: and isn't continue also invalid then?
22:50:17 <shachaf> I don't think so?
22:50:29 <shachaf> I guess it is according to the standard.
22:51:06 <shachaf> Never mind what I said about correctness.
22:51:31 <wob_jonas> C really doesn't like to have implicit destructors when a variable or temporary goes out of scope, and that's one of the main differences from C++, and exiting from the scope of a variable length array would require calling an implicit destructor in the implementation
22:52:13 <wob_jonas> especially if expect to repeatedly enter that scope in a loop, so the variable length array has to be recreated an arbitrary number of times with different sizes
22:52:41 <wob_jonas> normally at the end of a function, you can free the space for all vararg arrays as easily as you free temp stack space for ordinary variables
22:52:47 <wob_jonas> obviously this depends on the target arch
22:52:48 <wob_jonas> but still
22:53:28 <shachaf> vararg arrays?
22:53:40 <wob_jonas> variadic length arrays, sorry
22:55:10 <wob_jonas> of course, a compiled function might still need to explicitly save and restore some registers, but most cpus that C target are built around that concept and many give convenient ways to do that
22:55:28 <wob_jonas> x86 doesn't, sadly
22:56:00 <wob_jonas> well, it has implementation optimizations for saving registers to the stack in some ways
22:56:22 <wob_jonas> and addressing modes to access the stack easily
22:56:27 <shachaf> I think the actual meaning most people imagine and most compilers implement for "continue" would be closer to "while (/* ... */) { { /* ... */ continue; /* ... */ } contin: ; }
22:56:28 <wob_jonas> so that's still something
22:56:53 <wob_jonas> shachaf: what's the difference?
22:57:08 <wob_jonas> in C that is, not C++
22:57:12 <shachaf> The extra block around the body.
22:57:17 <shachaf> Oh.
22:57:19 <wob_jonas> yes, but what's the semantic difference
22:57:36 -!- nfd9001 has joined.
22:57:44 <shachaf> If it declares a variable-length then its lifetime is the inner block
22:57:45 <shachaf> array
22:58:04 <wob_jonas> yes, but wouldn't the lifetime end immediately after the goto anyway?
22:58:17 <shachaf> goto after the declaration of a variable-length array isn't permitted.
22:59:05 <wob_jonas> I think there's a good reason for that, but I don't really like C VLAs in first place
22:59:45 <wob_jonas> many people don't like VLAs in C, so I think the people who insisted on adding it had to make some reasonable compromises for how much they can do
23:00:05 <zzo38> I don't like it either
23:00:24 <zzo38> GNU C has zero-length arrays though, which are sometimes helpful.
23:01:11 <wob_jonas> I especially don't like stack-allocated VLAs, and only somewhat don't like VLA function parameters
23:01:49 <wob_jonas> zzo38: zero-length arrays are nice in theory, and it's good that rust supports them and other zero-length objects specially, but I don't think they're a good idea in C,
23:02:34 <wob_jonas> because allowing them causes incompatibilities in existing programs that use the nonexistance of zero-length arrays as a replacement for the newer static_assert, such as in macros
23:03:12 <wob_jonas> you can still use negative length arrays for that, and some other portable tricks, but old programs don't know that they have to
23:03:28 <wob_jonas> programs targeting only newer compilers should use static_assert of course
23:03:35 <zzo38> You can tell GCC to compile in the old mode if you want to though
23:03:37 <wob_jonas> but C wants to preserve compatibility hard
23:03:43 <wob_jonas> zzo38: yes, that's true, but still
23:03:49 <wob_jonas> it's an error that's easy to make accidentally
23:04:01 <wob_jonas> and hard to detect automatically
23:04:30 <wob_jonas> it's not even easy to put a warning that catches it, even in a smart compiler, with it mostly coming from macros
23:05:53 <wob_jonas> a lesser problem is that it also breaks some invariants that some macros might try to rely on, such as that every object has a sizeof at least 1.
23:07:10 <wob_jonas> that's also why maxint_t is a bad design: it has to be fixed in an abi, and can't be increased when the language or abi adds a larger integer type, which is why even though gnu cc has 128-bit integers, maxint_t is 64-bit.
23:07:44 <wob_jonas> mind you, technically neither contradicts the standard, since they can just claim that 128-bit integers aren't an integer type, it's just a type similar to integer types, but still
23:08:43 <shachaf> Oh, the C++ standard has it right, it puts an extra block around the loop body before the label.
23:09:53 <wob_jonas> I have a similar smaller problem with the current proposal for making void a real type in programs: it allows programs to overload the comma operator with void as an argument and a user-defined class as another argument, but existing macros or generic functions can rely on that such overloads can't exist, and using the comma operator with a void va
23:09:53 <wob_jonas> lue (in either order) is useful in generic code.
23:10:04 <wob_jonas> This is also something that you can work around in new code, but it's ugly.
23:10:27 <wob_jonas> Luckily that one could be fixed by changing the proposal slightly to forbid such overloads, but the current proposal doesn't do that.
23:11:11 <wob_jonas> shachaf: like I said, that's because there's a genuine goal difference between C and C++ about implicit destructors. C wants to forbid them, C++ wants to allow them as much as it can
23:11:36 <shachaf> Right.
23:12:13 <wob_jonas> although I'm still not sure what difference the inner braces make in C++
23:12:53 <wob_jonas> but at least it's plausible to me that C++ may have a difference there that isn't present in C
23:13:17 <shachaf> What do you mean?
23:14:00 <shachaf> The difference is that any destructors for variables declared in the inner block will run at the end of that block.
23:14:26 <shachaf> Or, well, that's a bad description.
23:14:29 <wob_jonas> well, scope braces in C++ affect implicit destructors of variables and temporaries, and C doesn't have such implicit destructors, so maybe I'm missing some obscure case in C++ where the braces matter
23:14:36 <shachaf> The difference is that it doesn't goto past any variable declaration.
23:14:51 <wob_jonas> oh, so the problem is _constructors_, not destructors
23:15:03 <shachaf> Well, it's both.
23:15:16 <shachaf> The destructors get run at the end of the block, so you can't have the variables uninitialized.
23:15:32 <wob_jonas> C also doesn't have variable constructors, other than for variadic-length arrays, and so doesn't forbid gotoing past a variable declaration, whereas C++ forbids that
23:15:59 <wob_jonas> wouldn't destructors already be ran because of the outer close braces?
23:16:08 <wob_jonas> skipping constructors I can see
23:17:27 <shachaf> I'm confused.
23:18:44 <shachaf> If you write "{ A a; if (p) goto exit; B b; } exit:", then when p is true, it'll run A(), B(), ~B(), ~A()
23:18:53 <shachaf> And when p is false, it'll run A(), ~A()
23:18:55 <shachaf> Right?
23:19:37 <wob_jonas> shachaf: you've already convinced me that it's useful to add the extra brace in C++
23:19:43 <shachaf> Oh.
23:19:53 <shachaf> Then the same issue exists in C with VLAs.
23:20:15 -!- laerling has quit (Remote host closed the connection).
23:20:51 <wob_jonas> I just still claim it's not useful in C, because it probably only makes a difference for VLAs and some nonstandard extensions, and there's a good reason to forbid continuing a loop with a VLA declared in it in C because that would need an implicit destructor in practice
23:21:40 <wob_jonas> but I guess you're right that it's already allowed with the inner braces in C
23:21:45 <wob_jonas> so perhaps it could be allowed with continue too
23:21:50 <wob_jonas> I don't know
23:22:10 <wob_jonas> you could ask on ##C, they're friendly and good at such questions
23:22:15 <wob_jonas> on freenode that is
23:22:19 <shachaf> ##C is friendly?
23:22:30 <wob_jonas> not to newbies
23:22:38 <wob_jonas> and doesn't always answer every question you ask
23:22:54 <wob_jonas> but it usually doesn't hate people who are not newbies to IRC for asking questions about the C standard
23:23:16 <wob_jonas> I trust you know the general guidelines about asking a question on IRC
23:23:33 <wob_jonas> they don't like off-topic questions or newbies that don't keep common IRC ethics
23:23:50 <wob_jonas> and they don't answer every question, but that would be hard to expect from even the best channels
23:24:30 <wob_jonas> also, don't ask questions directly about differences between C++ and C in either ##C or ##C++, they don't like each other's language
23:24:56 <wob_jonas> many of the regulars passionately hate the other language
23:25:30 <wob_jonas> so it probably makes sense to ask this question above here in #esoteric
23:25:48 <wob_jonas> but you could phrase it in such a way that it's only about C vlas without mentioning C++, and ask in ##C
23:26:47 <wob_jonas> both channels also don't like questions about nonstandard extensions or libraries that aren't the standard library or system-dependent questions
23:27:11 <wob_jonas> they want to think that the standards exist in a vacuum and don't care about practical work in the language
23:27:31 <wob_jonas> so there are questions you can't easily ask anywhere because it's off-topic between the cracks on every good channel
23:28:16 <wob_jonas> mind you, there are some other channels on freenode that help in some of those questions
23:28:49 <wob_jonas> but some questions are still hard to find a good channel for
23:29:06 <wob_jonas> that's why channels that are geeky but not very on-topic are useful
23:29:14 <wob_jonas> ##C and ##C++ aren't like that
23:29:45 <wob_jonas> #esoteric is, and so is #rubik
23:29:53 <wob_jonas> #rubik is better for vim questions than ##vim actually
23:30:08 <wob_jonas> well, perhaps
23:30:11 <wob_jonas> ##vim isn't bad either
23:30:40 <wob_jonas> on the flip side, some channels are so off-topic that it's hard to get answers to on-topic questions on them
23:31:12 <shachaf> Like #esoteric?
23:32:06 <wob_jonas> shachaf: no, #esoteric is relatively good for getting answers about esoteric programming languages
23:32:10 <wob_jonas> compared to some channels
23:32:37 <wob_jonas> have you tried #English ? it rarely answers questions about the English language, and keeps talking about world politics and stuff like that instead
23:32:51 <wob_jonas> um, I mean ##English
23:33:26 <wob_jonas> #esoteric and #rubik are at least 80% off-topic talk, but it still handles on-topic questions well
23:33:39 -!- nfd9001 has quit (Read error: Connection reset by peer).
23:34:09 <wob_jonas> that's a good thing, it means the channels are useful as a community, not just for answering questions about a topic
23:34:17 <wob_jonas> I always like when internet forums serve such a purpose
23:34:35 <wob_jonas> and many others do, and those are the places I frequent
23:34:44 <wob_jonas> well, some of those obviously
23:34:47 <wob_jonas> not all of those
23:35:54 -!- bradcomp has quit (Ping timeout: 252 seconds).
23:49:55 -!- imode has quit (Quit: WeeChat 2.2).
23:58:42 -!- imode has joined.
←2018-08-23 2018-08-24 2018-08-25→ ↑2018 ↑all