00:05:42 -!- Slereah_ has joined. 00:06:04 ... 00:06:11 I'm on the metamath mailing list? 00:06:16 I don't remember applying. 00:06:27 Ah, I think I do. 00:06:33 I needed to see some old posts. 00:08:19 -!- oklofok has quit (Read error: 113 (No route to host)). 00:10:08 -!- oklopol has joined. 00:15:37 -!- oklofok has joined. 00:16:54 -!- oklopol has quit (Read error: 113 (No route to host)). 01:05:04 -!- timotiis has quit (Read error: 110 (Connection timed out)). 01:18:33 -!- oklopol has joined. 01:18:52 -!- oklofok has quit (Read error: 113 (No route to host)). 01:19:57 -!- tusho has quit. 01:44:56 -!- GreaseMonkey has joined. 01:46:26 -!- Judofyr has quit. 02:06:08 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 02:06:25 -!- oklopol has joined. 02:25:14 -!- Corun has quit ("This computer has gone to sleep"). 02:49:40 oklopol/fok/whatever 02:53:48 ihjads 02:54:45 hey 02:54:52 hi 02:55:20 will the evaluator be eager or lazy, for reactance? 02:55:27 i think it'd have to be like.. hyper-eager, right? 02:55:33 because its reactive? 02:55:53 heh 02:55:59 well, you can have it either way 02:56:03 which means no lazy lists or anything like that as data structures 02:56:09 i dont think we can have laziness tho 02:56:16 well no, that wouldn't really fit 02:56:36 reactions can be done either laziliy or eagerly 02:56:47 *lazily 02:56:51 how can they be lazy? i dont see how 02:56:59 any change upstream has to immeditely propogate downstream 02:57:15 when getting the value of y, find all x -> y, get value of x, and set y to that 02:57:29 but there is no "getting the value of y" 02:57:49 sure there is 02:57:52 how? 02:57:53 when you output it 02:57:54 its reactive 02:58:01 outputting is a reaction like any other :p 02:58:04 yeah 02:58:07 y -> [o] 02:58:12 you need to get value of y 02:58:15 x -> @ (assuming @ is the global out) 02:58:22 will be a constant output stream 02:58:31 there is no "print(x)" 02:58:39 duh 02:58:41 anyway 02:58:47 so then there's no way for it to be lazy 02:58:51 for printing y, you get the value of y 02:58:51 because you're constantly outputting 02:58:58 but there is no getting! :P 02:59:02 wtf 02:59:04 thats not how reactions work 02:59:15 whenever anything upstream changes, it automatically flows downstream 02:59:17 to any outputs 02:59:25 theres no getting 02:59:27 there's putting 02:59:28 5 -> x 02:59:31 x -> y 02:59:33 y -> @ 02:59:38 you can either do 02:59:47 yes but thats not a "get y" 02:59:52 5 -> x, then find all x -> var, and set all var to x 02:59:55 thats "Establish a reaction between y and the output" 02:59:58 err 03:00:09 there is no "get y and put it into @" there 03:00:12 what exactly is the difference in behavior? 03:00:14 its just an establishment of a reaction 03:00:17 :| 03:00:19 the difference is that if i later do 03:00:22 3 -> x 03:00:27 i should immediately output 3 03:00:45 3 -> x has the side-effect of outputting 3? 03:00:48 no 03:00:49 if you do 03:00:54 x -> @ 03:00:58 then later doing 03:01:00 3 -> x 03:01:06 immediately outputs 3 03:01:43 because there's this established reaction that the value of x flows down into @ at all times when x changes 03:01:47 so when we do 3 -> x 03:01:48 x changes 03:02:05 and that change instantly propagates down the reactions into the output 03:02:32 thats what these reactions are. :P 03:02:38 did you not realize that? lol 03:02:51 sure i did, but i'm still sure we can view this lazily 03:03:04 i dont think so 03:03:26 because anything that outputs anything will need to be pushed immediately 03:04:34 hmm, actually 03:04:49 it's just in this case the lazy way is the same 03:04:59 you still need to keep track of the old reactions 03:05:02 ? 03:05:07 and update them every time variables update 03:05:21 i dont know what you mean now. :P 03:06:53 y -> @; 3 -> x; x -> y; <<< this demonstrates the difference, but keeps the reverseness; y -> @; is simply stored, because "getting y" is impossible yet, then 3 -> x is stored, then x -> y; now y *can* be "gotten", so y -> @ executes, it gets y, which in turn gets x, which is 3 03:07:06 whereas the eager way would be to... well you know. 03:07:37 no, y -> @ wouldnt be stored at all, you'd start outputting "undefined" 03:08:04 what? 03:08:04 when you set up x -> y the value of y immediately changes to reflect x and you immediately output 3 03:08:13 y is undefined when you do y -> @ 03:08:18 so you immediately output "undefined" 03:08:18 ... 03:08:38 or whatever the equivalent would be in the language 03:08:53 i'll just make you a lazy version of my interp tomorrow, you're obviously tired 03:08:57 night -> 03:08:59 uh huh :P 03:09:09 <- 03:09:15 why would it output undefined? 03:09:22 why wouldnt it? 03:09:29 the rules of the language are 03:09:42 when you establish a reaction, values flow from the left of the -> to the right 03:09:45 what is different between the lazy evaluation scheme and the eager one? 03:09:50 yeah, conceptually 03:09:50 y -> @ says the value of y flows into @ 03:09:55 what's wrong with doing the same lazily? 03:10:05 because y -> @ says only one thing :P 03:10:12 that the value of y goes into @ 03:10:21 it gets outputted 03:10:26 y -> @; is a kept reaction, it will be triggered each time y gets a new value 03:10:33 but it already HAS a value 03:10:34 or rather 03:10:42 it LACKS a value but it has the fact that it lacks a value 03:11:05 and what's different between that, and the lazy way of doing it, where you "can't get the value"? 03:11:06 what if i want to see if and when y gets defined? 03:11:17 i'd need to first know that it doesnt have a value 03:11:38 i mean, sure, perhaps in this one case it might be equivalent 03:11:52 don't give me that conceptual crap, give me an example where they differ 03:12:02 the first value change output will always occur are the same time i guess, yes ok. 03:12:08 but after than, there's no way to be lazy 03:12:25 because you're outputting constantly, so all changes will immediately propogate to @ 03:12:30 err, if y is redefined later, the reaction is triggered again 03:12:42 right, but if you later set x, say 03:12:56 the reaction immediately propogates from x to everything defined in terms of it 03:13:11 which means that changing x immediately has to propogate down to y then to @ 03:13:24 because @ is sort of "constantly getting" y, which is "constantly getting" x 03:13:49 okay, and here we see how they are the exact same 03:13:50 you see 03:14:02 hmm 03:14:03 whoops 03:14:06 ok, so the initial y -> @ is sure :P 03:14:08 i didn't say a thing i thought i said 03:14:09 but nothing else 03:14:10 already 03:14:27 but anyway, you need to trigger (y -> @) when x changes 03:14:40 right, but thats not lazy at all 03:14:49 it is, you only need to trigger outputs 03:15:26 hm.. so you mean only update @'s? 03:15:45 yeah, basically, the trigger system is much less efficient 03:16:00 but you can do it lazily 03:16:04 as you can do anything lazily 03:16:12 e.g. when you set a value, go through and find all @'s that depend on that value and then go through those reactions? 03:16:50 well i'm thinking just evaluate all (expr -> @) all the time, this is not about efficiency 03:16:59 it's about being able to do it lazily 03:17:41 well, part of the thing is that i can't imagine doing anything that doesn't have an -> @ in it 03:17:52 i mean, if you never output anything, then the program is pointless 03:18:07 each time you add a reaction, you evaluate each and every (expr -> @) 03:18:13 which means 03:18:35 so "laziness" results in constant updating of @'s, which means constantly pushing values from inputs 03:18:38 "get value of expr and output it, unless no variables have changes" 03:18:40 *changed 03:18:43 hrm.. 03:18:45 brb 03:19:03 pushing values of inputs? 03:20:34 yeah, values from any sort of input 03:20:42 what might that be? 03:20:45 like mouse.x -> ... 03:20:55 oh thats another thing 03:20:57 yeah. 03:21:01 well 03:21:12 we need to consider things like global objects and functions 03:21:16 mouse is going to need to be global. keyboard too. 03:21:20 once you get into inputs, laziness has problems, naturally 03:21:29 and i suppose as a global function, delay t v 03:21:48 well darlin, theres no reason to do reactive stuff without inputs :P 03:21:54 i'm talking about the simple subset with only (expression -> variable | port) reactions 03:21:58 because without it, you're just making haskell :) 03:22:13 plus, delays also change things. 03:22:19 delay 10 x -> y 03:22:22 5 -> x 03:22:27 that introduces time variance 03:22:58 well, all they really do is force you to evaluate all outputs all the time, which was in my theoretical implementation plan for making laziness work all along 03:23:00 but 03:23:16 true, given input, laziness as such makes no sense 03:23:19 that's obvious 03:23:41 wait, evaluate all outputs at the same time? 03:24:04 hmm, true, still doesn't work 03:24:15 because inputs that don't actually flow into output yet 03:24:18 aren't read at all 03:24:24 we also need to define the semantics of delays :) 03:25:16 well i dislike the idea of doing them like that, but shure, shure 03:25:43 brb again :p 03:25:57 anyway, do you believe me in that it is possible to have lazy reactions with the same semantics *given no input*? 03:27:58 no, because delays introduce another issue. 03:28:03 for delays, i suggest a port whose values oscillates 03:28:06 delays are input 03:28:43 ok, well then without delays and without input sure, i guess. 03:29:07 good, all i wanted was a nod, and "but that would be so inefficient it's ridiculous to even think about" 03:29:16 well it wouldnt be inefficient 03:29:19 it'd just be haskell :) 03:29:36 hmm, depends on the case 03:29:45 i think i have an idea for a new esolang, btw 03:29:52 a language with no IO _at_all_. 03:30:18 well io is really just a convenience 03:30:36 i don't usually use it except for printing out the result of my computation, in say python 03:30:39 it's also the whole point of computation :) 03:31:09 well if you don't have implicit io, as in like a repl 03:31:20 any IO at all. 03:31:21 then you have to use debugging to see your results 03:31:40 no writing to disk, no communicating to a server, nothing at all. 03:31:41 nothing. 03:31:51 umm, that's basically all esolangs 03:32:04 stdio is enough for anything 03:32:10 ey? 03:32:11 stdio? 03:32:16 standard input/output 03:32:21 no dude 03:32:22 NO io. 03:32:24 NO stdio 03:32:25 the pipes you lead to your prog and out of it 03:32:25 :P 03:32:33 yeah, that's often the case with an esolang 03:32:44 you just have implicit io then 03:32:49 no implicit IO. 03:32:51 no IO at all. 03:32:52 so the program works as a function 03:33:07 yeah, i did that with nopol 03:33:12 I've decided on the language's design too 03:33:37 but still, you will debug and see it does the computation right, after that there's no need for io 03:33:49 The language is of the form S*, where S is the set of all imaginable symbols, and the rules are anything at all. 03:33:56 :| 03:34:00 well that sounds a bit boring 03:34:13 when you tell the interpret to interpret a program 03:34:19 the interpret does nothing, then quits. 03:34:23 nopol had negative lists 03:34:42 since you can't get IO, it doesn't matter whether or not the program actual ran, since it makes no difference 03:35:01 what? 03:35:01 infact, the interpreter itself doesnt exist, since it would do nothing anyway 03:35:10 of course it makes a difference 03:35:13 how so? 03:35:15 no one cares about the result 03:35:21 it's about the computation 03:35:27 the beautiful concept of computation 03:35:29 well the computation happens! 03:35:31 in your mind! 03:35:46 because you dont care what the result of it is, you can simply say "the computation happened." 03:35:52 :) 03:36:01 nopol owns your idea so much 03:36:03 :P 03:36:09 i like my esolang. 03:36:21 its the fastest AND the slowest computer language in existence 03:36:30 all programs execute instantaneously 03:36:40 or at any other speed you want 03:38:52 http://www.vjn.fi/oklopol/nopol.txt <<< mapping a lambda over a list 03:38:56 using negative lists 03:39:01 so awesome 03:39:18 lolwut 03:39:21 i dont understand it. 03:39:39 <: a b> calls a with b 03:39:47 that is, interprets the list in a as a lambda 03:39:52 and calls with list b 03:40:24 <. a b> is a lambda, when called, the arguments are pattern matched on a, and b is returned 03:40:29 so its sort of like... if b = (b1 b2 b3 ...) 03:40:32 its like doing 03:40:36 (a b1 b2 b3 ...) 03:40:37 in lisp 03:40:46 hmm? 03:41:04 well no 03:41:13 so its like (a b)? 03:41:18 <: a b>, in lisp, would be roughly (a b) 03:41:28 oh ok. 03:41:32 gotcha 03:41:41 anyway, that's pretty much it 03:41:45 except for the negative list 03:41:57 which is the list of the form > a b c< 03:42:07 the brackets are reversed 03:42:07 that makes no sense :D 03:42:12 ofc it does 03:42:17 ;) 03:42:19 positive = <>, negative = >< 03:42:21 ! 03:42:31 what happens when you run it backwards in time? 03:42:36 what? 03:42:39 i don't understna 03:42:41 adnta 03:43:11 anyway, negative lists aren't actually all that pretty, in that they are not the negative of lists 03:43:22 ok 03:43:24 they are *kind of* the negative, but... 03:43:43 <... > a b c< ...> turns into 03:44:04 <<... a ...> <... b ...> <... c ...>> 03:44:07 so basically 03:44:23 >...< kinda maps the outer context for each element of it 03:44:43 this let's you do the map operation without actually writing it 03:44:48 doesn't really let you do anything else 03:45:01 but hey, it's kinda cool, and it has an incredibly confusing syntax 03:45:03 so your mother 03:45:07 and good night! 03:45:08 -> 03:46:01 (nopol 2 will have negative lists as the perfect negative of lists, just don't know what that is yes) 03:46:04 (->) 03:49:32 -!- graue has quit ("Leaving"). 03:53:10 night :P 04:05:50 -!- HanDongSeong has quit ("잘"). 06:23:52 -!- GreaseMonkey has changed nick to [[Nobody. 06:28:17 -!- [[Nobody has changed nick to GreaseMonkey. 06:52:20 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 06:53:50 -!- oklopol has joined. 07:07:35 -!- oklopol has quit (Connection reset by peer). 07:08:08 -!- oklopol has joined. 07:40:45 -!- GreaseMonkey has quit ("Remote closed the previous member app"). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:50:54 -!- Judofyr has joined. 09:02:06 -!- Slereah has joined. 09:18:07 -!- Slereah_ has quit (Read error: 110 (Connection timed out)). 09:36:42 -!- timotiis has joined. 09:41:30 -!- kar8nga has joined. 10:07:09 -!- kar8nga has left (?). 10:20:16 -!- olsner_ has joined. 10:21:48 -!- jix has joined. 10:22:16 -!- olsner has quit (Read error: 110 (Connection timed out)). 10:51:21 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 10:51:51 -!- oklopol has joined. 12:16:41 -!- Corun has joined. 12:28:29 -!- kar8nga has joined. 12:48:06 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 12:48:39 -!- Judofyr has joined. 13:18:45 -!- oklopol has quit (Remote closed the connection). 13:19:12 -!- oklopol has joined. 13:39:49 -!- Corun has quit ("This computer has gone to sleep"). 14:09:51 -!- RedDak has joined. 14:11:10 -!- Judofyr has quit. 14:24:50 -!- kar8nga has left (?). 14:29:52 -!- jix has quit (Nick collision from services.). 14:30:02 -!- jix has joined. 14:52:43 -!- Hiato has joined. 15:15:04 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 15:15:16 -!- oklopol has joined. 15:19:09 -!- RedDak has quit (Remote closed the connection). 15:24:44 -!- puzzlet has quit (Remote closed the connection). 15:24:55 -!- puzzlet has joined. 15:29:37 -!- tusho has joined. 15:30:14 The & sign in a book. 15:39:49 tusho, ? 15:40:10 AnMaster: The ? sign in a book. 15:40:32 tusho, what on earth are you referring to 15:40:46 AnMaster: The , sign in a book. 15:41:25 so tell me tusho do you try to make any sense or are you just being silly 15:41:36 AnMaster: The sign in a book. 15:46:40 tusho: The ¢ sign in a book. 15:46:56 Deewiant: The ¨ sign in a book. 15:47:52 cool sign 15:47:54 so cool 15:55:04 oklopol: The ™ sign in a book. 16:06:59 Deewiant, do you get the joke? 16:07:01 I don't 16:07:11 and tusho doesn't want to explain 16:07:21 AnMaster: The ' sign in a book. 16:07:36 no, I don't 16:07:49 Just checking if he'd respond differently :-) 16:08:13 and then I thought about countering with signs until he runs out of ASCII but couldn't be bothered 16:08:13 Deewiant: The ƨ sign in a book. 16:09:12 Deewiant, you need to make him run out of unicode as well, please warn me in advance so I can part the channel if you do that, as I don't want my harddrive filled with such a log 16:09:12 :P 16:09:31 he wasn't using Unicode at the time 16:09:35 true 16:09:37 but now he is 16:11:55 AnMaster: The Æ sign in a book. 16:14:02 The sign for which strlen(0) is true on IRC. 16:14:19 err I mean: 0==strlen(sign) 16:17:15 The strlen(0) == 1 on IRC. 16:20:22 -!- Hiato has quit ("Leaving."). 16:37:00 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 16:37:17 -!- oklopol has joined. 17:05:27 -!- puzzlet_ has joined. 17:05:59 The IRC mechanical mechanism in a book. 17:11:53 -!- Corun has joined. 17:15:09 such a cool mechanism 17:16:55 -!- puzzlet has quit (Read error: 110 (Connection timed out)). 17:22:40 -!- Corun has quit ("This computer has gone to sleep"). 17:27:06 -!- puzzlet has joined. 17:27:16 -!- puzzlet_ has quit (Remote closed the connection). 17:29:23 oklopol: The cool in a book. 17:34:18 so cool an cool in an book 17:39:16 -!- ais523 has joined. 17:43:07 hello ais523 17:43:13 hi tusho 17:43:16 wasn't expecting you today :P 17:43:19 I was wondering which channel you were going to say hi in 17:43:25 and neither was I, I may have to leave in a bit 17:58:25 -!- Corun has joined. 18:15:11 -!- Corun has quit ("This computer has gone to sleep"). 18:30:02 -!- puzzlet_ has joined. 18:30:32 -!- puzzlet has quit (Remote closed the connection). 18:31:47 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 18:32:06 -!- oklopol has joined. 18:38:28 -!- timotiis has quit (Read error: 110 (Connection timed out)). 18:51:41 -!- kar8nga has joined. 19:07:35 -!- oklofok has joined. 19:16:38 On an unrelated note! 19:16:45 I am going to write a C->JS compiler. 19:16:53 (ais523: this means C-INTERCAL in the browser. Fear!) 19:17:15 tusho: that isn't quite as insane as one thing I thought of 19:17:15 -!- oklopol has quit (Read error: 113 (No route to host)). 19:17:23 -!- oklopol has joined. 19:17:23 writing a BF back end for gcc 19:17:32 so arbitrary C programs could be compiled into Brainfuck 19:17:34 ais523: Ow. 19:17:44 one issue would be with syscalls, etc 19:17:45 Although ... I'm not sure I'll allow arbitary memory access in mine. 19:17:50 That is, pointers become references. 19:17:56 That'll be more efficient (and practical).. 19:18:09 Does C-INTERCAL ever just dereference some memory? 19:18:11 so in the end I thought it would be easiest just to make a Brainfuck version of Linux 19:18:16 so you only have to implement a CPU 19:18:23 tusho: pointers are used a lot 19:18:26 ais523: yes 19:18:29 even pointers with varargs, on occasion 19:18:35 ais523: but, just like: 19:18:37 *ptr 19:18:37 and 19:18:39 ary[a] 19:18:52 -!- oklofok has quit (Read error: 113 (No route to host)). 19:18:52 well, it throws around function pointers 19:18:58 ais523: but no pointer arithmetic? 19:19:04 ary[a] 19:19:07 yes 19:19:07 is pointer arithmetic 19:19:08 that's ok 19:19:10 ais523: I know 19:19:16 but I'm not implementing a big memory array 19:19:21 what about things like ary[-1] 19:19:26 that happens on occasion 19:19:28 ais523: that won't work 19:19:44 tusho: yes it does, because ary is set to array+1 earlier 19:19:53 ais523: ah, that'll work then 19:19:58 but 19:19:59 and of course there's the standard *x++ trick 19:20:01 int ary[5]; ary[-1] 19:20:02 won't work 19:20:11 if you can handle that sort of thing, you're probably safely within the C standard 19:20:14 ais523: Well, I just want to avoid having: 19:20:21 int memory[100mb]; 19:20:23 as long as you can handle all pointer locations within an array, and 1 past the end 19:20:34 And instead implement arrays, etc, as real JS arrays 19:20:39 tusho: pointers also have to be castable from ints 19:20:47 ais523: that's the bit that won't be possible 19:20:49 well, to ints 19:20:56 that might be possible 19:20:59 because I use hex representations of pointers as function names 19:21:01 but it'll just give you the js object id 19:21:12 but the unique -> unique mapping is all that's really needed there 19:22:03 tusho: are you planning to run the compiler itself server-side or client-side 19:22:12 as in, the C-INTERCAL compiler 19:22:22 ais523: client side 19:22:26 are you planning to just compile its output into JS, or are you planning to write it in JS too? 19:22:38 ais523: the C->JS compiler will probably be in Ruby or Js 19:22:40 *JS 19:22:44 likely JS 19:22:53 so you should be able to mush up c-intercal's source into one big thing 19:22:55 make it compile 19:22:56 tusho: it'll have to be in JS if you're using it to run C-INTERCAL client-side 19:23:01 use it to compile an intercal program 19:23:01 because otherwise its output couldn't be recompiled 19:23:06 and then copy its output into the c compiler 19:23:07 from C into JS 19:23:09 (in js) 19:23:13 and then, voila, SLOWNESS 19:23:21 ais523: does c-intercal ever do (foo*)anint? 19:23:33 it messes about with unions 19:23:36 or at least used to 19:23:40 but I think I changed them into structs 19:23:46 ais523: yeah, that won't work 19:23:49 but if it does structs, that should be ok 19:24:01 ais523: really, this is just for the novelty of writing stuff for the web in C 19:24:09 the union was being used for the intended purpose of unions 19:24:13 rather than for type-punning 19:24:22 ais523: Unions will just be structs. :-P 19:24:39 tusho: well, /that/ violates the C standard 19:24:44 ais523: yes it does 19:24:46 because sizeof (union) will be wrong 19:24:48 but it's practical 19:25:33 hmm... what psychological problem do I have if, after refreshing my email in Firefox and finding I don't have any, I try Internet Explorer to see if it can find any more emails 19:25:39 void myOnLoad(void *self) { alert("Hello, world!"); } int main(void) { body->onLoad = myOnLoad; } 19:25:41 (the same website's being opened up both times, BTW) 19:25:43 err 19:25:46 void myOnLoad(void *self) { alert("Hello, world!"); } int main(void) { body->onLoad = myOnLoad; return 0; } 19:25:59 ais523: the "C-INTERCAL developer" problem, as I think I'll call it 19:26:15 tusho: the return 0's implied in C99 19:26:16 but only for main 19:26:36 ais523: btw, I found something awful 19:26:45 a JS application that is written in JS, but it's preprocessed JS 19:26:48 specifically, 19:26:53 it's processed to add objective-c features 19:26:55 http://280slides.com/Editor/1213027183/main.j 19:27:10 -!- psygnisfive has quit (Read error: 104 (Connection reset by peer)). 19:27:12 http://280slides.com/Editor/1213027183/Document.j scary. 19:27:21 especially that .j extension 19:27:26 -!- augur has joined. 19:27:32 -!- Hiato has joined. 19:27:45 ais523: it's like objective-c's .m 19:27:58 tusho: what does .m stand for, anyway? 19:28:02 ais523: I wish I knew 19:28:02 as in, as an initialism 19:28:17 I bet it's something legacy! 19:28:25 but seriously, .j is far too ambiguous to stand for JavaScript 19:28:30 it could just as easily stand for Java 19:28:34 or J, for that matter 19:28:44 ais523: I am interested in JS preprocessors though 19:28:49 because JS is not unfortunately usable for big things 19:28:53 it has potential though 19:28:57 it's one of my favourite languages 19:29:11 tusho: did you jump to the "not usable for big things" conclusion because of Ecmanomic? 19:29:12 ais523: I saw a JS preprocessor that added continuations, once 19:29:17 and heh, no 19:30:08 ais523: unfortunately, CPS is gonna be really inefficient with JS 19:30:24 tusho: CPS isn't something you write in, it's something you compile into 19:30:42 unless you're in a lang which doesn't support function returns for some reason yet supports continuations 19:30:48 ais523: inefficient to run in a browser. 19:30:49 esolang idea right there! 19:31:02 tusho: what I'm saying is why use CPS? 19:31:12 ais523: ajax, and similar 19:31:18 you have to use callbacks with it in JS 19:31:21 which are really ugly 19:31:22 or 19:31:24 you can block the browser 19:31:31 but, with cps 19:31:36 alert(ajax(...)); 19:31:37 becomes 19:31:45 uglyShit(..., function(r) {alert(r)}) 19:31:54 JS callbacks aren't ugly, I find 19:31:57 ais523: Anyway. http://neilmix.com/narrativejs/doc/index.html <-- NarrativeJS, which adds an extra operator for continuations [so it's only partially CPS, which is more efficient but a bit ugly] 19:32:09 http://chumsley.org/jwacs/ jwacs, which is amusing for being written in lisp 19:32:29 tusho: from the name it sounds like someone's tried to compile Emacs into JavaScript 19:32:33 heh 19:32:36 now that would be impressive and somewhat worrying 19:32:40 Javascript With Advanced Continuation Support 19:33:22 ais523: here's what narrative JS does 19:33:30 foo->("bar", "baz") 19:33:31 note the -> 19:33:35 that means 'continuation call' 19:33:36 so 19:33:38 foo; bar; 19:33:40 stays the same, BUT 19:33:47 x(foo->("bar, "baz")); abc; 19:33:48 becomes: 19:33:59 foo("bar", "baz", function (r) {x(r); abc;}); 19:34:46 * tusho makes a mockup of a nicer JS object system 19:34:49 apply-continuation is perfectly acceptable as an operator, I find 19:34:59 ais523: yes, quite 19:35:02 unfortunately this won't work: 19:35:03 but that's not what -> is doing here 19:35:11 if it was applying a continuation it would never return 19:35:16 s/was/were/ 19:35:27 ais523: I was explaining the translation... 19:35:33 from js+apply-continuation to js 19:35:41 tusho: well, I'm trying to figure out what -> actually 19:35:43 does 19:35:52 Anyway, [[ function blahblah(x) { return blahblah2->(x); } blahblah(x); y ]] 19:35:53 won't work 19:35:56 since it's function-scoped 19:36:00 ah, it's translating function calls into CPS 19:36:02 (Obviously, otherwise the whole program would have to be CPS'd) 19:36:24 ais523: basically, you can do [[ alert(ajax->("blah")); ]] 19:36:26 and have it work 19:36:29 without having to transform the whole program 19:36:48 -> means "allow continuations inside this function call" 19:36:53 kind of 19:36:54 yes 19:36:59 you'd have to call that function with -> too 19:37:07 ais523: exactly 19:37:15 I think I understand 19:38:16 ais523: hmm, a JS preprocessor is seeming like an even nicer possibility each second 19:38:27 because it could lead JS as a good way to write server-side code too 19:38:32 on e.g. Spidermonkey 19:38:45 JS is so close to being a near-perfect language for client & server-side 19:39:01 so using a slightly improved version on both sides, that still takes advantage of existing implementations, is very good 19:39:22 ooh, keyword arguments could be done too 19:39:24 yes, that'd be nice 19:45:54 ais523: ooh, I had an idea for -> functions 19:46:04 how about just making every function call an actor thingy 19:46:13 and excluding -> is an implicit block until it returns 19:46:14 :-P 19:53:26 ais523: I think I'll write this -> translator thingy. 19:53:45 the rewrite isn't that hard... 19:53:51 Any expression involving func->(...) 19:53:52 becomes: 19:54:05 func(..., function (r) { The expression, with the func->(...) replaced with 'r' }); 19:54:17 Of course, I have to pick an unused name. But apart from that.. 19:56:13 ais523: Does that look right to you? 19:56:26 yes, basically 19:56:42 also, one easy but crazy way to generate unqie names is to make them longer than the original program 19:56:48 s/unqie/unique/ 19:56:50 Eek. :P 19:56:53 I think I'll stick to AST analysis. 19:57:01 that's harder 19:57:07 ais523: Though... 19:57:19 If anyone makes a variable named __ContRes_1 19:57:24 They deserve it! 19:58:30 tusho: Overload had a nice solution to this 19:58:40 ais523: Allow arbitary objects as variable names? 19:58:43 system reserves all variable names starting with exactly one underscore 19:58:49 Heh. 19:58:52 more than one underscore is for libraries 19:59:06 ais523: You know what, I think I'll just name them __cont_res_1 19:59:13 Because if someone names a var that, they WANTED to get at that variable. 20:00:27 OK 20:00:35 unless someone else writes a competing continuation library 20:00:46 or you try to bootstrap it on itself for some reason 20:00:49 I might just use Narrative JS. It is, after all, exactly what I'm describing. :-P 20:01:30 ais523: Oh darn. Narrative JS is written in Java. 20:01:32 * tusho vomits 20:01:50 Wait ... No it's not. 20:01:51 tusho: that's easy enough to solve, I believe there are Java -> JS compilers floating around somewhere 20:01:52 It's written in JS. 20:01:53 Oh, I see. 20:02:07 ais523: No, it's in JS. It just uses the Rhino JS interpreter. 20:02:09 Which is written in Java. 20:02:13 ah 20:02:18 Oh. 20:02:18 does it work on other interps too? 20:02:21 There is one Java bit. 20:02:24 like the ones browsers use? 20:02:35 ais523: Don't think so 20:02:41 Obviously that'll be done server side anyway 20:03:06 ais523: Yeah, it doesn't 20:03:12 it uses things like 'java.lang.System.exit(1)' 20:03:19 and java's IO stuff 20:03:20 pity, browser-based JS interps are at least easy to come by 20:03:29 it's alright. 20:03:41 ais523: Besides, this just means I can use Rhino as the server-side JS solution. 20:03:47 Which is fortunate, because the Java library is useful. 20:04:00 (SpiderMonkey, while blazes faster, lacks in the library department. Because it has none.) 20:04:45 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 20:05:15 Hmm. 20:05:24 I still need a little thing to make JS coding nicer, though. 20:05:30 Ah, I think jQuery has something 20:05:35 Convenient. 20:05:35 Try heroin 20:05:40 Slereah: Heh. 20:06:22 Why was the syntax of wiki cyclic tag erased? 20:06:33 Shrug. Undo it. 20:06:42 -!- ais523 has quit. 20:07:10 I dunno how 20:08:17 -!- oklopol has joined. 20:09:04 Slereah: Go into history. 20:09:08 Click the better revision. 20:09:09 Click edit. 20:09:11 Click submit. 20:09:28 Put in a summery of 'revert vandalism', too 20:09:33 *summary 20:10:25 Well, too late. 20:10:41 -!- oklopol has quit (Client Quit). 20:10:58 -!- Corun has joined. 20:11:49 hrrm, why is it that if a unit needs n non-rechargeable batteries, you can only find n-1 batteries? 20:11:52 In this case n is equal to 4 AA batteries 20:12:20 AnMaster : Because you're poor 20:12:25 -!- Corun has quit (Client Quit). 20:13:23 Slereah, nah I think it's Murphy's first law of batteries 20:26:13 -!- Hiato has quit ("Leaving."). 20:40:31 -!- B|u35un has quit (No route to host). 20:41:06 -!- B|u35un has joined. 20:51:11 -!- timotiis has joined. 21:09:47 -!- kar8nga has left (?). 21:27:28 -!- oklopol has joined. 21:37:01 -!- Corun has joined. 21:44:19 -!- RedDak has joined. 21:49:21 -!- GregorR has joined. 21:50:09 http://www.codu.org/jsmips/ // jsmips next-generation actually works! :) 21:50:51 As it turns out, all the problems I was having came down to JavaScript's lack of true integers ... overflow an integer when calculating an integer and your results are as expected, overflow a FLOAT while calculating an integer and *boom* massive failure. 21:52:49 whats JSMIPS? 21:54:07 A simulator for MIPS in JavaScript. 21:54:22 -!- puzzlet has joined. 21:54:40 -!- puzzlet_ has quit (Remote closed the connection). 21:54:47 Which is to say, a way of running .c programs in your browser, eventually :) 22:20:24 GregorR: Inferior to my c2js. 22:20:58 oh i see 22:21:04 why would i want to run C in my browser? :P 22:21:19 tusho: WTF, you have a C2JS? 22:21:25 augur: vim in the browser! :P 22:21:28 GregorR: Well, I have the design for one. 22:21:33 Ahhhhhhhhhhhh 22:21:35 You can't do funky pionter artihmetic but it will be fast. 22:21:37 gregor, it's not like JS is all that different from C 22:21:39 That's very different from actually HAVING one. 22:21:39 GregorR: I.E., no huge heap array 22:21:43 except, say, pointers 22:21:46 it actually uses regualr js objects 22:21:48 and can interface 22:22:01 My goal is to take C programs that were never intended for running in a browser and running them unmodified. 22:22:10 GregorR: Rite, mine can do that too. 22:22:11 That is, it's explicitly NOT to create a new language. 22:22:12 Just write 'printf'. 22:22:21 You can't do funky pionter artihmetic but it will be fast. 22:22:33 GregorR: Well, not many programs do funky pointer arithmetic 22:22:35 I mean things like this: 22:22:39 int test[3]; test[-15] 22:22:52 Oh, you really do mean /FUNKY/ pointer arithmetic :P 22:22:58 OK, well, I'll believe it when I see it ;) 22:23:05 GregorR: BTW, I advise testing jsmips in Firefox 3. 22:23:09 It's blazin' fast! 22:23:15 Ohyah, I hadn't gotten around to FF3 yet :) 22:23:24 GregorR: The example runs in less than a second. 22:23:28 With no lag on startup 22:23:35 The page loads quickly, I press start, less than a second goes by and no browser hangup 22:23:37 and it's done 22:24:01 Rock on. 22:25:10 GregorR: I CAN'T WAIT FOR MOLASSOS 22:25:11 :D 22:25:31 GregorR: Hmm. If you used twm it could actually work. 22:25:33 HOLY SHIFFO 22:25:43 That is fast. 22:25:43 e.g. write an ultra-optimized gfx driver 22:25:53 and then make twm extremely stripped down 22:25:58 and use rxvt instead of xterm 22:26:01 That's a very future-y consideration ;) 22:26:05 and you _might_ be able to get something kind of usable 22:26:19 GregorR: Can I halp develop jsmips. :P 22:26:24 Even though I don't know anything about MIPS! 22:26:24 Absolutely! 22:26:31 ^_____^ 22:26:35 You don't need to, the MIPS core is totally done. 22:26:44 (MIPS is a very small architecture) 22:26:44 GregorR: It might need teh optimizations. 22:26:49 Oh, it does :P 22:26:53 GregorR: Please tell me you have a git repository. :-P 22:26:59 Mercurial MUAHAHAHA 22:27:04 I can deal. :P 22:27:16 GregorR: Better than rodger's - "Uploading a zip file is superior to any VCS!" 22:27:30 Set up a push location somewhere or something. :-P 22:27:47 I'll switch to git when it works on Windows *shrugs*. Mind you, I don't use Windows, but I still don't want to use something that limits 95% of desktop users ... 22:28:10 GregorR: What portion of people interested in developing jsmips do you think will be using Windows without cygwin? :-P 22:28:15 Touché :P 22:28:17 Unfortunately, it's not publicly accessible right now, but I'll create a new repo on codu.org. Please hold. 22:28:26 * tusho holds the nearest thing. 22:28:27 :-O 22:29:09 * GregorR averts his eyes. 22:29:12 You pervert! 22:29:31 GregorR: WHAT IF I WAS REALLY TALL AND SOMEONE ELSE WAS ON STILTS HUH? 22:29:33 STOP ASSUMING THINGS. 22:32:23 GregorR: MY IMPATIENCE MANIFESTS IN EATING PEOPLE 22:32:25 * tusho eats GregorR 22:32:29 http://www.codu.org/cgi-bin/hg/hgwebdir.cgi/jsmips/ 22:32:44 GregorR: But what about push access 22:32:48 Do you not love me enough 22:32:48 ;_; 22:33:08 If you register at http://www.codu.org/cgi-bin/ploftrac.cgi/ I can give you push. 22:33:12 ^____________^ 22:33:41 GregorR: I registered, but like, with sex appeal. 22:33:47 If that makes sense. 22:33:59 It does not. 22:34:04 Whatever. 22:34:51 GregorR: O, and what gcc setup do I need. 22:34:53 Cross compile to mips rite 22:35:09 YAY. MACPORTS HAS MIPS-ELF-GCC 22:35:14 ^__________________________________________________________________________________________________________________________________^ 22:35:39 GregorR: So where do I push. 22:35:43 IF YOU KNOW WHAT I MEAN. 22:36:20 OK, you should have push access now. Same URL (sorry, I've been having issues with https - I should be able to fix it soon, but for the moment, http push :( ) 22:37:32 It's ok. I just love sending my password out in the clear! 22:38:07 GregorR: Oh, and can I point you to http://no-www.org? 22:39:10 www. is a CNAME ... 22:39:26 GregorR: What are you trying to say? 22:39:32 I am saying that www. is obsolete 22:39:37 Of course it is. 22:39:42 foo@email.corp.com is silly 22:39:43 Feel free to strip off the 'www.' part :P 22:39:53 GregorR: Don't link people to www. then :P 22:40:03 Force of habit *shrugs* 22:40:25 also, the people on the xkcd forums fail at british humour and mornington crescent 22:40:43 * GregorR never reads forums associated with web-comics ... or most anything else. 22:40:48 :-P 22:41:14 * tusho watches mips-elf-gcc install 22:42:24 GregorR: Can I change Gregor Richards to The JSMIPS Project. It's sillier, and more legally correct as soon as I touch a bit. :-P 22:43:02 No, add your own copyright if you make significant changes. 22:43:16 It's not more legally correct unless The JSMIPS Project exists as a legal entity, which it does not. 22:43:34 GregorR: It can if you include a file CONTRIBUTORS defining The JSMips Project 22:43:58 OK, I suppose that's true *shrugs* ... but it muddles the question of who owns any given file. 22:44:16 GregorR: Why would someone own a given file? Curious :P 22:44:28 There is no logical reason, but the law's the law. 22:44:58 GregorR: We should move to #esotericia and make the legal system a nomic. 22:45:04 Then we could just fix copyrights by proposal. 22:45:13 Rock on 22:45:20 And declare wars on both Germany and Agora. 22:46:22 So, did you use my patches to make your cross compiler? I just noticed you said mips-ELF-gcc, but actually some changes are needed to the basic mips-elf-gcc configuration >_> 22:46:51 GregorR: Shit. No. 22:46:55 I just installed MacPorts' 22:47:03 ^^ 22:47:11 Making your life more difficult since 1986: Gregor Richards! 22:47:22 GregorR: SHY DOES IT NEED A PATCH 22:47:25 *WHY 22:47:26 Unfortunately, mips-elf-gcc's built-in specs file will be wrong with respect to newlib. 22:47:26 :P 22:47:49 Also, so I can #ifdef _JSMIPS :P 22:48:13 GregorR: If I give you shell access will you build it for me 22:48:13 :-P 22:48:21 * tusho goes and downloads gcc 22:48:34 Sure I will *shrugs* 22:48:39 But do you trust me with shell access? :P 22:48:58 GregorR: Pledge in agora not to abuse the privileges. 22:48:59 :-P 22:49:11 After all, what's more devastating than an Agoran criminal case?! 22:49:41 My pledges are meaningless, I routinely backstab people. 22:49:42 I MEAN, UH 22:49:52 GregorR: I said agoran pledge 22:50:08 * GregorR isn't part of Agora, nor does he want to mix himself up in all that :P 22:50:31 (Nor does he know how an agoran pledge is any different from a non-agoran pledge >_> ) 22:50:40 GregorR: An agoran pledge looks like this: 22:51:13 [[I agree to the following: {This is a pledge. This is a private contract. Parties to this contract MUST not abuse SSH privileges on ehird's machine.}]] 22:51:24 If and only if I agreed to that contract, I leave it. 22:53:40 GregorR: What need patching? 22:53:46 I mean, what can I just install normally 22:55:54 GregorR: Ping. 22:56:18 Well, you may be able to frankenstein with mips-elf-binutils, but unfortunately, for everything to work properly it needs to have the name "mips-jsmips-..." 22:56:36 I just want to know what I have to patch 22:56:37 :P 22:56:43 Just the stuff in patches/ 22:56:44 ? 22:57:21 Yeah 22:58:55 GregorR: What patch command, again? 22:58:58 I can never remember how to use patch 23:00:05 patch -p1 < ... 23:00:44 * tusho figures out how to configure binutils 23:00:48 ./configure --target=jsmips or someting? 23:00:50 *something 23:01:28 GregorR: hmm 23:01:37 --build=BUILD configure for building on BUILD [guessed] 23:01:37 --host=HOST cross-compile to build programs to run on HOST [BUILD] 23:01:38 --target=TARGET configure for building compilers for TARGET [HOST] 23:01:39 confusing english 23:03:02 Lemme think 23:03:09 First off, you have to be in a separate build directory 23:03:20 Then ../configure --prefix= --target=mips-jsmips 23:07:17 GCC will also need --with-newlib --disable-libssp. binutils and newlib should both work with that. 23:07:31 GregorR: So I have to compile newlib before gcc? 23:07:31 :\ 23:07:34 Erm, that is, binutils and newlib just need --prefix and --target, GCC also needs --with-newlib --disable-libssp 23:07:35 Yeah 23:07:41 Erm 23:07:42 No :P 23:07:45 That makes no sense. 23:07:50 yeah. 23:08:08 --with-newlib is a misnomer 23:08:16 It means something more like --without-c-library 23:08:21 Heh. 23:10:25 GregorR: I notice you used the last gpl2 gcc. 23:10:25 :P 23:11:47 brb 23:12:11 Actually, I used the latest no-dependencies GCC. 23:12:20 The fact that it's also the latest GPL2 is a coincidence. 23:33:34 * GregorR wurves his quad-core :) 23:34:20 Back. 23:34:35 GregorR: Burn! I have a core 2 duo and that's good enough for me 23:34:38 :P 23:34:50 Also quad core macs are like the most expensive thing on earth 23:35:12 Oh, I just started GCC compiling and then went to grab a soda, and it was done by the time I got back (mind you, not /drink/ a soda, just physically remove it from the refrigerator) 23:35:21 So I went "YAY QUADCORE" 23:35:22 :P 23:35:34 GregorR: Meh. I'm not really fussed with this machine's performance. It's miles better than what I had before :P 23:35:56 Of course being a mac it cost too much for the specs, but I don't care because I like it. 23:36:00 Heh 23:36:18 Got the cross-compiler? (Sorry that making a JSMIPS cross compiler is such a PITA, but there's really nothing I can do about that :( ) 23:36:49 GregorR: About to compile gcc 23:37:32 GregorR: ../configure --prefix=/opt/jsmips --target=mips-jsmips --with-newlib 23:37:34 Right? 23:39:38 GregorR: RITE??? 23:39:53 --disable-libssp 23:40:22 (libssp will try to compile and fail because there's no libc ... stupid GCC should have a --with-no-libc option that figures that all out) 23:42:35 GregorR: I think I will write a ./mkcrosscompile.sh PREFIX 23:42:36 :-P 23:44:07 An excellent idea. 23:44:21 * GregorR is too used to making cross-compilers for his own good ... 23:48:58 GregorR: gcc is slowwwwwwww to compile. 23:49:12 'struth :( 23:49:24 GregorR: Also, autotools sucks so damn hard. 23:49:40 I lol at when warnings show up because there's no way you could catch them with all the drowning output 23:50:25 'struth :( 23:51:31 Also stallman is a hobo. :-P 23:51:41 -!- AnMaster has quit ("Away for a few days without internet"). 23:52:21 YAY 23:52:22 I mean, er 23:52:24 Bye anmaster 23:52:26 :-P 23:53:48 GregorR: CHRIST. IT'S SLOW. 23:53:53 Does make j=3 work 23:53:53 :P 23:54:06 In GCC? Yeah. 23:54:21 Although that's not the right syntax ... 23:54:43 GregorR: I thought autotools didn't support -j 23:56:04 GregorR: GAH 23:56:05 IT FAILED 23:56:11 ../../../libiberty/regex.c:51:25: error: sys/types.h: No such file or directory 23:56:14 ../../../libiberty/regex.c:158:25: error: strings.h: No such file or directory 23:56:14 In file included from ../../../libiberty/../include/xregex.h:26, 23:56:14 from ../../../libiberty/regex.c:193: 23:56:18 ../../../libiberty/regex.c:196:20: error: ctype.h: No such file or directory 23:56:19 and toooons more 23:57:12 oklopol! 23:57:29 GregorR: HALP 23:58:26 GregorR: HALP 23:59:56 GregorR: HALPf