00:04:12 -!- olsner has quit ("Leaving"). 00:10:46 MRyaaaaaaaaaaaaaaaaaaa 00:10:53 that is alll 00:12:13 -!- timotiis_ has quit ("leaving"). 00:14:20 * pikhq is a cruel bastard. . . 00:14:43 In the FRC: should you become temporally disjoint from the bus, you should calculate G while waiting for the bus to find you again. 00:14:46 >:D 00:15:09 shall i dare to ask what G is? 00:15:20 indeed i shall. 00:15:23 what is G? 00:15:30 Graham's number. 00:15:38 oops 00:15:52 * oerjan was hoping for the gravitational constant 00:16:09 Sorry, but I like the up-arrow notation. :p 00:20:23 -!- ais523_non-admin has quit ("Bye!"). 00:20:42 knuths arrays are basically the hyper operator? 00:21:14 oklokok: Pretty much. 00:21:19 Different notation for the same. 00:21:33 i invented the hyper oerator as a kid, thought it was a new idea until like last year :P 00:21:36 *operator 00:22:07 It's a fairly trivial concept to *grasp*. 00:22:09 i guess there's not much to invent 00:22:14 But a bit harder to use *usefully*. ;) 00:22:15 / grasp 00:22:48 well, i was mainly trying to find the hyper operations for reals as well 00:22:53 * pikhq should have done A(G, G). . . 00:23:03 but it seems it hasn't been done yet in a meaningful way 00:23:04 You were. . . Trying to extend hyper to the reals? 00:23:08 Bastard. 00:23:12 yeah, hasn't everyone 00:23:13 :D 00:23:50 Not I. 00:23:57 But, then, I'm only in high school. ;) 00:23:57 "The family has not been extended from natural numbers to real numbers in general for n>3, due to nonassociativity in the "obvious" ways of doing it." 00:24:10 well, this was when i was in elementary school 00:24:12 i'm your age 00:24:15 Ah. 00:24:31 it's not like i was a super math genius or anything 00:24:43 i just have a lot of weird ideas 00:25:05 hmm 00:25:15 I'm only a *moderate* genius at math. ;p 00:25:30 heh 00:25:37 i'm not practical enough for math 00:25:46 requires perfection, unlike say programming 00:26:37 * pikhq wonders what the derivative of ^{x}e is. . . 00:26:44 what does that mean? 00:26:49 Tetration. 00:26:51 lambda x : e? 00:26:54 oh. 00:27:04 Or e\uparrow\uparrow x. 00:27:07 * pikhq is a LaTeX junky. 00:28:33 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 00:29:09 -!- Judofyr has joined. 00:29:16 what's x^x? 00:29:18 umm 00:29:21 D(x^x) 00:29:55 well, x^f(x) really, then just extend that 00:30:07 oh, right 00:30:32 hmm, i think i should wait until i'm *not* watching something 00:30:42 i'm not good at multitasking really 00:31:21 umm 00:31:22 what 00:31:28 e up up x? 00:31:44 right, i misparsed you still 00:31:44 Not familiar with Knuth's up-arrow notation? 00:31:53 In it: e^x = e\uparrow x. 00:31:58 yeah 00:32:02 Ah. 00:34:08 i think i got it, not derivable :P 00:34:44 e upup x where x = real doesn't exist, right? 00:34:49 Sure it is! It's a smooth curve and everything. 00:35:01 http://en.wikipedia.org/wiki/Image:Real-tetration.png 00:35:06 ah. 00:35:19 that's a matter of definition then, lessee 00:35:40 hmm 00:35:44 Just because it's not derivable in terms of elementry functions does *not* make it not derivable. ;p 00:36:03 it cannot be derivable if it does not have a definition for reals 00:36:12 it seems it does, but where is it? 00:36:17 :P 00:36:38 e upup x. 00:36:49 What part of that says it's *not* defined on the reals? 00:37:01 what't e upup 0.5? 00:37:03 *what's 00:37:17 e^{1/4}. 00:37:27 I think. 00:37:48 Nope. 00:37:52 i doubt that 00:37:56 It's not. 00:38:07 That's e^{{1/2}^2}. :p 00:38:42 the fact you can possibly extend the array-notation definition using your intuition doesn't make it a real definition. 00:38:59 the array-notation only works for integers with the definition there 00:39:46 well 00:39:49 You're confusing e^^x and hyper(e, x, x). ;P 00:40:06 i am not 00:40:25 e^^x = e^e^...^e where e is there x times 00:40:41 if x isn't an integer, that makes no sense 00:40:42 Yes. What about that definition prevents e^^x from being defined on the reals? 00:40:58 what is e^^0.5? 00:41:30 you can definitely define it for reals, i'm just saying the page doesn't do that. 00:41:58 for instance, you can just define e^^x where x isn't an integer to be zero. 00:42:32 exponentiation does real exponents using the inverse operation 00:42:48 perhaps that could also be created for the array notation 00:43:32 i'm just saying i'm physically not seeing a definition for real arrow-exponent 00:43:41 hmm 00:43:47 have i been saying "array"? 00:43:49 Repeated multiplication doesn't define, say, e^0.5, yet it still exists as a real. 00:43:52 Yes. 00:44:05 pikhq: as i said, defined via the inverse for reals 00:44:07 -!- BMeph has joined. 00:44:22 because you can use the inverse function for the denominator of the exponent. 00:44:48 Having trouble finding an *exact* definition, but it's *about* 1.5. 00:44:57 and define reals to be the limit of doing that where the rational number representing the exponent ...gets closer to the real exponent 00:45:15 that doesn't help at all 00:45:24 you could define it in many ways 00:45:44 Likewise, you could define 1+1=50. I fail to see how that's relevant. 00:45:59 Blargh. 00:46:11 it's relevant in that if it doesn't have a definition, the derivative doesn't have a definition 00:46:18 That Wikipedia page says there's no commonly accepted solution to extended tetration to the reals. 00:46:26 thought so 00:46:59 but it could prolly be done using something like the inverse function way exponentiation uses, as i already said two times i guess 00:47:10 i'll look into that after this episode 00:47:23 Yeah, I think I like the super-logarithm solution. 00:47:54 super-logarithm solution? 00:48:03 exponentiation uses the other inverse :) 00:48:30 True. 00:48:48 The problem being: the super-logarithm on the reals is not defined, either. XD 00:48:55 the only obvious equation to start with would seem to be e^^(x+1) = e^(e^^x) 00:49:25 oerjan: doesn't help, we still need e^x where x in [0..1] 00:49:28 eh 00:49:32 e^^x 00:49:51 hm... 00:51:16 there might be one solution that was particularly nice in some way 00:52:30 Define it in terms of the square-super-root. ssrt(x) = e ^ {W(ln(x))}, where W is the inverse of f(w)=we^w. . . 00:52:43 (can't prove: Wikipedia claims it to be so) 00:54:32 :) 00:54:52 Anyways, that provides a fairly *elegant* extension to the reals. 00:54:56 oerjan: You agree? 00:55:07 i do, that's what i suggested right away 00:55:12 hmm 00:55:25 is there a nice way to compute w? 00:55:33 Taylor series. 00:55:39 myah 00:55:48 i'm too lazy to google, sry :P 00:55:56 The Wikipedia page gives some C source code for W(x). ;) 00:56:31 aye 00:56:58 -!- Corun has joined. 00:57:51 -!- pikhq has set topic: - From Brainfuck to extending tetration to the reals.. 01:00:24 -!- oerjan has quit ("Good night"). 01:00:30 nightie 01:00:31 s 01:21:34 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 01:21:58 -!- Judofyr has joined. 01:33:01 -!- sebbu has quit ("@+"). 01:38:16 -!- calamari has joined. 01:39:15 pikhq: I was curious, so I got the free HTML version of the posix spec and convereted it to PDF.. thousands on pages.. wow 01:39:19 on->of 01:39:40 calamari: Wow. 01:40:01 But that's specifying the behavior of all of UNIX. . . 01:40:18 I think there's a hidden spec out there 01:40:19 Just my collection of *man pages* would probably cover a thousand pages. 01:40:26 undefined of course 01:40:41 "what's good enough to get gcc working with configure scripts?" 01:40:45 (info pages? Hell, that's probably got the POSIX spec in there two times over) 01:41:13 probably a lot less strenuous a goal 01:41:26 Of course. 01:41:51 btw you mentioned that porting gcc over wasn't a big deal.. what's the process? 01:41:51 You need a shell, make, gcc, and libc. 01:42:32 Assuming you use an executable format that GCC supports? Port libc. Compile a GCC cross-compiler. Use that to make a GCC native compiler. 01:42:45 The 'port libc' part is the hard one. 01:43:41 thus newlib 01:43:53 * pikhq can't wait to one day do uname -a and get 'i686-pc-mykernel-newlib' 01:44:10 oh so you're doing it for your regular pc? 01:44:17 Yeah. 01:44:23 I was hoping this was some custom system you built out of parts or such 01:44:26 Although my *regular* PC is actually x86_64. 01:44:36 That makes it a bit harder. 01:44:42 You then have to retarget GCC. 01:44:48 A royal pain. . . 01:44:49 yep 01:45:04 But at least GCC just does RTL->assembly. . . 01:45:12 (for the architecture-specific stuff, that is) 01:45:16 it'd be a new backend 01:45:30 and assembler 01:45:36 Well, yeah. 01:45:55 I'm mostly saying 'Thank god GCC has all the frontends go to the same language.' 01:46:06 yeah 01:52:49 -!- Corun has quit (Read error: 110 (Connection timed out)). 02:07:36 http://www.atmel.com/dyn/products/product_card.asp?part_id=3755 02:07:50 ARM, so gcc is ready to go 02:08:58 -!- oklokok has quit. 02:21:22 Anyone up for a seemingly np complete problem? 02:32:19 -!- Tritonio_ has joined. 02:39:38 -!- Sgeo has joined. 02:40:53 Deformative: Sure. 02:41:01 Just because its NP doesn't mean it can't be solved. 02:41:09 Just that it can't be solved efficiently. ;) 02:41:39 Oh hi all 02:43:10 pikhq: You have a block of memory, and a new order, some locations are duplicated, some are no longer used, but they refill the same block, design an algorithm to find the least number of movements needed. 02:43:54 So you have [a b c d e f] and it needs to be transformed to an arbitrary new order, for example: [a b e e f c] 02:44:14 You have access to extra space. 02:44:29 Sorting algorithm. Lower bound is O(n log n). 02:44:41 It is _not_ sorting. 02:44:49 'Some locations are duplicated' 02:44:53 Whaddya know. It's not. 02:45:12 some are no longer used 02:45:20 Why would you need the minimum amount of movements? 02:45:40 It is a compiler that needs to generate optimal code. 02:46:08 Sorting does not need to remain in the same memory block. 02:46:22 The thing is: you don't necessarily need to generate *optimal* code, if that's too hard to do. What you need to do is produce *pretty good* code. . . 02:46:31 Which is usually a much easier problem. 02:46:42 Less fun. 02:46:59 And besides: finding the lower bound of your movement algorithm there won't help because *you still don't have said movement algorithm*. ;) 02:47:24 Huh? 02:47:30 Reread that. 02:47:38 So, a more *useful* question is "How can I efficiently move things around like this: ..." 02:47:55 I need the least number of movements. 02:48:06 Why do you need that? 02:48:20 Because it stays in the same block... 02:48:29 What you're asking for is the lower-bound of the efficiency of an algorithm that does that. 02:48:38 What you need is the algorithm itself. 02:49:15 Just like asking "How many steps does it take to sort a list?" is useless when you actually want to sort. 02:49:18 The algorithm does not need to re-arange, the algorithm generates code that will re-arrange. 02:50:17 Which is not that much different, algorithmically. . . 02:50:37 Yeah it is. 02:50:51 I still have no clue why you need to know the efficiency of such an algorithm, but not the algorithm itself. 02:50:53 Because you can bruteforce until you find the algorithm that has the least movements. 02:50:54 ;) 02:51:03 Oh. 02:51:07 You're doing it wrong. 02:51:08 ;) 02:51:18 Or you are understanding me wrong. 02:52:01 I suspect, though, that you could trivially adapt a sorting algorithm to that. 02:53:44 Alright, a language privative is to convert [a b c d] to [a a b d] the code generated should not do the same ineffective algorithm every time, the compiler should do a lot of work once so that it has a perfect algorithm every time it is run. 02:53:48 Does that make sense? 02:55:14 Are those two orders always the same between calls to the same language primitive with the same argument? (that is, would "transform(abcd, aabd)" do the same thing every time?) 02:56:09 Yes. 02:57:14 Hmm. 02:57:16 And the only allowed operation of movement? 02:57:33 * pikhq is still tempted to say 'sorting algorithm'. . . XD 02:57:41 It is manipulating arguments. My language is capable of using the same memory block to keep args in for every function, but a function has many of the same args as the function that called it. 02:58:40 So lets say foo( a b c d) calls bar(a a b d) 02:58:41 Deformative: Is the only allowed operation is a[i] = a[j]? 02:58:44 The compiler should optimize that. 02:58:46 Doing it wrong. . . Use the C calling convention on your system of choice, for crissake. 02:58:56 Dude. 02:59:11 That would take the whole esoteric part out of it. 02:59:24 Is this for tail recursion? 02:59:25 cherez: I am trying to generate optimal asm. 02:59:44 If I ever did PEBBLE->assembly, I'd use the C calling convention. . . 02:59:48 And movl is really the only call that should be needed. 02:59:56 That doesn't remove the esotericness of language. . . 03:00:05 It just makes your *compiler* purely insane. 03:00:06 cherez: Sortof, not exactly. 03:00:13 pikhq: Indeed. 03:00:14 Your implementation doesn't have to be esoteric. ;) 03:00:21 cherez: The language does not have return values. 03:00:25 And therefor the stack does not change. 03:00:26 Well, if every operation must overwrite, it's only possible if it's the same output or no variables are dropped. 03:00:47 cherez: He allows temporary storage. 03:01:03 My language is purely continuations. 03:01:09 No returning, no stack frame. 03:01:16 Ah. 03:01:21 Well, the C calling convention won't work. 03:01:23 Carry on. 03:01:29 So reordering the stack then jmp? 03:01:33 So c calling is hardly even feasible, and possibly the least optimal thing imaginable. 03:01:35 :D 03:01:39 cherez: Yes 03:01:51 I need the compiler to generate perfect algorithms that reorder the stack. 03:02:18 Once again: you need the compiler to generate *good* algorithms that reorder the stack, not perfect ones. 03:02:23 :p 03:02:28 yes. 03:02:35 But perfect is preferable. 03:02:42 Brute forcing should be possible. 03:02:49 So it should be able to find the perfect algorithm. 03:03:20 I think that you're going to have a max of however many arguments you have to each function. . . 03:03:25 I *think*. 03:03:34 s/max/min/ 03:03:50 -!- Tritonio_ has quit (Remote closed the connection). 03:04:02 No, a b c d ~> a b c d has no movements 03:04:10 The compiler needs to be able to figure that out. 03:04:23 True. 03:04:43 But it's obvious that the compiled code is going to be doing that in O(1). . . 03:05:21 Genetic algorithm? Stable sorting algorithm? 03:05:52 It should be like O(0) 03:05:54 With O(n) temporary storage, I'd think this is probably O(n) or O(n^2). 03:05:59 It is JUST a goto then. 03:06:17 No movement. 03:06:33 Deformative: O(0) means that nothing happens at all. ;p 03:06:40 If anything at all is done, then it's O(1). 03:06:43 Nothing does happen. 03:06:45 Nothing does happen. 03:06:46 No movement? 03:06:52 No jump? 03:06:52 It happens at compile time, not runtime. 03:06:55 A jmp is damn well something. 03:06:57 Just 'hlt'? 03:07:04 You can try to convince your program counter otherwise. 03:07:13 Well, I suppose it depends on the processor architecture. 03:07:16 jmp is not part of the translation algorithm. 03:07:37 The compiler does not generate any translation if it is not needed. 03:07:43 So yes, O(0) 03:07:51 Remember, the indexes DO NOT CHANGE 03:08:11 indices 03:08:25 It is all compile time. 03:08:35 So the program directly knows what to do. 03:09:22 * pikhq tosses Deformative "The Art of Computer Programming" 03:09:28 Have fun; I'm sure you can figure it out. 03:09:36 Heh. 03:09:44 I told you it is a weird problem. 03:10:12 The hard part is showing a solution is optimal. 03:10:16 Because you are not trying to solve the problem exactly, you are trying to design the perfect solution given limitless time. 03:10:41 I can think of quite a few ways to generate good algorithms, but I can't think how you could prove optimal. 03:11:02 Least number of movl ? 03:11:38 I can't think of a polynomial way that I can prove has minimum movl. 03:12:08 If you cannot even count them, how do you generate the code? :) 03:12:52 Well, I can easily see how you could write an O(n) algorithm to produce O(n) movl. 03:13:05 That's certainly countable. 03:13:21 But I'm also certain there are more efficient ways. 03:13:50 Let me try to get some of my ideas into words. 03:14:02 First, make a list of indices no longer needed. 03:15:19 Next make a list of indices that are at the same place in beginning and result. 03:16:54 Then generate every possible combination to reach the result, and in each combination count the movls. 03:17:21 To generate the combinations, you need to check over every single index and see where they need to go. 03:17:29 Eh, and here is where I am stuck. 03:17:55 Data can be moved to places where that data is no longer needed without any negative effects. 03:18:19 So that is constant in all of the possible combinations. 03:18:26 cherez: See where I am trying to go? 03:18:52 That is roughly the NP algorithm I came up with. 03:19:18 I'd say it's probably NP-Complete, but I'm not certain. 03:20:11 Yes, I just need to find an algorithm for generating all possible combinations. 03:20:33 Even if it is npcomplete, it will generate perfect code, so that is not a problem if the algorithm I come up with is bad. 03:20:53 It also risks *never completing*. 03:21:06 NP-complete algorithms take quite a bit of time. ;) 03:22:02 An algorithm is easy. 03:22:47 Make a queue of operation sets, put an empty set of instructions on it. 03:23:55 While the operations do not produce the desired result, for every possible action that can be taken, add a new operation set that is the one retrieved, plus the new possible action. 03:24:19 Basically just enumerating the possible actions and executing them in sequence. 03:25:22 Hmm... 03:26:22 http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm 03:27:53 Actually, I think that might be polynomial. 03:28:36 A huge polynomial, but polynomial all the same. 03:30:18 No, that's nonpolynomial. 03:30:42 O(((n^2)^n)^2) 03:30:52 Jebus. 03:31:06 Oh well. 03:31:25 The generated apps should be ridiculously fast. 03:31:30 Let's see, at each step there are O(n^2) branches, and there are at most O(n) steps. 03:32:51 So O(n^(2n)) total branches. 03:33:01 Thus as many vertices. 03:33:14 The search is O(v^2) 03:34:33 -!- adu has joined. 03:35:25 Well, I have exams tomorrow, so I should sleep. 03:35:44 I'll be back tomorrow or such. 03:35:57 hi 04:31:19 -!- andydude has joined. 04:31:41 -!- adu has quit (Connection timed out). 04:32:17 -!- andydude has changed nick to adu. 05:06:01 -!- Sgeo has quit (Remote closed the connection). 05:21:09 -!- Judofyr has quit (Read error: 110 (Connection timed out)). 05:55:24 -!- adu has quit (Remote closed the connection). 05:57:29 -!- adu has joined. 06:08:06 -!- calamari has quit ("Leaving"). 06:34:30 -!- adu has quit (Remote closed the connection). 07:15:32 -!- Judofyr has joined. 07:37:15 -!- Judofyr has quit. 07:38:24 -!- BMeph has quit ("calls it a night"). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 09:31:32 -!- oerjan has joined. 11:55:53 err, wtf, looks like *code* memory is corrupted, anyway the output makes no sense 12:09:49 Deewiant, there? 12:09:51 BAD: the top of the stack after y isn't equal to what 1y pushes 12:09:55 wtf does that one mean 12:10:00 isn't it obvious 12:10:01 it does y 12:10:03 and then it does 1y 12:10:10 and it expects the top 2 elements of the stack to be the same 12:11:59 hm 12:12:23 I'm trying to fix my y and I end up with heap or stack corruption :/ 12:12:32 * AnMaster fixed that part at least 12:12:33 isn't it fun to program in C ;-) 12:13:01 aha got it 12:13:15 ==12040== Conditional jump or move depends on uninitialised value(s) 12:13:15 ==12040== at 0x40565E: ExecuteInstruction (interpreter.c:197) 12:13:15 ==12040== by 0x405EBB: interpreterMainLoop (interpreter.c:440) 12:13:15 ==12040== by 0x405FC7: interpreterRun (interpreter.c:472) 12:13:15 ==12040== by 0x404C9D: main (main.c:121) 12:13:22 yay for valgrind :D 12:13:54 yay for not initializing variables by default 12:15:02 -!- oerjan has quit ("leaving"). 12:15:32 Deewiant, well no that wasn't the issue 12:15:45 it was an array index off by one issue 12:15:52 or rather 12:15:55 yay for not having array bounds checks ;-) 12:15:56 of by a lot 12:16:06 basically unsigned int 12:16:17 wrapped, and ended up with 71634721834 or something like that 12:16:23 whatever you say, I can spin it into a pro-D anti-C argument if I try hard enough :-P 12:16:28 (gdb) print tmp->top - request 12:16:28 $1 = 18446744073709551610 12:16:29 :D 12:16:34 Deewiant, indeed I know 12:16:38 still I'm slightly faster 12:16:41 fortunately, I don't have to try very hard ;-) 12:16:43 my y is not optimized 12:17:16 I'm convinced by now that the only significant difference is the function pointers versus switch-case 12:17:42 consider the noOperation function that I showed yesterday :-P 12:17:50 it's called through a function pointer every time z is hit 12:17:54 even though it's just {} 12:18:29 yes, and that's just silly 12:18:31 and I suspect PaX does some sort of checking related to function pointers, which results in extra slowdown on your comp 12:18:39 I think the code is cleaner this way 12:18:41 Deewiant, I don't think it does 12:18:51 PaX just does NX and such 12:18:55 AnMaster: I read some docs on PaX design and they mention something to that effect 12:19:03 my gcc does stack smash protection though 12:19:10 -fstack-protector-all 12:19:15 likely slows things down 12:19:22 something like that, anyway 12:19:59 real 0m0.610s <-- debug build 12:21:53 Deewiant, btw for ccbi mycology list command line arguments backwards 12:22:03 is it supposed to do it that way? 12:22:24 say ./ccbi mycology.b98 some other things 12:22:35 That the command-line arguments were: [ "things" "other" "some" "mycology.b98" ] 12:22:46 hrmh 12:23:00 not sure whether that's a CCBI or Mycology issue ;-) 12:23:03 while mine do: That the command-line arguments were: [ "mycology.b98" "some" "other" "things" ] 12:23:16 might be CCBI then 12:23:17 lessee 12:23:24 Deewiant, so I want to know if I should push them in the other order or not 12:23:42 I got no idea what one is correct on this thing 12:23:46 well it's an interpretation issue I think 12:23:51 The first string is the name of the Funge source program being run. 12:23:59 does "first" here mean topmost or the one that was pushed first 12:24:38 Deewiant, good question 12:24:42 so it's a UNDEF? 12:24:49 I'd say so, yes 12:25:00 most of y is strictly speaking UNDEF 12:25:08 maybe mycology should test it in "Here's how your interpreter deals with some possibilities unmentioned in the specification..." section? 12:25:28 (if you got room there) 12:25:41 naw, because that's uncontrollable - would need the user to pass some command line args 12:25:48 ah true 12:25:51 and to be frank there's a lot of "possibilities unmentioned in the specification" 12:25:59 oh yes 12:26:01 that was more like a roundup of stuff that is likely to crash/infinite loop your interpreter 12:26:14 aha 12:26:19 GOOD: y acts as pick instruction if given large enough argument 12:26:20 yay 12:26:26 or that was the original intention, anyway :-) 12:26:52 Deewiant, currently my interpreter may be slightly slower, due to a non-optimized y instruction heh 12:27:00 I actually create a second stack atm 12:28:14 what do you push for team number btw :-P 12:28:22 0 I think 12:28:30 because I got no idea what to do there 12:28:35 yeap 12:29:03 I think it's a remnant of Befunge-97 but I'm not sure 12:29:12 -p, --disable-fprints Run as if no fingerprints were implemented. 12:29:14 -p, --print-fprints List all supported (and knowingly unsupported) 12:29:16 err 12:29:22 you got that messed up in ccbi --help 12:29:29 yes, I know, I updated that 12:29:36 you've still got the old version :-) 12:31:31 yay (while maybe slower atm, don't know): all good or undef 12:31:34 \o/ 12:31:42 no fingerprints yet of course 12:38:09 actually there is one thing left, but mycology doesn't test it 12:38:23 that the size of stacks for y actually pushes a value for each stack 13:23:56 -!- faxathisia has joined. 13:37:28 Deewiant, on 64-bit it actually runs slightly faster with int_fast64_t than int_fast32_t, but almost the same speed 13:38:06 Um ... on a 64-bit environment, shouldn't int_fast32_t == int_fast64_t? 13:38:30 GregorR, hm likely 13:38:44 fastX = the type at least this large that's fast on this system, which on a 64-bit system should always be 64-bit. 13:38:47 gcc -std=c99 -fbranch-probabilities -D_GNU_SOURCE -Isrc -combine -march=k8 -pipe -O3 -fwhole-program -Wl,-O1,--as-needed,--hash-style=gnu -Wall -Wextra -o cfunge08 lib/libghthash/*.c src/*.c src/*/*.c src/funge-space/b98/funge-space.c -lgc -lcord 13:38:53 that line rocks anyway :D 13:39:04 profile based optimizing 13:41:04 GregorR, you are right 13:41:18 Of course I am :P 13:41:20 with int32_t I get faster actually 13:41:30 $ time ./cfunge08 mycology.b98 > /dev/null 13:41:31 real 0m0.266s 13:41:31 user 0m0.074s 13:41:31 sys 0m0.017s 13:41:38 GregorR, madly optimized 13:41:44 for mycology 13:41:45 :D 13:42:18 way faster than ccbi 13:42:45 $ time ./ccbi --disable-fprints mycology.b98 > /dev/null 13:42:45 real 0m0.513s 13:42:45 user 0m0.173s 13:42:45 sys 0m0.005s 13:42:48 hehe 13:43:01 of course the latter is the binary Deewiant provided 13:43:12 as I can't compile ccbi successfully here 13:43:30 -!- Slereah has joined. 13:43:42 GregorR, CCBI being written in D btw 13:44:35 -!- faxathisia has quit ("If there are any aliens, time travellers or espers here, come join me!"). 13:45:10 That explains why you can't compile it *haw haw haw* 13:45:30 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 13:52:50 GregorR, haheh :D 13:52:53 haha* 13:56:48 got it down even more 13:56:59 real 0m0.132s 13:56:59 user 0m0.078s 13:56:59 sys 0m0.021s 13:57:08 gcc -std=c99 -fprofile-use -D_GNU_SOURCE -Isrc -combine -march=k8 -pipe -O3 -fwhole-program -Wl,-O1,--as-needed,--hash-style=gnu -Wall -Wextra -o cfunge08 lib/libghthash/*.c src/*.c src/*/*.c src/funge-space/b98/funge-space.c -lgc -lcord 13:57:12 is my final command line 13:57:13 :D 13:57:18 for gcc 14:08:28 real 0m0.127s 14:08:38 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 14:08:55 -!- Slereah has joined. 14:14:15 -!- slereah_ has joined. 14:15:47 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 14:26:07 bbl 14:36:17 * slereah_ received "From Frege to Gödel" 14:36:23 650 pages of logic :o 14:37:27 Heh. Begriffsschrift is funny looking. 14:38:48 Ah yes, "Building blocks of logic", by Schönfinkel. 14:38:48 Full of combinators :D 14:48:57 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 14:49:09 -!- slereah_ has joined. 14:59:55 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 15:01:57 -!- slereah_ has joined. 15:20:12 -!- sekhmet has quit (Remote closed the connection). 15:24:53 AnMaster: your month in y is off by one 15:29:17 -!- sekhmet has joined. 16:03:20 -!- timotiis has joined. 16:22:09 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 16:23:50 Deewiant, ok possible 16:25:57 * AnMaster fixes 16:31:32 -!- sekhmet has quit (Read error: 104 (Connection reset by peer)). 16:31:57 Deewiant, pushed fix (as well as make cmake nicer, to actually check for existence of boehm 16:32:01 and so on 16:32:23 -!- sekhmet has joined. 16:33:02 AnMaster: btw, if you want to fix a typo in Mycology, change line 188 column 110 (should be a space just to the left of a <) to a ; 16:34:10 Deewiant, what does that typo do? 16:34:39 it's a typo, not a bug 16:34:42 i.e. it only affects output 16:34:45 ah 16:34:49 Deewiant, in what way? 16:35:14 AnMaster: run cfunge08 on the unmodified mycology and there should be a messed-up message where it tests k with a negative argument 16:35:15 "a space just to the left of a <" 16:35:16 err 16:35:18 there is a > there 16:35:21 not a < 16:35:26 right, my bad 16:35:29 -!- slereah_ has joined. 16:35:37 see how easy it is to make typos? ;-) 16:35:59 heh 16:36:09 anyway can't see anything about negative k in output? 16:36:31 AnMaster: at the place where it's testing stuff unspecified, right before fingerprints 16:36:43 ah now I see it 16:37:23 right 16:37:31 Deewiant, you want to upload a fixed version 16:37:35 already did 16:37:46 just thought it'd be easier to tell you to fix it than to have you unzip it :-P 16:37:54 now I got like 5 copies of mycology around in different places all different versions 16:37:59 probably 16:38:00 heh 16:38:03 just keep one copy 16:38:08 well yes 16:40:05 Deewiant, btw does the standard say if months should be 0-indexed or 1-indexed 16:40:10 in the y result 16:40:40 BTW, if I remove the fflush(stdout)s from cfunge08, it's consistently 25% faster than CCBI. otherwise, CCBI beats it when not outputting to dev/null 16:40:54 AnMaster: don't think so, but all the interpreters agree that they're 1-indexed ;-) 16:41:03 Deewiant, heh indeed 16:41:22 Deewiant, ok I'll change that to only flush at newlines or something 16:41:42 and IMHO that should be the default if unspecified anyway, only programmers use 0-indexed values 16:41:42 isn't that was ccbi does? 16:41:46 yes 16:42:01 Deewiant, well who would use befunge, except programmers? 16:42:25 gmtime that I use to split the date up, uses 0-indexed month 16:42:30 just FYI ;P 16:43:18 which is messed up IMO 16:43:18 because it has a 1-indexed day 16:43:39 indeed 16:47:28 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 16:47:36 -!- slereah_ has joined. 16:51:28 Deewiant, btw using 32-bit versions on 64-bit platforms make it *EVEN* faster ;P 16:51:37 as in using 32-bit data types 16:51:43 but compiling for 64-bit 16:54:57 Bullshit. 16:56:54 pikhq, what? 16:56:58 I did profiling :P 16:57:00 ... 16:57:05 on my app 16:57:06 Comparing what to what? 16:57:39 pikhq, same program compiled to use 32-bit data types and 64-bit data types. However of course the code was 64-bit still in either case 16:57:44 Ah. 16:57:59 AnMaster: are you talking about int_fast32_t versus int_fast64_t? 16:58:09 That makes sense, then. . . I think. 16:58:12 Deewiant, int_fast64_t vs. int32_t in fact 16:58:13 :) 16:58:21 because int_fast32_t = 64-bit on amd64 it seems 16:58:25 thought so, because int_fast32_t should be the same 16:58:43 Try it in assembly, though. 16:58:47 anyway I'm making some ifdef for them 16:58:58 pikhq, no way I'm going to write a befunge98 interpreter in asm 16:59:00 just no way 16:59:17 AnMaster: That's just to satisfy my curiosity about what the hell is making it faster. 16:59:36 pikhq, try gcc -S to make it output asm 16:59:39 pikhq, anyway: 16:59:40 Reading a few chunks of assembly code doing the equivalent thing with its data types would help that. 16:59:55 gcc -std=c99 -fprofile-use -funsafe-loop-optimizations -Wunsafe-loop-optimizations -fvisibility=hidden -D_GNU_SOURCE -Isrc -combine -march=k8 -pipe -O3 -fwhole-program -Wl,-O1,--as-needed,--hash-style=gnu -Wall -Wextra -o cfunge08 lib/libghthash/*.c src/*.c src/*/*.c src/funge-space/b98/funge-space.c -lgc -lcord 16:59:56 :D 17:00:27 -ffast-math made it *slower* in fact 17:00:28 no idea why 17:00:38 that's just overkill :-P 17:00:46 Deewiant, the line? 17:00:48 nah 17:00:53 I'm not talking 'all of Befunge', just "mov %eax, $foo" vs. "mov %rax, $foo". 17:00:53 ;p 17:01:06 AnMaster: For the love of God, don't do -ffast-math. 17:01:08 pikhq, very likely it is due to how I handle them 17:01:16 It's almost as bad as -funroll-loops. 17:01:19 pikhq, I don't do any floating point maths at all 17:01:27 Still: don't. 17:01:37 pikhq, and I do optimizing with profile feedback 17:01:47 and that *DOES* activate -funroll-loops, based on profile data 17:01:51 see man page 17:01:55 Just stick with -O2, for the love of God. 17:02:04 pikhq, normal is -O0 -ggdb3 :P 17:02:12 True. 17:02:19 just working on beating Deewiant's CCBI :D 17:02:23 at speed 17:02:24 -O2 is the most optimization you can do sanely. 17:02:27 Oh. 17:02:35 pikhq, yes but I'm the author of cfunge 17:02:40 so I know what I can do safely 17:02:41 Well, in that case, don't distribute those binaries without saying 'stupidly optimised', and carry on. 17:02:42 :P:P 17:02:46 Oh. 17:02:50 In that case, just carry on. 17:02:54 pikhq, heheh 17:03:06 And beat everyone else that tries that without grokking his/her code. 17:03:08 pikhq, of course I'm well aware of that things may break 17:03:25 and indeed likely will if I'm not 100% sure of what I'm doing right now 17:03:33 and verifying result with test suite 17:03:45 pikhq, the normal way I compile it with is -O0 -ggdb3 after all :D 17:03:49 * pikhq grabs an assembler. That's how we optimise code. . . 17:03:56 And I walked up hill both ways! In the snow! 17:03:58 pikhq, nah, I let gcc or whatever do it 17:04:00 haha yes 17:04:11 pikhq, work 25 hours / day? 17:04:15 Of course! 17:04:26 having to clean out the lake you live in before you woke up? 17:04:33 But, on a more serious note: as cool as assembly is, x86 assembly makes it such a pain that you damned well better not. 17:04:41 I'm in Colorado. What lakes? 17:04:44 * AnMaster remembers that mony python thing 17:05:20 pikhq, I thought it was a reference to a Monty Python sketch (spelling?) 17:05:31 * pikhq returns to reality. . . 17:05:33 anyway, no way I'm doing x86 asm 17:05:52 I think -ffast-math makes the floating point code go through the x86 FPU. . . 17:05:55 1) I'm on x86_64, 2) I only done some ams for PIC 17:06:03 pikhq, aha, I see 17:06:09 The problem being that, by default, and floating point code goes through SSE2, which is faster. 17:06:14 s/and/any/ 17:06:41 aha 17:06:47 pikhq, thanks for that information 17:07:47 Well, that is, that's the default on x86_64, since every x86_64 chip does SSE and SSE2. 17:08:06 pikhq, so I should do -mfpmath=sse then? 17:08:14 as well as -ffast-math :D 17:08:17 * AnMaster runs 17:09:42 No, you shouldn't do either... 17:09:56 Since gcc is compiling for x86_64, it does SSE2. 17:10:20 That's the fastest you can guarantee your floating point code is running, unless you can assume SSE3. 17:10:32 In which case, just do -msse3. 17:11:23 pikhq, I do have sse3 in my sempron in fact 17:11:42 If you're on Gentoo, add -msse3 to your CFLAGS and recompile your stuff. ;) 17:11:44 anyway I use a old gcc, 4.1.2 17:11:54 gcc (GCC) 4.1.2 (Gentoo 4.1.2 p1.0.2) 17:11:54 no idea if it makes use of it 17:11:56 So do I. 17:12:00 pikhq, yep I got it in CFLAGS 17:12:03 Mmkay. 17:12:08 gcc (GCC) 4.1.2 20070214 ( (gdc 0.24, using dmd 1.020)) (Gentoo 4.1.2 p1.0.2) 17:12:35 Yeah, GCC newer than 3.something uses -msse3. 17:14:04 I wonder, should I use gcc __builtin__ stuff for vector addition 17:14:07 only x and y 17:14:12 probably not worth it 17:14:55 real 0m0.107s <-- and that is with profile generation code heh not using the profile feedback 17:15:20 real 0m0.104s using profile data 17:15:32 oh and this is using the flush the way ccbi does it 17:15:58 Yeah, add -msse3 to your CFLAGs. 17:16:04 Should make your vector code faster. 17:16:11 (read: single operation. ;p) 17:16:44 pikhq, well I actually do it like this now: 17:16:55 ip->delta.x *= -1; 17:16:55 ip->delta.y *= -1; 17:17:06 or 17:17:12 ip->position.x += ip->delta.x * steps; 17:17:12 ip->position.y += ip->delta.y * steps; 17:18:16 real 0m0.097s 17:18:17 yay! 17:18:23 Hmm. 17:18:23 slightly less than 0.1 second 17:18:27 \o/\o/ 17:18:28 Spiffy. 17:18:40 pikhq, for the required part of mycology test suite 17:18:48 average is still around 0.104 or so 17:20:48 pikhq, btw this is using 32-bit data types 17:21:03 Mmm. 17:21:30 still "very fast" with 64-bit 17:21:56 I bet caching is a bit harder with 64-bit data types or something. . . 17:21:58 AnMaster: I'm just happy that I'm only about 25% slower given that I implement much more than you do :-) 17:22:04 pikhq, probably 17:22:19 Especially since you're on a Sempron. 17:22:20 Deewiant, well that is with reflecting on fingerprints I assume 17:22:26 -!- slereah__ has joined. 17:22:26 Those usually have somewhat small caches. 17:22:39 cpu[1 x AMD Sempron(tm) Processor 3300+ (AuthenticAMD) @ 2.00GHz w/ 128 KB L2 Cache] 17:22:43 indeed :( 17:22:54 with 64-bit data types: 17:22:55 real 0m0.159s 17:23:02 still fast I'd say 17:23:03 My Sempron is a 2800+. 17:23:08 AnMaster: sure, but there's still a lot of overhead just from the fact that fingerprints and mini-funge exist at all, whether they're enabled or not 17:23:11 256KB L2 cache. 17:23:18 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 17:23:25 AnMaster: and don't forget that I still do file IO there, since I have i and o. and then there's concurrency. 17:23:27 Deewiant, not the way I plan to do it, if they are not enabled, do not check 17:23:33 Deewiant, hm 17:23:44 Deewiant, I know my hash table isn't very efficient 17:23:54 and wrapping with cardinal could be made faster 17:24:09 considering that I think mine still has potential 17:24:12 :) 17:24:28 I just use what's built-in to D, it's hardly optimal 17:24:32 Deewiant, I'll do some gprof analysis later 17:25:06 just I find gprof output exceedingly hard to parse 17:25:35 bbl food 17:29:38 you do realize there are frontends to gprof :-) 17:32:22 Deewiant, tried kprof 17:32:35 know any good frontend? 17:32:42 no, haven't used gprof much 17:34:38 Deewiant, I got an idea for how to make support for fingerprints almost as fast as without fingerprints when they are disabled 17:34:48 instead of mapping each to reflect I got a better idea 17:38:17 Deewiant, how does the last version perform for you now 17:38:36 ccmake should now show a use 64-bit option 17:39:06 -!- sekhmet_ has joined. 17:41:04 -!- sekhmet has quit ("Reconnecting"). 17:41:50 -!- sekhmet_ has changed nick to sekhmet. 17:42:55 looks like it's about twice as fast as CCBI 17:49:30 Deewiant, currently yes 17:49:40 of course file IO would make it slower 17:49:49 and so on 17:50:32 Deewiant, and I know the hash library I use is not very performant indeed 17:50:46 and there is room for lots of optimizing in wrapping code 17:50:54 AnMaster: it's probably more performant than the D internal one, which I know to be quite poor 17:51:03 ah ok 17:51:25 Deewiant, problem is, interally, the hash library mallocs once for each cell, to store some data 17:51:43 if you compile with debug, you can see that from gdb, by doing: call GC_dump() 17:51:50 A LOT of output of small allocations 17:54:06 the D one probably does that too, although it might be smarter in that it allocates in blocks 17:54:10 don't know 17:56:01 Deewiant, well the values I allocate in blocks, but the key data it does internally into small blocks 17:56:21 I know a better hash library, but I think it may have license issues 17:57:28 speaking of licenses, I don't see CCBI's license anywhere in cfunge08, although you've even copied a comment directly from it ;-P 17:57:49 Deewiant, yes but isn't it BSD? 17:57:56 you said that before 17:58:02 yes, and what does the license say 17:58:15 that means it is leegal to relicense it under GPL in fact, afaik? 17:58:17 "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer." 17:58:21 hm 17:58:34 Deewiant, I'll change the comment if you want though 17:58:37 so just slap CCBI's license.txt in COPYING and you're good from my point of view 17:58:49 -!- sekhmet_ has joined. 17:59:23 Deewiant, it is the 3-clause BSD license? 17:59:33 yep 17:59:43 the one with the advertisement rule? 17:59:49 * AnMaster changes the comment 17:59:55 no, that was the 4-clause one 17:59:58 ah 18:00:25 AnMaster: just cat COPYING license.txt > COPYING :-P 18:00:39 Deewiant, afraid there may be an issue with doing that 18:00:45 how's that 18:00:46 -!- sekhmet has quit ("Reconnecting"). 18:01:05 Deewiant, would be confusing and probably not ok according to either your license or GPL 18:01:17 AnMaster: no, that's exactly how it's done 18:01:31 Deewiant, show me some other software doing that 18:01:34 -!- sekhmet_ has changed nick to sekhmet. 18:01:42 AnMaster: just say "cfunge08 uses some parts of stuff based on CCBI, which is licensed thus:" 18:01:45 AnMaster: windows, for instance :-P 18:01:51 AnMaster: it has parts of BSD's network stack 18:01:53 Deewiant, well open source software doing it 18:02:31 you want me to go through random src projects looking for something which uses multiple projects' code? 18:02:36 s/src/open src/ 18:02:45 heh ok no 18:03:59 google finds some stuff 18:04:05 AnMaster: http://www.j-dom.org/download/README for instance 18:04:12 don't know what that is but it has it the way it should be 18:04:16 "The Hypersonic SQL license means that we must include the following, which applies only 18:04:20 to the files in hsql.jar: 18:04:21 Deewiant, just rewrote comment locally anyway before you mentioned it her 18:04:22 and such 18:04:33 it's shorter now 18:04:38 // The weird stuff below, is, as described by CCBI: 18:04:39 // Instruction executes *at* k 18:04:39 // If the instruction k executes, changes delta or position, we are finished. 18:04:39 // If it doesn't we should jump to *after* the instruction k executed. 18:04:45 AnMaster: but you've still been reading my source and basing much of your stuff on it :-) 18:04:59 Deewiant, yeah, true, and will even more for fingerprints 18:05:28 Deewiant, problem is, it's hard to pinpoint where exactly is steeling your stuff 18:05:40 a line or algorithm here and there 18:05:49 AnMaster: so just say "some of this stuff, you don't need to care what" 18:06:08 ok good idea 18:09:55 -!- slereah_ has joined. 18:09:55 -!- slereah__ has quit (Read error: 104 (Connection reset by peer)). 18:14:20 Deewiant, pushed change. Hope you are now happy 18:15:22 yeh, looks good to me :-) 18:16:18 Contents of section .data: 18:16:18 606128 00000000 00000000 00000000 00000000 ................ 18:16:18 606138 305e6000 00000000 0^`..... 18:16:21 * AnMaster wonders what that is 18:16:36 almost all is .rodata 18:16:45 heh 18:16:54 I guess some static variables 18:17:13 Yeah. 18:17:16 And string constants. 18:17:26 pikhq, nop they are .rodata 18:17:29 s/constant/literal/ 18:17:34 so are literals 18:17:41 Hmm. 18:19:12 pikhq, btw I looked at the gcc -S output for the optimized binary and compared with the -O0 one 18:19:23 -!- sebbu has joined. 18:19:28 in the optmized almost all lines are just register operations 18:19:48 in the -O0 one, there is a lot of push and pop 18:19:48 heh 18:27:05 does anyone compile befunge 18:27:05 ? 18:27:11 or anything 18:27:40 I found a reference to a "real" befunge compiler on google but the page is gone 18:28:06 it might be quite simple, but you need to do compilation at runtime too 18:28:34 do making a native compiler would basically require you to include something like gcc 18:28:44 in every runnable prog that is 18:28:58 *so 18:32:20 oklopol, JIT should be possible 18:33:24 oklopol, indeed, do one if you want 18:33:32 you would be even faster than mine :) 18:33:43 of course you need to pass mycology as well 18:34:32 "MCBC is an MS-DOS only Befunge-93 compiler" 18:34:34 there was ajti befunge compiler 18:34:36 jti 18:34:38 jit 18:34:42 somewhere 18:34:44 hm 18:34:58 Deewiant, I doubt it supports p 18:35:33 without p (or in 98, s as well) it would be doable 18:35:34 AnMaster: all the pages which link to it say it's fine 18:35:43 AnMaster: for almost all programs, there will be no compilation at runtime. 18:35:43 hm 18:35:47 oklopol: the wiki page actually talks about compilation 18:35:55 it's just programs that require it can always be writen 18:35:58 *written 18:36:02 "The Betty compiler, for example, treats every possible straight line of instructions as a subprogram, and if a p instruction alters that subprogram, that subprogram is recompiled." 18:36:06 oklopol, I use p a lot in my code 18:36:07 that's JIT 18:36:16 lament, yep 18:36:19 sounds nice 18:36:23 AnMaster: do you change code at runtime? 18:36:27 i was going to write a befunge compiler like that 18:36:32 but, lazy 18:36:35 that appears to be the only reference to betty, though :-/ 18:36:43 that Google can find, anyway 18:36:43 oklopol, yes in befunge I would 18:37:24 i see 18:37:29 -!- faxathisia has joined. 18:37:50 http://quadium.net/funge/tbc/ 18:37:52 there is that I find 18:38:07 doesn't count 18:38:25 hm true just standalone interpreter/code bundler 18:38:33 with befunge you can do either threaded code or JIT 18:38:44 -!- ehird has joined. 18:38:53 lament, threaded code would be same as interpreter? 18:39:00 i just came up with awesome ideas for the underload compiler \o/ 18:39:02 AnMaster: no 18:39:08 no? 18:39:11 AnMaster: interpreter is a main loop that looks at individual instructions 18:39:16 lament, aye 18:39:26 AnMaster: threaded code is each instruction is a piece of executable code, that executes and then passes control to the next instruction 18:39:27 like ccbi and cfunge does it 18:39:37 lament, sounds weird 18:39:41 not really 18:39:43 AnMaster: not weird 18:39:49 hm 18:40:00 AnMaster: forths uses it 18:40:03 the firs tforth, for example :) 18:40:07 so it dates back to at least the 70s 18:40:11 so, maybe weird 18:40:15 but not in the 'new and crazy' sense 18:40:19 it's the normal way to compile forth, and it's how my brainfuck to smetana compiler worked :) 18:40:21 actually you don't need to compile befunge, you can just make a CPU that executes befunge 18:40:25 try one in VHDL 18:40:26 or whatever 18:40:28 :D 18:40:30 AnMaster: why do you think forths are really, really damn fast? 18:40:35 because of threaded code, mainly. 18:40:37 ehird, no idea that they were 18:40:43 (and the whole 'damn minimal semantics' thing) 18:40:52 forth is such a lovely language. i wish it were usable. 18:40:55 http://www.forthfreak.net/index.cgi?BashForth 18:40:56 slow? 18:40:58 :P 18:41:07 AnMaster: gosh, I wonder 18:41:17 lament: insert oblig. factor propaganda here 18:41:25 * ehird reads reddit too much, mind b0rken :( 18:41:31 :-) 18:41:35 hmm 18:41:38 StringThreadedCode 18:41:56 that sounds AWFUL 18:41:56 :D 18:41:56 ehird: http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=bigforth&lang2=gcc 18:41:58 oh my god 18:41:59 ehird: i have looked just a little at factor, and it seems to be much less lovely 18:42:00 you just basically store the code 18:42:01 :D 18:42:13 lament: well duhhhh 18:42:15 i mean traditional forths 18:42:23 and also never compare anything to gcc 18:42:29 ehird: uhhhhh? 18:42:31 gcc has millions of people micro-optimizing it 18:42:35 Deewiant, I'm working on fingerprints atm, well mine will be virtually as fast when they are disabled, and even virtually as fast as long as no finger print is loaded, but it will be slower if they are loaded, then on same speed as CCBI I guess 18:42:36 it will always win :) 18:42:39 bigforth is on optimized compiler 18:42:42 yes 18:42:44 you don't need that 18:42:47 i mean traditional, old forth compilers 18:42:48 besides forth is really low-level 18:42:50 are blazing 18:42:53 so for benchmarks 18:42:59 you should be able to hand-optimize 18:43:02 AnMaster: all depends on what fingerprints you implement. :-) 18:43:06 lament: not the point 18:43:08 bad compiler choice. 18:43:13 i don't understand 18:43:22 Deewiant, yes indeed, but I mean fingerprint mechanism in general 18:43:27 i am talking about old, traditional forths 18:43:30 they -are- blazing 18:43:34 ehird: you're saying biforth is worse than those? 18:43:38 lament: Yep. 18:43:44 you're ntus 18:43:50 and i'm not even gonna correct that typo 18:44:08 lament: it doesn't even use threaded code 18:44:10 from what i can see 18:44:48 bigforth website is amazing 18:44:56 it was created in 1997 and the design was never changed 18:45:03 so in that way, it's like Factor :) 18:45:11 lament: factor had a redesign like a year ago 18:45:12 :p 18:45:26 ehird: http://factorcode.org/slava/ 18:45:56 lament: oh, yes, that. 18:46:04 (i am assuming you know that was created *recently* :p) 18:48:05 also 18:48:11 translating functional stuff to a c-style syntax is amusing 18:48:15 U[] map(U(T) func, T[] lst) 18:48:40 * AnMaster is still wondering about a befunge CPU 18:48:41 as in 18:48:45 coded in VHDL 18:48:49 or something like that 18:49:01 AnMaster: not very interesting, really 18:49:08 you'd need to translate it to 1d before execution 18:49:15 to 1d? 18:49:18 1-d 18:49:24 ehird, why? 18:49:39 it could represent memory as 2D 18:49:43 not impossible 18:49:50 for befunge93 at least 18:50:09 you could make a custom computer architecture for it 18:50:53 Deewiant, what is the point of the NULL fingerprint? 18:51:48 AnMaster: easy unloading of whatever's currently loaded? 18:51:57 behh, I have to write a b98 interp now 18:52:04 Deewiant: is it painful or just tedious :( 18:52:04 Deewiant, but whatever is currently loaded would be loaded under 18:52:17 ehird, why do you want to write one? :/ 18:52:17 ehird: I found it quite fun, actually 18:52:22 ehird: but some of the fingerprints were painful 18:52:25 AnMaster: why do you? 18:52:29 Deewiant: TIME TRAVEL! 18:52:32 AnMaster: I mean load whatever, then unload NULL 18:52:35 ehird: yeah, that one in particular. 18:52:43 Deewiant: it'll be a fun day with \8, I guess. Or do you really need ncurses? 18:53:05 only if you implement the NCRS fingerprint :-) 18:53:24 ehird, and yes quite fun apart from three things 1) stack stacks 2) wrapping 3) y instruction 18:53:27 those are painful 18:53:32 Deewiant: hmm. doesn't that require interpreter support? 18:53:36 fingerprints I'm working on atm 18:53:39 Deewiant: like, you can't just ad-hoc add it 18:53:42 you must design for it 18:53:54 ehird, you could ad-hoc NCRS I think 18:54:09 ehird: ncurses, or fingerprints 18:54:10 CCBI certainly does 18:54:31 Deewiant: nc 18:54:39 -- also jeez, befunge 98 needs a gc? 18:54:44 this'll be tons of fun ;) 18:54:50 (of course I will write my own! :p) 18:54:56 ehird: the interface is such that the befunge program starts up NCRS, so it can be added "ad-hoc" 18:55:01 ehird: and no, you don't need GC 18:55:02 ehird, however two things I can see would require redesign: time travel, and the hover mode stuff, 18:55:15 ehird, why would you need a gc? 18:55:17 and IMAP 18:55:19 and possibly others 18:55:22 it is just that a gc is so much easier 18:55:27 Deewiant, what is IMAP one? 18:55:38 AnMaster: remap instructions, like swap 5 and 4 for instance :-) 18:55:49 Deewiant, ok won't do that one then 18:56:02 AnMaster: but "redesign" is a bit overstating it, I think 18:56:10 AnMaster: I thought you hated gc 18:56:16 Deewiant: eh, that's not too hard 18:56:19 just more indirection! ;) 18:56:19 ehird, I hate it with GUI apps 18:56:26 they just need adding data to the IP structure and some extra handling in all instruction execution 18:56:30 AnMaster: change of heart 18:56:50 ehird, or rather, I love it when it works, and hate it when it doesn't 18:56:50 :P 18:57:19 Deewiant, anyway anything requireing any exensive core change I won't do 18:57:39 and "extensive" is a bit pushing it, as well :-) 18:57:50 MODE is somewhat extensive for queue and insert mode 18:57:55 TRDS is definitely extensive 18:58:00 yes 18:58:01 the rest, I don't think so 18:58:03 and IMAP would be too 18:58:04 can't recall anyway 18:58:10 not IMO 18:58:14 as I use a switch case 18:58:28 and I will continue to do that for anything but A-Z 18:58:32 AnMaster: basically it's "instruction = ip.mappings[instruction];" 18:58:45 before you head in the switch-case 18:58:47 Deewiant: how many fprints does ccbi implement? 18:58:52 Deewiant, yes and that would make it slower :/ 18:58:57 ehird, lots 18:58:59 almost all 18:59:04 ehird: all that I know of except WIND and SGNL 18:59:11 Deewiant, and FNGR 18:59:11 Deewiant: what does TURT use? 18:59:12 and TERM on non-Windows, unfortunately 18:59:12 :) 18:59:14 or whatever it was 18:59:22 AnMaster: FNGR? 18:59:28 ehird: outputs an SVG file 18:59:28 Deewiant, RC/Funge crap 18:59:34 AnMaster: oh yeah, that one 18:59:36 Deewiant, you said it in your readme 18:59:42 Deewiant: oh sheesh 18:59:43 that sucks 18:59:43 :D 18:59:46 AnMaster: crap indeed, it contradicts the spec 18:59:53 ehird: I found it the easiest option actually 18:59:56 mine will be EXTENSIVEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE 18:59:58 I don't plan to do TURT 18:59:58 ehird: it's up to you 19:00:06 Deewiant: mine will do SDL, SVG, PNG, ... :D 19:00:10 :-P 19:00:10 configurable! 19:00:26 ehird, just FILE and let befunge program output those themself 19:00:38 ehird, however do NOT change specs for TURT 19:00:43 you need some variant 19:00:45 totallyfreakingawesomebefunge98 --fprint=TURT,--sdl 19:00:52 AnMaster: ehm, why would i need to 19:00:54 ah that would work 19:00:56 just a command line op as you see there :D 19:01:01 of course --fprint will be a horrible hack 19:01:05 ehird, allow the program to set output type? 19:01:09 --fprint=NAME,FOO... 19:01:12 replaces , with ' ' in FOO 19:01:14 ehird, eww 19:01:17 parses the options 19:01:22 and sends them off to NAME finger print 19:01:22 you can't use getopt then :( 19:01:27 AnMaster: thank god 19:01:30 ehird, getoptlong is evil 19:01:33 yes 19:01:34 it is GNU only 19:01:36 so is getopt 19:01:38 and 19:01:41 AnMaster: that's ridiculous 19:01:42 ehird, I use getopt :) 19:01:45 bsds implement it nowadays 19:01:47 gnu is evil!!! 19:01:56 lament, hah not sure about that 19:02:03 ehird, what language will you code yours in? 19:02:10 I want Aquarius :( 19:02:11 ehird: malbolge? :-) 19:02:15 AnMaster: writing one in python with numpy for fungespace at first 19:02:17 then, C. 19:02:21 micro-optimized, of course. 19:02:25 ehird, haha 19:02:27 ehird, C99? 19:02:28 you're all insane :-) 19:02:31 i hope to have the ugliest sprawling mass of befunge interpreter that exists 19:02:34 AnMaster: K&R represent! 19:02:36 I mean, C89. :) 19:02:46 --fprint=TURT,--svg=foo.svg,--sdl # MULTIPLEXINGF 19:02:50 ehird, offers some nice restrict keywords to ehird for further micro-optimizing 19:02:52 :P 19:02:56 C99 feature 19:02:59 :P:P:P 19:03:02 AnMaster: __asm__ represent 19:03:07 ehird, not portable 19:03:11 ehird: how about fortran-77 19:03:11 AnMaster: x86 represent 19:03:16 ehird, if it doesn't work on amd64 as welll 19:03:23 AnMaster: 286 represent 19:03:28 ehird, look my current one can use 32-bit numbers if you want 19:03:39 AnMaster: NIH represent 19:03:43 NIH? 19:03:47 Not INvented Here 19:03:56 -_- 19:04:33 Deewiant, anyway I'm wondering about a 128 bit integer mode, iirc there is some __int128 type of gcc? 19:04:39 would be slow of course 19:04:43 but just as an alternative 19:04:53 beats me, and go ahead 19:05:01 hmm 19:05:06 does the spec permit bignums? 19:05:07 :D 19:05:11 ehird, they do 19:05:13 not very well 19:05:16 Deewiant: damn 19:05:20 ehird, as long as you can say how many bytes it is 19:05:20 there are some grey areas 19:05:22 so like all programs would break? 19:05:26 AnMaster: -1 19:05:26 but it is explicitly said that it's allowed 19:05:36 Deewiant: will programs break, though 19:05:36 ehird, well that's my plan as well 19:05:44 no, wait 19:05:50 extend the numbers 19:05:51 pushing -1 would kinda suck for programs that test for a minimum size of 6, for instance :-) 19:05:51 ehird, for funge08 standard 19:05:52 so you can say infinity 19:05:52 :D 19:05:53 or maybe 09 19:05:55 I'll see 19:06:12 ehird, hah 19:06:12 Deewiant: but seriously -- do programs tend to assume infinite bitsize? 19:06:30 ehird, they tend to assume 32-bit or better I think 19:06:33 I guess most programs would be happy with 16-bit integers :-P 19:06:55 Deewiant, not sure, you would need to store handprints and such in one 19:07:09 ehird: I'm not sure what you mean by 'tend to', since there aren't that many written programs ;-) 19:07:11 ehird, btw, the handprint CFUN is in use 19:07:14 by mine 19:07:18 just so you know 19:07:22 and don't try to use the same 19:08:01 there's already been a fingerprint overlap, two different SOCKs 19:08:04 ehird, in my funge08 specs that I'm working on I decided to allow trinary funge or in fact n-nary funges 19:08:10 Deewiant, ouch 19:08:24 Deewiant, we really need a new register 19:08:28 maybe you want to host it? 19:08:29 AnMaster: but fortunately the only difference is that one includes SCKE and the other doesn't 19:08:43 AnMaster: mine was called cfunge before yours : 19:08:44 Deewiant, SCKE? 19:08:44 :| 19:08:48 AnMaster: another fingerprint 19:08:49 ehird, it wasn't 19:08:55 i named it while tyou were just considering bash 19:09:01 AnMaster: adds a few funcs, meant to be used in conjunction with SOCK 19:09:02 so nyah, CFUN is miiine :D 19:09:10 ehird, nop, I already had planes on cfunge back then 19:09:13 meh, awfully creative names there :-P 19:09:19 AnMaster: welp, sorry, i'd already had a directory up 19:09:21 so HAH 19:09:21 ehird, anyway mine is released 19:09:31 bah 19:09:31 ;) 19:09:31 ehird, and CFUN is my handprint 19:09:36 tough. :p 19:09:41 for you yes 19:09:52 no.. i had the directory tree and handprint before, just not released 19:10:05 ('tough for me' -- I guess the befunge police are going to raid my house) 19:10:15 handprints & fingerprints are broken anyway. 19:10:21 they're centralized and overlaps are too easy. 19:10:21 ehird, well they are indeed 19:10:30 ehird, well just call your CBEF 19:10:33 a URI would be nicer 19:10:37 AnMaster: nooo, you do that :D 19:10:41 ehird, I don't 19:10:46 http://elliotthird.org/b98/cfunge 19:10:51 I plan to provide unefunge version 19:10:52 AnMaster: I agree with ehird, the whole handprint/fingerprint mechanism is a bit messed up, shouldn't need centralization 19:10:52 as well 19:10:57 but I don't know if it can be solved well 19:11:00 AnMaster: well, I am supporting N-dimensionals 19:11:00 Deewiant, indeed 19:11:03 ehird, 404 19:11:07 AnMaster: 404, gosh really 19:11:09 that was an example URIprint 19:11:10 duh 19:11:17 ehird, yes that would be a good idea 19:11:36 AnMaster: anyway, since i support any N dimensions, I have the right to CFUN 19:11:38 :) 19:12:00 bbl food 19:12:41 Deewiant: URIprints might be a bit verbose though 19:13:14 and they can overlap as well, just takes time 19:13:30 Deewiant: no, that's not the point 19:13:42 URIs specific purpose are unique, global identifiers 19:13:43 :) 19:13:58 what's better, sometimes they're URLs. then humans can utilize them -- like loading it via http 19:14:02 yes, they should be that, but they aren't always :-P 19:14:14 Deewiant: sure, but it is far better than the current system 19:14:21 agreed 19:14:26 besides, the odds of clashing and then someone else doing a different ext --- it is just far too unlikely :) 19:14:40 here is what would cause a clash 19:14:46 - someone releases an ext under a uri 19:14:57 - it is a very very common uri 19:15:00 - someone else thinks it's good 19:15:05 now I dunno about you but that seems HIGHLY unlikely 19:15:06 ehird, good idea, one for my funge08 specs 19:15:08 thanks 19:15:12 in the case where it's a URL: 19:15:18 - someone has a URL probably on a domain 19:15:20 - releases ext 19:15:33 - the domain expires --NOTE AT THIS POINT THE URI IS STILL FINE! It's not a URL, even if it's identical. 19:15:53 ehird, along with gnirtsn (string with size in front) 19:15:53 - someone else gets it, also a befunger 19:15:53 - they make another fprint 19:15:53 - and release it under the same uRI 19:15:55 that's what I was thinking 19:15:57 both of those will basically never happen 19:15:58 ever 19:15:58 :) 19:16:02 because, in 99% of cases, they will be URLs. 19:16:05 Deewiant: yes. 19:16:08 but even so 19:16:13 the likelyhood of the above 19:16:18 is .. 19:16:19 yeah. 19:16:24 :-) 19:16:37 ccbi.d:319: Error: cannot implicitly convert expression ((helpRegex.test)(s)) of type int to bool 19:16:38 whut 19:16:38 :D 19:16:53 old compiler, old tango? 19:16:59 Deewiant: 4.1 19:17:02 and dsss'd tango 19:17:07 lunix, x86 19:17:17 4.1 doesn't mean anything, which version of GDC is it :-) 19:17:29 and is that all it says? 19:17:44 gdc (GCC) 4.1.3 20070831 (prerelease gdc 0.25, using dmd 1.021) (Ubuntu 0.25-4.1.2-16ubuntu1) 19:17:49 could be too new a tango, actually 19:17:51 Deewiant: it had some ncurses foobar but that doens't happen now 19:17:51 so. 19:17:54 and yeah 19:17:55 I'll have a look see 19:17:55 the tango is the latest 19:18:15 ehird, cfunge 0.1.0 released, just making a tar ball for it 19:18:16 nope, test should return bool still 19:18:22 AnMaster: tough. CFUN is mine 19:18:25 :) 19:18:27 ehird, no it isn't 19:18:50 AnMaster: because denying something i said on irc will cause the befunge police to come and get me? :) 19:18:57 ehird, nop 19:19:03 ehird: that's /all/ it says? if so, just put cast(bool) before it and hope it works :-P 19:19:03 just because I released first 19:19:50 AnMaster: Well, just because you're an ass and didn't ask the channel if anyone had used the fingerprint before using it, won't stop me using it.. 19:19:57 ehird, I did 19:20:00 you weren't here 19:20:12 well then, now i am 19:20:20 and now it's too late 19:20:20 also, sorry for not being present 100% of the time 19:20:24 and no it isn't 19:20:32 it takes about 10 keypresses to tap over a string literal. 19:20:40 it does for you 19:20:44 but release is made 19:20:54 AnMaster: release is made!12121 19:21:03 it is now set in stone, and i will just have to weep, because i wasn't there. 19:21:07 * ehird = horror and shame 19:21:43 what's with all the trolling :-P 19:21:51 Deewiant: reactionary trolling 19:21:53 to trolling 19:21:54 :) 19:22:28 welp, i'll keep using CFUN, because i've been using it for longer than AnMaster has, and just because i wasn't there on one specific date doesn't mean that he now has the right to it 19:22:43 if AnMaster would like to complain, maybe he could move to a fingerprint that wasn't in use when he chose it 19:22:50 timestamps or it didn't happen 19:22:58 -!- olsner has joined. 19:23:14 except that the damn things can be falsified, d'oh 19:23:27 Deewiant: I don't think thoughts can be timestamped. however, if he had asked earlier, I would have been happy to tell him that yes, it was in use. 19:23:52 http://rage.kuonet.org/~anmaster/cfunge/ 19:24:10 AnMaster: 'my heart has been ripped out and filled with dread. I think I will cry myself to sleep.' 19:24:15 i am not sure what kind of response you are aiming for. 19:24:41 ehird, that no one complained when I announced I would use CFUN 19:25:00 AnMaster: because I wasn't here. does this kind of thing not process for you? 19:25:01 Deewiant (iirc, or maybe ais, even said it was a good choice) 19:25:09 i can hardly say it was in use when I wasn't there 19:25:17 and expecting me to and using that as justification is ridiculous 19:25:44 ehird, same is expecting me to believe you actually had selected than handprint before 19:25:58 AnMaster: uh, yes i did 19:26:14 (other response that you seem to expect: 'YES! It is a befunge conspiracy of epic proportions. how did you figure me out?!') 19:26:14 expecting me to and using that as justification is ridiculous 19:26:15 as well 19:26:36 AnMaster: I grepped the logs, a quick check suggests he's said nothing of the kind 19:27:07 Deewiant: that is correct. 19:27:10 Deewiant, who? ais? 19:27:25 Deewiant: I do not see why I would mention it when the question of usage was not asked. 19:27:42 AnMaster: anybody :-P 19:28:04 mar 11 18:50:24 CFUN eh 19:28:04 mar 11 18:50:33 Deewiant, er yes? 19:28:04 mar 11 18:50:36 is it in use? 19:28:04 mar 11 18:50:47 don't think so 19:28:04 mar 11 18:51:02 most use BEF or something instead of FUN 19:28:05 mar 11 18:51:14 FUN as in FUNGE 19:28:22 yeah, I said I don't think it's in use 19:28:35 and no one else complained 19:28:50 you can't expect people to be watching IRC all the time 19:28:53 ehird, you haven't announced the handprint before either btw 19:28:57 [18:28] you can't expect people to be watching IRC all the time 19:28:58 exactly 19:29:27 and there is absolutely no way I can prove that I had CFUN before you, because that's physically impossible 19:29:44 the only thing you can do is make the assumption that i'm not lying for the fun of it, and believe it 19:29:51 or.. decide that i must be lying 19:29:57 for some crazy reason 19:30:02 ehird, but you got a suggestion for other handprint 19:30:04 that is as good? 19:30:24 and would still work with the name cfunge 19:30:35 AnMaster: no it's not. you suggested CBEF 19:30:42 it is an N-funge interpeter. 19:30:54 ehird, and I don't like that much, because I will add more dimensions 19:30:59 besides, CFUN is fine and I was using it prior to you. 19:31:09 why should i have to change the fingerprint that I already used? 19:31:45 same for me 19:31:47 ehird: for what it's worth if it's only in your head, I'd suggest it was in fact AnMaster who "was using it" 19:32:03 Deewiant: well, no. it is probably somewhere on my harddrive 19:32:15 Deewiant, but released *shrugs* 19:32:18 still, the point is -- if I was there when he asked, I could have honestly answered 'yes. it's in use.' 19:32:32 AnMaster: sticking a tarball on http is not a way to seal your ownership of something.. 19:32:38 -!- jix has joined. 19:36:36 ehird, see what Deewiant said 19:37:27 and in any case, I'd say whoever releases something first is the one who can claim rights to the name 19:37:37 but whatever, fight it out amongst yourselves :-P 19:37:45 Deewiant, I'm not going to fight 19:38:11 ehird: since you're going bignums why not just make the handprint "CFUNGE", nobody's claiming they have to be 4 bytes :-) 19:38:15 I don't simply care of ehird wants the name, he didn't announce it, nor release it, first 19:38:29 Deewiant, create idea! 19:38:31 greate* 19:38:32 great* 19:38:37 AnMaster: I'll just state that I was going to use CFUN before you even started working on Bashfunge, and will continue using it. there is nothing to do with 'wanting the name' because I'll just release with it. 19:38:46 You can argue with that if you'd like; fin 19:38:47 e 19:39:20 ehird, anyway I'm also using the name cfunge for the interpreter, or cfunge08, both are valid names for it 19:40:24 AnMaster: Why not use CF08? 19:40:39 Since you're not implementing strict Funge-98, you indicate that it's your standard. 19:40:56 ehird, maybe, I will implement strict 93, 98 and 08 19:41:02 as standard modes 19:41:08 I already got some code in place for it 19:41:13 just not functional yet 19:41:20 AnMaster: well, the interpreter is called cfunge08 is it not? 19:41:24 therefore, CF08 is a good fingerprint 19:41:28 handprint 19:41:39 ehird, it is, but well ehird: for what it's worth if it's only in your head, I'd suggest it was in fact AnMaster who "was using it" 19:41:45 ehird, and in any case, I'd say whoever releases something first is the one who can claim rights to the name 19:41:54 you don't accept those arguments of Deewiant ? 19:42:11 it's obvious he doesn't care 19:42:33 Hi all. 19:42:45 Deformative: got a spec written yet? 19:43:03 I have it started. 19:43:18 AnMaster: so even sayiung that CF08 is a good handprint, you don't want to use it because.. 19:43:30 ehird, because I'm convinced of what Deewiant said 19:43:44 ehird, CF98 would be good for your one in that logic 19:43:51 AnMaster: hardly.. 19:43:57 yes it would 19:44:04 because all currennt fingerprints are funge-98 ones 19:44:09 so yours is the one that needs explicit clarification 19:44:13 besides, mine isn't called cfunge98 19:44:15 ehird, anyway 98 is the standard mode for me 19:44:16 yours IS called cfunge08 19:44:18 mine* 19:45:04 bbl implementing fingerprints 19:45:46 Deewiant: http://deformative.hosting.arsfides.com/upload/files/1/spec.txt 19:46:53 "ignored args" - ah, of course, I was wondering how that'd look otherwise :-) 19:54:57 Heh. 19:59:02 Reordering the args is quite an interesting problem. 19:59:19 Discussed it for a long time yesterday if you have logs. 20:15:34 CHALLENGE 20:15:34 # define UL_DISCARD foo = UL_stk->prev; free(UL_stk->top); free(UL_stk); UL_stk = foo; 20:15:40 write that without the temp var'foo' 20:15:41 :D 20:15:54 impossible i think 20:17:16 ehird: Did you see the challenge from yesterday? 20:19:48 Deformative: No, 20:20:10 ehird: if you're feeling lucky, just remove foo and then do UL_stk = UL_stk->prev at the end ;-) 20:20:21 Deewiant: haha 20:20:33 it'll probably work in most cases 20:20:39 and crash the program in others ;-) 20:21:02 * ehird is rewriting the Underload2C prelude 20:21:09 ehird: Want me to post it? 20:26:25 -!- slereah__ has joined. 20:28:21 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 20:35:03 Deformative: k. 20:35:15 http://members.iif.hu/visontay/ponticulus/images/szovegek/begriffsschrift.jpg 20:35:16 Heh. 20:35:34 For some reason, this notation was never used again, as far as I know! 20:39:25 hmmmm 20:39:31 ' Please insert your fruit here.' 20:39:37 that's what i'm putting in the prelude for the compiler to replace 20:39:38 :D 20:39:57 it'll probably work in most cases 20:39:57 and crash the program in others ;-) 20:39:58 indeed 20:40:19 Deewiant, it would crash in cases where the system mmap mallocs 20:40:35 like both glibc (for larger objects) and openbsd (for all objects) does 20:40:51 it will unmap it on free 20:41:09 hmm, that IS one thing the world needs... 20:41:18 symntax for template sin c commands 20:41:18 ehird, what? 20:41:19 err 20:41:19 comments 20:41:20 like 20:41:25 / foo 20:41:28 //foo 20:41:30 I mean 20:41:30 yes 20:41:31 /*$ foo */ 20:41:36 ehird, err what? 20:41:41 AnMaster: 'templates' 20:41:45 syntax for templates in c commands 20:41:50 i.e. a widely accepted way to do it 20:41:56 ehird, there are no templates in C afaik? 20:42:00 it's a C++ feature 20:42:07 AnMaster: not C++ templates you dummy 20:42:09 /*$ foo */ means 'replace this comment with the value of foo' 20:42:15 err 20:42:25 ehird, see: #define 20:42:30 AnMaster: haahahahahaha 20:42:34 I mean for interpolating from EXTERNAL sources. 20:42:38 hm 20:42:40 Like the underload compiler does its compiler 20:42:42 *compiling 20:42:44 then stuffs it into the prelude 20:42:46 at the right place 20:42:53 I could put /*$ blimps */ in the prelude 20:42:59 yes? 20:42:59 Then, it would do something like: 20:43:05 launch the missiles 20:43:08 and blimps fall from the sky 20:43:12 interpolate textOfPrelude [("blimps",compiledCode)] 20:43:23 and then that marker would be transformed into the compiled blimps 20:43:29 we 20:43:30 w/e 20:43:31 * 20:43:50 AnMaster: 'i am going to tell you to use #define and be confused about your idea, then just say "whatever" when it is complained' 20:44:12 ehird, no, I just gave up trying to understand it 20:44:21 interpolate textOfPrelude [("blimps",compiledCode)] 20:44:22 let's say 20:44:31 textOfPrelude = "void foo() { /*$ blimps */ }" 20:44:31 ehird, you replace text at a marker? 20:44:34 and 20:44:38 compiledCode = "foobar" 20:44:40 that would return 20:44:46 "void foo() { foobar }" 20:44:50 so, just a regular template language 20:44:55 BUT, it's in c comment syntax 20:44:57 mhm 20:45:03 ehird, interesting 20:45:03 so its highlighted correctly 20:45:06 and is still valid C etc 20:45:16 AnMaster: it's just like how /** ... */ is accepted as docs 20:45:18 and highlighted thus 20:45:30 ehird, bah /** */ is for doxygen iirc? 20:45:35 AnMaster: no, everything 20:45:42 emacs highlights /** */ differently 20:45:43 try it 20:45:48 ehird, yes I know it does 20:45:53 it could do something similar for interpolation stuff 20:46:00 the only problem is, /*$ ... */ is ugly 20:46:00 :) 20:46:10 ehird, but I only seen it used for doxygen comments 20:46:17 /*$ blimps $*/ could work I guess 20:46:25 use /*/ ... */ and confuse people 20:46:36 Deewiant: heh 20:46:44 Deewiant, hah 20:46:44 hmm 20:46:46 /*< blimps >*/ 20:46:49 is highlighted differently by gcc 20:47:02 gcc? O_o 20:47:02 by gcc? 20:47:06 errr 20:47:07 emacs 20:47:08 XDDD 20:47:10 lol 20:47:11 what's this for? 20:47:12 ehird, hah :D 20:47:16 faxathisia: the underload compiler 20:47:21 same author.. 20:47:29 all the compiled blimps need to be stuffed into the right place in the prelude 20:47:36 ehird, yes but why does emacs highlight /*< >*/ differently? 20:47:37 i'm just devising a nice way for templating in C 20:47:37 :) 20:47:40 AnMaster: I have no goddamn idea 20:47:44 ok cool 20:47:44 but it works out nicely 20:47:46 hmm 20:47:50 I could be even more fancy, 20:47:51 ehird, it is probably used for something else 20:47:57 you risk a collision 20:47:57 and let the templating language do the numbering 20:47:58 Like thus: 20:48:26 7 20:48:35 /*< foreach blimps blimp >*/ case /*< blimp.num >*/: /*< blimp.code >*/ break; 20:48:36 :D 20:48:37 6 20:48:37 err 20:48:40 and an endforeach 20:48:41 heh 20:48:57 why is it inside comments o_o 20:49:04 faxathisia: so it stays valid c. 20:49:05 duh. 20:49:05 :) 20:49:09 well my example isn't valid 20:49:09 hehe 20:49:10 but still 20:49:10 doesn't look like valid C 20:49:14 it SCANS as valid c 20:49:18 heh 20:49:22 and editors highlight it OK 20:49:23 I see 20:49:27 Yeah cool 20:49:28 also indent it ok 20:49:32 It's a good idea 20:49:36 ehird, anyway the reason for /*< >*/ by emacs, is PROBABLY it is already used 20:49:42 AnMaster: who cares 20:49:43 :) 20:49:47 ehird, I suggest you check so there won't be a collision at least 20:49:56 ehird, then just use /** */ for it :P 20:50:03 it's more likely a bug in the hilighting 20:50:29 then I will report that to emacs ppl so they fix it for next version :D 20:51:05 embeddedness 20:51:07 /*< foreach blimps as blimp: 'case $blimp.num: $blimp.code break;\n' >*/ 20:51:08 haha 20:51:15 i should just embed lua in there 20:51:59 ehird, my emacs highlight it the same way btw 20:52:04 using emacs-23-pre 20:52:47 emacs-22 does it differently though 20:53:14 ehird, err wait, emacs-23 does it differently to, had wrong major mode 20:53:30 ehird, I think I know what it is 20:53:35 ehird, one line comments 20:53:39 for doxygen 20:53:46 I've seen it in structs 20:53:47 like 20:53:57 /*< blah blah */ 20:54:23 /*< for i=0,blimpc do out("case ", i, ":\n", blimps[i], "\nbreak;") end >*/ 20:54:25 hee 20:55:14 ehird, anyway (real world example): 20:55:16 typedef struct { 20:55:16 size_t i_items; /**< The current number of items in the table */ 20:55:35 ehird, so just as a warning < already got a meaning in start of comments 20:55:47 AnMaster: nuh uh 20:55:50 /**< 20:55:52 not /*< 20:56:03 ehird, yes, but I think I've seen /*< too 20:56:07 not sure though 20:56:15 and emacs highlights /** the same way as /*< 20:57:55 Deewiant, there? 20:57:56 ehird: http://deformative.hosting.arsfides.com/upload/files/1/spec.txt Sorry it took so long, I sorta fell asleep. 20:58:09 Deewiant, should fingerprints be local to ip in concurrent funge? 20:58:25 Deewiant, and, should they inherit over t? 20:59:58 all specified in the spec 21:00:05 070100002c0000000000000000000000000000000000000000000000000000000000dd8fff010000dd8f27000000fb02ef07000000fb01ef070000000000bc8f8800040000bc012f65746300 21:00:15 hex of a VAX program to rename /tmp to /etc 21:00:47 AnMaster: actually, the latter is unspecified 21:31:10 Hmm. 21:31:23 Looks like you guys are re-inventing Objective C. :p 21:42:06 pikhq: Eh? 21:43:35 Objective C is implemented as a fairly thin templating system over C. ;) 21:43:46 pikhq: Heh. 21:43:53 CFront! 21:44:03 (Though, of course, Objective-C doesn't actually compile into C..) 21:44:25 You can implement Objective C with just a preprocessor into C. 21:44:32 (GCC used to do just that) 21:44:53 pikhq: Same with anything. 21:44:54 :p 21:44:58 what more is a compiler? 21:45:03 Touche. 21:45:36 Objective C is, interestingly, a strict superset of C. . . 21:45:43 pikhq: Not interestingly -- sanely. 21:45:47 True. 21:45:52 Objective-C is really well designed like that. 21:45:58 Unlike C++. 21:46:01 Bingo. 21:46:15 higher order C 21:46:27 faxathisia: hee 21:46:39 int lambda (int x) { return ++x; } 21:46:42 I'm actually working on a little language which is the marriage of C and functional stuff 21:46:44 be very afraid 21:46:58 faxathisia: in mine that's: (x) => { return ++x; } 21:46:59 for now 21:47:03 -!- oerjan has joined. 21:47:18 :) 21:47:28 or 21:47:29 typed: 21:47:33 does it compile to ML or something? :P 21:47:38 int (int x) => { return ++x; } 21:47:46 faxathisia: naww 21:48:06 faxathisia: I managed to find a anice way to represent generic types 21:48:07 ehird: You could actually probably get GCC to handle anonymous functions with ease. . . 21:48:11 Here's id :: a -> a: 21:48:14 Already, they support *scoped* functions. ;) 21:48:16 T id(T a) { return a; } 21:48:25 That is, UpperCase = generic type. 21:48:31 Looks C-ish, which is a Good Thing. 21:48:42 Also, I decided that for passing around functions, Declaration Is Usage failed miserably. 21:48:43 So: 21:48:46 int main(){int foo(int *bar){++*bar;};int baz=0;foo(&baz);} 21:48:58 ^ Perfectly valid GNU C, does what you expect. 21:48:59 U[] map(U (T), T[]) 21:49:10 U[] map(U (T) func, T[] lst) // with arg names 21:49:17 not sure about that function type syntax yet 21:49:17 -frnested-functions is needed though 21:49:19 but it seems good 21:49:26 faxathisia: Or -std=gnu99. 21:49:28 yeah, really first class closures requires GC 21:49:33 oerjan: yes 21:49:41 oh, also.. 21:49:45 I have both 'void' and 'unit' :-) 21:49:52 mostly you use 'void' - for IO-only functions etc 21:50:00 unit is just there for.. mathematical nicety, I guess. 21:50:22 Oh yeah, and algebriac data types in da house. 21:50:25 void = False, unit = True 21:50:49 data LL { nil, cons(a, LL) } 21:50:50 hmmm 21:50:55 that raises problems with generic types 21:51:00 But I don't want to use 'a 21:51:01 that's ugly 21:51:02 :S 21:51:04 * oerjan considers that Haskell could have used Void instead of () for things like IO () if Void had been thought of at the time 21:51:08 what is <..>? 21:51:21 faxathisia: that's the new syntax for parametized types 21:51:24 :S 21:51:26 data LL a = Nil | Cons a (LL a) 21:51:29 translated to haskell 21:51:29 can't you do bettec? 21:51:33 than C++ 21:51:35 faxathisia: precedent in C-alikes: C++, Java 21:51:42 it looks alright, anyway 21:52:20 however, I do need to solve that generic thing 21:52:34 data list_t { nil, cons(a, list_t) } 21:52:36 that would work 21:52:37 but.. 21:52:47 hmm 21:52:51 data list_t { nil, cons(a, list_t) } 21:52:54 err 21:52:55 data list_t { nil, cons(T, list_t) } 21:53:00 that would produce 21:53:06 list_t nil 21:53:06 and 21:53:12 err wait 21:53:13 list_t nil 21:53:14 and 21:53:21 list_t cons(T, list_t) 21:53:23 so, just right 21:53:35 faxathisia: I haven't figured out 'T a' vs 'T a()' yet. 21:53:44 and the most elegant way to do it 21:53:49 I considered: 21:53:59 'T a = b;' is short for 'T a() { return b; }' 21:54:08 and zero-arg functions don't need () to call 21:54:39 GregorR: Convince him to stop. 21:54:45 Show him the ways of D. 21:54:56 Heh, hardly. D is nothing like the thingy I'm making. 21:55:05 And I've used D, thankyouverymuch. I didn't like it, really. 21:55:14 I did not like D either 21:55:33 faxathisia: Yes. 21:55:35 also I beat a D coder in some contest using C... 21:55:44 For a start, and completely unrelated to all the other, more significant problems -- 21:55:47 the syntax is awkward. 21:55:56 It's like Perl, but with less symbols, making it even uglier 21:56:31 * pikhq goes off to try to install D 21:57:06 pikhq: 'Tell him that D is so much better!' 'Hm, D, I should try that.' 21:57:10 so many people like that :) 21:57:25 ehird: I was mostly joking, really. 21:57:31 ;) 21:57:40 pikhq: Good. Well that was to GregorR anyway. :P 21:57:49 But, seriously, I should try D. 21:57:51 faxathisia: any comments on T vs T()? 21:57:53 cwcrntcc 21:58:02 from :P 21:58:10 But something a bit more important. 21:58:16 I should make interrupts. 21:58:16 faxathisia: heh, hardly.. :) 21:58:22 faxathisia: dunno if I'll do continuations. 21:58:34 OCaml doesn't! :P 21:58:40 :o 21:58:48 (OCaml being the FP language that most resembles this one -- i.e. not pure, but not Lispy) 21:59:15 faxathisia: Maybe I'll do it the dumb way (stack smashing) 21:59:25 Also, the preprocessor is gone. # is still used though 21:59:34 #import cont /* it would probably be this */ 21:59:47 well if anyone wants to use cpp they can do just that 21:59:47 '#foo ...' at the start of a line means 'compiler directive foo: ...' 21:59:58 which makes the distinction between code that will be compiled 22:00:01 and meta-data 22:00:08 faxathisia: They should not -- this handles re-imports 22:00:15 and you don't need to write a header file 22:00:19 just: #export a b c d 22:00:35 and when compiling it'll optionally generate an 'interface file' which gets installed 22:00:44 which is like a header file, but far more compact 22:00:48 and not valid code, of course 22:00:51 and #import looks for them 22:00:55 it goes: 22:01:18 IF in $INCLUDEPATH (., , system dir), code file in $INCLUDEPATH 22:01:27 & if the code file is not compiled it does it for you 22:01:33 faxathisia: So yeah, down with cpp :p 22:02:07 faxathisia: also, it would be 'T callcc(T (cont_t))' 22:02:24 ehird: You could actually probably get GCC to handle anonymous functions with ease. . . <-- as long as it doesn't use trampolines in GCC, that needs executable stack iirc 22:02:25 where cont_t = 'void (T)' 22:02:34 so in full 22:02:40 T callcc(T (void (T))) 22:03:04 faxathisia: Not a bad callcc signature I must say. 22:03:11 In Haskell-style types that looks like 22:03:18 plz call it cwcrntcc 22:03:24 callcc :: ((a -> ()) -> a) -> a 22:03:28 which is far less easy to understand 22:03:31 faxathisia: no 22:03:35 it's C-style but not C-ugly 22:03:35 :) 22:03:36 :((( 22:03:47 faxathisia: this will have support for declarative programming 22:03:48 if that helps 22:03:56 afk 22:21:23 * oerjan finds himself browsing the logs at 1 page per second 22:24:43 -!- Quendus has quit (Remote closed the connection). 22:26:26 -!- Quendus has joined. 22:26:55 redrawerredrawers is a word 22:26:56 that's great 22:27:50 i find that slightly hard to believe 22:28:23 i didn't think English was quite that permissive 22:32:08 -!- atsampson has quit (Remote closed the connection). 22:32:20 -!- atsampson has joined. 22:37:18 -!- oklokok has joined. 22:37:36 ehird: parsed how exactly? 22:38:22 oklokok: what parsed where what what and what and what 22:38:52 is that a noun meaning "those who draw that red, which describes those who draw red" 22:39:02 that word you said was a word 22:39:21 oklokok: I don't know 22:39:23 ubt it's in a word list 22:39:29 and it can be typed on the left hand 22:39:35 it is the REAL longest word that you can do that with 22:39:37 qwerty ofc 22:39:49 it's in a word list? :D 22:39:52 what word list? 22:40:10 Lol. 22:40:17 I think I just solved my problem. 22:40:21 Without brute force. 22:41:15 oklokok: dunno 22:41:17 Moby something 22:41:21 that abcdef -> bdeefa or whatever problem? 22:41:58 i also got a sense it might be easier than it looked at first 22:42:05 wwwhat problem 22:43:07 oklokok: The one from yesterday. 22:43:12 http://deformative.hosting.arsfides.com/upload/files/1/np.txt 22:43:58 Hmm, never mind. 22:44:05 I still need to implement swapping. 22:45:36 definitely not np 22:45:40 i'm thinking O(n) 22:46:02 ah 22:46:15 Yeah, make sure you read the whole thing. 22:46:16 actually the trivial solution is O(n^2) 22:46:49 ... 22:46:52 Totally not. 22:47:18 go through the list as I, for each element go through the result list as J and if J should have I, put it there 22:47:29 rrright= 22:47:30 = 22:47:33 ..? 22:47:37 isn't this the edit distance problem? 22:47:41 No. 22:48:00 Yours fails on [a, b] to [b, a] even 22:48:02 :P 22:48:35 And that would _not_ make optimal solutions. 22:48:39 Read the whole file. 22:48:41 oh, minimum space? 22:48:44 didn't know that 22:48:47 ...file? 22:48:51 You should read Shin-Cheng Mu and Silvija Seres approach to the edit distance problem and other combinatoric optimization problems 22:49:09 [21:42] pikhq: You have a block of memory, and a new order, some locations are duplicated, some are no longer used, but they refill the same block, design an algorithm to find the least number of movements needed. 22:49:09 oklokok: No minimum space. 22:49:09 [21:43] So you have [a b c d e f] and it needs to be transformed to an arbitrary new order, for example: [a b e e f c] 22:49:09 [21:43] You have access to extra space. 22:49:13 Minimum mov 22:49:24 Deformative: minimum space as in O(1) spae 22:49:26 *space 22:50:13 Well, I don't think you quite get the goal. 22:50:21 So uh, you should read the whole txt file. 22:50:30 Because no one really got it until the end. 22:50:37 i guess, just thought that was the complete description 22:50:39 wait a mo 22:51:36 I like this ciphery thingy: 22:51:39 oklokok: You misunderstand the goal, the goal is to create a program that generates a perfect set of instructions to reorder a block of memory to a new order. 22:51:43 abcdef -> acefdb 22:51:47 what are the exact space and time? ordo bounds on the permutator and the algorithm creator? 22:51:49 abcdefg -> acegfdb 22:51:52 *permutator creator 22:52:07 it makes most text look like line noise but *kind of* resembles the original text 22:52:38 hmm 22:52:41 s/?/ 22:52:47 ? 22:52:54 ehird: in my sentence 22:53:48 oh 22:53:56 Deformative: or is the goal to optimize for each? i'm fairly sure that cannot be done 22:54:01 ah 22:54:16 the actual permutator must be *perfect* 22:55:07 hmm 22:55:35 it's still not clear to me, can the permutator access any amount of space? the task is trivial if it can 22:55:59 I will try to explain. 22:56:04 my intuition says it's O(n) 22:56:10 Try not to have preconceived notions. 22:56:25 and with at most one extra temporary location used 22:56:45 You are writing a program that outputs a set of instructions. 22:56:51 The instructions it outputs must be perfect. 22:57:00 Deformative: yes, but what's *perfect*? 22:57:03 The instructions it output does one thing. 22:57:09 copy instructions, as few as possible, i take it 22:57:10 oklokok: Least movl 22:57:15 Yes. 22:57:26 there will be exactly n moves with what i said right away 22:57:28 or does swap count as a single instruction? 22:57:29 so it's perfect? 22:57:45 ah 22:57:46 Swap is NOT single. 22:57:46 which is here http://citeseer.ist.psu.edu/468298.html 22:57:59 ofc not, you don't always have to do even that 22:58:44 ok so then my guess is you need a temporary location iff no letter disappears, in which case this is a permutation (oh, and not being the identity) 22:59:01 otherwise you can use any disappearing letter as scratch 23:00:03 ideally you want all copies to be a letter moved to its final location, if possible 23:00:10 i'm fairly sure it's not *np*, at least 23:00:24 oklokok: I am starting to agree. 23:00:32 Because my program is almost done. 23:00:59 my encoding mehtod, if anyone didn't immediately get it 23:01:04 I just need to figure out how I want to optimize for swapping, if I just use pure mov on the memory, then I am done. 23:01:14 when do you _have_ to move a letter other than to its final destination? when there is a permutation cycle 23:01:24 enc a:b:xs -> [a]++enc xs++[b] 23:01:34 oerjan: You never move the letters. 23:01:38 you must do this once for each cycle 23:01:40 You generate code that will move the letters. 23:01:46 Deformative: i mean copy 23:02:01 "Schönfinkel himself contrives a more drastic but very curious reduction of C, S and U. He adopts a new function J, interpreted as having U as value for C as argument, C as value for S for argument. Then he defines "S" as "JJ", "C" as "JS", and "U" as "JC". This trick reduces every closed statement (of logic and set theory) to a string of "J" and parenthesis." 23:02:06 Old timey Iota :D 23:02:22 Deformative: um generating code is trivially equivalent to finding out how to do it with copying 23:02:42 oerjan: The only time you need to move other than the final destination is a swap. 23:02:49 And that would move to the temp space. 23:02:58 cool slereah 23:03:10 Unless I decide to use a register instead. 23:03:36 Deformative: yes. and i think you only need one swap per permutation cycle in the problem 23:03:52 faxathisia: I bought the fucking 650 pages specially for that article 23:03:59 haha 23:04:00 Though the rest is pretty cool too. 23:04:25 although that might not be quite well-defined. hm. 23:04:47 This is quite confusing, but really not that complicated once I put it in code. 23:04:54 Confusing, but not that complicated. 23:04:55 Heh. 23:06:06 I was trying to see by hand what that function is doing 23:06:10 -!- adu has joined. 23:06:17 But I must be retarded, since I created a language for that. 23:06:18 how do you do it? i think my current solution is perfect in terms of moves, but it uses a call stack 23:07:09 oklokok: um the call stack is irrelevant to the final generated copies? 23:07:25 oerjan: i meant the programs generated need a call stack 23:07:29 or do they... 23:07:33 actually not, of course not 23:07:34 lol :P 23:07:40 second order programming is confusing 23:08:34 how about infinite order programming where the result program is the fixed point? 23:08:37 yeah, think about tht 23:08:39 *that 23:08:43 i'll get some coffee 23:08:44 -> 23:08:49 what's second order programming? 23:09:04 lisp macros? 23:09:21 faxathisia: functions taking/returning functions that take/return functions 23:09:44 N-order functions are functions taking/returning (N-1 order functions). 23:09:53 so like, Haskell for Dummies? :) 23:10:06 sounds like common practice in haskell 23:10:14 hi all 23:10:20 hi 23:10:22 faxathisia: i'm using lisp! this sucks. 23:10:40 my guess is that the number of copies required = n + (number of cycles length > 1) - (number of letters that remain at their original place) 23:10:46 * faxathisia isn't much interested in what langs people don't like 23:11:03 faxathisia: I like Fortress 23:11:13 but it's still vague in my mind 23:11:14 what's that? 23:11:40 http://fortress.sunsource.net/ 23:11:55 its like Fortran+OCaml+Mathematica 23:12:03 actually optimizers can be done with something like a fixed point of an infinite order program 23:12:16 faxathisia: i meant generating code 23:12:29 n-order code generates (n-1)-order code 23:12:48 oklokok: What in n-order code? 23:12:59 :D 23:13:00 like 23:13:45 hmm, wonder if i should actually explain something 23:13:55 say you write a program that does task T 23:13:58 that's first order 23:14:05 ah yes sure 23:14:07 if you write a program that writes a program to solve T 23:14:11 that's second order 23:14:15 Is there anywhere that has short descriptions of programming languages? 23:14:30 ooh wait a complication - if some letter of a cycle is duplicated, you don't need to use swap for that cycle 23:14:33 I tell people, stop wastingt your time with that silly task you write the same program with different variables every weex 23:15:08 and tell him just write a script to generate your program, and this guy is like O-o why don't you write a program to write for me 23:15:16 as if this kind of task is impossible :P 23:15:22 :D 23:15:33 so make that number of totally isolated cycles 23:15:57 in a good language, you can usually just do the metaprogramming in the same program 23:16:04 and just separate the conceptual levels 23:16:08 using magic or soemthing 23:16:14 adu: wikipedia? 23:16:53 oerjan: what? 23:17:07 o descriptions 23:17:22 you ever wrote your own macro system in lisp? 23:17:27 I think it's very similar to that 23:18:27 Deewiant: you said a hash table is a good choice for fungespace 23:18:30 hmm, basically, i think the problem of permutating the variables basically comes down to a topological sort (in our case we're not sorting an acyclic graph, that's where we need the extra variable) 23:18:34 what about an N-dimensional sparse array? :D 23:18:56 faxathisia: are macroexpansion rules written in lisp? 23:19:00 FungeSpace doesn't resemble a hash table AT ALL 23:19:01 I like that Schönfinkel. He's got the eso spirit. 23:19:15 adu: why not? 23:19:30 well it depends on what the indexing domain is 23:19:42 if anything FungeSpace could only be indexed by polynomial-like objects 23:19:52 like... arrays? 23:19:58 adu: CCBI uses a hash table. 23:19:58 IIRC. 23:20:01 because (1, 0) == (1, 0, 0) 23:20:12 adu, just omit zeroes in the end 23:20:12 duh 23:20:20 also, funge uses a fixed dimensino 23:20:23 *dimension 23:20:24 oklokok: but thats not how arrays work, thats how polynomials work 23:20:43 adu: i don't see your point 23:21:23 Deewiant: away again? :p 23:21:31 [22:21] [Away] Deewiant is away: Zzz. 23:21:32 sheehs 23:21:32 :) 23:21:36 but yeah, true, polynomials are great for addressing an n-dimensional position, in case you don't have a fixed number of dimensions 23:21:46 adu: what about a sparse N-dimensional array 23:21:49 does that sound like a good fungespace :) 23:22:07 (I am supporting N-funge :D Just need to figure out how to represent N>2 in text, eh.) 23:22:12 oklokok: my point is thhat (1, 0) and (1, 0, 0) are clearly distinct both in the array view and the vector view, but they are equivalent as FungeSpace indexes, and because they are only place they have this uniqueness is in FungeSpace, the only conclusion that makes sense is that they are an innapropriate metaphor for FungeSpace indecies 23:22:14 Well, N>0 funge 23:22:15 ehird: sparse array is a loose concept 23:22:22 oklokok: your mom is sparse 23:22:26 and a loose concept 23:23:08 hmm 23:23:12 maybe I should use a Judy Array 23:23:12 :D 23:23:17 adu: okay, a hashtable is bad for FungeSpace in case the implementer has no idea what dimensions are, true. 23:23:24 ??? :D 23:23:51 http://judy.sourceforge.net/doc/JudyL_3x.htm 23:24:25 Polynomials: 1 + 0x == 1 + 0x + 0x^2 both mathematically, and in FungeSpace, so it is quite appropriate 23:25:05 adu: true, i never said it wasn't, i'm just saying it's very irrelevant 23:25:15 ok 23:25:35 adu: but yeah. sparse N-dimensinoal array == good fungespace? 23:25:44 well, i guess it was a good point polynomials are perfect indices for n-dimensional arrays 23:25:50 ehird: pretty much 23:26:21 polynomials of degree <= n = tuples of length n 23:26:41 ehird: but isn't "sparse array" just a term specifying the problem, not a solution? 23:26:49 oklokok: I think numpy has something for it. :| 23:26:58 but just as with arrays, there are mathematical constructs that limit the degree/length... o well 23:26:59 And also when I do my C impl 23:27:04 Judy arrays seem interesting: http://judy.sourceforge.net/doc/JudyL_3x.htm 23:27:38 faxathisia: not in reals! 23:27:54 adu: any thoughts on judy arrays? 23:27:55 It's a fundamental theorem in vector spaces 23:28:08 ehird: i'm reading 23:28:11 (I just can't remember the name of it :S) 23:28:14 faxathisia: but i'm guessing you need to be doing it (mod something) 23:28:17 ? 23:28:44 oh 23:28:47 "<=" 23:28:53 i'm a bit dyslexic 23:29:00 http://www.mathreference.com/top-ban,rn.html 23:29:18 faxathisia: basis theorem perhaps? 23:29:47 hm I don't know that 23:30:00 although i may have made up that name on the spot 23:30:04 hehe 23:30:40 i think Glib hash tables are slightly more useful 23:30:42 http://library.gnome.org/devel/glib/stable/glib-Hash-Tables.html 23:30:56 oerjan vaguely knows everything 23:31:10 * oerjan vaguely knew oklokok would say that 23:31:52 adu: fungespace consists of 0-255, right? 23:32:10 ya one byte per index 23:32:17 or rather there is something like invariant basis size property - it is true for vector spaces but not for modules over all more general rings 23:32:44 although i think it is allowed to grow past 255 during computation, the 255 restriction is on source files iirc 23:33:25 adu: oh, okay 23:33:29 adu: up to what value? 23:33:34 the general befunge 'word'? 23:33:59 "What size exactly is left up to the implementer. 32 bits is typical." 23:34:48 it's like two years since i coded in a language without bignums :< 23:34:51 'alf a bit, and a trit hand a half 23:35:00 well, except java, but i don't count that as a language, or as programming 23:35:12 lolol 23:35:15 surely java has bignums... somewhere 23:35:18 oklokok: why do you say that? 23:35:42 oerjan: sure, but you can't overload operators, so they're not that fun to use 23:35:48 adu: because i hate java 23:35:52 oklokok: amen 23:35:58 i'm less productive in it than i am in befunge 23:36:08 and i've written one befunge program, and about 200 java progs 23:36:32 well, naturally that was helluva overstatement, but considering what befunge is, it's too true. 23:36:43 both Java and C# would be so great if they were designed and developed by opensource ppl from the beginning 23:37:03 (the productivity thing was an overstatement, that is) 23:37:19 adu: fungespace consists of 0-255, right? 23:37:22 eh no 23:37:25 depends on version 23:37:29 98 allows much more 23:37:50 but alas the great giants have spoken, and now we must suffer or use C 23:38:10 Funge-98 source files are made up of Funge characters. The Funge-98 character set overlays the ASCII subset used by Befunge-93 and may have characters greater than 127 present in it (and greater than 255 on systems where characters are stored in multiple bytes; but no greater than 2,147,483,647.) The Funge character set is 'display-independent.' That is to say, character #417 may look like a squiggle 23:38:10 on system Foo and a happy face on system Bar, but the meaning is always the same to Funge, 'character #417', regardless of what it looks like. 23:38:14 from 98 standard 23:38:24 is D open source? 23:38:36 oklogdc tes 23:38:39 and the spec is free 23:38:48 and so is dmd/s frontend 23:38:50 oklogdc tes? 23:38:51 oklokok, the frontend yes, the backend no, but someone took the frontend and made it usable with gcc 23:38:53 so yes 23:38:53 but the backend contains e.g. code form other sources 23:38:56 so it cannot 23:39:03 oklokok: 'gdc yes' 23:39:11 ah yeah 23:39:14 AnMaster: yep - that's gdc 23:39:19 ehird, indeed 23:39:20 oklokok: but since ther eis a formal spec.. 23:39:26 and a free implementation 23:39:32 the only non-free bit is the dmd backend. 23:39:42 & it can't legally BE free atm 23:40:24 although i think it is allowed to grow past 255 during computation, the 255 restriction is on source files iirc 23:40:28 that doesn't exist 23:40:38 0-2,147,483,647 23:40:41 in source files 23:41:15 I think we should reimplement all UNIX in D or Factor or Haskell 23:41:23 adu: haskell 23:41:25 typesafe unix! 23:41:39 you don't have to do any command line checking -- you know the file you get will be correct 23:41:40 :D 23:41:50 lol 23:42:11 -!- jix has quit ("CommandQ"). 23:42:29 ehird, no more crashes, because crashes are side effects, they wouldn't be allowed in haskell XD 23:43:04 AnMaster: Well presumably you'd have the IO monad somewhere. :P 23:43:07 anyway I'm getting fingerprints working in cfunge now 23:43:12 But it is true that haskell should not crash. 23:43:20 But when you get low-level.. 23:43:23 all bets, off. 23:43:35 ehird, yet the most unstable irc bot I've seen, is one written in haskell, it is crashing a lot 23:43:58 called lambdabot iirc, used in #friendly-coders 23:44:02 proof that haskell is rubbish! 23:44:03 :P 23:44:05 perhaps you should see oklobot 23:44:16 don't have time 23:44:19 it's in C++, and it doesn't hide it! 23:44:28 debugging wtf is going on with loading and unloading fingerprints in cfunge 23:44:35 haha, lambdabot is great 23:44:38 AnMaster: lambdabot is great 23:44:40 AnMaster: dude, lambdabot is really solid code 23:44:40 ... 23:44:41 maybe 23:44:51 lambdabot is probably the most useful bot in existence 23:44:59 AnMaster: its Cale's fault 23:45:00 maybe other than XDCC ones.... 23:45:02 he sucks at keeping it up 23:45:02 ehird, ok, the one with the nick lambdabot however seems to crash a lot 23:45:02 :) 23:45:07 no idea why 23:45:11 whut 23:45:13 :o 23:45:16 AnMaster: Cale. 23:45:23 ehird, who/what is cale? 23:45:24 He also breaks random things. :) 23:45:36 AnMaster: the nick 'lambdabot' on freenode host 23:45:42 ehird, yep 23:45:43 that one 23:46:15 AnMaster: yea. blame cale 23:46:22 yeah lambdabot does crash :( 23:46:24 and who is cale 23:46:24 -!- adu has quit ("Computer went to sleep"). 23:46:35 AnMaster: THE NICK LAMBDABOT ON FREENODE'S HOST 23:46:36 it does .. very often 23:46:38 ah 23:46:49 ehird, so the bot crashes because of the bot? 23:46:50 it did so long before cale took over recently though 23:46:51 ????? 23:47:03 AnMaster: The bot crashes because of the guy who runs the instance that goes on freenode 23:47:04 damnit 23:47:07 aha! 23:47:13 thanks for making that clear 23:47:32 oerjan: still not really lambdabot code's fault in most cases ;) 23:47:36 and who is cale AnMaster: THE NICK LAMBDABOT ON FREENODE'S HOST <-- sounded to me like the bot was cale 23:47:48 instead of cale being the owner of the bot