←2025-10-17 2025-10-18 2025-10-19→ ↑2025 ↑all
00:05:18 <esolangs> [[Special:Log/upload]] upload * Waffelz * uploaded "[[File:BFASM memory diagram.png]]": A visual representation of the tape after compiling a BFASM program to brainfuck.
00:24:57 -!- amby has quit (Quit: so long suckers! i rev up my motorcylce and create a huge cloud of smoke. when the cloud dissipates im lying completely dead on the pavement).
00:33:25 <esolangs> [[C*]] M https://esolangs.org/w/index.php?diff=166194&oldid=165973 * H33T33 * (-24)
00:56:36 <esolangs> [[BFASM]] https://esolangs.org/w/index.php?diff=166195&oldid=166189 * Waffelz * (+10075)
01:01:00 <esolangs> [[User:Waffelz]] https://esolangs.org/w/index.php?diff=166196&oldid=166182 * Waffelz * (+38)
01:01:34 <esolangs> [[Asm2bf]] M https://esolangs.org/w/index.php?diff=166197&oldid=162896 * Waffelz * (+0)
01:07:11 <esolangs> [[BFASM]] M https://esolangs.org/w/index.php?diff=166198&oldid=166195 * Waffelz * (+40)
01:11:40 <esolangs> [[R0q/Commands]] https://esolangs.org/w/index.php?diff=166199&oldid=162759 * WarzokERNST135 * (-420) Replaced content with "please delete this page with [[r0q]]"
01:11:43 <esolangs> [[R0q]] https://esolangs.org/w/index.php?diff=166200&oldid=162761 * WarzokERNST135 * (-222)
01:11:46 <esolangs> [[User:WarzokERNST135]] https://esolangs.org/w/index.php?diff=166201&oldid=165113 * WarzokERNST135 * (-24)
01:14:53 <esolangs> [[User:PJ11]] https://esolangs.org/w/index.php?diff=166202&oldid=162649 * WarzokERNST135 * (+30)
06:20:29 -!- Sgeo has quit (Read error: Connection reset by peer).
07:11:56 -!- tromp has joined.
08:57:16 <esolangs> [[]] N https://esolangs.org/w/index.php?oldid=166203 * PrySigneToFry * (+3292) Created page with " is the Chinese version of [[I fuck, you fuck]], and is designed by PSTF. == Commands == === Variable Definition === <pre> X </pre> Define and initialize X. Any variable is assigned a value of 0 at the beginning. === Increment and Decrement === <pre> X </pre> Set X
09:21:28 <esolangs> [[Fun Video Game]] https://esolangs.org/w/index.php?diff=166204&oldid=165972 * PrySigneToFry * (+515)
10:44:11 <esolangs> [[DerpScrp]] https://esolangs.org/w/index.php?diff=166205&oldid=68234 * Kaveh Yousefi * (+687) Supplemented two example programs, added a hyperlink to my implementation on GitHub, and altered the Unimplemented page category tag to Implemented.
10:46:24 <esolangs> [[DerpScrp]] M https://esolangs.org/w/index.php?diff=166206&oldid=166205 * Kaveh Yousefi * (+1) Supplemented a missing ecphoneme ! in the description of an example program.
10:51:47 <APic> Hi
11:30:24 <esolangs> [[WY-Anglis]] N https://esolangs.org/w/index.php?oldid=166207 * PrySigneToFry * (+5704) Created page with "WY-Anglis is designed by PSTF, is the Englishized version of wenyan. == Code Sample == All the commands are equivalent to Wenyan, and now I don't want to write them. If you can program in Wenyan and LOLCODE, you can also program in WY-Anglis. === Hello, world!
11:32:29 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=166208&oldid=166173 * PrySigneToFry * (+13)
11:36:25 -!- Lord_of_Life_ has joined.
11:36:58 -!- Lord_of_Life has quit (Ping timeout: 248 seconds).
11:37:44 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
11:43:24 <esolangs> [[Vesob]] N https://esolangs.org/w/index.php?oldid=166209 * Ivava * (+1855) Created page with "{{Stub}} {{WIP}} {{infobox proglang |name=Vesob |year=2025 |author=[[User:Ivava]] |refimpl=Python }} '''Vesob''' is easy minimalistic character by character esoteric programming language for some popular examples and output, if else.<br>Vesob helps in IP things with som
11:46:46 <esolangs> [[User:Ivava]] https://esolangs.org/w/index.php?diff=166210&oldid=166170 * Ivava * (+14) /* Esolangs list */
11:53:16 <esolangs> [[Vesob]] https://esolangs.org/w/index.php?diff=166211&oldid=166209 * Ivava * (+89) /* Commands */
11:54:55 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
12:46:30 -!- amby has joined.
13:00:45 <esolangs> [[User:PrySigneToFry/Sandbox/My Rate to the user that I know]] https://esolangs.org/w/index.php?diff=166212&oldid=165771 * PrySigneToFry * (+423)
13:08:05 <esolangs> [[DerpScrp]] M https://esolangs.org/w/index.php?diff=166213&oldid=166206 * Kaveh Yousefi * (+0) Improved the formatting of a code segment.
13:10:02 -!- tromp has joined.
13:31:39 <esolangs> [[Special:Log/newusers]] create * Intiha * New user account
14:16:21 -!- simcop2387 has quit (Read error: Connection reset by peer).
14:16:22 -!- perlbot has quit (Read error: Connection reset by peer).
14:17:45 -!- perlbot has joined.
14:19:49 -!- simcop2387 has joined.
14:33:02 <esolangs> [['Python' is not recognized]] M https://esolangs.org/w/index.php?diff=166214&oldid=164539 * Ractangle * (-31) /* Syntax */
14:39:52 <esolangs> [[Blainbuk]] M https://esolangs.org/w/index.php?diff=166215&oldid=151103 * Ractangle * (+0) /* Commands */ "chat input" lol
14:54:10 -!- ais523 has joined.
15:49:41 -!- FreeFull has joined.
16:16:13 <esolangs> [[User:RocketRace]] https://esolangs.org/w/index.php?diff=166216&oldid=166076 * RocketRace * (-45)
16:17:49 <esolangs> [[Important lesbian virtual machine]] https://esolangs.org/w/index.php?diff=166217&oldid=166079 * RocketRace * (+35)
16:30:28 <esolangs> [[Important lesbian virtual machine]] M https://esolangs.org/w/index.php?diff=166218&oldid=166217 * RocketRace * (+0) typo
16:52:04 -!- Everything has joined.
17:25:49 <esolangs> [[Vesob]] https://esolangs.org/w/index.php?diff=166219&oldid=166211 * Ivava * (+550)
17:39:14 -!- somelauw has joined.
17:39:56 <somelauw> I'm thinking about some language ideas
17:41:34 <somelauw> I like stack based languages but noticed that comparison operators like > and != drop the items compared. Would it perhaps make sense to leave them on the stack, so you don't need to duplicate them?
17:46:52 -!- Sgeo has joined.
17:55:16 <ais523> maybe it makes sense to drop the top item but not the bottom one
17:55:29 <ais523> because you're often comparing to a constant
17:56:06 <ais523> thinking about it, variable-based languages also drop on comparison (if I do a>b I have to write the names of a and b again if I want to use them again)
17:57:09 <ais523> x86-64 SIMD programming is interesting because although it has traditional comparison operators, it also has min/max and those are normally more useful
17:58:01 <somelauw> True, x > 0 ... (and now i probably want to just drop 0)
17:59:42 <ais523> actually it's interesting to think about why you're comparing, especially when using an array paradigm rather than imperative paradigm
17:59:59 <ais523> is it for control flow? or are you trying to do a filter?
18:00:19 <ais523> in imperative languages the two operations are the same but the "correct" way to implement them is very different in machine code
18:01:43 <somelauw> I was thinking mostly about flow control. I haven't thought about filtering yet
18:03:43 <esolangs> [[Vesob]] https://esolangs.org/w/index.php?diff=166220&oldid=166219 * Ivava * (+2498)
18:04:24 <esolangs> [[Vesob]] https://esolangs.org/w/index.php?diff=166221&oldid=166220 * Ivava * (+3)
18:10:43 -!- somelauw has quit (Remote host closed the connection).
18:12:05 -!- somelauw has joined.
18:12:09 -!- somelauw has changed hostmask to ~somelauw@user/somelauw.
18:13:09 <korvo> somelauw: Think of stack operators as generalizations of functions. A comparison function might take two arguments and return one argument. The rest of the stack is just along for the ride.
18:14:58 <esolangs> [[Vesob]] https://esolangs.org/w/index.php?diff=166222&oldid=166221 * Ivava * (+43)
18:15:24 <korvo> Also, because we have words like dup, it's easy to mistakenly think that every value is copyable. But that's not always the case! Plenty of low-level languages like Factor can have resources on the stack which shouldn't be dup'ed.
18:17:59 <somelauw> well in that view, dup would be an operator to somewhat explicitly pass a parameter to functioo
18:18:27 <korvo> Yeah! Have you seen quotations, as in Factor or Joy?
18:18:34 <somelauw> I would expect everything to be more or less dupable/copyable indeed
18:19:31 <APic> cu
18:20:00 <korvo> Peace.
18:20:16 <korvo> somelauw: You might get a kick out of a classic H. Baker paper about copying stacks: https://plover.com/~mjd/misc/hbaker-archive/ForthStack.html
18:20:49 <korvo> That one is usually paired with another paper about Lisp which you can skip: https://plover.com/~mjd/misc/hbaker-archive/LinearLisp.html
18:21:55 <esolangs> [[Vesob]] https://esolangs.org/w/index.php?diff=166223&oldid=166222 * Ivava * (+100)
18:22:34 <somelauw> i'm more familiar with forth, factor than joy
18:25:45 <korvo> somelauw: Anyway, there *is* an answer to your initial question. Let's say that a Forth implementation is either "push/enter" or "eval/apply". In a push/enter Forth, we call functions by passing the entire stack; the function is responsible for popping stuff from the stack. In an eval/apply Forth, we call functions by asking the function for its arity, popping the stack ourselves, and invoking the function as a native call.
18:25:59 <korvo> It turns out that eval/apply is faster for real-world languages: https://simonmar.github.io/bib/papers/eval-apply.pdf
18:26:53 <korvo> So if we have a native comparison operation like > and we are doing eval/apply then we will call > by popping the stack twice, doing a native call of > using registers and leaving the result in a register, and finally pushing the result back to the stack.
18:27:30 <korvo> Top-of-stack optimizations apply here; if we have a unary call and top-of-stack register then we only have to swizzle registers before and after the native call.
18:28:25 <korvo> I guess I shouldn't say "real-world". I mean "higher-order"; I mean languages with quotations.
18:28:32 <esolangs> [[Vesob]] https://esolangs.org/w/index.php?diff=166224&oldid=166223 * Ivava * (+15)
18:40:13 -!- somelauw has quit (Ping timeout: 264 seconds).
18:40:51 -!- somelauw has joined.
18:46:05 <somelauw> i would expect an optimizer to inline both push/enter and eval/apply anyway
18:54:56 -!- somelauw has quit (Remote host closed the connection).
18:59:49 <korvo> Ah, they don't understand yet. That's fine; there's no rush.
19:03:20 -!- somelauw has joined.
19:03:20 -!- somelauw has changed hostmask to ~somelauw@user/somelauw.
19:06:30 <korvo> somelauw: A Sufficiently Smart Compiler could inline both when doing whole-program compilation, yes. But note that the typical Forth is incrementally compiled, and also that it's usually threaded; threaded Forths must be push/enter in order to let user-defined words have variable arity.
19:06:35 -!- myname has quit (Quit: WeeChat 4.7.0).
19:07:12 <korvo> What the Simons showed is that eval/apply is preferable when doing whole-program compilation, given that the compiler might not know the arity of all words at compile time.
19:07:33 <korvo> Unrelated: Anybody else reading the most recent Smalltalk-on-filesystem paper? https://programmingmadecomplicated.wordpress.com/wp-content/uploads/2025/10/onward25-jakubovic.pdf
19:15:16 -!- Riviera has joined.
19:26:22 <b_jonas> somelauw: I'll have to check Comun, I think it might have an optimization where some operations have a variant that keeps the bottom argument on the stack, but you access it through peephole optimization instead of a named primitive
19:27:59 <esolangs> [[Special:Log/newusers]] create * Esolangist * New user account
19:30:53 <korvo> I don't have it documented for Cammy, but operations in the stack machine are "term" if they only operate on top of stack. Cammy's tuples are packed, so dup is term; overall 33 ops are term and 19 are not. Arithmetic, comparisons, case analysis, floating-point are all term. The idea is that an op is term iff there's an efficient machine op capturing it; term ops are what the low-level machine does.
19:31:11 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=166225&oldid=166166 * Esolangist * (+197) /* Introductions */
19:31:36 <korvo> This isn't compatible with the standard unpacked untyped view of memory in Forth though.
19:31:45 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=166226&oldid=166208 * Ractangle * (+11) /* Non-alphabetic */
19:33:05 <b_jonas> eek, I still can't read Comun's source code. it's written in a style that's somehow transparent and opaque at the same time
19:38:17 <ais523> I feel like there's something significantly different between "x inputs, y outputs" stack-based systems, and Underload's where the amount of stack consumed can be condiional and it's reasonabe to do things like storing lists splatted on the stack
19:38:55 <ais523> I guess this is, in a sense, the same "unbalanced loop" phenomenon as in BF – Underload lets you write a loop that changes the stack height at every iteration
19:40:35 <korvo> ais523: In Cammy's case, it's an explicit papering-over of what the CAM can do. The CAM can do things like unwind a packed list onto the stack or pop the stack until a sentinel is reached; it's only like five opcodes maybe. But Cammy can't express either of those things; indeed Cammy can't actually access CAM's stack.
19:42:03 <korvo> But that's rather because I *wanted* that separation of concerns, for speed; optimizing a sequence of term ops is straightforward and RPython's JIT emits really tight code in those situations. It would usually hurt speed to let the user interrupt that with an expensive list-unpacking loop.
19:42:20 <ais523> now I'm thinking about Mini-Flak, which is powered by two stacks but one of them has stack height which is lexically tied to the nesting level of the programming source (i.e. push and pop instructions have to nest correctly as though they were brackets, and this nesting has to be consistent with the control flow instructions too)
19:42:27 <ais523> this would be sub-TC if not for the fact that it has bignums
19:43:11 <ais523> right, having a restrictive programming language is good for optimisation purposes
19:43:42 <ais523> I am hoping that my next "big" programming project will be a language which I try to restrict as much as possible while still making it practically useful, in order to enable very powerful optimisations
19:44:14 <ais523> except not pure-functional as that's been done already
19:45:46 <b_jonas> I'm not entirely sure, but I think Comun doesn't have the optimization that I mentioned, but in any case, a forth-like stack interpreter could have something like this
19:45:48 -!- somelauw has quit (Remote host closed the connection).
19:46:28 <ais523> (by programming project I mean programming language project, not programming in general)
19:50:49 <b_jonas> ais523: I was actually vaguely thinking about a retro programming language that pretends to be a hypothetical low memory (early 2000s) programmable calculator, where the programs are written in a stack language of the kind that allows functions that push or pop a variable amount, but the calculator interface can dynamically translate the program to one of those BASIC-like languages with infix
19:50:55 <b_jonas> operations, and where the program isn't easy to translate to that it would put PUSH statements or POP functions into the BASIC
19:51:46 <ais523> in a way I'm sad that there's rarely any reason to do extreme memory-saving programming nowadays
19:52:16 <ais523> I suspect even microcontrollers have more RAM than they used to – the ones I worked with had approximately 100 bytes of memory but I suspect modern ones have a lot more
19:52:20 <esolangs> [[User talk:/w/wiki/index.php/Talk:index.php/Main page]] https://esolangs.org/w/index.php?diff=166227&oldid=163224 * Esolangist * (+461) added commands yay
19:52:32 <ais523> 100 bytes of RAM, that is, they had a few kilobyte of EEPROM
19:52:42 <b_jonas> by the way, something like that exists, it's called S-lang, it's a macro language that pretends to have a normal infix syntax but can also do variable pushes or pops
19:53:07 <b_jonas> ais523: I'm thinking of 2048 bytes of RAM because that's what my programmable calculator has
19:53:19 <b_jonas> a SHARP EL-5120
20:12:51 <fizzie> I think they still make "small" (in the 64-256 bytes) RAM microcontrollers too, like the venerable PIC family ones. But it's also definitely easy to find ones with orders of magnitude more, too.
20:13:34 <fizzie> The RP2040 has 264 kB of RAM, for example.
20:14:57 <fizzie> And the new one they made for Pico 2, the RP2350, it's apparently got about double that (520 kB).
20:15:19 -!- somelauw has joined.
20:19:08 <ais523> I'm saddened to realise that most modern programmers would have no idea how to fit a program's memory usage into 520 kB
20:19:57 <ais523> our typical tools for programming don't make that very easy – lots of heavy libraries and dependencies
20:21:13 <zzo38> Many programs can use much less than that. But, I think you are right unfortunately many modern programmers (although not all) use too many dependencies and use too much memory and other stuff.
20:22:28 <zzo38> The MESH:Hero game engine uses an internal RPN code (which is saved to disk in binary format) but when editing, it is converted to infix notation. However, as far as I know, there is no PUSH and POP in the source format.
20:24:14 <zzo38> I think many programmable calculators (like you mention) do too; I have TI-92 and I have managd to confuse it with the use of an undocumented error code which seems to be used internally when you push ON to stop a user program that is currently running.
20:36:55 <korvo> Depends on how much time I'm given. I was eager to write BASIC on a TI-84, but only in high school when there wasn't anything else to do.
20:40:11 -!- Everything has quit (Quit: leaving).
20:47:34 -!- somelauw has quit (Remote host closed the connection).
20:50:20 <esolangs> [[Special:Log/newusers]] create * Mouse * New user account
20:56:28 <esolangs> [[Dt]] https://esolangs.org/w/index.php?diff=166228&oldid=163446 * C++DSUCKER * (+64)
21:02:34 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=166229&oldid=166225 * Mouse * (+80) /* Introductions */
21:03:27 <b_jonas> ais523: that's why I'm sometimes thinking of how I can optimize an interpreter of a high-level language such that you can spawn many interpreters and each one consumes very little memory other than read-only memory that can be safely shared between interpreters and processes
21:04:47 <b_jonas> it can be hard because even a fresh interpreter will have a lot of built-in objects (eg. built-in types and functions) that some programs can modify, but you have to encode them in such a way that you can store modifications but you don't need a huge read-write table in the common case when there are no or very few modifications
21:05:08 <b_jonas> and there's of course a tradeoff between this and the speed of operations
21:05:42 <esolangs> [[Esolang:Introduce yourself]] M https://esolangs.org/w/index.php?diff=166230&oldid=166229 * Mouse * (+76) /* Introductions */
21:05:46 <b_jonas> so this is hard especially for existing languages like javascript or python or ruby that allow such modifications
21:06:38 <b_jonas> easier for a new language that you design specifically for this
21:07:37 <ais523> b_jonas: I'm wondering how that would work in terms of how it's seen by the kernel – are the high-level interpreters coroutines in a single thread, threads in a single process, or separate processes?
21:08:55 <b_jonas> ais523: that's an open question, but I think that doesn't much influence what I want to optimize
21:15:51 <b_jonas> most likely a combination where there can be more than one process, but also a process can have multiple interpreters
21:17:08 <b_jonas> and the shared content is either linked into the executable or mmapped from some read-only files
21:28:44 <sprout> ah, we just had a similar discussion
21:29:00 <korvo> And y'all aren't talking about the Smalltix paper, right?
21:30:19 <sprout> coroutines can be implemented in various manners, and even the definition of a coroutine can be stretched to something along a light-weight tread
21:30:23 <sprout> *thread
21:30:39 <korvo> Like, a Nix store would be an example of that sort of "read-only memory" if we're thinking of files as objects rather than inert; an immutable object could be compiled to bytes which are content-addressed in the Nix store rather than ambient in the local environment. Indeed, this is basically how Monte uses Nix as a package manager!
21:53:29 <FireFly> korvo: smalltix paper?
21:55:35 <FireFly> oh, found it in the scrollback
22:03:47 <esolangs> [[Smoothbrain]] M https://esolangs.org/w/index.php?diff=166231&oldid=166047 * Ashli Katt * (+9) /* Program */ Add "However," to make the paragraph flow smoother
22:08:11 <korvo> Yeah. I'm at Section 11, thinking about performance. The real issue is something not mentioned in the paper: context switches and non-VDSO syscalls.
22:10:30 <b_jonas> korbo: my problem is mutable objects, in a language that has lots of mutable objects.
22:11:51 -!- ais523 has quit (Quit: quit).
22:15:36 <korvo> b_jonas: Right. And similarly I know that modern Smalltalks do *not* have perfectly serialized transactions for every invocation. Something has to give; we can only sync a disk like 20 to 100 times per second.
22:19:56 <korvo> One possible abstraction is array-style parallel programming. It's usually safe to interrupt programs like sed or jq midway through some data, for example. This would require the `bind` script to clean up after each process, which is plausible.
22:20:40 <korvo> They mention FUSE but I'm thinking more about tmpfs. The kernel's directory-management logic is not too bad, given that we usually want to contend on multiple resources at once.
22:21:45 <korvo> Maybe asynchrony is the main feature here. This setup naturally gets concurrency as long as the kernel is correct. In that sense it's not too different from systems like Scala's Akka where each actor is too large to transparently migrate but its underlying storage can be persistent.
23:59:25 -!- Sgeo has quit (Ping timeout: 250 seconds).
←2025-10-17 2025-10-18 2025-10-19→ ↑2025 ↑all