00:21:01 <esolangs> [[EsoInterpreters]] https://esolangs.org/w/index.php?diff=168823&oldid=164449 * None1 * (+598) /* Main table */ Add [[Readable]]
00:23:05 -!- ais523 has quit (Quit: quit).
00:23:11 <esolangs> [[EsoInterpreters]] M https://esolangs.org/w/index.php?diff=168824&oldid=168823 * None1 * (-13) Change link after the TOC was updated
01:03:27 <esolangs> [[Brainyay]] https://esolangs.org/w/index.php?diff=168825&oldid=168737 * PhiPhiPHipHi2.0 * (+19)
01:28:57 -!- amby has quit (Quit: so long suckers! i rev up my motorcylce and create a huge cloud of smoke. when the cloud dissipates im lying completely dead on the pavement).
01:38:53 <esolangs> [[User:Aadenboy/Forces and such]] https://esolangs.org/w/index.php?diff=168826&oldid=168821 * Aadenboy * (+1698) new type + definitions
01:44:58 -!- Thelie has joined.
02:32:23 -!- Thelie has quit (Ping timeout: 244 seconds).
03:56:09 <esolangs> [[User:H33T33]] M https://esolangs.org/w/index.php?diff=168827&oldid=168166 * H33T33 * (+12)
04:04:31 <esolangs> [[Solus]] https://esolangs.org/w/index.php?diff=168828&oldid=168705 * H33T33 * (+1305)
04:04:54 <esolangs> [[Talk:Topple]] https://esolangs.org/w/index.php?diff=168829&oldid=154514 * H33T33 * (-298) Blanked the page
05:41:08 -!- msv has quit (Remote host closed the connection).
06:21:01 -!- sprock has quit (Quit: brb).
06:22:50 <zzo38> ZZT allows a program to contain multiple same labels, in which case only the first one is effective, but #ZAP will comment out the first one, making the next one effective; #RESTORE will uncomment all of them of the specified name.
06:24:56 <zzo38> MegaZeux, ZZ Zero, and Super ZZ Zero inherit that feature, although Super ZZ Zero adds some more stuff, such as the possibility for each instance of a label to have a numeric value associated with it, and the ability to read and modify the value associated with the first unzapped label with a specified name.
06:34:10 -!- sprock has joined.
07:28:16 <zzo38> (But, it does not have the "ALTER X TO PROCEED TO Y" like COBOL has)
07:31:51 <zzo38> (This use of numeric storage labels might be used like the DATA command in BASIC, although the data can be changed and you can have multiple lists of data to read at once with different label names; and these labels can still be used as branch targets and message targets too, like any other labels do.)
07:58:42 <esolangs> [[User:Zzo38/Programming languages with unusual features]] https://esolangs.org/w/index.php?diff=168830&oldid=146610 * Zzo38 * (+1500)
08:35:24 <esolangs> [[,(*+)]] https://esolangs.org/w/index.php?diff=168831&oldid=167691 * Yayimhere2(school) * (+29)
08:46:09 -!- tromp has joined.
08:48:52 -!- Sgeo has quit (Read error: Connection reset by peer).
09:07:50 <esolangs> [[Atamagaokashii]] https://esolangs.org/w/index.php?diff=168832&oldid=168700 * RaiseAfloppaFan3925 * (-268) /* Etymology */ Cleaned up this section because it's so trash
09:29:27 <esolangs> [[Plushie-incomplete]] M https://esolangs.org/w/index.php?diff=168833&oldid=168763 * None1 * (-34) Remove non-existent category
09:29:40 <esolangs> [[!itoe]] M https://esolangs.org/w/index.php?diff=168834&oldid=168760 * None1 * (-34) Remove non-existent category
09:29:52 <esolangs> [[100]] M https://esolangs.org/w/index.php?diff=168835&oldid=168722 * None1 * (-34) Remove non-existent category
09:30:00 -!- Hooloovoo has quit (Quit: ZNC 1.8.2+deb2+deb11u1 - https://znc.in).
09:30:13 <esolangs> [[Brainbonk]] M https://esolangs.org/w/index.php?diff=168836&oldid=168803 * None1 * (-34) Remove non-existent category
09:30:26 <esolangs> [[Egg]] M https://esolangs.org/w/index.php?diff=168837&oldid=168773 * None1 * (-34) Remove non-existent category
09:30:40 <esolangs> [[Ntsomgivl]] M https://esolangs.org/w/index.php?diff=168838&oldid=168806 * None1 * (-34) Remove non-existent category
09:30:54 -!- Hooloovoo has joined.
09:30:54 <esolangs> [[Nullinullinull]] M https://esolangs.org/w/index.php?diff=168839&oldid=168766 * None1 * (-34) Remove non-existent category
09:31:13 <esolangs> [[15]] M https://esolangs.org/w/index.php?diff=168840&oldid=168786 * None1 * (-34) Remove non-existent category
09:31:31 <esolangs> [[]] M https://esolangs.org/w/index.php?diff=168841&oldid=168713 * None1 * (-34) Remove non-existent category
09:54:21 <esolangs> [[Atamagaokashii]] M https://esolangs.org/w/index.php?diff=168842&oldid=168832 * RaiseAfloppaFan3925 * (+33) the name is a romanization of a japanese word so the japanese word is also a valid name, if not the true name
10:11:27 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=168843&oldid=168689 * Redstoneboi * (+248) Add Redstoneboi introduction
10:25:54 <esolangs> [[User:None1/InDev]] https://esolangs.org/w/index.php?diff=168844&oldid=168580 * None1 * (+621)
10:26:20 <esolangs> [[User:None1/InDev]] M https://esolangs.org/w/index.php?diff=168845&oldid=168844 * None1 * (-1215)
10:27:00 <esolangs> [[Brainterpart]] N https://esolangs.org/w/index.php?oldid=168846 * None1 * (+1347) Created page with " {{lang|a=User:None1|i=[[brainfuck]]|f=the counterpart of [[brainfuck]] without comments}} ==Definitions== Define the ''brainfuck charset'' (BC for short) as {{cd|+,-.<>[]}}. Define the ''non-brainfuck charset'' (NBC for short) as the charset which contains charact
10:27:08 <esolangs> [[Brainterpart]] M https://esolangs.org/w/index.php?diff=168847&oldid=168846 * None1 * (+0)
10:27:31 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=168848&oldid=168818 * None1 * (+19) /* B */
10:28:11 <esolangs> [[User:None1]] https://esolangs.org/w/index.php?diff=168849&oldid=168615 * None1 * (+57)
10:31:54 -!- msv has joined.
10:32:10 -!- msv has quit (Remote host closed the connection).
10:32:35 -!- msv has joined.
10:34:12 <esolangs> [[+]] M https://esolangs.org/w/index.php?diff=168850&oldid=154427 * None1 * (+363) /* Commands */
10:34:31 <esolangs> [[Talk:+]] M https://esolangs.org/w/index.php?diff=168851&oldid=141643 * None1 * (+285) /* Float numbers */
10:42:08 <esolangs> [[oxck]] https://esolangs.org/w/index.php?diff=168852&oldid=168031 * Yayimhere2(school) * (+31) /* other */
10:44:14 <esolangs> [[SletScript]] https://esolangs.org/w/index.php?diff=168853&oldid=168432 * Redstoneboi * (+877) /* brainfuck interpreter */
10:55:20 <esolangs> [[SletScript]] https://esolangs.org/w/index.php?diff=168854&oldid=168853 * Redstoneboi * (+145) numeric mode
11:04:06 -!- svm has joined.
11:06:38 -!- msv has quit (Ping timeout: 260 seconds).
11:13:00 <esolangs> [[User:Redstoneboi]] N https://esolangs.org/w/index.php?oldid=168855 * Redstoneboi * (+11) Created page with "i exist now"
11:37:55 <esolangs> [[SletScript]] https://esolangs.org/w/index.php?diff=168856&oldid=168854 * Redstoneboi * (+2101) /* Examples */
11:39:03 <esolangs> [[SletScript]] https://esolangs.org/w/index.php?diff=168857&oldid=168856 * Redstoneboi * (+9) add link to redstoneboi userpage
11:47:23 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
11:50:04 <esolangs> [[SletScript]] M https://esolangs.org/w/index.php?diff=168858&oldid=168857 * Redstoneboi * (-6) separate brainfuck declaration and usage
12:13:47 -!- wob_jonas has joined.
12:20:18 <wob_jonas> let's say I want to define tokenizing rules for an esoteric language. for example, if the source code says 'one+two three' it'll be split to four words, 'one' then '+' then 'two' then 'three', because letters are sticky and stick to longer words, '+' is a loner character that doesn't stick to anything, and the space ' ' is a comment that can
12:20:18 <wob_jonas> separate words but disappears from the word stream otherwise. so far so good.
12:24:20 <wob_jonas> but suppose that I want two phases. instead of grouping characters to words, I want to group the source characters into pre-tokens, and then group pre-tokens to words. let's say anything delimited by double quotes is a single pre-token so if you write '"one+two"' and then the '+' won't turn into a word on its own because only a '+' pre-token would.
12:24:21 <wob_jonas> and say some digraphs like '@+' form pre-tokens that also remove the meaning of the constituent characters, for example the pre-token '@+' could be sticky like word characters so 'one+two@+three' would split to three words 'one' then '+' then 'two@+three'. my question is, what should I call pre-tokens.
12:24:43 <wob_jonas> "pre-token" isn't a good name, and I'd like something better.
12:41:56 <esolangs> [[User:RaiseAfloppaFan3925]] https://esolangs.org/w/index.php?diff=168859&oldid=168441 * RaiseAfloppaFan3925 * (+1657) change some things about my user page
12:43:15 -!- wob_jonas has quit (Quit: Client closed).
12:46:25 -!- Thelie has joined.
12:47:17 -!- wob_jonas has joined.
13:00:34 -!- tromp has joined.
14:30:18 <esolangs> [[Kylin]] https://esolangs.org/w/index.php?diff=168860&oldid=168765 * PrySigneToFry * (+5)
14:36:04 -!- Thelie has quit (Ping timeout: 264 seconds).
15:20:36 -!- ehmry has quit (Read error: Connection reset by peer).
15:21:08 -!- ehmry has joined.
15:30:42 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
15:31:15 -!- Sgeo has joined.
15:42:37 <wob_jonas> you know how C++11 modifies iostream so it can format machine floating-point values to C99 "%a" hex float format. But (I think for ABI compatibility reasons) they didn't add a new formatting flag for the hex float format, but just changed the meaning of previously undefined combination of when both the ios::scientific bit (which normally enables
15:42:38 <wob_jonas> "%e" format) and the ios::fixed bit (which normally enables "%f" format) is set. when neither of the ios::scientific big nor the ios::fixed bit is set then floats are printed in the "%g" format, which is similar to automatically choosing between "%f" and "%e" except that the precision is always interpreted as the number of significant digits
15:42:38 <wob_jonas> printed like in "%e". so far this makes sense.
15:47:20 <wob_jonas> so today I found out that C++17 adds a new function std::to_chars to format numbers. this has signatures like `namespace std { to_chars_result to_chars(char *out_begin, char *out_end, double val, chars_format fmt, int precision); }`. here the fmt argument is a bitmask where you can set the chars_format::scientific bit for "%e" format, or the
15:47:20 <wob_jonas> chars_format::fixed bit for "%f" format. with me so far?
15:48:29 <wob_jonas> but they specified in the standard that if you set both the chars_format::scientific and the chars_format::fixed bit then you get the automatic "%g" format rather than the hex float "%a" format. WHAT WERE THEY SMOKING? this is designed to deliberately confuse expert users!
15:49:05 -!- wob_jonas26 has joined.
15:49:16 -!- wob_jonas26 has quit (Client Quit).
15:52:08 -!- tromp has joined.
15:52:51 -!- ais523 has joined.
15:53:01 -!- wob_jonas has quit (Ping timeout: 250 seconds).
15:56:13 <esolangs> [[User:Aadenboy/fixpre]] N https://esolangs.org/w/index.php?oldid=168861 * Aadenboy * (+47) Created page with "style="font-family: Noto Sans Mono, monospace;""
16:01:37 <esolangs> [[User:Aadenboy/fixpre]] https://esolangs.org/w/index.php?diff=168862&oldid=168861 * Aadenboy * (-47) Blanked the page
16:02:10 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
16:02:40 <esolangs> [[User talk:Aadenboy/Forces and such]] https://esolangs.org/w/index.php?diff=168863&oldid=168812 * * (+168) /* How does bias work? */ new section
16:05:50 <esolangs> [[User:Aadenboy/Forces and such]] https://esolangs.org/w/index.php?diff=168864&oldid=168826 * Aadenboy * (+43) /* Concept */ forgot this
16:11:37 <esolangs> [[User talk:Aadenboy/Forces and such]] https://esolangs.org/w/index.php?diff=168865&oldid=168863 * Aadenboy * (+686) /* How does bias work? */ reply
16:12:42 <esolangs> [[User talk:Aadenboy/Forces and such]] https://esolangs.org/w/index.php?diff=168866&oldid=168865 * * (+129) /* How does bias work? */
16:14:16 <esolangs> [[User talk:Aadenboy/Forces and such]] https://esolangs.org/w/index.php?diff=168867&oldid=168866 * Aadenboy * (+439)
16:22:44 -!- tromp has joined.
16:29:25 -!- Lord_of_Life_ has joined.
16:30:13 -!- Lord_of_Life has quit (Ping timeout: 250 seconds).
16:30:44 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
16:38:19 -!- Thelie has joined.
17:05:03 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
17:07:06 <b_jonas> this would also be bad for library implementors if they wanted to implement iostream using to_chars. though that won't be happening often for historical reasons because to_chars is new.
17:15:32 -!- lynndotpy6093 has quit (Quit: bye bye).
17:16:18 -!- tromp has joined.
17:16:18 <ais523> b_jonas: so I don't think there are many cases where the tokenizer needs its own tokenizer, and as such I don't think there's that much terminology or them
17:16:24 <ais523> C has pp-tokens which are a similar concept
17:16:40 <ais523> but the relationship between the two tokenizers is different I think
17:16:40 -!- lynndotpy6093 has joined.
17:17:14 <ais523> my suggestion is that you name the two lexers and then call them "lexer A tokens" and "lexer B tokens" (except you use the lexers' actual names rather than calling them "lexer A" and "lexer B")
17:19:01 <b_jonas> ais523: TeX handles ^^X escapes before the tokenizer, C handles \u0041 escapes and ??= trigraphs before the tokenizer, what I want is more only because I want to handle double-quoted strings of variable length instead of just fixed-length pre-tokens
17:19:51 <b_jonas> multiple layers in a lexer isn't that strange I think, I'm just planning to abuse it a bit more
17:19:55 <ais523> "provisional token" would make sense for some two-tokeniser setups but I don't think it applies to yours
17:20:26 <ais523> C's trigraphs are called "trigraphs" even though they're a sort of first-lexer token
17:20:38 <ais523> i.e. just a description of what they are
17:20:53 <ais523> (Java has a similar concept, which I called "hexagraphs" when writing about them because I didn't think they had a name)
17:21:07 <ais523> "token component", perhaps?
17:22:51 <b_jonas> I don't like to call them 'provisional token', I think that would be confusing because the typical use case is that a sequence of multiple letters and some letter-like punctuation is grouped into a word, but each letter is its own pre-token.
17:23:53 <ais523> b_jonas: hmm, it's almost like you're inventing your own encoding
17:24:00 <ais523> and your pre-tokens are characters of the encoding
17:24:01 <b_jonas> yes, and I just wanted digraphs then I wouldn't have a problem, but I also want double-quoted sequences (any length, almost any character allowed inside other than double quote and newline) as pre-tokens
17:25:16 <b_jonas> ais523: yes, if you're just adding a few digraphs or you're decoding a character encoding, like five-bit baudot or murray code with letter and number shifts, or unicode, then you could call your pre-tokens "characters", but with long double-quoted sequences I think "character" would be a confusing name
17:25:59 <ais523> now I'm wondering about a language which somehow has infinitely many lexers/parsers and uses that to get TCness somehow
17:26:35 <ais523> but I think that only works if the lexers or parsers can somehow split a single character into multiple tokens, and am not sure how it would be interestingly different from a string-rewriting language
17:26:39 <ais523> so it's probably a dead end
17:27:54 <b_jonas> ais523: I have considered a language that is an infinitely stacked preprocessor, all it does is preprocess code for itself, and the program can mention how many layers deeper you want to escape something for, and there's no bottom so if you want your program to do something you'll just make the side effects of repeated preprocessing do it, but I couldn't come up with a good language from this yet
17:28:28 <ais523> b_jonas: Wiki Cyclic Tag is basically that (but I'm not convinced it's actually a good language)
17:28:47 <ais523> it's only interesting because it uses an existing preprocessor, and even that isn't super-interesting
17:29:26 <b_jonas> but what I'm thinking of wouldn't be reasonably called a lexer, it would be a preprocessor more like TeX's mouth or Metafont's mouth or SIMPLE are, with functions and conditionals
17:30:05 <ais523> maybe just define the preprocessor and language itself as entirely different things? so both can just say "tokens" and there's no ambiguity
17:30:36 <b_jonas> I may also want a layer for every binary rational number depth or even more numbers than that, rather than just for every integer depth, so there's a preprocessing layer between any two preprocessing layers where you can insert operations, but this is not a strict requirements
17:34:14 <b_jonas> ais523: I don't think I can do that in this case, because I want this double preprocessing eventually for Enchain, though the specific examples I gave might not match it, and Enchain does tokenizing mostly independently of counting columns, so instead of variable names you use columns, and what matters is for some tokens that refer to a variable what column that token is in. I don't think you can really
17:34:20 <b_jonas> imagine this as a preprocessor entirely separate from the language. what I could do is to make the tokenizer much simper without changing Enchain significantly, and maybe I *should* do that, because Enchain would be a better esolang if the only esoteric parts in it were related to the strange columns layout of its source code.
17:36:00 <ais523> complexity for the sake of complexity is *usually* uninteresting in esolangs
17:36:21 <ais523> Malbolge and INTERCAL both sort-of pull it off, but in each of them there's an alternative reason for the complexity, rather than just to be complex
17:39:19 <b_jonas> yes, and I wasn't really trying to do this *just* for the sake of complexity, at least at first, it's more like I added some digraphs because ASCII has too few characters to make everything both single-character and mnemonic, but then I couldn't stop
17:40:05 <b_jonas> but the double quoted string part is very likely a bad idea and I should figure out something better, though I don't yet know what, and I should simplify the digraphs part until it can just be described in one pass
17:41:51 <b_jonas> for the first Enchain-like language that is; if I get that one working then afterwards it'd be fine to make more complicated versions later
17:49:43 -!- Thelie has quit (Ping timeout: 240 seconds).
17:59:47 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
18:24:58 -!- tromp has joined.
18:58:20 <esolangs> [[Talk:(top, height)]] https://esolangs.org/w/index.php?diff=168868&oldid=135849 * Yayimhere2(school) * (-408) me being a dumbass for the sixth millionth time
19:04:27 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
19:09:12 -!- tromp has joined.
19:28:54 -!- Thelie has joined.
19:29:09 -!- chloetax5 has joined.
19:29:34 -!- chloetax has quit (Read error: Connection reset by peer).
19:29:34 -!- chloetax5 has changed nick to chloetax.
19:29:42 <esolangs> [[Also?]] https://esolangs.org/w/index.php?diff=168869&oldid=167914 * Yayimhere2(school) * (+6) /* Also?'s computational class */ add extra symbol for clarity.
19:31:49 -!- ais523 has quit (Quit: sorry about my connection).
19:34:55 -!- Thelie has quit (Ping timeout: 245 seconds).
19:57:53 <esolangs> [[Do you remember me?]] https://esolangs.org/w/index.php?diff=168870&oldid=167979 * Yayimhere2(school) * (+2) /* Semantics */
19:58:24 <esolangs> [[Do you remember me?]] https://esolangs.org/w/index.php?diff=168871&oldid=168870 * Yayimhere2(school) * (+34) /* Semantics */
20:26:02 -!- ais523 has joined.
20:34:41 <korvo> Deliberately resisting the urge to add a Vixen expression language.
20:35:50 <korvo> I'm at the point where I can imagine doing nested sends; I have a top-level that can do $(./top vixen import: objects/CoolObject) but not $(./top vixen import: (objects/CoolObject clone: vixen/TempAllocator)) because it's literally just argv with a carefully-chosen envp.
20:36:18 -!- callforjudgement has joined.
20:36:46 <korvo> Also I have a sort of fixpoint in the sense that $(./top vixen makeTop: top) will regenerate the top-level script.
20:38:00 -!- slavfox_ has joined.
20:38:23 <korvo> So I think that, with some hacking, I could write in e.g. awk and do something that parses lines like `# $result := (self do: $arg) ifTrue: $this ifFalse: $that`. But then I'd be stuck writing the implementations of blocks and closures in awk too, and overall I think it'd be overly precommittal to a One True VM, which is an anti-goal.
20:39:46 <korvo> avih: Regarding literate programming, I'm resisting a related pattern that is very tempting. A perennial problem with compiled methods, where there's both source code and also a compiled bytecode object, is that if the source can be edited then the code either has to be immediately recompiled or cached and invalidated later.
20:40:59 <korvo> Immediate recompilation is not that bad as long as the source is easy to keep around. My execline scripts are super-short. What if I just kept the source as *comments* in the compiled method? Then I can use sed/awk/etc. to convert the compiled script back to the original instructions, and I can regenerate the object easily.
20:41:25 -!- ais523 has quit (*.net *.split).
20:41:25 -!- slavfox has quit (*.net *.split).
20:41:25 -!- joast has quit (*.net *.split).
20:41:26 -!- slavfox_ has changed nick to slavfox.
20:41:43 <avih> korvo: what's the novelty and/or value of that, compared, for instance, to an interpreted language which supports extensive comments?
20:42:17 <korvo> See also https://github.com/brismu/zaha where I add a custom PNG chunk to rendered diagrams; the chunk contains JSON which can regenerate the diagram from scratch. This is *not* the same as Kell & Jakubovic's self-describing diagrams, although it's got the same shape.
20:42:21 <avih> (admittedly, i still don't really get the value in lit programming other than stylistic)
20:43:10 <avih> (off topic, that lit programming github bash script is highly unprofessional bash coding)
20:43:24 <korvo> avih: Ah, sorry, I'll give context. Vixen's a Smalltix: a Unix filesystem that happens to behave like a Smalltalk. Part of the goal is avoiding One True VM because that leads to fragmentation; instead, we want to focus on maintaining the calling convention over any one language.
20:45:37 <korvo> But at the same time, we want to express something like an applicative tree, where we want to arrange existing objects. We want composition! So that means that we need some sort of compositor. How do we express ourselves on that compositor?
20:45:39 <avih> (also, that zaha repo, not your repo, but all the commits are yours...)
20:46:58 <korvo> No accident that Bracha, Jakubovic, and Kell all assume that we'll just port Smalltalk. Like, we'll copy the exact same objects that have been used since the time of Squeak and we'll use objects that have existed for decades.
20:48:05 <korvo> avih: Yes. First time seeing that? GitHub lets us have organizations even if there's few contributors, and it's useful for organizing lots of Free Software that I've already shared with folks. I've had *three* different experiments in brismu for that kind of ontological work; in addition to zaha, there's klesi and zatske.
20:48:25 <avih> (re repo owner)
20:49:11 <avih> we also have an org in mpv (i'm a not currently very active maintainer)
20:49:56 <zzo38> You can store the original data in a custom PNG chunk (I had once made up a custom PNG chunk for a different reason, which is to specify symbolic colour names like XPM does), although I probably would not use JSON. I might use PostScript if it is the source code that you intended to edit, or DER if I want a binary format for the data. JSON, SVG, etc, would also work though if you wanted them
20:49:57 -!- joast has joined.
20:50:15 <zzo38> Also, I think there are some PNG files that are also a ZIP archive file, so you can also include stuff in that way
20:50:29 <avih> korvo: so where does this lit/compiled thing come in?
20:50:33 <korvo> For both brismu and rpypkgs, I wanted to ensure that the barrier to enrolling a new contributor is minimal. I'm trying to attract folks who want to do logic in Lojban or write interpreters using RPython and Nix, respectively.
20:51:24 <korvo> avih: I'll mark up a small file. I forget; can you read execline?
20:51:46 <avih> (to be clean, i'm unfamiliar with any of the nicks/projects mentioned so far)
20:52:22 <avih> korvo: i understood your description, but i don't get the context and or value
20:52:50 <avih> and not that i know of (execline, or even what it is)
20:53:47 <zzo38> When I have closely related things that are not too large I usually put them into the same repository, although for larger projects it might make sense to separate them.
20:54:08 <avih> it's basically source+binary+docs in one file, and i asked how it differs inherently from a script with extensive comments
20:54:23 <korvo> avih: Okay, no worries. One moment. In order of popularity, you'll probably first want to know about Nix (package manager for Linux), then Lojban (conlang for international collaboration, like Esperanto but not), then RPython (fork of Python 2.7 that can turn interpreters into JIT compilers).
20:55:10 <avih> i know about both, but not first hand
20:55:48 <avih> and RPython too, following our discussion in the past
20:56:10 <korvo> Ah, okay. Sorry, I currently am not really remembering the past.
20:57:43 <avih> no worries. i think my maybe unasked question is what's the context for your initial "avih: Regarding literate programming, ..."
20:58:27 <korvo> Oh! I'm trying to avoid making an expression language for Vixen. Like, I have a desire to express applicative trees, but also I don't want to force the system to have One True Syntax.
20:59:37 <avih> iirc someone (you?) brought it up in the past and i didn't know what it was, and then you referred me to a github repo and i read a bit about it but didn't really get what it changes and for whom, and that's my last interaction with lit programming (i did look a bit at the code, read the wikipedia entry, but couldn't really get the value in it)
21:01:02 <avih> (compared to well structured and documented source code)
21:01:32 <zzo38> Literate programming might sometimes be helpful for making it in a book with index and cross-referencing and also might be usable for describing precisely something together with the implementation of it (this can sometimes be helpful in case of otherwise unclear documentation; it is usually not a substitute for proper documentation but sometimes it helps)
21:01:41 <korvo> Well, for example, what if the source code isn't available? Not because it's not open source, but because it's not encapsulated in a way that can be accessed for a grep or rewrite.
21:02:10 <korvo> Is a Unix system self-documenting because the kernel's C is in a standard directory, or because there's a $(man) or $(info) command?
21:04:18 <avih> that's a maintenance problem (keeping the binary and losing the source), hence my question today about your lit/compiled thing was compared to a well documented script, where the code can't be normally lost because it's also the runnable thing, as typically a possibly resulting binary is not distributed
21:04:56 <avih> and/or considered cache etc (jit-like)
21:05:52 <avih> but also, if one manages to lose the source to their binaries, what prevents them from losing the lit source as well?
21:06:39 <korvo> Yeah, those are great points from a traditional sysadmin POV.
21:08:49 <korvo> Okay, here's a couple annotated methods. This one's called reflect: https://bpa.st/HX4A and this one's called intern: https://bpa.st/QATA
21:09:23 <korvo> This isn't quite Smalltalk syntax (or Ruby or whatever dialect you prefer), but hopefully the gist is there. These are basically Smalltalk CompiledMethods.
21:10:32 <avih> i don't get the specifics, but i get the overview. what about it?
21:10:59 <avih> (and i did check what execline it, so i roughly get that too now)
21:12:55 <korvo> Well, the idea is that, if I were to just accept having an expression language, then I could echo a string like "Mirror << reflect: [ | $target | (self clone: (self allocator*)) assign: obj* ref: $target ]" into a top-level compiler and magically have the method appear on the filesystem.
21:13:55 <korvo> Indeed, in the 2000s, this is the trap that everybody fell into. Piumarta made like four or five languages exploring this. But by choosing One True Syntax, we are effectively now in the One True VM implied by what we can get the machine to do with that syntax.
21:16:41 <avih> so the goal here is a compiled program (system?) which is implemented as a file structure, and compilation happens implicitly and automatically, and for contributors it appears that merely adding files makes them part of the program automatically?
21:17:04 <korvo> avih: Oh, also this is an instance of a pattern I call Bikeshed Generator. There are questions that didn't exist before, like how to delimit a string (note that "obj*" needs to be a string literal, and we rely on execline's grammar!) or how to give names to intermediate temporary references.
21:17:36 <avih> but i have to admit i'm overall a bit lost here.
21:18:49 <avih> (that was an understatement...)
21:18:56 <korvo> Let me start at the goal and then we'll work backwards. Quoting Jakubovic, "In the default state of Unix, the source code can be evolved without synchronising the binary. The compiler must be manually invoked after changing the source. Continuous Integration (CI) infrastructure must be set up to do this automatically."
21:19:04 <korvo> "In Smalltalk, the default way of editing code is via the class browser GUI. Upon committing the edit (Ctrl-S), the method is recompiled automatically."
21:19:38 <avih> i've not used smalltalk but i get both quotes
21:20:09 <korvo> The big difference is that, in Smalltalk, recompilation is linear-time and fast, taking only one pass over the inputs. This is parallel to the Pascal tradition, like in Oberon or Go.
21:20:22 <korvo> But C compilation can take a long time. C++ compilation can be quadratic-time.
21:20:23 <avih> so, if i get it right, your goal is something along the lines of the smalltalk model, but over the filesystem instead of gui, yes?
21:21:07 <korvo> Yes. I actually laid it out in a table on wiki: https://esolangs.org/wiki/Smalltix
21:21:14 <avih> but these are all practical concerns. you could use tcc to compile in O(N) too
21:21:54 <korvo> Yeah, this is the second time that tcc's come up. When something comes up thrice, I go take a serious look and evaluate it.
21:22:26 <avih> so basically you want to make the filesystem an apparently-live implementation of whatever runs it
21:22:45 <korvo> Wait, maybe this is the third time? Hm. At any rate, yeah, that's a fair-enough point. But also note that the execline maps fairly closely to the messages that I actually want to send; there's not much overhead aside from parsing.
21:22:47 <avih> (or maybe even actually live)
21:23:34 <korvo> Yes! The idea is to program the machine from the inside.
21:24:04 <avih> tcc is just a nice almost c99 unoptimizing compiler which is very fast and portable. but if you take a step back, it's just a quick unoptimizing compiler.
21:24:17 <zzo38> If you pass messages by argv then it will only use null-terminated strings as messages (although other way around might work)
21:24:46 <avih> korvo: yeah, i do get the idea.
21:25:19 <esolangs> [[Special:Log/upload]] upload * Buckets * uploaded "[[File:ThisIsACatProgram.png]]": This is A Cat program.
21:26:34 <avih> (for reference how quick it is, long time ago someone made a linux system bootable in seconds from source which is compiled on boot from source)
21:27:33 <avih> i.e. you could shut it down, make some changes to kernel source files, boot it again, and it will include these changes
21:27:39 <korvo> zzo38: Yes, that's a real limitation right now. Also, there's some stuff not quite used, like stdin, that is left free for users to provide. I'm slowly making it more complex, and will eventually pass file descriptors too, but I want a convention which can call remotely from one machine to another over plain old SSH.
21:29:06 <zzo38> I had a idea about passing capabilities in a capability-based system (it would be similar to passing file descriptors), using the network, although this does not necessarily work with SSH (my guess is that SSH probably does not do this, although a protocol could be made which does do it).
21:29:09 <esolangs> [[Contains everything]] https://esolangs.org/w/index.php?diff=168873&oldid=168556 * C++DSUCKER * (-14) Change muh mind about recursion
21:29:42 <avih> korvo: is it supposed to be live, like the smalltalk quote you mentioned? i.e. is it one system which is always "running"? or is it code on disk which can be instanciated into a system whenever the user needs it?
21:30:20 <esolangs> [[User:Buckets]] M https://esolangs.org/w/index.php?diff=168874&oldid=168817 * Buckets * (+12)
21:30:29 <zzo38> (I might be wrong about SSH though)
21:31:12 <esolangs> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=168875&oldid=168843 * HeckYeah100 * (+26)
21:31:12 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=168876&oldid=168848 * Buckets * (+13)
21:31:26 <korvo> avih: Both. I should explain some features of Nix. Packages live in the *Nix store*, a big directory at /nix/store/ where each package gets its own subdirectory. The store is read-only. It's also garbage-collected and GC roots are symlinks that are made with a specific command (not ln!)
21:31:46 <esolangs> [[Dision]] N https://esolangs.org/w/index.php?oldid=168877 * Buckets * (+1241) Created page with "Dision Is An Esoteric Programming Language Created By [[User:Buckets]] In 2022. {| class="wikitable" |- ! Number Combonation !! Instructions |- | 0,0 || Swap the Current cell to the One To The Right. |- | 0,1 || Swap the Current cell to the One To The left. |- | 0,2 || M
21:31:54 <avih> korvo: i'm roughly familiar with this, yes
21:32:11 <avih> (i do know what nix is, just no 1st hand experience with it)
21:32:26 <korvo> Right now, Vixen objects can recursively copy themselves into a Nix store. It turns out that this isn't that hard. They can also copy themselves from one machine to another.
21:32:42 <esolangs> [[Non]] N https://esolangs.org/w/index.php?oldid=168878 * HeckYeah100 * (+1624) Created page with "== Non == This programming language is designed for people who want to purposfully hurt their brains. Similar to BF, it is intentionally designed to hurt. ===CHARACTERS=== the characters of non are the following:. ^ //increments the object on stack. , //decrements th
21:33:16 <korvo> Ah, sure. I just thought you might not understand why it's non-trivial to do what I'm currently working on: allowing an object to edit itself by making a temporary copy, spawning an editor and file browser, and recursively copying itself back to the Nix store.
21:34:08 <korvo> Doing `foreground { vim $1 }` is not a big deal. It's all of the check-in, check-out logic, as well as chasing and rewriting symlinks, that gives me headaches.
21:35:29 <korvo> avih: Oh, maybe I totally missed the aim of your question? In terms of what's "running", the Linux kernel's always tracking a cached version of the filesystem, and we can think of Linux itself as the running process with the resident memory.
21:36:06 <avih> is nix inherently related here? i.e. is this intended to be part of nix and/or used exclusively with nix? or is nix here just a convenient platform for it?
21:36:30 <int-e> zzo38: What does SSH have to do with this at this stage? You either need native OS support for remote capabilities, or support to virtualize capabilities so that a user program like SSH can intercept and forward requests.
21:37:26 <int-e> Unless I'm missing a link to some existing but obscure OS like Plan 9
21:37:42 <korvo> The Nix store is essential, yes. This could all work on Tvix or Guix too; what matters is the shape of the filesystem. Nix is a package-capability system; a reference to a package in the Nix store is a (weak unguessable) capability!
21:37:42 <esolangs> [[Contains everything]] https://esolangs.org/w/index.php?diff=168879&oldid=168873 * C++DSUCKER * (+202) Also, i think recursion may be possible without paradoxes. i hope
21:37:44 <avih> (as i mentioned, i'm overall quite lost here, and i'm unfamiliar with vixen too, or your other attempts...)
21:38:07 <zzo38> int-e: If you have proxy capabilities then you can implement forwarding them to network without the kernel implementation of them.
21:38:39 <esolangs> [[Contains everything]] https://esolangs.org/w/index.php?diff=168880&oldid=168879 * C++DSUCKER * (+2)
21:38:40 <int-e> zzo38: that's what I called "virtual"
21:38:41 <zzo38> (In the case of UNIX, this would only apply to UNIX sockets and not other kind of file descriptors, and SCM_RIGHTS can be used but SCM_CREDENTIALS would not be available.)
21:38:43 <korvo> int-e: The P9 link is tenuous but real. Spent last night looking again at Inferno and the Limbo language; awful language, but not the worst VM to host internally.
21:39:15 <zzo38> (This is not quite the same way that I would intend proxy capabilities to work, but it might be the closest thing in UNIX.)
21:40:13 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168881&oldid=168878 * HeckYeah100 * (+323) /* Non */
21:40:51 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168882&oldid=168881 * HeckYeah100 * (+3) /* Non */
21:41:40 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168883&oldid=168882 * HeckYeah100 * (-3)
21:44:51 <korvo> avih: Maybe starting with the threat model is better. It turns out that a capability-aware system is safe when loading code is safe. Part of this is extremely subtle "taming": taking away standard authorities like unrestricted filesystem and network access. But part of this is having an assurance that loading code onto the system will not compromise it.
21:45:46 <korvo> A Vixen object can invoke nix-copy-closure and copy itself across the network, if there's SSH credentials available. But loading code into a Nix store is safe! It doesn't conflict with anything else and it's only executed if somebody calls it.
21:46:01 <avih> korvo: start even earlier. what problem are you trying to solve, if it is indeed solving a problem.
21:46:51 <korvo> Oh. Further back than the problem of fragmentation on Unix?
21:47:12 <avih> fragmentation of what?
21:47:27 <avih> date oh a storage device? memory? implementations?
21:47:48 <zzo38> I thought designing the hardware could be done in combination with software design to improve the safety, although VM codes and emulation could also be used, they would not be as good but still would be usable in order to make the program work on multiple computers. This alone is not sufficient; you would also check that the loaded code is what you intended to load, etc.
21:48:06 <int-e> zzo38: Part of the problem here is the joke: Q: Name 20 UNIX system calls. A: ioctl
21:48:54 <korvo> avih: Fragmentation of the programming model as a consequence of compilation of behavior into early-bound static binaries.
21:49:06 <zzo38> Yes, that is a part of it too.
21:49:34 <avih> korvo: ok, i understand the problem. and vixen is your attempt to come up with a model which addresses it?
21:50:00 <korvo> avih: Vixen's just a fork of Smalltix trying to incorporate many more lessons from other corners of Unix.
21:50:38 <korvo> But further, Vixen's going to be yet another E: an attempt at secure distributed computation which isn't hard to use. Something that can simplify real tasks in my homelab.
21:50:50 <avih> sure, but overall you're trying to come up with a unix model to address the issue of "detached" binary from source?
21:51:38 <avih> gotcha. i get the goal.
21:51:39 <int-e> (Ironically, ioctl is half of the right thing in this context, which is a *uniform* interface for interacting with capabilities that could easily be intercepted and forwarded. But in practice, ioctl is a mess.)
21:51:51 <korvo> Oh, I haven't come up with anything. You might not have noticed the degree to which I am a blender that summarizes whitepapers. But yeah. What I'm looking at right now is how to do something like a CompiledMethod.
21:51:53 <avih> and i also roughly get the means.
21:52:16 <esolangs> [[Non]] M https://esolangs.org/w/index.php?diff=168884&oldid=168883 * HeckYeah100 * (+250)
21:52:28 <zzo38> Yes, that is what I thought about ioctl too, although I would not have such a thing like that; you will have messages sending instead, and the messages can include references to other capabilities.
21:52:55 <avih> korvo: ideas can be considered an output which came up :)
21:53:06 -!- callforjudgement has quit (Quit: sorry about my connection).
21:53:07 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168885&oldid=168884 * HeckYeah100 * (-104)
21:53:35 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168886&oldid=168885 * HeckYeah100 * (-33)
21:53:36 <korvo> int-e: The flat buffers are definitely part of the issue, too. Userspace doesn't have type information for rich structures just from the interface; it's not self-describing. Same problem with SysV/POSIX message queues too, but Linux kernel devs don't force people to use mq.
21:54:09 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168887&oldid=168886 * HeckYeah100 * (+1)
21:54:16 -!- callforjudgement has joined.
21:54:37 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168888&oldid=168887 * HeckYeah100 * (+1)
21:55:54 <korvo> Kell's liballocs is an interesting solution to this. A program compiled/linked with liballocs can ask where a pointer came from: who allocated it, how big is it, what are its original bounds, what's its DWARF-style type info, etc.? I don't know if it works with pointers from the kernel but it hints at the possibility of just *asking* the kernel what it returned in ioctl().
21:57:17 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168889&oldid=168888 * HeckYeah100 * (+81)
21:57:45 -!- callforjudgement has changed nick to ais523.
21:58:25 <esolangs> [[HeckYeah100]] N https://esolangs.org/w/index.php?oldid=168890 * HeckYeah100 * (+7309) Created page with "I'm a chill guy who likes flowers... ..."
21:59:53 <zzo38> I had thought, depending on the use, the type information (and structure information) can be stored in a file which describes the types of messages, or it can use a type/length/value format such as DER (although I had thought to use a different format which I would make up for a new system, you can use DER with existing systems)
22:00:12 <b_jonas> yeah. an interface similar to ?etsockopt would probably be better for ioctl. still not quite describing the types, but slightly better than the vararg arguments of ioctl. but ioctl is like really old, and there are so many ioctl subfunctions defined, it's hard to change now.
22:02:58 <ais523> int-e: prctl is also over 20 system calls on Linux, as is fcntl
22:03:12 <ais523> now I'm wondering why two of those end "ctl" and one ends "cntl"
22:03:46 <ais523> oddly, one of the fcntl calls duplicates a non-fcntl call: dup, so dup is duplicated
22:04:00 <int-e> ais523: because you aim for 5 letters length
22:04:30 <ais523> so a new version of dup was needed because "dup" is only 3 letters and thus too short?
22:04:36 <b_jonas> ais523: fcntl also duplicates an ioctl call, but I think that might be because of a sysv/bsd duplication of interface
22:04:40 <int-e> (what was that, early C export symbol length limit?)
22:04:58 <ais523> would have to be very early, I think the length limits became larger very early on
22:05:05 <int-e> (it was 5 or 6, can't remember for sure; 5 seems more likely in this moment)
22:05:27 <b_jonas> isn't ioctl from before unix got rewritten in C though?
22:05:35 <ais523> although thinking about it, maybe this is why related functions from early C like malloc/calloc differ in their prefix rather than their suffix
22:05:39 <b_jonas> like wasn't it a native level syscall in ancient pre-C unix?
22:05:42 <int-e> ais523: it didn't limit the symbol length per se, but allowed implementations to treat symbols as equal if a short prefix matched
22:05:48 <ais523> b_jonas: huh, what was Unix written in before C?
22:05:49 <b_jonas> I mean they had to control hardware somehow
22:06:26 <b_jonas> ais523: assembly for the machine that they were using. but it's the user-space programs running on it and their syscall interface that's more relevant here than unix itself.
22:06:36 <korvo> ais523: Handwritten! I think I put the story at [[Tmg]]; C was a sort of best-effort hack after Fortran failed to fit on the target machine.
22:06:38 <ais523> right, I know UNIX and C were developed in parallell
22:06:39 <b_jonas> both both started before C
22:07:03 <ais523> also the computer they were using for it originally ran dc as its only non-asm programming language – I was mildly hoping that UNIX had been written in dc but I guess it would be too unlikely
22:07:08 <int-e> b_jonas: which came first, the C language or the C compiler
22:07:12 <b_jonas> ais523: yes, they got paired quickly, so unix became a good motivation and use case for C, and C made unix more portable and allowed it to spread
22:07:34 <ais523> ouch, writing an OS kernel in Fortran would be terrible I think
22:08:07 <ais523> I guess you don't technically need dynamic memory allocation to be able to write a kernel, but it surely helps
22:08:27 <korvo> I don't think that they originally hoped for the kernel to be in C. I think even as late as v4 Unix it was still in assembly, along with most of the small common tools.
22:09:02 <esolangs> [[Contains everything]] M https://esolangs.org/w/index.php?diff=168891&oldid=168880 * C++DSUCKER * (+91)
22:10:55 <esolangs> [[Non]] https://esolangs.org/w/index.php?diff=168892&oldid=168889 * HeckYeah100 * (+115) /* Non */
22:12:05 <b_jonas> korvo: I still think the user-space programs are more important here. unix made them small and mostly independent, so they were easy to rewrite in C one by one.
22:13:18 <korvo> b_jonas: Yeah. I think that you're exactly right about the syscall interface, too. A program written in C can interoperate with an awk script written a few years later, too, so the entire system can evolve past C eventually.
22:15:10 <esolangs> [[Special:Log/move]] move * Aadenboy * moved [[HeckYeah100]] to [[User:HeckYeah100]]: Misspelled title: wrong namespace
22:15:36 <esolangs> [[Contains everything]] https://esolangs.org/w/index.php?diff=168895&oldid=168891 * C++DSUCKER * (+185)
22:21:18 <esolangs> [[Contains everything]] https://esolangs.org/w/index.php?diff=168896&oldid=168895 * C++DSUCKER * (+19)
22:29:42 <zzo38> Valgrind will sometimes report memory as lost even if the program is immediately terminated after the contents of the memory is written to the output
22:34:46 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168897&oldid=168734 * NTMDev * (+2) /* Calling a Function */
22:37:14 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168898&oldid=168897 * NTMDev * (+33) /* Calling a Function */
22:37:49 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168899&oldid=168898 * NTMDev * (+91) /* Dictionaries (Hash Maps) = */
22:50:44 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168900&oldid=168899 * NTMDev * (+413) /* Dictionaries (Hash Maps) */
22:58:04 -!- amby has joined.
23:05:17 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168901&oldid=168900 * NTMDev * (+721) /* Dictionaries (Hash Maps) */
23:05:48 -!- yc has quit (Remote host closed the connection).
23:10:50 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
23:14:30 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168902&oldid=168901 * NTMDev * (+791) /* Key */
23:26:14 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168903&oldid=168902 * NTMDev * (+12) /* GetItems */
23:26:33 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168904&oldid=168903 * NTMDev * (-12) /* GetItems */
23:34:33 <int-e> ais523: I went to check the historical minimum limit for external identifiers was 6 (and 31 for internal identifiers)
23:34:45 <ais523> int-e: that matches my memory
23:51:15 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168905&oldid=168904 * NTMDev * (+413) /* GetItems */
23:54:19 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168906&oldid=168905 * NTMDev * (+491) /* Get item in Dictionary */
23:57:51 <esolangs> [[ASTLang]] https://esolangs.org/w/index.php?diff=168907&oldid=168906 * NTMDev * (+169) /* Bugs */