00:08:52 <esolangs> [[User:Hotcrystal0/Sandbox]] https://esolangs.org/w/index.php?diff=162906&oldid=162905 * Hotcrystal0 * (+861)
00:11:53 <esolangs> [[Combinatory logic]] https://esolangs.org/w/index.php?diff=162907&oldid=162900 * Corbin * (+367) Shuffle headers to focus on systems. Also fill in a couple missing rows in the table.
01:07:25 -!- DOS_User_webchat has quit (Remote host closed the connection).
01:07:40 -!- DOS_User_webchat has joined.
01:19:14 -!- DOS_User_webchat has quit (Remote host closed the connection).
01:28:00 <esolangs> [[Combinatory logic]] https://esolangs.org/w/index.php?diff=162908&oldid=162907 * Corbin * (+1899) Put SKI and BCKW on the same ground as other systems in the literature.
01:35:48 -!- amadaluzia has quit (Quit: ZNC 1.10.1 - https://znc.in).
01:52:14 <esolangs> [[Combinatory logic]] https://esolangs.org/w/index.php?diff=162909&oldid=162908 * Corbin * (+696) /* Properties */ Finish listing properties. What they have in common is some sort of obstruction to completeness.
01:58:05 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162910&oldid=162902 * Junkshipp * (-33) /* #df - Definitions of functions */
02:10:34 -!- sprock has quit (Ping timeout: 260 seconds).
02:34:06 -!- FreeFull has quit (Quit: Lost terminal).
02:38:37 <esolangs> [[Combinatory logic]] https://esolangs.org/w/index.php?diff=162911&oldid=162909 * Corbin * (+2819) Add a detailed section on completeness and related concepts.
03:12:20 <esolangs> [[Turing tarpit]] https://esolangs.org/w/index.php?diff=162912&oldid=162872 * Corbin * (+436) /* Minimal combinator bases */ Use theorems from [[combinatory logic]] to carefully circumscribe the possibility of a singleton basis.
03:13:37 <korvo> b_jonas: Okay, I *think* I've patched up all of the spots where I was spouting wrongness. Certainly I think [[Iota]] is cleaned up already.
03:14:34 <korvo> I suppose that a single-combinator basis is still possible. But it can't be Iota, which has rank one and is linear in that sole argument. We gotta treat combinators and closed lambda terms as different things.
03:15:55 <esolangs> [[Special:Log/newusers]] create * Thomas * New user account
03:22:15 <esolangs> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=162913&oldid=162779 * Thomas * (+213) Introducing my self.
03:37:52 <esolangs> [[Special:Log/newusers]] create * Hibiscus * New user account
03:43:54 <korvo> int-e: I never did find a way to cite "The Combinator S", but thank you for linking it anyway. I enjoyed it even though it was not easy or fun.
03:48:32 <korvo> ...Well, "fun" is relative, right?
03:49:13 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=162914&oldid=162913 * Hibiscus * (+172)
03:59:09 <esolangs> [[User:Pifrited/PasteBin]] https://esolangs.org/w/index.php?diff=162915&oldid=162884 * Pifrited * (-595)
04:00:09 <esolangs> [[LayerCake]] https://esolangs.org/w/index.php?diff=162916&oldid=156185 * HellsfargoMC * (+4) /* Fibonacci.lc: */ corrected programming mistake
05:05:04 <esolangs> [[User made]] N https://esolangs.org/w/index.php?oldid=162917 * Helpeesl * (+335) This is the 4th esolang experiment by me guys, will come back August 6th 2026 to make the page
05:07:24 <esolangs> [[GnomeLang]] N https://esolangs.org/w/index.php?oldid=162918 * Thomas * (+5010) Created page with "{{infobox proglang |name=GnomeLang |paradigms=Concurrent,Declarative,Imperative,Spatial |author=[[User:Thomas]] |year=[[:Category:2025|2025]] |memsys=[[:Category:Cell-based|Cell-based]] |dimensions=theoretically infinite-dimensional |class=[[:Category:Turing complete|T
05:08:36 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162919&oldid=162918 * Thomas * (-1)
05:11:15 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162920&oldid=162919 * Thomas * (+124)
05:11:50 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162921&oldid=162920 * Thomas * (-110)
05:13:05 <esolangs> [[User:Thomas]] N https://esolangs.org/w/index.php?oldid=162922 * Thomas * (+56) Created page with "== Languages I take responsibility for == *[[GnomeLang]]"
05:14:34 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162923&oldid=162921 * Thomas * (+1)
05:15:24 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162924&oldid=162923 * Thomas * (+15)
05:15:47 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162925&oldid=162924 * Thomas * (+1)
05:19:08 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=162926&oldid=162745 * Thomas * (+16)
05:21:59 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162927&oldid=162925 * Thomas * (+14)
05:23:35 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162928&oldid=162927 * Thomas * (-2)
05:25:32 <esolangs> [[User:Thomas]] https://esolangs.org/w/index.php?diff=162929&oldid=162922 * Thomas * (+28)
05:26:49 <esolangs> [[GnomeLang]] M https://esolangs.org/w/index.php?diff=162930&oldid=162928 * Thomas * (+23) Replaced spawn with construct, and removed dwarf adjacent typos
05:39:29 <esolangs> [[User:Thomas]] https://esolangs.org/w/index.php?diff=162931&oldid=162929 * Thomas * (-28)
06:43:16 -!- tromp has joined.
06:46:56 -!- DOS_User_webchat has joined.
06:47:24 -!- DOS_User_webchat has quit (Remote host closed the connection).
06:47:41 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162932&oldid=162930 * Thomas * (+22)
06:48:07 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162933&oldid=162932 * Thomas * (-1)
06:48:10 -!- iiiiiiiiiiiiiiii has joined.
06:48:12 -!- iiiiiiiiiiiiiiii has quit (Remote host closed the connection).
06:48:58 -!- DOS_User_webchat has joined.
06:49:41 <esolangs> [[User:.t/GravelContainer]] N https://esolangs.org/w/index.php?oldid=162934 * .t * (+108) Created page with "{{{2|<div style="border-width:1px;border-color:#888888;border-style:solid;padding:8px;">Javascript!</div>}}}"
06:52:01 -!- DOS_User_webchat has quit (Remote host closed the connection).
06:56:34 <esolangs> [[Special:Log/newusers]] create * !!!!! * New user account
07:00:29 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=162935&oldid=162914 * !!!!! * (+133)
07:00:56 <esolangs> [[User:!!!!!]] N https://esolangs.org/w/index.php?oldid=162936 * !!!!! * (+15) Created page with "This is a test."
07:01:00 <esolangs> [[User talk:!!!!!]] N https://esolangs.org/w/index.php?oldid=162937 * !!!!! * (+15) Created page with "This is a test."
07:06:20 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162938&oldid=162933 * Thomas * (+67)
07:09:13 <esolangs> [[Disan Count Pesudocode]] M https://esolangs.org/w/index.php?diff=162939&oldid=136970 * Ractangle * (-20) /* Disan Count */
07:10:48 -!- Sgeo has quit (Read error: Connection reset by peer).
07:14:29 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162940&oldid=162938 * Thomas * (-3)
07:44:51 <esolangs> [[Textile]] https://esolangs.org/w/index.php?diff=162941&oldid=134001 * Dtp09 * (-37) rephrased some explanations, changed "replacements" to "macros", added spaces after code example comments, other minor edits
07:45:23 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162942&oldid=162940 * Thomas * (+112)
07:48:47 <esolangs> [[User:Dtp09]] https://esolangs.org/w/index.php?diff=162943&oldid=152178 * Dtp09 * (-59)
08:10:04 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162944&oldid=162942 * Thomas * (-221)
08:10:23 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162945&oldid=162944 * Thomas * (-100)
08:56:59 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
09:14:24 -!- tromp has joined.
09:19:06 <esolangs> [[Talk:ESOPUNK]] N https://esolangs.org/w/index.php?oldid=162946 * L4.m2 * (+212) Created page with "== Turing Complete == It should simulate Counter machine by Godel with if (x7 == 0) <=> MODI X 7 T ++x7 <=> MULI X 7 X --x7 <=> DIVI X 7 X Not sure if it act everything when introducing (infinite) IO, though"
09:27:32 <esolangs> [[GRPE]] M https://esolangs.org/w/index.php?diff=162947&oldid=161336 * Bil-joodusstudios * (+0) The source code for the interpreter I made was created in 2022 and so were the first programs and thus the date 2023 was inaccurate
09:35:37 -!- FreeFull has joined.
10:39:17 -!- DOS_User_webchat has joined.
10:54:53 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
11:11:59 -!- ais523 has joined.
11:12:12 -!- tromp has joined.
11:14:38 <ais523> <b_jonas> I, K, KI, S, B, C, W are the important ones ← also «flip id» – that's one of the few that's important enough that I special-cased it in my combinator evaluator
11:15:02 <ais523> according to the list on the wiki, it's called "thrush"
11:15:16 <ais523> although I don't really like using bird names, it's just confusing
11:17:42 -!- Lord_of_Life has quit (Read error: Connection reset by peer).
11:21:30 -!- Lord_of_Life has joined.
11:26:39 -!- DOS_User_webchat has quit (Ping timeout: 252 seconds).
11:27:07 <ais523> ah right, this reminds me: instead of BCKW you can use BTKW, C is B (T T) (B B (B (T B) (B B T)))
11:27:32 <ais523> although this is the sort of trick that somewhat reminds me of Underload without ~
11:28:48 <ais523> last time I looked at this, I suspected that this would be TC even without K (via the bit-bucked method), although I didn't come up with a workable proof
11:29:41 <ais523> …and now it crosses my mind that ~ and ! are the two combinators you can simple-translate out of Underload
11:30:05 <ais523> obviously they aren't *exact* matches for C and K but there are nonetheless obvious similarities
11:31:41 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
11:32:11 <ais523> …and the obvious name for this basis is "BTW"
11:37:44 -!- amby has joined.
11:44:56 -!- Vorpal has joined.
11:46:53 <Vorpal> hi, according to client logs I did briefly visit here in 2023
11:47:58 <ais523> nowadays we chat somewhat asynchronously via the logs, usually – we've been talking about combinators over the past few days
11:48:38 <Vorpal> not that much into esolangs these days, don't have much time for it.
11:49:21 <ais523> fair enough – I've been less into it than I used to be, I think
11:49:48 <ais523> I've been working more on practical languages, which is a lot more difficult to produce results with quickly
11:49:55 <ais523> but maybe more useful when you do
11:50:26 <Vorpal> yeah, doing things that are useful and feel like they are worth your time, it gets more important the older you get I think
11:50:49 <ais523> oddly, the esolangs results feel more useful sometimes
11:51:01 <ais523> …but a smaller audience
11:52:27 <ais523> I enjoyed golfing down the TCness construction for Magic: the Gathering – after a while it turned into working out what could easily be constructed and then trying to prove it TC
11:54:14 <ais523> (also, I guess the way that I use Rust is on the verge of turning it into an esolang – lots of trying to prove things with the type system)
11:55:38 <Vorpal> right, while I build useful cli programs mostly
11:55:49 <Vorpal> and am experimenting with rust on a ESP32
11:56:49 <Vorpal> unfortunately, I'm getting the sort of issues that normal rust protects against. I'm trying to do DMA and getting hardware exceptions
11:57:20 <Vorpal> I want to do a sound visualiser (with a I2S microphone)
11:57:45 <ais523> I've programmed both microcontrollers and DSPs in the past, but it was a long time ago now
11:58:18 <ais523> the microcontrollers had around 100 bytes of RAM (+ a few kilobytes of nonwritable program memory)
11:58:47 <Vorpal> The rust abstractions are interesting, using lots of typestate patterns and ownership for peripherals
11:58:51 <ais523> or, well, you could write it in hardware, just not in software
11:59:45 <Vorpal> the ESP32 dev board I use has like ~500 kB usable SRAM, 4 MB flash and 8 MB external DRAM
11:59:57 <ais523> I feel like Rust doesn't do typestate properly at the moment (thus the interest in strong updates), but it should work if you're managing global variables (which hardware resources effectively are)
12:00:35 <ais523> I wonder whether microcontrollers are more powerful nowadays; my guess is "more powerful microcontrollers exist but the very small ones still exist because they're cheap and many products don't need much power"
12:00:44 <ais523> computational power, that is, not electrical power
12:00:54 <ais523> although I guess the two may be correlated!
12:01:17 <Vorpal> Yeah the ESP32 is on the upper end for sure. But most micros used for new projects are 32-bit these days. Mostly ARM and RISCV
12:01:30 <Vorpal> I doubt people do *new* projects on AVR for example
12:03:59 <ais523> I think I stopped working on this before AVR became popular
12:04:25 <Vorpal> yeah I don't even know what came before that. Old Intel and Motorola parts iirc?
12:04:29 <ais523> but it was nice being so close to the hardware
12:04:39 <ais523> you could just write to memory to change the voltage on pins
12:04:47 <Vorpal> and the Microchip PIC series, right
12:04:52 <ais523> right, I was using PICs
12:05:36 <ais523> they were (are?) basically a transport-triggered architecture for all the hardware features and for memory addressing, but had arithmetic instructions (including RMW) in addition to just mov
12:05:43 <Vorpal> ais523: well yeah, hardware peripherals are usually memory mapped. Though some architectures have a separate IO bus (including x86, but that is only used for ISA, anything more modern is memory mapped instead)
12:08:18 <Vorpal> but I have to say, I have moved towards systems/low level programming in general. Not that interested in abstract language design. For me, the most important question in language design: how is this useful for the practitioner?
12:08:42 <ais523> my esolangs have tended towards useful too – although primarily in terms of being useful for proving things with
12:09:01 <Vorpal> you went into academia, right?
12:09:06 <ais523> The Waterfall Model is probably my biggest esolang breakthrough since Underload (or maybe more so, because other people would have discovered Underload if I hadn't)
12:09:24 <ais523> I got a PhD, did a postdoc, then covid happened and I was ill for a few years
12:09:53 <ais523> and I still go through frequent periods of not being able to concentrate on anything, which is making it difficult to get a job
12:11:21 <ais523> employers probably don't want employees who frequently and randomly do nothing for a 3-4 weeks at a time (it is improving, though – a couple of years ago it was measured in months rather than weeks)
12:11:47 <Vorpal> still I think that shows the point really. "The Waterfall Model" looks nice, but I don't see how it is applicable to solving "real world problems" (however you define that). That doesn't mean it isn't valuable as research, but it doesn't really interest me much. It is the difference between pure and applied mathematics. I found out that I'm *way* over on the applied side.
12:12:06 <ais523> right, these aren't real-world problems but mathematical problems
12:12:16 <ais523> it cut down the time for the typical TCness proof from a few days to a few mintues
12:12:31 <ais523> …and started to make some of the more difficult TCness proofs viable
12:13:58 <Vorpal> The most important theorem for me out of TCness and such has been Rice's theorem. Because it lets me say "this problem is one that cannot actually be solved (or at least not without false positives / negatives)". That result is in a sense a very applied one.
12:14:23 <ais523> I feel like Turing tarpits tend to be fundamentally either queue-based or counter-based; tag systems handle the queue-based languages, MInsky machines and TWM handle the counter-based languages depending on whether their problems are with data storage or control flow
12:14:48 <ais523> right, we know that there are problems about programming that we can't have general solutions to
12:14:53 <Vorpal> I did do a esolang thing a few years ago, as a project to learn rust: https://github.com/VorpalBlade/brainoxide (ignore recent updates, it is just dependabot)
12:15:42 <Vorpal> as it was my first rust thing, the code is for sure non-idomatic. Also there are several optimisations that aren't implemented because I got the internal graph representation wrong.
12:15:53 <Vorpal> (But the goal was learning rust, so who cares)
12:16:30 <ais523> I tried to write an SSA optimiser for counter machines ages ago, but got lost – the internal representation was wrong I think
12:16:38 <Vorpal> (also I used it to experiment with github actions before applying those things on more important projects)
12:16:49 <ais523> but it should have been possible to adapt it to BF to some extent
12:17:15 <ais523> also I hadn't realised that keeping up with dependencies was so difficult
12:17:25 <ais523> I try to avoid those as much as possible nowadays
12:17:39 <Vorpal> the funny thing is that an optimising BF compiler is actually more of a *decompiler*. Because you are trying to recover higher level structure out of a incredibly low level thing.
12:17:41 <ais523> my latest big Rust project has involved reimplementing references
12:18:01 <Vorpal> [14:17] <ais523> also I hadn't realised that keeping up with dependencies was so difficult <-- that has not been my experience at all. Not in rust at least.
12:18:05 <ais523> and when you aren't using the standard & and &mut, existing libraries don't work very well
12:18:32 <ais523> I guess the dependency bumps probably aren't required for it to continue working
12:19:09 <Vorpal> indeed, it also has a test suite, and fuzz testing
12:19:13 <ais523> although, it's surprising how often a crater run turns up "this obviously useless and wrong construct is used in an old version of some really widely used library"
12:19:40 <ais523> which means that Rust projects bitrot faster than you would expect if you don't keep the dependencies up to date
12:20:55 <Vorpal> https://github.com/VorpalBlade/chezmoi_modify_manager https://github.com/VorpalBlade/keyboard-backlightd and https://github.com/VorpalBlade/filkoll https://github.com/VorpalBlade/paketkoll are *useful* things I have written in rust. It is an amazing language for these sort of tools.
12:21:58 <Vorpal> at least three of them I have gotten issue reports from other people, so some people are at least using them
12:22:04 <Vorpal> (or tried to use them)
12:22:17 <ais523> I guess whether I write useful things in Rust depends on whether you consider esolang interpreters useful :-D
12:22:30 <ais523> (although I am working on larger useful projects too – it just takes a lot longer, especially with all the time not working)
12:23:41 <Vorpal> I especially like what I did in filkoll, with zero-copy deserialisation and mmap.
12:24:10 <Vorpal> I even wrote a blog post about it, which might be of interest if you are into squeezing every bit of performance from a program: https://vorpal.se/posts/2025/mar/25/filkoll-the-fastest-command-not-found-handler/
12:24:16 <ais523> hmm… IIRC mmap is very hard to use safely in Rust
12:24:22 <Vorpal> the blog goes into that
12:24:27 <ais523> because if you have any reference to any byte in the file, and someone changes the file…
12:24:39 <ais523> are you using the "array of UnsafeCell" method?
12:25:07 <ais523> I will do at some point, but it takes a while
12:25:20 <Vorpal> I'm ensuring that the file isn't changed. I define what my thread model is.
12:25:37 <ais523> I've been wondering about trying to use Linux leases to make mmap safe with Rust, but it's very hard to define because the safety becomes based on real-world time
12:27:19 <Vorpal> ais523: so the TLDR is that the file is written in one go by a cron job / systemd timer. So I do the temp file and move into place to atomically replace the file trick. And since this is done by root, and the reading phase of the program is normally run by not root, I consider root trusted. If you have malicious software writing those files you have way bigger issues.
12:28:02 <ais523> (a lease allows you to get a definitive answer to "will this file change in the next 10 seconds?", which Linux implements via delaying writes by 10 seconds while there is an active lease)
12:28:23 <ais523> (although, you're supposed to drop the lease if the kernel tells you that someone wants to write)
12:28:35 <ais523> Vorpal: right – you're considering the file to be an extension of the program
12:28:59 <Vorpal> I use the rkyv crate for actual zero-copy deserialisation of that data, and it too has safety requirements, about matching data structures being used. So I hash all of that and put it in a header, and if the hash doesn't match I don't load the file but print an error about regenerating the files
12:28:59 <ais523> I think that isn't a general solution, but it works here
12:29:34 <Vorpal> (I also hash Cargo.lock into that)
12:30:01 <Vorpal> ais523: it is a cache file effectively, so for that case it works.
12:30:24 <Vorpal> if you want to do mmap IPC or something like that, I agree: you have way more complex problems to deal with
12:30:44 <Vorpal> and keeping it all as raw pointers and doing volatile isn't attractive either
12:31:22 <Vorpal> Oh and I have also gotten into 3D printing and figuring out way to use as little plastic as possible while doing so.
12:31:31 <Vorpal> (my most recent blog post is on that)
12:31:48 <ais523> "In particular it wouldn’t be safe to *not* do UTF-8 validation: It is possible to mix up handles from different interners." ← this is a major hole in Rust and the one that I'm currently spending most effort on trying to fix
12:32:05 <ais523> specifically, the "mix up handles from different interners" part of it
12:32:44 <Vorpal> So, branded lifetimes (ghost cell etc) could solve that, but awkwardly. But it absolutely doesn't work across serialisation and deserialisation.
12:32:46 <ais523> I wrote a blog post about it last year: http://ais523.me.uk/blog/scoped-generics.html
12:33:19 <ais523> although it's mostly about making brands a) easier to use and b) able to transmit data across trait boundaries, even if the traits don't know about the data
12:33:51 <Vorpal> ais523: yeah, but I bet whatever solution you think of won't apply across serialisation and deserialisation, especially with rkyv which has a derive macro that generates separate types for deserialization that uses relative pointers
12:34:06 <ais523> I think it's compatible with serialisation (you make the deserialisation produce the appropriate brand at the same time as it reads the data), but it may not be compatible with existing deserialisation libraries
12:34:09 <Vorpal> (that is the only way to make it *zero copy*
12:35:07 <Vorpal> ais523: deserialisation can't really do anything if you want it to be zero-copy. It has to be the equivalent of a std::mem::transmute basically.
12:35:12 <ais523> the thing about brands is that they're ZSTs, so you can add them to existing data structures in a zero-copy way
12:35:24 <ais523> you can transmute () into a ZST
12:35:47 <ais523> the difficult part is proving that you have the right one, but if you're using unsafe code that doesn't matter
12:36:15 <ais523> or, well, it's still difficult but it doesn't matter *to Rust*, just when you're writing the code
12:36:35 <Vorpal> I could use unsafe code to skip the UTF-8 validation. It could be *sound* if I use it right. It just wouldn't be *safe*
12:37:22 <ais523> right – so the approach would be "having this brand on offset X means that data structure Y has valid UTF-8 starting from offset X"
12:37:47 <Vorpal> sounds about right, yes
12:37:55 <ais523> and as long as you serialise the list of offsets and the string dump, you can deserialise into some thing with the same branding structure, as long as you trust the bytes on disk
12:38:00 -!- DOS_User_webchat has joined.
12:38:06 <ais523> * as long as you serialise them together
12:38:18 <Vorpal> (I saw a blog the other day about lifetime brands in rust, I need to get around to reading it)
12:38:31 <ais523> I haven't read it yet, although I did write about it in my own blog post
12:38:38 <Vorpal> (but I was on a road trip for the past week, didn't have time)
12:38:48 <Vorpal> https://old.reddit.com/r/rust/comments/1mhkvrs/the_generativity_pattern_in_rust/
12:38:53 <ais523> I didn't consider it a priority for reading because I thought I knew about the topic already, but maybe I should in case it says something I don't know
12:38:58 -!- DOS_User_webchat has quit (Remote host closed the connection).
12:39:03 <Vorpal> haven't had time to read the associated blog yet
12:39:35 <Vorpal> I just knows the basics of it and filed it as "oh, that is neat, I don't have any immediate uses for this"
12:40:44 <ais523> hmm, I think my opinion on "unsafe" is "I will use this if I have to, but I would prefer if I can get whatever I'm doing into the standard library so that I don't have to"
12:40:46 <Vorpal> but apparently there is more ways to do it than the scoped closure given an invariant lifetime
12:40:52 <Vorpal> so I should probably read it
12:41:50 <Vorpal> ais523: for sure. The question of motivation for unsafe becomes tricky when it becomes a performance question. E.g. I can save x% of the total runtime of my tool if I use unsafe. Is it worth it?
12:42:17 <ais523> oh, I work backwards – start with the theoretical performance limit and then see what the obstacles to reaching it are
12:43:06 <Vorpal> huh, I write code that functions first, and then see where the bottlenecks are, and try to optimise it. I found perf, bpf etc to be surprisingly fun and enjoyable.
12:43:08 <ais523> that's how I came up with the 55GiB/s fizzbuzz
12:43:30 <Vorpal> oh right, I remember that, yes
12:43:55 <Vorpal> I did read the code, well part of it, I think I got lost somewhere around how the custom bytecode VM supposedly worked.
12:43:59 <ais523> I've done the whole "looking for bottlenecks" thing but it's annoying
12:45:03 <Vorpal> I found it enjoyable. And as a bonus you can be solving a practical problem a customer is having right now. That feels nice.
12:45:33 <ais523> I came up with a good way to explain the VM: you can think of FizzBuzz as a sequence of instructions that output one byte each (at least if you know the number of digits in the numbers you're printing), that fact isn't useful if you just compile the instructions, but if you *interpret* the instructions you then have a SIMD situation (because it's the same interpreter for every instruction) and so you can vectorise
12:45:57 <Vorpal> Did something like that just before the vacation. The customer was running the program on a way less powerful machine than we used. So what we saw as 12-20% CPU load, they saw as 100%+ CPU load.
12:46:43 <Vorpal> Managed to cut the CPU usage in more than half there, plus I learned some new tools (tracy in particular, just sampling profiling wasn't enough).
12:47:55 <Vorpal> And I left my colleagues with a list of things they should do to optimise it further (in other parts of the system)
12:48:49 <ais523> I guess I'm out of practice with actual practical programming – I am mostly trying to fix the theory and hoping it leads to improvements in the practice later on
12:49:35 <ais523> my last attempt to write a practical program didn't work out very well
12:50:03 <Vorpal> I really can't find any energy or motivation for writing something that *doesn't* solve a practical problem any more.
12:50:26 <Vorpal> I got burnout a few years ago, and in general even after that I have less energy than I used to
12:51:09 <ais523> (also I spent ages trying to work out whether the "take the dot product of your key and the input" was a valid randomized hash function – eventually I figured out that it is only good if your aim is to have 0 collisions, because an attacker can increase the chance of a large multi-collision to unacceptably large values even though they can't influence the chance of there being any collisions at all)
12:52:22 <Vorpal> hm, hash functions is a bit of a problem. For most software I write, I would prefer a faster but non-DOS resitant hash for things like hashmaps
12:52:23 <ais523> I guess the way I see it is, I could either try to solve one practical problem and get frustrated with the tools I'm working with, or I could try to make a million practical problems all a little easier to solve
12:52:38 <Vorpal> because I don't have untrusted input in my threat model. They are cli programs!
12:53:00 <Vorpal> what I wish is for rust / cargo to get the build-std support in proper shape
12:53:10 <ais523> I generally have untrusted input in my threat model for CLI programs, but the threat is usually "the user accidentally renames or edits a file while the CLI is working on it"
12:53:22 <ais523> -Z build-std is seriously being worked on, as far as I can tell
12:53:31 <Vorpal> then we could have std feature flags for things like DOS resistant hash functions, or normal vs priority inheritance mutxes
12:53:35 <ais523> …although I guess it wouldn't be -Z any more once it's been finishd
12:54:02 <ais523> I think the normal plural is "mutexes", but as with any word ending in x it is likely to be pluralised in some interesting ways
12:54:21 <Vorpal> man, let me tell you, hard real time Linux (which I do for my day job) doesn't get the love it deserve further up the stack in programming languages
12:54:42 <Vorpal> English spelling is... interesting
12:54:45 <ais523> in this case "ex" is an abbreviation for "exclusino" so I think it pluralises using the same basic ruleset that "exclusion" uses
12:55:28 <ais523> hard realtime is one of those things where you really want the programming language to help
12:55:37 <ais523> some sort of resource system, perhaps
12:56:03 <ais523> oddly, from a mathematical point of view, hard realtime is easier to work with than non-hard-realtime concurrency
12:56:17 <ais523> (I did some work on that in my PhD)
12:56:32 <ais523> you don't have to worry about all the possible orderings of events if you know exactly how much time everything is taking
12:56:32 <Vorpal> both C++ and Rust std mutexes doesn't do Priority Inheritance (PI). Which is a thing you really want. The underlying pthread mutex and/or futex does support it optionally. But you need to use/enable that variant.
12:56:45 <ais523> (although I get a suspicion that modern OSes and programs aren't quite *that* hard realtime)
12:56:57 <Vorpal> ais523: that is only true for single core
12:57:29 <ais523> well, mathematically you can assume the cores run lockstep, but that would need a processor with very predictable timings
12:57:32 <Vorpal> as soon as you do hard RT on multicore (and don't pin *everything*) the exact solutions fall apart
12:57:55 <ais523> a cluster of 6502s would be able to do it just fine (but the performance would be terrible)
12:58:32 <Vorpal> and let me tell you: no one in industry is actually doing the academic mathematical approaches to hard realtime. I forget what those diagrams with dots moving around were even called.
12:58:33 <ais523> I wonder what the correct term for "we have hard time limits but our processor doesn't do things in a predictable time" is – it's somewhere between hard and soft realtime
12:58:49 <ais523> Vorpal: oh, I'm not at all surprised, at least for software approaches
12:58:54 <ais523> I bet the people synthesising hardware are doing it though
12:59:05 <Vorpal> (this might not be true in things like flight control software, which has more stringent requirements)
13:00:45 <ais523> one of the trickiest situations is "things that give an unpredictable performance improvement"
13:00:49 <ais523> like branch predictors and L1 caches
13:00:49 <Vorpal> Thankfully, the things I work on (while safety critical in that humans could be in danger) are slow and are safe if they just stop. So the solution is "we have emergency stop buttons everywhere, which cut the actuations electrically)
13:01:18 <ais523> the program clearly works better with them involved – but it almost feels like, for hard realtime, you might not be able to rely on them helping at all
13:02:28 <ais523> I guess you can rely on the OS to not pre-empt you too much, and just hope that the cache and branch predictor act sensibly in that case
13:02:41 <Vorpal> it depends on your timing requirements. Hard realtime is about predictability. If your requirements is on the order of tens of ms, realtime linux is fine.
13:03:17 <ais523> but I would be worrying about pathological cases like "all the pointers in the program were allocated with the same values in the middle bits, causing the cache performance to massively degrade"
13:03:32 <Vorpal> If you need µs to single digit ms, you should consider a microcontroller. If you need ns you should look at FPGAs or digital electronics. If you need less than that look at analog electronics
13:04:06 <Vorpal> that is a very rough categorisation, but it is pretty accurate I feel.
13:05:46 <ais523> in the run-up to my PhD, I was working on algorithms designed for use with clockless digital electronics, i.e. they run as fast as the wires transmit information (the limiting factor there is the delay on your pulse reshapers making your pulses have nice square edges)
13:05:56 <ais523> although we didn't actually implement it on a platform like that, we used a clock for testing
13:05:56 <Vorpal> Most of what I do is on the 10s of ms range. So realtime Linux works fine. And we push the shorter time range things to connected microcontrollers (that do the actual electical IO)
13:07:01 <ais523> right – I guess my concern is more about what could happen in theory than anything
13:07:18 <ais523> worst-case performance is often an awful lot worse than average-case performance
13:07:19 <Vorpal> I have heard of clockless designs, but I don't really know anything about them. I have a vague memory of someone building a clockless (MIPS?) CPU ages ago as a research projects.
13:07:43 <ais523> what if we happen to hit the miniscule chance that all our data hashes to the same value and the hash table becomes quadratic, that sort of thing
13:08:30 <esolangs> [[User:Hotcrystal0/Sandbox]] https://esolangs.org/w/index.php?diff=162948&oldid=162906 * Hotcrystal0 * (+119)
13:08:55 <ais523> Wikipedia makes a distinction between hard real-time (where a deadline miss is completely unacceptable) and firm real-time (where it's just really bad and you want to minimize the probability, but where if the probability is low enough you'd prefer to pay the cost of very rare deadline misses rather than the cost of coding to worst-case rather than average-case)
13:10:02 <Vorpal> ais523: indeed. But the things we control are all *big* hydraulics. And the inertia in that dwarfs anything else in the system. Now, if you were controlling an agile robot (Boston dynamics sort of thing) that would be a different matter, you would still have a linux system doing the high level planning, but actual PID loops wound be done in microcontrollers. And we do some of that too. Just less of it than most.
13:10:52 <Vorpal> ais523: I would put things like live sound processing into "firm real-time". You don't want an audio glitch during your rock concert. But no one will die from it.
13:10:55 <ais523> it strikes me that if you have a safe default action (e.g. stopping) you can use that as an automatic reaction to an imminent deadline miss
13:11:05 -!- fungot has joined.
13:11:10 <fizzie> Vorpal's presence reminded me that fungot had probably been offline for, like, months at this point.
13:11:11 <fungot> fizzie: the debugger?' navigate stack frames with c-p/ c-n.
13:11:26 <ais523> ooh, an Emacs controls debugger
13:11:41 <fizzie> I'm sure it's just an Emacs frontend to GDB or something.
13:11:44 <Vorpal> fizzie: I guess I have pictures from my road trip? I haven't uploaded anything. I don't even know where I would upload things these days
13:12:32 <ais523> fwiw I consider audio to be soft real-time, the consequences of glitches are minor by comparison with what they could be in other cases
13:12:35 <Vorpal> spent a week sleeping in my car or in a tent while going all over southern Sweden
13:12:57 <Vorpal> ais523: ah I didn't realise they had three categories on wikipedia
13:12:59 <fizzie> I self-host an instance of https://piwigo.org/ because (a subset of) our relatives generally seem to be interested in what's up, and that's an easy way to make it so. It's not great.
13:13:28 <ais523> firm realtime is more "glitches cost us a serious amount of money, but if the probability is low enough that's still cheaper than the cost of coding to the worst case"
13:13:33 <esolangs> [[Dotcomma]] M https://esolangs.org/w/index.php?diff=162949&oldid=140481 * Ractangle * (+105)
13:13:46 <esolangs> [[User:Hotcrystal0/Sandbox]] https://esolangs.org/w/index.php?diff=162950&oldid=162948 * Hotcrystal0 * (+167)
13:13:56 <Vorpal> ais523: but in safety critical design there are different levels depending on how bad the consequences could be. Which is sort of separate from the whole realtime vs not. Two different axes I feel like.
13:14:11 <ais523> …and hard realtime is for when that tradeoff *Isn't* worth it, e.g. pacemakers and the like
13:14:14 <Vorpal> Like: the ABS breaks failing is clearly worse than the engine control unit failing.
13:14:37 <Vorpal> And that is generally reflected in what level of requirements you need to adhere to
13:14:39 <ais523> there have been a few cases where the wires controlling aeroplane engines have failed
13:14:50 <ais523> their failsafe state is to keep running continuously, which makes sense when you think about it
13:15:08 <ais523> meaning that after the plane landed they had to wait for it to run out of fuel
13:15:09 <Vorpal> ais523: even in a plane you have the same thing: auto pilot failing is not as bad as the fly by wire controls failing
13:15:24 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162951&oldid=162910 * Junkshipp * (+368) /* #pl - Plugging in expressions */
13:15:49 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162952&oldid=162951 * Junkshipp * (+12) /* #pl - Plugging in expressions */
13:16:51 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162953&oldid=162952 * Junkshipp * (+59) /* #pl - Plugging in expressions */
13:17:05 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162954&oldid=162953 * Junkshipp * (+0) /* #pl - Plugging in expressions */
13:17:06 <ais523> Airbus's fly by wire system actually has three different states with different implementation complexity
13:17:12 <Vorpal> each industry has it's own standards for this, and I have never worked in flight. But as I understand it from what I have heard and read, they have levels A-D where A means "if this fails everyone dies", C is like "some people might get injured" and D is like "loss of monetary value I guess" (approximately, I don't remember the actual exact definitions)
13:17:31 <ais523> if something goes wrong (e.g. sensor malfunction) they will switch to a simpler implementation to maximise the chance that the controls are still usable to control the plane
13:18:02 <ais523> which is interesting because it's the different safety standards thing, but within a single program
13:18:23 <Vorpal> fizzie: thanks for that link. I was thinking about immich personally
13:18:43 <ais523> having some control authority is more important than having the controls react in a largely controllable way, which is more important than the protections against accidental dangerous inputs from the pilots
13:18:50 <Vorpal> fizzie: do you know if that piwigo has support for viewing panorams other than layed out flat?
13:20:44 <Vorpal> ais523: yep. I believe the car industry have similar things. And since I work on (mobile, albeit very slowly) industrial equipment we have our own standards for safety that we need to adhere to. Though they are considerably less stringent than in flight.
13:21:23 <Vorpal> fizzie: oh god it is php :(
13:21:24 <ais523> stringent standards don't always end up improving safety – the more difficult the standard is to follow, the more likely someone will violate it
13:21:41 <fizzie> Vorpal: Not built-in, I don't think, but there were some plugins. I tried one, it sort of worked, but then gave up on it. I haven't done many stitched-up panoramas lately.
13:21:45 <fizzie> I did say it's not great.
13:21:46 <ais523> so more stringent standards likely also need more stringent enforcement, which often nobody is willing to pay for
13:22:08 <Vorpal> fizzie: oh I missed that part, it was line wrapped to the next line
13:23:16 <fizzie> I think I originally ran something called "gallery2", but it went defunct, and Piwigo is what I found to migrate to.
13:23:25 <Vorpal> I think the open source db server world is terrible. Postgres is a pain to upgrade (you need to export and re-import all your data, wtf). Mysql/mariadb is well... it was a joke, I don't know if it still is actually.
13:23:55 <ais523> I run postgres on my server, it is more of an upgrade pain than anything else there, although still manageable
13:24:47 <fizzie> I guess you could argue that if exporting and re-importing is a pain, that's just a sign your data recovery solution is sub-par.
13:25:14 <Vorpal> fizzie: I do have automated backups, on the file level. I like databases that are compatible with that. Such as SQLite
13:25:40 <fizzie> The wiki runs on MariaDB, because (at least at the time) I got the impression that while MediaWiki *could* run on postgres, it really was "natively" more MySQL-ish.
13:25:43 <Vorpal> And I like software that will auto-upgrade their schema when I upgrade the podman container.
13:26:19 <Vorpal> (I don't want a multi-step upgrade process)
13:26:34 <Vorpal> I found https://github.com/meichthys/foss_photo_libraries/tree/main a while ago, seemed like a good comparison.
13:28:00 <fizzie> I've also somewhat recently set up MariaDB's replication thing, so instead of just weekly backups, there's a copy of the wiki that's just in the order of seconds out of date. (Well, for everything that's in the database. Some file uploads younger than a week might get lost.)
13:29:04 <Vorpal> I only have one piece of software using postgres these days: miniflux (RSS reader). Everything else uses sqlite for the most part.
13:29:57 <Vorpal> the key thing is, I can take a btrfs snapshot and backup that.
13:37:18 -!- tromp has joined.
13:57:22 -!- wib_jonas has joined.
14:19:55 <wib_jonas> "<ais523> [rust] and when you aren't using the standard & and &mut, existing libraries don't work very well" => how much is this only because the built-in & and &mut reference types get special treatment for the orphan impl rule. As in `impl C for T` is allowed only if either the trait C or the top level type constructor of the implementing type T
14:19:56 <wib_jonas> is defined in the same crate, but if the implementing type is &B or &mut B then it's enough for the top-level type constructor of B to be defined in the same crate.
14:20:28 <ais523> wib_jonas: actually I haven't found much breakage from the missing #[fundamental] yet
14:20:34 -!- wib_jonas has quit (Quit: Client closed).
14:21:05 <ais523> the problem is more that functions return normal Rust references and you can't turn those into your own sorts of references (and the other problem is that nothing other than &mut can be reborrowed correctly)
14:21:20 <ais523> err, for mutable references, it isn't a problem for shared references, even custom ones
14:22:59 <ais523> but if you define a reference type yourself, you get to declare traits on it, even without #[fundamental], because you are mentioning something that is defined in the same crate
14:29:36 <esolangs> [[User:Pifrited/A cubic box full of dried miscellaneous rock pieces form a beach for user's own playground]] N https://esolangs.org/w/index.php?oldid=162955 * Pifrited * (+429) A cubic box full of dried miscellaneous rock pieces form a beach for user's own playground
14:32:48 -!- wib_jonas has joined.
14:38:14 <esolangs> [[User:Pifrited/A cubic box full of dried miscellaneous rock pieces form a beach for user's own playground]] https://esolangs.org/w/index.php?diff=162956&oldid=162955 * Pifrited * (+286) /* Uninme Lang */
14:58:01 -!- wib_jonas has quit (Quit: Client closed).
15:04:45 -!- wib_jonas has joined.
15:07:31 <wib_jonas> ais523: re bird sociology, a problem in our discussion here is that "bird name" means something like three different things that have subtle semantic differences, and I don't know how best to call each one. I'll have to re-read the bird book to make sure I understand exactly how this works.
15:08:52 -!- ais523 has quit (Quit: sorry about my connection).
15:10:36 <wib_jonas> One thing you may call "bird name" is for our purposes effectively synonymous with "bird". To evaluate a bird application xy, you have to say this kind of name of the bird y to the bird x, and bird x replies with the name of xy. Bird sociologists (probably each of the ones that we meet in the book, but at least one definitely) can translate between
15:10:37 <wib_jonas> bird name and bird both ways: if he sees a bird he will know what its name is, and if he learns the name of a bird (because a bird says it as a reply to the application) then there is a bird with that name in the forest and the bird sociologist can always find one (though it may take a long time).
15:11:22 <wib_jonas> We never find out the name in this sense of any bird in the book, and the narrator might not even know how to represent them in writing.
15:13:55 <wib_jonas> The second thing that you may call "bird name" are the descriptions like "kestrel", "mockingbird", "identity bird" etc. These are defined by some property, usually some equation of two bird expressions with bird application, in some universal quantifiers over bird-valued variables.
15:14:40 <wib_jonas> The third is the capital letters like K and S that are used to name a bird with such a property in equations written in short form.
15:17:35 -!- wib_jonas has quit (Quit: Client closed).
15:17:48 -!- wib_jonas has joined.
15:18:59 <esolangs> [[SUB]] M https://esolangs.org/w/index.php?diff=162957&oldid=88041 * PkmnQ * (-7) /* Examples */
15:19:38 <wib_jonas> If I understand correctly, there are at least three difficulties here. One is that the second kind of bird name isn't unique, there could be multiple birds with different names that are kestrels or whatever S is called. This can happen even for identity birds, even though their equation is so constraining that any two identity birds must give the
15:19:38 <wib_jonas> same answer if you ask them the same question. Note that most properties aren't so constraining, you could have two different K combinators K_1 and K_2 such that for some x, K_1 x != K_2 x. all they have to satisfy is that for every x and y, K_1 x y = K_2 x y = x. And some named properties are even more free than that.
15:24:11 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
15:24:29 <wib_jonas> The second problem is that it's possible that two birds are the same combinator, they always give the same answer for any question, but not only they have different names, but some non-combinator birds can distinguish between them, even though this would be impossible in the pure lambda calculus bird. You could have two identity birds I_♀︎ and
15:24:30 <wib_jonas> I_♂︎, then for every bird x, I_♀︎ x = I_♂︎ x = x. But there could be a sexer bird s such that s I_♀︎ = K but s I_♂︎ = K I.
15:25:16 <wib_jonas> Or two birds could differ not just by their name but in other properties that are mentioned in a few chapters of a bird books, like on which days they sing.
15:25:40 <wib_jonas> (Singing is unrelated to the replies they give to an application, to be clear.)
15:29:08 <wib_jonas> And the third problem, and I think this is the only one that the book directly brings up, is that some birds might not be combinators not just because they examine birds in other ways than what they compute, but because they allow you to compute something that a Turing-machine can't. There could be a bird h that solves the halting problem of Turing
15:29:08 <wib_jonas> machines (not of all birds, that would be impossible because of diagonalization), eg. for any encoded Turing-machine x, h x = K if x halts, h x = KI if x does not halt. Around the last chapter the bird sociologist said that there's a rumor that such a powerful bird exists in a faraway forest, but he does not know if that rumor is true.
15:31:17 <wib_jonas> ais523, Vorpal: the discussion about different degrees of realtime is interesting, I should try to say a few things about it later, in relation to my current job. I don't do any of the parts that are even close to real time, but I at least interact with co-workers who do, and the non-realtime programs that I work on communicates with those.
15:37:20 -!- wib_jonas has quit (Quit: wib_jonas).
15:41:15 -!- ais523 has joined.
15:47:10 -!- tromp has joined.
16:12:08 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162958&oldid=162945 * Thomas * (+108)
16:12:35 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162959&oldid=162958 * Thomas * (+9)
16:13:14 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162960&oldid=162959 * Thomas * (-2)
16:25:28 <esolangs> [[Minsky machine busy beaver]] https://esolangs.org/w/index.php?diff=162961&oldid=157921 * C++DSUCKER * (+795)
16:34:56 <esolangs> [[Minsky machine busy beaver]] M https://esolangs.org/w/index.php?diff=162962&oldid=162961 * C++DSUCKER * (+1)
16:49:31 <esolangs> [[MIG]] N https://esolangs.org/w/index.php?oldid=162963 * HyperbolicireworksPen * (+418) Created page with "MIG or Mission: Impossible graphs in a language that runs solely on a graph Here's the definition: In MIG each line consists of a stack of values x_1,x_2,...,x_n. When the line is run put the first value at the bottom of the stack then go to the corresponding
16:50:30 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162964&oldid=162963 * HyperbolicireworksPen * (+64)
16:50:50 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162965&oldid=162964 * HyperbolicireworksPen * (+27)
16:52:21 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162966&oldid=162965 * HyperbolicireworksPen * (+57)
16:53:53 <Vorpal> wib_jonas: "I don't do any of the parts that are even close to real time, but I at least interact with co-workers who do, and the non-realtime programs that I work on communicates with those." <-- depending on how, you need to be careful so the realtime program doesn't end up waiting on the non-realtime program causing a priority inversion.
16:54:41 <Vorpal> <ais523> wib_jonas: actually I haven't found much breakage from the missing #[fundamental] yet <-- I would expect the lack of automatic reborrowing of User defined &mut would be the killer
16:55:09 <Vorpal> <ais523> but if you define a reference type yourself, you get to declare traits on it, even without #[fundamental], because you are mentioning something that is defined in the same crate <-- it would be a problem for downstream traits using your reference though
16:57:04 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162967&oldid=162966 * HyperbolicireworksPen * (+110)
16:57:30 <ais523> korvo: say I have a combinator ! defined as ! a b c d = (a a) b (c d)
16:58:31 <ais523> then, (! ! j) c d = (! ! j) (c d), so in a sense (! ! j) is the identity combinator, regardless of j
16:58:57 <ais523> I think that when looking for small combinator bases, we need to define whether or not this sort of thing stlil counts as universal (suppose there was no way to produce an identity combinator otherwise)
16:59:32 <ais523> I suspect that if it doesn't, there's no way to get a universal size 1 basis – if it does, though, it becomes harder to work out the implications
17:00:05 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162968&oldid=162967 * HyperbolicireworksPen * (+92)
17:01:22 <ais523> if it does, though, this trick lets you define K despite having no cancellative combinators
17:01:48 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162969&oldid=162968 * HyperbolicireworksPen * (+51)
17:01:56 <esolangs> [[User:Hotcrystal0/Sandbox]] https://esolangs.org/w/index.php?diff=162970&oldid=162950 * Hotcrystal0 * (+120)
17:06:25 <Vorpal> this is quite interesting: sudo bpftrace -e 'tracepoint:syscalls:sys_enter_execve,tracepoint:syscalls:sys_enter_execveat { printf("%lld s: %s %s\n", nsecs(boot) / (1000 * 1000 * 1000), comm, str(args.filename)); }'
17:06:44 <Vorpal> it prints the time (since boot) and the command name, for all exec calls
17:07:12 <Vorpal> well it prints the parent and child names
17:07:32 <ais523> so you can see what programs are running, for some definition of "run"
17:07:33 <Vorpal> I found some silly python process that was using system() when it shouldn't that way for example
17:07:45 <ais523> are becoming running, rather than are currently running
17:08:00 <Vorpal> ais523: also, just have that running and launch a new shell, it is very interesting to see how much crap my zshrc apparently contains.
17:08:45 <Vorpal> it captures ephermal processes that you wouldn't notice otherwise
17:10:13 <Vorpal> also apparently when I launch a root shell it runs a whole bunch of more things than when I launch a normal shell. That is very odd, and I should look into that.
17:11:32 <korvo> b_jonas: Good thoughts. The book does emphasize this somewhat, that e.g. a starling is *any* bird S which satisfies S x y z = x z (y z); and birds are characterized by properties rather than species.
17:12:07 <korvo> The book does also have a notion of proper and improper combinators, as well as "order"; the order of a proper combinator is its rank. The idea of improper combinators is to characterize e.g. C K or K I.
17:12:28 <Vorpal> oh dear god, vscode runs git a lot. And it doesn't cache the path, it tries /usr/local/bin/git, /usr/local/sbin/git, ... etc every single time.
17:12:48 <Vorpal> it is quite amazing the silly things you can find with something as simple as that
17:13:39 <korvo> ais523: Well, we can use rank to tell. I has rank one, so anything equivalent to it also must have rank one. But (! ! j) has rank two, so it's clearly something different.
17:14:21 <Vorpal> also, why the hell does launching a root shell run flatpak?
17:14:28 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
17:14:34 <ais523> korvo: OK, by that definition, I think a universal basis of size 1 is impossible, because if it's applicative I think that implies it can't implement a rank 1 identity function, and it's hard to see how it could be universal without being applicative
17:15:15 <korvo> ais523: Makes sense. That's roughly where I am, too. I won't say that some sort of super-S is impossible, but it does seem like it has to do a *lot* of different things.
17:15:52 <korvo> This would be simpler if there were a super-strict dividing line between affine and duplicative combinators, but there's no reason that a duplicative combinator couldn't have an affine effect after it's been partially applied.
17:16:26 <korvo> Your ! example does a good job of showing that. After the first partial application, the rest of the combinator is affine; linear, even.
17:16:39 <zemhill> web.ZYP: points -24.90, score 5.45, rank 47/47
17:17:12 <ais523> (the "no rank 1 identity function" is because the leftmost application can't have a variable on the left without evaluating the variable (which the identity function doesn't do), and can't produce the identity function with a variable on the right unless it has the identity function on the left)
17:18:20 <ais523> and then by induction you can show that you can't produce the identity function unless you had one to start with
17:19:28 <Vorpal> flatpak: aha: /etc/profile.d/flatpak.sh
17:21:17 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162971&oldid=162960 * Thomas * (+40)
17:21:41 <korvo> ais523: Right. I didn't get around to actually writing it in the [[combinatory logic]] page, but a complete basis needs some way of bootstrapping application, and curiously neither K nor I have that applicative property.
17:22:05 <ais523> korvo: well, it needs some way to bootstrap application and some way to duplicate data
17:22:21 <ais523> but those logically go in the same combinator, because duplicating data will involve an application somewhere
17:23:11 <korvo> Right. M will do just as well as S for that. MBTI (Church's basis) is equivalent to BCSI (the aristocratic basis).
17:23:53 <korvo> I'm still chewing on the revelation that GI is equivalent to BCI. I can't find a source for this prior to Smullyan and suspect that he's the one who proved it first.
17:29:28 <ais523> last time I looked at this, I decided there were 3×3=9 basic combinators: when compiling an application from lambda calculus to combinators by eliminating variables one at a time, the left and right of the application can each be a) a term that doesn't include the variable you're eliminating, or b) a term that's just a single variable (the one you're eliminating), or c) a term that does include the variable you're eliminating but is rooted at an application
17:29:36 <ais523> three possibilities for the LHS, three for the RHS
17:30:55 <ais523> in case c) you have to recursively eliminate the variable
17:31:34 <ais523> interestingly, K doesn't show up in this scheme (but KI does)
17:31:49 <zemhill> web.ZYP: points -21.33, score 7.28, rank 47/47 (--)
17:33:25 <ais523> <Vorpal> oh dear god, vscode runs git a lot. And it doesn't cache the path, it tries /usr/local/bin/git, /usr/local/sbin/git, ... etc every single time. ← it's probably just calling execvp, which probably doesn't cache, and might not even be able to without breaking the spec
17:34:06 <ais523> bash is able to cache paths of executables, but doesn't unless specifically requested to, in case you install a new executable higher up on the path than one that's been cached
17:34:09 <Vorpal> yeah, But both bash and zsh are smarter (you can see that with the hash command)
17:34:22 <Vorpal> I think bash does this by default?
17:35:10 <Vorpal> and the zsh setup I use hashes everything in PATH once at startup I believe
17:35:13 <ais523> I wonder if inotifying on PATH would be more efficient than rescanning every time
17:35:55 <ais523> the contents of PATH don't usually change much, unless you have . in there
17:36:46 <Vorpal> 22258 s: systemd /proc/self/fd/16 | /usr/lib/systemd/systemd-executor --deserialize 144 --log-level info --log-target journal-or-kmsg <-- interesting, systemd apparently opens the binary first then execs the path under /proc. For some reason.
17:38:05 <ais523> that used to be the only safe way to prevent TOCTOU
17:38:14 <ais523> if you want to do some checks on a file before operating on it
17:38:58 <Vorpal> sure, but this is a root program executing another root owned program as root. My guess is that this is to protect against upgrades. E.g. if I install a new version of systemd it wants to keep executing the old version of this helper binary
17:39:11 <Vorpal> probably to protect against unstable API breaking things
17:39:27 <Vorpal> but what about shared libraries? Won't help with that
17:39:33 <ais523> (this was notably famous with setuid shell scripts – some OSes checked to see if the file was setuid, then escalated and passed the file to the shell, but that was exploitable by swapping out a component of its path after the check but before the root shell started)
17:40:26 <ais523> nowadays you can use openat and friends, which is a little more elegant
17:40:33 <ais523> to protect against the same exploit
17:40:46 <Vorpal> openat doesn't help with exec though?
17:40:57 <ais523> execat can execute from an open FD
17:42:29 <ais523> looks like the rule is to pass an empty string as the filename, the file's FD where you would normally put the directory FD, and AT_EMPTY_PATH in the flags
17:42:31 <b_jonas> right, looking at the bird book, the list in the appendix says Txy = yx, which is the combinator that ais523 mentioned. The book also uses this a lot, and in http://tunes.org/~iepos/joy.html this is the very first named combinator, called swap. I will have to add it to the tables.
17:43:28 <Vorpal> ais523: anyway, bpftrace is really cool. Well worth playing around with and seeing what is going on on your system. Plus very useful skill to have for when you need to use it in an actual emergency.
17:43:42 <ais523> it's the second-most used combinator in my codebase, after B
17:43:45 <Vorpal> you can collect stacks, make histograms, etc
17:44:09 <b_jonas> oh, that's the underload ~ operator, right?
17:45:35 <ais523> (which is also very commonly used in Underload, sufficiently so that I have it abbreviated to ` in my notes)
17:46:25 <ais523> the Underload/combinator correspondence is inherently confusing, I think
17:46:29 <ais523> at least, I have trouble following it
17:47:31 <b_jonas> that's why I made a table at https://esolangs.org/wiki/Talk:Mlatu#Relation_to_Underload , and now I'll have to add an extra column to it with the one-letter names from the bird book
17:48:09 <b_jonas> and probably add a few rows too
17:48:49 <b_jonas> probably whichever of T, B, C, M, W aren't in there
17:49:04 <ais523> no, I mean it doesn't quite translate directly
17:49:57 <b_jonas> what? but all lambda calculus expressions translate to Underload, it's that some underload expressions don't translate to combinators
17:49:58 <ais523> because after running a command you have to pass control to the next command in the program, not the top of the stack
17:50:16 <ais523> b_jonas: yes but that's a *different* translation
17:51:48 <b_jonas> I think I'm too tired to figure this out now
17:54:38 <korvo> ais523, b_jonas: What's happening is that we can interpret the combinators in ETCC instead of ETCS; instead of functions on values from sets, they're functors on objects from categories! And then there is often more than one category-like composition structure lurking in the typical programming environment.
17:55:20 <korvo> I debated hacking out a section in [[combinatory logic]] for this, but was psychically blocked by the social stigma of category theory. Maybe I'll make a side page.
17:57:01 <korvo> I still don't fully understand it myself. e.g. we have to make I pull double duty; it designates both identity arrows (which each are equivalent to an object) and identity endofunctors (which are equivalent to a category).
17:57:15 <b_jonas> also the bird book talks a lot about bird properties defined by an equation where the bird appears in both sides. only one of these is mentioned in the appendix, Theta, but I think Unlambda v is mentioned somewhere, and a whole theorem of who to find a bird for any such equation. and I think these equations are not only satisfied by multiple birds, but also by multiple different combinators.
17:57:33 <esolangs> [[GnomeLang]] https://esolangs.org/w/index.php?diff=162972&oldid=162971 * Thomas * (+7)
18:09:19 <b_jonas> hold on... https://esolangs.org/wiki/Combinatory_logic#Table_of_combinators does not list W
18:10:28 <esolangs> [[User:Hotcrystal0/Sandbox]] https://esolangs.org/w/index.php?diff=162973&oldid=162970 * Hotcrystal0 * (-119)
18:16:47 -!- tromp has joined.
18:19:13 <korvo> b_jonas: Ah nuts, I knew I'd miss one. Ping me and I'll do it; otherwise, I won't step on your toes.
18:39:43 <b_jonas> korvo: I won't add it becuase I don't know the english names like "kestrel"
18:41:02 <b_jonas> the translated names are usually close to the originals, as in they mean a similar category of real-world bird animals, but animal names are fuzzy and there's no one-to-one mapping between them in different languages, so I won't try to backtranslate it
18:41:57 <b_jonas> in this case my guess is "warbler" becuase of the names for W* and W** and W[1] listed, but you should actually check that in the book
18:44:42 <b_jonas> most of these bird names I know of only from the bird book, not from real world bird animals
18:45:11 <esolangs> [[Combinatory logic]] https://esolangs.org/w/index.php?diff=162974&oldid=162911 * Corbin * (+68) /* Table of combinators */ Add W.
18:45:59 <b_jonas> the table in my book lists W, W', W^*, W^{**}, but no W_1 or W_2, at least not under that name
18:46:15 <korvo> b_jonas: No worries! I am happy to double-check when I happen to have the corresponding dead-tree on my shelf. Ping me again if I missed another one.
18:48:45 <b_jonas> ideally a table like this should give both a lambda expression style definition like `W x y = x y y`, which is what's in the table in the book, and a combinator expression from other combinators, like W = S S (S K)
18:49:07 <b_jonas> of course the first one isn't possible for all birds
18:49:53 <b_jonas> but it should be possible to compute the lambda calculus expressions automatically from the definitions in the table with a lambda calculus evaluator
18:50:17 <korvo> Bird names never translate well. There is a bird that visits my front yard every morning. In Lojban, it's called {blanykorvo}, roughly "blue crow". In American English, it's called "California scrub jay".
18:50:57 <b_jonas> my problem is with "kestrel", which is apparently in the name of some falons but it's not clear if it's a meaningful group
18:51:24 <korvo> ...I mean, {blanykorvrkalyfyrniaskrybdjei} is legal fu'ivla, but that's not how I call to them in the morning.
18:51:54 <b_jonas> but fortunately the book doesn't use "falcon" as a bird name
18:52:20 <korvo> Ha, no, I think "kestrel" is a vibe, probably from a fairly old word. Definitely not a clade.
18:52:35 <esolangs> [[User:HyperbolicireworksPen]] https://esolangs.org/w/index.php?diff=162975&oldid=162700 * HyperbolicireworksPen * (+9)
18:53:13 <korvo> ...Oh, that's apparently an American view, because the American kestrel is not a true kestrel. True kestrels have evidence for a clade. Very cool, TIL.
18:56:01 <esolangs> [[Primal]] N https://esolangs.org/w/index.php?oldid=162976 * HyperbolicireworksPen * (+123) Created page with "Primal is a esolang that works using only two accumulators and is turing complete (unless I'm missing something) Commands:"
18:58:26 <b_jonas> the good thing is that there are only like 10_000 bird species, less if you exclude Madagascar, New Zealand, Australia, and various isolated islands, and there probably aren't many more to discover, so there's a bound for how bad the names can become. if you tried to name something of arthropods then you'd run into an ever-growing changing mess of horrible confusing vernacular names. even naming objects
18:58:32 <b_jonas> from fish would be much worse than birds.
19:03:26 <b_jonas> but Smullyan's names also include "thrush" and "bluebird", of which "bluebird" is apparently a group of thrushes in the New World only
19:03:39 <b_jonas> s/thrushes in/thrushes living in/
19:04:30 <esolangs> [[Primal]] https://esolangs.org/w/index.php?diff=162977&oldid=162976 * HyperbolicireworksPen * (+878)
19:05:59 <korvo> Lojban only has edible birds, not singing birds. It has duck, goose, chicken, turkey.
19:06:23 <esolangs> [[Primal]] https://esolangs.org/w/index.php?diff=162978&oldid=162977 * HyperbolicireworksPen * (+143)
19:07:46 <esolangs> [[Primal]] https://esolangs.org/w/index.php?diff=162979&oldid=162978 * HyperbolicireworksPen * (+133)
19:07:48 <b_jonas> real world falcons and eagles are neither edible nor singing
19:08:05 <esolangs> [[User:HyperbolicireworksPen]] https://esolangs.org/w/index.php?diff=162980&oldid=162975 * HyperbolicireworksPen * (+12)
19:08:13 <b_jonas> (I have to say real world, because I don't claim that falcons in the bird book don't sing)
19:13:09 <b_jonas> is there a bird name for KI ?
19:14:03 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162981&oldid=162969 * HyperbolicireworksPen * (+46)
19:16:20 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162982&oldid=162981 * HyperbolicireworksPen * (+77)
19:16:20 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
19:16:36 <esolangs> [[MIG]] https://esolangs.org/w/index.php?diff=162983&oldid=162982 * HyperbolicireworksPen * (+1)
19:19:09 <korvo> I don't think K I actually shows up. The sections that introduce K and I are adjacent and there's lots of exercises involving how they are related to fundamental properties, but I didn't see the formation of K I in there.
19:24:07 <korvo> I get the feeling that Smullyan didn't want to name the constant birds. He talked about how they can become constant, using properties like "fixation" and "egocentrism" that I'm not super-comfortable using as-is.
19:27:57 <korvo> Like, he more-or-less defines a kestrel as any combinator K s.t. K x is fixated on x, which merely means that (K x) y = x; in today's language, we say that K x y is constantly x, which is just an unhelpfully-long explanation of that = sign.
19:35:11 <esolangs> [[MIG+]] N https://esolangs.org/w/index.php?oldid=162984 * HyperbolicireworksPen * (+882) Created page with "MIG+ is a version of MIG with a shared variable Instead of going to the next command in the stack, they go to a command based on the variable and set the variable to a different value. Notation: MIG+ code looks like this: x_{1,1},y_{1,1},"string_{1,1}":z_
19:35:42 <esolangs> [[MIG+]] https://esolangs.org/w/index.php?diff=162985&oldid=162984 * HyperbolicireworksPen * (+24)
19:36:04 <esolangs> [[MIG+]] https://esolangs.org/w/index.php?diff=162986&oldid=162985 * HyperbolicireworksPen * (+68)
19:37:33 <esolangs> [[MIG+]] https://esolangs.org/w/index.php?diff=162987&oldid=162986 * HyperbolicireworksPen * (+86)
19:39:55 <esolangs> [[MIG+]] https://esolangs.org/w/index.php?diff=162988&oldid=162987 * HyperbolicireworksPen * (+81)
19:40:12 <esolangs> [[User:HyperbolicireworksPen]] https://esolangs.org/w/index.php?diff=162989&oldid=162980 * HyperbolicireworksPen * (+10)
19:58:22 -!- tromp has joined.
20:01:02 <esolangs> [[MIG+]] https://esolangs.org/w/index.php?diff=162990&oldid=162988 * HyperbolicireworksPen * (+340)
20:09:53 <esolangs> [[Treebrainfuck]] N https://esolangs.org/w/index.php?oldid=162991 * HyperbolicireworksPen * (+347) Created page with "Treebrainfuck is a derivative of brainfuck: Changes: Treebrainfuck is a version of brainfuck that instead of taking place on a tape, takes place infinitely far up a infinite tree with an infinite number of branches on each node this variation adds o
20:13:28 <esolangs> [[Treebrainfuck]] https://esolangs.org/w/index.php?diff=162992&oldid=162991 * HyperbolicireworksPen * (+1047)
20:15:09 <esolangs> [[Treebrainfuck]] https://esolangs.org/w/index.php?diff=162993&oldid=162992 * HyperbolicireworksPen * (+106)
20:16:39 <esolangs> [[User:HyperbolicireworksPen]] https://esolangs.org/w/index.php?diff=162994&oldid=162989 * HyperbolicireworksPen * (+19)
20:18:09 <esolangs> [[Arr ow]] https://esolangs.org/w/index.php?diff=162995&oldid=162587 * HyperbolicireworksPen * (+33)
20:34:55 <esolangs> [[SARCASM]] N https://esolangs.org/w/index.php?oldid=162996 * RainbowDash * (+5487) Woohoo
20:56:45 -!- ais523 has quit (Quit: quit).
21:32:37 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162997&oldid=162954 * Junkshipp * (+443) /* Syntax */
21:38:57 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
21:42:01 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162998&oldid=162997 * Junkshipp * (-59) /* #pl - Plugging in expressions */
22:28:09 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=162999&oldid=162998 * Junkshipp * (+522) /* #pl - Plugging in expressions */
22:29:22 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=163000&oldid=162999 * Junkshipp * (+23) /* Commands */
22:30:18 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=163001&oldid=163000 * Junkshipp * (-40) /* Deduction */
22:30:21 -!- Sgeo has joined.
23:46:08 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=163002&oldid=163001 * Junkshipp * (+856)
23:46:31 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=163003&oldid=163002 * Junkshipp * (+4) /* Deduction */
23:46:50 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=163004&oldid=163003 * Junkshipp * (+5) /* #id - More plugging in */
23:53:40 <esolangs> [[User:Junkshipp/Sandbox]] https://esolangs.org/w/index.php?diff=163005&oldid=163004 * Junkshipp * (+13) /* #in - Induction */
23:54:28 <esolangs> [[User talk:Pifrited/A cubic box full of dried miscellaneous rock pieces form a beach for user's own playground]] N https://esolangs.org/w/index.php?oldid=163006 * I am islptng * (+133) Created page with "conlang ~~~~"