←2020-08-28 2020-08-29 2020-08-30→ ↑2020 ↑all
00:01:27 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77019&oldid=77018 * Heavpoot * (-138)
00:01:56 <esowiki> [[Talk:1CP=1ICL]] N https://esolangs.org/w/index.php?oldid=77020 * Heavpoot * (+108) Created page with "dont be soundofspouting ~~~~"
00:07:09 -!- adu has joined.
00:16:40 -!- t20kdc has quit (Remote host closed the connection).
01:32:45 <esowiki> [[Talk:1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77021&oldid=77020 * SoundOfScripting * (+124) * do
01:41:56 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77022&oldid=77019 * Heavpoot * (+150)
01:43:02 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77023&oldid=77022 * Heavpoot * (+3)
02:23:51 -!- Heavpoot has quit (Remote host closed the connection).
02:40:11 -!- adu has quit (Quit: adu).
02:42:15 <Sgeo_> Generic data structures in Zig are just compile-time functions, and I think my brain broke
02:58:20 -!- adu has joined.
03:18:32 -!- kkd has joined.
03:38:45 -!- tromp has joined.
03:43:33 -!- tromp has quit (Ping timeout: 272 seconds).
04:36:09 <shachaf> jix: whoa, what's going on in SATland?
04:37:19 <jix> shachaf: huh?
04:37:27 <shachaf> I don't remember what I last said about my solver. I added (very simple) clause deletion, and Luby restarts, and it actually became reasonably fast on some inputs.
04:38:06 <shachaf> But it sounds like your solver is way fancier and also world-famous now.
04:39:03 <jix> it's not famous at all, it's good enough to be practically useful but it's not state of the art stuff
04:39:27 <jix> but a somewhat well known rust person started using it (for some not (yet?) public project)
04:40:05 <jix> and that person seems to have quite a few followers on github, so now the traffic on my project suddenly increased
04:42:09 <shachaf> Aha.
04:44:12 <shachaf> I should get back to working on it.
04:44:23 <jix> so do I...
04:44:35 <jix> but I want to rewrite half of it... again
04:44:37 <shachaf> It got more fun when I stopped using random instances and started using real instances.
04:44:46 -!- Lord_of_Life_ has joined.
04:44:51 <shachaf> I should pick a good representative set of instances to be testing on.
04:45:37 <jix> yeah first that makes it more fun.... but then you realize you need a good way to benchmark stuff and that's another rabbit hole
04:45:54 <shachaf> Yes, definitely trickier than I thought.
04:46:08 -!- Lord_of_Life has quit (Ping timeout: 265 seconds).
04:46:08 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
04:49:20 <shachaf> What's it being used for?
04:50:04 <shachaf> Or is the project unknown?
04:50:05 <shachaf> I wonder whether I should improve my SAT solver or try figuring out how SMT solvers work.
04:52:57 <jix> unknown, but he commented on an open issue related to timeouts and mentioned that he added cancellation from another thread and asked whether I'd be interested in merging something like that
04:53:34 <jix> where he mentioned that he's using it in an interactive setting... and IIRC he recently started working on games, so that'd be my guess
04:53:41 <shachaf> Aha, the Io person.
04:53:56 <shachaf> My friend was using a SAT solver to design levels in a puzzle game.
04:54:04 <jix> Io?
04:54:17 <shachaf> http://canonical.org/~kragen/raph-io.html
04:56:06 <shachaf> jix: For my own solver, instead of a timeout, I was thinking of adding a more iterator-like API for the solver loop.
04:56:42 <shachaf> Well, I guess for a SAT solver it's pretty simple, if it looks like a classic CDCL solver.
04:57:49 <jix> yeah I also thought about that, (for the same reason, it's somewhat natural given the CDCL loop), but I do want to offer convenience APIs for a) callback based termination to match the IPASIR api and b) cancellation from a different thread using an atomic bool as flag and c) timeouts without requiring a second thread
04:58:30 <shachaf> The loop looks like while (1) { unit_propagation(); if (conflict) { if (level == 0) return false; backtrack(); } else { if (all_assigned) return true; guess(); } }, right?
04:58:47 -!- Arcorann__ has joined.
04:58:49 <shachaf> Where most time is spent in unit propagation.
04:59:05 <shachaf> Yes, makes sense that you've had the same thought.
04:59:29 <zzo38> What puzzle game levels are designing by SAT solver?
04:59:30 <jix> well there are also restarts but roughly like that
04:59:31 <shachaf> Convenience APIs seem good to provide, but as the core API I think something like this is much nicer.
04:59:52 <shachaf> I was already getting into more detail than I meant to.
05:00:32 <shachaf> Really I should have said while (1) { /* something that takes a relatively long time */ }. I was just trying to remember how it worked.
05:01:05 -!- glowcoil_ has joined.
05:01:12 <jix> more like while (1) { /* something that takes a short amount of time, but you need to do it many, many, many times */ }
05:01:13 <shachaf> zzo38: It's still a secret game unfortunately.
05:01:34 -!- glowcoil has quit (Ping timeout: 240 seconds).
05:01:34 -!- Arcorann_ has quit (Read error: Connection reset by peer).
05:01:34 -!- ocharles has quit (Ping timeout: 240 seconds).
05:01:35 -!- olsner has quit (Ping timeout: 240 seconds).
05:01:35 -!- sftp has quit (Ping timeout: 240 seconds).
05:01:35 -!- glowcoil_ has changed nick to glowcoil.
05:01:42 <shachaf> I guess the thing I was wondering was whether having an API boundary there would have a performance impact.
05:01:51 <shachaf> But I doubt it.
05:01:57 -!- ocharles has joined.
05:02:35 <jix> so returning after each conflict should be perfectly safe (in my solver and IIRC many others)finding a conflict is a sub-loop)
05:02:41 -!- sftp has joined.
05:03:05 <jix> returning each time after running unit propagation to completion, I'm not quite sure
05:03:33 <shachaf> Sure, unit propagation + handling the conflict sort of goes together.
05:03:59 <shachaf> Though I guess it doesn't have to, you can just save your state.
05:04:32 <jix> yeah but I meant if you need multiple guesses to find a conflict, returning inbetween might not be a good idea performance wise
05:04:57 <jix> (if returning implies you're going to check termination criteria and potentially other stuff that could slow down things)
05:05:29 <jix> but I haven't tested that at all, I just know you're pretty safe doing that after a conflict given all the other stuff that happens anyway for a conflict
05:06:52 <shachaf> whoa, I just looked up IPASIR, I didn't know about this at all.
05:08:05 <jix> I always end up needing functionallity outside of that API, sometimes supported by solver specific APIs... but often enough not even that, even though it wouldn't be too hard to add it
05:08:37 <shachaf> It's too bad it's callback-based. Callback APIs aren't fun when you can avoid them.
05:08:49 <shachaf> And you should certainly be able to, for something like this.
05:09:08 <jix> it's inteded to be easy to add to existing solvers, and callbacks make that easier
05:09:24 <shachaf> Fair enough.
05:09:46 <jix> for a lot of uses you don't even need any of the callback APIs though
05:10:21 <shachaf> Just being able to add new clauses without deleting the clause database is presumably most of the incrementality people need.
05:10:39 <jix> yeah that and solving under assumptions
05:11:14 <shachaf> Hmm, how do assumptions work? I guess that just means adding things to the trail?
05:11:47 <jix> yeah it's exactly just that, you fix a prefix on the trail and if you'd backtrack beyond that you return unsat (under assumptions)
05:12:13 -!- olsner has joined.
05:12:20 <shachaf> I was briefly wondering whether you'd learn wrong clauses that way but of course you wouldn't.
05:12:51 <jix> from the conflict analysis you do to detect that you'd backtrack beyond that you also get a subset of assumptions causing the conflict for free (which is also part of the IPASIR api)
05:13:27 <shachaf> Oh, that's nice.
05:13:47 <esowiki> [[User talk:Challenger5]] https://esolangs.org/w/index.php?diff=77024&oldid=76991 * Challenger5 * (+107)
05:14:22 <esowiki> [[User:Challenger5]] https://esolangs.org/w/index.php?diff=77025&oldid=76950 * Challenger5 * (+16)
05:14:50 <shachaf> Do you know if SMT solvers need more of an API than this?
05:15:12 <jix> it depends AFAIK
05:15:38 <zzo38> Not knowing much about what is SMT solvers, I don't know really
05:15:50 <esowiki> [[Aubergine]] https://esolangs.org/w/index.php?diff=77026&oldid=74883 * Challenger5 * (+95)
05:16:20 <jix> you don't need more than that for CDCL(T) or for bitblasting AFAICT
05:16:58 <jix> but if you want to do eager theory propagation (not sure if that's an established term) you need a way to hook into unit propagation
05:17:13 <jix> I have no idea how much that is done or if it is important at all
05:18:16 <zzo38> Just a few minutes ago I found and corrected a bug in TeXnicard involving division by zero when the total available vertical space is rigid, resulting in alternating lines of text being displayed and hidden.
05:39:35 -!- tromp has joined.
05:44:42 -!- tromp has quit (Ping timeout: 260 seconds).
05:57:10 <shachaf> zzo38: Do you like SAT solvers?
06:01:11 <zzo38> shachaf: I do not know much about SAT solvers.
06:01:27 <zzo38> (If I knew, maybe I would be able to answer your other questions too, but I don't know.)
06:01:37 <shachaf> Do you like graph coloring solvers?
06:02:16 <myname> they are more logic solver systems than one might expect and they are competing against themselves quite regularly
06:05:13 <shachaf> Hmm, maybe I should actually learn about integer programming solvers. I hear they're pretty good..
06:05:16 <shachaf> s/.$//
06:05:38 <shachaf> Plus I don't even really know about linear programming.
06:05:59 <myname> a friend of mine writes a mip solver in his spare time to optimize his factorio world
06:06:25 <myname> linear programming is not that hard, really
06:07:50 <jix> shachaf: as you already know how SAT solvers work, learning about MIP will make you annoyed that SAT solvers are bad at what MIP solvers are good at and that MIP solvers are bad at what SAT solvers are good at (well, at least it does that for me)
06:07:55 <myname> integer programms make it quite a bit harder
06:08:32 <jix> and apparently it's difficult enough to combine them in a way that gets the advantages of both
06:08:47 <myname> iirc linear programms are in P
06:08:55 <shachaf> jix: That was my impression. Well, I really only know one direction, in seeing some problems that MIP solvers are good at and SAT solvers are bad at.
06:09:05 <shachaf> But I heard it went both ways.
06:09:32 <shachaf> There's a lot more industrial use of MIP, I think?
06:09:58 <jix> yeah I think so
06:10:13 <jix> even for problems where SAT or SMT solvers would be better
06:10:30 <myname> that's not that surprising, SAT solvers only decide, MIP solvers optimize
06:11:10 <jix> myname: that's not really a distinction that matters though, if you can do one you can do the other, in theory as well as in practice
06:11:31 <jix> now it might be that it works in theory but is too slow in practice, but with incremental SAT solvers optimizing is also fast in practice
06:11:33 <myname> jix: well, at additional cost, yeah
06:12:34 <myname> and you have to state your problem in such a way that you can make good guesses about what change in the corresponding sat problem
06:13:18 <zzo38> Not having seen graph coloring solvers, I don't really know. But at least I can understand a bit of what is meant, I suppose. How difficult are they to solve, though?
06:13:49 <myname> graph coloring is NP complete
06:13:59 <myname> so i guess it's about as hard as SAT solvers
06:14:54 <zzo38> O, OK.
06:15:41 <Hooloovo0> to be fair, a lot more work has been put into sat sovlers, I think, and polynomial time is... well theoretically not that bad but in practice it can get pretty bad
06:17:31 <zzo38> Well, yes, depending on the algorithm and how much data, it can be, considering, there are many kind of polynomials, some of which are big.
06:17:33 <myname> yeah, we had a lecture on algorithms to solve euclidean tsp that aren't really worth attempting with real data sets, if you could just brute-force
06:21:27 -!- adu has quit (Quit: adu).
07:01:41 -!- tromp has joined.
07:04:12 <zzo38> Just now I found the new documentation about the schema table for SQLite, and about the new name "sqlite_schema" instead of "sqlite_master". I knew about this before from the Fossil timeline. I am glad that "For historical reasons, callbacks from the sqlite3_set_authorizer() interface always refer to the schema table using names (1) or (3)" because that is the part that I was concerned about.
07:04:29 <zzo38> So, good, now my concern has been considered, so it is OK now.
07:16:53 <shachaf> How should I choose which learnt clauses to delete?
07:16:59 <shachaf> Right now I just delete the longest ones.
07:17:11 <shachaf> Also, how should I store watch lists?
07:32:41 <zzo38> Unfortunately, I don't know. Hopefully, we can learn which way is good.
07:49:57 <jix> shachaf: the classic approach (used by minisat and probably solvers before it) uses clause activities, glucose added LBDs (aka as clause glues or glue levels) as a metric for that, chanseok oh's solvers added a strategy that partitions learned clauses into 3 tiers and uses activities and LBDs and whether they've been part of a conflict recently (IIRC it's been a time) and that's the state of the
07:49:59 <jix> art unless something changed in the past 1.5 years
08:10:26 -!- hendursa1 has joined.
08:12:23 -!- hendursaga has quit (Ping timeout: 240 seconds).
08:38:26 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77027&oldid=77004 * SunnyMoon * (-46) I am going to talk about this later.
08:39:36 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77028&oldid=77027 * SunnyMoon * (-83) And this too.
09:10:43 -!- b_jonas has quit (Quit: leaving).
09:12:25 -!- Sgeo_ has quit (Read error: Connection reset by peer).
09:18:25 -!- imode has quit (Ping timeout: 240 seconds).
09:30:07 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77029&oldid=77028 * SunnyMoon * (+490) Introducing IO!
09:52:33 -!- S_Gautam has joined.
10:15:20 -!- wib_jonas has joined.
10:16:08 <wib_jonas> spruit: what does "non-monadic" mean in that context?
10:26:32 -!- hendursa1 has quit (Remote host closed the connection).
10:26:59 -!- hendursaga has joined.
10:31:49 <wib_jonas> wth just how many ways can you spell fairy in English? "fairy, fairie, faerie, færie, faery, fae, fey, fay"; plus any of those suffixed with " folk" and "fair folk" apparently
10:32:09 <wib_jonas> they're worse than djinns
10:38:56 <esowiki> [[110010000100110110010]] https://esolangs.org/w/index.php?diff=77030&oldid=74384 * Stasoid * (+4)
11:19:03 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77031&oldid=77029 * SunnyMoon * (+720) Introducing DATA TYPES!
12:02:17 -!- kritixilithos has joined.
12:09:41 -!- hendursaga has quit (Quit: hendursaga).
12:09:57 -!- hendursaga has joined.
12:24:23 -!- kritixilithos has quit (Ping timeout: 240 seconds).
12:32:08 -!- S_Gautam has quit (Quit: Connection closed for inactivity).
12:51:19 -!- kritixilithos has joined.
12:59:40 -!- Lord_of_Life has quit (Read error: Connection reset by peer).
13:00:09 -!- Lord_of_Life has joined.
13:10:19 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77032&oldid=77031 * SunnyMoon * (+731) Introducing CONTROL FLOW!
13:11:32 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77033&oldid=77032 * SunnyMoon * (+0) Emphasizing 'if'.
13:14:06 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77034&oldid=77033 * SunnyMoon * (+95) Introducing I!
13:16:43 -!- kritixilithos has quit (Ping timeout: 240 seconds).
13:59:31 -!- kritixilithos has joined.
14:24:38 <esowiki> [[Hello world program in esoteric languages]] M https://esolangs.org/w/index.php?diff=77035&oldid=76960 * Abyxlrz * (+76)
14:29:35 <esowiki> [[Truth-machine]] M https://esolangs.org/w/index.php?diff=77036&oldid=76961 * Abyxlrz * (+101)
15:01:40 -!- adu has joined.
15:04:43 -!- kritixilithos has quit (Ping timeout: 240 seconds).
15:22:17 <wib_jonas> `pbflist https://pbfcomics.com/comics/obscenery/
15:22:19 <HackEso> pbflist https://pbfcomics.com/comics/obscenery/: shachaf Sgeo quintopia ion b_jonas Cale
15:22:50 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77037&oldid=77034 * SunnyMoon * (+666) Introducing PROGRAMS!
15:23:51 <esowiki> [[Talk:Modulous]] M https://esolangs.org/w/index.php?diff=77038&oldid=76980 * Abyxlrz * (+150)
15:32:01 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77039&oldid=77037 * SunnyMoon * (+181) Introducing EXTERNAL RESOURCES!
15:46:05 -!- kritixilithos has joined.
15:50:47 -!- wib_jonas has quit (Quit: Connection closed).
15:52:58 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77040&oldid=77039 * SunnyMoon * (+23) Introducing REDIRECTS!
15:53:24 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77041&oldid=77040 * SunnyMoon * (-23) Wait what?
15:56:03 <esowiki> [[Commata]] N https://esolangs.org/w/index.php?oldid=77042 * SunnyMoon * (+17) Redirection fora golfing language.
15:57:39 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77043&oldid=77041 * SunnyMoon * (+0) Capitalization: The beginnings
15:58:25 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77044&oldid=77043 * SunnyMoon * (+4) Link to the esolang page
16:01:00 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77045&oldid=77044 * SunnyMoon * (+133) A bit more clarification.
16:01:06 -!- kritixilithos has quit (Remote host closed the connection).
16:01:27 -!- kritixilithos has joined.
16:01:28 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77046&oldid=77045 * SunnyMoon * (+9) Grammar Fix
16:03:20 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77047&oldid=77046 * SunnyMoon * (+45) Space is a nop!
16:04:45 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77048&oldid=77047 * SunnyMoon * (+0) Actually, these 'nops' do have a purpose.
16:06:05 -!- Arcorann__ has quit (Read error: Connection reset by peer).
16:10:35 <esowiki> [[Language list]] https://esolangs.org/w/index.php?diff=77049&oldid=77008 * SunnyMoon * (+10) ,,, Joins the battle!
16:18:38 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77050&oldid=77048 * SunnyMoon * (+57) Bit more ClaRiFiCaTion.
16:19:40 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77051&oldid=77050 * SunnyMoon * (-83) AHH MY FOCUS
16:21:36 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77052&oldid=77051 * SunnyMoon * (+11) ClArIfIcAtIoN
16:22:15 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77053&oldid=77052 * SunnyMoon * (+0) ...
16:23:00 <esowiki> [[,,,]] M https://esolangs.org/w/index.php?diff=77054&oldid=77053 * SunnyMoon * (+0) .:.:.
16:46:33 -!- Lord_of_Life_ has joined.
16:47:39 -!- Lord_of_Life has quit (Ping timeout: 258 seconds).
16:49:23 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
17:10:27 -!- arseniiv has joined.
17:22:58 -!- b_jonas has joined.
18:02:43 -!- kritixilithos has quit (Ping timeout: 240 seconds).
18:06:01 -!- kritixilithos has joined.
18:11:38 -!- Sgeo has joined.
18:17:21 -!- adu has quit (Quit: adu).
18:21:25 -!- adu has joined.
18:32:19 -!- kritixilithos has quit (Quit: quit).
18:41:42 -!- adu has quit (Quit: adu).
18:45:00 <esowiki> [[User:SunnyMoon]] M https://esolangs.org/w/index.php?diff=77055&oldid=76971 * SunnyMoon * (+143) Something more...
18:49:54 <esowiki> [[QuineLang]] M https://esolangs.org/w/index.php?diff=77056&oldid=69523 * SunnyMoon * (+8) When creating articles, it is good to write them in 3rd-person perspective. :)
18:54:32 <esowiki> [[User:SunnyMoon]] https://esolangs.org/w/index.php?diff=77057&oldid=77055 * SunnyMoon * (-175) I guess this sentence is not needed.
18:55:45 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77058&oldid=77023 * Osmarks * (+199)
18:58:30 <esowiki> [[User:SunnyMoon]] M https://esolangs.org/w/index.php?diff=77059&oldid=77057 * SunnyMoon * (+152) A bit more stuff about esolangs.
18:59:10 <esowiki> [[User:SunnyMoon]] M https://esolangs.org/w/index.php?diff=77060&oldid=77059 * SunnyMoon * (-10) Aw man
19:00:22 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77061&oldid=77058 * Osmarks * (+79)
19:01:45 <esowiki> [[User:SunnyMoon]] M https://esolangs.org/w/index.php?diff=77062&oldid=77060 * SunnyMoon * (+48) More... MORE!
19:02:37 <esowiki> [[User:SunnyMoon]] M https://esolangs.org/w/index.php?diff=77063&oldid=77062 * SunnyMoon * (+1) OH NOES
19:07:45 -!- imode has joined.
19:14:20 <b_jonas> another homepage where if the browser window isn't very wide, then essential links are hidden. I was searching for how to log in.
19:17:20 <esowiki> [[Hello world program in esoteric languages]] https://esolangs.org/w/index.php?diff=77064&oldid=77035 * SunnyMoon * (+30) ,,,
19:24:34 -!- arseniiv has quit (Ping timeout: 256 seconds).
19:24:36 <spruit11> b_jonas: Non-monadic in the sense that you don't use an explicit structure like the monad from Haskell?
19:26:41 <b_jonas> spruit11: ok, though I don't understand how that would apply to a prime sieve
19:29:03 <shachaf> It's surprising that this is possible: https://tomas.rokicki.com/logic_puzzle.html
19:29:06 <shachaf> "You can use any number of 'and' and 'or' gates, with any number of inputs each, but only two 'not' gates. You must build a circuit that computes for inputs A, B, and C, the three separate values not A, not B, and not C."
19:30:23 <myname> huh, interesting
19:30:29 <myname> i will think about that
19:31:28 <myname> is it possible? i would assume it works with stuff similar two the variable switch without a temporary one
19:32:32 <shachaf> It is possible.
19:32:43 <b_jonas> shachaf: hmm
19:33:14 <shachaf> I have a computer-found solution but I'm not sure I understand how it works entirely.
19:33:26 <b_jonas> shachaf: let me think about that one
19:35:26 <b_jonas> I know there's some easy description of functions that you can build from just & and | gates, IIRC think a function can be built that way iff it is monotonous, gives 0 for all-0 input, and gives 1 for all-1 input.
19:35:52 <myname> sounds about right
19:37:36 <spruit11> b_jonas: My language is eager. So the 'standard' Haskell short definition of a prime sieve doesn't work.
19:38:19 <spruit11> There are ways to deal with that. I listed two manners which mimic lazy lists.
19:39:00 <esowiki> [[Esolang talk:Categorization]] https://esolangs.org/w/index.php?diff=77065&oldid=74234 * SunnyMoon * (+663) /* Subcategories for the Non-Textual category. */ new section
19:41:52 <spruit11> The manner which I didn't list would be to use monads to model lazy behavior in an eager language.
19:42:05 <spruit11> I am trying to avoid that.
19:47:12 <myname> shachaf: is your computer-found solution a boolean function or a circuit?
19:52:27 <b_jonas> ah I see
19:53:28 <b_jonas> I would not specifically think of monads to avoid lazyness, just of a list-like iterator interface
19:53:59 <b_jonas> or possibly the caching style a lazy list, since that's what you need for a prime sieve
19:57:40 <spruit11> Ah, but iterators fit into monads too. If you want it.
19:58:32 <spruit11> If you have any other possible solutions I would be very interested.
20:00:12 <b_jonas> sure, but just the monad interface isn't really enough here
20:00:50 <b_jonas> and I don't even see why it would really help much
20:01:34 <b_jonas> the (>>=) method for lists is mapConcat, but you just need a filter, which is a special case of that, plus you need to iterate on the list of divisors and stop when they grow too large, for which monads don't really help
20:02:50 <spruit11> Looks like we have tangent thoughts on this.
20:04:51 <esowiki> [[Talk:Truth-machine]] https://esolangs.org/w/index.php?diff=77066&oldid=38410 * SunnyMoon * (+315) /* Is it possible to add "psuedo-truth-machines"? */ new section
20:07:34 <b_jonas> yeah, ideally I should try to read your code and write the sieve with lazy lists like I thought, to make this clearer, but right now I'm busy with some stupid webpage
20:08:25 <b_jonas> it's a webpage where I ordered something and want to order more, but I'm trying to write a userstyle to make the important control link visible, it's currently hidden by some stupid HTML+CSS thing that sets a height too small
20:08:45 <b_jonas> and no, changing the height isn't enough, because then it overlaps something else
20:09:49 <b_jonas> I don't understand why this user CSS rule doesn't match this element
20:11:15 <zzo38> Did you check its effects in the inspector? (At least, that is what I did.)
20:11:45 <b_jonas> yes, that's what I'm trying to do
20:12:52 <spruit11> For if you change your mind. https://github.com/egel-lang/egel/blob/master/examples/sieve.eg https://github.com/egel-lang/egel/blob/master/examples/sieveK.eg
20:13:30 <zzo38> Well, what I think would be useful to have "meta-CSS" which is only usable in user CSS codes and cannot be specified by the web page author, and can be used for making selections based on other CSS commands, setting priorities differently, etc.
20:14:01 <b_jonas> the inspector says `<ul id="w1" class="fullpage__nav nav navbar-nav navbar-right w1" style="padding:0;">
20:14:24 <b_jonas> ` with some elements in it, and shows all the CSS rules that match it, and I have reduced my rule to `<ul id="w1" class="fullpage__nav nav navbar-nav navbar-right w1" style="padding:0;">
20:14:26 <HackEso> ​? Permission denied
20:14:43 <b_jonas> reduced my rule to `ul.wl { height: auto; }` and it doesn't match this element
20:14:52 <b_jonas> it's not overriden by another rule, that I could understand
20:14:55 <zzo38> The "style" attribute overrides user CSS so you may need to specify !important
20:14:55 <b_jonas> it just doesn't match
20:15:02 <b_jonas> oh!
20:15:07 <zzo38> It doesn't loko like "ul.wl" should match; maybe you need "ul.w1"
20:15:09 <b_jonas> f'ck
20:15:17 <b_jonas> w1
20:15:27 <b_jonas> thanks... stupid font this inspector uses
20:15:39 <zzo38> Can you change the fonts?
20:15:42 <jix> shachaf: haven't found a solution yet (trying to find one by hand currently) but that logic puzzle sounds very cool
20:15:52 <b_jonas> let me look
20:16:30 <b_jonas> not easily, it's not in the settings
20:16:47 <b_jonas> it's probably only stylable by user styles that affect the UI too, but I don't want to mess with those too much
20:17:28 <b_jonas> ok, the rule matches now, thank you
20:17:35 <b_jonas> I still need more rules, but this is progress
20:20:20 <b_jonas> I hate these stupid overspecified CSSes where to change a height I have to override it in like six different places
20:20:37 <b_jonas> they just vomit in a lot of random redundant rules
20:20:47 <b_jonas> I hate web developers
20:22:06 <zzo38> Yes, that is pretty bad, although you might be able to add !important sometimes, but I think that isn't general enough and meta-CSS would help better.
20:22:16 <b_jonas> ok, now the top bar is tall enough, but it overlaps the main content, so now I have to find out how that's placed
20:25:04 <zzo38> I try to avoid CSS as much as possible in my own web pages (which I don't do much; mostly I use plain text) in order to avoid these problems.
20:26:37 <zzo38> What I want is a mode to mostly ignore CSS and instead use ARIA and HTML to decide what to display.
20:28:12 <b_jonas> everything has absolute positioning, it's a huge mess
20:28:43 <b_jonas> ok, so at first approximation this should be enough, it makes the navigation link visible, the rest of the site is uglier now but who cares
20:29:03 <b_jonas> I might of course find other hidden stuff later
20:29:06 <zzo38> Does disabling CSS entirely help at all?
20:31:35 <b_jonas> it helps for some sites, I don't think it would work on this site
20:32:02 <b_jonas> spruit11: hmm wait, egel doesn't even have mutable data like mutable containers, right? then I can't just write a lazy list with caching
20:32:26 <zzo38> Yes, I find too it doesn't work best for all sites, but sometimes it does work better
20:33:01 <b_jonas> it worked well for another site that I visited recently, which hid some text by disabling scrolling on the body or some such nonsense
20:33:12 <zzo38> What I would want is the web browser to be designed by the assumption that the user is the expert and knows what they are doing and means what they specify, while the document author is incompetent or malicious
20:35:34 <spruit11> b_jonas: Correct. No mutation, except for some unsafe extensions.
20:36:03 <shachaf> myname: What's the difference?
20:36:22 <shachaf> I guess it's a circuit that computes a function.
20:39:22 <b_jonas> spruit11: well that makes implementing a prime sieve much harder. I'd probably need to use that banking list data structure or whatever it's called, the one that stores a list divided in two parts, the suffix part reversed, and sometimes has to rebalance them by flipping the whole suffix to the prefix, but in a prime sieve that happens exponentially rarely.
20:39:54 <myname> shachaf: circuits can loop
20:40:18 <myname> shachaf: like, you cannot express a flipflop as a boolean function
20:40:48 <shachaf> Oh, no loops.
20:41:04 <spruit11> I am unacquainted with that data structure.
20:43:32 <b_jonas> I still don't understand this webpage though, I'll have to get back to it later
20:43:38 <b_jonas> for today I think I give up
20:45:17 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77067&oldid=77061 * IFcoltransG * (+331) /* Language specifications */ Add ^ and v
20:46:05 <b_jonas> spruit11: it's a rare data structure, I think it's documented in Okasaki's thesis, I don't think Knuth mentions it but I'm not sure
20:46:12 <b_jonas> and Okasaki's book
20:46:36 <b_jonas> the book is an extended version of the thesis, I don't have it, but I've seen it once long ago; the thesis is available online
20:46:59 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77068&oldid=77067 * IFcoltransG * (+22) Forgot to credit myself
20:47:01 <b_jonas> there's probably a link somewhere from esowiki
20:47:18 <spruit11> The lazy data structures thing?
20:47:29 <b_jonas> yes
20:50:08 <b_jonas> and there doesn't seem to be a link from the esowiki
20:50:43 <spruit11> I am sure I could find it if I wanted to.
20:51:19 <b_jonas> or from the wisdom database
20:51:21 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77069&oldid=77068 * Heavpoot * (+438)
20:51:35 <b_jonas> https://en.wikipedia.org/wiki/Chris_Okasaki has the reference
20:55:49 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77070&oldid=77069 * Heavpoot * (+74)
20:59:33 <esowiki> [[,,,]] https://esolangs.org/w/index.php?diff=77071&oldid=77054 * SunnyMoon * (+94) I hope the readers know what I am talking about.
21:03:03 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77072&oldid=77070 * IFcoltransG * (+148) /* Language specifications */
21:03:26 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77073&oldid=77072 * IFcoltransG * (+6) /* Language specifications */ Add <br>
21:04:55 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77074&oldid=77073 * IFcoltransG * (+7) /* Language specifications */ Clearer language
21:05:38 <b_jonas> spruit11: ... ok, so the problem here is that I still haven't put on a proper egel installation an wrapper to HackEso (I wanted to modify a few things in the code to make it more convenient for HackEso), so I can't easily test this online
21:08:36 <spruit11> Oh, right. Maybe I have an alternative. Moment.
21:09:05 <spruit11> https://tio.run/##hVTbbtpAEH33V4ych9qlIVzUFyIqtWmFKkVEIi9YBCEHj8mq9q5lL2po02@nsxevl4a2lsA7Zy5ndi7GHRbH40VwAQvRoJQp3IgMAZ/TsiqQBP49Pbxp4Jbl2A@U3T3iBJ6krCZXV7Xx2ZJLX9S7IGBlJWoJYVVjsScQd6HDmCBRhEGwbxjfwf2hkVha4ZY10h6/3gVBhjk8irTOGvYDYQrvDYRlJQ8krmAJCVx@gAGsjYbxBoljGgA9Rv3p7uPiszLSmMUHkAwUxnJIeQYRAdMpLGOIEn1KYpBPyGHonLwHiwZtWBNo3dJvhaBcLX2BEhaUZV6LUgrKMequcgnDmJL1U6Jc9V3KtILoYdkdNbpUKSX0I7s1hV0YwqpmXG6xKNyV
21:09:11 <spruit11> 9bU0DGEfQo2@wMZD30LY5qsRnZXzb8vlUstFkRWw2ihmm9Mq0um0ITV/ZAtCijWZXrdsD5zYgIuqLY4r1Z7LP1hNNx2zDUlkulxRot8x9DrNebR3Yv23eMkrn@Qf1lHSO8PdO8usUXtPjs/Sa87cTt1cTdnYDpmZqIHrVWskaoi04Si2h3F86tKy7KsslfifTqqBpCZO7Vy5Jqqye@2DyPSmQwjKi1RKIjZNPJldFZZG1w8LNzDvQusSKERPr@fZjldtJgoGcbet5vACWrHxFHbFu9Ve2@8B5WCr8Vgw/g1rW4nIegxVGftOHJ2KYxKNd5kyTrdxOzz7MqdvggtqyOwtrH5Ier8F2uXUZPTaZOjXwq3ZzFvVHXKsU8kEn9AeXfv7OrNb9VNxvdPh9P/o1/
21:09:17 <spruit11> H4Gw
21:09:20 <spruit11> Oops.
21:10:00 <spruit11> That was more lengthy than I expected. 'Try it online' has Egel.
21:10:23 <spruit11> You can find it from here: https://egel-lang.github.io/
21:10:31 <spruit11> But I don't know what version it runs.
21:11:33 <b_jonas> ok
21:13:15 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77075&oldid=77074 * IFcoltransG * (+395) Added symbols
21:13:41 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77076&oldid=77075 * IFcoltransG * (+1) /* Language specifications */ Comma for clarity
21:14:26 <spruit11> https://tio.run/##S01Pzfn/PyU1TSE3MTNPwVZBKSM1Jydf6f9/AA
21:15:53 <spruit11> Don't forget to give 'using System' directives.
21:16:05 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77077&oldid=77076 * IFcoltransG * (+5) /* Language specifications */ Clarified semantics
21:16:11 <spruit11> Otherwise you don't have addition, etc.
21:18:38 <spruit11> https://tio.run/##S01Pzfn/v7Q4My9dIbiyuCQ1l4srJTVNIS0xWcFWIVrBQEHXTsFQoUbBD8TwU9ACy2gAeQqGmgqxEMW5iZl5QNUgGdP//wE
21:18:46 <spruit11> I'll stop spamming now.
21:18:54 <b_jonas> spruit11: right, so basically for HackEso I want to write a wrapper, and modify the code when necessary, so that I can start spruit such that it runs a custom (for HackEso) prelude that loads the right modules and imports the right things into your namespace, and then run either a file or the code in an argument, in both case in the same namespace that I imported stuff into,
21:20:01 <b_jonas> optionally do it like the interactive interpreter that can execute a value and then print it, but such that you can still have (silent) declarations and assignments in the same code as the one that can just print values, and it doesn't print interactive prompts (I think this part needs a code change),
21:21:01 <spruit11> The biggest problem is persistency, right? You probably also want some kind of persistency in a session/irc conversation.
21:21:02 <b_jonas> and ideally also modify the pretty-printer so it can print tuples and lists using proper tuple or list notation, possibly incomplete lists too, but have some escape so you can print full forms too
21:21:19 <b_jonas> spruit11: that's later, first I just want single lines
21:21:25 <b_jonas> persistency is harder
21:22:16 <b_jonas> though I could probably add lambdabot-like persistence, where in addition to a constant prelude, it also adds a variable prelude, and there's a command to try to add a declaration to the variable prelude but only if it doesn't error out, and a command to delete the entire variable prelude
21:22:17 <spruit11> Seems like a lot of work? How did you do it for other languages?
21:22:33 <b_jonas> with prehaps two of these preludes, one in tmp and one not in tmp
21:22:42 <b_jonas> but even without persistence this is useful
21:22:55 <b_jonas> spruit11: persistance can be done in various ways depending on what languages do
21:23:31 <b_jonas> for jevalbot, for persistence I dump only the value of the symbols in the main namespace, and load those at the start, using J's built-in value serializer
21:23:33 <spruit11> I remember somebody from another channel who just wrote a short bash script. Moment.
21:24:32 <esowiki> [[User:DmilkaSTD]] https://esolangs.org/w/index.php?diff=77078&oldid=76588 * DmilkaSTD * (-2584) Blanked the page
21:24:50 <b_jonas> in broad strokes, there are three ways to do persistence: (a) keep an interpreter process alive, (b) save the code that takes you to that state, like lambdabot, (c) serialize (some of) interpreter state, like jevalbot
21:26:07 <b_jonas> (c) is the most variable, because interpreters themselves differ a lot in what support they offer for this, some have workspaces like many classical APL or Smalltalk that saves everything in interpreter state but not necessarily in code form, some have some help to serialize data but not necessarily all state (because state can contain eg. file descriptors)
21:26:19 <b_jonas> but without persistence, this isn't a lot of work
21:26:35 <b_jonas> at least when I looked at egel the last time, it seemed like only a few easy changes
21:26:39 <b_jonas> I was just lazy to finish it
21:26:51 <b_jonas> because egel can already do most of what I want so I just need a wrapper script
21:27:18 <b_jonas> to run the prelude and code in the same namespace, I can just concatenate them before I give it to egel
21:27:39 <spruit11> https://github.com/diku-dk/sturluson
21:27:44 <b_jonas> and I can invoke egel as an interactive interpreter, which does most of what I want, except I need to silence the prompts
21:28:02 <spruit11> ^ has a bash script which runs the futhark compiler.
21:28:02 <b_jonas> and IIRC I had to do something with the module search paths
21:28:23 <b_jonas> IIRC because spruit11 has "." hard-coded to search path, which I hate and want to turn off
21:28:56 <b_jonas> so I think it's only two minor changes to egel: remove hard-coded "." from search path, silence prompts (both possibly only if you give a command-line option)
21:29:04 <b_jonas> and then a wrapper script and prelude
21:29:35 <b_jonas> we already have wrapper scripts that run an interpreter or compiler with stuff from command line. if anything, we have too many of those wrapper scripts and they do too much.
21:29:40 <b_jonas> on HackEso that is
21:30:11 <spruit11> Oh, right. The module search path.
21:30:32 <b_jonas> and maybe you already fixed some of those in egel since I last looked
21:31:37 <b_jonas> the only problem is, I want to do this so it's reproducible when you update egel, so I need a minimal patch to apply, and a simple script to compile and install it to HackEso after I download the repository tarball, and neither of those is hard really, each part is still just a few lines of code
21:32:25 <spruit11> You can surpress the "./" search path with -I.
21:32:26 <b_jonas> I already had some of it working, as in, I compiled egel on HackEso successfully and ran some egel commands
21:32:45 <b_jonas> spruit11: is that a new feature?
21:32:49 <b_jonas> "new"
21:33:00 <spruit11> // add local directory to the search path if no other where given
21:33:01 <spruit11> if (!hasI) oo->add_include_path(icu::UnicodeString("./"));
21:33:06 <spruit11> No idea.
21:33:52 <spruit11> I could have added that to the main routine after we spoke but it's a long time since we did that.
21:33:59 <b_jonas> ok
21:35:25 <spruit11> You could just give it an extra bogus dir with "--include bogus" and it should work, I guess.
21:36:54 <b_jonas> I can give it a real dir
21:37:23 <b_jonas> well that's good, so then I only need the other edit to egel, to have "interactive mode" without the prompt
21:37:31 <b_jonas> as an option
21:38:17 <b_jonas> or possibly just auto-suppress the prompt in interactive mode unless isatty(0)
21:38:34 <b_jonas> we could have both
21:38:54 <b_jonas> make the prompt empty by default if !isatty(0), but also have an option to change the prompt string
21:39:05 <b_jonas> or a function or whatever
21:39:18 <b_jonas> no, it has to be a command-line option to suppress the first prompt
21:39:48 <spruit11> Hmm. If it's useful I'll build that in.
21:40:44 <b_jonas> I don't know, how would you implement HackEso being able to run an egel one-liner, which is first priority, running a script with prints is less important
21:40:59 <b_jonas> you know egel better, maybe you have a better idea for this
21:41:59 <b_jonas> for one-liners you really want some symbols imported from the prelude
21:43:06 <b_jonas> as a bonus, rename one of the "length" functions so you can access both without giving an explicit namespace
21:43:17 <b_jonas> IIRC one was string length, the other list length
21:43:23 <b_jonas> probably rename the list length one
21:43:31 <spruit11> Right. I am mulling of it.
21:43:37 <spruit11> *over
21:43:41 <b_jonas> ok, it's not like it's urgetn
21:43:59 <b_jonas> and I don't think I'll have any practical applications for this
21:44:08 <b_jonas> it's just another #esoteric toy
21:44:52 <b_jonas> so I won't even eg. use it as a scripting language to write ordinary scripts on egel, there's perl and python on HackEso for that
21:46:51 <spruit11> Right.
21:48:18 <spruit11> I am looking at what Python does.
21:48:30 <spruit11> When in doubt, copy.
21:48:44 <b_jonas> spruit11: python sort of doesn't do the right thing here,
21:49:11 <b_jonas> in that in python, some code requires multiple lines, and there's no nice way to put those in a one-liner.
21:49:21 <b_jonas> I think egel doesn't have that, so you don't have to deal with that
21:50:00 <spruit11> Oh, right. I am just wondering whether you can surpress the prompt of Python.
21:50:09 <b_jonas> also python has a real repl, which can run a statement and then ask for another statement on input, which I don't need for HackEso because HackEso can't get interactive inputs
21:50:13 <spruit11> dc on the other hand doesn't even have a prompt.
21:50:38 <b_jonas> oh, you mean suppress the prompt but still print things? let me look that up
21:50:39 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77079&oldid=77077 * IFcoltransG * (+106) Expanded upon spaces
21:51:09 <b_jonas> python by default doesn't print values if it's not in interactive mode
21:51:18 <b_jonas> it just runs the statements as in from a script
21:51:41 <b_jonas> in fact it reads and compiles the whole input then before running anything
21:51:42 <esowiki> [[Conveyer]] N https://esolangs.org/w/index.php?oldid=77080 * Abbin21 * (+2483) Created page with "{{infobox proglang |name=Conveyer |author=[[User:Abbin21]] |majorimpl=[https://github.com/Abbin44/Conveyer Github Page] |year=[[:Category:2020|2020]] |files=<code>.coy</code>..."
21:51:49 <b_jonas> let me see how to change that
21:51:56 <spruit11> Yah, that's what Egel does too.
21:51:56 <esowiki> [[Conveyer]] M https://esolangs.org/w/index.php?diff=77081&oldid=77080 * Abbin21 * (+2) /* How it works */
21:52:07 <fizzie> b_jonas: import sys; sys.ps1 = ''
21:52:08 <esowiki> [[Conveyer]] M https://esolangs.org/w/index.php?diff=77082&oldid=77081 * Abbin21 * (+1) /* How it works */
21:52:24 <fizzie> (And ps2 for the "secondary prompt", the ... one.)
21:52:45 <spruit11> Oh, right. Interesting.
21:52:49 <b_jonas> fizzie: ok, but how do you use interactive mode or print results automatically without input from a terminal, which is what you want in HackEso
21:53:02 <zzo38> You can use dc interactively but it won't display a prompt nor display results automatically. The SQLite command line program does always display the results (even if the prompt is not displayed), since there is nothing else to do with the results (other than possibly writing them to a file, which it can also do if you specify that).
21:53:02 <spruit11> So you can set the prompt from a script?
21:53:29 <b_jonas> not that it matters because of the impractical newline thing, I have to fix that first by adding additional core python syntax, which I've been planning for a while but never really started coding
21:53:41 <b_jonas> I have figured out what I think is the right syntax at least
21:53:48 <esowiki> [[Conveyer]] M https://esolangs.org/w/index.php?diff=77083&oldid=77082 * Abbin21 * (+125)
21:54:00 <b_jonas> but even then I wouldn't do automatic prints from non-terminal, I'd just add prints
21:54:03 <b_jonas> but
21:54:12 <fizzie> I'm sure there's a way to get it to interactive mode.
21:54:30 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77084&oldid=77079 * IFcoltransG * (+150) /* Language specifications */ Specified v behaviour better
21:54:34 <fizzie> There's also sys.displayhook, which "is called on the result of evaluating an expression entered in an interactive Python session" and can be used to customize how things are printed.
21:54:34 <b_jonas> spruit11: the problem is, adding prints isn't a problem, but in non-interactive mode, egel can't even just evaluate multiple expressions for their side-effects
21:54:53 <spruit11> b_jonas: No, it can now.
21:54:54 <b_jonas> spruit11: so in non-interactive mode, I don't just have to add prints, I have to add lets assigning to a dummy and prints
21:54:58 <b_jonas> oh
21:55:02 <b_jonas> in that case forget interactive mode
21:55:08 <b_jonas> if you fixed that, we want to use non-interactive mode only
21:55:20 <b_jonas> and explicit print statements in the one-liner
21:55:41 <spruit11> b_jonas: I added the val keyword. 'val f = expr' will run 'expr' and assign the value to 'f'.
21:55:47 <spruit11> That's new.
21:55:48 <b_jonas> spruit11: can multiple declarations and expressions just be on one line separated by semicolons?
21:56:07 <b_jonas> spruit11: but then you'd still need a dummy var, that's not really better than needing lets
21:56:11 <spruit11> Egel isn't layout sensitive?
21:56:19 <b_jonas> I hope not, but I don't remember completely
21:56:28 <b_jonas> I thought there was some problem with use or import statements or something
21:56:38 <spruit11> But I don't see what putting stuff on one line would help?
21:56:48 <b_jonas> which aren't really statements and I think the interactive interpreter didn't like them on the same line as normal stuff
21:57:04 <b_jonas> spruit11: because we type single IRC lines as input to HackEso
21:57:06 <b_jonas> like
21:57:06 <fizzie> `` echo -e '1 + 1\n2 + 2\n' | python -i -c 'import sys; sys.ps1 = ""; sys.ps2 = ""'
21:57:07 <HackEso> ​ \ 2 \ 4
21:57:31 <fizzie> There's one extra newline from somewhere, but it's almost an interactive Python with no prompts and reading from a non-terminal stdin.
21:57:31 <spruit11> The interactive intepreter will read one thing. WHich is either an expression, a declaration, or ..
21:57:56 <spruit11> I don't think I'll change that.
21:58:07 <b_jonas> `` echo -e '1 + 1\n)\n2 + 2\n' | python -i -c 'import sys; sys.ps1 = ""; sys.ps2 = ""'
21:58:09 <HackEso> ​ File "<stdin>", line 1 \ ) \ ^ \ SyntaxError: invalid syntax \ \ 2 \ 4
21:58:24 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77085&oldid=77084 * IFcoltransG * (+69) Formatting
21:58:41 <b_jonas> `` echo -e 'print(1 + 1, file=stderr)\n)\nprint(2 + 2, file=stderr)\n' | python -i -c 'import sys; sys.ps1 = ""; sys.ps2 = ""'
21:58:42 <HackEso> ​ File "<stdin>", line 1 \ print(1 + 1, file=stderr) \ ^ \ SyntaxError: invalid syntax \ File "<stdin>", line 1 \ ) \ ^ \ SyntaxError: invalid syntax \ File "<stdin>", line 1 \ print(2 + 2, file=stderr) \ ^ \ SyntaxError: invalid syntax
21:58:56 <b_jonas> `` echo -e 'print(1 + 1, file=stderr)\n)\nprint(2 + 2, file=stderr)\n' | python3 -i -c 'import sys; sys.ps1 = ""; sys.ps2 = ""'
21:58:57 <HackEso> Traceback (most recent call last): \ File "<stdin>", line 1, in <module> \ NameError: name 'stderr' is not defined \ File "<stdin>", line 1 \ ) \ ^ \ SyntaxError: invalid syntax \ Traceback (most recent call last): \ File "<stdin>", line 1, in <module> \ NameError: name 'stderr' is not defined
21:59:10 <b_jonas> `` echo -e'from sys import stderr; print(1 + 1, file=stderr)\n)\nprint(2 + 2, file=stderr)\n' | python3 -i -c 'import sys; sys.ps1 = ""; sys.ps2 = ""'
21:59:11 <HackEso> ​ File "<stdin>", line 1 \ -efrom sys import stderr; print(1 + 1, file=stderr)\n)\nprint(2 + 2, file=stderr)\n \ ^ \ SyntaxError: invalid syntax
21:59:30 <fizzie> I'd like it if "python" would be Python 3 at some point.
22:00:12 <spruit11> Or maybe I should..
22:00:15 <b_jonas> ``` <<<$'from sys import stderr\nprint(1 + 1, file=stderr)\n)\nprint(2 + 2, file=stderr)\n' python3 -i -c 'import sys; sys.ps1 = ""; sys.ps2 = ""'
22:00:16 <HackEso> 2 \ File "<stdin>", line 1 \ ) \ ^ \ SyntaxError: invalid syntax \ 4
22:00:21 <b_jonas> yes, that's interactive, prints the 2 first
22:00:49 <fizzie> `` echo -e 'print(1 + 1, file=sys.stdout)\nprint(2 + 2, file=sys.stderr)\n' | python3 -i -c 'import sys; sys.ps1 = ""; sys.ps2 = ""'
22:00:50 <HackEso> 4 \ \ 2
22:00:53 <b_jonas> fizzie: it can't be, that would break all sorts of compatibility, so we're stuck with python3 as the executable name, plus there's some wrapper called py that can invoke both but I never use that
22:01:12 <fizzie> Yeah, I think it'll be solved by eventually remembering to type "python3" instead.
22:01:25 <fizzie> It really only matters for when starting it interactively.
22:01:59 <b_jonas> fizzie: you can install an alias to python that fails with an error message, that acts only interactively, and you can still use python2 interactively if you really need that
22:02:09 <b_jonas> I almost never forget to type python3
22:02:51 <b_jonas> `perl -e use Date::Manip::Date 6; $s = Date::Manip::Date->new("now"); print $s->printf("%O %Z %z\n")
22:02:53 <HackEso> 2020-08-29T22:02:52 UTC +0000
22:03:17 <spruit11> You're in the middle of the ocean?
22:03:42 <b_jonas> spruit11: ^ the point is, we can just type perl one-liner that can have multiple statements, each of which can load new modules, put stuff into the namespace, declare or assign stuff, print something
22:03:57 <spruit11> Right. I'll think it over..
22:03:58 <b_jonas> and I don't need a dummy variable to print something or to evaluate an expression for its side-effects
22:04:08 <b_jonas> this is the simple experience that I would like
22:04:19 <b_jonas> python does not currently provide it, because you can't easily type compound statements to a one-liner
22:04:30 <b_jonas> but that's a separate problem from spruit, and needs separate fixes
22:05:09 <b_jonas> without compound statements, you can run a python one-liner that can load modules, import to my namespace, assign variables, evaluate expressions for their side effects
22:05:18 <b_jonas> and it has a print statement to print stuff
22:05:33 <b_jonas> if egel could give this experience, then it would be usable in one-liners
22:06:02 <b_jonas> printing expressions by default is not essential, only a few programming languages like octave do it, as long as printing is as simple as calling a print function
22:06:10 <b_jonas> so yes, I may have explained what I need wrong
22:06:12 <b_jonas> XY problem
22:07:04 <spruit11> Myah. I am mulling over it.
22:07:42 <spruit11> But from my POV. Oneliners are a too restricted use case.
22:08:09 <b_jonas> sure, they're just the first goal
22:08:14 <b_jonas> we can figure out persistence later
22:08:27 <b_jonas> if we can't even run one thing, then we don't have a hope for running things persistently
22:08:30 <spruit11> Except for executing commands directly. Maybe.
22:08:44 <b_jonas> when I wrote jevalbot, I first implemented only the non-persistent part,
22:08:47 <b_jonas> then added persistence
22:09:02 <spruit11> Yah, but persistency would solve your 'one liner' problem somewhat too.
22:09:06 <b_jonas> I admit there's a lot of things messed up in jevalbot though
22:09:15 <spruit11> Just time in two or more lines.
22:09:19 <spruit11> *type
22:09:39 <b_jonas> spruit11: ok, but I don't want to *have to* type more than one IRC line if everything I need fits in one line
22:10:20 <zzo38> Some programming languages are statement oriented some is more like expression oriented, and some works differently, and different conventions in the interactive mode can be useful in different programming languages. For stack based programming languages, such as Forth, dc, and PostScript, it will just leave the result on the stack but you can enter some commands to display them.
22:10:39 <spruit11> I'll think it over. THere's the 'egel -c "someexpr"' which might get better if you could put more on one line. So there's that too.
22:10:39 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77086&oldid=77085 * IFcoltransG * (+198) /* Language specifications */
22:10:44 <b_jonas> spruit11: thank you
22:11:12 <b_jonas> spruit11: will you also think about tuples and lists for the pretty-printer?
22:11:21 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77087&oldid=77086 * IFcoltransG * (+6) /* Language specifications */ Forgot a br
22:11:31 <b_jonas> with an escape clause to get the full form
22:11:32 <spruit11> Maybe, that's higher on my list but problematic.
22:11:49 <b_jonas> why is it problematic?
22:12:13 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77088&oldid=77087 * IFcoltransG * (+4) /* Language specifications */ Added an article
22:12:14 <spruit11> Egel is untyped. It's a hefty cost to check large datastructes for well-formedness.
22:12:26 <spruit11> *datastructurs
22:12:28 <spruit11> Oh god.
22:12:28 <b_jonas> why would you have to check them for well-formedness?
22:12:32 <spruit11> It's late.
22:12:34 <b_jonas> tuples are always well-formed
22:12:50 <spruit11> Lists aren't.
22:13:01 <b_jonas> yes, for lists either you only have to check that they have the empty list as the tail, or have a printed representation for dotted lists
22:13:15 <b_jonas> scheme and prolog chooses the latter method, having dotted lists
22:13:18 <spruit11> `1 nil cons` is an entirely legal term.
22:13:19 <HackEso> 1/1:/hackenv/bin/`: eval: line 5: unexpected EOF while looking for matching ``' \ /hackenv/bin/`: eval: line 6: syntax error: unexpected end of file
22:13:49 <b_jonas> spruit11: sure, you only need to print a list or partial list if cons/2 is the head of a function call
22:13:57 <b_jonas> or cons is the head of a two-argument function call or something
22:14:23 <spruit11> No, I think the entire list needs to be well-formed?
22:14:47 <spruit11> What if everything is okay but you end with `0` instead of `nil`?
22:14:54 <b_jonas> spruit11: then you print a dotted list
22:15:01 <b_jonas> let me try to show in prolog, which HackEso has
22:15:01 <spruit11> Hmpf.
22:15:08 <spruit11> No, I get it.
22:15:18 <b_jonas> ok
22:16:19 <b_jonas> the complication with prolog is that apparently even though it has list and dotted list syntax, it's not standardized what the name of the symbol that is the head of a cons is, and the prolog brand that HackEso has uses the other choice
22:16:50 <spruit11> I was thinking of just dropping cons and use nested tuples for everything.
22:17:10 <b_jonas> eww
22:17:22 <b_jonas> why is having a specific constructor for cons and nil hard?
22:17:28 <spruit11> Why not? Egel is untyped. Might as well go the whole way.
22:17:29 <b_jonas> I mean, egel lets you create custom constructors
22:17:33 <spruit11> Minimalism.
22:17:37 <b_jonas> so you can have as many as you want
22:17:45 <b_jonas> they're cheap
22:17:45 <spruit11> And, math does it that way often too.
22:17:59 <spruit11> Aesthetics.
22:18:10 <b_jonas> math puts a type system over it, but doesn't often talk about it
22:18:14 <b_jonas> a static type system that is
22:18:18 <b_jonas> known only at compile time
22:18:33 <b_jonas> at runtime the representation of a tuple and a cons might be the same, but you distinguish them at compile time
22:18:46 <b_jonas> you could have something like that in C too
22:18:55 <b_jonas> I don't think it's suitable for a dynamically typed language
22:19:22 <b_jonas> I mean, isn't this a pure library feature anyway?
22:19:34 <spruit11> ANyway. Prompt. Multiple expressions. Pretty-printing.
22:19:38 <b_jonas> you can implement tuples, lists, and pretty-printing as library features
22:20:01 <b_jonas> because you can already match a cons and have a fallback clause in egel
22:20:06 <b_jonas> so you can just write a pretty-print function
22:20:23 <b_jonas> well, almost
22:20:30 <b_jonas> you can't because it can't match arbitrary arity functions I think
22:20:33 <b_jonas> um
22:20:34 <spruit11> Right.
22:20:36 <b_jonas> arbitrary arity applications
22:20:41 <b_jonas> so that's a problem
22:20:42 <b_jonas> ...
22:20:48 <spruit11> Got you the first time.
22:20:50 <b_jonas> oops
22:20:59 <spruit11> I should change that once.
22:21:07 <spruit11> Unsure to what.
22:21:11 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77089&oldid=77088 * IFcoltransG * (-5) /* Language specifications */
22:21:41 <spruit11> Or just ignore everything below arity 9.
22:21:43 <b_jonas> well in that case you might need the pretty-printer in C
22:21:43 <spruit11> Ah well.
22:21:53 <b_jonas> in C++ I mean
22:22:57 <spruit11> I should have implemented a Lisp!
22:22:59 <b_jonas> in olvashato I just mapped tuples and conses and lists to the tuple/cons/list of the underlying languages, that was easier
22:23:02 <spruit11> Ah well.
22:23:17 <b_jonas> spruit11: you still can, and call it egel2 or something
22:23:45 <b_jonas> I implemented a lisp once but it sucks, it doesn't even have a let statement, or a way to add one, because it doesn't implement macros
22:24:00 <b_jonas> it's a very tiny lisp, with one page of code
22:24:10 <spruit11> I like those!
22:24:23 <spruit11> Egel is way larger than I want.
22:24:24 <b_jonas> also no proper boolean type
22:24:49 <b_jonas> so it's not even a proper subset of scheme, because (eq (eq 9 9) 1) returns true
22:25:10 <spruit11> Neat!
22:25:16 <b_jonas> it should return false because (eq 9 9) is a boolean and 1 is a number, but I just made eq return numbers
22:25:19 <b_jonas> it was lazy
22:25:28 <b_jonas> no, it's not neat, it's a way to make a non-scheme
22:26:03 <spruit11> Yah. But a non-scheme which might run on a PIC..
22:26:10 <spruit11> I like the smaller stuff.
22:26:21 <b_jonas> I think if also doesn't quite behave for non-booleans like in scheme
22:26:34 <b_jonas> this one can't, it's written in J
22:26:41 <b_jonas> it's not written in C or any such low-level thing
22:28:11 <spruit11> Oh bummer.
22:28:22 <spruit11> I already wondered why it was that small.
22:28:40 <spruit11> Shortest I remember is one file of 2kLoc?
22:28:43 <spruit11> Unsure.
22:29:16 <b_jonas> I would like to write a reference interpreter for Consumer Society in C that can be reduced to small if you omit all the optional features
22:30:18 <spruit11> ANyway. Prompt. Multiple expressions. Pretty-printing. Arity fix.
22:30:42 <spruit11> That's enough for a day.
22:30:48 <b_jonas> I am not specifically requesting the arity fix
22:31:06 <b_jonas> I don't think I'd use that
22:31:19 <spruit11> Yah, but it's more on the top of my list than the rest.
22:31:21 <b_jonas> I mean I'd try it if you developped it
22:31:35 <b_jonas> add renaming "length" to the list instead
22:31:43 <b_jonas> or in addition
22:31:51 <b_jonas> the list length
22:32:03 <spruit11> It's annoying if general stuff isn't expressible in the language. So that kind-of floats to the top as a language bug.
22:32:09 <b_jonas> hmm, should I make tickets on github?
22:32:45 <spruit11> You could that but I have no clue how git works. I just push to master constantly.
22:33:08 <b_jonas> spruit11: that's not a feature of git
22:33:11 <b_jonas> it's a feature of github only
22:33:16 <b_jonas> and a very controversial one
22:33:30 <b_jonas> many people hate the github ticket system, which I totally understand
22:33:30 <zzo38> If you don't like git then you could use a different version control system? There are many other ones too, not only git
22:33:33 <b_jonas> I hate it too
22:34:04 <b_jonas> but if a developer is maintaining their code and requests to submit tickets there, then of course I use it
22:34:09 <spruit11> Well, with my push to master approach it worked so far for me.
22:34:13 <zzo38> But what way would you do the ticket system better?
22:35:30 <b_jonas> zzo38: there are two main problems. one is that there's no easy way to migrate away from github if you use tickets. no easy feature to export all tickets. you can migrate the version control easily, since you can git clone it.
22:36:25 <fizzie> *Surely* they must have that in the API?
22:37:06 <b_jonas> zzo38: the other problem is not necessarily with tickets, only with how some projects use tickets: they demand that you submit github pull request, which require that the submitter makes a clone of the repository on github. you can't just submit a formatted git patch, you have to apply it to a github repo and link to the git commit object, that's how you can create a pull request.
22:37:09 <zzo38> One problem I think is that as far as I can tell, you cannot post a ticket if you do not have an account, and I do not know if this can be customized.
22:37:16 <b_jonas> fizzie: they probably have a way to access tickets individuall
22:37:21 <b_jonas> and iterate over them
22:37:34 <esowiki> [[Conveyer]] https://esolangs.org/w/index.php?diff=77090&oldid=77083 * Abbin21 * (-102)
22:37:36 <b_jonas> and the comments for them
22:37:39 <b_jonas> and all that stuff
22:38:19 <fizzie> I think that's pretty reasonable. I mean, you'd have to write some sort of conversion to whatever issue-tracking system you'd want to put them into, it's not like there's a standard interchange format for issue trackers.
22:38:25 <b_jonas> zzo38: yes, I guess you can add that, though I find that more acceptible, and have a github account that I use only for tickets, I don't have projects on github currently
22:39:17 <b_jonas> zzo38: though I admit that even for that, it took me a long time until I could change my displayed username to what I want, because apparently I (or someone else) created an account with the username b_jonas, but I can't access that account, even though I probably created it somehow, so I can't use that username
22:39:24 <zzo38> Yes, and if they demand you do a pull request instead, well I suppose it is right it isn't really a problem with the system itself but it is a problem, even if they add the possibility to add tickets without an account, that wouldn't work for pull requests.
22:39:26 <b_jonas> so I changed to some other similar username instead, and even that took a while
22:40:07 <b_jonas> zzo38: right, and a project could use the github ticket system but accept patches in forms other than github pull requests
22:40:34 <b_jonas> but I don't think I've seen any project do that
22:40:42 <esowiki> [[Conveyer]] M https://esolangs.org/w/index.php?diff=77091&oldid=77090 * Abbin21 * (+35)
22:40:43 <fizzie> Hmm, I hadn't really internalized that submitting GitHub issues requires a GitHub account.
22:42:33 <b_jonas> zzo38: oh, and one more thing. many projects don't want to use the github ticket system, and have some other way of reporting bugs, but it's not possible to configure github to just reject creating tickets and pull requests, so the best they can do is have some script that watches for tickets and pull requests and closes them with a reply that has a link to instructions for submitting bug reports and
22:42:39 <b_jonas> patches
22:43:06 <b_jonas> zzo38: often they don't even use github for development at all, they just symc the project there so people can download the version history from github too
22:43:09 <b_jonas> sync
22:43:29 <b_jonas> like periotically push there from a master git repo hosted elsewhere
22:43:55 <b_jonas> so these projects have to do a lot of extra work with tickets and pull requests
22:43:56 <fizzie> You can definitely configure GitHub to not have issues enabled.
22:44:10 <zzo38> I think I have seen some projects without issues enabled
22:44:17 <b_jonas> (usually tickets, because the people who create pull requests are more likely to read instructions before submitting)
22:44:51 <b_jonas> fizzie: projects that are still developped, not like closed and locked and owner account deleted?
22:45:05 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77092&oldid=77089 * Heavpoot * (+40)
22:45:09 <zzo38> There are other git hosting services other than GitHub anyways.
22:45:35 <b_jonas> zzo38: sure, and that's a good thing, multiple services is a plus, but a service is worse if you can't migrate away easily
22:45:45 <fizzie> b_jonas: Yes, I'm moderately sure, because I remember having to explicitly have to go in and enable issues for the `esolangs` repo (not that anyone's submitted any). Trying to double-check now though.
22:45:51 <zzo38> Also, in Fossil if you clone the repository it does clone the tickets too, so it doesn't have that problem at least. (And you can use SQL to export the tickets, should you need to do)
22:45:51 <b_jonas> (it's also worse if you can't migrate *to* it easily, but I don't know how that works on github)
22:46:08 <b_jonas> zzo38: right
22:46:18 <fizzie> Yes, there's a "[ ] Issues" checkbox in the repository settings, "Options" tab, "Features" subsection.
22:46:28 <b_jonas> fizzie: hmm...
22:46:49 <b_jonas> fizzie: I might look at this later, but this is definitely what someone wrote about a project
22:46:53 <b_jonas> on github
22:47:08 <fizzie> (The list of toggleable features is: Wikis, "Restrict editing to collaborators only", Issues, Sponsorships, Projects and "Preserve this repository".)
22:47:18 <b_jonas> I can find which project it was so I can look it up later
22:48:26 <fizzie> That last feature is the thing where they took all GitHub code to the vault in Svalbard. I should've made sure to make *some* commit to the esolangs repo to have it included, since it only grabbed "repositories that have been active within recent months".
22:48:50 <fizzie> Because if there's something they'll need after a civilization-ending disaster, it's the code for esolangs.org/logs.
22:49:11 <b_jonas> fizzie: how often do they repeat that?
22:49:33 <fizzie> I think it was a one-off. At least they've not said anything about doing it periodically.
22:49:45 <fizzie> "We plan to evaluate the program, and the state of the art of archival technology, every five years. Depending on the results of each evaluation, we may then decide to take another snapshot of GitHub’s public code and archive it in cold storage."
22:49:53 <b_jonas> ah
22:50:11 <b_jonas> "five years" is never in this sort of thing
22:50:30 <b_jonas> especially with "may decide"
22:50:41 <fizzie> Heh, they didn't include commit messages, apparently for GDPR-style reasons.
22:51:02 <b_jonas> hehe
22:53:01 <esowiki> [[Conveyer]] M https://esolangs.org/w/index.php?diff=77093&oldid=77091 * Abbin21 * (+97)
22:54:37 <fizzie> Oh, they've got another project going on for even more long-term storage.
22:54:51 <fizzie> Because the film they've put in the vault is only good for 500-1000 years.
22:55:39 <fizzie> Reading up on https://archiveprogram.github.com/ -- there's a sort of map of layers of archives, and at the bottom they say they're "partnering with Microsoft’s Project Silica to ultimately archive all active public repositories for over 10,000 years, by writing them into quartz glass platters using a femtosecond laser".
22:55:53 <fizzie> I imagine that's not at all related to the fact that it's a Microsoft subsidiary.
22:56:17 <b_jonas> fizzie: the problem there is that it's basically impossible to give a lower bound for how long any storage is likely to last without testing for much more than that amount of time
22:56:29 <b_jonas> you can give upper bounds
22:56:59 <fizzie> Yeah, I'm sure it's pretty much just estimates.
22:57:22 <fizzie> For the film they say it "has a lifespan of 500 years as measured by the ISO", but presumably ISO has not in fact tested it for 500+ years.
22:58:04 <b_jonas> just like how you can't really know for sure that a new medication or medical procedure for humans doesn't have harmful side-effects on the patient until it's been used more than a human lifespan ago
22:58:20 -!- imode has quit (Ping timeout: 258 seconds).
23:04:57 <spruit11> I hacked two thing. String:length -> String:strlen and EGEL_PS0 as an environment variable to set the prompt.
23:05:52 <b_jonas> spruit11: nice
23:06:08 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77094&oldid=77092 * RocketRace * (+285) /
23:06:37 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77095&oldid=77094 * RocketRace * (+4) /* Language specifications */
23:06:47 <b_jonas> spruit11: why an env-var instead of a command-line option?
23:07:07 <b_jonas> though it doesn't matter, since we probably don't want interactive mode afterall
23:07:28 <spruit11> Now you tell me.
23:07:33 <b_jonas> but non-interactive mode with top-level uses and declarations and anything
23:07:40 <b_jonas> that is just harder
23:07:48 <b_jonas> so interactive mode with PS1= can be a good hack
23:07:53 <b_jonas> in the interim
23:08:06 <b_jonas> so it's still useful
23:08:11 <b_jonas> thank you
23:08:19 <spruit11> Well. No problem.
23:08:42 <spruit11> It both seemed useful.
23:09:04 <spruit11> Unsure why I have namespaces if I am going to rename stuff. But ah well.
23:09:18 <spruit11> I guess namespaces were overkill for this language anyway.
23:09:24 <b_jonas> spruit11: namespaces can be still useful
23:09:41 <spruit11> Myah, but it's for programming in the large. Right?
23:09:50 <b_jonas> but this is a function that we want in the prelude, so if you don't rename it, the prelude would import it under a different name
23:10:01 <spruit11> Doesn't really fit with Egel. Maybe it could be useful once for programming in the small.
23:10:06 <b_jonas> it's for programming in the middle
23:10:12 <b_jonas> and large too
23:10:16 <spruit11> That's my place!
23:10:49 <spruit11> I'll think over multiple expressions too but that's a bit weird in my model.
23:11:32 <spruit11> You already have ';' in expressions. But I guess you want preceding directives too.
23:12:15 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77096&oldid=77095 * RocketRace * (+2) /* Language specifications */
23:12:19 <b_jonas> spruit11: and preceding declarations too
23:12:27 <b_jonas> directives, declarations, expressions, all together
23:12:54 <spruit11> What if: preceding declarations and preceding directives but only one expression?
23:13:43 <b_jonas> spruit11: that would be somewhat inconvenient, but still better than nothing
23:14:09 <spruit11> Hmm. That's hard too. I've got no idea where a definition ends and the next expression starts..
23:14:32 <b_jonas> then you's have to use a parenthesis around the expressions, and move declarations before it
23:14:34 <spruit11> `def f = 1 2`
23:14:35 <HackEso> def? No such file or directory
23:15:12 <b_jonas> spruit11: what? the definition ends at the semicolon that is not inside balanced parenthesis, or at eof
23:15:58 <b_jonas> where both brackets and round parenthesis and braces count
23:16:33 <spruit11> Right. Don't have semicolons (except for in expressions).
23:16:50 <b_jonas> so layout *is* significant. that's what I said
23:17:02 <spruit11> Huh?
23:17:05 -!- imode has joined.
23:17:22 <b_jonas> you can currently have multiple definitions in a file, right? how do you separate multiple definitions?
23:17:45 <b_jonas> can you only separate them with newlines? if so, that means layout is significant, and that's inconvenient for IRC where you don't want newlines in your IRC line
23:17:56 <spruit11> The expression ends because either another def (or other) or eol.
23:18:08 <b_jonas> because IRC lines can't have literal newlines, so you'd have to transform some escape to a newline before feeding to egel
23:18:24 <spruit11> I don't care about newlines.
23:18:30 <spruit11> I care about keywords.
23:18:40 <b_jonas> what does "eol" mean?
23:18:55 <spruit11> Uh, sorry. Eof.
23:19:16 <b_jonas> ah
23:19:20 <b_jonas> well that's a problem
23:19:26 <spruit11> Right.
23:20:03 <b_jonas> then you need to modify the syntax, to allow semicolons or some other separator
23:20:11 <spruit11> No way.
23:20:40 <spruit11> Or maybe way. 'egel -c "command"' is a thing.
23:20:56 <b_jonas> possibly a new keyword before bare expressions that's shorter than `def _=`
23:21:32 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77097&oldid=77096 * RocketRace * (+32) /* Language specifications */
23:22:15 <spruit11> Good idea.
23:22:21 <b_jonas> spruit11: you could add double semicolons as a new separator if you prefer not to mess with ordinary semicolons, I think some repls for eg. perl do that when the underlying language is not suitable to use semicolons for this
23:22:33 <b_jonas> in perl that's because they don't want to parse perl to know when to execute the partial string
23:23:03 <b_jonas> but you could also have it if the language just uses semicolons in an incompatible way (as long as it doesn't use double semicolons in an incompatible way)
23:23:15 <spruit11> No, I think something like `expr` could be a nice keyword if you just want to evaluate something for the side-effects.
23:23:30 <spruit11> But then.. The prompt.
23:23:32 <spruit11> Uh.
23:23:54 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77098&oldid=77097 * Heavpoot * (+92)
23:24:46 <b_jonas> spruit11: are semicolons at least allowed at the end of a definition without changing anything, or do they change the value to void?
23:24:52 <b_jonas> or unit or whatever it's called
23:25:02 <spruit11> Maybe the double semicolon is better. Just parse lines, split on double semicolon, feed that to the evaluator.
23:25:20 <b_jonas> spruit11: why don't you like single semicolons?
23:25:47 <spruit11> No, it's 'expr := expr; expr | ...'.
23:25:49 <b_jonas> you can make them optional before `def` and other such keywords
23:26:41 <spruit11> Could, but not really easy.
23:27:10 <b_jonas> well ok
23:34:17 <spruit11> Regarding the semicolon. I don't like lay-out sensitive languages (also, I am lazy) and I don't like ending definition with a marker. So I ended with this.
23:34:19 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77099&oldid=77098 * RocketRace * (-177) Haha, I did it
23:35:14 <spruit11> But I think I'll go for the double semicolon in interactive/command mode.
23:35:14 <b_jonas> spruit11: if you do an arity fix, make sure you can match both an unknown arity function call with a known head and with an unknown head
23:35:59 <spruit11> A fix might be just converting something to a list. Don't know.
23:36:59 <b_jonas> and maybe to have some way for a user-defined function to do arbitrary computation before it decides if it returns evaluated or unevaluated
23:37:18 <spruit11> ?
23:37:20 <b_jonas> currently it can only do a series of top-level matches on its argumenr list before it
23:37:48 <spruit11> Still don't get it?
23:38:36 <b_jonas> let f = [1 Y -> 2];; then (f 0 9) returns an unevaluated function call with f as its head, (f 1 9) returns evaluated to 2
23:38:53 <esowiki> [[User:Language]] https://esolangs.org/w/index.php?diff=77100&oldid=73251 * Heavpoot * (+164)
23:39:29 <spruit11> That's a feature, not a bug?
23:40:02 <b_jonas> how do I define f so that for any n,k integers, if (n*n + k*k < 1000) then (f n k) is evaluated, otherwise it's unevaluated
23:40:25 <esowiki> [[User:Language]] https://esolangs.org/w/index.php?diff=77101&oldid=77100 * SoundOfScripting * (-164) Undo revision 77100 by [[Special:Contributions/Heavpoot|Heavpoot]] ([[User talk:Heavpoot|talk]])
23:40:29 <spruit11> You can also do 'def f = [ 1 Y -> 2 | -> throw "error"'
23:40:34 <spruit11> Uh.
23:40:39 <spruit11> You can also do 'def f = [ 1 Y -> 2 | -> throw "error"]'
23:40:52 <b_jonas> yes, but I'm asking about unevaluated with the same head
23:40:54 <esowiki> [[User:Language]] M https://esolangs.org/w/index.php?diff=77102&oldid=77101 * SoundOfScripting * (+49)
23:41:20 -!- Heavpoot has joined.
23:41:32 <Heavpoot> hi are you all enjoying the plentiful spam made by all the edits to 1CP=1ICL
23:41:33 <b_jonas> you can match the head f of the returned unevaluated application later in another function's pattern list
23:42:16 <spruit11> Oh right. You want guards?
23:42:18 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77103&oldid=77099 * RocketRace * (+63) /* Language specifications */
23:42:20 <b_jonas> currently you can't do that, instead you have to use a different head for the return
23:42:26 <b_jonas> no, I don't want guards
23:42:51 <b_jonas> because with guards I can't reuse the same computation in the guard and return value
23:43:47 <spruit11> What about a means to just return `f 1 9` unevaluated? (Even after evaluation)
23:43:54 <b_jonas> like imagine that n*n + k*k is slow to compute, and I want to return g (n*n + k*k) in the evaluated case
23:44:13 <b_jonas> spruit11: what "means"
23:44:46 <spruit11> Something like a flag that you just return an expression instead of an evaluated expression.
23:45:06 <b_jonas> I don't know what mechanism or syntax it should use really
23:45:11 <b_jonas> it's just a stupid idea
23:45:33 <b_jonas> I probably wouldn't even use it because I don't care that much about the symbolic thingy and unevaluated functions
23:45:56 <b_jonas> I might not ever use this, it just seems weird that you allow *some* functions that are sometimes evaluated, but not all of them
23:46:02 <spruit11> Yah, I don't think there's much of a use case.
23:46:13 <b_jonas> user-defined functions that is
23:46:26 <spruit11> Today I changed all builtin operators to throw exceptions because of that.
23:46:35 <b_jonas> oh
23:46:44 <spruit11> I.e., `1/0` now throws an exception.
23:46:54 <b_jonas> how about []/0
23:46:57 <b_jonas> um
23:47:04 <b_jonas> I mean how about {}/0
23:47:09 <spruit11> Exception too.
23:47:11 <b_jonas> or ()/1
23:47:14 <b_jonas> nice
23:47:15 <spruit11> `badargs`
23:47:16 <HackEso> badargs`? No such file or directory
23:47:23 <b_jonas> so no more unevaluated thingies, great
23:47:41 <b_jonas> maybe go the whole way and remove them from [] definitions too
23:48:13 <b_jonas> so like if you have enough args to determine that none of the arms match, it raises an exception
23:48:17 <spruit11> Nono. Stuff can still get stuck. But all primitive combinators throw. And you'll need to be explicit about it if you want to throw yourself.
23:48:34 <b_jonas> you can use [...|->] to be explicit
23:48:40 <spruit11> Right.
23:48:47 <b_jonas> or maybe not?
23:48:49 <b_jonas> I don't know
23:49:49 <spruit11> It's kind-of neat for error reporting if you just get a stuck term. It helps over throwing so it's a bit of a two-edged decision.
23:50:11 <esowiki> [[1CP=1ICL]] https://esolangs.org/w/index.php?diff=77104&oldid=77103 * Tokigun * (+411)
23:50:41 <b_jonas> it leads to stupid infinite loops where you make a type error in the code but it's never detected because it just keeps manipulating everything symbolically
23:50:49 <spruit11> Right.
23:50:57 <spruit11> That too.
23:51:11 <esowiki> [[1CP=1ICL]] M https://esolangs.org/w/index.php?diff=77105&oldid=77104 * SoundOfScripting * (+1428) /* Language specifications */
23:51:38 <b_jonas> so in normal code you have to add [... | _ _ _ -> throw badargs] with the right amount of arguments to every bracket
23:51:43 <b_jonas> to avoid that
23:51:47 <spruit11> Correct.
23:52:09 <spruit11> Oh god, what abonimation did I create?
23:52:11 <spruit11> Halp!
23:52:43 <spruit11> *abomination
23:53:04 <b_jonas> it's an esolang, not an abomination
23:53:25 <spruit11> Still. How does Lisp do it?
23:53:34 <spruit11> This is really weird.
23:54:05 <spruit11> Oh, right. Fixed amount of arguments, pattern match later?
23:54:50 <spruit11> Ah well.
23:55:55 <b_jonas> .oO( and then add mutability and vectors to turn it to a general purpose language core, and then a standard library )
23:56:15 <b_jonas> no, lisp functions are not curried
23:56:19 <spruit11> And I end up with python.
23:56:21 <b_jonas> so they can be vararg
23:56:42 <b_jonas> but if you invoke them with fewer params, it's not a partial invocation that yo ucan invoke
23:56:46 <b_jonas> you're thinking of haskell
23:57:09 <spruit11> I already have unsafe mutation. Thinking about tossing in vectors too.
23:57:32 <b_jonas> spruit11: no, you also need classes and methods and inheritence and data fields for that. for this one, I recommend just multiple dispatch multifunctions instead :-)
23:57:46 <spruit11> 'Just leave it up to the programmer'. That always ends up well.
23:58:03 <b_jonas> leave it to the standard library
23:58:34 <spruit11> The thing is that I rewrite DAGs. So mutation is inherently unsafe.
23:58:57 <b_jonas> yes, that's why you instead add a new mutable datatype
23:59:03 <b_jonas> not mutate anything existing
23:59:20 <b_jonas> like a mutable reference, or a mutable vector, or both
23:59:22 <spruit11> That's no way out?
23:59:28 <b_jonas> why not?
23:59:51 <b_jonas> and possibly also mutable let bindings
←2020-08-28 2020-08-29 2020-08-30→ ↑2020 ↑all