←2021-09-19 2021-09-20 2021-09-21→ ↑2021 ↑all
00:05:03 <esolangs> [[Special:Log/newusers]] create * 0utdacious * New user account
00:09:07 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88103&oldid=88091 * 0utdacious * (+349) /* Introductions */
00:45:28 <fizzie> Heh. Made an inventory of a toolbox. One of the things in there was this solder dispenser with *really* old-fashioned styling (not sure if it's actually old, or just deliberately kept retro) from a manufacturer in Hemel Hempstead. I feel like I've brought it (from Finland) back to the land of its birth.
00:46:32 <fizzie> Looks quite a bit like http://thewholegaragecatalogue.blogspot.com/2014/12/an-ersin-multicore-solder-dispenser.html
00:49:45 <esolangs> [[Sona]] N https://esolangs.org/w/index.php?oldid=88104 * 0utdacious * (+3374) Create a minimal language page for sona
00:51:20 <esolangs> [[Language list]] M https://esolangs.org/w/index.php?diff=88105&oldid=88067 * 0utdacious * (+11) /* S */
01:00:37 <esolangs> [[Sona]] M https://esolangs.org/w/index.php?diff=88106&oldid=88104 * 0utdacious * (+357)
01:28:43 -!- oerjan has quit (Quit: Nite).
01:40:48 <esolangs> [[Sona]] https://esolangs.org/w/index.php?diff=88107&oldid=88106 * 0utdacious * (+1989) Added language details
01:42:10 <esolangs> [[Special:Log/upload]] upload * 0utdacious * uploaded "[[File:Sona interpreter.png]]"
01:42:51 <esolangs> [[Sona]] M https://esolangs.org/w/index.php?diff=88109&oldid=88107 * 0utdacious * (-58)
01:43:55 <esolangs> [[Sona]] M https://esolangs.org/w/index.php?diff=88110&oldid=88109 * 0utdacious * (+12)
01:45:21 <esolangs> [[Sona]] M https://esolangs.org/w/index.php?diff=88111&oldid=88110 * 0utdacious * (+20)
01:46:39 <esolangs> [[Sona]] M https://esolangs.org/w/index.php?diff=88112&oldid=88111 * 0utdacious * (+63)
01:47:17 <esolangs> [[Sona]] M https://esolangs.org/w/index.php?diff=88113&oldid=88112 * 0utdacious * (+4) /* Turing equivalence */
02:05:47 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88114&oldid=88093 * Iamn00b * (+2033)
02:07:25 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88115&oldid=88114 * Iamn00b * (+13)
02:12:08 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88116&oldid=88115 * Iamn00b * (+198)
02:17:55 <esolangs> [[Hello world program in esoteric languages (nonalphabetic and A-M)]] https://esolangs.org/w/index.php?diff=88117&oldid=87628 * Iamn00b * (+118)
02:19:07 <esolangs> [[Hello world program in esoteric languages (nonalphabetic and A-M)]] https://esolangs.org/w/index.php?diff=88118&oldid=88117 * Iamn00b * (+118) /* LCCBED */
02:20:33 <esolangs> [[Hello world program in esoteric languages (nonalphabetic and A-M)]] https://esolangs.org/w/index.php?diff=88119&oldid=88118 * Iamn00b * (-16) /* LCCBED */
02:23:45 <esolangs> [[Truth-machine]] https://esolangs.org/w/index.php?diff=88120&oldid=87704 * Iamn00b * (+52) /* Implementations */
02:50:31 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88121&oldid=88116 * Iamn00b * (+0) /* Truth machine (thanks, Keymaker!) */
02:52:15 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88122&oldid=88121 * Iamn00b * (+14) /* Language overview */
02:57:56 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88123&oldid=88122 * Iamn00b * (+231) /* Instructions */
03:01:33 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88124&oldid=88123 * Iamn00b * (+2) /* Simple single-digit addition */
03:25:56 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88125&oldid=88124 * Iamn00b * (+37) /* Examples */
03:26:22 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88126&oldid=88125 * Iamn00b * (+2) /* Without comments */
03:32:41 <esolangs> [[User:Iamn00b]] https://esolangs.org/w/index.php?diff=88127&oldid=88092 * Iamn00b * (+37)
03:33:01 <esolangs> [[User:Iamn00b]] https://esolangs.org/w/index.php?diff=88128&oldid=88127 * Iamn00b * (+6)
03:33:31 <esolangs> [[User:Iamn00b]] https://esolangs.org/w/index.php?diff=88129&oldid=88128 * Iamn00b * (-7)
03:37:14 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88130&oldid=88126 * Iamn00b * (+8)
03:40:36 <esolangs> [[Staxel]] N https://esolangs.org/w/index.php?oldid=88131 * Iamn00b * (+221) Created page with "[[Staxel]] is an [[esolang]] created by [[User:Iamn00b|iamn00b]] in 2021. It works by using a combination of [[stack|stacks]] and cells (hence the name, Stack + Cell). The lan..."
04:29:57 -!- xylochoron[m] has quit (*.net *.split).
04:29:57 -!- mich181189 has quit (*.net *.split).
04:29:57 -!- FireFly has quit (*.net *.split).
04:29:57 -!- orin has quit (*.net *.split).
04:29:57 -!- MrAureliusR has quit (*.net *.split).
04:30:23 -!- oren has joined.
04:30:23 -!- mich181189 has joined.
04:30:40 -!- FireFly has joined.
04:30:43 -!- MrAureliusR has joined.
04:39:02 -!- xylochoron[m] has joined.
04:41:38 -!- Hooloovoo has quit (*.net *.split).
04:41:38 -!- fungot has quit (*.net *.split).
04:41:38 -!- V has quit (*.net *.split).
04:41:38 -!- phdu has quit (*.net *.split).
04:41:38 -!- integral has quit (*.net *.split).
04:42:05 -!- V has joined.
04:42:33 -!- integral has joined.
04:43:00 -!- Hooloovoo has joined.
04:46:03 -!- phdu has joined.
04:53:49 -!- Sgeo has joined.
06:15:48 -!- simcop2387_ has joined.
06:17:17 -!- simcop2387 has quit (Ping timeout: 265 seconds).
06:18:01 -!- simcop2387_ has changed nick to simcop2387.
06:18:51 -!- Sgeo has quit (Read error: Connection reset by peer).
06:47:10 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88132&oldid=88130 * Iamn00b * (+4)
07:00:36 -!- FireFly has quit (Quit: WeeChat 2.0.1).
07:00:56 -!- FireFly has joined.
07:01:09 -!- tromp has joined.
07:37:28 -!- imode has quit (Ping timeout: 252 seconds).
08:05:51 -!- hendursa1 has joined.
08:09:12 -!- hendursaga has quit (Ping timeout: 276 seconds).
09:15:49 -!- dutch has quit (Ping timeout: 268 seconds).
09:32:57 <b_jonas> we should start to say that someone who's sleeping as "adorn", not "asleep", because making the adjective from the same root as the verb is too boring for English, hoarder of words
09:33:12 <b_jonas> fungot, how many times a month are you adorn?
09:46:03 <esolangs> [[Staxel]] https://esolangs.org/w/index.php?diff=88133&oldid=88131 * Iamn00b * (-54)
09:54:44 -!- fungot has joined.
10:12:42 <esolangs> [[User:Iamn00b]] https://esolangs.org/w/index.php?diff=88134&oldid=88129 * Iamn00b * (+267)
10:14:01 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88135&oldid=88132 * Iamn00b * (-59)
10:15:49 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88136&oldid=88135 * Iamn00b * (+0) /* Instructions */
10:17:46 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88137&oldid=88136 * Iamn00b * (-1) /* //TODO// Allan please add content */
10:30:27 -!- Everything has joined.
10:43:11 -!- tech_exorcist has joined.
11:11:23 -!- Thelie has joined.
11:24:12 <fizzie> fungot: Can't you expose some metrics or something, I never notice when you go away?
11:24:12 <fungot> fizzie: because of the
11:24:23 <fizzie> fungot: Because of the what?
11:24:23 <fungot> fizzie: consider siscweb. they all look the same
11:28:41 -!- imode has joined.
11:41:51 -!- dutch has joined.
11:49:43 -!- leah2 has quit (Remote host closed the connection).
11:51:56 -!- leah2 has joined.
12:06:24 <int-e> fungot: how do you feel about imperials rather than metrics?
12:06:24 <fungot> int-e: yes you do,
12:06:37 <int-e> fungot: I what?
12:06:37 <fungot> int-e: or is it just for the record, it's not the computations, it the scale.
12:07:10 <int-e> fungot: it's mostly for the record
12:07:10 <fungot> int-e: anyone familiar with the scheme48 module system that makes it sound more palatable.
12:07:36 <int-e> `' palatable
12:07:38 <HackEso> No output.
12:08:06 <int-e> (No palatable quotes, figures.)
12:31:08 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88138&oldid=88103 * Iamn00b * (+42)
12:32:16 <esolangs> [[Gluck]] https://esolangs.org/w/index.php?diff=88139&oldid=88102 * Iamn00b * (+2)
12:33:51 <esolangs> [[Gluck]] https://esolangs.org/w/index.php?diff=88140&oldid=88139 * Iamn00b * (+46)
12:34:13 <esolangs> [[Gluck]] https://esolangs.org/w/index.php?diff=88141&oldid=88140 * Iamn00b * (+3)
12:34:40 <fizzie> fi:pala = en:piece. So a "palatable" is some sort of a modular table constructed out of smaller pieces.
12:39:12 -!- tech_exorcist has quit (Quit: see you later).
12:43:50 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=88142&oldid=88105 * Iamn00b * (+13) /* L */
12:58:57 <esolangs> [[Special:Log/newusers]] create * LEOMOK * New user account
13:17:04 -!- Thelie has quit (Remote host closed the connection).
13:25:12 -!- arseniiv has joined.
13:35:13 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
13:40:09 -!- sprock has quit (Ping timeout: 268 seconds).
13:41:25 -!- tech_exorcist has joined.
13:42:42 -!- river has quit (Quit: Leaving).
13:43:48 -!- riv has joined.
13:55:22 <b_jonas> fizzie: sorry, I don't find that funny because "palatábla" is already a word in hungarian, it means slate tablet, the flat object that students used to write temporary writings on in order to learn writing, back when paper was too expensive for that
13:57:47 -!- tromp has joined.
14:12:08 -!- src has joined.
14:13:17 -!- lambdabot has quit (Remote host closed the connection).
14:15:05 -!- lambdabot has joined.
14:25:01 -!- Sgeo has joined.
14:25:04 <esolangs> [[GG]] https://esolangs.org/w/index.php?diff=88143&oldid=87911 * Iamn00b * (+9)
14:30:01 -!- delta23 has joined.
14:36:25 -!- lambdabot has quit (Remote host closed the connection).
14:37:55 -!- lambdabot has joined.
14:43:23 <int-e> @bot
14:43:23 <lambdabot> :)
14:43:51 <int-e> (upgraded to bullseye)
14:47:31 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88144&oldid=88137 * Iamn00b * (+14)
14:58:18 <int-e> . o O ( Distro upgrade... that's a lot to unpack. )
14:58:24 -!- riv has quit (Quit: Leaving).
14:59:34 <b_jonas> nice int-e
15:01:08 -!- riv has joined.
15:01:21 -!- delta23 has quit (Quit: Leaving).
15:18:50 -!- hendursa1 has quit (Quit: hendursa1).
15:19:16 -!- hendursaga has joined.
15:26:05 -!- int-e has quit (Remote host closed the connection).
15:27:01 -!- int-e has joined.
15:34:02 <int-e> good so far... let's see if email's still working
15:36:23 <int-e> yay, it works
15:37:22 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88145&oldid=88144 * Iamn00b * (+28) /* Brainf*** equivalent */
15:38:00 <int-e> Err, those status notices were meant to go to another channel.
15:47:11 -!- leah2 has quit (Remote host closed the connection).
15:47:28 -!- leah2 has joined.
16:08:02 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
16:09:25 -!- dyeplexer has joined.
16:25:59 <esolangs> [[Special:Log/newusers]] create * Viba * New user account
16:34:38 -!- sprock has joined.
16:36:27 -!- riv has quit (Quit: Leaving).
16:36:29 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88146&oldid=88138 * Viba * (+429)
16:37:56 -!- riv has joined.
16:42:08 -!- tromp has joined.
16:45:06 <int-e> `? economics
16:45:09 <HackEso> Economics is just applied numerology.
16:45:25 <int-e> . o O ( `learn Economics is the science of hindsight. )
16:46:23 -!- Everything has left.
17:24:25 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
17:27:48 -!- tromp has joined.
17:33:22 -!- sprock has quit (Ping timeout: 260 seconds).
17:43:02 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
17:45:05 -!- riv has quit (Quit: Leaving).
17:47:24 -!- riv has joined.
17:54:22 <esolangs> [[LCCBED]] https://esolangs.org/w/index.php?diff=88147&oldid=88145 * Iamn00b * (+22)
18:05:06 -!- sprock has joined.
18:27:39 -!- tromp has joined.
18:32:29 -!- dyeplexer has quit (Ping timeout: 264 seconds).
18:43:52 -!- Thelie has joined.
18:49:38 -!- vyv has joined.
19:17:38 -!- tech_exorcist has quit (Quit: see you tomorrow).
19:27:53 <esolangs> [[Special:Log/newusers]] create * Timofeyka * New user account
19:29:14 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88148&oldid=88146 * Timofeyka * (+44) /* Introductions */
19:30:06 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88149&oldid=88148 * Timofeyka * (+49) /* Introductions */
19:30:21 -!- dutch has quit (Quit: WeeChat 3.2.1).
19:30:38 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88150&oldid=88149 * Timofeyka * (+91) /* Introductions */
19:34:39 -!- Thelie has quit (Remote host closed the connection).
19:35:54 -!- dutch has joined.
19:45:00 <esolangs> [[LCCBED]] M https://esolangs.org/w/index.php?diff=88151&oldid=88147 * PythonshellDebugwindow * (-22) This is not featured
19:46:24 <esolangs> [[EPL-Main]] N https://esolangs.org/w/index.php?oldid=88152 * Timofeyka * (+886) Created page with "'''EPL Main''' is a compiled high-level assembler written in D by Timofeyka. '''EPL Main''' can be used as a regular language(like the same C), for osdev, it is useful in perf..."
19:47:17 <esolangs> [[EPL-Main]] https://esolangs.org/w/index.php?diff=88153&oldid=88152 * Timofeyka * (-886) Blanked the page
19:47:28 <esolangs> [[Special:Log/move]] move * Timofeyka * moved [[EPL-Main]] to [[EPL Main]]
19:49:02 <esolangs> [[EPL Main]] https://esolangs.org/w/index.php?diff=88156&oldid=88154 * Timofeyka * (+884)
19:50:44 <esolangs> [[Language list]] https://esolangs.org/w/index.php?diff=88157&oldid=88142 * Timofeyka * (+15)
19:52:48 <esolangs> [[EPL Main]] https://esolangs.org/w/index.php?diff=88158&oldid=88156 * Timofeyka * (-9)
19:54:05 -!- sprock has quit (Ping timeout: 264 seconds).
19:58:35 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
20:01:33 -!- sprock has joined.
20:10:59 -!- earendel has joined.
20:17:29 <esolangs> [[Special:Log/newusers]] create * Aboba228 * New user account
20:20:23 -!- tromp has joined.
20:25:15 <esolangs> [[Esolang:Introduce yourself]] https://esolangs.org/w/index.php?diff=88159&oldid=88150 * Aboba228 * (+35) /* Introductions */
20:28:02 <esolangs> [[EPL Main]] https://esolangs.org/w/index.php?diff=88160&oldid=88158 * Aboba228 * (-470) Corrected to truth
20:54:56 -!- sprock has quit (Ping timeout: 246 seconds).
21:00:51 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
21:03:17 -!- tromp has joined.
21:06:46 -!- Lord_of_Life_ has joined.
21:07:36 -!- Lord_of_Life has quit (Ping timeout: 265 seconds).
21:09:34 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
21:12:34 -!- src_ has joined.
21:14:14 -!- src__ has joined.
21:15:35 -!- src has quit (Ping timeout: 246 seconds).
21:17:29 -!- src_ has quit (Ping timeout: 264 seconds).
22:18:48 -!- tromp has quit (Quit: My iMac has gone to sleep. ZZZzzz…).
22:21:17 -!- ais523 has joined.
22:21:43 <ais523> language design: suppose I have a language with a strict separation between things that are immutable/pure values, and object-ish things that can be changed at runtime
22:22:33 <ais523> I'm mentally playing around with a restriction in which object-ish things can't be returned from functions or stored in fields of values or object-ish things (although you can pass them by reference as function/method parameters)
22:22:58 <ais523> my question is: is this too severe a restriction for practical use? or can you write most programs that want mutable things in this form?
22:23:48 <ais523> it would solve a huge number of problems (at least three, more likely somewhere around five) if it were usable restriction, but it feels like it might make things too hard (also it feels like esoprogrammers are the right people to ask about something like this)
22:24:23 <ais523> the most obvious issue I see is with creating the objects in the first place – you'd have to start them off uninitialized, and have "initializers" as opposed to constructors
22:28:28 <b_jonas> ais523: would that be like ancient (pre-book) C, the one where you can't use structs as function parameters or returns?
22:34:59 <zzo38> I also think it can be interesting idea, having separate immutable/pure values with changeable ones, for some things it will be helpful, I think. However, for other things it isn't, so I would not expect such a thing to be mandatory for programming languages like C, although if optional it can be useful. For some kinds of programming languages (especially domain specific), being mandatory can also be useful.
22:35:35 <b_jonas> or machine code where you have a fixed number of registers for parameters and returns, and anything bigger than that you have to put somewhere in the memory, possibly on the stack
22:36:42 <zzo38> Yes, that can be the case and will be different for different instruction sets too (also depending on calling conventions, which might also vary)
22:36:42 <b_jonas> like imagine MMIX where you basically can't index the stack with a variable index, so you have to put large or variable sized structures in the memory somewhere other than the default stack
22:36:53 <ais523> <b_jonas> ais523: would that be like ancient (pre-book) C, the one where you can't use structs as function parameters or returns? ← that was one of the inspirations – even in modern C, you can't rely on returning structs to be efficient
22:37:02 <ais523> even though you can express it
22:37:26 <ais523> one of the things I dislike about Rust is that it makes it easy to do that by mistake, and also leaves it unclear as to whether it will/can be optimised or not
22:37:56 <zzo38> Free Hero Mesh a lot uses a struct of two 32-bit integers as parameters and return values, though
22:38:16 <ais523> <b_jonas> like imagine MMIX where you basically can't index the stack with a variable index, so you have to put large or variable sized structures in the memory somewhere other than the default stack ← several people, including me, want to write x86 in that sort of style to help avoid stack-based security vulnerabilities, although I think some of them have found that the performance is unacceptable
22:38:23 <zzo38> (And I think we have found that in that case at least on 64-bit x86, it is efficient)
22:38:29 -!- src__ has quit (Ping timeout: 264 seconds).
22:39:15 <ais523> zzo38: that should be fine, I think up to 16 bytes, just copying the bytes will be faster than the alternatives
22:41:57 -!- oerjan has joined.
22:42:00 -!- vyv has quit (Quit: Konversation terminated!).
22:48:58 <b_jonas> ais523: it's certainly easier now that we have vector instructions to just load large structures from the stack
22:49:09 <b_jonas> like 32 bytes with one instruction
22:49:19 <b_jonas> sure, there's the stack alignment problme
22:53:55 -!- arseniiv has quit (Ping timeout: 265 seconds).
22:59:24 <oerjan> <b_jonas> we should start to say that someone who's sleeping as "adorn", not "asleep", <-- i don't think "adorn" is adorned with that meaning hth
23:00:37 <ais523> b_jonas: I agree that it's fairly easy, but it's still an overhead
23:01:04 <ais523> as soon as the copy is slower than dereferencing the pointer on every access is (somewhere between 16 and 32 bytes, I think), then avoiding the copy is an advantage
23:01:43 <ais523> stack alignment actually isn't so much of a problem nowadays, I expect that the cost of aligning the stack is actually greater than the cost of doing unaligned block copies on the stack
23:02:29 <b_jonas> ais523: I mean very often you want to pass small fixed-sized structures on the stack, and now you can do that easily and load them to registers and such
23:02:38 <b_jonas> also just pass them in registers without the stack
23:02:53 <b_jonas> it's just a quantitative difference but helps a lot
23:03:00 <ais523> b_jonas: most of these things would be immutable, anyway
23:04:12 <ais523> copying mutable things around is weird because it makes it unclear whether the copy changes when the original does
23:04:55 <ais523> (this is another of my motivations behind making mutable things nonreturnable and only passed by reference – it would mean any copy would have to be explicit, making it completely clear whether two things shared or not)
23:07:40 <oerjan> <int-e> (upgraded to bullseye) <-- bullseye? that looked like an ordinary smiley to me hth
23:08:38 <zzo38> In PostScript also, copies are explicit (you must use the copy command, otherwise you just get an alias), although it is possible to pass a read-only alias to an object that other aliases are writable, or an alias of only a part of something. In C also, you can pass a pointer to something which is "const" even if the other one isn't
23:08:57 <b_jonas> I don't know. I like the freedom of passing and returning fixed-size objects in C++ and rust. it lets me write abstractions in a clean way, and lets the optimizer decide how to implement the copy.
23:14:07 <b_jonas> but I understand why you may want something like python or ruby where, when you pass a mutable object as an argument or return it, it always just passes the reference, and copying the mutable object is explicit
23:17:22 <b_jonas> isn't that also what Java does?
23:17:29 <b_jonas> did Java basically invent that model?
23:17:44 <b_jonas> no it didn't, because lisp AND smalltalk do it too
23:17:57 <b_jonas> Java just popularized it
23:18:29 <b_jonas> I'm not talking too much nonsense about Java, am I?
23:18:35 <ais523> the Java model is, primitives always pass by value, objects always pass by reference
23:19:16 <ais523> you can return object references from methods even if they weren't given as input – object references are primitives that can be passed by value
23:19:29 <ais523> and a garbage collector is used to handle the obvious memory handling issues this causes
23:21:21 <b_jonas> right. so the same model as python, ruby, lisp, smalltalk.
23:22:23 <ais523> this also implies that objects are never stack-allocated, they're always on the heap
23:23:18 <b_jonas> yeah. smalltalk probably invented that model.
23:23:34 <b_jonas> and I quite like what python made of it
23:24:15 <ais523> I think this model works fairly well for immutable things, but not for mutable things
23:24:34 <ais523> it leaves the aliasing situation very unclear, for example
23:24:44 <Melvar> All I can think of is the Haskell model, where the only mutable things are explicit references that require special operations to read and write, with the handle used for this itself being an immutable value.
23:25:10 <ais523> and it has issues with dangling pointers (which won't cause memory corruption, but will nonetheless still point to outdated objects that should no longer exist)
23:25:40 <ais523> Melvar: OCaml does that too, so I've worked with it extensively
23:25:51 <ais523> (one of my previous jobs was in OCaml)
23:26:09 <ais523> except, it's more commonly used in OCaml than Haskell (because it's a strict language and so the order of side effects like that is easier to understand)
23:26:56 <b_jonas> ... and then there's prolog
23:27:10 <Melvar> Right, in Haskell these operations have IO types (or ST) and thus must be explicitly sequenced, which makes them yet more different and hard to invoke by accident.
23:29:07 <Melvar> They must also be created explicitly, and the creation requires supplying an initial value, so at least there’s no uninitialized ref problem.
23:30:01 <ais523> OCaml also requires that
23:30:14 <ais523> although, sometimes you have to just put in a placeholder value, which loses half the advantage
23:30:48 <ais523> I think the solution most languages use nowadays is to allow you to create them uninitialized, but not use them unless they've become initialized along all possible control flow paths
23:31:27 <ais523> e.g. in Rust you can write «let x; if (y) { x = 4; } else { x = 5; } println!("{}", x)», but if you removed either of the assignments to x it wouldn't compile
23:31:46 <Melvar> Which requires special builtin language support.
23:31:48 <ais523> I think Java might do that too, but I'm not sure
23:31:49 <ais523> yep
23:32:07 <ais523> mutability, to me, is the sort of thing that it's reasonable for a language to special-case because it has so many consequences
23:33:02 <Melvar> Yeah in Haskell you would have to «do x <- if y then newIORef 4 else newIORef 5; print =<< readIORef x»
23:33:41 <ais523> ah right, I actually like that, you're allocating at the moment the value is known
23:35:01 <Melvar> That involves returning the ref though, so you now have to take care of that.
23:40:25 <ais523> right, it's one of those things that's very clear from the mathematical point of view, but needs compiler magic to implement efficiently behind the scenes
23:48:53 <zzo38> Yes, in Haskell there is IORef. Some programs make global variables by setting the optimizer settings and using unsafe I/O, but I odn't like that, it isn't very good mathematically and isn't how Haskell is supposed to be working, I think. An alternative I thought is to use a class, and then each global variable is named by a type that has that class
←2021-09-19 2021-09-20 2021-09-21→ ↑2021 ↑all