00:02:43 b_jonas: how about 239 subs, named 01,02...EE,EF ? 00:03:35 therefore, easier to make a stack with 00:17:15 `` printf %s 11101001011110101100010111111100 | crc32 /dev/stdin 00:17:17 badc0c0a 00:20:27 lol 00:20:51 -!- imode2 has joined. 00:27:55 (It was a fun little exercise: start with a desired CRC32 value, then compute that string of 0s and 1s) 00:28:44 And don't use brute force; that's feasible, but boring. :) 00:29:50 this is why crc32 is not a cryptographic hash 00:30:53 Nor CRC64, nor CRC128 if that exists. 00:31:42 -!- imode2 has quit (Quit: Leaving). 00:37:44 so, not yet in repo, but the subroutines are literally named 01 through EF now 00:41:38 now it's in the repo 00:50:28 int-e: there's an IOCCC entry that modifies a file so that it contains its crc checksum formatted to text, I think 00:50:42 but yes, it's linear 00:52:34 Lykaina: I don't see why that would be better that just using absolute addresses inside those subroutines. the point of a stack would be that (a) it would let you use less memory than you need for all subs, (b) pass arguments so you can call the same subroutine from multiple call sites easily, (c) allow recursion. you might not care about all of that, in which case you just put the local variables of 00:52:40 each of the subroutines to separate memory areas 00:53:42 but even then my main complaint is that since your interpreter restricts memory access to the other parts of the memory, it's hard to pass arguments or return values to other subroutines, you have to use the global variables for it, in which case why do you not just put everything in global variables and get rid of the address translation instead? 00:54:15 Lykaina: however, if you want to limit the names of the subroutines to make storing the table of their code addresses simpler, that I could understand, but it is sort of restrictive 00:54:31 would just force the bookkeeping on the programmer 00:55:22 anyway, I don't know what you want to do with the interpreter, and you'll have to decide that 00:55:29 i'll get rid of the address translation and make everything global 00:55:40 int-e: right, it's a linear checksum, so brute force is way overkill 00:59:59 linear reminds me, https://www.perlmonks.com/?node_id=940327 01:04:05 that one is also a problem that's linear over the GF(2) field, you may try to solve it 01:04:24 b_jonas: better? 01:04:37 brb gotta eat 01:06:39 cpressey: ^ puzzle thingy, you might be interested as well 01:07:30 Lykaina: what is better? 01:09:11 fizzie: So according to the musl people, there's pretty much no cross-libc ABI. 01:09:36 If you compile your program with musl's crt.o it'll work with musl's ld.so/libc, and the same for glibc. 01:09:43 This seems like a bizarro situation to me. 01:10:08 Surely there *is* a de facto ABI, which is whatever programs compiled with gcc and its crt.o do. 01:10:27 -!- Sgeo__ has quit (Read error: Connection reset by peer). 01:10:38 But there are a lot of compatiblity issues across even versions of glibc, so who knows what that means. 01:10:51 -!- Sgeo__ has joined. 01:11:09 In practice I need to emulate what glibc's crt.o does, I guess. Which is calling __libc_start_main with rdx as an argument. 01:11:40 Note that Go *doesn't* call libc_start_main, so maybe Go programs only work by accident, since libc doesn't get to do its initialization in the usual way. 01:15:38 That's odd. 01:16:08 I know there's definitely a nonzero amount of things that go wrong if you write a program that just starts at _start but still links with (g)libc and calls into it. 01:16:15 I don't remember specific examples, but there were some. 01:16:52 -!- xkapastel has quit (Quit: Connection closed for inactivity). 01:17:14 "like exposing the list of TLS-providing modules, synchronizing changes to it, providing dl_iterate_phdr (access to unwind information for all libraries present), providing dlopen/dlsym/etc," 01:20:10 b_jonas: git commit -a -m "Removed a broken local addressing scheme." 01:22:49 -!- adu has quit (Quit: adu). 01:27:32 Go was in the top 10 (just barely, on spot 10) in the IEEE Spectrum's 2019 programming language popularity contest update. 01:29:17 -!- tromp has joined. 01:31:35 -!- tromp_ has quit (Ping timeout: 248 seconds). 01:33:23 fizzie: I was happier about go when I didn't know that it resorted to reflection for elementary things like sorting. 01:35:00 int-e: You can also use code generation. 01:35:34 Yay. C++ templates but without official language support. 01:35:48 `grwp negativ 01:35:49 absolute value:The absolute value of a number, also known as its cosign, is its distance from zero regardless of direction. It shouldn't be negative, but Sgeo is trying to break maths. 01:35:54 I think there is some official language support? 01:36:46 sounds like Sgeo 01:36:47 Is there now? I thought not... I thought it was some kind of 3rd party preprocessor. Maybe I'm wrong. 01:37:39 There's something called "go generate". 01:37:46 Maybe that's official tool support, not language support. 01:38:31 'Generate runs commands described by directives within existing files.' 01:39:42 I'd use Go except I don't want garbage collection. 01:40:41 is go an esolang? 01:40:58 Heh. 01:41:20 did you write it? 01:41:24 Lykaina: surprisingly we often end up discussing mainstream languages here as well. 01:41:33 oh 01:41:41 It's Google's language called "Go". 01:43:33 Did you learn programming in 6502 or in Glulx at all? Or some other one? 01:44:05 IIRC, Sgeo and I used to play Go between classes at uni. 01:44:37 Do you think assemblers should generate instructions like "mov $60, %eax" when you type "mov $60, %rax"? 01:44:56 The bytes generated are already ambiguous and the assembler has to pick an encoding. 01:45:47 Or is there an observable difference between moving a 32-bit immediate into eax and rax? 01:46:23 I don't know a lot about modern x86 assembly 01:46:38 So, I don't know what the encoding is. 01:46:56 shachaf: I'd be worried about operand size mismatches and resulting pipeline stalls, but I don't know whether that worry is justified. 01:47:26 Hmm, what do you mean? 01:48:27 At least in 6502, the standard syntax does not have a difference for zero page or absolute, I think, and that affects the operand size and the speed too. But NESASM/MagicKit requires < to indicate zero page addressing, which I think is better than the standard syntax. 01:48:47 shachaf: If you load eax and then use rax, does that confuse the processor? Or doesn't it because it always deals with the whole 64 bit register anyway? 01:49:46 shachaf: I recall that loading ax and then using eax caused pipeline stalls in earlier processors. Of course there the story was different; loading ax would preserve the top half of eax. 01:49:48 I see. You're thinking maybe something just looks at the instruction operand size and not the effect of the instruction. 01:50:25 I think loading 32-bit immediates into 64-bit registers is such a common idiom that I'd be surprised. But maybe there are effects in other cases. 01:50:36 I think modern x86 is too confusing, and that MMIX is better. 01:50:41 Also, loading ax *still* preserves the top 3/4 of rax, I found out in here the other day. 01:50:57 zzo38: I'd happily use a MMIX processor if you sent me one in the mail. 01:51:42 shachaf: Yeah it's probably fine... the fact that loading a 32 bit register clears the upper half cures the reason for those stalls (namely, that outputs of two instructions would potentially have to be merged). 01:51:53 (Old x86 also is less messy than modern x86, I think.) 01:52:08 `` llvm-mc 01:52:10 ​/hackenv/bin/`: line 5: llvm-mc: command not found 01:53:41 Does HackEso have a convenient way to type instructions and see what they assemble to, or type machine code and see what it disassembles to? 01:53:53 gtg 01:54:24 before i accidently say something someone doesn't want me to 01:54:30 -!- Lykaina has quit (Quit: leaving). 01:54:49 shachaf: Anyway. I don't know. For $60 I'd hope for a mov imm8, r/m64 operation, I think, and then realize that that doesn't exist, then spend the rest of the day wondering why that is. 01:56:12 Oh boy. You're using Intel names with AT&T order. 01:56:47 More productively, what do existing compilers/assemblers (llvm, gcc, as) do the processor software optimization manuals have anything to say on that? 01:57:52 oh, nice contraction. s/do the/do, and what do/ 01:58:21 shachaf: I have no excuse, but the fact that an immediate was involved saves me :P 02:00:46 `` echo 'int foo() { return 60; }' | gcc -O2 -c -x c -o /tmp/test.o - && objdump -d /tmp/test.o | grep -P '^ *\d+:' 02:00:49 ​ 0:b8 3c 00 00 00 mov $0x3c,%eax \ 5:c3 retq 02:02:30 I'm looking at the Intel optimization guide. 02:02:36 "12.2.2 Use Extra Registers to Reduce Register Pressure" 02:02:38 Thintel. 02:02:52 DEEP 02:03:40 didn't sparc attempt to solve register pressure by doing the opposite? 02:04:07 I mean, I guess register windows give you extra registers, but they're windowed 02:04:27 "Note that in Intel 64 architecture, an update to the lower 32 bits of a 64 bit integer register is architecturally defined to zero extend the upper 32 bits. While this action may be logically viewed as a 32 bit update, it is really a 64 bit update (and therefore does not cause a partial stall)." 02:09:43 int-e: Hmm, x86 has "ADD r/m64, imm8" 02:09:49 Which I probably knew but forgot about. 02:09:59 That makes your complaint more justified. 02:10:04 By complaint I mean wonder. 02:10:56 shachaf: Yes, it has that for all arithmetic operations, but not for loads. 02:11:34 And it has an push imm8 as well. 02:11:44 s/an/a/ 02:12:36 Yes, that's an odd. 02:12:56 Often you can get by with the arithmetic ones, as long as you have a known starting point. 02:13:02 `` echo 'mov $60, %eax' | as -o /tmp/test.o - && objdump -d /tmp/test.o | grep -P '^ *\d+:' 02:13:03 ​ 0:b8 3c 00 00 00 mov $0x3c,%eax 02:13:06 `` echo 'xor %eax, %eax; or $60, %eax' | as -o /tmp/test.o - && objdump -d /tmp/test.o | grep -P '^ *\d+:' 02:13:07 ​ 0:31 c0 xor %eax,%eax \ 2:83 c8 3c or $0x3c,%eax 02:13:11 Oh well. 02:13:40 shachaf: so ironically, xor rax,rax; add rax,60 is 5 bytes, one byte shorter than the mov eax,60 you'd envision. ... right, just like that 02:14:17 (for a 64bit target) 02:15:06 You mean the one with the rex prefix? Because it's the same size otherwise. 02:15:22 (As seen just above.) 02:15:28 `` echo 'xor %rax, %rax; or $60, %eax' | as -o /tmp/test.o - && objdump -d /tmp/test.o | grep -P '^ *\d+:' | sed 's/^[^\t]*\t//; s/ *\t/: /g' 02:15:29 48 31 c0: xor %rax,%rax \ 83 c8 3c: or $0x3c,%eax 02:15:37 mmm. 02:16:02 you're right, I made a wrong assumption about how 64 bit mode would work. 02:17:14 `mkx bin/as-encoding//echo "$1" | as -o /tmp/out.o - && objdump -d /tmp/out.o | grep -P '^ *\d+:' | sed 's/^[^\t]*\t//; s/ *\t/: /g' 02:17:16 bin/as-encoding 02:17:23 `as-encoding mov %rax, %rbx 02:17:24 48 89 c3: mov %rax,%rbx 02:17:38 Oh, \d is wrong, isn't it. 02:17:59 `mkx bin/as-encoding//echo "$1" | as -o /tmp/out.o - && objdump -d /tmp/out.o | grep -P '^ *[0-9a-f]+:' | sed 's/^[^\t]*\t//; s/ *\t/: /g' 02:18:05 bin/as-encoding 02:18:56 `as-encoding mov (%rbp), %rdi 02:18:57 48 8b 7d 00: mov 0x0(%rbp),%rdi 02:19:25 `asm mov eax, 60 02:19:26 0: b8 3c 00 00 00 mov eax,0x3c 02:19:28 There was that one already. 02:19:36 It's an intel variant, though. 02:19:37 `as-encoding mov (%r13), %rdi 02:19:38 49 8b 7d 00: mov 0x0(%r13),%rdi 02:19:45 Oh, that one's probably better. 02:19:51 I did ask! 02:19:52 `cat bin/asm 02:19:52 `asm mov rax, 60 02:19:52 ​#!/bin/sh \ echo "$1" > /tmp/asm.s; for o in ',' '-msyntax=intel -mnaked-reg,-M intel'; do if as ${o%,*} /tmp/asm.s -o /tmp/asm.o 2>>/tmp/asm.err; then objdump ${o#*,} -d --insn-width=20 /tmp/asm.o | sed -e "1,/0000000000000000/d" | perl -pe 'if (/^\s*(\w+:)\s*((?:\w\w )+)\s*(\S.*)$/) { ($a,$b,$c) = ($1,$2,$3); $_ = "$a $b ".($c =~ s/\s+/ /rg)."\n"; }'; exit; fi; done; cat /tmp/asm.err 02:19:53 0: 48 c7 c0 3c 00 00 00 mov rax,0x3c 02:20:17 `asm mov rdi, [r13]; mov rdi, [r15] 02:20:20 0: 49 8b 7d 00 mov rdi,QWORD PTR [r13+0x0] \ 4: 49 8b 3f mov rdi,QWORD PTR [r15] 02:20:50 `asm mov rax, 6061626364656667h 02:20:51 ​/tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: too many memory references for `mov' \ /tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: junk `h' after expression 02:21:00 `asm mov rax, 0x6061626364656667 02:21:01 0: 48 b8 67 66 65 64 63 62 61 60 movabs rax,0x6061626364656667 02:21:37 is `asm` based on `nasm`? 02:21:47 No, it's still as. 02:22:13 `asm mov $60, %rax 02:22:14 0: 48 c7 c0 3c 00 00 00 mov $0x3c,%rax 02:22:15 Actually, looks like it guesses. 02:22:23 Oh boy, it tries both syntaxes. 02:22:33 An assembler with a conditional? as if! 02:22:49 It tries as + objdump without options, and if that fails it tries "-msyntax=intel -mnaked-reg" for as and "-M intel" for objdump. 02:22:54 That's kind of clever. 02:23:41 `asm movb $60, 60 02:23:42 0: c6 04 25 3c 00 00 00 3c movb $0x3c,0x3c 02:24:03 now wth is that c7 c0 instruction. 02:24:46 C7 /0 MOV r/m32, imm32 02:24:52 MOV r/m64, imm32? 02:24:54 `asm movd $60, (%rsi) 02:24:55 ​/tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: operand size mismatch for `movd' \ /tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: operand size mismatch for `movd' 02:25:13 `asm movq $60, (%rsi) 02:25:14 0: 48 c7 06 3c 00 00 00 movq $0x3c,(%rsi) 02:25:21 ah. 02:25:32 `cwlprits bin/asm 02:25:34 No output. 02:25:37 uh 02:25:40 `culprits bin/asm 02:25:42 fizzïe fizzïe fizzïe fizzïe fizzïe fizzïe fizzïe fizzïe fizzïe fizzïe shachäf shachäf ais52̈3 shachäf shachäf ais52̈3 ais52̈3 ais52̈3 ais52̈3 ais52̈3 ais52̈3 ais52̈3 ais52̈3 ais52̈3 Gregör Gregör 02:25:56 Can you add a feature where it prints the encoding in octal? 02:26:37 I guess that'd be handy for the ModR/M byte. 02:26:51 Not going to start doing that right now though. 02:27:16 It's handy for a bunch of other things too. 02:27:47 Anything that names a register, for instance. 02:27:48 `asm movq $0x6061626364656667, (%rsi) 02:27:49 0: 48 89 34 25 00 00 00 00 mov QWORD PTR ds:0x0,rsi 02:28:15 `asm movq $6061626364656667, (%rsi) 02:28:17 0: 48 89 34 25 00 00 00 00 mov QWORD PTR ds:0x0,rsi 02:28:42 that's confusing. 02:28:52 It's confusing because it's treating it as Intel syntax. 02:29:20 And treating the $ as part of a symbol? 02:29:24 Since it fails as AT&T syntax because the only instruction with a 64-bit immediate is mov r64, imm64 02:29:24 `asm movq [rsi], 0x6061626364656667 02:29:25 ​/tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: invalid char '[' beginning operand 1 `[rsi]' \ /tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: operand size mismatch for `movq' 02:29:29 Right. 02:29:42 That's unfortunate. 02:29:52 `as-encoding movq $6061626364656667, (%rsi) 02:29:53 ​{standard input}: Assembler messages: \ {standard input}:1: Error: operand size mismatch for `movq' 02:30:08 fair enough 02:30:24 I guess that's kind of an issue with all these "just try all the ways" things, there's a similar thing with the C one that tries with and without a main wrapper. 02:30:27 `asm mov eax, 60; mov rax, 60 02:30:29 0: b8 3c 00 00 00 mov eax,0x3c \ 5: 48 c7 c0 3c 00 00 00 mov rax,0x3c 02:30:31 Actually, why *is* that second one REX.W + C7 /0, and not REX.W + B8+ rd? 02:30:49 Oh, because that's the imm64. 02:30:56 Right. 02:30:58 yeah it's shorter this way 02:31:16 What a nice and orthogonal instruction set. 02:31:34 I've forgotten what /0 means. 02:31:38 Yes, it's a thing of pure beauty. 02:31:40 Is it the reg part of the modr/m byte? 02:32:01 Yes. 02:32:06 yes, /0 puts something in the mod r/m byte 02:32:19 I've also forgotten what rd means. 02:32:58 destination register? 02:33:03 I dunno. 02:33:06 It's "+rd", means adding a register code for a doubleword register to the byte on the left. 02:33:25 The pages just seem to format it with the + closer to the byte it gets added to. 02:33:34 But B8...BF are all mov rd, imm32 instructions 02:34:09 Why do they say "REX.W +"? 02:34:18 `asm inc rax 02:34:19 0: 48 ff c0 inc rax 02:34:22 Yes, and "B0+ rb" makes B0 .. B7 ones that are r8, imm8 ones. 02:34:39 This is all way simpler in base 8, hth. 02:34:41 Well, not strictly imm8. But the "d" is for size, not for "destination". 02:35:06 They say "REX.W +" because it was the 64-bit variant, which needs the REX prefix with the W bit set. 02:35:09 fizzie: yeah I got that a moment too late 02:35:20 But the + just means concatenation there? 02:35:29 Yes. 02:35:35 Or does it mean you add (or) the other REX bits or something 02:35:36 ? 02:35:37 OK. 02:35:39 The + that means "add to the value" is typeset slightly differently. 02:35:44 Oh. 02:35:48 I was looking at https://www.felixcloutier.com/x86/mov 02:36:19 Well, by "typeset" I really meant the whitespacing, which they've accurately reproduced. 02:36:26 The symbol itself looks the same. 02:37:03 But the spacing looks like "REX.W + B8+ rd" so you can arguably tell what kind of + it is. 02:37:37 the space before the "rd" is a bit odd 02:38:12 But e.g. https://www.felixcloutier.com/x86/jmp just says "REX.W FF" 02:38:13 It's odd especially because the interpretation guide says: "+rb, +rw, +rd, +ro". 02:38:30 (And so does the Intel manual, which I've now opened.) 02:38:42 shachaf: My version of the Intel manual says "REX.W + FF /5". 02:38:47 For JMP m16:64, anyway. 02:39:32 Really? Which version? 02:39:35 m16:64, hmm. 02:39:39 https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-vol-1-2abcd-3abcd.pdf PDF page 1072 says REX.W FF 02:39:56 I'm not sure where the version number is in this thing. 02:40:35 I know what the REX.W means but I was confusil about the +. 02:41:09 It says "Order Number: 325462-041US" and "December 2011" on the first page. 02:41:24 So they have broken it somewhere between 2011 and 2019. 02:42:13 Although arguably the "+"-free version is more logical, because that's how concatenation works most of the time there. 02:42:35 Hmm the version that I downloaded in June says REX.W FF /5 02:42:36 But this manual still has +s for mov. 02:43:35 I suspect I downloaded the 2011 version in 2011, and have not updated it since then. 02:43:44 the intel manuals often use illogical notation elsewhere too, in the pseudocode that describes instruction semantics 02:43:55 but for the mov it has, REX.W + B8+ rd io 02:43:57 it's a confusing manual 02:46:06 or maybe a confusil manual 02:46:11 or a confus manual 02:46:13 dunno 02:48:10 There was some specific overlong encoding which objdump represents using a pseudoregister eiz/riz to represent zero. 02:48:18 `asm .byte 0x88, 0x04, 0xa0 02:48:19 0: 88 04 a0 mov %al,(%rax,%riz,4) 02:48:42 The ones with a SIB byte that specify the row that doesn't do any scaling. 02:49:08 `asm .byte 0x88, 0x04, 0xe0 02:49:09 0: 88 04 e0 mov %al,(%rax,%riz,8) 02:49:40 Gives it a way to disambiguate, but I'm not sure how useful that is because I'm pretty sure there still some ambiguous cases where different bytes give the same text. 02:49:44 * int-e blinks 02:49:57 There's a %riz? 02:50:04 Not really. 02:50:26 Oh, you explained it there. 02:50:29 But there's a SIB byte encoding for each of the scaling levels (1, 2, 4, 8) that doesn't actually add a scaled register. 02:50:43 `asm .byte 0x88, 0x04, 0x20 02:50:44 0: 88 04 20 mov %al,(%rax,%riz,1) 02:51:05 `asm .byte 0x88, 0x00 02:51:06 0: 88 00 mov %al,(%rax) 02:51:10 -!- ArthurStrong has joined. 02:51:51 fizzie: do they have that in 32 bit mode too? 02:52:01 Yes, it's just called %eiz. 02:52:13 fun. 02:52:49 ndisasm shows both 88 04 20 and 88 00 as just `mov [rax], al`. 02:54:21 It's very convenient that x86 has a 3-operand add. 02:55:00 On the other hand: 02:55:01 `asm .byte 0x88, 0xc2, 0x8a, 0xd0 02:55:04 0: 88 c2 mov %al,%dl \ 2: 8a d0 mov %al,%dl 02:55:22 There's no disambiguating that thing. 02:55:52 But maybe there was some more specific way of showing it with eiz/riz than simply making it look different. 02:55:57 s/way/reason/ 02:56:37 fizzie: well, those encodings of mov dl, al have the same size 02:57:18 And as I understood it, the %riz actually makes a difference (since it adds a SIB). 02:57:27 is there a service that lets you run short programs on lots of different x86 architectures/families? 02:57:39 would be interesting to see if either encoding is uniformly faster 02:57:56 Oh, nitpick: "SIB = scaled index byte", so "SIB byte" is redundant. 02:58:01 `asm .byte 0xb0, 0xff, 0xc6, 0xc0, 0xff 02:58:05 0: b0 ff mov $0xff,%al \ 2: c6 c0 ff mov $0xff,%al 02:58:05 int-e: Those aren't the same size. 02:58:23 `asm .byte 0110, 0146, 0213, 0364 02:58:24 0: 48 rex.W \ 1: 66 8b f4 mov %sp,%si 02:58:32 fizzie: hmm, good point. 02:58:53 does as even accept the riz stuff... 02:59:00 `asm mov %al,(%rax,%riz,1) 02:59:02 ​/tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: bad register name `%riz' \ /tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: missing ')' \ /tmp/asm.s:1: Error: bad expression \ /tmp/asm.s:1: Error: junk `riz' after expression 02:59:10 I think it's not accepted on the input side. 02:59:30 It may just be an objdump peculiarity. 02:59:38 Should my assembler have different names for different register sizes? 02:59:50 That's another thing, why aren't these dump things ever round-trippable? 03:00:17 Your assembler/disassembler pair should have the property that (assemble . disassemble) is identity. 03:00:42 I wasn't going to have a disassmller, which lets me sidestep this requirement. 03:01:02 Do you think the assembler should always use an unambiguous name for unusual encodings? 03:01:13 I think it should add a footnote. 03:01:27 Or possibly a hover-tip. 03:01:38 Oh, I was still in the disassembler mindset, sorry. 03:01:57 I guess that could apply to an assembler as well, if it reads in a footnote. 03:02:14 . o O ( mov dl, al ) 03:02:47 `asm .byte 0213, 0303; .byte 0211, 0330 03:02:48 0: 8b c3 mov %ebx,%eax \ 2: 89 d8 mov %ebx,%eax 03:03:08 fizzie: Well, really I meant disassembler. 03:03:22 It's a tricky question what a /sane/ syntax for this would look like. 03:03:26 Disassembling the above two the same way doesn't seem that bad to me. 03:04:13 int-e: `mov 𝔞𝔩, 𝕕𝕝` vs. `mov 𝕒𝕝, 𝔡𝔩`. 03:04:16 It's a very niche case where you want to distinguish them. And different versions of an assembler could switch between encodings, so you'd be breaking some backwards compatibility by writing one of them out as nonstandard. 03:04:22 -!- FreeFull has quit. 03:04:24 fizzie: I see boxes :) 03:04:38 Maybe that's not so bad, and it wouldn't actually break compatibility meaningfully to have a default. 03:04:44 Maybe it'll work at http://esolangs.org/logs/2019-09-08.html#lif 03:05:17 `asm .byte 0211, 0303; .byte 0213, 0330 03:05:18 0: 89 c3 mov %eax,%ebx \ 2: 8b d8 mov %eax,%ebx 03:05:29 `asm mov %eax, %ebx 03:05:29 0: 89 c3 mov %eax,%ebx 03:05:33 `asm mov ebx, eax 03:05:34 0: 89 c3 mov ebx,eax 03:05:42 fizzie: yeah it works in logs (I had made my way to tunes) 03:05:47 I guess I should use the 0x89 encoding. 03:06:19 maybe just put appendices on the mnemonic... mov.mr and mov.rm 03:06:24 shachaf: I wonder if they settled on that just because 0x89 < 0x8b. 03:06:27 -!- Sgeo_ has joined. 03:06:54 Wait, those are the same assembler so it's not surprising that both syntaxes used the same encoding. 03:07:04 For some reason I was thinking it was nasm because it was mentioned earlier. 03:07:35 nasm does use 89 as well though. 03:08:01 godbolt.org has a checkbox to show the instruction encoding rather than just assembly. 03:08:07 But it doesn't work when you set the language to assembly! 03:08:18 I seem to recall that some people use variant instruction encodings for watermarking software. 03:08:26 int-e: That suffix thing rings a bell, I think there was a university course that did that for an x86 variant. 03:08:37 I opened an issue: https://github.com/mattgodbolt/compiler-explorer/issues/1567 03:08:39 That it used as the target, it was a course on compilers. 03:08:55 I tried to fix it locally but then it needed a new version of node.js to build so I gave up on it. 03:09:26 Oh, is Godbolt just their surname? 03:09:44 Yes. 03:09:45 I thought it was reference to a thunder deity or something. 03:09:49 In any case, as much as I'd like a round-trippable disassembler/assembler, I also want a noiseless disassembler that just conveys the semantics. 03:10:00 Though their Twitter nick is now "Matt Compiler-Explorer". 03:10:07 Heh. 03:10:10 So round-trippability should be an option, probably not even enabled by default. 03:10:36 -!- Sgeo__ has quit (Ping timeout: 268 seconds). 03:11:15 Must be odd to have your name forever associated with a thing that way. 03:11:24 Although I guess it's more or less the same for mathematicians. 03:12:12 it's already weird when you're just cited in a paper. "As showed, ..." 03:12:25 Am I right I can simulate Haskell-like lazy evaluation in Scheme if I add "lazy" on every function's argument? 03:12:39 would be weirder to have your IRC nick cited in that way 03:12:48 Hooloovo0: yes. 03:13:19 also I wouldn't at all be surprised if someone cited this channel in a paper 03:13:49 Unfortunately "esoteric" is kind of unsearchable. 03:14:44 #esoteric will remain esoteric, I guess 03:15:12 http://sro.sussex.ac.uk/id/eprint/46869/ "cites" (well, refers in the text) to the wiki, though. 03:16:19 I wonder, do compilers nowadays use the ah-style registers? 03:16:53 shachaf: yes, to generate FPU code 03:16:55 how do you mean? I'd expect them to just be subregisters of the big ones, right? 03:17:10 shachaf: which are rare today... substituted by SIMD code 03:18:17 They are subregisters, but you only get them for four registers. 03:18:38 And I wonder whether there's actually much use for them. 03:18:59 shachaf: in SIMD? yes, they are used. when you pack smaller values into a register... 03:19:05 -!- tromp_ has joined. 03:19:20 What does SIMD have to do with it? I'm confusil. 03:20:27 shachaf: you can say SIMD registers have subregisters... 03:20:34 shachaf: or you talk about x86 GPR? 03:20:36 Hmm, apparently it is used. 03:20:44 I'm talking about ah/ch/dh/bh 03:21:07 I guess things like "or $0x80,%ah" are justified. 03:21:18 shachaf: so I say, AH is used in the code working with 80-bit FPU STx registers 03:21:42 https://godbolt.org/z/adJb7o used ah. 03:21:45 -!- tromp has quit (Ping timeout: 250 seconds). 03:22:39 couldn't find anything in google scholar, but there were a couple that linked to the wiki 03:22:50 Not quite sure why it made it `xor ah, ah; or ah, 18` instead of `mov ah, 18` but maybe there's a reason. 03:23:01 Or maybe it just couldn't quite grasp the intent of the code. 03:23:05 shachaf: https://github.com/DennisYurichev/RE-for-beginners/blob/master/patterns/12_FPU/3_comparison/x86/MSVC/MSVC_EN.asm 03:23:08 also one which talked about writing IRC bots in weird languages 03:23:19 shachaf: test eax, ... would work here, but test AH, is shorter ins 03:23:47 Yes. 03:23:50 fizzie: just a reason for shorter code 03:24:05 ArthurStrong: `xor ah, ah; or ah, 18` is not shorter than `mov ah, 18`. 03:24:11 Hmm, I guess "sub rsp, 8" is just to keep the stack aligned? 03:24:12 fizzie: OK, maybe I wrong... 03:24:40 `asm xor ah, ah; or ah, 18; mov ah, 18 03:24:41 0: 30 e4 xor ah,ah \ 2: 80 cc 12 or ah,0x12 \ 5: b4 12 mov ah,0x12 03:25:00 whoa, that's bizarro 03:25:42 I assume it might have something to do with the fact that the natural translation of `x &= ~0xff00u` is `xor ah, ah` while the one for `x |= 0x1200` is `or ah, 0x12`. 03:25:57 But I couldn't think of a more obvious way to say "replace the second byte". 03:26:08 Attempting to go via the pointer route just made it actually play around with memory. 03:26:11 Maybe the union trick. 03:26:14 fizzie: compiler isn't good enough to optimize this out? 03:26:33 -!- Sgeo has joined. 03:27:09 Yes, for https://godbolt.org/z/jUPnPk it creates the expected code. 03:27:10 clang has an entirely different encoding which doesn't use ah. 03:27:51 (The stack adjustments changed because I had -Os for the second but -O2 for the first.) 03:28:11 The size-optimized `push rax` and `pop rdx` are kind of funny though. 03:28:34 push rzi 03:29:34 -!- Sgeo_ has quit (Ping timeout: 244 seconds). 03:30:40 I bet most of these optimizations don't matter that much. 03:31:37 I'd like to have a thing try different subsets of optimizations on a program to measure their impact and see which ones matter. 03:43:42 -!- ArthurStrong has quit (Quit: leaving). 03:54:22 Do you think this implementation of robot find kitten is good enough now? https://arin.ga/5wx9UE 04:03:58 -!- Lykaina has joined. 04:05:36 hi 04:08:02 b_jonas, et al: rewrote S to load 8 bytes directly into ram 04:13:14 also, first time i used what i believe to be an indirect load in a sample 04:19:09 -!- Lykaina has quit (Quit: leaving). 05:40:52 -!- clog has quit (Ping timeout: 245 seconds). 06:25:04 -!- emma has joined. 06:43:16 `? tanebventions: math 06:43:17 Mathematical tanebventions include D-modules, Chu spaces, the torus, Stephen Wolfram, Klein bottles, string diagrams, linear logic, the reals, Lambek's lemma, Curry's paradox, Stone spaces, algebraic geometry, locales, and histograms. 06:43:21 `? locale 06:43:23 Locales are just frames, which are just complete Heyting algebras. Taneb accidentally invented them by asking about lattices. The only locale available in #esoteric is en_NZ.UTF-8. 06:43:35 Taneb: What did you ask about lattices? 06:43:58 Also, do you know the answer to this question: Why do topologists like bases more than subbases? 07:17:21 -!- Spexty has quit (Remote host closed the connection). 07:35:52 [[Intramodular Transaction]] https://esolangs.org/w/index.php?diff=66017&oldid=65958 * Hakerh400 * (+36) Updated computational class. 07:36:37 [[Intramodular Transaction]] M https://esolangs.org/w/index.php?diff=66018&oldid=66017 * Hakerh400 * (+12) 07:37:02 -!- clog has joined. 08:19:50 -!- Frater_EST has joined. 08:20:17 -!- Frater_EST has left. 08:48:52 -!- Sgeo_ has joined. 08:50:51 -!- Lykaina has joined. 08:52:07 -!- Sgeo has quit (Ping timeout: 245 seconds). 09:42:31 fizzie: SIB encoding with no index register => there is a redundant encoding, sure, and it's useful for RIP-based addresses, but doesn't the x86 manual say that the scale must be 1 when there's no index register? 09:45:20 shachaf: unambiguous name for unusual encodings => I don't think so, except for those unusual encodings that have some advantage why you want to use them, because normally you don't gain anything by using a longer encoding than the shortest one 09:45:44 there are a few cases like nops of a specific length and two-byte ret where you may gain something 09:46:26 Should assemblers encode "mov $60, %rax" the same way as "mov $60, %eax"? 09:46:55 [[Seed]] https://esolangs.org/w/index.php?diff=66019&oldid=63558 * Palaiologos * (+4284) 09:48:01 though of course, that only works if the assembler knows about the latest version of x86, because there are instructions like the prefixed jumps that were overlong encodings on earlier cpus but have a meaning why you want to use them on later ones 09:50:38 shachaf: do compilers use the ah-style registers => I hope so, because xchg %al, %ah or similar is the recommended way to byteswap a 16-bit word, and that comes up sometimes eg. when loading a PPM 09:51:09 Hmm. 09:51:23 You could probably use SIMD instructions to do it better. 09:55:17 Lykaina: hmm, that could work. it's strange that it (the S instruction) only loads single bytes into the words, but I guess you want to use this for hello world messages and such 09:56:31 shachaf: for more than one word, sure. you can even use general register instructions to do it faster on four words at a time. not for just one word though. 09:57:06 but you already gave better examples, for arithmetic with a constant in the second byte 10:01:14 -!- xkapastel has joined. 10:03:02 Ugh, why does this instruction set have so many special cases? 10:04:19 shachaf: because of historical reasons, plus there are optimizations that make it run on the hardware better at the time the instruction encoding is defined, even if it looks uglier 10:04:40 sadly some of those optimizations become pessimizations a decade later 10:05:19 Should I use ARM instead? 10:05:28 no 10:05:36 use x86_64 because it has fast cpu implementations 10:05:53 I want to support at least both of those eventually. 10:06:01 you can of course ignore some of the more esoteric features when generating code, such as the x87 instructions 10:06:09 and the MMX instructions 10:09:03 `asm .byte 0x48, 0x8b, 0x5d, 0x00 10:09:04 0: 48 8b 5d 00 mov 0x0(%rbp),%rbx 10:09:06 `asm .byte 0x48, 0x8b, 0x9d, 0x00, 0x00, 0x00, 0x00 10:09:07 0: 48 8b 9d 00 00 00 00 mov 0x0(%rbp),%rbx 10:09:15 hm 10:09:52 `asm mov (%rax,%rsp,1), %rbx 10:09:53 ​/tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: `(%rax,%rsp,1)' is not a valid base/index expression \ /tmp/asm.s: Assembler messages: \ /tmp/asm.s:1: Error: missing ')' \ /tmp/asm.s:1: Error: junk `)' after expression 10:09:56 `asm mov (%rax,%rbp,1), %rbx 10:09:57 0: 48 8b 1c 28 mov (%rax,%rbp,1),%rbx 10:10:15 I guess that's not so bad. 10:11:14 try backwards, (%rsp,%rax,1) 10:11:54 Well, that works with 1 but not with 2. 10:23:06 that is deliberate. the cpu is optimized for the case when %rsp points to the stack, in which case you don't want to multiply it with 2. this isn't required, you can use %rsp as a regular register, but you need more instructions to encode with it then, and a sigaltstack call to make sure whatever it points to won't get clobbered from a signal 10:26:18 Yes. 10:30:53 %r12 is a ca... unintended victim, you also can't use it as a scaled index 10:31:58 ``` grep -E '\' share/dict/12dicts/Lemmatized/2+2+3frq.txt 10:31:59 casualty \ causality \ constitutionality 10:32:02 yeah, one of those 10:34:48 -!- Lord_of_Life has joined. 11:17:52 `? enrichment center 11:17:52 `? enrichment 11:17:53 enrichment center? ¯\(°​_o)/¯ 11:17:54 enrichment ? ¯\(°​_o)/¯ 11:17:59 hmm 11:41:18 -!- arseniiv has joined. 11:52:40 [[Nop]] M https://esolangs.org/w/index.php?diff=66020&oldid=64701 * A * (+18) 12:16:12 * Lykaina yawns 12:26:51 -!- GeekDude has quit (Ping timeout: 265 seconds). 12:28:51 -!- GeekDude has joined. 12:29:22 so 12:29:26 -!- FreeFull has joined. 12:30:50 dreamed a got a legit call from microsoft about an account i hadn't used since high school 12:33:43 eh no. if it's a call you got and they claim to be from microsoft, then it's a scam, and you shouldn't give them your personal details. even if they call you in your dreams. if this happens often, you'd better learn Occlumency to make sure you don't give away anything sensitive through a dream bridge. 12:34:09 lol 12:34:55 (wasn't a real rl account) 12:35:40 so the dream sifters got garbage 12:35:45 the call centers are in india, so they sometimes call you while you're asleep because of timezone differences 12:39:02 when you get such a call, just hang up. it's not rude. 12:40:58 -!- xkapastel has quit (Quit: Connection closed for inactivity). 12:42:01 we don't have those scams here yet, I only know about them from the internets, but we get our fair share of other creative scams 12:42:50 i can't believe i used to play Go, don't even remember the rules, but i remember doing so with [a friend] in college in the coffee lounge at one of the tables. 12:43:51 that's normal. you sometimes have to try things like that before you realize they're not for you. 12:44:55 i only remember because i was trying to remember everything i could about [said friend]. 12:45:09 heck, I tried chess and bridge while I was younger, and even bouldering once. none of them are my ideas of a good time, and I know that now. 12:47:00 you know who i'm talking about, right? It's someone here i don't feel like pinging atm. 12:49:37 they were like my best friend in college. they know who they are. 12:51:00 but then the go board game got between the two of you 12:51:22 huh? 12:52:55 i dropped out and moved away. 12:54:31 they graduated and got a job. the only "job" i've ever held was volunteering stuffing envelopes at a political office. 12:56:32 (i can't work now. technically disabled.) 12:59:50 seems my pandora station loves "imagine dragons" 13:59:59 b_jonas: have you seen the current "hello world" program, using the new S op? 14:08:32 http://sif.lesidhetree.com/sara/echidna/echidna_v0_01a6.pdf if this makes it any easier 14:11:29 [[*]] M https://esolangs.org/w/index.php?diff=66021&oldid=65073 * Gamer * (+0) /* Javascript */ 14:14:29 [[*]] https://esolangs.org/w/index.php?diff=66022&oldid=66021 * Gamer * (+263) /* Interpreters */ 14:15:48 [[*]] https://esolangs.org/w/index.php?diff=66023&oldid=66022 * Gamer * (+28) /* Examples */ 14:28:41 -!- xkapastel has joined. 14:28:42 [[+-]] https://esolangs.org/w/index.php?diff=66024&oldid=65875 * Gamer * (+234) /* Interpreters */ 14:29:00 [[+-]] https://esolangs.org/w/index.php?diff=66025&oldid=66024 * Gamer * (+5) /* Python 3 */ 14:29:49 [[+-]] https://esolangs.org/w/index.php?diff=66026&oldid=66025 * Gamer * (+245) /* Interpreters */ 14:30:33 [[+-]] https://esolangs.org/w/index.php?diff=66027&oldid=66026 * Gamer * (+42) /* Python 3 */ 14:36:21 [[+-]] https://esolangs.org/w/index.php?diff=66028&oldid=66027 * Gamer * (+2) /* Python 3 */ 14:36:31 [[+-]] https://esolangs.org/w/index.php?diff=66029&oldid=66028 * Gamer * (+2) /* Python 3 */ 14:37:19 [[+-]] https://esolangs.org/w/index.php?diff=66030&oldid=66029 * Gamer * (+342) /* Interpreters */ 14:38:28 [[+-]] https://esolangs.org/w/index.php?diff=66031&oldid=66030 * Gamer * (+121) /* Interpreters */ 14:38:57 [[+-]] https://esolangs.org/w/index.php?diff=66032&oldid=66031 * Gamer * (+2) /* Python 3 */ 14:39:11 [[+-]] https://esolangs.org/w/index.php?diff=66033&oldid=66032 * Gamer * (-2) /* Python 3 */ 14:45:17 -!- MrBismuth has joined. 14:48:09 -!- MrBusiness3 has quit (Ping timeout: 250 seconds). 14:51:35 -!- Phantom_Hoover has joined. 15:04:15 -!- Spexty has joined. 15:06:39 hi Spexty 15:33:37 hi 15:35:47 currently working on v0.01a7. G is currently null, K is what G used to be [STOP]. 15:36:19 hmm why did you change that 15:36:21 do you need null? 15:36:30 or do you just want it 15:36:30 lol 15:36:33 i need a placeholder 15:36:34 hmm telegraphing changes 15:36:48 placeholder? 15:36:49 for what 15:36:52 idk if I follow 15:36:55 unsure 15:37:04 why do you need a placeholder 15:37:22 because i have an opening now 15:37:31 oh at G lol 15:37:57 the K op didn't even work 15:38:03 before 15:38:07 what was K 15:38:21 http://sif.lesidhetree.com/sara/echidna/echidna_v0_01a6.pdf if this makes it any easier 15:38:30 probably does lol 15:40:11 think i used the wrong git tag options for 0.01a6 15:41:39 does J output a number 15:41:54 a char 15:41:57 oh 15:42:22 i mean maybe you could just make G output as number 15:42:27 unless you already have that and I just didn't see it 15:45:01 so G would output the value as a formatted number? 15:45:28 instead of as a char? 15:45:55 yeah 15:46:07 i'll try it 15:46:07 like if the value is 100, J would output 'd' but G would output 100 15:50:23 good idea 15:51:25 thx 15:51:46 it'd make printing numbers a lot easier 15:56:07 -!- Spexty has quit (Ping timeout: 260 seconds). 16:01:46 done 16:01:53 pushed 16:03:40 https://github.com/lykaina/echidna 16:04:14 i'll make the compiled documentation in a moment 16:31:57 http://sif.lesidhetree.com/sara/echidna/echidna_v0_01a7.pdf 16:32:10 good morning all 16:32:17 hi kmc 16:32:40 hi kmc 16:34:17 what's new? 16:37:39 was working on Echidna 16:38:49 Lykaina: yeah, you have a flat memory space and indirect addressing, so you can easily write programs that use non-small arrays 16:39:06 such as a maze generator or minesweeper or suchlike 16:39:24 (although you could fit those into the 4 kiloword global address space of earlier versions too, to be frank) 16:40:21 that was a stupid addressing system. now i leave it up to the programmer to determine one 16:41:36 I think I have a case of the autumn sadness, already. Hopefully it’ll go away and won’t return ever 16:41:47 anything standing out? 16:42:06 as bad, i mean, compared to the rest? 16:42:21 Lykaina: are you also planning to reorganize the interpreter so it doesn't seek once for every instruction executed, and once per program byte at every jump? 16:42:36 nah, once per program byte at every subroutine call only 16:42:52 no wait, it was five times per program byte at every subroutine call iirc 16:42:56 anyway, 16:42:59 3 now 16:43:10 are you planning to rearrange the code so it doesn't seek as much? 16:43:27 i think i know what to do 16:44:17 if it works, it might become v0.02 16:44:45 it's v0.01a7 now 16:45:02 there’s some vague magic in versions going up 16:47:13 I want to do something but I don’t want to do any particular things coming to mind 16:48:59 it probably means I underslept but I don’t feel other symptoms of that 16:50:10 read a book 16:54:23 b_jonas: I read a few chapters of a web serial already but you’right maybe I’ll find solace in watching a series about Clifford algebras, I’m stuck at the introductory part which I basically know (but there would be an overal plan of the lectures ahead at the end of this episode) 16:54:40 s/you’right/you’re right 16:54:57 see I’m even sloppy at that extent 16:56:12 I’m lazy to put earphones on :((( 17:00:45 who needs neighbours anyway 17:03:05 I have no speakers currently :) 17:03:49 so either I put them on or I don’t listen to anything. And I’m still not done 17:05:18 arseniiv: long shot, but are you in Cambridge? 17:05:24 I have inferred all these things about planning with immediate rewards all the way to the goal of a plan but I just can’t 17:05:36 Taneb: uh, no 17:05:39 OK 17:06:12 My plan of using you as an excuse to socialise has been foiled 17:06:18 if I’d be there maybe I’d have a way better outlook on life :) 17:06:22 oh 17:06:29 b_jonas: look now 17:06:37 i think i got it 17:10:08 okay I’ll try not to whine here, this is a good place and I’m not that depressed if I admit it to myself. And yesterday it wasn’t that bad so tomorrow shouldn’t be either. Though my planning issues wouldn’t go anywhere 17:14:05 can someome look at nextiw() and findand() in https://github.com/lykaina/echidna/blob/master/src/echidna.c and let me know if they make sense? 17:20:15 i know it works, i just want to make sure it does it in a more effecient way 17:30:43 am i getting a silent treatment? 17:38:41 Lykaina: please don’t think so 17:39:12 I bet b_jonas or someone is just busy right now 17:42:08 -!- MDude has joined. 17:42:34 oh, okay. i'm a little impatient. 17:42:56 it's a personality flaw 18:06:02 I was writing a survey software, and perhaps there should be some function to specify that a question does not apply according to some condition, such as the answer to a previous question. 18:19:05 zzo38: you could start with a simple boolean tag system: some answer options are tagged and some questions are marked with prerequisite tags, maybe negations of tags and complex boolean formulas with tags 18:19:05 for example Question 1 has Answer 1 tagged with A and Answer 2 tagged with A, B; Question 2 has Answer 1 tagged with B; there are no other tagged answers, and Question 3 has prerequisites A, B. Then it’s only viable when (Q1 A1, Q2 A1) or (Q1 A2) were picked 18:19:05 or Question 4 has prerequisite !B, then it’s not viable when (Q1 A2) or (Q2 A1) were picked 18:20:23 Yes, that could be one way to do it 18:21:00 (of course the survey creator would name their tags in more sensible manner in the survey’s code) 18:21:15 zzo38: good luck! 18:27:22 -!- imode has joined. 19:09:12 -!- MDude has quit (Ping timeout: 245 seconds). 19:20:48 Lykaina: that's certainly better than what you had, because findand reads the file in one pass without seeking, and nextiw reads the instructions that you are skipping in one pass. 19:22:21 Lykaina: however, I think they don't keep the promise that whitespace is ignored, and in fact it looks as if nextiw tried to distinguish the __ from the _ statement by assuming that the __ doesn't have what looks like label right after it (it has whitespace) but the _ has the label immediately after 19:22:34 so maybe you should skip whitespace when you're reading the file 19:24:14 Lykaina: hoever, (1) the main loop that's reading instructions in sequence is still seeking before every instruction, and I think you could improve on that because it's supposed to be reading instructions in sequence usually (when there's no jump or subroutine call executed), 19:25:02 Lykaina: and I still don't like how nextand works, because it has to read the whole file for every subroutine call. ideally it would be nicer if you read the file just once, preferably store all to memory, but at least just store the addresses and names of all subroutines to memory 19:25:12 also I nominate zzo38 to look at the code 19:26:04 zzo38: you want to be able to disable questions depending on answers to previous questions? that could work 19:26:56 zzo38: don't forget to add calendar time subtraction primitive then, to skip questions for users who claim to be under a certain age 19:27:16 you don't want people to try to write those themselves 19:41:44 Why won't Bugzilla let me put in my own value for the "csv_colsepchar" setting? I get a error message: The value "" is not in the list of legal values for the csv_colsepchar setting. 19:42:10 (The paste isn't working here; the value I put in is a tab, and this IRC client won't paste it.) 19:43:41 is this for exporting? 19:43:43 -!- Sgeo__ has joined. 19:47:08 -!- Sgeo_ has quit (Ping timeout: 268 seconds). 19:54:47 AAAAAAAAAAAAAAAAAAAAAA 19:55:20 I bought the wrong non-refundable thing 19:55:22 darn 19:55:36 I noticed it too late 19:55:48 so much wasted money 20:02:04 let me see... maybe they can refund it if I request it early enough, there's something like that in the rules 20:02:32 * Lykaina wakes 20:03:04 oh whew, I think it can be changed (for a fee) 20:03:18 (a fee that doesn't cost nearly as much as throwing away the whole thing) 20:04:14 they allow changes within 12 hours, luckily 20:08:25 -!- xkapastel has quit (Quit: Connection closed for inactivity). 20:09:21 brb gotta eat lunch 4 hours late 20:12:12 -!- Melvar has quit (*.net *.split). 20:12:36 -!- Melvar has joined. 20:22:00 -!- imode has quit (Ping timeout: 258 seconds). 20:25:59 -!- Phantom_Hoover has quit (Ping timeout: 268 seconds). 20:32:20 had a snack 20:37:42 sounds like some{one,thing} fell next door 20:39:40 -!- Phantom_Hoover has joined. 20:47:13 b_jonas: i agree with your suggestions, i just am unsure how to implement them. 20:47:47 i'm not the best programmer 20:48:39 -!- Lord_of_Life_ has joined. 20:51:17 -!- Lord_of_Life has quit (Ping timeout: 245 seconds). 20:51:17 -!- Lord_of_Life_ has changed nick to Lord_of_Life. 20:53:35 b_jonas: should i load the program into the top 16k of memory, reserving it for that? 20:54:21 or top 32k? 20:54:37 -!- unlimiter has joined. 20:54:59 i *think* i can do that 21:01:18 -!- MDude has joined. 21:02:52 also, my idea could allow for self-modifying code 21:25:50 Lykaina: no, load the program into an area separate from the data memory 21:31:02 oh... 21:36:14 -!- unlimiter has quit (Quit: WeeChat 2.5). 21:38:53 Now I fixed my JSON in PostScript so that there is a option to convert \u escapes into UTF-8 (you can also tell it to just use the low 8-bits of each codepoint instead). 21:41:08 zzo38: can the JSON writer write such escapes from utf-8 strings? 21:43:06 b_jonas: No; I have not implemented the ability to decode UTF-8. Any byte that is not a control character or " or \ will be written unescaped. (Maybe a later version could fix that) 21:43:50 oh. does that round-trip back to postscript with your JSON reader? 21:44:33 it may be better to decode though, to avoid writing invalid utf, since the JSON reader on the opposite end may reject it 21:44:46 It will still work with the reader; if it contains any bytes with the high bit set they will just be read in unchanged (regardless of the UTF-8 setting). 21:44:55 evevn if you don't escape valid utf-8 that isn't special in JSO 22:01:06 ooh! fun weather prediction for tuesday 22:06:32 also nice weather now 22:06:52 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds). 22:14:34 -!- Phantom_Hoover has joined. 22:33:03 i loaded it to memory and now it doesn't work right... 22:53:04 -!- Phantom_Hoover has quit (Quit: Leaving). 22:53:59 [[Keg]] https://esolangs.org/w/index.php?diff=66034&oldid=65471 * JonoCode9374 * (-234) 22:59:30 [[Keg]] https://esolangs.org/w/index.php?diff=66035&oldid=66034 * JonoCode9374 * (+167) /* User Defined Functions */ 22:59:40 grrr... 23:00:18 ? 23:01:28 -!- arseniiv has quit (Ping timeout: 246 seconds). 23:03:57 i made a version where i load the file into memory beforehand 23:04:10 it doesn't work 23:04:33 (yet) 23:04:43 i don't know what's wrong 23:08:01 http://sif.lesidhetree.com/sara/echidna/code/ 23:20:50 not putting broken code on the repo 23:35:48 -!- sftp_ has joined. 23:37:41 -!- sftp has quit (Ping timeout: 250 seconds). 23:37:41 -!- sftp_ has changed nick to sftp.