< 1739750780 368898 :yewscion_!~yewscion@2601:547:1400:1ab0:b3d9:e178:7811:ae04 JOIN #esolangs yewscion :Claire Rodriguez < 1739751094 201279 :GregorR!~GregorR@71.19.155.102 QUIT :Quit: Ping timeout (120 seconds) < 1739751107 936297 :GregorR!~GregorR@71.19.155.102 JOIN #esolangs GregorR :Gregor Richards < 1739751447 911873 :GregorR!~GregorR@71.19.155.102 QUIT :Ping timeout: 252 seconds > 1739751899 411471 PRIVMSG #esolangs :14[[07User talk:I am islptng14]]4 M10 02https://esolangs.org/w/index.php?diff=152100&oldid=152099 5* 03Aadenboy 5* (-1138) 10just use the circle character < 1739751996 31673 :GregorR!~GregorR@71.19.155.102 JOIN #esolangs GregorR :Gregor Richards > 1739756129 930410 PRIVMSG #esolangs :14[[07User talk:I am islptng14]]4 10 02https://esolangs.org/w/index.php?diff=152101&oldid=152100 5* 03I am islptng 5* (+1138) 10I prefer using my version because some computer can't display that correctly > 1739756218 366735 PRIVMSG #esolangs :14[[07User talk:I am islptng14]]4 10 02https://esolangs.org/w/index.php?diff=152102&oldid=152101 5* 03I am islptng 5* (+2) 10Avoid < 1739756983 542196 :amby!~ambylastn@ward-15-b2-v4wan-167229-cust809.vm18.cable.virginm.net QUIT :Quit: so long suckers! i rev up my motorcylce and create a huge cloud of smoke. when the cloud dissipates im lying completely dead on the pavement < 1739758253 995918 :craigo!~craigo@user/craigo QUIT :Ping timeout: 268 seconds < 1739758655 64497 :molson!~molson@2605-4A80-2101-99D0-EBD1-74EC-CFBE-4CD2-dynamic.midco.net JOIN #esolangs molson :realname < 1739758821 417417 :molson_!~molson@2605-4A80-2101-99D0-F41D-C13C-3E44-1CC-dynamic.midco.net QUIT :Ping timeout: 276 seconds > 1739760687 198124 PRIVMSG #esolangs :14[[07UserEdited14]]4 10 02https://esolangs.org/w/index.php?diff=152103&oldid=151955 5* 03Hotcrystal0 5* (+320) 10 > 1739760822 291192 PRIVMSG #esolangs :14[[07UserEdited14]]4 10 02https://esolangs.org/w/index.php?diff=152104&oldid=152103 5* 03Hotcrystal0 5* (+82) 10 > 1739763706 370914 PRIVMSG #esolangs :14[[07SCOOP14]]4 10 02https://esolangs.org/w/index.php?diff=152105&oldid=152088 5* 03Anthonykozar 5* (+23) 10/* History and Design Goals */ Adding design goal "fairly easy to parse". < 1739763957 724576 :ais523!~ais523@user/ais523 QUIT :Quit: quit > 1739768571 561687 PRIVMSG #esolangs :14[[07Kolakoski sequence14]]4 10 02https://esolangs.org/w/index.php?diff=152106&oldid=152074 5* 03PkmnQ 5* (+259) 10/* Post correspondence problem */ < 1739773874 478245 :zzo38!~zzo38@host-24-207-52-143.public.eastlink.ca PRIVMSG #esolangs :One idea I thought of is "base zero" numbers that are stored the power of zero and the multiple. This way, you can make sizeof(x)/sizeof(*x) if x is an array even if sizeof(*x)==0 < 1739777738 506533 :lisbeths!uid135845@id-135845.lymington.irccloud.com JOIN #esolangs lisbeths :lisbeths < 1739777861 577691 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Thinking about Jones-optimal partial evaluators and what it would look like to synthesize a language which makes them easier to write. < 1739778026 707279 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :It seems like most existing research has been analytic. Given e.g. Prolog, how few clauses are required for partial evaluation? But I think we should be synthetic: what modifications to Prolog would reduce the number of clauses? < 1739778064 978350 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :more than negatieve one? < 1739778069 317526 :ursa-major!114efe6c39@2a03:6000:1812:100::11f3 QUIT :Remote host closed the connection < 1739778070 489967 :dcreager!a9e780c4d1@2a03:6000:1812:100::136b QUIT :Remote host closed the connection < 1739778070 642617 :ManDeJan!3da94070ba@user/mandejan QUIT :Remote host closed the connection < 1739778089 963930 :ManDeJan!3da94070ba@user/mandejan JOIN #esolangs ManDeJan :ManDeJan < 1739778109 616129 :dcreager!a9e780c4d1@2a03:6000:1812:100::136b JOIN #esolangs dcreager :Douglas Creager < 1739778124 684461 :ursa-major!114efe6c39@2a03:6000:1812:100::11f3 JOIN #esolangs ursa-major :Bailey Bjornstad < 1739778163 614877 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: Prolog's known to require three clauses and I don't think we can do better due to the underlying Horn-clause formalism. < 1739778210 69423 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i would look at other languages that fit the category of database < 1739778226 981664 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :We don't really care about the number of clauses. We care about the number of different possible forms. Ideally a nice partial-evaluation language only has maybe two or three possible forms. < 1739778243 206547 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :you mean the number of combinations of clauses? < 1739778267 162409 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure, although partial evaluation is a single predicate, so we're only counting a single predicate's clauses. < 1739778283 575089 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :https://www.metalevel.at/acomip/ is a decent introduction to how it's done for Prolog. < 1739778297 719685 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ok well prolog is designed specifically for problems like taking a dtabase of things and finding all the combinations of those things < 1739778453 354061 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :It can be useful to think of Prolog as computing a reasonably-programmable search for Herbrand terms over some first-order Horn clauses. (A Herbrand term is like an S-expression, basically.) < 1739778507 447952 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :And we can express Horn clauses as Herbrand terms. This is what enables metacircular evaluators to be small and efficient: code is (efficiently represented as) data. < 1739778511 525407 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :thats likely true < 1739778535 547759 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i would look into very small versions of prolog < 1739778547 50643 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :such as minikanren or some kind of worlds-smallest-prolog < 1739778670 718197 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The linked article covers pure Prolog. For miniKanren, there's the wrinkle that the (fresh) form needs to introduce names, and those names have to be bound somehow; one option might be alphaKanren, which is miniKanren with nominal logic. < 1739778753 885619 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :ACTION crossposting to #minikanren < 1739778894 503475 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :do you know about binary lambda calculus? < 1739778921 783226 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :https://github.com/iambrj/metaKanren I have found a new avenue of research and guess I will be spending time with this. < 1739778927 662992 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. Around here, you can call it BLC. < 1739778960 381232 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :esolangs: What is BLC? Who has popularized it? What are some uses of BLC? > 1739779023 913929 PRIVMSG #esolangs :korvo: BLC (Binary Lambda Calculus) is a self-interpreting programming language that uses binary digits to represent lambda calculus expressions. It was popularized by its creator, who has not been explicitly named in the provided text. BLC is used for exploring the fundamental concepts of lambda calculus and for creating small, efficient programs. It's... > 1739779023 915404 PRIVMSG #esolangs :also a stepping stone for understanding esoteric programming languages like LAST. < 1739779100 9919 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I prefer to make it a habit of calling it binary lambda calculus. is it not possible to implement minikanren as a very small binary lambda calculus prefix? and would that not be the smallest prolog style database? < 1739779103 659092 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Y'know, that's 1/3 points. Not a complete failure. < 1739779118 562317 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :esolangs: Why did John Tromp design BLC? > 1739779128 889318 PRIVMSG #esolangs :korvo: John Tromp designed BLC (Basic Language for Computation) to explore the intersection of programming languages and computer architecture. He aimed to create a language that was both simple and powerful, allowing for efficient computation on low-level hardware. BLC's focus on direct hardware manipulation and its minimalist syntax were intended to... > 1739779128 890563 PRIVMSG #esolangs :push the boundaries of what a programming language could achieve. < 1739779153 352523 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: I guess that we should take a couple steps back. Are you familiar with Futamura's projections? < 1739779173 362359 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :no I am not very literate about code in the scholarly sense < 1739779189 872874 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :fungot: u'i as you can see, the bots know nothing! nothing! < 1739779190 130200 :fungot!~fungot@2a01:4b00:82bb:1341::a PRIVMSG #esolangs :korvo: is it allowed to shadow a syntactic keyword evaluated by quasiquote, and not < 1739779250 490807 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: Okay, so. Let's imagine a funky kind of program. Futamura imagined three specific ways to use it, called his "projections". It's very meta but very useful. The study of Futamura's line of research is called *partial evaluation*. < 1739779281 426639 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I think I understand what it means to partially evaluate something < 1739779313 134019 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :These funky programs are called *specializers*. They take two arguments, which we'll think of as an ordinary user-level program and some input for that program, and return another ordinary user-level program with that input hardcoded into it. < 1739779325 292651 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Okay, great. So that ^^^ should sound familiar? < 1739779339 433578 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah that is a kind of a macro expansion < 1739779364 779336 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :you are interleaving two syntax trees together in a specific way before evaluation < 1739779389 162549 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. Suppose that we have a function f and input x, and we have their source code, which I'll write [f] and [x]. Then all we're doing is taking [f]([x]) and asking for [f(x)]. < 1739779407 922868 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes thats what you just described < 1739779440 123336 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Actually, let's be a little more flexible. Let's imagine that f takes two arguments. We're going to turn [f] and [x] into [y: f(x, y)]. We're only going to specialize the first argument. < 1739779448 517475 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes taht makes sense < 1739779470 543928 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :When we do that, the result is called the *residual program*. That's why sometimes the literature calls this *residualization*. < 1739779485 119168 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :in combinators [any_f] [any_x] -> [any_f(any_x)] is just concat < 1739779506 594484 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :you are saying [y: f(x,y)] is the residual program correct? < 1739779538 393624 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yeah. Like, the residue will take an argument when it's run on a machine. < 1739779570 648385 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I dont follow but sure we can refer to those interleaved programs as residual programs and we can refer to the itnerleaving of programs as reisdualization < 1739779577 742884 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yep! Concatenative languages tend to have a very nice partial-evaluation scheme based on monoids, which is just a generalized way of doing concatenation. < 1739779597 310253 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :but shouldnt all syntax trees be representable as concatenative programs? < 1739779680 274343 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, let's look at a useful example. Futamura noticed that if f is an interpreter, say [interp], and x is some source code for an interpreted program, then we get [y: interp(x, y)]. The specializer compiled the interpreter onto the input program! < 1739779719 882262 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes f can be an interpreter for a language < 1739779761 221008 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :So that's the first Futamura projection. There's no need to write a compiler. Just write an interpreter and a specializer. < 1739779792 545065 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I understand that collloquially as "there is no need to write compilers just functions and secializers" < 1739779800 531044 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what is a sepcializer < 1739779817 385333 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Also, there's a magic rule for partial evaluation. The rule is: if the specializer is good, then the residues will be good too. The rule for the first projection: if the interpreter and specializer are good, then the compiler's outputs will be good too. < 1739779833 84671 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :define good < 1739779848 382330 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :as in sound and valid < 1739779870 63283 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, it tends to hold for *any* chosen metric. < 1739779930 63298 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what do you mean by it and what do you mean by metric < 1739779947 687041 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Oh, yeah. If the interpreter and specializer are both correct, then so are the compiler's outputs. But of course the correctness proof does different things from different perspectives; here, the outputs are only correct in that they faithfully do what the user requested. < 1739780089 969666 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: I guess I should point out that a specializer can be complicated. It could be very simple, yes. But it could also put a lot of effort into optimizing the residue. The traditional example is specializing e.g. Python `lambda x, y: y ** x` with x=3 to `lambda y: x * x * x`. < 1739780118 240312 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Er, sorry, `lambda y: y * y * y`. It's late here. < 1739780127 667706 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ok so this si about proving a function or compiler is perfect and proving that something called a "specializer" is perfect, and then we can prove that the residue is perfect therefore < 1739780168 482099 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :since the residue is perfect we can know that the output of evaluating the residue will be perfect < 1739780187 372699 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :It's more about not writing a compiler. Like, for the past few years, I've been writing interpreters in a Python-like language, and a toolchain automatically transforms them into JIT compilers. I will hopefully never have to write a single JIT by hand ever again. < 1739780207 220971 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :sure we can call them functions_that_are_like_compilers for long < 1739780249 394516 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The terms *interpreter* and *compiler* are standard here. Another standard term is *compiler compiler*, which is what it says on the tin: feed it a description of a compiler toolchain, and it will generate the actual compiler for you. < 1739780267 487428 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I still need to know what a specializer is < 1739780319 32959 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Restating: A specializer is an ordinary user-level program. It takes two arguments, as source code, and applies one to the other. We'll say s is a specializer and [s] is its source code. < 1739780351 370847 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :s([f], [x]) = [y: f(x, y)]. When f is an interpreter, that's the first projection. < 1739780351 457714 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ah okay so we could say specializer [ f ] [ x] => [ y: f(x) ] correct? < 1739780376 979830 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ok now I understand < 1739780386 999596 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :let me reread what you wrote now knowing this < 1739780432 849623 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. But we need that variable s. Because Futamura then asked what happens if we do s([s], [[f]]) = [y: s([f], y)]. (Okay, I'll wait for you to catch up.) < 1739780555 994618 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so what do we call these neo-compilers taht do not require compilation but can do the same thing < 1739780563 646395 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I think calling them interpreters is confusing < 1739780590 545246 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Those residues are just called compilers. They aren't special. < 1739780604 540858 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :oh so the output of the specializer is the compiler < 1739780611 978520 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so what is f < 1739780614 509623 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Since they aren't written by hand, they might not be very readable. The toolchain that I use involves writing out massive tables of unreadable C code. < 1739780617 296750 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :just some function in the input code? < 1739780639 76838 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I am very comfortable with mssive tables of unreadabel c code < 1739780642 578558 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :f is an interpreter, usually. It can technically be any sort of data processor; in one case, f was a raytracer. < 1739780681 814704 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :okay so the output of a specializer is a compiler-like system called a residue that maybe superior to a compiler. and f is an interpreter to some other language < 1739780688 358062 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and x is an argument to that interpreter < 1739780716 101390 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :So! This construction, s([s], [[f]]), is Futamura's second projection. It behaves like a compiler compiler: its residues take programs [y] as source code and emit [z: f(y, z)] residues, so its residues are compilers. < 1739780746 884791 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Right, one of the big lessons is that a good specializer has all of the guts of a good compiler. < 1739780775 311476 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes it is a specializer specializer < 1739780784 541898 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The magic rule for the second projection: if s and f are any good, then the final residues, which are basically compiled executables, will be good too. < 1739780801 339323 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :sure < 1739780820 858463 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :It can be! That's the third projection: s([s], [[s]]) = [y: s([s], y)]. It makes compiler-compiler compilers. < 1739780823 370939 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :its turtles all the way down we can verify that lots of nestedt hings are good < 1739780851 123938 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :okay yes we can nest specializer infinitely and if the specializer is good and the interpreter is good then we know the output of the residue will be good < 1739780872 324171 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :this is useful for proof checking systems < 1739780877 454382 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :And Glück's 2009 theorem shows that iterating this doesn't add any capabilities. Iteration *does* let us incrementally rebuild one specializer with another, and the fact that there are three projections explains why a compiler bootstrap needs three stages. < 1739780926 407246 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i see so spcialization has discovered something about how compilation MUST works that compilers have already been forced to face < 1739780934 178890 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :This also explains why a good compiler tastes like multiple languages. It has to taste like its target, like its host, and like its IR. < 1739780948 483826 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes this makes sense < 1739780962 769171 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Because a compiler made from a specializer would also, by Glück's theorem, have pieces of the target specializer, host specializer, and IR specializer mixed up inside. < 1739780967 62522 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it must have AT LEAST 3 stages to translate one language to another with the middle stage being an intermediate representation < 1739780995 497893 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :But also, it doesn't have to have more than three. Any extra stages could be broken up into their own mini-compilers. < 1739780996 761461 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :even my mmcr macro program could be said to have 3 stages < 1739781030 395915 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I was struggling to remove one of the stages now I am thinking that might not be logical to do < 1739781044 781976 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :here is antoer way to say that < 1739781052 479616 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the first stage of a compiler is a representation of teh soruce code < 1739781060 706820 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the second stage is an intermediate layer of processing that soruce code < 1739781064 496541 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :If your IR is somehow trivial, then you could avoid having a middle stage. But it means that you wouldn't really be able to do any optimizations. < 1739781067 801188 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the third stage is a representation of the output code < 1739781084 39135 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we want to do optimizations < 1739781090 287362 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :at some stage < 1739781093 205717 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or to be able to do taem < 1739781098 891886 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :before teh final residue is evaluated < 1739781149 388248 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yep, exactly. < 1739781164 174341 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so where are you going with this? < 1739781284 445867 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, as a practical matter, I build relatively fast interpreters from relatively little source code. The first projection turns the interpreter into native code, and that native code includes a JIT which includes a specializer. < 1739781363 685898 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The first-projection toolchain that I use is hand-written. It took about 2 PhDs/year to write. It's an open problem: can Futamura's projections be done automatically without a lot of manual effort? < 1739781460 979031 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what do you mean by native code < 1739781519 868672 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Like, s can emit native code. Machine code. Code for a target architecture. I just introduced everything for the special case where s runs itself directly. < 1739781577 767019 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Obviously the coolest parts of this are when we do s(s,s). < 1739781645 492269 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Another practical way of looking at this is via the alternate-history talk, "The Birth & Death of JavaScript". It's a comedy talk from a decade ago; https://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascript is a recording. I was in the audience! < 1739781647 321614 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :okay so you have a specializer that generates a binary that specializes the source code into a kind of a jit < 1739781666 943267 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what about the second projectioon < 1739781670 580721 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :This talk's very close to predicting the actual future; the technology we got isn't called METAL, but WebAssembly. < 1739781708 303130 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The second projection is like what happens when you build GCC or LLVM. You get to choose which architecture you're targeting; if it's not your host, then you get what's called a *cross compiler*. < 1739781719 291904 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Because you're compiling "a-cross" architectures, I guess? < 1739781728 300493 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ah so in the second projection the JIT compiles the code into native code < 1739781743 32166 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what about the third projection? < 1739781776 703319 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I don't think I can show you any real-world examples of third projections. There are only some academic projects that, technically, generate working code. < 1739781808 52379 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ah so for now we are stuck using just the first and second projection in industry code until the academic projects figure out how to build the third < 1739781809 781890 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :is that right? < 1739781862 948335 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :More or less. In practice, the situation's much worse than that; the toolchain I use is called RPython, the flagship interpreter that comes with it is called PyPy, and although it's the fastest implementation of Python, less than 2% of the community uses it. < 1739781887 740399 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :(Some folks might argue that ZipPy is faster. Fine; nobody uses that either.) < 1739781893 545924 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :okay so does this discussion have to do with blc or does it have to do with what you were saying about prolog arguments < 1739781954 549016 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, there are very short specializers in Prolog, and there are also specializers that can (again, technically, if you wait for a few minutes) generate working third projections. So, what could we change about Prolog to make short self-applicable specializers easier to write? < 1739781971 295205 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and you would like to make the smallest specializers possible correct? < 1739782034 171084 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I'm lazy and I don't like writing code. I'd prefer a smaller language in order to have a smaller specializer that does less work. < 1739782062 672290 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :But I'm not golfing. Also, I'm not sure what BLC has to do with any of this either; I'm not sure why I brought it up, sorry. < 1739782068 549494 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :okay so first of all each of the three projection specializers could be made out of modules made out of smaller specializers < 1739782077 705500 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :breaking them down into modules can help make your code simpler < 1739782090 671440 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :second of all I believe that technology like blc can reduce the size of these specialziers < 1739782102 667127 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and I believe technology like fastlisp can help reduce the size < 1739782105 235752 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Oh. Then I guess I've not really explained this well at all, sorry. < 1739782135 577689 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Like, yes, if we just write s, then the projections are compositions of s. It turns out that writing s is hard! < 1739782160 995699 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we want to make writing s easy and we want s to be small < 1739782166 35827 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :And BLC is merely an encoding. It doesn't magically make things simpler. The actual target of the specializer is the underlying abstract syntax, LC in this case. < 1739782275 964685 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :are all there projections able to be written with the same s? < 1739782306 306409 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :In a framework I'm still defining, I think that I will have types [X -> Y] which are programs that take X inputs and return Y outputs, and a specializer is fundamentally something with signature [X -> Y] -> [X -> Y]. So, like, an identity function could be a specializer. < 1739782311 504315 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :But it's not a good specializer. < 1739782325 498765 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I dont know type theory < 1739782329 223659 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or category theaory < 1739782354 721681 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I'm just saying that a specializer shouldn't change what types a program accepts or emits. < 1739782379 633603 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :of course < 1739782395 794507 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :can all three projections be written with teh same s? < 1739782407 774789 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :in otherwords can s^3 give us what we want < 1739782501 881892 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yes. But how efficient are the residues? < 1739782522 694691 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we want a different s for all three projections if we want to have an optimizer < 1739782551 942356 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Not necessarily. A good s, that always optimizes its arguments, might be able to project itself. < 1739782574 596833 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :but until we know that we may be stuck developing s_1 s_2 and s_3 separately < 1739782585 288520 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and currently we only have developed s_1 and s_2 < 1739782731 345794 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Look at what we already outlined so far. If you trace the definition of the third projection, you'll see that it passes [s] to s at runtime. This means that we need to put an entire copy of [s] into every residue! < 1739782765 581567 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so then s has to be small. < 1739782774 512751 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The only way to avoid this is if s can understand its own structure and remove the parts of [s] that it knows won't be needed. It has to do this before it knows what [y] is, too. < 1739782775 917652 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or rather the residue that represents s has to be small < 1739782889 638675 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :s should produce s < 1739782894 471752 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :similarly to how gcc compiles gcc < 1739782896 857591 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :s should generate s < 1739782910 588338 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. Partial-evaluation folks defined the concept of *Jones-optimality* to deal with this. We say s is Jones-optimal when it doesn't leave behind any part of [s]. It does this by doing something stronger: it removes all overhead of interpreting [s], [f], or anything else at runtime. < 1739782930 959739 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :So it's okay if s is not small as long as it's Jones-optimal. < 1739782952 97407 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ok so we need s to be EITHER jones-optimal or small < 1739782959 57930 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :for now it ie easier to target a small s < 1739782974 894573 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what does building a small s_1 and s_2 entail < 1739783038 958948 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what are the parts that a small s_1 and s_2 composed of? a small webasm like jit and some specialized code weaved into taht jit? < 1739783055 912055 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :They don't emit good code. Note that [s], [f], and all the other quoted programs are assumed to be in a single language. So, what if a specializer were just an interpreter for that single language? < 1739783074 509791 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :This is how practical second projections work, too. They assume that everything can be stored as some sort of bytecode somewhere. < 1739783101 660339 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so do we prefer for s to be for a single language or do we prefer s to be for any language < 1739783122 719019 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Like, RPython works by generating a JIT compiler which is generic over Python bytecode, more or less. At runtime, the compiler traces execution of that bytecode, and the bytecode is stashed as a big table in the residues. < 1739783154 821168 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :is that what we want or do we want s to be language agnostic? < 1739783171 113646 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :We're gonna keep saying that s is single-language. It takes programs written in some language L, it emits programs in L, and it's written in L. The question is whether L is Prolog, miniKanren, etc. < 1739783195 401473 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ok so we desire for so to be language specific or thats what we choose to do at the moment < 1739783203 582209 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we must write a different s_1 and s_2 for every language < 1739783239 117815 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Consider wanting to compile from frontend language X instead, or to machine M. Just write a little interpreter of X in L, or a compiler of L to M in L, and then use s on those. < 1739783298 674562 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I think you mean taht we want to compile from X to M using L, and then we want to feed M into s < 1739783301 395138 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :is that correct? < 1739783338 596510 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :No, I'm considering them as two different operations. You'd use different compositions of s, too. < 1739783373 789529 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :could you rephrase the consideration < 1739783376 20251 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Like, suppose L is RPython, and suppose X is Brainfuck. Just write a little interpreter of X=Brainfuck in L=RPython: https://github.com/rpypkgs/rpypkgs/blob/main/bf/bf.py < 1739783459 532432 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :waht is m < 1739783462 890860 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :in this example < 1739783476 937375 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :There isn't an M in that example. < 1739783508 975045 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what is the residue of applying L to x called < 1739783564 424675 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :[m : L(x)] < 1739783568 389977 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Once we write a good s in (Turing-complete) L, then we can absorb any other language X into L with an interpreter written in L. That interpreter also has to be good, but it only has to have insights about X, not about L. < 1739783602 201927 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so L is our intermediate language or intermediate representation correct? < 1739783605 176615 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :In the above link, bf.py knows a lot about X=Brainfuck, including algebraic rewrites and idioms, but it doesn't know anything about optimizing L=RPython. < 1739783642 113905 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :L is our implementation language. s might have some other intermediate representation that it never exposes. < 1739783673 371875 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :okay so allow me to compose my own model < 1739783683 83131 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we have a universal S_1 and a univerasl S_2 < 1739783714 838530 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :s_1 takes an intermediate language IL and some source code S and it composes [R: IL(x)] < 1739783718 1212 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :s_2 does the same thing < 1739783743 220587 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :IL includes the idea of a runtime or a tiny JIT < 1739783763 579262 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :this is the most optimal way I can currently imagine composing the tools youve descriebd < 1739783777 154931 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and also have the model in my head be known valid and sound < 1739783827 650093 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. Part of the deep insight is that there's no real difference between "intermediate" and "source" here; there's only the intuition that one is < 1739783832 940097 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :*that one is more readable than the other. < 1739783851 749758 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well the reason why I want IL is so that I dont have to write multiple versions of S < 1739783868 497630 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I have an additional s called my_language_->_il < 1739783872 388834 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Okay, let me be more blunt: Why is Prolog not an IL? < 1739783881 250695 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :any language can be an IL < 1739783893 208449 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :So what do you mean by "universal"? < 1739783917 263127 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I dont < 1739783920 543187 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :...Sorry, that was too blunt. I'm guessing that your "universal" is my "Turing-complete"? It's certainly an important qualifier. < 1739783926 825032 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I am willing to make any langauge my IL if I see evidence that ist he right thing to do < 1739783940 426665 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I dont know what universal will mean until I explore the whole universe I guess < 1739783954 298616 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :some variation on prolog coudl be a good IL but I think really big versions of prolog wouldn't do < 1739783986 210087 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Ah, okay. Here we go. So what makes a good IL? I think that that's a great discussion topic regardless of the whole meta/Futamura perspective. < 1739784006 552918 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we cah imagine a human_readable_il also HRIL < 1739784011 147133 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and HRIL->IL < 1739784025 325662 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :this is more or less what llvm is < 1739784040 603624 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :IL itself should be optimal and resource efficient < 1739784103 991118 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I'm gonna insist that good ILs are human-readable. Here are some examples: GIMPLE (GCC), LLVM IR, GHC Core, libfirm, QBE. < 1739784131 979270 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :okay so heres where we differ < 1739784140 46323 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :tehre are langauges that are much more human readable than LLVM IR < 1739784152 802788 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we have a scale between very human readable at 100% and not very human readable at 0% < 1739784154 262662 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Whether an expression in an IL is optimal is usually not cheap to decide. Have you heard of superoptimization? < 1739784163 199133 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :noI have not < 1739784199 562797 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Basically, an optimizer is a superoptimizer when its outputs are always optimal. The way this is done is by searching all of the possible outputs, and it's very expensive. < 1739784220 749276 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah thats why prolog makes a good optimizer on a classical computer < 1739784235 210396 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :but I propose to you that hte optimizer should be written in IL < 1739784243 936625 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so lets break this apart into three stages < 1739784250 70568 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :you have IL_Performant < 1739784250 614817 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :This might be quite interesting to you, since we can use size for our metric, and thus superoptimize for the smallest programs. < 1739784255 371455 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and IL_middle < 1739784258 633529 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and IL_human_readable < 1739784282 129446 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :as the size of programs approaches their minimum size performance will go down < 1739784290 825667 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :once you get past a certain barrier < 1739784311 286224 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :an IL_performant should not desire to be read by the human. this is a high level machine language < 1739784324 896983 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :an il_middle is kind of like an assembler for IL_performant much like llvm ir < 1739784343 157722 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then IL_human_readable is any human langauge like c or rust or prolog or c# < 1739784347 853070 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Okay, I'm gonna propose that there isn't an objective human-readable scale. My first exhibit is Perl. My second exhibit is that you probably think "my cat is blue" or "mi gato es azul" is more readable than {lo mlatu pe mi cu blanu}, so really it's a popularity contest. < 1739784351 106464 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so IL_human_readable is x < 1739784379 47124 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :part of my specialization includes trying to undestand how human readable code is so I ahve alot tto say on the matter < 1739784392 659689 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :there should be a further level benath llvm_ir < 1739784403 67240 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :taht is specifically for a machine and not for a human < 1739784412 778630 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :native? < 1739784417 193095 :int-e!~noone@int-e.eu PRIVMSG #esolangs :Just to add a data point, LLVM has a binary IL format too and that's not directly human readable. (But it can be converted to the text format.) < 1739784425 608511 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :indeed < 1739784436 945575 :int-e!~noone@int-e.eu PRIVMSG #esolangs :(I'm not following the discussion.) < 1739784438 931224 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :because sometimes we dont want native machien code sometimes we want a high level machine code < 1739784459 353178 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or a machien code for a high level optimal virtual machine < 1739784510 654056 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I don't consider those sorts of isomorphisms to add to the nuance. Either they are genuine equivalences, like WASM and WAT, in which case they probably are counter-examples to whatever nuanced differance was being drawn; or they aren't, like LLVM IR, in which case they don't do what we expect of encodings. < 1739784551 25501 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :int-e: We're discussing what makes IR good. I've taken the Pirsig position that "good" is ultimately "what you like" rather than objective criteria. < 1739784575 56985 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I am saying virtual machines like LLVM and like WASM and like microsoft CLR and like JVM all have their own high level machine code which is nto native code but is native to that vm < 1739784586 206635 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and taht sits one layer below an intermediate representation < 1739784603 440919 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :because an intermediate representation has to be parsed an this parsing time can interfere with performant programs < 1739784608 953459 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. That's for cross-architecture portability. Another good example is GNU Lightning. < 1739784629 539179 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah so we have our source code X which could be in any langauge < 1739784647 496809 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then we have a specializer that interleaves x with IR < 1739784650 10955 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Nah, code loading isn't that slow. Python's VM supports cached bytecode loading but many setups will pay a repeated parsing and compiling penalty of like 1ms/module. < 1739784657 35854 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then we have a specializer that interleaves IR with a high level virtual machine code < 1739784667 320392 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then we have a specializer that interleiaves high level virtual amchien code with native code < 1739784731 680118 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yep, you're seeing it now. Once we have a good specializer, why shouldn't we JIT? < 1739784745 295753 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we should JIT that is part of the specializer < 1739784752 870932 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :unless we are specializing to native code in which case we might not need a jit < 1739784757 863301 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :but we might wana a jit < 1739784772 574927 :int-e!~noone@int-e.eu PRIVMSG #esolangs :korvo: Yeah I agree that it's subjective... and on top of that, context dependent (i.e. the same person may have different preferences depending on what they're trying to accomplish) < 1739784793 52192 :int-e!~noone@int-e.eu PRIVMSG #esolangs :This is not specific to IRs at all. < 1739784817 195372 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so lets get our terminology straight < 1739784819 726244 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :a specializer is s < 1739784824 313643 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :source code is x < 1739784828 121269 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :int-e: Exactly! The top context is that I want to build self-applicable partial evaluators. So I'm looking at the classic results for languages like Prolog and imagining synthetic changes that might make them easier to specialize. < 1739784828 897274 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :itermediate langauge is IL < 1739784841 811143 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :a low level intermediate langauge is machine_IL or MIL < 1739784865 698584 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we have an s for every x whos residue is an IL < 1739784875 452537 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we have an s for every IL whos residue is an MIL < 1739784885 239670 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we have a s for every MIL whose residue is some specified native code < 1739784917 791568 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :x -> IL -> MIL -> native < 1739784934 634012 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. GCC, at least in the olden days, was a good example of this; the frontends communicated in e.g. GIMPLE to the core, which also uses GIMPLE internally, but the machine-specific backends use machine- and kernel-specific information. < 1739784957 726223 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so the first -> we can call A1 < 1739784962 983468 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the second -> we can call a2 < 1739784970 780778 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the thhird -> we can call a3 < 1739785012 162958 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :[MIL: s(MIL,Native)] < 1739785027 806541 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :[IL: s(IL, MIL)] < 1739785125 974233 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we can invent a new language falled foople < 1739785144 454365 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :first we pick or write an itermediate langauge and we write an s that foople -> IL < 1739785172 701260 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then we choose or write an s that IL-> some MIL < 1739785185 652679 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then we choose or write an MIL that MIL-> some native code < 1739785189 660492 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :that is the hierarchy afaik < 1739785228 703495 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :do we agree or do you feel differently < 1739785258 608712 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, I don't really do hierarchies. I also historically haven't found it useful to have multiple ILs. < 1739785307 21113 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I do think that specific techniques like nanopass are fine, producing dozens of ILs, when the nanopass framework ensures that everything is type-safe and optimized away. < 1739785363 625738 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :But, having written a nanopass framework, I also don't think it's worth the effort for a specializer. The beauty of the specializer is that it can be driven by a choice of a single language L which happens to have good tools for manipulating L. < 1739785420 934925 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :people will attempt to write mutliple ILs < 1739785435 501894 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and so there will be multiple ILs to choose from some better than others < 1739785451 294046 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Oh, no, they'll write new Fooples. < 1739785466 28828 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well tehy will write new Xs < 1739785469 644757 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :foople is a specific x < 1739785490 948702 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :there arlready are multiple ILs to choose from < 1739785496 347068 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :denying that these exist is illogical < 1739785498 76459 :int-e!~noone@int-e.eu PRIVMSG #esolangs :. o O ( https://xkcd.com/927/ ) < 1739785512 419155 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :mroeover there are already multiple MILs written and denying they exist is illogical < 1739785569 449269 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :. o O ( https://ro-che.info/ccc/20 ) < 1739785570 702038 :int-e!~noone@int-e.eu PRIVMSG #esolangs :the "all existing attempts to do $X suck, we need a new approach" thought is very appealing, but unless you have some actual insight into the domain that the previous attempts lack, it almost certainly won't work < 1739785614 782008 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :saying "there are no IL's that are bad" is kind of a no true scottsman argument < 1739785621 282278 :int-e!~noone@int-e.eu PRIVMSG #esolangs :OTOH what you often can do is something that fits your own use case better than the existing things. < 1739785626 623043 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it is more accurate to say "bad ILs dont matter and might as well not exist" < 1739785629 522833 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Whether a language is IL or not, in terms of whether people will write languages alongside it, isn't predictive. Paraphrasing a classic joke, "do you think JavaScript knew it'd end up as a compiler target?" < 1739785640 686700 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :any language can be used as an IL < 1739785651 124978 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Oh! All ILs I know of are bad. < 1739785660 383772 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :IL is just x used in a different way < 1739785676 529284 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :IL is making x a compiler target < 1739785676 742873 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yes! Any language can be used as an IL, so we might as well use L, the host language of specialiser s, as our IL. < 1739785689 176200 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :what is L in this instance? < 1739785700 31992 :int-e!~noone@int-e.eu PRIVMSG #esolangs :There's that one Stroustrup quote that I agree with... There are two kinds of programming languages, those that everybody complains about and those that nobody uses. < 1739785704 644664 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :L is what s takes as input, emits as output, and is written in. < 1739785727 267605 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so what is s in this instance? < 1739785734 659809 :int-e!~noone@int-e.eu PRIVMSG #esolangs :I imagine that's just as true for intermediate languages. < 1739785741 717778 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :int-e: In the Pacific Northwest, we say "X sucks, use X." For example, "Nix sucks, use Nix." < 1739785768 795328 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: s is just a specializer that can be applied to itself to make second and third projections. < 1739785779 777447 :int-e!~noone@int-e.eu PRIVMSG #esolangs :I've never been in enough dependency pain to actually use Nix. < 1739785790 886722 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :thats kind of fishy to replace IL with an L to s < 1739785801 206828 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it implies a perfect L and a perfect s < 1739785807 158204 :int-e!~noone@int-e.eu PRIVMSG #esolangs :(Nice tangent.) < 1739785816 222366 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :use nonguix < 1739785816 533267 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Nix gives me a sort of abstractive radius. Like, I could maintain one or two RPython codebases by hand, but Nix lets me maintain an entire collection of like twenty codebases. < 1739785859 833051 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: Oh! So, this is why "universal" or "Turing-complete" matter so much. Any computation you can write down can be found in L, for *any choice* of L. < 1739785883 931069 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah I have to think about this for a while < 1739785902 694592 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :L might not have arbitrary data structures, but it can have arbitrary effects as if it had those data structures. It can produce any I/O pattern you want, except for the uncomputable ones. < 1739785905 714996 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I have to move from my model of thinking of x->IL->MIL->native over to some model that includes only S and L < 1739785925 96077 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the differnce is that x->IL->mil-> native systems exist today and you can use them and build them < 1739785935 38917 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :where as S and L machines seem more theoretical unless I can know more info about S and L < 1739785971 605899 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Your model is fine, BTW. It's the same detail as with GCC's triple of build, host, target, which is also used by Gentoo and Nix and other cross-compile-aware ports trees. It's the model needed to understand Glück 2009. < 1739786000 845113 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :It's just not what I'm currently interested in tonight. But I'm happy to bridge the knowledge gap because I think this is such a cool corner of computer science. < 1739786001 18038 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it seems to me that each of thes arrows is a function < 1739786011 823030 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :one we can call x->IL or a1 < 1739786016 116418 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :one we can call IL->mil or a2 < 1739786021 857556 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :one we can call mil->native or a3 < 1739786038 114562 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and it seems to be that all of those can be executed by a function compiled to native or compiled to MIL < 1739786046 496222 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and I think that is what you are talking about when you talk about s and l < 1739786083 587711 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the thing is there has to be at least two of them < 1739786089 180654 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :because sometimes we cant chose to run s natively < 1739786099 866725 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :other times our only choice is to run s on the native machine < 1739786112 906030 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. That's what e.g. WASM folks do with their runtimes. There's the WASM specializers running in WASM, and then there's also a browser or WasmTime or whatever. < 1739786167 862597 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I dont know how to notate a specializer written in MIL that takes x and produces the residue of [y: IL(x)] < 1739786205 514524 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :No worries. I get what you're saying. The formal notation for this is called "tombstone diagrams" or "T-diagrams"; they look like T-pieces from Tetris. < 1739786218 505730 :int-e!~noone@int-e.eu PRIVMSG #esolangs :Are we trying to reinvent the concept of a program transformation? < 1739786231 850807 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :thats what korvo has opened a discussion with me on it seems < 1739786241 190243 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :They're lovely to draw on a board, but they don't fit in IRC. WP's current page on them is not bad: https://en.wikipedia.org/wiki/Tombstone_diagram < 1739786247 379059 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so it seems to me wasm is already almost as performant as machine code < 1739786255 831767 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so I think for MOST programs we can forget about native code < 1739786259 535202 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and just focuse on MIL < 1739786265 621904 :int-e!~noone@int-e.eu PRIVMSG #esolangs :I find it impossible to tell whether this is a concrete task that has become unrecognizable through premature abstraction... or whether the point is to abstract. < 1739786290 258700 :tromp!~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl JOIN #esolangs * :Textual User < 1739786291 828932 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the idea that abstraction isnt useful is a meme < 1739786293 858736 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :untrue < 1739786295 198129 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :int-e: They're coming to understand how a specializer could be associated with three different languages. I'm focused on a more concrete engineering task using only one language. < 1739786340 821172 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :In the background I've been reading this thesis about metaKanren, a miniKanren that supports metacircular access. < 1739786370 759781 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I think you need to study how performant the literal smallest virutal machines are even able to be < 1739786383 121251 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :because the literal smalllest virtual machines arent very performant < 1739786415 432358 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I think IL and x are the same < 1739786420 32099 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we can come up with a new model < 1739786424 403366 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we pick a langauge x < 1739786441 421014 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and we specialize x-> MIL(x) < 1739786456 215270 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and then some low level people worry about specializing MIL->native < 1739786462 16195 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and this is a very very simple model < 1739786463 663598 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :So yes, VMs can have performace characteristics as a matter of engineering, but I think it's wrong to try to pick on VM choice here. We're talking languages, not VMs, right? < 1739786501 303510 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well both lenses are useful < 1739786510 906126 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :in one lense it is useful to think about it abstractly without specifying vm < 1739786518 990276 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :in another lense it is more useful to talk about specific vms < 1739786530 384344 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and in yet another lense it is more useful to talk about specific and already existing vms < 1739786552 726695 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :In practice, there's no interesting specialization happening at that MIL->native layer; it's all instruction selection. (I wrote two such instruction-selection tables for GPU drivers. It's boring.) < 1739786595 99927 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah the virtual machien for a machine readable intermediate language is almost as fast as native as seen in wasm < 1739786602 53329 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we dont have to worry about MIL->native < 1739786608 572448 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :for most applications < 1739786639 924570 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :all we must do is pick a langauge x < 1739786667 144565 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and write a specializer that takes x and -> to MIL < 1739786674 373268 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and we can write that specializer in x < 1739786738 71495 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, no. The winning strategy turned out to take a higher-level IL that only has a few operations, but gives those operations either parameters or polymorphism (i.e. dynamic dispatch), and then to JIT that IL based on concrete values of those parameters at runtime. < 1739786788 63930 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :By "a few", ISTR that Self's VM has eight operations. That number has ballooned, if you look at Strongtalk and Java VMs, but the original idea was that the JIT only has a few possible choices to consider at any possible time. < 1739786817 104263 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :please give these components acronyms < 1739786850 658405 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Remember -- hours ago!? sheesh I should sleep soon -- that I said that we want "a few" to be like two or three. Each time we have a branch, we want the exponent controlling the size of our search to be small. < 1739786879 968997 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I think part of what you are saying is that it is proven that a language can be an IL and still be as performant as an MIL < 1739786881 758797 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :is that true? < 1739786928 750558 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :There aren't any acronyms worth remembering. I'm just saying that the speed comes from a specific lineage of languages that were designed to be JIT'd: Self, Strongtalk, Java, C♯, Dart. < 1739787019 810470 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Another VM worth mentioning (again?) is GNU Lightning, which was also designed to be JIT'd. The fastest Brainfuck interpreter on the wiki targets GNU Lightning. < 1739787089 272976 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I think your answer is meant to be yes, an intermediate langauge that is humanr eadable that is evolved from a lineage of languages designed to be JIT'd can be as performant as a MIL < 1739787103 393724 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. More generally, performance isn't a property of languages! < 1739787112 915038 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and so if that is true then we can remove MIL from our vocabulary and we can refer to IL from now on as being a language from a specific lineage of languages that were desigend to be jited < 1739787149 69469 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so first we must pick an IL that is evolved from languages designed to be jitted < 1739787165 765408 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then for every x we must write in some language a specializer from x to IL < 1739787202 736745 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. Although I'm looking right now at languages that can be designed for partial evaluation. Some JITs do partial evaluation, but not the famous lineage with the amazing JVM. < 1739787225 785947 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well picking something like java or c# is going to complicated for your research < 1739787228 148724 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I'm only half-sarcastic. Look up Azul's products, particularly Zulu, if you want to see how fast JVMs can get. < 1739787236 101291 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we would obviously like a very simple language that is designed to be jited < 1739787247 758914 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or rather that is designed for jit < 1739787259 453207 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, yeah. Speed isn't everything! Particularly when we've only barely talked about what makes this whole process fast or slow. < 1739787285 617921 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well first of all some engineers strongly prefer the word performance over speed < 1739787298 108911 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so you may run into this issue in irc altohugh I do not mind if you use the word speed < 1739787310 200561 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i will use the word performance < 1739787322 968675 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I don't care about memory usage. Most practical partial evaluation uses lots of memory; PyPy takes like 12GiB of RAM to translate. < 1739787346 840605 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :But sure, I don't mind talking about generalized resource usage. < 1739787349 985529 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :second of all when I as saying earlier that the smallest languages are not very performant, there are some very small languages that are performant < 1739787363 744343 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it is only when you get very close to the smallest of languages that you see huge drops in performance < 1739787394 925853 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :you can have a very performant language in under a megabate of native code or IL code < 1739787402 558818 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the isnt the issue < 1739787415 365275 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Oh! Okay. We were talking past each other earlier. < 1739787432 911403 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah so there are three kinds of virtual machines in this lense < 1739787442 482897 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :When I say "small language" I mean a small grammar of a countable (infinite) language. I'm not talking about implementation size. < 1739787444 855470 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :one is designed for the smallest of computers like smart dust and cellular robots for medicine < 1739787456 933452 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :those generally have to have real time computing < 1739787458 616794 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :as a feature < 1739787472 426966 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the second is very small virtual machines that go in smaller applications like the browser tab < 1739787494 925176 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then you have very big industrial virtual machines that often ask for at least a gigbyte of memory and generally are a sever for virtualization in a whole os < 1739787503 815073 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :such as the common language runtime or the jvm < 1739787513 440669 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :a virtualization daemon < 1739787560 517805 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Okay, yeah, by "virtual machine" I was talking more about the abstraction than the implementation. I recognize that a software engineer is going to read "VM" and think "emulator". < 1739787596 624820 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :a baby virtual machine under a megabyte can ask the big server vm to do compute jobs < 1739787604 699974 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and teh server vm can use the graphics card and stuff like this < 1739787609 5686 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: So, I want to re-introduce the entire topic with the other notion of "small": I want a language that, like Prolog, only has a few possible types of clauses that need to be analyzed by a specializer. < 1739787622 460356 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we can talk about the size of the compiled language < 1739787626 284143 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and then we can talk about the size of its grammar < 1739787637 580500 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :a language can have a small grammar like prolog but a huge compiled program that runs it < 1739787650 568494 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or a language can have a very small compiled program that runs it but be extended to a huge grammar < 1739787651 800631 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Something like WebAssembly, though "small" in the size of an emulator which implements it, is quite large in the number of possible instructions that can occur, which means that its specializers need to cover many different possibilities. < 1739787678 808960 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :from what I gather about mathematics what most programmers refer to as exponential growth is often multiplicative growth < 1739787690 830707 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and what most programmers refer to as a syntax is actually called a grammar < 1739787696 824872 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i could be wrong about both of those though < 1739787704 989110 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :This is the sense in which Self is "small"; with only eight possible instructions, any specializer or JIT only has a few possibilities to cover. < 1739787721 491629 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we we can offer some ranges < 1739787738 502477 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :If you're searching a tree, and the number of possibilities at each branch is a constant, then the tree is exponentially large. < 1739787770 915042 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we can talk in terms of bytes, tens of bites, hundreds of bies, and then kilobytes and tens of kilobytes and hundres of kilobytes, and then megabtyes and tens of megabytes and then hundreds of megabtes, and then gigabytes and then tens of gigabytes and then hundreds of gigabytes < 1739787785 684201 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so the commmon language runtime is at least 1 gigabyte in terms of ram < 1739787799 30605 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and I dont know how many megabytes it is in storage but it is likely at least in the hundreds or more < 1739787822 997756 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :whereas we know as langauge people that you could probably get most of the performance of the common language runtime in under a megabyte < 1739787825 38706 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :wouldnt you agree? < 1739787852 348457 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :we would also like to use a language much like prolog with a small useful grammmar < 1739788090 982923 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sorry, I can't find a way to interpret that setup. < 1739788154 29999 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The CLR's size probably doesn't have much to do with having a JIT. I'd guess that they have a lot of i18n. You'd be surprised how large the tables are for basic Unicode support. < 1739788207 444034 :Sgeo!~Sgeo@user/sgeo QUIT :Read error: Connection reset by peer < 1739788399 199017 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Okay, sleep is no longer optional. Peace. > 1739791741 411968 PRIVMSG #esolangs :14[[07UserEdited14]]4 10 02https://esolangs.org/w/index.php?diff=152107&oldid=152104 5* 03PrySigneToFry 5* (+1406) 10 < 1739792242 634059 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu JOIN #esolangs b_jonas :[https://web.libera.chat] wib_jonas > 1739794204 407177 PRIVMSG #esolangs :14[[07User:Gilbert189/Polymorphic quine14]]4 N10 02https://esolangs.org/w/index.php?oldid=152108 5* 03Gilbert189 5* (+11283) 10This has been in the works for quite some time... > 1739794247 956413 PRIVMSG #esolangs :14[[07User:Gilbert18914]]4 10 02https://esolangs.org/w/index.php?diff=152109&oldid=139872 5* 03Gilbert189 5* (+79) 10/* See also */ < 1739797272 9656 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu QUIT :Quit: Client closed < 1739797425 166466 :APic!apic@apic.name PRIVMSG #esolangs :Moin < 1739799143 957080 :amby!~ambylastn@ward-15-b2-v4wan-167229-cust809.vm18.cable.virginm.net JOIN #esolangs amby :realname < 1739800068 882978 :dawids_!~dawids@109.76.207.165 JOIN #esolangs * :realname < 1739800095 217057 :dawids_!~dawids@109.76.207.165 QUIT :Client Quit < 1739800358 964449 :craigo!~craigo@user/craigo JOIN #esolangs craigo :realname > 1739804702 836632 PRIVMSG #esolangs :14[[07User:Anthonykozar/Notes14]]4 N10 02https://esolangs.org/w/index.php?oldid=152110 5* 03Anthonykozar 5* (+271) 10New page for me to keep notes on the wiki < 1739805063 960769 :ais523!~ais523@user/ais523 JOIN #esolangs ais523 :(this is obviously not my real name) < 1739805112 985694 :ais523!~ais523@user/ais523 PRIVMSG #esolangs : One idea I thought of is "base zero" numbers that are stored the power of zero and the multiple. This way, you can make sizeof(x)/sizeof(*x) if x is an array even if sizeof(*x)==0 ← I think you could make that work by giving zero-sized objects an infinitesimal size? < 1739805463 409572 :ais523!~ais523@user/ais523 PRIVMSG #esolangs : It seems like most existing research has been analytic. Given e.g. Prolog, how few clauses are required for partial evaluation? But I think we should be synthetic: what modifications to Prolog would reduce the number of clauses? ← one obvious modification: Prolog represents the bodies of clauses using a free monoid, meaning that you need three cases (identity, generator, and other cases); if you represented them using a list instead you would only < 1739805464 828835 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :need two (empty list, nonempty list); add a map builtin (that doesn't require the creation of an extra clause to use it) and you only need one < 1739805526 915506 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :but this reasoning just makes me think that counting clauses is wrong < 1739805680 243994 :tromp!~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl QUIT :Read error: Connection reset by peer < 1739805934 596054 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :actually I'm not sure the map builtin helps because then you need to implement it within the evaluator < 1739805941 502538 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :but converting clause bodies to lists does help < 1739805998 232803 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :you get something like eval([]) :- []. eval([Goal|Tail]) :- clause(Goal, Body), eval(Body), eval(Tail). < 1739806002 665505 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :err < 1739806005 925677 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :eval([]) :- []. eval([Goal|Tail]) :- clause(Goal, Body), eval(Body), eval(Tail). < 1739806011 192990 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :eval([]) :- []. eval([Goal|Tail]) :- [clause(Goal, Body), eval(Body), eval(Tail)]. < 1739806012 765744 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :there we go < 1739806049 773234 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(and you can desugar [X|Y] as '.'(X,Y), etc., as usual) < 1739806161 574025 :ais523!~ais523@user/ais523 PRIVMSG #esolangs : I'm gonna insist that good ILs are human-readable. ← having thought about this a while myself, I think that this isn't *quite* right, it should be "good ILs can easily/automatically be converted to and from a human-readable form", but you can create an assembly language for them for the purpose < 1739806442 633601 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu JOIN #esolangs b_jonas :[https://web.libera.chat] wib_jonas < 1739806652 943977 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :I think it's neither of those. the compiler should be able to emit tracing information that lets you debug the compiler and verify that the IL is correct. but this tracing information is only needed when you're either debugging the compiler or debugging the machine that executes the IL. when you'll programming in a high-level language normally then < 1739806653 456605 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :you trust the compiler, don't ask for such trace, and the IL that you get in that case alone needn't be translatable to human-readable. < 1739806736 276351 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :This is how machine code works in practice. It's not easy to decompile (transform to human-readable) because the instructions are variable length so you don't know where to start disassembling, there can be unreachable code anywhere, you don't know what type most of the data that it manipulates has. < 1739806782 890526 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :But if you do emit detailed debug information then you can decompile because the debug information tells which parts of the code are executed and what the registers and stack frame stores at any point. < 1739806949 345129 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :Of course this is just theory. In practice the debug information could be incomplete or buggy (which was often the case back around 2000 if you used C++). And the reverse engineer folks are racing compilers close behind with their heuristics so that they can decompile machine code without debug information because this is useful for itsec. > 1739807279 485616 PRIVMSG #esolangs :14[[07User:Anthonykozar/Notes14]]4 10 02https://esolangs.org/w/index.php?diff=152111&oldid=152110 5* 03Anthonykozar 5* (+257) 10Added Bespoke and new sections. < 1739808161 391779 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :wib_jonas: many machine codes do have deterministic ways to find the start of an instruction – I'm not sure whether it's more or less than half < 1739808351 820786 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :ais523: yes, that could help, but that's not enough. you also need to be able to distinguish segments that contain code from other read-only segments, which is already possible on at least some machines, and even then decompiling might not be easy < 1739808434 271295 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :don't most formats for storing executables distinguish between code and other rodata? even if the processor itself doesn't? < 1739808457 266188 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :I don't know < 1739808493 557729 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :besides, the original comment was about ILs and those definitely distinguish, otherwise the compiler can't know what needs to be compiled and what needs to be left untouched < 1739808535 1109 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :that's only if you're compiling the IL rather than interpreting it < 1739808551 44556 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :good point < 1739808552 28327 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :or JIT-compiling < 1739808573 950620 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :a JIT-compiler won't know in advance which parts of the code it will have to compiler < 1739808603 295789 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :this reminds me of an idea I had a while ago: instead of storing separate unwinding tables, work them out at runtime via partially decompiling the running code – the decompiler could be very simple as it only needs to get the unwinding-related information right, and the code could be explicitly generated in a way that made the decompiler work < 1739808606 708927 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :that's how qemu's non-native mode (which few people use) works for x86 < 1739808645 812179 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I think I've used non-native qemu before now, probably to run a program written for a processor architecture unrelated to the one my computer used < 1739808683 376373 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :I'm saying specifically for an x86 guest; for other guests it probably does get used < 1739808740 794834 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :as for that unwinding, even if it finds the stack frames, how would it know what destructors to call while unwinding? < 1739808760 97944 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu PRIVMSG #esolangs :or would this only be unwinding that prints a stack trace for a fatal error? < 1739808827 551362 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :my plan was to mark destructors and the like using NOPs or via the choice of equivalent instructions < 1739808860 931900 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :which is a bit like having separate unwinding tables, but more lightweight < 1739808894 53527 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :it could be something as simple as code ordering, e.g. decompile assuming forward jumps are taken but backward jumps are not taken > 1739809999 711633 PRIVMSG #esolangs :14[[07User:Anthonykozar/Notes14]]4 10 02https://esolangs.org/w/index.php?diff=152112&oldid=152111 5* 03Anthonykozar 5* (+190) 10Adding links to categories to explore < 1739811106 32401 :tromp!~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl JOIN #esolangs * :Textual User < 1739812643 940745 :zzo38!~zzo38@host-24-207-52-143.public.eastlink.ca QUIT :Ping timeout: 268 seconds < 1739812823 643907 :wib_jonas!~wib_jonas@business-37-191-60-209.business.broadband.hu QUIT :Quit: Client closed < 1739814109 6010 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :ais523: I didn't want to pull a thread that they might not understand how to restitch. An IL should admit some sort of nice decompiler, but I thought it was more important to push against the idea that low-level machines are somehow complicated or obfuscated to the point of unreadability. < 1739814257 364899 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :ais523: The point about the monoid is good. For some reason right now it's rhyming with "lazy languages don't have sums, eager languages don't have products", probably because of the ,/2 and ;/2 functors. < 1739814434 864988 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :korvo: right, I wasn't so much trying to interfere in your conversation as to make comments inspired by it < 1739814479 526551 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :ais523: Oh, I completely see where you're coming from. I just have trouble supporting it from the opposite direction. < 1739814514 128253 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :one esolanging problem I'm working on at the moment is currently trying to construct a good IL < 1739814543 150612 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Like, would you believe that COBOL was originally supposed to be a low-code platform? It was supposed to remove the need for debuggers and humans who could step through the machines. < 1739814552 694060 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I pretty much know what I want (e.g. I want it to be stack-based even though the original isn't), just trying to work out the details < 1739814558 747182 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :korvo: SQL, too < 1739814572 136824 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yessss. < 1739814574 628399 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :which may have been slightly more successful at that than COBOL was, but still mostly didn't meet that goal < 1739814652 855330 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :I wonder whether people have stopped making the mistake of assuming that "writing code so that the meaning of every instruction in it is clear to typical speakers of «insert native language here» mean that those speakers will necessarily understand everything the program is doing" yet < 1739814685 14272 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :…and I also wonder whether that mistake is more likely to be made by programmers or non-programmers > 1739814710 598815 PRIVMSG #esolangs :14[[07User talk:Aadenboy14]]4 M10 02https://esolangs.org/w/index.php?diff=152113&oldid=151742 5* 03Aadenboy 5* (+36) 10muahaha. < 1739814763 77438 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :it's fairly obvious to me that learning what "a = b + c" means is not the major trouble of learning how to program, and that writing it as "ADD B TO C GIVING A" will make matters worse in the long term < 1739814785 29450 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :but that doesn't seem to be obvious to everyone < 1739814825 941315 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :(at one point, my day job involved teaching people how to write Java – it really is the case that the meaning of "a = b + c" isn't obvious to everyone and has to be learned, but it really isn't difficult compared to other things that you have to learn to be able to write working programs) < 1739815073 382350 :ais523!~ais523@user/ais523 PRIVMSG #esolangs :…and of course, there are then languages like Prolog where "A = B + C" is a legal command-equivalent but means something different, and that also catches people out > 1739815172 406080 PRIVMSG #esolangs :14[[07User:Aadenboy14]]4 M10 02https://esolangs.org/w/index.php?diff=152114&oldid=151911 5* 03Aadenboy 5* (+668) 10add signature code < 1739816582 684348 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :https://github.com/memesmith0/mcr16_projects < 1739816671 51866 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i have greatly extended the syntax of mcr < 1739816680 130567 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :at the cost that you dont immediately get a working shell out of it < 1739817682 938749 :Sgeo!~Sgeo@user/sgeo JOIN #esolangs Sgeo :realname < 1739817869 408210 :Lord_of_Life!~Lord@user/lord-of-life/x-2819915 QUIT :Ping timeout: 260 seconds < 1739817896 75501 :Lord_of_Life!~Lord@user/lord-of-life/x-2819915 JOIN #esolangs Lord_of_Life :Lord < 1739819342 362960 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Okay, finished reading the late-night scrollback. Something really funny in there. Let X and Y be objects in some category, let [-] be a functor on that category sending objects X to objects of quoted programs [X], and let [[X,Y]] → [[X,Y]] be the type of polymorphic specializers. < 1739819362 401345 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :...Oh, and let [X,Y] be the type of the internal homs X → Y. < 1739819417 636818 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Then this all snaps together for free categories, as lisbeths intuited: an identity arrow serves as a specializer. The downside is that all arrows are equivalent to identity arrows in this setup! < 1739819429 544645 :nitrix!~nitrix@user/meow/nitrix QUIT :Remote host closed the connection < 1739819464 508366 :nitrix!~nitrix@user/meow/nitrix JOIN #esolangs nitrix :ZNC - https://znc.in < 1739819467 591082 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes in this instance when we say that x => IL or IL=> native teh -> refers to a specializer < 1739819486 668463 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :do tehre needs to be a specializer for every IL to every native language < 1739819496 703174 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and tehre needs to be a specializer for every x to every IL < 1739819511 753731 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :So, in some sense, it's not just about finding the smallest branching factor for clauses/sums/tags/etc., but recognizing that the smallest branch factor is 1 in the case of free categories, with a trivialized model. < 1739819513 462496 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and finally there is a specializer from one IL to another < 1739819521 791425 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: No, that's not what I'm talking about. < 1739819572 522447 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I'm saying that, if we synthesize a basic language just for partial evaluation, then the simplest possible construction already works perfectly. It just can't do anything; it's certainly not Turing-complete. < 1739819657 932948 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it seems like what you want is a universal s_1 a universal s_2 and and a universal s_3 and if we are lucky they can all be the same s < 1739819667 245533 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yes, and it's an identity arrow. < 1739819670 62711 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :part of doing that id agreeing upon an IL is it not? < 1739819680 688410 :ais523!~ais523@user/ais523 QUIT :Quit: quit < 1739819795 117746 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: Nah, I'm not really interested in concrete syntax today. Too many errands to take care off. < 1739819834 617651 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :if you dont have time to discuss speializers today we can discuss it another time < 1739819843 313000 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or maybe you mean taht you arent currently willing to commit to an IL just yet < 1739819898 634008 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :No, I mean that concrete syntax is incredibly boring and discussing it is usually not a good use of time. You have to understand: I normally just shove everything into S-expressions or JSON and write code to do my manipulations. I am tired of writing parsers. < 1739819929 663727 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah I am of a similar mindset < 1739819935 844040 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :If you have questions about specializers, then I can answer those. < 1739819969 463391 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well I just dont yet understand how you plan on building an s_1 or an s_2 without comitting to a top 10 list of ILs < 1739819985 451431 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :are you saying s_1 and s_2 dont need an IL? < 1739820051 386423 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :In those terms, I'm talking about *designing* an IL. < 1739820211 877142 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :oh so you arent satisfied with the current ILs available < 1739820216 195987 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and you wnt another one korvo < 1739820230 891907 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or is there another reason why you want a new IL < 1739820263 356243 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Well, yeah, all the available ILs suck. < 1739820330 905960 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :korvo: is there a top 3 that you could recommend to use until a better IL comes along? < 1739820379 960973 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :lisbeths: What are you trying to build? < 1739820387 627668 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :x < 1739820439 443842 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :right now my compiler is fastlisp -> binary lambda calculus 2 < 1739820539 132836 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Write your own IL. Look up "alpha-normal form" and "continuation-passing style", often abbreviated ANF and CPS. < 1739820571 190239 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Continuation-passing is a great tool for compiling to LC. It's also fairly good at compiling out of lambda-heavy languages like Lisps. < 1739820694 340408 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :binary lambda calculus 2 is my IL < 1739820703 493286 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :After reading about that, you could look up strategies for optimizing LC expressions, particularly "interaction nets" and "optimal beta-reduction". You may also find "graph reduction" fascinating, but it's a little more expensive at runtime and usually only used for lazy/non-strict languages like Haskell or Miranda. < 1739820705 377005 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I am not in the business of writing my own ILs < 1739820716 686549 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :You mean that LC is your IL. BLC is an *encoding*. < 1739820748 390019 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :thats right LC is my IL and the universal way to represent lambda calculus is BLC < 1739820772 516060 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :this is because every program in fastlisp is a lambda so it makes sense for LC to be my IL < 1739820781 183937 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :And even then, there are strategies for representing LC terms. BLC uses De Bruijn indices, but there may be more efficient in-memory representations when doing lots of beta-reductions. < 1739820803 371389 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I have been told common lisp is the fstest lambda calculus interpreter < 1739820847 871108 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I do not write ILs but I am curious about your research as you brough it up to me last night and explained it in depth < 1739820864 809753 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it is intriguing to replace compilers with more efficient proof driven systems called s < 1739820866 5112 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :The most notable strategy to look at is Elliott & Kmett's "bound" library https://hackage.haskell.org/package/bound which collects De Bruijn indices in a clever way to avoid having to substitute every index during every binding. < 1739820928 389500 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :If we're thinking of Lisp runtimes as LC interpreters, then the fastest is probably Chez Scheme, followed closely by CHICKEN Scheme and SBCL. Note that SBCL doesn't actually interpret, but it contains a JIT compiler. < 1739821066 70921 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :for now I am using sectorlambda < 1739821078 356927 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it doesnt matter which one i use because its outputs will be the same < 1739821091 821492 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :except for order of evaluation < 1739821118 966229 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Actually, you'll find that many Lisp runtimes *fail* when given large programs. < 1739821142 59746 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well sectorlisp can grwo to like 2gb of memory so I think sectorlambda can probably do the same < 1739821163 899684 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i may roll my own lambda calculus interpreter in posix sh < 1739821177 261527 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :For example, my Cammy language (documented on wiki) started out compiling to OCaml, but I was routinely busting its stack at runtime. Then I switched to Haskell, and then to CHICKEN Scheme, but they weren't fast enough. < 1739821213 360319 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ultimately except for evaluation order it should not matter which interpreter I use for lambda calculus < 1739821220 954949 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I can always switch alter < 1739821223 428936 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :later < 1739821223 720176 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I'm currently running on a OCaml-like machine -- a CAM -- implemented in RPython. The stack is set up to spill to the heap. This is fast enough for my current needs. < 1739821246 658213 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :lambda calculus should be plug and play so if sectorlambda fails me I can just hop to another lambda calculus interpeter < 1739821256 254370 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure, except for I/O. < 1739821269 283305 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Also garbage collection. < 1739821273 110981 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the binary lambda calculus way of output is returning a llinked list of booleans < 1739821283 662324 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the input is in the source < 1739821313 790991 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Yeah, BLC has an I/O convention. But it's not plug-and-play; it requires a bit of setup in the host language. < 1739821337 277200 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes this is why I am currently gonna use sctorlambda to make things easier for myself < 1739821346 589723 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :but i can switch if that one fails me no problem < 1739821515 199611 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I am going to write some code in fastlisp that that is used to orchestrate the compilation of a subset of lambda calculus over to an IL < 1739821519 459239 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and that is how fastlisp will achieve performance < 1739821547 518630 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :I think a reality check is in order. When we say that an LC evaluator is "fast" we mean that it achieves many beta-reductions/second. < 1739821572 565444 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :We don't mean that data structures encoded in LC have good wall-clock performance on today's bit-oriented hardware. < 1739821574 613821 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah fastlisp is meant to be compiletime only for most things < 1739821581 864193 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and some tasks have to be offloaded to haskell < 1739821612 421228 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :c++ doesnt actually run on the hardware c++ only really exists at compiletime < 1739821634 893313 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :machine code generated by a c++ compiler runs on the hardware not c++ itself < 1739821674 693359 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :whereas if you look at DSSP that is a langauge that is alot closer to actually running on the hardware itself < 1739821697 373513 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Sure. So, double-checking, LC is really small. It only has three constructors or so. You don't really need to think much about the IL for it, at least not yet. < 1739821705 311351 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :You can just *do that* right now. < 1739821732 775742 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well see < 1739821738 863873 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :fastlisp is going to write libraries < 1739821748 518164 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and those libraries are going to orchestrate the generation of python code < 1739821757 293086 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and the generation of some language evolved to go into a jit < 1739821806 811421 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :But by committing to such a heavyweight grand plan, you've now required your IL to serialize to disk, which ruins the entire point of doing abstract syntax. < 1739821823 368924 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yeah i mean this is just experimental < 1739821838 853008 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the idea is something like fastlisp could be developed into something nicer < 1739821871 596100 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the primary objective of fastlisps design is to be easy < 1739821885 459749 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :no other metric is as important as easiness in my research < 1739821905 46843 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so i am willing to waste many compute cycles to shave off some difficulty for the programmer < 1739821914 308696 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Ah, okay, yeah. So, this is a common-enough fallacy that we really need a name for it. Closely related is the *Turing Tarpit*, the idea of a universal system where nothing is easy to construct. < 1739821957 837947 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :If all of our engineering problems were nicely reducible to LC in a way that executes fast enough for our needs, then we would have all switched to Lisps in the 1980s. < 1739821972 514538 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Similarly, if Horn clauses were the right answer to everything, then we would have switched to Prologs in the 1990s. < 1739821975 272253 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :thats fine < 1739821986 898374 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :if my language turns out not to be easy then I will change it < 1739821995 127521 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I am not worried about it being fast enough < 1739822010 230699 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :also I am willing for compile times to be upwards of 2 hours < 1739822017 683359 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :and take gigabytes of storage < 1739822042 375001 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :this research has purely to do with what is easy not with what is efficient < 1739822069 265481 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Really! So why not RPython? < 1739822097 961547 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I happen to believe that fastlisp is much easier than rpython but let me take a look at rpython quickly < 1739822113 54223 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Probably because you have this "fast" goal, which I'm seeing primarily as optimizing program size, which is even more important than ease of use. < 1739822134 454924 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :oh no sorry < 1739822136 754670 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :fastlisp is not fast < 1739822139 459573 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :or performant < 1739822142 442852 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :sorry for the confusion < 1739822156 91873 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :No, I remember, "fast" is your living-out-of-a-bag meme. It's about size, right? < 1739822157 344353 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :it is named fastlisp after the fastman meme < 1739822177 415452 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :well everything I name I name it by gluing fast to the beginning of its proper name < 1739822185 669806 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :teh word fast has nothing to do with fastlisp < 1739822192 717511 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :even though performancen does concern me < 1739822199 678660 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I am more concerned with easiness < 1739822225 868329 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I have looked at rpython I think fastlisp is likely an easier language < 1739822290 814394 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Would you write a DIVSPL interpreter in fastlisp, for comparison? I don't expect you to beat mine in terms of performance, but maybe it'll be smaller or easier to read than: https://github.com/rpypkgs/rpypkgs/blob/main/divspl/divspl.py < 1739822316 810489 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :It should read like ordinary Python 3, since I wrote it in Python 3 first and then ported to RPython later. < 1739822340 323108 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so *in* fastlisp no < 1739822348 470105 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :but I could write it in telesial fastlisp < 1739822835 753589 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :fastlisp is broken up into a few categories < 1739822842 561791 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :first of all there is subterranian code which is not in fastlisp < 1739822859 575619 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then there is fastlisp code that directly generates subterranian code in a one to one mapping of that codes syntax tree < 1739822877 436869 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :sorry that second category was called terrestrial > 1739822910 471844 PRIVMSG #esolangs :14[[076A14]]4 M10 02https://esolangs.org/w/index.php?diff=152115&oldid=152048 5* 03Buckets 5* (-2) 10 < 1739822914 530277 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the third category is telestial fastlisp which uses libraries that orchestrate the generation of terrestrial code. ideally these libraries will hide from you the fact that your code depends on subterranian code < 1739822938 593540 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :then there is celestial fastlisp code which is any fastlisp code that does not depend on any terrestrial or telestial fastlisp code < 1739823136 635406 :zzo38!~zzo38@host-24-207-52-143.public.eastlink.ca JOIN #esolangs zzo38 :zzo38 > 1739823161 220719 PRIVMSG #esolangs :14[[07User:Buckets/Sandbox14]]4 M10 02https://esolangs.org/w/index.php?diff=152116&oldid=152098 5* 03Buckets 5* (+19) 10 > 1739823192 889280 PRIVMSG #esolangs :14[[07User:Buckets/Sandbox14]]4 M10 02https://esolangs.org/w/index.php?diff=152117&oldid=152116 5* 03Buckets 5* (-18) 10 < 1739823868 958581 :Lykaina!~lykaina@user/lykaina JOIN #esolangs Lykaina :Lykaina Wolfe < 1739824015 369964 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :i think i went a little too far in the current code for fungeball, defining every user-accessible command from a set of ~55 fixed commands > 1739824167 457408 PRIVMSG #esolangs :14[[07User:Buckets14]]4 M10 02https://esolangs.org/w/index.php?diff=152118&oldid=152093 5* 03Buckets 5* (+10) 10 > 1739824190 395184 PRIVMSG #esolangs :14[[07Language list14]]4 M10 02https://esolangs.org/w/index.php?diff=152119&oldid=152094 5* 03Buckets 5* (+11) 10 < 1739824207 677032 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :only two of those used return values, and none have local arguments. > 1739824209 693633 PRIVMSG #esolangs :14[[07S1LK14]]4 N10 02https://esolangs.org/w/index.php?oldid=152120 5* 03Buckets 5* (+1754) 10Created page with "S1LK is an Esoteric programming language created by [[User:Buckets]] in 2022 about Having an Output Purely In Taste. {| class="wikitable" |- ! Commands !! Instructions |- | Set || Sets the Next variable by the Next Number, example: Set blah 1, If you are Changing The taste < 1739824281 537075 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Fun times. < 1739824325 684597 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :they all have access to the same 4 tick-level and all thread-level and global-level variables > 1739824589 82378 PRIVMSG #esolangs :14[[07User:Anthonykozar/Notes14]]4 10 02https://esolangs.org/w/index.php?diff=152121&oldid=152112 5* 03Anthonykozar 5* (+217) 10Added some languages and people. < 1739824660 364232 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :this is how addition is defined: t_s(); b_t(); t_s(); a_t(); t_b(); t_at_add(); s_t(); < 1739824702 552056 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :i modified the code to make it fit on one line < 1739824860 944596 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :t = stack.pop; b = t; t = stack.pop; a = t; t = b; t = t + at; stack.append(t); < 1739824900 833859 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :i mean < 1739824914 727676 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :t = stack.pop; bt = t; t = stack.pop; at = t; t = bt; t = t + at; stack.append(t); < 1739825029 489706 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :is that javascript? < 1739825061 568726 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :no, it's a generalization of python < 1739825069 190066 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :with typos < 1739825077 279994 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :and semicolons < 1739825084 273415 :korvo!~korvo@2604:a880:4:1d0::4d6:d000 PRIVMSG #esolangs :Lykaina: Nice. Paraphrasing Bill Wurtz, "hey somebody could make a forth out of that". < 1739825102 889040 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :my first forth in javascript had very similar code < 1739825201 933338 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :i'm trying to merge forth and befunge < 1739825210 112277 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :eventually > 1739825250 991105 PRIVMSG #esolangs :14[[07Sleep.14]]4 M10 02https://esolangs.org/w/index.php?diff=152122&oldid=152044 5* 03Buckets 5* (+127) 10 < 1739825304 410043 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :lisbeths: you named after the girl with the dragon tattoo? < 1739825313 772874 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :yes < 1739825320 126400 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :man som hatttar kvinnor < 1739825327 106529 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :i know every page of it < 1739825331 24436 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ive read it more times than i can count > 1739825362 956860 PRIVMSG #esolangs :14[[07Sleep.14]]4 M10 02https://esolangs.org/w/index.php?diff=152123&oldid=152122 5* 03Buckets 5* (+79) 10 < 1739825364 474065 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :I have read it via audio book multiple hundreds of times < 1739825382 154975 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :all three books, i assume < 1739825470 307173 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :or are there more now? < 1739825501 736045 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :ive read the second book a few dozen times and the third book a few dozen times < 1739825511 252990 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :the new books I used to own digitally and have read about 20 times < 1739825535 466088 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :in every fanfiction of the girl with the dragon tattoo ever written lisebeth has a child with blomkvist < 1739825545 815457 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :in the new books they essentially adopt a child together < 1739825576 813018 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :apparently people view lisbeth very maternally > 1739825954 453347 PRIVMSG #esolangs :14[[07Sleep.14]]4 M10 02https://esolangs.org/w/index.php?diff=152124&oldid=152123 5* 03Buckets 5* (+609) 10 > 1739826266 842919 PRIVMSG #esolangs :14[[07Sleep.14]]4 M10 02https://esolangs.org/w/index.php?diff=152125&oldid=152124 5* 03Buckets 5* (+159) 10 > 1739826388 583343 PRIVMSG #esolangs :14[[07Sleep.14]]4 M10 02https://esolangs.org/w/index.php?diff=152126&oldid=152125 5* 03Buckets 5* (+7) 10 > 1739826422 905064 PRIVMSG #esolangs :14[[07Sleep.14]]4 M10 02https://esolangs.org/w/index.php?diff=152127&oldid=152126 5* 03Buckets 5* (+7) 10 > 1739826461 44235 PRIVMSG #esolangs :14[[07Sleep.14]]4 M10 02https://esolangs.org/w/index.php?diff=152128&oldid=152127 5* 03Buckets 5* (+3) 10 < 1739828033 319597 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :27 of those 55 are not specific to befunge-93 or fungeball < 1739828088 49858 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :so half had to do with grids and threading < 1739828104 984893 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :*grids and/or threading < 1739828243 733817 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :4 of those remaining are i/o < 1739828490 177148 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :Lykaina: is this for making a hardware befunge interpreter? < 1739828579 992710 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :no, i'm just over-complicating my code < 1739828612 982485 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :but i am thinking of asm-like instructions < 1739828687 429699 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :trying to see if i can make something forthy < 1739828794 885359 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :from at most 36 immutable instructions < 1739828816 503755 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :i mean 52 < 1739828894 733641 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :what size are the stack elements, what size if the two-dimensional befunge arena, and are you using the same ALU for the + builtin of befunge and for advancing the instruction pointer? < 1739828979 614441 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :right now, i'm moving to a 1-d unidirectional generalization of the language < 1739829009 160705 :b_jonas!~x@88.87.242.184 PRIVMSG #esolangs :unefunge control flow sucks so I hope you have something better for it < 1739829044 489424 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :it's not a funge < 1739829053 462149 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :at this point < 1739829188 100160 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :it's becoming closer to a forth < 1739829399 35156 :Lykaina!~lykaina@user/lykaina PRIVMSG #esolangs :(i'm not working on fungeball, but something it inspired me to work on) < 1739829411 614380 :APic!apic@apic.name PRIVMSG #esolangs :cu < 1739831402 950314 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :so we got a couple interesting things < 1739831412 531463 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :exhibit a: sh|sh>&2 < 1739831419 593320 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :exhibit b: nmcr(){ sh|sh>&2;};mcr17(){ if [ "$1" = f ] ;then (cat "$2";cat)|nmcr;elif [ "$1" = e ] ;then (echo "$2";cat)|nmcr;else nmcr;fi;}; < 1739831440 214012 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :exhibit b is for people who dont know how to preload some data into exhibit a < 1739831454 546873 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :if you know the shell well all you need is exhibit a < 1739831722 746422 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :now I realize the cat command is useless because I can call cat from the e option < 1739831725 120371 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :mcr17(){ sh -e "$1"|sh>&2;}; < 1739832100 775383 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :eh this is a little nicer mcr17(){ if [ "$1" ] ;then sh -e "$1"|sh>&2;else sh|sh>&2;fi;}; < 1739832217 355298 :ais523!~ais523@user/ais523 JOIN #esolangs ais523 :(this is obviously not my real name) < 1739832828 207604 :molson_!~molson@2605-4A80-2101-99D0-F675-26ED-74E8-7509-dynamic.midco.net JOIN #esolangs molson :realname < 1739832981 61328 :molson!~molson@2605-4A80-2101-99D0-EBD1-74EC-CFBE-4CD2-dynamic.midco.net QUIT :Ping timeout: 248 seconds < 1739834436 325530 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :mcr17(){ if [ "$1" ] ;then sh -e "$1"|sh|sh>&2;else sh|sh|sh>&2;fi;}; < 1739836287 600823 :lisbeths!uid135845@id-135845.lymington.irccloud.com PRIVMSG #esolangs :mcr17(){ (echo "$1";cat)|sh|sh|sh>&2;}; this one is superior to that one by far > 1739836671 712655 PRIVMSG #esolangs :14[[07User:Anthonykozar/Notes14]]4 10 02https://esolangs.org/w/index.php?diff=152129&oldid=152121 5* 03Anthonykozar 5* (+69) 10More languages