00:02:21 -!- Sgeo has joined. 00:07:41 -!- TeruFSX has joined. 00:14:52 -!- jiella has quit (Quit: Leaving.). 00:18:07 -!- kwertii has joined. 00:18:21 > (zipWith (/) `on` map (fromIntegral . ord)) "A[bbe\GSPehbZ\RS" "Hello World!" -- previous 10% bug, fwiw 00:18:23 [0.9027777777777778,0.900990099009901,0.9074074074074074,0.9074074074074074... 00:45:07 olsner: what was this esolang again, i vaguely recall this 10% bug thing... 01:10:22 -!- monqy has quit (Quit: hello). 01:44:07 -!- trout has changed nick to const. 01:50:52 -!- madbr has joined. 01:52:50 -!- oerjan has quit (Quit: Ribbit). 01:55:52 -!- Jafet has quit (Quit: Leaving.). 02:19:40 -!- TeruFSX has quit (Ping timeout: 246 seconds). 02:33:20 -!- olsner has quit (Ping timeout: 246 seconds). 02:33:48 -!- olsner has joined. 02:37:52 http://goatkcd.com/1115/sfw [nsfw] 03:06:35 -!- Jafet has joined. 03:14:55 -!- ogrom has joined. 03:16:14 -!- ogrom has quit (Client Quit). 03:38:22 What does 6502 do on each cycle of an instruction? 03:39:09 usually a memory operation 03:39:50 in some cases just an "internal operation" (all 2 cycle instructions that don't access memory are like this) 03:40:08 such as nop (2 cycles) 03:40:33 or lsr a (2 cycles) 03:40:55 But in instructions taking longer to execute, what memory access read/write done with each cycle? When does it read the next instruction and its operands? 03:41:09 (a large majority of cycles do a memory op) 03:41:24 hm 03:41:36 I don't think it is pipelined 03:42:14 so a cycle is something like 03:42:46 [cycle 1] read instruction 03:43:17 [cycle 2] no memory op but ALU is active 03:44:01 If there is no memory operations, what is on the address bus at that time? 03:44:09 who knows 03:44:44 -!- sivoais has quit (Ping timeout: 246 seconds). 03:44:46 F L O A T I N G B U S 03:44:46 probably the same address as last cycle, or 0 03:44:57 or z :D 03:46:10 fun fact: the original nmos 6502 was so slow that it actually only accessed memory half the cycles on the Apple II 03:46:24 the other half was used by the video display :D 03:46:50 i heard the original nmos 6502 would also do crazy shit if you gave it invalid instructions 03:46:52 Now I know. 03:47:23 kmc: yeah that's what the docs say :D 03:47:24 I think there are unofficial instructions? 03:47:38 i thought some of them were byproducts of the instruction decode logic 03:47:47 zzo: the docs say that a lot are unstable 03:47:58 plus they won't work on a 65816 03:48:06 Yes I know, I read that some are unstable, but they said some are stable. 03:48:38 But some are the same as other instructions and so are not so useful unless you are also using the instruction opcodes as data in the same program 03:48:44 -!- sivoais has joined. 03:49:18 Demo sceners have been using the “invalid” 6502 instructions a lot. 03:49:54 supposedly they do weird shit like adding and anding stuff at the same time 03:50:13 Such things can occasionally be useful. 03:50:46 If you’re counting cycles, certainly. 03:51:31 I have added the stable unofficial instructions into Unofficial MagicKit (only available for targets which do not override those instructions with new ones) 03:53:04 reading about the 6502 it does come off as totally underpowered 03:53:28 or even the 65816 04:01:25 6502 has decimal mode, but some 6502 based computers lack decimal mode 04:03:03 who uses decimal mode? 04:03:13 Is the decimal mode useful for something other than decimal calculation? 04:03:39 trolling 04:03:42 I don't know who uses decimal mode. 04:03:52 my guess is: banks 04:05:59 Some programs I wrote are for Famicom which lacks decimal mode, so I have never used it. If I program a computer which does have decimal mode I may sometimes used it. 04:06:25 x86 has some instructions for BCD arithmetic. 04:06:41 But I think they cannot be used in 64-bit mode. 04:07:04 correct :/ 04:07:34 they are useful for things besides BCD 04:07:47 AAM does AH <- AL / 10; AL <- AL % 10 04:07:56 but you can actually change that 10 by changing the second byte of the instruction 04:07:58 Yes, AAM and AAD, you can change the base 04:08:01 I know that 04:09:47 So I suppose setting the base to 1 would be a way to move AL to AH and then set AL to zero, it might be slower but it might also be a smaller code 04:09:58 What happen if you set the base to zero? 04:11:00 Will GCC or LLVM make these instructions if it is not 64-bit mode? 04:12:12 probably not imho 04:12:24 they probably don't run fast on modern processors 04:12:52 I know it may be slow, but might it sometimes result in a smaller code, if you select that option for some subroutines? 04:13:11 smaller code? 04:13:41 like, you can't even express BCD operations in C/C++ afaik 04:13:54 In case you want to optimize some functions for size and some for speed 04:15:29 how would you shrink a function by using BCD? 04:15:34 I know C has no commands for BCD operation, and LLVM also has no commands for BCD operation, but some things may sometime result in equivalent to such operation, or even other operation which the target computer may have 04:17:01 madbr: I don't know, but it might if the function is used for making BCD calculation. And anyways, the AAM and AAD instruction can be used for operations other than BCD arithmetic too. 04:17:23 like what 04:18:05 They described above AAM does AH <- AL / 10; AL <- AL % 10 but it does not have to be 10 you can use a different number instead 04:18:33 -!- kwertii has quit (Quit: kwertii). 04:20:39 Such as if you just want to move AL to AH and then set AL to zero, or to move some of the bits of the numbers in certain way, it would probably be very slow to use division but may result in a smaller code, such as if used only for initialization, or if you want the code to fit in MBR 04:22:57 perhaps 04:23:13 still hare brained and no new instruction set should have those monstruosities :D 04:24:35 like, wtf, 6 BCD instructions on x86 04:24:45 which could have been something useful instead 04:25:55 Yeah, but in CISC design it almost makes sense 04:26:54 Well, I think AAM and AAD are useful instructions. 04:27:06 -!- Jafet has quit (Ping timeout: 245 seconds). 04:27:10 they all have 1 byte opcodes too 04:27:52 zzo: no way 04:28:09 they take 10/18 cycles on the pentium 04:28:23 bear in mind that x86 is evolved from a wee little calculator processor 04:28:51 Yeah. Its lineage goes back to a CPU with 4-bit address space for a desktop calculator. 04:28:53 -!- Jafet has joined. 04:29:06 Erm. Was it 4 bit address space? 04:29:12 depressing but true 04:29:13 Might've just been 4 bit registers. 04:29:19 Anyways. Silly. 04:29:42 12-bit address space. 04:29:46 4 bit registers. 04:29:48 amazingly it's still better than the 6502 04:30:09 which never got a 32bit version 04:30:21 It did. 04:30:36 Sorry, thinko. 04:30:39 It got a 16 bit version. 04:30:41 Yes they are too slow, but if they are not too slow it may sometimes be useful, and it can also be useful if you do not need it to be fast 04:30:50 yeah, 65816, used on the snes 04:31:06 *Not* a 32 bit version. 04:31:33 zzo: you could simply store a LUT somewhere 04:32:07 and do the same operation in 1 cycle, pairable on the pentium 04:34:45 it's all about the pentiums 04:36:18 well, essentially on the pentium they decided which instructions would be fast, and which ones would be slow 04:36:29 and the same selection applies to the later processors 04:37:58 and essentially that's where they turned x86 into a bogo-risc 04:45:17 kmc: mosh works with the scroll wheel now? 04:45:48 it does? 04:45:59 for what values of "works"? 04:46:15 I'm moshing to my irssi and scrolling the scroll wheel goes up and down in history. 04:46:43 huh 04:47:04 i am surprised 04:47:22 Hmm, this might be a fluke. 04:47:31 -!- Jafet has quit (Quit: Leaving.). 04:47:39 i don't think we're setting alternate screen on the client 04:47:42 https://github.com/keithw/mosh/issues/2 is still open 04:47:48 you can ask in #mosh though 04:47:50 Yep, even if I detach from screen, scroll-wheel goes up and down in bash history. 04:48:08 Somehow I got into scroll-wheel-sends-up-and-down-arrows mode, or something. 04:49:10 huh 04:49:12 well that's useful 04:50:18 in the neon sign, scrolling up and down, i am born again 04:50:20 kmc: Hah, irssi put me in this mode. 04:50:25 irssi ate my balls 04:50:31 brb 04:50:39 I previous sshed to irssi and exited with ~. 04:57:57 the ARM has like 10 different multiply instructions 05:00:57 wait no 05:00:58 20 05:00:58 What kind of multiply instrucions? 05:01:10 multiply, multiply accumulate, multiply subtract 05:01:20 multiply to 64 bit 05:01:24 multiply 16 bit 05:02:38 weird "wide" multiply (32*16) 05:03:29 multiply 16 bit into 64 bit accumulator (weird :o ) 05:04:25 double 16 bit multiply adding/subtracting the productions 05:05:06 32 bit mul keeping only the most significant 32 bits of the result 05:06:31 dual 16bit multiply adding/subtracting the products then accumulating 05:07:29 multiply with combining grass radical above 05:07:35 same but accumulating 64bit 05:08:36 multiply 32 bit into 64bit accumulator 05:08:39 and that's it 05:09:00 ...for the non SIMD multiplications :D 05:09:18 the SIMD ones are even crazier :D 05:13:38 good thing ARMs don't have bcd 05:17:15 Do you know any computers with a triple indirect jump with post increment instruction? 05:18:38 well the RCA 1802 has weird indirect registers 05:18:40 "Using the SEP instruction, you can select any of the 16 registers to be the program counter; using the SEX instruction, you can select any of the 16-bit registers to be the index register." 05:19:08 but i don't know what the addressing modes are 05:19:16 zzo38: do you want this address mode for any particular purpose? 05:20:05 I am just wondering if anything has something like that. 05:20:48 It allows you to change which register is the program counter? I have never seen anything like that before. 05:21:05 yes 05:21:23 as wikipedia describes, this was sometimes used for fast subroutine calls, even alternating coroutines 05:30:07 so CISC 05:30:13 sooooooooo CISC 05:32:23 can be translated as "this architecture will never be able to be pipelined" 05:34:59 heh 05:35:27 ARM lets you swap the contents of the instruction pointer and another register, right? 05:35:31 that is similarly useful and less crazy 05:35:56 yeah ARM has the PC as one of the GPRs 05:36:05 which turned out to be a mistake 05:36:21 now if you look at the ARM manual most instructions say 05:36:44 "non of the operands of this instruction can be r15 (pc)" 05:37:02 that's too bad 05:37:27 it's ok when you're running at 10mhz and your pipeline is 2 cycles long 05:38:24 once your cpu is doing 2 instructions at the same time then your PC is not your PC anymore 05:38:58 not to mention crazy out of order CPUs (essentially all modern CPUs) 05:39:47 -!- sivoais has quit (Read error: Connection reset by peer). 05:40:04 CISC? 05:40:06 Pipelined? 05:40:25 sgeo: it's possible! 05:40:34 -!- sivoais has joined. 05:40:39 As in, I don't know what either of those mean. 05:41:00 I know RISC is reduced ... something about few instructions 05:41:08 Like a small number of opcodes or something 05:41:20 yeah 05:41:52 a CPU has several stages to process an instruction 05:42:13 fetch the instruction from memory, figure out what it means, fetch operand(s) from memory, do arithmetic or whatever, save result 05:42:18 risc = lots of registers, high instruction set orthogonality 05:42:28 each of these has a different piece of hardware 05:42:42 it would suck if we only used one of those units at a time 05:42:50 yeah but the number of stages varies a lot 05:42:59 in a pipelined processor we are fetching one instruction while we decode the previous one, while we fetch for another, etc. 05:43:04 yeah this is a simplistic explanation 05:43:06 but that's the idea 05:43:23 Ah 05:43:52 the ideal early RISC cpu runs 1 instruction per cycle 05:43:54 another way to look at it is, if you tried to do all that stuff in one clock cycle, your max clock speed would be really low, because of the delay to propogate through all those logic gates 05:43:56 What happens with jumps or conditionals? 05:44:10 sgeo: depends on the length of the pipeline 05:44:13 yeah, that's a trick 05:44:28 this is why on MIPS processors, the instruction after a branch gets executed even if the branch is taken 05:44:35 on longer pipelines and stuff like the x86 it tries to predict the result 05:44:46 RISC processors tend to expose these implementation details, on the grounds that the compiler can deal with them 05:45:10 Oh, hmm. I thought maybe the fetched thing that was after the jump just gets discarded 05:45:26 sgeo: not on the MIPS 05:45:35 yeah you can stall the pipeline like that 05:45:43 it makes CPUs easier to design 05:45:54 but then you're executing fewer than one instruction per clock 05:46:05 if the compiler has nothing useful to put there, it can insert a NOP 05:46:08 but there's not much point later on when your pipeline is 8 cycles and you have to do branch prediction anyways 05:46:09 otherwise maybe it can do some useful work 05:46:33 1 cycle isn't much, you can pretty much always put something there 05:47:20 Sgeo: another problem is data dependencies, what if a write and a read from the same register are in the ppipeline at the same time 05:47:31 oh yeah 05:47:48 you can stall, or you can insert "bypass" paths which let it read the value that will be written, rather than the stale value that's in the register file 05:47:54 which adds complexity 05:48:00 MIT's 6.004 is a really nice intro to this stuff 05:48:03 if your cpu is a well designed RISC you can do these all in 1 cycle 05:48:13 you design a RISC processor in a logic gate level simulator 05:48:19 and then you can optimize it for speed 05:48:32 the labs and software are available online 05:48:33 but once you're doing like 2 operations at the same time etc you have to introduce stalls 05:48:41 or out of order execution 05:49:09 i did the 2 stage pipeline with stalls on branches, which wasn't too bad 05:49:16 but more than 2 stages gets hairy 05:50:32 TMS320C64x has two-instruction delay slots. Except it's one instruction if it's one of the instructions that are followed by an immediate word. Keeping track of that kind of thing manually is kind of a pain. (Though I suppose you're meant to mostly just write C and use the provided algo libs.) 05:50:45 that's a DSP? 05:50:52 Yes. 05:51:00 VLIW is still popular for DSPs right? 05:51:02 * kmc does not know why 05:51:19 kmc: they're probably easier to design 05:51:49 of course that's a road to the intel itanium and we all know what happened to that one :D 05:51:54 I don't know how popular; the C64x used by the popular-in-phones OMAP platform (at least OMAP3 and I think 4 too) is a VLIW thing. 05:52:03 it's amazing how far the inner workings of a CPU are from the virtual machine suggested by the instruction set 05:52:16 when people talk about how C and assembly tell you "what the machine is really doing" i just laugh and laugh 05:52:39 They tell you what *a* machine is really doing. 05:52:44 (of course with C people also forget that there's an optimizing compiler which can make liberal use of undefined behavior) 05:52:47 There's always another turtle somewhere. 05:52:52 yeah 05:53:02 but they act like they've found the bottom turtle and it's special 05:53:33 anyway 05:53:37 We should make up the CPU where the instruction set corresponds closely to the inner working and work faster too. 05:53:38 The ISA is a pretty good turtle. 05:53:44 well, it's the bottom turtle you can actually write for 05:53:52 zzo38: that is the idea of RISC basically 05:53:54 zzo: that's called a VLIW 05:54:19 yeah i guess VLIW is that idea for superscalar 05:54:25 zzo: the big problem with VLIW is that they bust the instruction cache 05:54:42 you'd end up with an instruction word like 05:54:49 kmc: Doncha *love* it when people act like x86 asm is what the machine "really does"? 05:54:58 shachaf: do you know about implementing a touch / proximity sensor with two digital I/O pins, a resistor, and a piece of wire? 05:55:13 kmc: Nope! 05:55:18 Rather than just being the lowest abstraction Intel provides? *urgh* 05:55:22 -!- nortti has quit (Ping timeout: 268 seconds). 05:55:25 well you set one pin as input and one as output 05:55:41 connect the pins with a big resistor (≥ 1 MΩ) 05:55:48 add r0, r1, r4 sub r3, r7, r8 add r9, r2, r14 shfnop mulnop ldr r5, r13 05:55:50 I have had ideas of CPU instruction sets based on what is hardware what I was thinking of. 05:56:01 and also connect your wire or metal plate to the input pin 05:56:18 essentially a bunch of ALUs, each one gets an operation on every cycle 05:56:28 then you simply toggle the voltage at the output, and see how long it takes the input to match 05:56:43 this is a measure of the capacitance on that pin, which will change if someone touches or gets near the wire / plate 05:56:54 the other big problem with an architecture like that is that, what happens if you have a cache miss? 05:57:12 Makes sense. 05:57:16 you'd have to stall everything 05:58:05 also you'd probably have to cover the chip in multiplexers 05:58:55 the other other problem is that your compiler has to be crazy smart 05:59:05 true 05:59:08 Another idea I have, is first you need a open-specification FPGA (some people have partially reverse-engineered the AT40k FPGA, so we can use that), and have a compiler which takes LLVM codes with speed annotations (such as: this function runs in less than 1 million clock cycles if the third parameter is divisible by 5) and creates a hardware optimized for running this program. 05:59:13 dunno how smart it would have to be but yeah 05:59:48 would be workable if it could reorder operations over multiple loop iterations but afaik C pointers usually have some ways to defeat that 06:00:10 Does what I said would work at all? 06:00:35 tho I've heard that GCC is even able to autovectorize loops so it might be workable after all 06:01:20 If the FPGA is capable of reprogramming itself at runtime, then you can have not only self-modifying software codes, but you can have self-modifying hardware codes as well. 06:01:34 perhaps VLIW is popular for DSP because people are willing to hand-code these algorithms (and use them from libraries) rather than expecting to feed some 40 year old FORTRAN codes in and get good performance 06:01:54 imho the problem is C/C++ 06:02:10 kmc would surely agree that "C/C++" is a problem. 06:02:31 using "code" as a non-uncountable noun is a sign that one has worked in academic computing 06:02:36 What problem is C/C++? It has some problems but I don't know what problem you mean. 06:02:38 like "here is a code for fourier transform" 06:02:48 "here is a collection of codes for manipulating splines" 06:03:21 zzo: the general problem is that the user might throw weird pointers at your algo 06:03:26 I thought "code" as a non-uncountable noun is a sign that you don't understand programming at all and want people to give you stuff to copy and paste 06:03:29 -!- nortti has joined. 06:03:33 like multiple buffers that are really the same buffer 06:04:32 It is why you have to specify in your documentation, if it is allow to be the same buffer or not, and stuff like that 06:04:47 the compiler doesn't know that 06:04:59 well you can use the 'restrict' keyword in some cases 06:05:01 zzo: that's why older C/C++ compilers have a "no aliasing" switch 06:05:10 I think they added the "restrict" keyword so that the compiler will know that? 06:05:21 which means that you promise pretty promise that you're not going to do it 06:05:22 And I also think LLVM has corrected some things? 06:05:34 Does LLVM have all of these things better way? 06:05:42 though recent compilers don't seem to have the switch so they might have found out some better way yeah 06:07:04 if that is the case it reduces the VLIW's problems to "code size" and "how to prevent a stall when you have to fetch the data all the way from the RAM" 06:07:48 stopping irssi with ^z accidentaly seems to result in nothing else than disconnection from everywhere 06:08:27 My stomach hurts, don't know if it's hunger or nausea 06:08:32 Or what 06:09:24 My idea is to have multiple memory connected, one for program, one for data X, one for data Y, and any of them can be switched with each other, and then have the address bus for data X and Y to be their own registers, the data bus are also their own registers, use LFSR-based PC with one register affecting the LFSR taps, an instruction transfer register to register with condition.... 06:09:43 zzo: you don't need multiple memories when you have cache 06:10:52 Having the LFSR-based PC with a register affecting the LFSR taps is somewhat like having a multi-dimensional programming language, if done in the correct way needed to do this, I guess 06:11:18 O, and then also add multiplexer calculation like how the Muxcomp esolang does it 06:11:51 These are just some ideas I have to make a CPU; I don't know how it is really working. 06:12:31 I'd try going for one that has the maximum number of ALUs 06:12:35 madbr: But when you have cache, don't you then also need to have stuff such as cache invalidation and checking if it is cache and so on, unless your instruction set is dealing directly with the cache 06:12:48 and base everything else around keeping those ALUs full most of the time 06:13:41 zzo: yeah but afaik that's not so bad 06:14:57 It also seems difficult to predict how many clock cycles a certain sequence of instructions will take if it automatically reorders them and put into cache and all that other stuff. 06:16:45 true but still 06:16:58 considering how DRAM works it's a lot faster to have cache 06:17:30 also it prevents the need of having multiple ram areas for program, data x etc... 06:17:47 OK, but I still want it that the cache only works with instructions that directly tells the cache what to do 06:18:33 yeah but then the compiler has to guess what goes in cache 06:18:53 and all the manual cache management will probably slow it down a lot 06:20:24 the big benefit of cache is that essentially your inner CPU core doesn't have to deal with DRAM anymore 06:20:49 it becomes just "load from cache, stall if I get a cache miss" 06:21:31 right, for a long time the DRAM controller wasn't even on the processor 06:22:30 But you could require that instructions can only execute from cache, and these instructions modify other instructions in cache in order to affect the values you are dealing with, and have the external address/data bus to just be registers visible to the program stored in cache 06:23:46 good luck writing a program for that 06:25:24 You could then also have multi-cores executing separate programs simultaneously, with some registers shared, and others which are not shared, and some which are partially shared. 06:26:01 aka the Cell processor 06:30:56 Or have something like that checkboard design mentioned on esolang list of ideas, which has the checkerboard of processor and memory (so each processor accesses four memory cores and each memory is accessed by four processor cores) 06:31:17 I don't know how well it would work 06:31:22 hm 06:31:43 I'm not familiar with multicore operation 06:31:55 Neither am I, actually. 06:32:19 except from the user point of view ("you have to mutex everything because nothing happens in the real order") 06:33:06 I wrote in esolang list of ideas, make a programming language which requires bus conflicts and race conditions in order to work. 06:33:29 one nice idea I had is a dataflow processor 06:33:44 like, instead of having "write x to register y" 06:33:57 have each register take a new value each cycle 06:34:06 and have one ALU per register 06:34:17 Yes, do like that. 06:34:25 Somehow. 06:35:29 maybe with access to values produced 2 or 3 cycles ago 06:35:38 OK 06:35:39 or switching between two sets of registers 06:36:25 What would you think about my idea of making the program which includes the hardware description of the CPU optimized to execute this specific program? 06:36:42 afaik that already exists 06:37:06 Is it possible to compile LLVM programs into such things? 06:39:25 no, it's some crazy expensive design software 06:40:12 afaik most people just get a fast ARM system on a chip and run the C++ on that instead :D 06:41:58 it's probably not very different from writing a C++ program and optimising the few loops that run a lot in ASM 06:44:11 http://jollatides.com/2012/10/01/jolla-handset-poll-give-jolla-your-feedback/ 06:48:12 the other weird thing is that the amount of gates and latency of components like adders can vary 06:49:23 afaik modern processors use very low latency adders which means they're probably enormous 06:49:48 ARM has some complicated instructions, requires memory of differing data sizes, apparently you are not allowed to use some instructions unless you pay them, and OpenCores made a "Amber" processor based on ARM but they were sued and not allowed to make anything beyond ARMv2 06:50:43 heh 06:50:51 Oooh: a CPU where you have to plug in a credit card to enable some parts of the instruction set. And a per-instruction charge. Careful with those loops, now! 06:51:20 I think this is stupid so I do not want to use ARM in a computer design. 06:51:23 fizzie: that's ARM's revenue model 06:52:13 from what I can tell they license the SIMD unit and stuff like that 06:52:52 which is why some androids don't have them and you have to have a C++ version of like everything :D 06:53:40 Perhaps, but it doesn't quite go as far as getting money when the individual end users want to run something that takes advantage of tricky parts. 06:53:46 multiple data sizes is ok, the really complicated one afaik is when you allow unaligned accesses 06:54:34 supposedly there's a patent on that too 06:58:57 how about a design that has 2 modes: RISC, and VLIW 06:59:16 RISC is designed to run C++, have compact code (16bit opcodes) 06:59:40 VLIW is for the few inner loops that run a lot and have to be optimised 07:01:03 the vliw mode can probably even be specially simplified 07:01:47 since it probably doesn't have to deal with, say, real branching 07:02:05 it's going to mostly loop the same piece of code hundreads of time 07:02:16 ok sleep 07:02:18 -!- madbr has quit (Quit: Radiateur). 07:04:04 Blerp. They upgraded this workstation, and now XMonad keybindings for switching between monitors (mod-{w,e,r}) are in the wrong order, because screen 0 happens to be the right one, not the left one. 07:07:08 Man, these Intel model numbers, I've completely lost track of them. It used to be so simple. 07:07:20 Now this new workstation has an "E31230". 07:22:46 What hardware programming language would you program it by specifying what gates you use and what connection you use between them and what propagation delay? 07:31:09 -!- zzo38 has quit (Remote host closed the connection). 07:46:23 I wonder if he was trying to describe something like verilog 08:03:54 -!- atriq has joined. 08:04:04 @messages? 08:04:04 Sorry, no messages today. 08:10:22 I can't rotate this single screen when it's in a NVidia TwinView configuration? 08:15:40 fizzie, my lack of knowledge of C is letting me down 08:15:53 Does "typedef int8_t jbyte" name jbyte as a type synonym of int8_t? 08:16:08 Yes. 08:16:14 Okay 08:16:27 So, in Haskell, that'd be something like "type JByte = Int8" 08:17:33 If you take a regular declaration that makes 'foo', say, a pointer to a no-arg function returning int -- int (*foo)(void) -- then adding a typedef in front makes 'foo' a synonym for the type it would've normally made 'foo' an instance of. 08:18:17 Okay 08:18:28 "In a declaration whose storage-class specifier is typedef, each declarator defines an identifier to be a typedef name that denotes the type specified for the identifier in the way described in 6.7.6." 08:18:44 It's kind of a silly that 'typedef' is a "storage-class specifier". 08:19:37 ("The typedef specifier is called a ‘‘storage-class specifier’’ for syntactic convenience only.") 08:19:43 -!- Arc_Koen has joined. 08:23:02 Well, my C textbook is new enough to tell me about typedef, and despite elliott's recommendations I have not burnt it yet. 08:23:05 So, I'll read that 09:05:34 -!- pikhq_ has joined. 09:05:44 -!- pikhq has quit (Ping timeout: 255 seconds). 09:06:56 hello 09:07:02 Hey 09:07:32 so what's up? have you completed your fueue interpreter in haskell? 09:07:45 > (replicate 3 ) (replicate 2 [2, 2]) 09:07:47 [[[2,2],[2,2]],[[2,2],[2,2]],[[2,2],[2,2]]] 09:07:52 Haven't been working on it 09:08:04 I'm trying to port something fizzie and elliott made a while back to Haskell 09:13:48 I'm having difficulties in that C is not Haskell 09:17:56 atriq: go on 09:18:06 * kallisti has been working on a term rewriting grammar 09:18:10 Mutable variables, for a start 09:18:43 Actually, that's the only difference between C and Haskell I'm having trouble accounting ofr 09:18:45 *for 09:18:53 pattern -> [replcaement | condition] 09:19:01 each symbol has a weight 09:19:03 so it's really a tuple 09:19:31 Is there a way to search a github thing? 09:19:43 .. 09:19:50 uh, github? 09:19:55 No 09:20:02 A thing on github 09:20:06 * kallisti sips gumbo 09:23:02 atriq: GitHub's own "advanced search" form at least at some point. 09:23:09 Okay 09:23:39 You need some kind of a "repo:foo/bar" specifier and then tell it to search from source code too. 09:24:32 https://github.com/search and the bits about "Code Search". 09:28:53 atriq: I actually have a private git server 09:28:58 I could set up a web interface 09:29:05 No, it's okay 09:35:03 arrrrrrh 09:35:12 that was too easy 09:35:25 but I forgot about nested loops 09:35:56 how the hell can a brainfuck interpreter in thue account for nested loop? 09:36:21 -!- mig22 has joined. 09:36:28 in order to "jump to the matching ]" I usually have a variable that count how deep in nested loops the ip is 09:36:35 but thue has no variables 09:37:28 Arc_Koen: I was thinking of a string rewriting grammar that uses a term rewriting system 09:37:33 but on a tree of weighted values 09:37:47 with conditions on the weights, and a pattern from the tree 09:38:17 and the resulting term and also an update of the current state of the weight. 09:39:22 condition | pattern -> replacement[state] 09:39:36 state can be ++, --, or a numeric expression of the input weights 09:40:13 replacement is a result of tokens from the input patterns capture symbols 09:40:31 I'm not sure I know what you are talking about 09:40:37 condition is any numeric expression 09:41:21 a + b | "a -> b" -> ab [a + b] 09:41:48 transforms an -> into an addition of 2 weights 09:47:05 what about http://esolangs.org/wiki/Definer 09:49:51 not quite 09:49:55 hm 09:50:01 term rewriting though 09:56:22 -!- ais523 has joined. 10:00:34 -!- Phantom_Hoover has joined. 10:00:37 -!- Phantom__Hoover has joined. 10:00:38 -!- Phantom__Hoover has quit (Client Quit). 10:04:16 -!- carado has joined. 10:04:43 -!- carado has quit (Client Quit). 10:04:57 -!- carado has joined. 10:08:44 -!- atriq has quit (Remote host closed the connection). 10:37:11 -!- jiella has joined. 10:47:05 has anyone here tried programming the Z80 or one of its derivatives? 10:48:06 I've heard it mentioned. 10:48:12 Can't remember by whom. 10:58:54 I've done it a bit. 10:59:02 And I am under the impression that others have, too. 10:59:04 `pastelogs z80 10:59:27 http://zem.fi/rfk86/ <- mainly I just made that. 10:59:43 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.6799 11:00:02 `pastelogs z80 11:00:11 http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.19994 11:00:39 Well, I do know mooz did quite a lot for the calculator, but he's no longer here. 11:01:36 which one have you programmed? 11:01:47 Just the original. 11:08:18 -!- barts_ has joined. 11:08:33 -!- ais523_ has joined. 11:09:34 -!- ais523 has quit (Ping timeout: 240 seconds). 11:10:41 -!- ais523_ has changed nick to ais253. 11:10:43 -!- ais253 has changed nick to ais523. 11:11:36 -!- barts has quit (Ping timeout: 252 seconds). 11:11:50 http://en.wikipedia.org/wiki/Gumbo 11:16:04 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 11:21:11 Now I'm hungry. 11:34:40 -!- ais523 has quit (Remote host closed the connection). 11:35:23 -!- carado has quit (Quit: Leaving). 11:39:33 -!- ais523 has joined. 11:41:19 -!- carado has joined. 11:50:16 -!- Jafet has joined. 11:59:03 -!- TeruFSX has joined. 12:12:49 -!- ogrom has joined. 12:15:09 -!- Phantom_Hoover has joined. 12:15:48 -!- ais523 has quit (Remote host closed the connection). 12:17:04 -!- ais523 has joined. 12:19:55 uh, the thue article doesn't say anything about comments 12:22:34 -!- ogrom has quit (Quit: begone). 12:26:01 I've seen #::=# as a kind of a line-comment indicator. 12:26:07 -!- TeruFSX has quit (Ping timeout: 240 seconds). 12:26:12 Presumably with the restriction that there won't be any #s ever. 12:26:18 yes 12:26:19 ais523: You have 1 new message. '/msg lambdabot @messages' to read it. 12:26:27 it's one of those comments-inside-the-language-semantics thing 12:26:38 like DO NOT put comment here in INTERCAL 12:27:07 hmm, yeah 12:27:15 there's definitely a problem with input though 12:28:36 basically if the input contains anything else than +-><[]., my interpreter will either not know of it (so it will halt because no rule can be applied) or will recognize it as injected code and then it can do about anything 12:29:42 It's a language for well-behaving users. 12:31:07 -!- ais523 has quit (Ping timeout: 246 seconds). 12:31:13 I guess I could have an ip go through the brainfuck program before execution starts, and remove anything that's not a brainfuck instruction - but still, willingly injected code can trigger any rule 12:34:14 also, my thue interpreter selects the rules to apply at random amongst the not-yet-tester-this-turn rules, but I guess the brainfuck interpreter in thue would be way faster if the thue interpreter tried rules in the order they are sorted, and brought the chosen rule on top of the rules list 12:35:17 (for instance if the brainfuck interpreter is currently interpreting a '+', only the '+'related rules will be applicable so trying all the other rules is a waste of time 12:45:05 -!- nortti- has quit (Ping timeout: 256 seconds). 12:56:28 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 13:03:51 -!- boily has joined. 13:03:54 -!- Phantom_Hoover has joined. 13:04:13 -!- nortti- has joined. 13:11:20 hello 13:12:38 -!- aloril_ has quit (Ping timeout: 244 seconds). 13:13:37 what is the most esoteric language? 13:13:48 eodermdrome 13:13:54 `welcome 13:13:56 why? 13:13:58 Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page. (For the other kind of esoterica, try #esoteric on irc.dal.net.) 13:14:09 it's a personal opinion 13:14:11 i've already been welcomed, but thanks Arc_Koen 13:14:18 why do you hold such an opinion? 13:14:24 I don't think there is a "most" esoteric language, they are all esoteric in their own way 13:14:28 assuming you are the person of this personal opinion 13:14:42 eodermdrome uses graphs as a way to program 13:15:01 that is very interesting 13:15:05 does it process graphs? 13:15:18 hrm, I don't know enough about it, actually 13:15:31 i heard lisp could be implemented with a machine that does graph reduction. 13:15:33 's too esoteric for me :-) 13:15:46 It's a graph-rewriting language. 13:15:59 have a look at http://esolangs.org/wiki/Eodermdrome 13:16:11 (or hear what fizzie has to say, he knows much more than me) 13:16:22 There's a state graph, and rules for rewriting parts of it. 13:16:34 Well, the article is fine too. 13:17:43 It's really kind of like Thue except with (unlabeled) graphs. 13:18:28 talking about thue... http://sprunge.us/HhXO 13:19:31 it's 180 lines long already, I still have to do instructions > < . , and it's probably full of bugs because IT'S NOT HUMANLY READABLE 13:21:24 -!- epicmonkey has joined. 13:22:13 oh i just read up on it 13:22:14 it's nice 13:22:43 -!- carado has quit (Quit: Leaving). 13:24:03 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 13:24:04 I could possibly second the Eodermdrome opinion on esotericness, as ill-defined as that is. 13:24:31 (I do hope you're talking about eodermdrome when saying "it's nice") 13:26:50 yes 13:27:28 or i might be talking about sending digital signals in analog carriers via amplitude modulation 13:27:31 you'll never know 13:27:37 It possibly loses some appreciability points from the fact that it's still lacking an interpreter, and there aren't that many programs written in it. 13:28:00 Compare to something like Befunge which is being used daily in mission-critical applications all over the globe. 13:28:05 but does it have eclipse support 13:28:27 Perhaps someone should write a plugin. 13:28:31 haha 13:28:54 fungot: What's your opinion on the productivity and popularity and efficientness and such of Befunge? 13:28:55 fizzie: you just want to say " you can't make if a function is 13:29:04 (He's written in it.) 13:29:15 fungot: I don't think I want to say *that*. 13:29:16 fizzie: that's underload code in there, then 13:29:31 fizzie: what's your opinion on the productivity and popularity and efficientness and such of peptides? 13:29:50 :)) 13:29:59 I think we should get rid of them. 13:30:04 -!- aloril_ has joined. 13:30:07 too mainstream ???? 13:30:19 What have the peptides ever done for us? 13:30:22 ^source 13:30:23 http://git.zem.fi/fungot/blob/HEAD:/fungot.b98 13:30:25 -!- nortti- has quit (Ping timeout: 256 seconds). 13:36:14 has it just reproduced 13:36:16 that's naughty 13:39:24 -!- jiella has quit (Quit: Leaving.). 13:49:49 -!- copumpkin has joined. 13:52:37 -!- carado has joined. 13:56:41 -!- mig22 has quit (Quit: mig22). 14:14:10 -!- Phantom_Hoover has quit (Ping timeout: 256 seconds). 14:16:28 -!- Phantom_Hoover has joined. 14:25:49 The Core http://edition.cnn.com/2012/10/01/tech/mantle-earth-drill-mission/index.html?hpt=butt 14:41:29 -!- nortti- has joined. 14:45:18 -!- Arc_Koen has quit (Quit: Arc_Koen). 14:51:07 -!- carado has quit (Remote host closed the connection). 15:10:50 -!- Phantom_Hoover has quit (Ping timeout: 256 seconds). 15:15:38 -!- epicmonkey has quit (Ping timeout: 246 seconds). 15:31:42 -!- jiella has joined. 15:38:38 -!- atriq has joined. 15:39:00 @messages? 15:39:00 Sorry, no messages today. 15:41:24 -!- kinoSi has quit (Read error: Connection reset by peer). 15:41:51 -!- kinoSi has joined. 15:44:44 @messages 15:44:44 You don't have any new messages. 15:44:47 @messages? 15:44:47 Sorry, no messages today. 15:45:03 @tell Sgeo honk 15:45:03 You can tell yourself! 15:45:17 @tell lambdabot HONK 15:45:18 Nice try ;) 15:52:53 ... 15:53:03 Sgeo is Gamzee? 15:54:09 honk HONK honk HONK :o) 15:55:14 ion: i like the fact that they're doing a $1 billion mission to "answer questions about the origins and evolution of life" 16:09:16 itidus21, Homestuck fans have raised $2000000 for a video game that comes out in 2014. 16:09:18 @tell Sgeo honk 16:09:18 Consider it noted. 16:09:21 @massages 16:09:21 You don't have any new messages. 16:09:23 What do you make of that? 16:09:30 @messages? 16:09:30 Sgeo: You have 1 new message. '/msg lambdabot @messages' to read it. 16:09:53 -!- Phantom_Hoover has joined. 16:10:09 You don't have any new massages. 16:17:09 @messeges 16:17:09 You don't have any new messages. 16:17:35 * FireFly wonders if lambdabot checks if the edit distance is below some threshold or something 16:17:50 compared to the string 'messages', that is 16:18:09 I like 0 video games. 16:18:16 FireFly: It allows up to two edits, but only if the parse is unambiguous. 16:18:39 itidus21, I thought you liked Super Mario Bros? 16:19:01 @pime 16:19:05 Local time for fizzie is Tue Oct 2 19:19:02 2012 16:19:11 Uh, that's not what I meant; what I meant was. 16:19:14 @pixx 16:19:14 pong 16:19:17 But: 16:19:21 @pike 16:19:22 Maybe you meant: dice ping time wiki 16:19:52 I think the game I came closest to liking was legend of zelda: link's awakening on gameboy 16:20:31 (The @pime result shows it's enough for there to be a unique command with the shortest edit distance, as long as that's <= 2.) 16:20:46 also super mario bros 2 16:21:01 Lost Levels or USA? 16:21:08 USA 16:21:44 FireFly: Or I'm not entirely sure whether it's exactly edit distance or Hamming distance; and it's complicated by the fact that unique prefixes of commands are accepted too. 16:21:50 that was really something super mario usa 16:21:56 ^super mario 2 16:22:23 fizzie: ah, okay 16:22:25 it wasn't perfect though.. 16:22:36 @ssages 16:22:36 You don't have any new messages. 16:22:45 I suppose it's edit distance since it seems to allow deletions. 16:22:59 @bamessages 16:22:59 You don't have any new messages. 16:23:23 But note that: 16:23:24 @messag 16:23:24 Maybe you meant: messages messages? 16:23:39 Even though it has only one edit-distance-2 expansion (the one without ?). 16:23:46 Because of the no-typos-but-prefix handling. 16:23:58 i think it's not really the quality of the game itself, but the lies the game helps your mind momentarily tell itself 16:24:19 @massag 16:24:20 Unknown command, try @list 16:24:25 @massage 16:24:25 barts_ said 15m 7s ago: honk 16:24:33 thats what i think i enjoy in fiction 16:24:44 @massages 16:24:44 You don't have any new messages. 16:24:53 @massage? 16:24:53 Maybe you meant: messages messages? 16:25:07 oh, right 16:26:36 i guess that with your eyes, you can see yourself and you can see others 16:27:04 with your ears you can hear yourself and you can hear others.. etc etc.. but with your mind you can hear your thoughts but you can't hear any others 16:27:25 it's so bizzare 16:28:39 -!- FreeFull has joined. 16:28:51 so in a video game you see this sprite and you can say that sprite is me, everything else isn't 16:32:50 i guess you just have to be in the right mood, like with anything 16:33:17 -!- augur has quit (Remote host closed the connection). 16:34:09 link's awakening was really fun 16:34:13 i got stuck at some point 16:34:22 and it took me years to figure out how to get past 16:34:33 i h8 open plan games for this 16:34:58 like if you're sitting there thinking about video games as some philosophical metaphor like i am then you probably need a break from them 16:36:14 -!- atrapado has joined. 16:36:28 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds). 16:45:26 -!- barts has joined. 16:46:32 -!- Jafet1 has joined. 16:46:33 -!- aaaaaa has joined. 16:48:19 -!- atrapado has quit (Disconnected by services). 16:48:27 -!- aaaaaa has changed nick to atrapado. 16:48:47 -!- barts_ has quit (Ping timeout: 246 seconds). 16:48:49 -!- Jafet has quit (Ping timeout: 246 seconds). 16:51:15 barts: What point dod you get stuck at? 16:51:23 In Link's Awakening 17:02:09 There was a Scottish-Norwegian war? 17:04:00 probably 17:04:06 This 17:04:07 Why 17:04:10 Why this 17:04:13 Oh god 17:04:17 I'm tumblring on IRC 17:04:31 if nothing else, I think they would've been at war during WW2 17:04:43 No, there was a war called the Scottish-Norwegian war 17:04:48 In the 13th century 17:05:29 oh, it was *called* that? so it wasn't actually Scotland and Norway at war? 17:05:56 Well, it was both 17:18:37 -!- Arc_Koen has joined. 17:18:48 hello 17:18:51 -!- augur has joined. 17:18:52 brb 17:19:42 -!- augur has quit (Read error: Connection reset by peer). 17:20:07 -!- augur has joined. 17:23:24 -!- Phantom_Hoover has joined. 17:40:43 fungot: say something funny 17:40:44 olsner: sicp 1ed has the pattern matcher would close over the value of the current 17:41:49 fungot, say something sad 17:41:50 Phantom_Hoover: and you can use almost anything as an excuse 17:41:58 Hey, I'm still brb'ing 17:42:04 Guess I'll brb some more 17:42:07 fungot, i said 'sad' not 'uncomfortable' 17:42:08 Phantom_Hoover: many hellos!!! fnord head on fnord. 17:42:41 fungot: say something fnarfful 17:42:42 olsner: wife thought it might be possible to use 8-bit values in colourmap. :) 17:42:57 silly wife 17:45:12 Yes, the whole idea is beyond bizarre. 17:45:23 8-bit values, in colourmap, with fungot's reputation? 17:45:24 fizzie: that's what she said... i know where jesus the monster truck? 17:46:19 or was it actually fungot that the monster truck there? 17:46:20 olsner: eval ( eq? programmer riastradh)) 17:46:22 fungot, somewhere in the middle east i should thing 17:46:23 Phantom_Hoover: does anyone know a short bf program for 10 million steps? 17:46:25 *think 17:47:28 ^style 17:47:29 Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot homestuck ic irc* iwcs jargon lovecraft nethack pa qwantz sms speeches ss wp youtube 17:47:50 "irc", was that from #perl? 17:48:54 -!- atriq has quit (Ping timeout: 240 seconds). 17:51:38 olsner: #esoteric, #scheme and a tiny bit from IRCnet's #douglasadams. 17:51:44 ^style irc 17:51:45 Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) 17:52:01 Riastradh is/was a #scheme regular. 17:52:40 And eq? is/was (but most likely is) a Scheme predicate. 17:55:19 not that I know anything about scheme, but yes 17:57:16 -!- atriq has joined. 17:58:30 !forth s" gforth" environment? [if] type [then] 17:58:31 0.7.0 17:58:38 (Just checking the version.) 17:59:47 gforth development isn't terribly breezy, 0.7.0 is the latest and it's from Nov 2008. 18:00:53 what about kforth 18:03:23 it doesn't support 'char' thing but is otherwise nice 18:13:34 -!- nortti- has quit (Ping timeout: 240 seconds). 18:28:35 Phantom_Hoover: does anyone know a short bf program for 10 million steps? 18:28:36 itidus21: i think we have a shortage of paths but is much more interesting 18:30:36 -!- Taneb has joined. 18:30:45 -!- atriq has quit (Ping timeout: 256 seconds). 18:31:50 -!- Taneb has changed nick to atriq. 18:31:58 -!- Phantom_Hoover has quit (Ping timeout: 252 seconds). 18:34:26 I'm sorry, did you say "a short bf program"? that sounded wrong 18:34:52 Brainfuck? 18:34:55 Short? 18:35:07 ^bf +[+]. 18:37:50 Short, but isn't likely to run for exactly ten million steps. 18:38:15 And fungot can't output the \0 character since that doesn't go through IRC. 18:38:16 fizzie: i'm annoyed by both. technically it's not necessary in russian in that context?). i believe the internet works on cr/ lf is the most basic tasks 18:38:54 I think there are some reasonably short but "useful" (well...) programs inside that bot. 18:38:58 ^show 18:38:58 echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help hw srmlebac uenlsbcmra scramble unscramble asc ord prefixes tmp test celebrate wiki chr ha rainbow rainbow2 welcome me 18:39:12 The echo/rev kind of things are pretty simple to do. 18:39:29 ^echo Do you hear an echo? 18:39:30 Do you hear an echo? Do you hear an echo? 18:47:12 ^srmlebac Hello? What is this? 18:47:13 Hlo hti hs?its aW?le 18:47:20 Oh, scrambler 18:48:40 ^scramble scramble 18:48:41 srmlebac 18:49:08 ^scramble uenlsbcmra 18:49:09 unscramble 18:49:13 They're all kind of related. 18:49:26 It's mostly about bouncing between the two ends of the string. 18:49:30 ^show scramble 18:49:30 >>,[>,]<[<]>[.>>]<[>>]<2[.<2] 18:50:01 ^show srmlebac 18:50:02 >>,[>,]<[<]>[.>>]<[>>]<2[.<2] 18:50:13 Oh, they're even that close. 18:50:30 Also these must be old, because it hasn't combined the >>s. 18:50:34 -!- ais523 has joined. 18:51:05 ^def scramble bf >>,[>,]<[<]>[.>>]<[>>]<<[.<<] 18:51:06 Defined. 18:51:08 ^show scramble 18:51:09 >2,[>,]<[<]>[.>2]<[>2]<2[.<2] 18:51:30 There, it's a bit shorter. 18:51:50 >> is exactly the same length as >2 18:51:57 Yes, well, I meant in memory. 18:52:09 The ^show output is just a textual dump. 18:53:39 In memory it's in two-cell pairs where one cell gives the command (<> or +- or [ or ] or , or .) and the other the argument (count for <> or +-, the jump destination for [ or ]), so >2 is two cells whereas >> is four. 18:54:17 -!- Phantom_Hoover has joined. 18:54:41 ^def tmp bf ------------------------------------------------------------------------------------------------------------------------------------------------------ 18:54:41 Defined. 18:54:44 ^show tmp 18:54:44 +106 18:55:25 From what I recall, ^show selects +/- (or ) based on which would give the smaller number; internally it's always as-if the command were + or >. 18:55:39 (It has a wrapping tape.) 19:09:05 -!- carado has joined. 19:09:18 -!- oerjan has joined. 19:16:43 I'm really proud of Fueue 19:19:52 smashing language, old chap 19:20:45 I'm scarily not old 19:21:01 Fermat's Last Theorem has been a theorem for longer than I've been a person 19:21:45 You mean forever? 19:21:58 Fermat, that young whippernsapper? 19:22:04 Since September 1994, yes. 19:22:39 It was a theorem before it was proved. 19:22:46 It was even *called* a theorem before it was proved. 19:22:56 Both of those are true! 19:23:04 atriq is just trying to disguise the fact he's http://tvtropes.org/pmwiki/pmwiki.php/Main/ReallySevenHundredYearsOld 19:23:11 My god 19:23:16 I'm a page on TVTropes 19:23:39 -!- Sanqui has changed nick to Sanky. 19:24:11 oerjan: oh, that esolang with the 10% bug was brainfuck 19:24:35 a little known fact about brainfuck 19:24:59 it was first a bug in the interpreter that chopped off the first + (hello world starts with 10 of those, and uses the number 10 as a base to generate the characters) 19:25:28 so I worked around that by adding another + and left the modified program as a trap for my future self 19:25:48 when run in the corrected interpreter, that program gives a 10% bug in the other direction 19:27:01 ah 19:30:17 oerjan: I have two solutions to fix thue's input issue 19:30:45 1) input one character instead of one line. this way the programmer can make sure to treat characters in a way that doesn't allow code injection 19:31:41 2) allow the programmer to define an alphabet to use in the program, and a subset of that alphabet as the input alphabet 19:32:08 oerjan: all brought back because Arc_Koen started doing the bf in thue thing, and I decided to figure out how my last ubuntu upgrade broke my apache config 19:33:47 for 2), the alphabet can be something else than the usual ascii - to make it usable on a regular computer you need to "transcribe" your alphabet as ascii (if it's too big, use several chars to code one symbol), and the user's input is in ascii but with a transcription function that transforms it into your input alphabet 19:34:41 olsner: so I'm your muse? :-) 19:36:26 oerjan: incidentally, the only broken part was that I forgot how to use the thing 19:38:22 Arc_Koen: hmm, I guess :) 19:39:43 fwiw, I didn't write that bf interpreter, but it is written in thue and I have no real idea how it works... thought it would be interesting to try and figure it out while debugging its breakage 19:40:04 -!- Phantom_Hoover has quit (Ping timeout: 260 seconds). 19:41:11 Arc_Koen: (1) is what Itflabtijtslwi does. 19:41:32 * oerjan realizes he did not have to think about how to spell that this time 19:42:22 it flabt ijts lwi 19:44:54 olsner: if you really want to debug a bf interpreter in thue I'd be glad to give you mine once it's over 19:45:04 but it's kind of a boring thing to program 19:45:17 the idea is *very* simple, but it takes a loooooot of substitution rules 19:47:10 I think when I'm done I'll try to program in Definer, or another similar string-rewriting language that does allow for "variables" 19:47:18 or, like, pattern-matching 19:48:17 I think mod_rewrite uses PCRE 19:49:08 ais523: did thutubot have a bf implementation? 19:49:45 for instance in the interpreter if I want to have some symbols travel through others, I say something like "if a symbol is enclosed in { } brackets, then it moves to the left", but I have to write the substition rules for all symbols {+}, {-}, {>}, etc., for all symbols they can meet 0{+}::={+}0, 1{+}::={+}1, 0{-}::={-}0, etc 19:49:59 and to make things worse it's completely irreadable 19:50:15 (espacially if one of the symbols is a : or a =) 19:51:38 it's like how i made the first loop in /// before i found the copying twice trick 19:51:46 heh, avoid using : and = then :P 19:52:21 olsner: well i'm kind of short in symbols and I don't want to use words too much 19:52:30 no wait, that was even more insane. 19:52:40 an incredibly verbose interpreter would be a bit funny though 19:52:47 I use = as the operator that checks if a cell is equal to 0 19:53:06 (and debuggable, if it's constantly explaining exactly what it's doing) 19:53:26 hmm, if you had said that sooner I might have made it completely full of words 19:54:01 as in, even input would have had to be in the form increment decrement move left move right input output begin loop end loop 19:54:13 but now I've written too much to want to restart anything 19:54:13 hm you could say the first /// loop was attempting to use a thue method in a language not suited for it. 19:54:31 does /// use string-rewriting? 19:54:36 yes. 19:54:53 it's even simpler than thue. 19:54:56 hmm, /// eats everything up until the third / after applying a rewrite rule? 19:55:18 or before... 20:02:23 basically /// is both string-rewriting and self-modifying code 20:03:54 with the latter the only way to do real flow control 20:04:57 and looping requires quine-like techniques 20:11:01 /// is the best language 20:14:40 erh, earlier today we told someone that was eodermdrome 20:14:50 THAT WAS EARLIER TODAY 20:15:19 -!- Phantom_Hoover has joined. 20:15:32 also, /// is already implemented. 20:16:07 hmm, I might decide to implement /// soon 20:16:43 there might even be a more efficient implementation than the perl one. possibly by User:Nthern. 20:16:56 * oerjan never tested that. 20:17:20 more efficient than perl? wow! 20:17:47 the perl one keeps scanning the string from the beginning, whether or not there can be new matches there 20:18:00 -!- atriq has quit (Quit: Leaving). 20:18:38 for some substitutions that's gonna hurt. 20:19:29 it was just a quick hack to get a working implementations, after all. 20:19:33 *-s 20:20:02 it just _barely_ manages to run the BCT interpreter without hitting one of perl's internal limits. 20:20:40 (regexp recursion depth) 20:23:07 afaik Nthern is the only other person who has succeeded at programming in /// 20:23:14 hmm, what is it that uses recursion in those regexps? 20:24:27 s!^/((?:[^/\\]|\\.)*)/((?:[^/\\]|\\.)*)/!!s is the one which tended to crash 20:25:38 couldn't you make it [^/\\]+ to match longer chunks? 20:25:48 it is possible it doesn't use recursion in all perl versions, i think the ?: 's were an attempt to simplify it 20:26:15 olsner: except the BCT interpreter uses only / and \ characters :P 20:26:37 aah, sounds appropriately evil 20:27:12 it seemed like the logical thing to aim for, after getting basic "readable" looping going 20:27:30 oerjan: so my brother drops a pair of shorts in the clothes washer and just leaves them there, i don't even know when... makes no reference to it... this is what i live with 20:27:39 that's after initial syntactic desugaring btw. 20:28:00 after syntactic salting? 20:28:00 itidus21: HOW DESPICABLY EVIL 20:28:28 It's also possible to optimize some Perl regexps a whole lot with suitably placed (?>...)s. (It's a kind of a forced never-backtrack construct.) 20:28:35 * oerjan always checks the washing machine for forgotten clothes before using it. 20:29:12 oerjan: but they havent been washed... evidenced by their dryness 20:29:17 fizzie: i recall the perl version i used wasn't the newest one 20:29:33 itidus21: HOW DESPICABLY EVIL 20:30:24 It's possible (?>...) is reasonably new; it's quite far down in the manual, at least. 20:31:26 The *+ construct can be an easier way and I think it's earlier too. 20:31:40 *+ ? 20:31:41 oerjan: personally i don't even care.. i wash my stuff at laundromat lately.. but my mom comes along saying "can you turn on washing machine for me? running out of clean towels" because the knob is busted she can't actually turn on the machine herself 20:32:19 so i tell her about the shorts and she just carries them off into her room.. "ok ive emptied it" 20:32:33 oerjan: *+ and ++ and ?+ and {n}+ and so on are the "possessive" versions of the quantifiers. 20:32:55 oerjan: "Match as much as possible and never give anything back" is what they do. 20:32:57 so.. if i get depressed sometimes.. it's not baseless 20:33:07 oh. so it's not just * and + combined 20:33:45 /a++a/ e.g. can't ever match, because a++ gobbles all the a's. 20:34:54 Not that I know how well the regex engine can do without the hints in your original example, and whether the potential backtracking points matter. But it's a case where you know exactly what to match. 20:35:40 itidus21: hypocritically speaking, i'm pretty sure a healthy person wouldn't be depressed by such events. 20:36:37 "For instance, the typical "match a double-quoted string" problem can be most efficiently performed when written as: /"(?:[^"\\]++|\\.)*+"/ as we know that if the final quote does not match, backtracking will not help." (perlre example on them.) 20:36:40 oerjan: ain't noone healthy in this house 20:37:10 although perhaps it's a sign that we're at least a bit on the autistic spectrum 20:37:32 lol hypocritically speaking 20:37:35 (disclaimer: DO NOT USE FOR MEDICAL ADVICE) 20:37:36 oh no 20:37:47 regexps are awesome for writing gobbledygook like "(?:[^"\\]++|\\.)*+" 20:39:08 fizzie: that _does_ look eerily similar 20:41:10 oerjan: ironically for me facing my fears means doing someone elses laundry 20:43:09 -!- TeruFSX has joined. 20:47:42 hmmm 20:48:09 a fueue itnerpreter in thue would actually be shorter that a brainfuck one 20:48:31 cause fueue has only one structure (that is, code and date are together) 20:50:06 oerjan: your proof that fueue is turing complete, does it work if numbers are bounded? 20:51:18 oh screw that I can do it with unbounded numbers *rolls his sleeves up* 20:51:27 > 64^3 20:51:28 262144 20:53:22 > 64 `xor` 3 20:53:23 Ambiguous type variable `a' in the constraint: 20:53:23 `Data.Bits.Bits a' 20:53:23 a... 20:53:31 67 20:53:44 fizzie: aww, changing * to *+ didn't help, at least with the perl version installed here (5.10.0) 20:55:44 > Data.Bits.xor 3 4 20:55:45 Ambiguous type variable `a' in the constraint: 20:55:45 `Data.Bits.Bits a' 20:55:45 a... 20:55:51 Wtf 20:56:07 > 64 `xor` 3 :: Word 20:56:08 67 20:56:10 It works fine with ghc/ghci 20:56:17 Arc_Koen: my proof doesn't use number arithmetic at all, there's a lonely 1 used for a delaying trick 20:56:29 :t xor 20:56:30 uh 20:56:30 forall a. (Bits a) => a -> a -> a 20:56:42 you mean YOU DON'T NEED NUMBERS at ALL??? 20:56:58 shocking 20:57:03 indeed, that 1 could probably be changed to something else :) 20:57:27 putStrLn "hello" `xor` putStrLn "world" 20:58:18 Arc_Koen: it's only using the functional parts of fueue in an essential way 20:58:26 arc_koen: class (Eq a, Num a) => Bits a 20:59:48 FreeFull: ghci uses the extended defaulting option, which defaults numeric types in more general circumstances 21:00:51 fizzie: btw http://oerjan.nvg.org/esoteric/slashes/longsubst.sss is a simple program triggering the bug 21:01:03 Ah, ghc does error out 21:01:22 it _should_ print hello if working 21:01:48 oh and some newlines, i didn't bother removing them 21:01:52 olsner: so i'm gonna make a verbose thue fueue interpreter 21:02:03 Arc_Koen: have fun! 21:02:22 fun? I'm doing it for SCIENCE 21:02:35 Arc_Koen: well you need numbers for output, but you can consider it TC even without if you consider final queue contents 21:02:36 oerjan: If I can manage to remember, I'll try some things out when I'm not typing via the phone. 21:02:50 hmm, yeah, ok 21:03:46 oerjan: would brainfuck be tc with cell contents being unbounded, but without the - instruction? 21:04:08 I'm thinking it doesn't change anything 21:04:27 like, you can have a cell you call "zero" which you increment instead of decrementing every other cell 21:05:07 Arc_Koen: as long as the tape still is unbounded, it might work 21:05:19 hmm I don't think we need that 21:05:24 for instance take 4-cell brainfuck 21:05:46 don't use the fourth cell, except to emulate - 21:06:11 (so if you're in the first cell, instead of - you write >+>+>+) 21:06:24 (well >+>+>+>) 21:06:34 Arc_Koen: um you can never get information out of a cell if you cannot get it back to zero 21:06:43 oh, that's true 21:06:45 other than that it is nonzero 21:07:27 so how would it work if the tape was unbounded? 21:08:32 in that case there ought to be a way to move data further on the tape, to the still zero parts 21:09:43 so you would encode the cells of a brainfuck with - as sequences of 0's and nonzeros 21:10:02 haha 21:10:04 nice 21:10:21 -!- boily has quit (Quit: Poulet!). 21:10:35 hmmm I'm not convinced though 21:10:51 well i'm reminded of Sceql 21:14:00 -!- monqy has joined. 21:14:01 anyway i'd imagine a memory layout like 0 ...arbitrary non-zero trash... 0 first bf cell 0 second bf cell 0 ... last bf cell 0 0 ... 21:14:33 hm make that 0 0 between the trash and first cell too 21:15:02 oh and a 0 0 somewhere around the current cell. 21:15:41 hmm... I think apache does potentially evil things with leading slashes in uris 21:21:28 "Use with extreme caution, as it may result in loop." :) 21:22:37 (it could if there wasn't a limit on the number of matching rules and if the server didn't run out of memory so quickly) 21:23:53 ...arbitrary non-zero trash... 0 (0 (1 1*))* 0 (0 (1 1*))* 0 0 0... 21:24:52 well gnight 21:25:11 night 21:25:21 (the fueue interpreter might not be shorter than the brainfuck one because it has so much moving around) 21:25:41 tricky 21:26:02 wait i've not even finished browsing the logs yet... 21:26:26 like, the 'fadd' function sends a 'check arithm' marker to see if it has correct arguments, then the marker comes back as 'ok arithm' or 'noop' 21:26:44 if it's noop then fadd must move through the whole queue 21:27:26 if it's ok arithm then it's a nightmare of adding two numbers, then the results still has to move through the whole queue 21:27:45 if thue had WRAPPING that would be so easy 21:28:45 oerjan: I'm not sure it's healthy browsing the logs... it's like every moment you're not on the chan you have to live twice (once out of the chan and once reading the log) 21:29:00 you're gonna get old TWICE AS FAST 21:29:14 of course an easy remedy would be to stay on the chan as often as possible :-) 21:29:17 AAAAAAAAAAA 21:29:18 anyway bye 21:30:04 -!- carado has quit (Quit: Leaving). 21:31:31 @tell Arc_Koen If you want things "easy", go Thutu or something. (Disclaimer: only lookes at Thutu briefly.) 21:31:31 Consider it noted. 21:31:34 I got tired of keeping that in the input buffer, waiting for the quit. 21:32:20 AAA you just shifted the balance fo need sleep / got plenty things to do 21:32:20 Arc_Koen: You have 2 new messages. '/msg lambdabot @messages' to read them. 21:34:23 hum, you know what, thutu can wait 21:34:35 @messages 21:34:35 oerjan said 1d 1h 43m 33s ago: did you mean to remove an a from the kipple truth-machine program? i don't know kipple so... 21:34:36 fizzie said 3m 4s ago: If you want things "easy", go Thutu or something. (Disclaimer: only lookes at Thutu briefly.) 21:34:49 -!- Arc_Koen has quit (Quit: that's dr. turing to you, punk). 21:35:51 It's super-promising when you look up an obscure error on Google and the first result is “Pig Latin Reference Manual” 21:40:49 ouyay on'tday aysay 21:51:10 -!- TeruFSX_ has quit (Read error: Connection reset by peer). 21:51:55 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 21:53:00 Keccak won the SHA-3 competition 21:54:15 http://www.nist.gov/itl/csd/sha-100212.cfm 21:54:37 What, so soon. 21:54:59 -!- kmc has set topic: I, for one, welcome our new hash function overlords | http://codu.org/logs/_esoteric/ | http://esolangs.org/wiki. 21:55:55 Keccak does sound like a proper name for an alien overlord. 21:56:07 LORD KECCAK. 21:56:40 Keccak sucks as a palindrome. 21:56:41 yeah 21:56:56 it's pronounced "kashyyyk" 22:17:06 -!- TeruFSX has quit (Ping timeout: 245 seconds). 22:25:10 Hm. 22:25:18 -!- atrapado has quit (Quit: Leaving). 22:25:23 It is astoundingly difficult to Keccak-hash something right now. 22:25:35 I'm looking for an implementation that I can just say “here's a file, what's its hash” 22:25:36 Nope. 22:26:00 my university has a nick cage appreciation society 22:26:12 i hope this is a homestuck joke and not something sincere 22:26:35 http://guyism.com/wp-content/uploads/2012/07/best-resume-ever.jpeg 22:28:15 gregor: Add the future-snapshots repository and install sha3sum. 22:28:27 Perfect! 22:28:32 future-snapshots/20131001 should work nicely. 22:28:52 The implementation is publicly available, but it's all test suites, no tools. 22:33:20 you should smoke a bowl of hash in honor of this occasion 22:42:19 -!- jiella has quit (Quit: Leaving.). 22:55:06 -!- TeruFSX has joined. 22:57:11 -!- Jafet1 has quit (Quit: Leaving.). 23:07:04 -!- FreeFull has quit (Quit: Zzzzzzzzzzzz). 23:09:19 Hmm, it's not a Merkle-Damgård hash. 23:18:35 -!- Jafet has joined. 23:20:20 Gregor: http://keccak.noekeon.org/KeccakReferenceAndOptimized-3.2.zip 23:20:47 pikhq_: Try using that to get a hash of a file. 23:20:49 pikhq_: I dare you. 23:21:40 Ass! 23:21:57 Why would you make the test program something other than a read file and shove it into the hasher? 23:23:50 Okay, I'm *sure* it's a perfectly reasonable hash algorithm, but the implementation was written by an incompetent. 23:24:21 They're Belgian *shrugs* 23:26:41 http://keccak.noekeon.org/specs_summary.html Well, there's enough you could probably write it yourself. 23:29:17 All I was going to do was hash the topic. 23:29:23 The joke is long dead by now ;) 23:29:27 -!- TeruFSX has quit (Read error: Connection reset by peer). 23:29:55 Still annoyed. 23:35:27 -!- augur has quit (Remote host closed the connection). 23:37:55 Actually, I'm impressed at how simple this hash algorithm can be. 23:46:32 DCB6B8BD29813DA1A9B56667D751A6D444ECFC5B0F67D6EB85DEF9E 23:46:48 That's SHA3-224 of the topic. 23:47:02 How 'bout just “I, for one, welcome our new hash function overlords” 23:47:28 E581A6F9E364E179B336A2C6D6831D4B50CD7739C7E1565E3EBF2 23:47:47 -!- Gregor has set topic: I, for one, welcome our new hash function overlords | E581A6F9E364E179B336A2C6D6831D4B50CD7739C7E1565E3EBF2 | http://codu.org/logs/_esoteric/ | http://esolangs.org/wiki. 23:47:58 pikhq_: How are you computing it? 23:48:11 SHA3 looks much more complicated than SHA1 to me. 23:48:26 shachaf: Grabbed "readable keccak" and shoved the string into it. 23:48:44 Oh, *readable*. 23:48:48 Sounds promising. 23:48:53 http://www.mjos.fi/dist/readable_keccak.tgz 23:49:04 It's 106 lines of C. 23:49:28 A bit more if you want to make it useable as a general-purpose library, of course. 23:49:50 But I doubt it'd go over 200 if you don't try optimizing it. 23:50:13 OK, it's not so bad. 23:50:20 It still has a lookup table. :-( 23:50:27 Tiny one though. 23:53:24 Ah. Part of why the other keccak implementations are complex is that they support all possible parameters of the algorithm... 23:53:38 What I pasted their suffices for the SHA3 ones. 23:53:50 s/their/there/