←2018-02-28 2018-03-01 2018-03-02→ ↑2018 ↑all
00:00:01 <wob_jonas> except in songs, which is strange
00:00:42 <\oren\_> of course there is also the question of how much a literary corpus stabilizes the language
00:01:22 <\oren\_> like, do we know whther english language change has slowed down since the rise of literacy?
00:02:14 <\oren\_> french is still wirtten the way frech was spoken a long time ago right?
00:02:48 <\oren\_> so its possible it can't drift beyond a certain distance from the wirtten form
00:03:45 <boily> with modern telecoms and internet, languages are drifting closer together.
00:03:51 <wob_jonas> \oren\: yes, but it's not just drifting randomly, it's a filter layer of systematic simple changes over the written form
00:04:03 <boily> written French is completely different from spoken French.
00:04:23 <wob_jonas> boily: of course it is. spoken french is horrible and hard to understand.
00:04:57 <\oren\_> saint, sain, sains, saints, sein, seins
00:04:59 <wob_jonas> it doesn't have enough clues to be able to tell where the words end or what speakers are even saying
00:05:16 <wob_jonas> write, right, rite, wright
00:06:02 <boily> seau, sceau, sot, saut...
00:06:05 <\oren\_> wr-r merger is over a pretty rare sound though?
00:06:44 <\oren\_> the most common problem I see with english orthography is the ough
00:06:55 <wob_jonas> I just deleted that wisdom entry, but the list is: write, wrong, wrist, wrap, wreck, wrest, wrestle, wriggle, wrinkle, wrath, wraith, wreath, wrangle, wren, wright, wrought, wring, writ, writhe, wry
00:07:07 <wob_jonas> list of words starting with wr
00:07:35 <\oren\_> yeah and most don't have conterparts in r-
00:07:45 <wob_jonas> most? let me see
00:09:08 <\oren\_> rite, rap, rec, rest, right, rot, ring, rye
00:09:36 <\oren\_> 8/20
00:10:48 <\oren\_> kn is rarer though
00:11:31 <\oren\_> i think
00:11:34 <wob_jonas> yes, the ones that have are probably write/right/rite/wright, wrap/rap, wrest/rest, wring/ring, wry/rye, *wrought/rote only if you speak in a Hungarian accent that can't distinguish between the two long o sounds
00:12:05 <wob_jonas> oh right, "rot" if you speak that sort of English accent
00:12:15 <\oren\_> wob_jonas: yeah
00:12:17 <wob_jonas> "rec"... ok
00:12:28 <\oren\_> liek, the rec room
00:13:38 -!- xkapastel has joined.
00:13:59 <wob_jonas> the kn list is: know, knife, knock, knee, knight, knob, knot, knit, knack, knout, knuckle
00:14:38 <wob_jonas> and some of the gn words have homophones too: gnaw, gnash, gnome, gnu, gnat
00:14:44 <\oren\_> knave,
00:15:02 <wob_jonas> wow, why is knave not on my list?
00:15:06 <\oren\_> knelt
00:15:26 <wob_jonas> "knelt" as in the past tense of "kneel"?
00:15:39 <\oren\_> hmm i wonder if kneel is related to knee
00:15:46 <wob_jonas> I assume it does
00:16:54 <wob_jonas> I'll add "knave" to the list now
00:18:54 <\oren\_> hmm, apparently old english also had a "mn" sound that merged into "m"
00:19:54 <wob_jonas> \oren\: really? I assumed it wasn't really much of a sound in old English, it just appears in that one greek loanword and the lazy English don't bother pronouncing it, same as with the six or so ps- words
00:20:54 -!- alercah_ has changed nick to alercah.
00:21:48 <\oren\_> oh, there's also "sw"
00:22:26 <wob_jonas> huh? but isn't sw just pronounced as both consonants one after the other?
00:22:31 <wob_jonas> in words like "swift"
00:22:34 <\oren\_> not in sword
00:23:01 <wob_jonas> oh right, that one stupid word. but that's not for this list, because it's not the initial consonant that's dropped
00:23:07 <\oren\_> right
00:23:22 <wob_jonas> it's just an inconvenient consonant in the middle, that's much less strange to me than dropping the very first sound
00:23:31 <\oren\_> also answer
00:23:39 <\oren\_> ansr
00:24:12 -!- augur has quit (Remote host closed the connection).
00:24:18 <wob_jonas> \oren\: dunno, I can't pronounce "w" properly anyway, so I'm just happy with words where I don't have to pronounce it
00:25:26 <wob_jonas> in Hungarian, so few words have the "w" sound that teachers are in a denial that it even exists, and the spelling doesn't reveal when you're supposed to pronounce one, sort of like in french, only in french it's very common, but in hungarian we only get it in words of greek origin
00:26:35 <wob_jonas> it's so crazy I'm sometimes even wondering if I should start to use a nonstandard spelling for those words
00:27:32 <\oren\_> in english people often try to spell words and spell a different word that sounds similar
00:27:51 <\oren\_> like defiantly versus definitely
00:28:14 <\oren\_> what if that became a fully general trend
00:28:35 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
00:28:44 -!- wob_jonas has joined.
00:28:46 <wob_jonas> it's a class of errors that native speakers commit more frequently
00:29:09 <wob_jonas> since other people are more likely to remember the written form
00:29:16 <wob_jonas> "sign" vs "sine" is an example
00:29:35 <wob_jonas> "know" vs "no" even more so probably
00:29:52 <\oren\_> ye
00:30:10 <wob_jonas> let me look up what was the error of possibly this kind that I recently made
00:32:22 <wob_jonas> I can't find it. damn
00:32:33 <fizzie> Westlake's "Dortmunder" books use "could of" instead of "could have" in dialogue, though I'm pretty sure that's intentional.
00:34:07 <wob_jonas> yes, that's another very common one
00:34:27 -!- sleffy has quit (Ping timeout: 240 seconds).
00:37:47 -!- wob_jonas has quit (Quit: http://www.kiwiirc.com/ - A hand crafted IRC client).
00:39:53 -!- Cale_ has quit (Remote host closed the connection).
00:50:04 -!- LKoen has joined.
01:13:10 -!- LKoen has quit (Remote host closed the connection).
01:14:09 -!- LKoen has joined.
01:20:55 -!- augur has joined.
01:22:54 -!- dingbat has quit (Quit: Connection closed for inactivity).
01:27:56 -!- sprocklem has quit (Ping timeout: 276 seconds).
01:30:39 -!- LKoen has quit (Remote host closed the connection).
01:38:42 -!- augur has quit (Quit: Leaving...).
01:46:43 -!- variable has joined.
01:49:08 <boily> `5 w
01:49:15 <HackEgo> 1/2:qdb//qdb is used like: `quote; `quote regexp; `quote id; `addquote ...; `delquote id; `pastequotes regexp; `pastenquotes [n]; see also quoteformat \ music//The result was a short burst of the most hideous cacophony in G minor. \ astronomy//Astronomy is the study of stars, such as Julia Child and Gordon Ramsay, typically through long-dista
01:49:17 <boily> `n
01:49:17 <HackEgo> 2/2:nce viewing devices. Despite the name, it does not involve the study of the astrointestinal tract. \ lem//Stanisław Lem was a Polish logician who discovered the law of excluded middle. \ fish//Come and dance and love the fish! Mister Disco summoned it.
01:50:10 * boily trout slaps fungot
01:50:11 <fungot> boily: i doubt it would make linguine insecure one just in case... the hd doesn't get warm in mine, meaning i have physical memory? :) taken me all night
01:54:55 -!- LKoen has joined.
01:54:57 -!- LKoen has quit (Remote host closed the connection).
02:23:54 -!- sleffy has joined.
02:29:35 -!- sleffy has quit (Ping timeout: 240 seconds).
02:38:42 -!- boily has quit (Quit: ACROBATIC CHICKEN).
03:04:16 -!- sprocklem has joined.
03:07:03 -!- sleffy has joined.
03:07:20 -!- heroux has quit (Ping timeout: 268 seconds).
03:23:20 -!- xkapastel has quit (Quit: Connection closed for inactivity).
03:37:53 -!- sleffy has quit (Ping timeout: 240 seconds).
03:47:43 -!- sleffy has joined.
04:09:31 -!- variable has changed nick to constant.
04:18:11 -!- augur has joined.
04:25:02 -!- augur has quit (Remote host closed the connection).
04:42:07 -!- moei has quit (Quit: Leaving...).
04:56:34 -!- augur has joined.
05:50:08 -!- LeoLambda has quit (Ping timeout: 268 seconds).
05:56:48 -!- LeoLambda has joined.
06:28:22 -!- augur has quit (Remote host closed the connection).
06:33:00 <esowiki> [[Special:Log/newusers]] create * Peril * New user account
06:39:14 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=54256&oldid=54252 * Peril * (+268) /* Introductions */
06:49:52 <esowiki> [[Brainfuck, but every + is replaced with the bee movie script]] https://esolangs.org/w/index.php?diff=54257&oldid=51207 * Peril * (+520) There are probably way better ways of doing what I did, but I figured it out by myself in under a minute and I thought I ought to add it to the page.
07:03:43 -!- lifthrasiir has quit (Quit: No Ping reply in 180 seconds.).
07:05:08 -!- lifthrasiir has joined.
07:07:08 -!- Vorpal has quit (Ping timeout: 256 seconds).
07:12:57 -!- Vorpal has joined.
07:33:53 -!- mniip has quit (Ping timeout: 240 seconds).
07:40:33 -!- sleffy has quit (Ping timeout: 240 seconds).
07:50:42 -!- erkin has joined.
08:06:23 -!- Hooloovo0 has quit (Ping timeout: 276 seconds).
08:10:47 -!- Hoolootwo has joined.
08:42:33 -!- ais523 has joined.
08:56:33 -!- heroux has joined.
09:12:18 -!- LKoen has joined.
09:12:46 -!- Hoolootwo has changed nick to Hooloovo0.
09:13:46 -!- AnotherTest has joined.
09:17:54 -!- moei has joined.
09:31:13 -!- AnotherTest has quit (Ping timeout: 248 seconds).
09:43:35 -!- erkin has quit (Quit: Ouch! Got SIGIRL, dying...).
09:57:43 -!- Phantom_Hoover has joined.
10:06:05 -!- LKoen has quit (Remote host closed the connection).
11:21:33 -!- ais523 has quit (Ping timeout: 240 seconds).
11:33:23 -!- atslash has joined.
11:35:55 -!- boily has joined.
11:36:33 <int-e> #metar lowi
11:36:37 <int-e> @metar lowi
11:36:38 <lambdabot> LOWI 011120Z 26011KT 9999 BKN080 BKN300 01/M08 Q1003 WS R26 R08/19//94 NOSIG
11:37:16 <int-e> hoilly
11:45:27 <boily> int-ello!
11:45:29 <boily> 01!
11:45:40 <boily> @metar CYUL
11:45:41 <int-e> impressive, isn't it
11:45:41 <lambdabot> CYUL 011100Z 21005KT 5SM BR FEW001 OVC048 01/00 A2992 RMK SF2SC6 SLP133
11:46:17 <int-e> hmm, much more humid
11:49:37 <boily> very humid.
11:49:40 -!- LKoen has joined.
12:25:00 -!- boily has quit (Quit: SPACESHIP CHICKEN).
12:44:28 -!- lldd has joined.
13:37:06 -!- ais523_ has joined.
13:49:53 -!- Sgeo_ has quit (Ping timeout: 240 seconds).
14:07:34 -!- ais523_ has quit (Ping timeout: 260 seconds).
14:20:03 -!- ais523_ has joined.
14:29:01 -!- wob_jonas has joined.
14:29:27 <wob_jonas> my cpu cooling fan is making some ugly noise.
14:29:29 -!- AnotherTest has joined.
14:31:26 <ais523_> if a language aims to be the exact opposite of an esolang, does that make it esoteric in its own right?
14:31:38 <ais523_> context: I'm trying to create a language that exists as the common subset semantically of most popular programming languages (with its own syntax)
14:31:45 <ais523_> and compiles into all of them
14:32:12 <ais523_> the idea being that if you're not sure what language to write a program in, but it's relatively straightforward and imperative and doesn't depend on libraries
14:32:18 <ais523_> you can start in this and then move into a different language later
14:32:23 -!- wob_jonas has quit (Client Quit).
14:32:46 -!- zid has joined.
14:33:03 <zid> I should really get around to writing the befunge compiler I designed
14:33:49 <ais523_> -93 or -98?
14:33:52 <zid> Turn it into a graph, merge sequences of movements around the graph, then do various splits and combines to translate it into a more normal looking program
14:33:58 <ais523_> I think some people have tried for -93
14:34:02 -!- atslash has quit (Quit: This computer has gone to sleep).
14:34:03 <zid> so if you had > x it'd just turn into x
14:34:10 <ais523_> although you pretty much have to ban the p/g commands
14:34:23 <zid> and > x > y just turns into a single 'xy' command, etc
14:34:26 <zid> If you get my drift
14:35:04 <zid> It'd need to be possible to statically determine if any cell was reachable or not so you could form the correct graph, but I don't think there's anything stopping that
14:35:52 <ais523_> well, the main things stopping it are the ability to p over cells to change them into control flow commands
14:36:06 <ais523_> and in befunge-98, things like k can cause problems too
14:36:08 <zid> Might just be able to recompile
14:36:20 <zid> drop into an interp after it happens and JIT it
14:36:22 <ais523_> a Befunge JIT? that'd make some sort of sense
14:36:34 <ais523_> it sounds like the sort of idea that'd likely have been done already, but maybe not?
14:36:41 <zid> I just like the idea of a befunge compiler
14:36:49 <zid> if nobody does anything crazy it can probably get native speeds
14:36:56 <ais523_> right, because the whole intent was to be impossible to compile
14:37:07 <ais523_> would you use the CPU stack as the Befunge value stack?
14:37:20 <zid> maybe, maybe not
14:37:23 <ais523_> (I can't think of a better use for it because you don't have function calls)
14:37:29 <ais523_> but I guess you could just not use it at all
14:37:30 <zid> might just reserve r14 as a base for the stack into a mmap region
14:37:38 <zid> I get to pick the abi afterall
14:37:46 <ais523_> ugh, I hate modern x86_64 encoding
14:37:50 <zid> heh
14:37:52 <ais523_> so many bytes for even simple operations
14:38:09 <zid> befunge doesn't have function calls, from memory, so maybe that could just be rsp
14:38:57 <ais523_> -93 doesn't
14:39:09 <ais523_> for -98, I don't think they're in the core commands but there's probably a fingerprint that does them
14:40:42 <zid> You'd need a SAT solver to do p and g without storing a grid in memory I feel
14:40:52 -!- atslash has joined.
14:41:50 <ais523_> hmm, so basically a Sufficiently Smart Compiler?
14:41:54 <ais523_> the world doesn't have enough of those
14:41:54 <zid> yes!
14:42:05 <zid> So you compile p to some x,y as a mov to some register, and g x,y of the same gets it back, but you have the problem of knowing which g aligns to which p, so you'd ideally want it pre-solved so that it was just slotted
14:42:08 <ais523_> I should work more on SSAPMMN some time
14:42:32 <ais523_> it's meant to be an optimiser for Minsky machines that makes the programs run as fast as programs in more normal languages (ideally even faster)
14:42:39 <zid> If you can't solve it you'd have to have the grid in memory
14:42:48 -!- wob_jonas has joined.
14:44:07 <zid> i.e for something like &&p or &&g
14:44:16 <wob_jonas> ais523: oh, as for that, see https://pts.50.hu/muzcat-mini-latest.tar.gz which is written in such a common subset and compiles to like ten different languages
14:44:18 <ais523_> hmm, this is comparable to the much easier problem for Underload
14:44:18 <zid> (but you could collapse that grid to a hash table or something)
14:44:25 <ais523_> of working out which strings are data and which are code (and which are both!)
14:44:51 <ais523_> wob_jonas: is there a non-tarball link for this sort of thing? or should I just check it later when I'm not at work?
14:44:57 <wob_jonas> ais523: also, https://esolangs.org/wiki/Olvashat%C3%B3 was sort of trying to be like that, only as a common subset of side-effect-free languages
14:44:59 <ais523_> an existing language like this would be useful
14:45:03 -!- Wooble has joined.
14:45:09 <wob_jonas> I don't know a non-tarball link
14:45:30 <zid> There should be something like github-import-gz button to click on the web somewhere
14:45:43 <zid> Wooble: job for you
14:45:49 <wob_jonas> it's a somewhat inefficient gzip decompressor, written as a C preprocessor file where certain preprocessor macros expand to different constructors for different languages,
14:46:00 <wob_jonas> plus there's a post-processing phase to handle the indentation in python
14:46:12 <wob_jonas> there's some docs about how the multi-language part works
14:46:21 <zid> Sounds abhorrant, I love it
14:46:25 <ais523_> wob_jonas: come to think of it, something like that would be helpful for ayacc
14:46:30 <wob_jonas> but it's not completely formalized
14:46:31 <ais523_> which uses a similar technique
14:46:42 <ais523_> ideally we'd have readable output in every language, though
14:46:53 <ais523_> although some languages aren't very suited to imperative code
14:46:58 <zid> The most abuse I did of a compiler this month was to write a script for blender to export 3D models as .c files, then compile them into my project
14:47:02 <zid> which hardly even counts
14:47:03 <wob_jonas> and some constructs that work the same in all languages used, such as the + - * infix arithmetic syntax, aren't hidden behind the preprocessor
14:47:04 <ais523_> it tends to be pretty ugly in Prolog, for example
14:47:19 <wob_jonas> ais523: yeah, that's the problem with prolog
14:47:32 <ais523_> Prolog is really unique
14:47:33 <wob_jonas> that's why Olvasható didn't bother with mutable storage
14:47:35 <zid> when will it support befunge
14:47:39 <ais523_> and Brachylog changed the way I think about pogramming
14:47:40 <wob_jonas> ais523: only portable prolog
14:47:42 <ais523_> *programming
14:48:07 <wob_jonas> if you accept different code for all major prolog dialects, then in half of them you can compile ordinary imperative code with mutable cells
14:48:08 <ais523_> Befunge, OTOH, is normally pretty good for imperative programming except that storing variables is a pain
14:48:15 <wob_jonas> it will still be a bit hard to read, mind you
14:48:28 <ais523_> do you count assert/retract as mutable cells?
14:48:43 <wob_jonas> ais523: assert/retract works, but sort of only for global variables
14:48:56 <ais523_> even then, it seems wrong to compile x += 1; into retract(x, X), X1 is X + 1, asserta(x, X1)
14:49:07 <ais523_> I'd much rather use parameters
14:49:19 <ais523_> kind-of like a state monad
14:49:32 <wob_jonas> it gets ugly if you want to represent local variables and algebraic structures (without loops or aliasing) with mutable cells in them, because then you need to create unique symbols and such things
14:49:49 <wob_jonas> but most prologs have proper mutable cells, even if it's with an interface that isn't very prolog-like
14:50:23 <ais523_> the ones I'm familiar with don't
14:50:26 <wob_jonas> ais523: right, so as of now, Olvasható doesn't have mutable cells (you could add them with the foreign interface)
14:50:38 <wob_jonas> hmm, let me look this up about prologs then
14:50:47 <ais523_> with the language I'm planning, you can have mutable scalars
14:51:15 <ais523_> but aggregates have special rules (e.g. the scopes of all aggregates need to be well-nested, they're start append-only and can be changed to read-only so you can read them)
14:51:23 <ais523_> this means you can handle any common memory management scheme
14:51:24 <wob_jonas> ais523: mutable globals, or mutable stack local variables with recursive functions too?
14:51:34 <wob_jonas> or also mutable heap-allocated variables?
14:51:38 <ais523_> ooh, recursion
14:51:45 <ais523_> perhaps that'd be a useful feature to have
14:51:56 <ais523_> (obviously, in the absence of recursion, there's no distinction between lexicals and globals)
14:52:13 <wob_jonas> you could have just globals of course, like in classical BASIC
14:52:34 <wob_jonas> just globals is, by the way, sort of the easiest model from which to compile to that language I'm trying to make
14:53:07 <ais523_> I think I want lexicals syntactically
14:53:21 <ais523_> but in the absence of recursion you can just compile those to globals in languages with no lexicals, at no real loss of readability
14:54:11 <wob_jonas> ais523: only if you also don't have closures, not even closures that live only as long as their parent stack frame lives and point to the parent stack frame
14:54:25 <ais523_> oh yes, no way a language like this could have closures
14:54:36 <ais523_> the idea is for the output to read the same as the input, just with different syntax
14:54:44 <ais523_> and many languages don't have anything resembling a closure
14:54:53 <ais523_> so you'd have to build one by hand, which would look very different
14:56:50 <wob_jonas> so Sicstus prolog, the proprietary prolog implementation, has mutable cells, but it seems only ones that don't keep values through backtracking: https://sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/ref_002dlte_002dmut.html#ref_002dlte_002dmut . This doesn't sound efficient, but it's enough to compile imperative code with heap allocation i
14:56:50 <wob_jonas> nto it.
14:57:43 <ais523_> keeping values through backtracking would be even weirder
14:58:01 <wob_jonas> SWI prolog has both sorts of mutables, backtracked and non-backtracked ones, but they're globals only, so the non-backtracked ones are just like assert in a disguise: http://www.swi-prolog.org/pldoc/man?section=gvar
14:59:08 <wob_jonas> but there's something I can't find, because one of the prologs had a genuine way to mutate fields in terms, in a way that genuinely breaks every abstraction and invariant of prolog if you abuse it, but at least it's cheap
14:59:31 <wob_jonas> GNU prolog has non-backtrackable global variables http://www.gprolog.org/manual/html_node/gprolog045.html#g-assign%2F2
15:00:33 <wob_jonas> was there a fourth brand of prolog interpreter I forgot, or am I just not looking for the right keywords in the manuals?
15:01:15 <wob_jonas> ais523: weirder only if you think of backtracking the originally intended way. it's not as weird if you're an imperative guy and think of it as just a really strange control construct
15:01:18 <ais523_> I was given a set of manuals for Borland Prolog once, but I've never actually used it
15:01:21 <ais523_> I learned Prolog from them, anyway
15:01:35 <ais523_> but it's weird because it's a compiled language and doesn't support rule-assertion at all
15:01:36 -!- zsoc has joined.
15:01:40 <wob_jonas> plus, being able to store values that survive backtracking lets you use backtracking to the fullest
15:02:18 <wob_jonas> because otherwise it's hard to have information escape from a branch that's eventually backtracked
15:02:28 <ais523_> my current opinion on Prolog is that backtracking is a mistake and other methods of implementing nondeterminism are nearly always preferable
15:02:42 <ais523_> in particular, I dislike cut because its semantics are asymmetrical
15:03:00 <ais523_> x(X) :- X=a, !; X=b, !
15:03:08 <ais523_> cares about which operand to ; is which
15:03:19 <wob_jonas> (while findall lets you get information from each branch if multiple branches succeed)
15:04:04 <wob_jonas> ais523: ok, but they why do you want a prolog in first place? are you using term unification in some useful way? or do you just want to compile more ordinary code to prolog?
15:04:28 <wob_jonas> in Olvasható, I don't use any of the special features of prolog, I'm just compiling a stateful functional language to it
15:05:13 <wob_jonas> where I do use backtracking or unification, it's only because some built-ins require using them as their interface, eg. the numeric comparisons can fail
15:06:21 <wob_jonas> and in your case, when you're compiling code to multiple languages, and at least one of them isn't prolog or whatever that one other prolog-like language is, that can be the right thing to do
15:07:21 <ais523_> wob_jonas: what I really want is a declarative language which lets me specify constraints and solves them
15:07:35 <ais523_> Prolog is closer to this than most languages but still has notable differences from the ideal
15:07:36 <zid> Prolog is like the jokes I make about haskell embodied
15:07:48 <wob_jonas> I guess adding mutable globals to olvasható wouldn't be hard
15:10:55 <wob_jonas> oh, I found it!
15:10:58 <wob_jonas> ais523: http://www.gprolog.org/manual/html_node/gprolog028.html#sec90
15:11:06 <wob_jonas> mutable cells breaking everything in gnu prolog
15:11:26 <ais523_> wow, that's quite the predicate
15:11:41 <wob_jonas> yeah
15:11:44 <ais523_> it's like randomly adding an assignment operator to Haskell and hoping that things don't break :-)
15:13:24 <wob_jonas> oh, and it turns out that once I know what to search for, SWI has it too, with a slightly different syntax:
15:13:35 <wob_jonas> http://www.swi-prolog.org/search?for=setarg
15:15:00 -!- `^_^v has joined.
15:15:06 <ais523_> now I'm wondering what the most semantics-destructive operation in any language is
15:15:15 <ais523_> we have cast-and-dereference in C, and Obj.magic in OCaml
15:15:21 <wob_jonas> and as far as I know, Sicstus doesn't have it
15:15:22 <ais523_> and unsafeCoerce in Haskell
15:15:27 <ais523_> but those seem fairly minor
15:15:39 <wob_jonas> ais523: cast to function pointer and call in C, as far as I'm aware
15:15:47 <ais523_> what operations pretty much completely violate the idea behind a languge?
15:15:50 <ais523_> wob_jonas: OK, that's a pretty good one
15:16:03 <ais523_> even then, C is a fairly low level language
15:16:16 <ais523_> so seeing huge violations like that is less surprising in that context
15:16:21 <wob_jonas> these days you often need some mprotect/mmap magic before you can use it, but still
15:16:31 <wob_jonas> ais523: yes, C wants to let you shoot you in the foot
15:16:46 <wob_jonas> so do some forths
15:17:23 <wob_jonas> and some of these prologs and other high level languages allow you to call into native call, which can often do any sort of abstraction breaking,
15:17:37 <wob_jonas> it's just that sometimes you don't have enough docs to affect the original language safely enough
15:17:38 <wob_jonas> oh right
15:17:51 <wob_jonas> there's a completely different example I was thinking of recently
15:18:04 <wob_jonas> ais523: replacing a much used method in ruby/smalltalk
15:18:47 <wob_jonas> often has undefined effects because you don't know what uses that method and what invariant it requires
15:20:04 <wob_jonas> you can sort of get the same thing, toned down, by defining overloads std functions, or strange overloads to operators or well-known names, and then using template code that expects anything to behave sanely
15:20:07 <zid> ais523_: Remind me at some point to write an x86 program which does a bunch of float computations then ()'s the result and has it magically do something fun
15:20:16 <wob_jonas> the exact requirements are often poorly understood
15:21:19 <wob_jonas> although I'm not sure if this is of the kind you were asking for, because it might not violate "the idea behind the language"
15:21:45 <ais523_> right, Ruby programmers do that way too often
15:22:14 <ais523_> I can see adding methods (although I prefer Rust's way of doing that), but replacing them?
15:22:43 <wob_jonas> in C, a good way to break things in an undebuggable fashion is to call a native function that modifies some callee-saved registers
15:23:22 <wob_jonas> there's something I wanted to ask about the ruby-style dynamic method modifications
15:24:21 <wob_jonas> suppose you have a language like ruby, where most function calls go through a dynamic lookup by name (semantically at least)
15:24:28 -!- augur has joined.
15:24:40 <wob_jonas> but suppose this is a language with multiple implementations, each of which might have different extensions
15:24:41 <zid> That's one of C's best features, you can stick to the language but the environment might not be right and everything can still explode ;)
15:25:54 * ais523_ vaguely considers the idea of compiled 90
15:26:00 <wob_jonas> zid: calling native functions isn't really sticking to the language. you can still break a lot even if you stick to C though, by modifying memory you shouldn't touch through stray pointers or casted pointers or invalid array indexes, or by various other kinds of undefined behavior
15:27:11 <wob_jonas> ais523: oh right, in J too you can have, um, interesting effects if you make an operator that sometimes returns a value of the wrong word class, because the whole parsing is dynamic at runtime
15:27:31 <zid> wob_jonas: That's undefined though, breaking it while doing strictly defined things is more fun
15:28:26 <zid> (beats the typical people I see, doing undefined things that infuriatingly seem to work regardless, until they don't)
15:28:38 <wob_jonas> ais523: oh, and for more breaking constructs, there's also killing threads, great for breaking synchronization code
15:28:56 <ais523_> wob_jonas: huh, I assumed J would be less like Forth than that
15:28:58 <wob_jonas> usually it can cause nice deadlocks
15:35:31 <wob_jonas> so anyway, about what I want to ask in the ruby-like dynamic language
15:35:52 <wob_jonas> there are multiple implementations of the language
15:36:50 <wob_jonas> eventually someone figures out that frobs are a useful thing, and defines a standardized interface for frobs, which consists of two functions, frob (which produces a frob) and unfrob (which consumes a frob) plus a feature flag FROB that people can use to test if this extension is supported
15:37:09 <wob_jonas> (the feature flag could be just the existence of the unfrob function in ruby, that's immaterial)
15:37:25 <wob_jonas> some implementations add the frob extension as a fast builtin implemented in native code
15:38:21 <wob_jonas> you're writing portable code that needs frobs and wants to run on multiple implementations. so what you do is to check if the frob extension is supported, and if it's not, then use your own slower portable implementation
15:38:49 <wob_jonas> you can load the implementation at runtime, since this is a dynamic language, and then set the feature flag, and if another library wants to use frobs, they'll then use your implementation
15:40:40 <wob_jonas> so far that's nice. but how do you generally avoid the unlikely problem when your code loads your own portable frob implementation by first defining the frob function, then doing something else which involves loading another library, then defining the unfrob function and the feature flag, but
15:40:55 <wob_jonas> a later version of that other library decides it wants to use frobs itself, loads an incompatible frob implementation, and you end up with a frob function and an unfrob function that are incompatible with each other because they use different opaque representation for frobs.
15:42:06 <wob_jonas> This is a highly unlikely situation, but I wonder if there's some nice formalized standard convention that tells what you're allowed to do and what you aren't that avoids this problem, but still lets you have different implementations of frob with exactly one loaded so that different higher-level modules can pass frobs to each other.
15:43:42 <wob_jonas> (It gets even worse if a later version of the language chooses to add multithreading.)
15:43:55 <wob_jonas> `ping
15:43:56 <HackEgo> pong
15:44:39 <ais523_> clearly you need some sort of atomic registry of loaded libraries
15:44:50 <ais523_> which allows for multiple implementations of the same API
15:44:54 <ais523_> sort of like Debian alternatives
15:45:06 <wob_jonas> ais523: yes, but the feature flag is already atomic, it's just not atomic together with defining the functions
15:45:27 <wob_jonas> maybe you want to put the functions in a module and load that atomically
15:45:56 <wob_jonas> but even then the code has to be very careful not to assume that your implementation will be the canonical one before it's fully loaded, and not leak any frobs before the module is fully loaded
15:49:03 <wob_jonas> In compiled languages we solve this by having the person who compiles the program required to be someone who understands such issues and sort it out when something blows up.
15:49:40 <ais523_> I think it's wrong for each library to be individually responsible for making sure it doesn't clash with other libraries
15:49:49 <ais523_> that strikes me as the sort of thing that can be done in a centralised way
15:50:13 <wob_jonas> there can certainly be at least a centralized feature registry
15:50:22 <ais523_> alternatively, you could prevent multiple libraries defining the same identifier and have the users of the libraries search through the various frobnication implementations to see if any of them are loaded
15:50:49 <wob_jonas> I'm asking about this because the esolang I'm making is dynamically interpreted, and because I want to have two implementations of an arithmetic extension, a pure one, and a native sped up one.
15:51:34 <wob_jonas> I need the pure one for two reasons: to prove that the core language is powerful enough to define such things as addition of integers,
15:51:44 <wob_jonas> and to prove that the particular interface I choose is the right one for the language.
15:56:22 <wob_jonas> search through the various frobnicatio implementations => I'm not sure how that would work
15:56:48 <wob_jonas> preventing to define the same identifier, in an atomic way, could find the bug, but it wouldn't fix it
15:57:18 <wob_jonas> but that only works if everything in your interface is identifiers
15:58:17 <wob_jonas> yeah, the other kind of conflict comes up much more often in real life, which is when multiple libraries try to access some system resource in incompatible way, and that system resource doesn't already have very standardized locking conventions
15:58:42 <wob_jonas> like when a library in one thread opens a file descriptor, and another library in another thread forks
16:02:15 <wob_jonas> debian alternatives... yeah, that one is nice in theory, until you realize how incompatible some of the alternatives really are with each other
16:03:50 <wob_jonas> oh! and I remember that bug I hunted for hours, when debian alternatives decided that true was an acceptable alternative for X if neither X.org or Xfree86 is installed, and so startx just stopped without a sensible error message
16:04:02 <wob_jonas> (I accidentally uninstalled X.org somehow)
16:04:14 -!- ais523_ has quit (Ping timeout: 260 seconds).
16:08:01 <wob_jonas> On the other hand, I also saw a case when debian wasn't using alternatives, but really should have, and alternatives would have solved the problem properly:
16:08:54 <wob_jonas> namely when debian decided that nc6 conflicted with traditional netcat, where nc6 installs the main executable to the same name in /usr/bin , knows how to handle ipv6, but somehow has a completely different syntax to start listener sockets.
16:09:37 <zid> christ, this was solved on the api level decades ago
16:10:11 <wob_jonas> zid: not decades ago really. when I was young, getaddrinfo didn't exist yet.
16:10:19 <zid> AF_INET gives you 6 or 4 depending on system default, but you can override with AF_INET4 or AF_INET6, and getaddrinfo does all the translations
16:10:41 <wob_jonas> yes, but like I said, getaddrinfo didn't exist back then
16:10:56 <zid> if nc6 supports ipv6, presumably it's using that interface
16:11:13 <zid> why not just.. update nc to use getaddrinfo, add a -4 and a -6 switch to force INET4 and INET6, done
16:11:36 <wob_jonas> yes, only it's an independent reimplementation, and its command line interface is different from the traditional nc, so it won't work for how I'm trying to use it in command line for ipv4
16:12:01 <zid> Sounds silly
16:12:15 <zid> where's that xkcd comic about stanards
16:12:38 <wob_jonas> zid: I think the traditional nc did that later. it's just that some other scripts depend on nc6, and if alternatives are not in use because someone thought it was a drop-in replacement, then you can't have both installed at the same time
16:12:48 <wob_jonas> this was some debian versions ago, I think they're handling all this better now
16:12:53 <zid> ah good
16:12:57 <wob_jonas> these days debian is much better
16:12:58 <zid> debian is slow and silly, for the most part
16:13:16 <zid> I once had an issue where it was shipping a 12 year old version of a library
16:13:17 <wob_jonas> they even solved the directory structure problems with installing x86_32 and x86_64 libraries at the same time
16:13:38 <wob_jonas> so you can have any 32-bit program installed if it depends on libraries that 32-bit debian provides
16:13:50 <zid> Yea multiarch installs isn't a hard problem
16:14:00 <zid> you just split all library and binary paths into two and you're done
16:14:03 <wob_jonas> they solved it at just the right time when finally everyone else has upgraded their programs to 64-bit so you no longer need 32-bit libraries on linux
16:14:18 <zid> I only have whatever wine needs
16:14:28 <wob_jonas> it is a hard problem in practice. you need to update ten thousand separate makefiles to use the right paths.
16:14:37 <zid> Not if you did it right
16:14:42 <zid> --prefix etc
16:15:01 <wob_jonas> yes, but the debian maintainers maintain like ten thousand packages, and many of those haven't done it right
16:15:03 <zid> anything using autotools will work automatically as long as your original system was set up to give autotools decent info, etc
16:15:36 -!- Wooble has left ("WeeChat 1.4").
16:15:38 <zid> There's always the sandbox hack, too
16:15:57 <zid> I say hack, it isn't really much of one
16:16:28 <wob_jonas> zid: you mean the one used on windows and android where every "application" can only access its own files? great way to ruin unix tools philosophy. now instead of a system with tools, you have a hundred systems with applications.
16:16:36 <zid> If you're packaging binaries you only need the final directory structure to be right, you don't /need/ the build scripts to be correct, it can be enough to just throw in a symlink from lib to lib32 when you build it, then package it, done
16:16:40 <zid> No
16:17:04 <wob_jonas> zid: that only works if the programs don't need to know the lib paths at runtime
16:17:09 <zid> gentoo for example, builds everything inside a chroot, so it can create proper filesystem diffs etc
16:17:16 <zid> wob_jonas: ld.so covers that
16:17:22 <zid> they shouldn't need to know them at runtime
16:17:25 <wob_jonas> but they do, because programs have arch-specific files other than linked in ELF shared libraries in lib
16:17:35 <wob_jonas> they have all sorts of files they need to access at runtime, and some of them are arch-dependent
16:17:39 <zid> The fraction that do something THAT pants on head retarded must be near 0
16:18:04 <wob_jonas> it's not retarded. do you want programs to embed every data in their binary like some defensive stuff do?
16:18:13 <zid> no, I want them to not include it
16:18:18 <zid> and not require it, which almost all software doesn't
16:18:19 <wob_jonas> this is why we have all that directory standards, so that programs can access files
16:18:30 <zid> i don't have to tell insmod where /usr/lib/kernel is
16:18:36 <zid> every time I run it
16:18:44 <zid> because the kernel knows its own version number
16:18:50 <zid> ld.so knows where your /usr/lib32/ i s
16:18:51 <wob_jonas> meh, insmod isn't an ordinary case
16:19:17 <wob_jonas> it's a rather strange special case
16:19:21 <zid> The only thing an elf 'needs' is the name of ld.so, which relies on your system binutils knowing it, which requires debian to know it
16:19:31 <zid> which it does, so everything is fine
16:20:56 <zid> I can't even think how you'd construct a binary that failed to work with a funnily named /usr/lib unless you hardcoded it to fail
16:21:27 <zid> You'd need to ship it with a custom INTERP field in the elf section, with a custom .so loader, which failed to check your library path
16:23:18 <zid> which leaves you only with the original problem: hardcoded makefiles targetting /usr/lib, which a sandbox or symlink on the build-host fixes
16:43:36 -!- lldd has quit (Quit: Leaving).
16:52:10 -!- idris-bot has joined.
17:06:23 -!- erkin has joined.
17:20:21 -!- lldd has joined.
17:22:43 <int-e> `"
17:22:44 <HackEgo> 90) <oklopol> you move on the tape and shit \ 835) <kmc> i was going to say that the complexity of a demo grows exponentially with size, but it's not so much "exponential" as "faster than any computable function"
17:30:29 <Phantom_Hoover> wait surely it's exactly as fast as any computable function
17:30:41 <wob_jonas> ``` wisdom # will return fewer bad wisdoms now, I hope
17:30:42 <HackEgo> a test word//another test word
17:30:43 <wob_jonas> `wisdom
17:30:45 <HackEgo> lord//The way of the Lord is not just.
17:30:45 <wob_jonas> `wisdom
17:30:46 <HackEgo> `edit//`edit <file> gives you a url, then in your browser: (1) Press Sync (unless making a new file) (2) Make your changes (3) Press Save (4) Paste the command line at the top into the channel.
17:30:47 <wob_jonas> `wisdom
17:30:48 <HackEgo> loudly//Did you mean: loudly
17:30:50 <wob_jonas> `wisdom
17:30:51 <wob_jonas> `recipe
17:30:51 <HackEgo> algol//ALGOL stands for A Programming Language
17:30:52 <HackEgo> 10 Servings \ \ 2/3 c Butter or margarine \ 2 tb Olive oil \ 4 c Brown sugar \ 1 ts Salt \ 1/2 ts Cinnamon \ 1/2 ts Baking soda \ \ Either lean spices, serve spicy baking sheets pale over crumbs. \ \ 5. Add tomato paste, cumin and salt. Mash sugar and sugar seeds. Sprinkle with salt, seasoned, \ reserved for a few minutes on the heat
17:31:30 <wob_jonas> spicy baking sheets
17:31:46 <wob_jonas> `? roborosewater
17:31:47 <HackEgo> RoboRosewater is generating random Magic: the Gathering cards, see https://mobile.twitter.com/roborosewater
17:39:02 -!- laerling has joined.
17:39:44 <int-e> `quote arrow's
17:39:45 <HackEgo> No output.
17:39:50 <int-e> `grwp arrow's
17:39:56 <HackEgo> No output.
17:41:48 <int-e> . o O ( Kenneth Arrow is famous for his ill-fated attempt at becomeing dictator for life through an application of pure logic. )
17:43:59 <wob_jonas> `doag bin/welcöme
17:44:08 <HackEgo> 5350:2015-05-04 <b_jonäs> ` echo $\'#!/bin/sh\\nwelcome "$@" | sed s/o/\xc3\xb6/g\' > bin/welc\xc3\xb6me && chmod a+x bin/welc\xc3\xb6me
17:44:19 <wob_jonas> `doag bin/wellcome
17:44:27 <HackEgo> 5349:2015-05-04 <b_jonäs> ` echo $\'#!/bin/sh\\nwelcome "$@" | sed s/l/ll/g\' > bin/wellcome && chmod a+x bin/wellcome \ 5348:2015-05-04 <b_jonäs> ` echo $\'#!/bin/sh\\nwelcome "$@" | sed s/l/ll/g\' > bin/wellcome && chmod a+x bin/vellcome
17:44:42 <wob_jonas> by the way, I looked at doag's source code. it has a blacklist of commits that are so botched up they'd trigger too much.
17:45:03 <wob_jonas> I'll have to take that into account if I write scripts that inspect the HackEgo hg repo
17:45:04 <int-e> `? nitia
17:45:06 <HackEgo> nitia is the inventor of all things. The BBC invented her.
17:45:35 <wob_jonas> ``` rm -v bin/wellcome welcöme
17:45:37 <HackEgo> rm: cannot remove 'welc\303\266me': No such file or directory \ removed 'bin/wellcome'
17:45:45 <wob_jonas> ``` rm -v bin/welcöme
17:45:47 <HackEgo> removed 'bin/welc\303\266me'
17:48:51 <wob_jonas> ``` rm -v bin/en2sv
17:48:53 <HackEgo> removed 'bin/en2sv'
17:56:19 -!- mniip has joined.
17:56:36 -!- LKoen has quit (Remote host closed the connection).
18:03:42 -!- zid has left.
18:10:52 -!- LKoen has joined.
18:17:43 -!- augur has quit (Remote host closed the connection).
18:24:08 -!- erkin has quit (Quit: Ouch! Got SIGIRL, dying...).
18:46:10 -!- laerling has quit (Ping timeout: 240 seconds).
19:15:45 <wob_jonas> `8-ball Is it too early to start procrastinating?
19:15:46 <HackEgo> Without a doubt.
19:18:17 <int-e> excellent
19:18:51 <int-e> `8-ball should I leave important decisions to HackEgo?
19:18:52 <HackEgo> Concentrate and ask again.
19:19:11 <int-e> `8-ball *ahem* Should I leave important decisions to HackEgo?
19:19:13 <HackEgo> Outlook good.
19:19:45 <int-e> Nono, Outlook bad, unless you don't want to read email!
19:20:52 -!- sprocklem has quit (Ping timeout: 240 seconds).
19:21:05 <esowiki> [[IOTA-C0]] N https://esolangs.org/w/index.php?oldid=54258 * Enoua5 * (+34539) Created page with "{{infobox proglang |name=IOTA-C0 |paradigms=Imperative |author=[[User:Enoua5]] |majorimpl=[https://github.com/enoua5/IOTA-C0 IOTA-C0 Suite] |year=[[:Category:2018|2018]] |mems..."
19:21:37 <int-e> `8-ball Is there any point in asking again?
19:21:38 <HackEgo> You may rely on it.
19:22:15 <int-e> @google "proactive procrastination"
19:22:16 <lambdabot> https://www.urbandictionary.com/define.php?term=proactive%20procrastination
19:22:32 <esowiki> [[Language list]] M https://esolangs.org/w/index.php?diff=54259&oldid=54150 * Enoua5 * (+14)
19:25:14 <esowiki> [[User:Enoua5]] M https://esolangs.org/w/index.php?diff=54260&oldid=54241 * Enoua5 * (+61) /* Languages created */
19:47:49 <wob_jonas> garlic-scented throwing stars lol
19:50:07 <fizzie> CUSTOMERS ARE ADVISED NOT TO TRAVEL WEST OF SALISBURY OR WEST OF BOURNEMOUTH.
19:50:23 <fizzie> Those areas are lost. Do not go there.
19:50:44 <fizzie> (Source: https://www.southwesternrailway.com/plan-my-journey/live-departures-and-arrivals )
20:18:16 -!- Remavas has joined.
20:18:23 <wob_jonas> `? europe
20:18:24 <HackEgo> Europe is the national anthem of the Republic of Kosovo.
20:20:09 <wob_jonas> `? europa
20:20:11 <HackEgo> europa? ¯\(°​_o)/¯
20:21:40 <wob_jonas> All those worlds are yours except Europa. Attempt no landing there.
20:28:24 <Remavas> why?
20:29:13 <wob_jonas> Remavas: dunno, the mysterious powerful alien overlords' sentinel didn't give a reason. we think it has to do with an experiment in breeding life on an ice planet.
20:35:18 <esowiki> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=54261&oldid=54256 * ZM * (+236) /* Introductions */
20:53:31 -!- lldd has quit (Quit: Leaving).
20:53:34 <wob_jonas> `? worlds
20:53:36 <HackEgo> worlds? ¯\(°​_o)/¯
20:53:37 <wob_jonas> `? except
20:53:39 <HackEgo> except? ¯\(°​_o)/¯
20:57:11 -!- enoua5 has joined.
20:57:29 -!- ais523 has joined.
21:04:09 -!- enoua5 has quit (Quit: Page closed).
21:10:38 <wob_jonas> `? mole
21:10:39 <HackEgo> Mole is an SI unit for measuring large numbers of burrowing teeth.
21:30:57 -!- MDude has quit (Ping timeout: 240 seconds).
22:07:10 -!- xkapastel has joined.
22:10:14 <ais523> this whole Trustico incident is hilarious
22:10:24 <ais523> it's one of the most amazing screwups I've ever seen
22:11:08 -!- laerling has joined.
22:11:29 -!- laerling_ has joined.
22:13:23 -!- laerling has quit (Client Quit).
22:34:05 -!- Remavas has quit (Quit: Leaving).
22:45:32 -!- sprocklem has joined.
22:50:26 -!- `^_^v has quit (Quit: This computer has gone to sleep).
23:03:37 -!- Sgeo has joined.
23:04:39 -!- sleffy has joined.
23:06:51 <fizzie> ais523: Have you been "ais513" at some point, and/or do you have a sibling ten units smaller? Random clicking around in YouTube led me to the SGDQ2016 TASBot video, which is described as: "This is a speedrun of TASBot plays Super Mario Bros 3 (RomHack) by ais513, total_, mitchflowerpower from Summer Games Done Quick 2016."
23:15:31 -!- laerling_ has quit (Quit: Leaving).
23:15:49 -!- LKoen has quit (Remote host closed the connection).
23:29:30 -!- constant has quit (Quit: /dev/null is full).
23:31:48 -!- atslash has quit (Quit: This computer has gone to sleep).
23:42:50 -!- atslash has joined.
23:43:54 <ais523> fizzie: that title is incorrect in multiple respects
23:44:13 <ais523> one of which is my nick, another is that it isn't a romhack (it's the actual unmodified game)
23:45:26 <ais523> anyway, I need to go to be
23:45:27 <ais523> *bed
23:45:29 -!- ais523 has quit (Quit: bedtime).
23:47:05 -!- atslash has quit (Ping timeout: 240 seconds).
23:56:02 -!- AnotherTest has quit (Ping timeout: 276 seconds).
←2018-02-28 2018-03-01 2018-03-02→ ↑2018 ↑all