00:02:04 -!- RedDak has quit (Remote closed the connection). 00:19:50 marshmallows: how short is your prolog again? 00:20:20 the core is about 300 lines but I'm adding lots of primitives now 00:20:30 marshmallows: does it use amb 00:20:31 this is in Scheme 00:20:34 cool 00:20:36 no, just streasm 00:20:39 i'm working on an embedding in scheme now 00:20:39 :D 00:20:45 (~ (cons X Y (X . Y))) 00:20:50 marshmallows: eh, so it's *growing* now? that can't be right! :P 00:21:04 heheh, olsner I'm not that good yet 00:21:29 ehirid: Have you seen Reasoned Schemer by the way? 00:21:33 >_< 00:21:35 Ehird* 00:22:05 nope 00:22:09 read little schemer though 00:24:00 syntax-rules is so great 00:24:54 (define (all? f l) (cond ((null? l) #t) ((f (car l)) (all? f (cdr l))) (else #f))) 00:24:58 marshmallows: what srfi is that ^^? 00:25:12 all? is renamed every in SRFI-1 00:26:26 -!- bsmntbombdood has quit ("leaving"). 00:26:32 This is one of my utilites 00:26:33 marshmallows: I wish strings were lists 00:26:33 (define (cons/fail car cdr) (if cdr (cons car cdr) cdr)) 00:26:36 I have to do: 00:26:45 (string->list (symbol->string var)) 00:26:58 (define (prolog-variable? x) 00:26:59 (every (lambda (x) (char= x (char-upcase x))) 00:26:59 (string->list (symbol->string x)))) 00:27:32 just (define (symbol->list symbol) (string->list (symbol->string var))) 00:27:33 marshmallows: why did you have to implement read? 00:27:35 er 00:27:38 just (define (symbol->list symbol) (string->list (symbol->string symbol))) 00:27:56 marshmallows: oh, and after: 00:27:58 (~ (human socrates)) 00:27:59 (~ (human john)) 00:27:59 (~ (mortal X) (human X)) 00:28:01 you can just do: 00:28:05 you are using a case sensitive Scheme O_o 00:28:06 (mortal 'socrates) => #t 00:28:16 marshmallows: chicken's the name. 00:28:51 atm I have lone symbols are variables and anything else is a 0 arity compound 00:29:08 (mortal 'socrates) is (prolog-query '(mortal socrates)) 00:30:31 hmm 00:30:39 (mortal 'socrates) => (), #t actually 00:30:42 (multiple values) 00:30:52 (mortal 'X) => (socrates john), #t 00:30:53 or #f 00:30:54 unsure 00:31:48 I was planning on (later, making a new language), which has () and [] 00:31:51 marshmallows: ah, wait 00:32:01 shouldn't (moratl 'X) => ((X . socrates)), #t 00:32:02 OR 00:32:06 ((X . john)), #t 00:32:15 i.e. the multiple X thing is just an artifact of the repl 00:32:40 one solution 00:32:42 i 00:32:42 s 00:33:11 (mortal 'X) ;=> (((X . socrates)) . #) 00:33:27 ((cdr)) gives you more solutions 00:33:28 marshmallows: Isn't that just: 00:33:36 (mortal 'X) (fail) 00:34:29 don't think so 00:34:55 marshmallows: well, i still need a truth value, surely 00:34:57 so: 00:35:07 ((X . socrates)), #t, # 00:36:11 what would 00:36:20 marshmallows: well, the repl 00:36:22 (human ehird) 00:36:24 give? 00:36:24 it says 'yes' or 'no' 00:36:37 ?- human(ehird). 00:36:37 No 00:36:40 thank you, swi prolog. 00:36:44 it would probably give: 00:36:44 in your thing lol 00:36:48 (), #f, #f 00:36:53 what in yours? 00:37:09 ?- (human ehird) 00:37:10 no 00:37:36 in mine also 00:37:39 ?- 0 00:37:39 no 00:37:41 ?- 1 00:37:44 yes ; no 00:37:46 ?- 2 00:37:50 yes ; yes ; no 00:37:55 n succeeds n times 00:38:37 marshmallows: I meant in your return desuture 00:39:04 empty-stream = '() 00:39:14 and failure = empty-stream 00:39:44 (human 'ehird) ;=> ? 00:40:01 A success is (stream-cons '() empty-stream), I don't actually have any useful values though anymore.. since variable bindings are in mutable vectors (much more efficient than term copying I had before) 00:40:07 (human 'ehird) ;=> ? 00:40:28 also: for scheme i value elegance over practicality & speed ;) 00:40:40 (prove (make-declarationbase) (human (ehird))) ;=> empty-stream 00:40:58 yeah it's much more elegant than my previous too :P 00:41:09 since I was doing huge amounts of ridiculous computation 00:41:26 (human 'ehird) ;=> ? 00:41:30 if (mortal 'X) ;=> (((X . socrates)) . #), 00:41:35 then (human 'ehird) ;=> ? 00:42:13 (mortal 'X) ;=> (((X . socrates)) . #) 00:42:27 (#) ;=> (((X . john)) . #), 00:42:31 (#) ;=> '() 00:42:44 (human 'ehird) ;=> ? 00:42:44 that's how I did it before 00:42:48 '() 00:42:49 heh, somebody was recently asking in scheme about some algorithm he had, where everything was ugly and optimized 00:42:59 empty-stream = '() = failure 00:43:05 marshmallows: sounds like CL 00:43:06 :p 00:43:09 lament: haha 00:43:14 (null? '()) 00:43:24 lament: i can't wait for scheme with loads of !x and #a# 00:43:27 and ByteString 00:43:30 and unsafe io 00:43:32 ehird: consider, though: r5rs is really small. It pretty much doesn't have anything. And yet, it has vectors (efficiency) 00:43:40 (cdr '(x)) ;=> '() 00:43:47 not really CL.. 00:43:55 Scheme: Now just like Haskell, but with a pretty lame type system! It's about 30% fast, too. 00:44:00 marshmallows: :-) 00:44:23 marshmallows: You know, though (cdr '()) is obviously nonsense, it occurs to me that (rest '()) and (tail '()) are '() 00:44:24 -!- Deformative has quit (Read error: 110 (Connection timed out)). 00:44:37 (I am always worrying about that though because I've done much more CL than Scheme) 00:44:41 So the operations on conses and lists are different, even the most fundamental ones. 00:44:57 lament: Well, vectors have a conceptual elegance to them. 00:45:06 Observe that you can't have conses without vectors of length 2. 00:45:14 So really the vectors are *above* the lists. 00:45:23 (define (make-variable) (unbind! (make-vector 1))) 00:45:24 (define (unbind! variable) (vector-set! variable 0 variable) variable) 00:45:28 I think this is great :P 00:45:30 i think vectors are horrendously ugly, at least if you actually use them. 00:45:35 void *x; x = &x; 00:45:55 -!- GreaseMonkey has joined. 00:45:56 marshmallows: Make the failure stream #f 00:46:03 lament: The interface leaves much to be desired, I agree. 00:46:06 you can bind variables into equivalence classes.. unbind on backtracking, deref etc 00:46:16 ehird: That makes absolutely no sense :P 00:46:19 marshmallows: Since your thing is a cons, not a list 00:46:21 (X . redo) 00:46:26 (a b c . #f) 00:46:35 Well, you don't haev that. 00:46:39 You have (list . func) 00:47:05 (a b c d) = (a . (b . (c . (d . ())))) 00:47:23 marshmallows: 00:47:23 [23:42] (mortal 'X) ;=> (((X . socrates)) . #) 00:47:23 [23:42] (#) ;=> (((X . john)) . #), 00:47:23 [23:42] (#) ;=> '() 00:47:26 I see a cons there 00:47:26 not a list 00:47:36 Oh, and look at my cute type declaration syntax: 00:47:39 ;; prolog-query : form -> (env ) or #f 00:47:48 a b c -> d == function 00:47:57 a or b == self-explaining 00:48:01 x : y == x is of type y 00:48:07 = the type of x 00:48:18 So amusingly, I have type recursion with a base case. 00:49:15 marshmallows: What's the function for 'Nth char in string'? 00:49:17 (a . (lambda () (b (lambda () (c (lambda () (d . ()))))))) = (stream a b c d) 00:49:30 in Scheme or Prolog? 00:49:37 marshmallows: and aha, but what you haev there is: 00:49:39 string-ref or nth/elt 00:49:40 (a lambda () ...) 00:49:45 face it, you don't have a list 00:49:49 #f shoudl be your termination 00:49:50 It's a list 00:49:57 no it's not a list 00:50:04 exactly! 00:50:06 it's a stream 00:50:09 exactly 00:50:11 Look: 00:50:12 and () is the empty LIST 00:50:15 not the empty STREAM 00:50:46 ::= (a . ) | () 00:50:54 ::= (a . ) | () 00:51:05 ::= (a . ) | #f -- this makes no sense! 00:52:11 anyway I don't even use streams 00:52:29 I built cuttable streams so I can implement !/0 00:53:08 ;; prolog : form . form -> unspecified 00:53:08 (define (prolog form . conds)) 00:53:22 my awesome type info extends to varargs! 00:55:40 reading files with R5RS is nice 00:55:53 marshmallows: not reading a whole file 00:56:16 (define (slurp-file fn) (call-with-input-file fn read-file)) 00:56:29 check it out http://rafb.net/p/KBesvn31.txt 00:56:38 reads a s-exp prolog file 00:56:41 (define (read-file f) (let ((c (read-char f))) (if (eof-object? c) '() (cons c (read-file f))))) 00:56:51 (define (read-whole-file f) (list->string (read-file f)) 00:56:56 (define (slurp-file fn) (call-with-input-file fn read-whole-file)) ;; fixed 00:57:08 oh I wrote a R5RS reader the other day 00:57:37 so you just pass in a dispatch table with options 00:58:04 that way it takes 3 lines to define the syntax of my other language (changing quoting a bit and adding new parens) 00:58:26 marshmallows: is storing continuations in a global enough for backtracking? 00:58:27 i think yes 00:58:41 should be yeah, a stack of them 00:58:50 ;; backtracks : (continuation) 00:58:50 OR 00:58:54 ;; backtracks : list of continuation 00:58:58 the latter looks nicer, really 00:59:05 perhaps you can make a single continuation if you join them in a clever way hm 00:59:11 marshmallows: oo, i just realised something 00:59:13 dunno how to do cut with that though 00:59:19 i could write a type-checker for these type decls 00:59:23 because they're very mechanical 00:59:26 and the syntax is simple yet readable 00:59:33 hehehe 00:59:33 ;; prolog-query : form -> (env ) or #f <-- really easy to test 00:59:45 it would just hook in after the macro expansion process 00:59:52 and would interact fine with dynamic functions 01:00:09 if it had a few built in things like: 01:00:10 ;; car : list of 'a -> 'a 01:00:13 you should write the type checker in (or parts) in Prolog 01:00:15 ;; cdr : list of 'a -> list of 'a 01:00:26 ;; cons : 'a, list of 'a -> list of 'a 01:00:58 ;; map : ('a -> 'b), list of 'a -> list of 'a 01:01:01 it's just like ML 01:01:01 :p 01:01:28 -!- Corun has quit ("This computer has gone to sleep"). 01:01:46 marshmallows: I can pop backtracks straight after using them, right? 01:01:51 Since if needed the continuation will push a new one 01:02:17 hahaha: 01:02:18 ;; call-backtrack : -> 01:02:24 where no type after the -> means 'doesn't return' 01:02:42 marshmallows: Backtracks don't need arguments, do they? 01:04:55 marshmallows: hmm. 'add-backtrack-here!' is a sucky name 01:05:08 (define (add-backtrack-here!) (call/cc (lambda (k) (add-backtrack k)))) 01:05:37 choice! 01:05:42 marshmallows: naw 01:06:04 maybe you could do something giving backtracking args 01:06:33 thing is it's like.. "If you had gone down that path you could have seen " 01:06:43 marshmallows: hmm, SHOULD i end it with ! ? 01:06:45 but it's only for the paths before not all 01:06:51 internally they do mutate a global list of backtrack points 01:06:56 but it's declarative as far as the user can tell 01:07:46 I don't know 01:07:50 I would 01:08:13 you can only pop it after using them up 01:08:20 (define (amb . args) 01:08:20 (call/cc 01:08:20 (lambda (k) 01:08:20 (cond ((null? args) (backtrack)) 01:08:20 (else (call/backtrack (lambda () (k (car args)))) 01:08:20 (apply amb (cdr args))))))) 01:08:26 like a branch can have more than two choices 01:08:28 would that really be nicer with scattered !s? 01:08:51 -!- Deformative has joined. 01:08:56 :o 01:09:26 if that works.. you should replace the one on http://rosettacode.org/wiki/Amb since that's *much* nicer 01:10:15 marshmallows: only with my lib ;) 01:10:21 i have one without a lib around here 01:10:27 it's basically that, withh 1 or 2 support functions 01:10:34 but 01:10:50 I do not encourage the abbreviation of call-with-current-continuation 01:11:05 marshmallows: tough. I use call/cc over the time and value my fingers. 01:11:13 I'm not going to risk rsi for the sake of a goddamn stupid identifier 01:11:20 PLT, Chicken, ... support it. 01:11:25 If your impl doesn't, I don't care 01:11:26 I always type it out in full :P 01:11:43 (undefine call/cc call-with-current-continuation) 01:11:45 lol 01:11:55 rm 01:12:46 marshmallows: But yeah, I would have to change (backtrack) to (backtrack!) 01:12:54 and (call/backtrack ...) to (call/backtrack! ...) 01:13:10 To me, that is not elegant. It just shows that the declarative layer was built on top of imperative primitives. 01:13:17 And exposing implementation is not good. 01:13:32 yeah good point 01:14:19 hey 01:14:26 how do you do bag-of with amb? 01:14:32 marshmallows: dunno 01:14:33 show me bag-of 01:14:43 I saw the Scheme in Fixnum days one, it's pretty nastly 01:15:04 marshmallows: Btw, I write an amb in Haskell explicitly: custom monad etc. I even made an AmbT monad transformer! http://www.haskell.org/haskellwiki/Amb 01:15:10 Amb is the list monad, interestingly. 01:15:13 And AmbT is NOT ListT. 01:15:21 AmbT is ListT done right since ListT is broken 01:15:30 (bag-of (let ((x (amb 1 2 3 4 5))) (if (odd? x) (amb) x))) ;=> '(2 4) 01:15:41 marshmallows: It's even polymorphhic 01:15:46 do a <- [1,2,3]; b <- ["hello","world"] 01:15:49 works inside the same monad 01:15:50 err 01:15:52 add an amb there 01:16:12 marshmallows: hm that would be hard 01:16:15 you'd need to stop the call/cc 01:16:20 dynamic-wind would be involved. 01:17:23 cool! 01:17:27 (AmbT) 01:17:47 marshmallows: yeah 01:18:00 marshmallows: that code even lets amb [] appear in any type context 01:18:14 due to having a permanently uninstated type variable (r) and using that as a type for a function to do 'return undefined' 01:18:41 (define (prolog form . conds) 01:18:41 ...) ;; chicken scheme throws an *error* on this function, because it knows that ... can never be defined here. That is too damn clever, I love it. 01:20:54 my code works on chicken :D 01:20:55 marshmallows: for the backtrack continuations... 01:20:58 (k #f) or (k (void))? 01:21:08 I'm inclined to the former, because (void) should probably only be a return value. 01:21:19 (k k) 01:21:27 marshmallows: Chicken is great, it marries the UNIX scripting & batch compilation way with the Scheme/Lisp REPL way. 01:21:37 It's also quite fast, and has excellent libraries and ffis 01:21:39 ehird: sounds like bash 01:21:43 :D 01:21:48 also, the webserver it has is great 01:22:06 lament: 'cept bash has no FFIs, barely any libraries, and is painful to code in :) 01:22:25 ehird: Do you know how to make a really good REPL with it (for a sexp lang but not Scheme) 01:22:41 marshmallows: Like readline and stuff? 01:22:47 I guess 01:22:49 I don't know 01:22:50 Do you want commands at the REPL too? 01:22:51 :p 01:22:58 You could just expose special functions of course 01:23:41 the example here: http://www.call-with-current-continuation.org/eggs/amb.html worked unmodified 01:23:45 #;4> (solve-kalotan-puzzle) 01:23:45 (f m f) 01:23:54 amb-colelct is bag-of thouhgg 01:23:57 actually I have this problem I need to solve in my code first but I can't figure how to do it in an elegant (e.g. not totally ugly) way 01:24:23 or I could use an object system to write a single procedure :| 01:25:48 hm 01:25:50 marshmallows: (~ ...) is my defining 01:25:55 (? ...) querying 01:25:56 and hmm 01:25:58 don't use an object system 01:26:00 I use FACT and TO-DERIVE 01:26:02 Chicken has really nice ones 01:26:03 but still :) 01:26:07 marshmallows: ah, but mine are macros 01:26:17 (~ (a b) c d) -> (prolog '(a b) 'c 'd) 01:26:24 (? (a b)) -> (prolog-query '(a b)) 01:26:42 you might wanna make the macro fold the body 01:26:54 (~ (a b) c d) ~> (prolog '(a b) (and c d)) 01:27:05 marshmallows: No.. it uses its internal evaluation engine 01:27:11 syntax-rules does that very naturally 01:27:19 (~ (mortal X) (human X)) 01:27:23 that wouldn't work with yours 01:27:43 you need 3 cases 01:27:56 zero, one, one+ 01:29:06 marshmallows: what does (human 'ehird) result in yours? 01:29:20 marshmallows: also, i only need one case 01:29:22 no 01:29:24 which does fold over the body 01:29:26 but prolog body 01:29:32 marshmallows: what is 'no' in scheme 01:29:39 I mean actually (human 'ehird) 01:29:48 (display "no") 01:29:53 (mortal 'X) ;=> (((X . socrates)) . #) 01:29:56 (human 'X) ;=> ? 01:29:59 I don't think I get what you are asking.... 01:30:06 marshmallows: You quoted that mortal example before. 01:30:12 The human one is supposedly similar. 01:30:14 What about: 01:30:16 (human 'ehird) 01:30:52 ok #f 01:30:52 :P 01:30:57 you want me to say that right? 01:31:02 marshmallows: No. Just wondering 01:31:07 It's a simple question, wtf is hard about it 01:31:53 (prove (make-declarationbase) ((make-term-converter) '(human 'ehird)) ;=> () 01:31:55 -!- timotiis has quit ("leaving"). 01:32:10 ok, what if human(ehird). 01:32:54 % ./prolog2 01:32:54 ?- (human (ehird)) 01:32:54 no 01:33:18 oh 01:33:21 If I add that rule 01:33:53 yea 01:34:45 marshmallows: also, mine will support definition at the prompt 01:35:00 echo "(fact (human (ehird)))" >> test.spl 01:35:02 > (prove (consult "test.spl") ((make-term-converter) '(human (ehird)))) 01:35:02 ((() . #f) . #) 01:35:13 (() . #f)?! WTF 01:35:41 http://rafb.net/p/7AKTK053.txt 01:36:06 do you want my entire code to look at ? (353 lines) 01:36:30 * marshmallows is sort of also hoping suggestions to improve 01:36:59 marshmallows: don't you bind () to #f in that thing? 01:37:07 if so, doesn't that make no damn sense whatsoever 01:38:08 in my previous one I returned a stream of substitutions 01:38:17 marshmallows: my cut is very easy 01:38:20 (set! backtracks '()) 01:40:59 so calling the cdr computed the next substitution.. now though, I have variables as mutable vectors (instead of term copying), so I don't return any substitution, but backtracking unbinds variables now 01:41:20 marshmallows: is variables as mutable vectors better? 01:41:22 it seems less elegant 01:41:25 I could have (#f . #) infact.. the () is reduntand 01:41:30 It's more elegant and efficient 01:42:10 what is #f 01:42:34 it means a cut was not applied in proving this goal 01:42:58 marshmallows: don't you use continuations? 01:43:05 cuttable-stream-append-tail chops of choice points if it sees that 01:43:22 I don't use call-with-current-continuation just streams to delay computation 01:45:00 one thing is with term-copying you can use EQUAL? 01:45:05 marshmallows: Doesn't cut just remove all the backtrack continuations? 01:45:25 but with mutable variables you need to write a TERMS-EQUAL? 01:46:00 cut just says, "The previous choice was the right one" 01:46:14 so you can still have choices above and below it 01:47:12 did that make sense? :S 01:47:25 uhh 01:47:33 cut just means 'no backtracking before me, beyond this point' 01:47:38 so: 01:47:43 (define (cut) (set! backtracks '()) 01:48:37 marshmallows: right? 01:49:32 not exactly 01:49:41 for example, 01:49:41 foo(X) :- !, member(X, [a,b,c,d]). 01:49:42 foo(bar). 01:49:53 so now if you did this query: 01:49:54 ?- member(A, [1,2]), foo(X). 01:50:04 marshmallows: when using amb cut is (set! backtracks '()) 01:50:08 is it different for full prolog 01:50:28 um if you aren't implement Prolog then you can choose any semantics you like 01:50:32 but that's not cut 01:50:59 marshmallows: it's amb's cut 01:51:01 no? 01:51:18 because you could A = 1, X = a; A = 1, X = b; A = 1, X = c; A = 1, X = d; A = 2, X = a; A = 2, X = b; ... 01:51:50 the cut just says the choice between foo(X) and foo(bar) was the right one.. but in that query you can still backtrack 01:53:03 marshmallows: so do i need to handle cut in the other parts? 01:53:05 or can it be standalone 01:53:08 and the other parts not know about it 01:54:07 marshmallows: ? 01:54:13 ASCII ART 01:54:20 http://rafb.net/p/7NyUa343.txt 01:54:25 does that help? 01:55:17 no 01:55:21 my question was simple, an implementation one 01:55:22 :( 01:55:27 if i implement cut do i have to design the rest of my system 01:55:29 to accomodate for it? 01:55:36 or can i add it later with no pain 01:55:46 I added it later with no paint 01:55:48 I added it later with no pain* 01:56:14 Just replaced streams with cuttable streams 01:56:31 Actually 01:56:45 How does dynamic scope interact with calling a continuation? 01:57:05 because you might be able to just have a box with #t or #f in it denoting whether or not a cut occured 01:58:16 marshmallows: what has dynamic scope got to do with it? 01:58:20 in prolog, everything is pretty much global 01:58:24 or lexical. 01:58:51 It's very interesting how Prolog handles binding actually 02:00:07 marshmallows: ? 02:01:23 Prolog is implicit ∃, rather than λ 02:01:44 Is there a tarpit based on logical languages? 02:01:54 Like using the Schönfinkel stroke. 02:02:07 Or something. 02:02:52 what is the Schönfinkel stroke? 02:03:49 marshmallows: what is [] 02:03:50 p 02:03:52 :p 02:03:53 In PN, |x ab = for allx (a | b) 02:04:08 in Prolog [] is empty list 02:04:25 You can define all predicate logic with it, so it is said. 02:05:16 marshmallows: prolog is implicit [] 02:05:18 i.e. what is that char 02:05:31 oh 02:05:36 Backwards E 02:08:17 -!- ehird has quit ("Konversation terminated!"). 02:26:09 -!- sebbu has quit (Read error: 60 (Operation timed out)). 03:16:40 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 03:18:55 -!- slereah_ has joined. 03:23:14 -!- slereah_ has changed nick to Slereah. 03:39:34 -!- Slereah has quit ("Konversation terminated!"). 03:42:06 -!- Slereah has joined. 03:54:40 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 04:36:46 -!- RodgerTheGreat has quit. 04:54:04 -!- Slereah has joined. 06:18:22 -!- slereah_ has joined. 06:21:43 -!- Slereah has quit (Read error: 104 (Connection reset by peer)). 06:23:35 -!- GreaseMonkey has quit ("Read error: 110 (Connection chickened out)"). 06:51:46 -!- slereah_ has quit (Read error: 110 (Connection timed out)). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:08:32 -!- Judofyr has quit (Remote closed the connection). 08:09:12 -!- Judofyr has joined. 08:17:13 -!- sebbu has joined. 09:32:19 -!- okopol has joined. 09:53:05 -!- okopol has quit (No route to host). 10:00:13 -!- Judofyr_ has joined. 10:00:13 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 10:19:04 -!- okopol has joined. 10:38:34 -!- bsmntbombdood_ has quit (Read error: 113 (No route to host)). 10:38:58 -!- slereah_ has joined. 10:41:59 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 10:42:51 -!- slereah_ has joined. 10:49:16 -!- slereah__ has joined. 10:50:37 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 10:53:25 Deewiant, 10:53:32 GOOD: 3DDD is zero doesn't have a matching BAD 10:53:37 you just get an empty line then 10:54:11 looks like a misalignment on line 340 10:55:03 there's a ;>:#,_ on the right end of that line, move the ;> one space to the left so it ends up as ;> :#,_ 10:55:08 that should do it 10:56:25 -!- marshmallows has quit ("Leaving"). 10:57:47 k 10:57:57 Deewiant, can't test as I fixed my D now 10:57:57 heh 10:59:31 It was a P, had to stretch and re-block the curve. 11:00:37 hah 11:00:57 Deewiant, btw just looked at ccbi for F in TOYS 11:01:00 for (auto y = ty; y < ty + j; ++y) 11:01:02 err? 11:01:15 what is it trying to do exactly hm? 11:02:05 looks like it's looping from ty to ty + j 11:02:08 :-P 11:02:20 ok that auto confuse me 11:02:25 Deewiant, what does auto does in D? 11:02:26 type inference 11:02:30 ah 11:04:26 BAD: G doesn't work 11:04:30 in what way I wonder 11:20:54 áa=BAD: V doesn't move correctly 11:20:54 áa=GOOD: overlapping copy with C works 11:20:58 Deewiant, that werid 11:21:00 weird* 11:21:07 yes I know why it doesn't work 11:21:16 because I haven't writte the code for those two yet 11:21:20 but the odd chars 11:26:27 case 2: space[ip.x, ip.y] = '^'; goSouth(); break; 11:26:27 case 3: space[ip.x, ip.y] = 'v'; goNorth(); break; 11:26:30 Deewiant, that is from ccbi 11:26:42 shouldn't those ^ and v be the other way around? 11:27:26 probably, yes :-) 11:27:38 from U in TOYS 11:36:19 Deewiant, any idea what cause those áa= btw? 11:36:47 nope 11:36:50 BAD: 01T goes up <-- hm? 11:37:17 1T is supposed to be | 11:37:49 yes it is indeed 11:37:56 so up or down seem correct? 11:38:16 point is, I made it just call the function used for normal | 11:38:19 and normal | works 11:38:21 and what is 0| supposed to do 11:38:30 it's supposed to go down 11:38:33 so 01T should go down 11:38:35 0| goes down, I tested it 11:38:41 so why would 01T go up 11:38:47 it's your code, I don't know 11:38:57 sound like a bug elsewhere as the same code is used in both cases 11:40:22 Deewiant, wait a sec 11:40:24 BAD: 01T goes up 11:40:28 I set a breakpoint on T 11:40:32 it didn't hit 11:40:36 so T is not even called there 11:40:37 wtf 11:47:34 Deewiant, when I fixed K that I had before not yet implemented, T suddenly starts to work 11:47:42 Deewiant, so looks like a mycology bug? 11:48:16 doesn't make sense to me 11:48:22 looking at the code for testing T 11:50:11 Deewiant, where is it? hm? 11:50:17 end of line 422 11:50:32 oh that is a HUGE area for TOYS then 11:50:58 yup, TOYS is over 100 lines of testing 11:51:09 Deewiant, btw, implementing V removed the odd char in front of M, but not the odd char in front of V itself 11:51:24 yeah, there's probably a missing 'n' somewhere which means there's some crap on the stack 11:52:13 implementing M fixed char in front of V btw 11:52:14 heh 11:52:40 I guess mycology didn't like that I did the simple ones first, instead of "in order of testing" 11:52:55 shrug 11:52:56 BAD: L gets right-hand 11:52:56 BAD: R gets left-hand 11:52:59 and those are wrong 11:53:04 currently they do nothing 11:53:10 heh 11:54:04 hm 11:54:27 that should be "L doesn't work at all" then 11:55:26 AnMaster: can you replace line 416, col 25, 'A', with 'n' 11:55:51 Deewiant, hm a sec 11:56:34 Deewiant, no change 11:59:02 AnMaster: do you have mercurial installed? 11:59:24 Deewiant, yes I got most distributed version control systems apart from darcs 11:59:27 and git 11:59:29 * AnMaster hates git 11:59:42 AnMaster: pull mycology from http://tar.us.to:8000/ 11:59:52 Deewiant, however, I would need some help if you want me to use mercurial, it was like half a year ago I used it 12:00:03 my memory is kind of rusty there 12:00:15 one sec 12:00:28 hg somecommand I guess? 12:02:25 AnMaster: hg clone http://tar.us.to:8000/ 12:02:29 I hope 12:02:44 destination directory: tar.us.to:8000 12:02:46 * AnMaster waits 12:02:58 Deewiant, seems like nothing happens? 12:02:58 er 12:03:57 PORT STATE SERVICE 12:03:57 8000/tcp filtered http-alt 12:04:00 is what nmap says 12:04:05 so that won't work indeed 12:04:08 yeah, I killed it now 12:04:16 Deewiant, why? 12:04:18 I think the hostname doesn't work, I only just updated DNS :-) 12:04:29 88.114.235.101 12:04:33 is what it resolves to here 12:04:35 88.114.224.242 12:04:37 is what you want 12:04:51 hm, dns update time ETA? 12:05:06 * AnMaster do not want to run rndc flush because that slows down everything else 12:05:30 destination directory: 88.114.224.242:8000 12:05:31 ok 12:05:39 seems to have worked now 12:05:54 ok what now? 12:06:04 now you should have a new mycology there, see if that works 12:06:08 BAD: L doesn't work at all 12:06:08 BAD: R gets left-hand 12:06:09 indeed 12:06:10 yay 12:06:18 -!- Corun has joined. 12:06:45 GOOD:GOOD: 000p000W goes seog W000p000 :DOOG 000p000W goes through 12:06:45 °¥@BAD: 00p100W goes through 12:06:45 ³?@BAD 000p01-00W goes through 12:06:45 ³@GOOD: X works 12:06:54 :-P 12:06:55 somehow, I don't think that count as GOOD? 12:07:06 no, I don't think so :-) 12:07:10 but that got more GOOD than BAD in it ;P 12:07:57 AnMaster: pull again, "hg pull" should be enough 12:08:06 just to see if it works for R now as well 12:08:16 (run 'hg update' to get a working copy) 12:08:23 that too 12:08:27 now that is a reason why I selected bzr :) 12:08:42 BAD: R gets left-hand 12:08:44 Deewiant, still that 12:09:18 (wouldn't it be easier just to comment out the relevant line in ccbi for a moment and experiment with that btw?) 12:09:39 nah :-P 12:10:03 alright, one more time 12:11:27 BAD: R doesn't work at all 12:11:29 indeed 12:11:31 yeh 12:11:37 cheers 12:24:07 -!- okopol has quit (Read error: 113 (No route to host)). 12:59:48 Deewiant, 12:59:50 GOOD:GOOD: 000p000W goes seog W000p000 :DOOG 000p000W goes through 12:59:50 °¥@BAD: 00p100W goes through 12:59:50 ³?@BAD 000p01-00W goes through 12:59:50 ³@GOOD: X works 12:59:58 all but W is now complete on TOYS 13:00:03 W does nothing atm 13:00:19 so why such weird output 13:00:29 doing nothing should be quite basic thing shouldn't it? 13:31:45 shrug 13:32:14 -!- timotiis has joined. 13:33:57 ok now TOYS are implemented fully 13:34:40 AnMaster: and BTW, it says clearly in mycology's readme (I think) that if you see an unimpl instruction you should reflect 13:34:53 hm 13:34:59 and the behaviour is your fault if you don't 13:35:14 Deewiant, however most tests does detect such cases 13:35:26 the threading ones seems a bit more "brittle" though 13:35:33 doesn't matter, because it's undefined 13:35:52 the fact that some tests detect it is incidental 13:36:38 ^D^C^B^AGOOD: : on empty stack makes stack size 2 according to y$ 13:36:44 hm cat -e is interesting 13:36:52 * AnMaster wonders why it print some control codes there 13:37:09 bugs 13:37:43 yeah but I wonder what the bug is and where 13:39:07 Deewiant, btw I have an early draft for debugging protocol, your feedback would be valuable, I can put it up somewhere in one of these formats: lyx. latex, dvi or pdf 13:39:10 you select 13:41:42 Deewiant, http://rage.kuonet.org/~anmaster/tmp/frontend-prococol.pdf is the pdf version, it is just a draft 13:46:26 GOOD: 000p000W goes thrugh 13:46:30 that's not right hmmm 13:49:48 Deewiant, request: add something like the trace mode that my interpreter got and make a binary, so I can compare and see where I go wrong :/ 13:49:58 I can't figure out some bugs 13:50:12 :( 13:50:25 please :) 13:55:57 -!- atsampso1 has joined. 13:56:49 -!- atsampson has quit (Read error: 104 (Connection reset by peer)). 14:13:13 AnMaster: what's wrong with the debugger 14:18:39 -!- Judofyr_ has changed nick to Judofyr. 14:20:04 -!- Corun has quit ("This computer has gone to sleep"). 14:21:32 -!- Judofyr has quit. 14:22:50 -!- lifthras1ir has joined. 14:22:50 -!- lifthras1ir has quit (Client Quit). 14:23:55 -!- lifthras1ir has joined. 14:24:29 -!- lifthras1ir has quit (Remote closed the connection). 14:24:29 -!- lifthrasiir has quit (Read error: 104 (Connection reset by peer)). 14:24:37 -!- lifthrasiir has joined. 14:25:06 Deewiant, because I can't easily get a list of all instructions executed 14:25:23 why do you need that 14:25:54 Deewiant, I'm unable to track down a bug in my interpreter, so I think the best way would be to compare the instructions exected with one that does it right 14:26:01 to see what went wrong where 14:26:10 you probably know the coordinates where you want to compare 14:26:29 so just use the debugger, set a break point there, and then go step by step and see what happens 14:27:15 Deewiant, tried that, something goes wrong earlier I think and doesn't show up until later 14:27:50 so set the breakpoint earlier :-P 14:29:16 -!- lifthrasiir has quit (Client Quit). 14:29:40 -!- lifthrasiir has joined. 14:30:01 -!- lifthrasiir has quit (Client Quit). 14:30:07 -!- lifthrasiir has joined. 14:59:42 Deewiant, no I'm unable to find out the cause 15:02:13 can't you follow what's on your stack and what's on CCBI's 15:02:24 hm yeah 15:02:31 and if/when they differ go back to see where the differing value(s) came from 15:02:53 hrrm 15:03:04 Deewiant, well did you look at http://rage.kuonet.org/~anmaster/tmp/frontend-prococol.pdf 15:03:16 * AnMaster ponders implementing it first to be able to find this bug 15:03:18 yeah I looked it over quickly 15:03:26 any comments on it? 15:03:42 nothing particular 15:04:00 anything ccbi will ever support if I do it and make a good debugger frontend? 15:04:04 I didn't read it word for word so there might be omissions or something but the general idea looks fine 15:04:22 ok 15:04:51 does the interpreter ever send messages? or only respond to questions from the client? 15:09:23 Deewiant, it does send trace messages 15:09:40 oh and BRK for breakpoint hit and such 15:10:06 Deewiant, the table at the end describes that 15:10:11 appendix a 15:10:13 ah, tracing 15:10:19 is that always enabled? 15:10:31 Deewiant, yes, do you have an objection to that? 15:10:36 if it is, it should be disablable IMO 15:10:45 ok 15:10:50 but why? 15:10:54 performance? 15:10:58 because if you don't need it it's pointless 15:11:11 hm ok 15:11:13 you could be debugging over the net, right 15:11:28 Deewiant, you could but I can't imagine why anyone would want to heh 15:11:31 so sending a lot of lines like that over a slow connection can be annoying 15:11:40 hm 15:11:49 AnMaster: user runs a script on his machine, developer debugs remotely 15:12:01 admittedly this /is/ Funge we're talking about, but you never know ;-) 15:12:07 heh, well that user got to trust the developer, as you can set funge space cells 15:12:20 well, of course 15:12:32 so "drowssap/cte/" o 15:12:33 ;P 15:12:47 or i 15:13:08 in general, in that situation, the user will do whatever they're asked anyway 15:13:15 oh? 15:13:37 well, because such users aren't necessarily very tech-savvy 15:13:58 I don't think non-computer literate ppl would *use* funge 15:14:08 which is why I said "admittedly" above :-P 15:14:11 yeah 15:15:01 okay, so... you've only got a windows debugger but you need to debug a funge script running on a *nix 15:15:04 or vice versa 15:15:47 Deewiant, hm ok a point 15:15:58 most likely done over LAN though but I see your point 15:16:11 something like a TRACEOPT enabled:b ? 15:16:16 where b is a boolean 15:16:27 or just TRACETOGGLE or something 15:16:31 or maybe, as I indented other ways of tracing 15:16:33 a bit mask 15:16:52 for example just trace when new ips were created, but possible that is better as change notification 15:18:28 Deewiant, should trace initially be on or off? 15:19:07 no default, needs negotiation? 15:19:24 so that the client can set its own default 15:19:59 hm 15:20:07 Deewiant, it is easy to set in pre-run state 15:20:13 ie just before program starts running 15:21:22 Deewiant, also it is unclear to me how some things should work, ie tracing of space 15:21:35 or in k 15:21:48 one trace each time k runs the instruction? 15:22:22 hmm 15:22:34 if it's kp or something it might change the instruction being run, so yes I guess 15:23:56 Deewiant, also I got no idea what extra stuff TRDS would need, if you have any interest in seeing it supported I need info on that 15:24:22 I did add a ip mode in the bitmask on trace for it after looking into CCBI's debugger 15:24:41 for debugging it's a bit tricky 15:25:13 just for tracing, it's easy since you can just send "space changed to " or "space changed by" and similarly for IPs moving around and being created/dying 15:25:14 also should it be possible to change IP mode, ie, string mode and such from inside the debugger? 15:25:46 for full functionality, sure, but I wonder if it's really necessary 15:25:46 uhu? 15:25:59 I mean, tracing anything is easy 15:26:09 since the debugger doesn't have to know anything about semantics 15:26:12 yes, and this one allows several breakpoints heh 15:26:43 Deewiant, well depends, for example if you want the debugger to draw a "live" version of funge space as the programs execute it would have to 15:26:44 the interpreter can just tell, when time jump happens, "funge-space changed to ...", "IP 0 moved to ...", "IP 1 is now in mode X", etc. 15:26:53 AnMaster: no, it wouldn't 15:27:03 AnMaster: since the interpreter only has to communicate the current funge-space 15:27:05 that is one thing I wanted recently, when trying one of the programs 15:27:08 called a roller 15:27:09 and the debugger can draw that 15:27:17 hm 15:27:25 it shouldn't be the way that interpreter says "executed p" and then debugger executes p locally 15:27:40 true 15:27:41 it should be that interpreter says "executed p; space[0, 0] is now a" 15:27:47 Deewiant, so you want change notification 15:27:49 see that section 15:27:50 and then debugger can draw a at (0,0) 15:27:56 EVCHGANYCELL 15:27:59 is the one you want 15:28:01 for that 15:28:30 aye 15:28:47 anyway what is needed for stack-stack 15:28:56 I don't know there, the stack-stack section is just todo atm 15:29:12 more events needed, though 15:29:20 Deewiant, agreed 15:29:27 and hmm 15:29:33 how does this position stuff work 15:29:37 in events 15:29:45 you mean dimensions? 15:29:50 "this is the position to monitor" 15:30:16 Deewiant, yes? not sure I got your question? 15:30:29 so what is that, exactly 15:30:33 funge-space coordinates? 15:30:34 for one point? 15:30:35 for a range? 15:30:44 hm see section 5.1 15:30:56 but one cell yes 15:31:12 okay 15:31:15 but range may indeed be a good idea I guess 15:31:16 so, something to consider 15:31:17 ranges 15:31:20 and also, unbounded ranges 15:31:27 um? 15:31:30 so you can say "anything with y-coordinate > 100" 15:31:37 right I see 15:31:46 because the funge-space can grow, so you don't have to send STOP, also check y-coordinate 101, CONTINUE 15:31:54 and then again for y-coordinate 102, etc. 15:32:13 well that is one issue with STOP, it may not stop exactly where you want 15:32:16 for example, network lag 15:32:22 yeap 15:32:23 from the remote developer ;) 15:32:35 well, even internally to the machine 15:32:39 indeed 15:32:42 the interpreter will probably go at least a few instructions forward 15:32:59 also, btw: IP change events 15:33:00 in even the best case at least one instruction forward the way I plan to implement it 15:33:08 Deewiant, hm? as in? 15:33:17 "ip split happened"? 15:33:19 "IP 1 moved to (x,y)" 15:33:23 "IP 2 created at (x,y)" 15:33:30 (+ with mode foo) 15:33:31 etc. 15:33:34 moved well, that trace would show 15:33:43 create and destroy yes 15:34:35 * AnMaster is copying this down into a text file 15:34:50 :-) 15:36:07 for stack stack: push stack, pop stack, at least 15:36:28 it can do that 15:36:32 oh wait 15:36:36 push a stack you mean? 15:36:38 right 15:36:39 yes 15:37:09 tracing or events for when stack is changed 15:37:13 Deewiant, brb, phone sorry 15:37:22 in general, I'm a bit leery about the tracing+events relationship 15:37:39 tracing currently just looks like an event that always fires 15:37:56 so maybe remove the whole tracing section and do the whole thing in terms of events 15:38:29 there doesn't seem to be any way of getting info on the current stack state 15:39:18 SSGET for getting a whole stack at once, maybe 15:39:35 and an SSGETALL for getting the whole stack stack 15:41:49 Deewiant, yeah it should probably be an event 15:42:15 and I agree with the other two 15:42:21 Deewiant, is there anything un-needed? 15:42:42 because the protocol is starting to look more complex than needed :/ 15:43:54 well I'm not sure about all the "get info" stuff 15:44:09 if tracing is always on, it's not needed 15:44:22 but then, having full tracing is a bit bloaty 15:44:45 yes I'm changing it into an even 15:44:47 event' 15:44:48 * 15:45:15 what I mean is, the only cases where you would need IPINFO, for instance, are if you don't have IP tracing on 15:45:36 because if you have tracing on, then the interpreter has already told you where the IPs are, what their deltas are, etc. 15:46:16 but it's true that if you don't have it on, you do need it, and this way you can minimize network traffic: send a breakpoint, then request all info when stopped and get nothing in between. 15:46:41 so strictly speaking I don't think there's anything major that's unnecessary 15:46:57 similarly for FSPACEGET and FSPACEBOUNDS and FSPACEDUMP 15:47:21 if you have the event notification for that on, you don't need it, otherwise you do and that way is more optimal in some cases. 15:47:42 Deewiant, you do need it in one case always 15:47:45 to get initial state 15:47:53 and then turn on the notification 15:48:09 you don't necessarily need the initial state 15:48:14 hm? 15:48:22 for instance, FSPACEDUMP 15:48:29 yes? 15:48:43 if you know that all you want to do is set a breakpoint at (x,y) and then see what's up, you don't need to download a dump of the whole space at the start 15:48:52 true 15:49:07 but why on earth would you want to trace writes to funge space then? 15:49:19 well, this is a case where you wouldn't. 15:49:25 indeed 15:49:28 you'd set all events off 15:49:32 set the breakpoint 15:49:39 and then get no traffic until the interpreter's at the breakpoint. 15:50:40 indeed 15:50:48 Deewiant, well that made me think... 15:50:55 but it's up to you whether you consider that use case relevant. 15:50:58 with tcp you need to keep the connection alive 15:50:59 so 15:51:10 if you don't want to make a big spec. 15:51:16 how do you do that then? some "keep alive" instruction needed maybe? 15:51:26 Deewiant, I want something that won't take a year to implement 15:51:30 hmm, isn't that builtin to TCP? 15:52:00 Deewiant, I think connections times out, otherwise why is there an option for ssh keepalive for example 15:52:01 http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html 15:52:11 Deewiant, you said " and then get no traffic until the interpreter's at the breakpoint." 15:52:13 that is the issue 15:52:16 no traffic 15:52:38 but isn't that rather an issue with the SSH daemon killing the connection 15:52:45 not sure 15:52:46 not with the OS 15:52:49 neither am I 15:53:08 but I do think it'd make more sense if it were 15:53:12 so it probably is ;-) 15:54:09 Deewiant, um, I think connection tracking in firewall will time out after a while with no traffic 15:54:14 I'm pretty sure that is the case 15:55:08 because I remember that back when I ran windows, I ran colinux for a while, I didn't need ssh keepalive to make a connection stay alive to colinux, UNTIL I enabled iptables in colinux 15:55:16 then suddenly it was needed 15:55:19 hm, possible 15:55:32 alright, so enablable keepalives 15:55:41 of the tcp type? yeah good idea 15:56:38 -!- ehird has joined. 15:56:49 Deewiant, wait, the application doesn't do tcp keepalive? 15:56:52 but the OS does? 15:56:54 boop 15:56:58 AnMaster: umm yeah 15:56:59 ok then we need some protocol level one 15:57:08 obviously the os' tcp layer handles that 15:57:09 :) 15:57:10 I honestly don't know whether you need app-level keepalives 15:57:16 I don't think so, but I don't know 15:57:24 Deewiant, irc uses it too 15:57:28 PING/PONG 15:57:29 it is kinda weird though, most raw-feeling socket stuff has a lot of bunk behind it in tcp 15:57:32 yeah, but IRC is /old/ 15:57:33 it's really quite comfy 15:57:34 :) 15:57:37 and yeah 15:57:42 IRC is an old dead machine 15:57:47 ping/pong is pretty much useless 15:57:48 agreed 15:57:55 ehird, however ssh keepalive then 15:57:56 & annoying to have to code into stuff 15:57:57 it is useful 15:58:08 AnMaster: ssh has to do all kinds of tricks to fit into the protocol it works on 15:58:13 kind of like stack smashing in c 15:58:17 Deewiant, um, I think connection tracking in firewall will time out after a while with no traffic 15:58:17 I'm pretty sure that is the case 15:58:17 because I remember that back when I ran windows, I ran colinux for a while, I didn't need ssh keepalive to make a connection stay alive to colinux, UNTIL I enabled iptables in colinux 15:58:17 then suddenly it was needed 15:58:22 ehird, hm ^ 15:58:25 yeah, SSH doesn't necessarily run over TCP 15:58:32 maybe iptables moderates it 15:58:39 maybe SSH keepalive just means enabling TCP keepalive, when on TCP 15:59:22 hm 15:59:44 once again, I have no clue. 16:00:01 -!- Judofyr has joined. 16:00:05 i think ssh does its own keepalive 16:00:11 so that it can be protocol-agnostic 16:00:18 yeah 16:00:18 however, protocol-agnostic programs are... uncommon :) 16:00:32 ehird, well I need this to run over two kind of sockets 16:00:42 TCP/TCP6 and Unix domain 16:01:46 AnMaster: you should really give git a try 16:01:50 not like 16:01:54 try and use it for everything 16:01:58 but just use some projects using it 16:02:03 its not that bad once you get used to it. nice 16:02:08 ehird, I have tried it 16:02:13 AnMaster: presumably not recently 16:02:18 yes, until recently, it was painful 16:02:20 it's not any more 16:02:20 ehird, about two months ago 16:02:27 it changed since then? 16:03:02 AnMaster: a litle bit. but you obviously didn't try it very well 16:03:15 "obviously"? 16:03:16 its kinda like lisp. you learn about it, laugh at it, hate it ferociously, then maybe try it and gradually 'get it' :) 16:03:33 (also, darcs is pretty impressive for its theoretical basis. but mostly its used by lisp/haskellers) 16:03:45 ehird, while I find lisp quite annoying I do see it have points, and I even coded some small bits of elisp 16:04:19 ehird, and yes darcs indeed, didn't seem to be able to install haskell on my PPC based computer where I tried it 16:04:40 "We are a triune being - BODY, SOUL, and SPIRIT. Speaking computerese, we have Body - computer casing; Soul - Hard Drive/Hard Copy; Spirit - Software." 16:04:41 Lulz 16:04:52 -!- sebbu has quit (brown.freenode.net irc.freenode.net). 16:04:52 'uld help making Funge a more attractive language. In this' 16:04:57 because funge should be an attractive language. 16:05:02 -!- sebbu has joined. 16:05:14 AnMaster: find it quite annoying -- yeah your state with git is like yours with lisp :) 16:05:27 i'm not patronising you, because i felt exactly the same way about git and lisp :p 16:05:32 ehird, no I find git bloody stupid 16:05:35 quite a difference 16:05:40 AnMaster: still the same basic thing 16:05:46 you don't "get it" yet 16:05:59 ehird, also it is harder to learn for others 16:06:09 I don't want to have to hand hold users once I get it 16:06:13 as you said 16:06:18 ehird: I don't like Darcs's patch-based model 16:06:32 Deewiant: It does do a good job of sorting out stuff, though 16:06:34 ehird, bzr is close enough to svn that you can easily change really 16:06:41 Though its automatic hunking sometimes gets it wrong 16:06:51 AnMaster: being close to svn is a flaw 16:06:53 Deewiant, that is one thing I want from darcs 16:06:58 the ability to juggle changesets 16:07:03 svn is broken by design, and theoretically bullcrap 16:07:06 and be able to track from where they came 16:07:11 ehird, well cvs is worse 16:07:22 AnMaster: cvs is probably better than svn. 16:07:25 ehird, point is svn got a nice user interface 16:07:29 I say that unsarcastically 16:07:34 I'm not talking about internals 16:07:39 but they way a user see it 16:07:41 and if you think svn's user interface is nice I don't know what kind of monster you are 16:07:51 ehird, compared to cvs at least 16:08:04 ehird, err the one with two heads and three arms 16:08:07 ;P 16:09:45 really the ideal solution is plan9's versioned FS 16:09:50 it's terribly advanced &nice to use 16:10:09 unfortunately plan9, though infinitely better than any system i've come across, is totally useless for practical work :) 16:10:20 ehird, exactly 16:10:33 it's a research os 16:10:38 that is now more or less dead 16:10:41 AnMaster: not dead 16:10:45 new snapshots are made daily 16:10:58 ehird, so is the community growing? 16:11:10 when will it have support for accelerated 3D? 16:11:11 AnMaster: in little trickles 16:11:15 AnMaster: it is a research os. 16:11:22 why would it have support for that? 16:11:26 when will it work on something as simple as a SATA disk? 16:11:32 it does 16:11:33 last I checked it didn't handle that 16:11:37 hm ok 16:11:43 iirc 16:12:04 daily? http://plan9.bell-labs.com/sources/plan9/sys/src/ looks a bit older 16:12:09 ehird, point is, it is not useful for practical work 16:12:27 Deewiant, well for bell it *is* dead 16:13:55 Deewiant: that's not a snapshot 16:13:59 AnMaster: i already said that 16:14:05 [15:10] ehird, exactly 16:14:06 [15:10] it's a research os 16:14:06 [15:10] that is now more or less dead 16:14:08 everything but the last line, i agree with 16:14:30 ehird: where're the snapshots 16:14:36 ehird, yes I was agreeing with you 16:14:43 Deewiant: don't rememberr offhand 16:14:57 AnMaster: ok, but it is NOT more or less dead 16:15:06 it's alive, and interesting fromm a research POV 16:15:14 hopefully the OSs of the future will resemble it in some way 16:15:26 i really like it's refreshing approach to the mouse, actually 16:15:32 the tests etc. they did and all 16:15:39 and they developed an interface combining the keyboard and the mouse efficiently 16:15:41 it's really nice 16:15:59 i've always been a mouse fan, though. it's just that a lot of apps are designed suckily for one 16:16:09 (I love acme.) 16:18:21 hm? 16:18:32 I prefer working with my hand on the keyboard 16:18:36 avoiding mouse 16:18:55 ergonomics 16:19:45 AnMaster: the mouse is very effiient with the right interface 16:19:55 and enough practice, a lot of mouse-haters just don't even try the mouse properly 16:19:59 so they're simply not proficient with it 16:20:10 ehird, I can use it well enough 16:20:26 I use it a lot, but it make my hand hurt in the long run 16:20:57 a track ball seems much better 16:21:03 trackballs are interesting 16:21:12 i am not sure they are superior to a well-calibrated mosue though 16:21:14 ehird, of course there are tasks where you can't avoid mouse, for example image editing 16:21:20 anyway, my whole computer interaction system is warped 16:21:31 my hands are very efficient at jumping keyboard/mouse 16:21:36 so the context switch is almost none 16:21:37 where mouse or pen on touch surface are the only sane options 16:21:44 also, my typing is really weird 16:21:51 ehird, oh? 16:21:57 my hands are predictive, they know which area they will be tapping the most before they actually tap 16:22:15 so they kind of float about to a weird place and then a second later i realise that they were being really clever and going to the right place 16:22:40 heh? 16:22:56 yes of course I know where I will type 16:23:34 no 16:23:35 I mean 16:23:40 my hands generally don't rset on the home row 16:23:54 they type a bit then drift somewhere else (not conciously, they do it automatically) 16:24:04 and then it ends up that where they drifted was where they'll be typing the most until the next drift 16:24:10 it's strangely automatic 16:24:11 so I move while the previous char is typed with the other hand. anyway I'm right-handed but I seem to type faster and use more of my fingers with left hand 16:24:18 I just kind of wobble my hands and tap down 16:24:20 and it all moves for me 16:24:26 I never use the home row anyway 16:24:35 Deewiant, nor do I 16:24:36 my fingers are where they need to be, not on some default location :-P 16:24:43 exactly 16:24:51 that comes from not using vi IMO 16:24:51 my idiosyncratic style has developed over quite a few years 16:25:00 maybe, but I use vim :-P 16:25:07 Deewiant, ah but I use emacs 16:25:37 i use vi or emacs 16:25:43 i quite like textmate on os x 16:25:58 -!- marshmallows has joined. 16:26:01 mhm 16:26:02 esp. for xml 16:26:06 its really nice 16:26:13 ehird, I tend to xml in kate 16:26:18 C in emacs or kdevelop 16:26:34 the problem is when finding out you used both for same file 16:26:36 heh 16:26:37 AnMaster: hmm, just tried xml'ing in kate 16:26:38 at the same time 16:26:40 not that hot 16:26:45 but still hotter than anything emacs has, oddly 16:26:51 ehird, I don't really do a lot of xml really 16:26:55 emacs' xml support sucks more than anything else emacs can do 16:26:56 so kate is enough for me 16:26:57 it's just terrible 16:27:13 i don't care if nxml has a validating xml parser written in emacs, it's crap 16:27:14 ehird, agreed, it fails at indention in xml for example 16:27:50 ehird, but the solution is very simple 16:27:55 just use S-Expressions 16:28:03 emacs got a very good support for that 16:29:21 AnMaster: s-expressions can get really ugly for some types of data you know 16:29:37 indeed, but much less overhead than xml in most cases 16:29:47 also 16:29:51 emacs has no S-Expr mode 16:29:52 just lisp mode s:) 16:29:58 Paredit on its own: nope. won't indent. 16:30:49 hm? 16:30:59 ehird, just open a html file or xml file in emacs 16:31:04 it won't indent where you want 16:31:44 while kate won't find the right indention level automatically either, it won't prevent you from doing it yourself 16:31:58 emacs does? O_o 16:32:09 Deewiant, yes for C it does 16:32:25 I mean, "prevent you from doing it yourself" 16:32:35 Deewiant, in xml mode it does yes oddly 16:34:19 AnMaster: kate autoindents 16:34:22 you must have it broken 16:34:41 ehird, what version? 16:35:16 ? 16:36:12 ehird, = 16:36:13 ? 16:36:27 AnMaster: ubuntu 16:36:29 ...... 16:36:32 what kate version 16:36:33 ... 16:36:40 ubuntu's kate. 16:36:43 and kde version 16:36:43 go in your config 16:36:47 change the indent settings 16:36:48 ehird, and that is 4.what? 16:36:51 or 3.what? 16:36:52 4? 16:36:52 no 16:36:53 3 16:37:04 kate has ALWAYS indented xml 16:37:06 its a config options 16:37:07 sheesh 16:37:16 help -> about kate 16:37:18 change indent mode to 'c style' 16:37:19 jesus 16:37:20 what version? 16:37:23 change indent mode to 'c style' 16:37:23 change indent mode to 'c style' 16:37:23 change indent mode to 'c style' 16:37:23 change indent mode to 'c style' 16:37:30 ehird, there is no such thing here 16:37:32 odd 16:37:36 AnMaster: settings 16:37:38 configuration 16:37:39 indentation 16:37:41 -> c style 16:37:54 you mean: Inställningar -> Anpassa kate? 16:38:06 whatever, you dirty swede :) 16:38:08 If you use C style, Al Qaeda wins. 16:38:13 slereah__, err? 16:38:23 ehird, anyway emacs rocks for C 16:38:26 real programmers use computers in english! ;) 16:38:29 AnMaster: yes but C style indents xml 16:38:37 ehird, perfect CScope integration for example 16:38:43 I find most swedish translations of software disgusting 16:39:03 olsner, the KDE one is unusally good 16:39:03 not common 16:39:09 but KDE one is actually really high quality 16:39:23 oh, good for KDE 16:39:35 * olsner uses no KDE software 16:39:40 olsner, gnome? 16:39:51 they have very shitty Swedish translation iirc 16:40:00 but I haven't used it for long 16:40:07 so can't really say anything about current state 16:40:07 nah, I use X11, with some software from the gnome project ;-) 16:40:24 olsner, what window manager? 16:40:52 oh god i'm pretentious 16:40:59 i just responded to a post on reddit saying 'JWZ' with 'it's jwz' 16:41:13 jwz? 16:44:31 jamie zawinski 16:44:33 AnMaster: xfce, so I guess I'm half-gnome 16:44:44 ehird, doesn't mean anything to me 16:44:48 Jamie W. Zawinski (born November 3, 1968[1] in Pittsburgh, Pennsylvania), commonly known as jwz, is an American computer programmer responsible for significant contributions to the free software projects Mozilla and XEmacs, and early versions of the proprietary Netscape Navigator web browser. He still actively maintains the XScreenSaver project, used by most Unix-like computer operating systems for screenblanking. 16:45:14 (also: 'Zawinski is currently the proprietor of the DNA Lounge, a nightclub in San Francisco.') 16:45:44 if you've ever heard: 'Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.' then that's a jwz quote. it's also horribly incorrect 16:46:15 ah 16:46:20 that's often paraphrased as "I know, I'll use XML." ;-) 16:46:26 ehird, I know someone who like to quote that yes 16:46:30 one of the #bash regulars 16:46:34 called greycat 16:46:53 and well some ppl try to use regex where regex does not really fit 16:47:29 hmm, has someone produced a turing complete regexp dialect yet? 16:47:36 olsner, was just about to ask 16:47:45 if not, someone should 16:48:37 olsner: perl5 regexps 16:48:42 also ais523 is working on one 16:48:46 which is actually convenient for parsing 16:48:52 AnMaster: aah, greycat. that moron :) 16:49:03 ehird, oh? he is smart 16:49:06 just very unusal 16:49:11 doesn't perl5 regexpes rely on embedding perl code for TC:ness? 16:49:39 ehird, I respect his knowledge, but I don't agree with his opinions 16:49:41 AnMaster: smart but elitist and unhelpful 16:49:46 & plain wrong on most things 16:49:53 ehird, opinons indeed 16:49:55 so a lot of smart going to waste 16:50:03 olsner: nope 16:50:09 you can have recursive regexps and some other stuff 16:50:10 it is tc 16:50:23 Speaking of jwz, this has to be the craziest lisp code i've ever seen: http://jwz.livejournal.com/854482.html 16:50:31 ehird, and he knows more than anyone else on #bash about HP-UX ;) 16:50:40 or whatever it was he ran 16:52:56 heh, just the lisp equivalent of a bit of unsafePerformIO and unsafeCoerce :P 16:53:28 AnMaster: knowledge about HP-UX, how useful and practical 16:53:44 ehird, hehe exactly ;P 16:53:47 olsner: except that those functions will be actively used in the code for: 1. efficient programs 2. OS-level code 16:53:49 it was ironic 16:53:52 since they were just low-level primitives 16:54:07 # is a hilarious printout though 16:54:34 http://www.unlambda.com/nevermore/ ooo 16:55:46 http://www.unlambda.com/lisp/meroko.page a different one, same site. odd 17:17:13 Deewiant, where is the string GOOD: : on empty stack makes stack size 2 according to y stored 17:17:16 I can't find it 17:18:23 oh wait just found it 17:18:25 but wtf 17:29:24 is SISC's startup unbearably slow for anyone else? 17:29:51 ehird, SISC? 17:32:17 Second Interpreter Scheme Something 17:32:22 seecond interpreter of scheme code 17:32:24 a java scheme interp 17:32:26 main interest: 17:32:33 it has full continuations while still interacting with java, and 17:32:36 everything is serializable in it 17:32:44 you can serialize functions, continuations, everything except obviously things like sockets 17:37:06 Deewiant, so far it seems to be crap on after the newline in "GOOD: ] turns flying IP right" 17:37:32 stack have 1 2 3 4 at that point 17:37:34 wtf 17:42:49 Deewiant, the code in that area is very confusing 17:43:51 hmm 17:43:55 i wonder how hard implementing a basic smalltalk is 17:45:14 -!- Corun has joined. 17:45:45 "GOOD: \ on empty stack makes"$"x stack size 2 accord"< 17:45:53 Deewiant, what is the $ there for? 17:45:59 it tests something else at once? 17:46:22 oh wait 17:46:32 it is code running through the string 17:46:36 oh my 17:50:25 hmm 17:50:28 anyone a smalltalker? 17:50:39 do messages have built-in arity, i.e. can I respond_to with an argc? 17:50:41 i think no 17:51:50 well depends on how you define smalltalker 17:52:07 * AnMaster runs 17:53:01 for (i = argc; i--;) { /* cute c hack *. 17:59:37 ehird, if you want to parse your command line arguments backwards it does indeed seem like the right way 17:59:45 why on earth you would want that I don't know 17:59:52 -!- slereah_ has joined. 18:03:30 AnMaster: yeah, oops :) 18:03:32 anyway 18:03:42 http://rafb.net/p/x7YYOH94.html skeleton of message sending for my imaginary smalltalk 18:04:08 ehird, I think objc does message based object orientation too? 18:04:09 iirc 18:04:17 AnMaster: yep 18:04:20 objc is smalltalk+c 18:04:25 [...] = smalltalk-land! 18:04:30 and some bits with @ and - (abc) 18:04:31 but yeah 18:04:50 bbiab food 18:04:53 -!- Tritonio_ has joined. 18:07:11 http://jwz.livejournal.com/843296.html hahahahahah 18:14:34 ehird, that dialog in mosaic was optional and not the default 18:14:56 AnMaster: i know that 18:15:07 * AnMaster has been working on mosaic code recently 18:15:12 AnMaster: it was added because of corporate bureaucracy 18:15:18 oh? 18:15:41 yeah 18:15:48 a corporate customer wanted some kind of warning or similar 18:15:50 so they added that 18:15:56 (config key: protectmefrommyself, iirc) 18:15:56 hah 18:16:01 i read up on mosaic aaages ago :) 18:16:12 ehird, yes I think it is, prefsdefs.h iirc 18:16:14 ;P 18:16:25 not totally sure about what header file 18:19:14 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 18:20:10 -!- slereah_ has joined. 18:27:37 -!- Sle has joined. 18:27:53 -!- Sle has changed nick to Slereah. 18:28:59 -!- slereah_ has quit (Read error: 104 (Connection reset by peer)). 18:30:49 -!- slereah__ has quit (Read error: 110 (Connection timed out)). 18:49:00 -!- okopol has joined. 19:05:26 Deewiant, so far I found whatever causes it happens somewhere before ] turning flying IP test 19:05:40 and *probably* after "GOOD: y acts as pick instruction if given large enough argument" 19:06:25 actually happens before it 19:06:26 sigh 19:07:01 what's your stack at (140,163) 19:07:15 um can't break like that yet *looks* 19:07:27 and hence debuggers are handier than tracing ;-) 19:07:48 agreed that is why I'm working on the protocol 19:09:30 (gdb) break ExecuteInstruction if (ip->position.x == 140) && (ip->position.y == 163) 19:09:33 Deewiant, :P 19:09:46 tix=0 tid=1 x=140 y=163: f (102) 19:09:47 :-P 19:09:58 (gdb) call StackDump(ip->stack) 19:09:58 5 elements: 19:09:58 1 2 3 4 0 19:10:07 Deewiant, yes indeed it is wrong even at that point 19:10:17 those 1 2 3 4 is what is messing up below 19:10:31 hm 19:10:49 your y isn't working as a pick instruction correctly 19:10:58 Deewiant, hm, it says it is 19:11:00 :/ 19:11:05 the test isn't sufficient 19:11:06 "GOOD: y acts as pick instruction if given large enough argument" 19:11:11 or rather, it is, in a way 19:11:14 oh? 19:11:16 you can't ever be sure the stack is really empty 19:11:18 but one sec 19:11:24 I can make it a bit better easily 19:11:27 Deewiant, you can after n really, right? 19:11:48 yes, but you can't be sure whether n deleted anything or not 19:11:51 that's what I meant 19:11:57 i.e. in this case, after the y, the stack should have only a 2 19:12:04 and that's all that's being tested for 19:12:07 hm 19:12:09 I'll make it check for 2 and then 0 19:12:18 what would cause the 3 and 4? 19:12:20 ideally it'd check for 2 and then empty, but that's basically impossible 19:12:24 ie, where do they come from 19:12:42 1234 is put on the stack 19:12:49 from which 2 is meant to be piciked 19:12:54 s/picik/pick/ 19:13:03 ok, y as pick should not pop any item right? 19:13:13 but just push the given item? 19:13:18 or did I get that wrong? 19:13:19 according to the spec surely it should :-P 19:13:25 aha 19:14:09 Deewiant, so it should pop until that point? 19:14:35 then how does it differ from say 4k$ ? 19:14:46 it also clears the stack below 19:15:01 Deewiant, so the stack is empty except that item, huh 19:15:02 so it's more like 4k$00pn00g 19:15:06 yep 19:15:11 but y doesn't always clear the stack does it? 19:15:22 if you want to pull from tar.us.to:8000 go ahead 19:15:44 with luck the test works 19:16:08 and with luck the DNS resolves correctly this time :-P 19:16:15 FUNGEDATATYPE tmp = ip->stack->entries[ip->stack->top - (request - tmp->top)]; 19:16:15 StackClear(ip->stack); 19:16:15 StackPush(tmp, ip->stack); 19:16:26 is that correct then for the case of y going pick? 19:16:37 something like that 19:16:48 just pull the myco and test it 19:17:47 ok that works now 19:17:58 Deewiant, however, should y clear stack in other cases too? 19:18:05 no, no 19:18:08 read the spec 19:18:34 If y is given a positive argument, all these cells are pushed onto the stack as if the argument was non-positive. However, y then goes on to copy the argumentth stack cell (counting from the top) into a temporary location, subsequently removing all the cells it pushed onto the stack. It then pushes the temporary cell onto the stack. For example, 3y will act as if only the handprint was pushed onto the 19:18:34 stack. 19:18:40 yes, that *it* pushed 19:18:47 -!- poiuy_qwert has joined. 19:18:52 don't seem to be like it pushed the first 1 did it? 19:18:59 Deewiant, ? 19:19:02 An interesting side-effect of this behaviour is that if y is given an argument that exceeds the number of cells it pushes onto the stack, it can act as a 'pick' instruction on data that was on the stack before y was even executed. 19:19:11 yes indeed 19:19:12 hmm 19:19:19 you may be right 19:19:22 let's see 19:19:22 but where does it say it should clear the stack? 19:19:35 at most it is an undef 19:20:31 and probably it is a BAD to clear the stack 19:20:50 augh, I can't test this because 0y doesn't work in other interpreters :-P 19:21:07 Deewiant, err 0y must work on some to push stuff? 19:21:17 ? 19:21:31 Deewiant, what do you mean 0y doesn't work? 19:21:37 I mean, 0y doesn't work. 19:21:46 hm 19:21:49 it gives the wrong stack size. 19:21:52 ok 19:21:59 Deewiant, try gdb 19:22:05 and a breakpoint and then examine stack 19:22:25 Deewiant, btw I think my gdb breakpoint was quite nifty 19:22:26 ;) 19:22:58 and is actually more useful to me to debug the interpreter itself but to debug a script it is less useful 19:23:03 err program 19:24:22 hmm, this may actually be a CCBI bug 19:24:31 pop(size - oldStackSize); 19:24:34 Deewiant, XD 19:24:46 I wonder what's up with that 19:25:13 Deewiant, well hurry up or rename it to NCCBI ;) 19:25:27 Deewiant, in any case looks like I'm right and mycology wrong or? 19:25:27 bugs happen 19:25:40 I want to know what way I should do it 19:27:34 at this point I'm not sure where the bug is 19:27:36 gimme a few secs 19:27:49 just want to know if I need to change cfunge or you change mycology 19:28:00 wondering what on earth "aa 2++k$" is doing in myco 19:28:10 I think it's getting the stack size 19:28:14 but it might be messing it up too 19:28:22 I don't want to have to use a #define MYCOLOGY_COMPATIBLE vs #define STANDARD_COMPATIBLE ;) 19:32:45 hmm 19:32:54 it does seem to be a CCBI bug 19:33:04 and of course Mycology as well 19:33:09 ok 19:33:22 hope you can fix it soon in mycology so I can look at the next bug 19:33:23 but I'm wondering what the right way of resolving this is 19:33:37 if (size > oldSize) pop(size - oldSize); ?? 19:33:44 does that make any sense? 19:33:50 err I have not read your sysinfo code at all 19:34:04 mine is completely freestanding 19:34:07 what it does is, like the spec says, it pushes everything 19:34:18 then it pops up to the argumenth cell 19:34:25 pops the cell to be picked 19:34:31 and then does pop(size - oldSize); 19:34:34 I push things to a temp stack 19:34:36 and then do this 19:34:38 if (tmp->top > (size_t)request) 19:34:38 StackPush(tmp->entries[tmp->top - request], ip->stack); 19:34:38 else 19:34:38 StackPush(ip->stack->entries[ip->stack->top - (request - tmp->top)], ip->stack); 19:34:42 tmp is the temp stack 19:34:54 request is the thing y popped of the main stack 19:34:58 stack->top is the stack size? 19:35:05 or a pointer to the top? 19:35:07 Deewiant, it is the top stack item yes 19:35:17 yeah, so the size 19:35:20 makes sense 19:35:28 Deewiant, top->size however is the actual stack size, as it doesn't realloc to smaller stack 19:35:29 so if size > arg... 19:35:37 yeye, same difference 19:35:46 I don't think I expose the "actual size" myself :-) 19:35:47 argh getting dcc chat spam 19:36:04 if size > arg, if oldSize <= size 19:36:52 -!- otesanek has joined. 19:37:40 both appear to work 19:40:07 AnMaster: you might still have it wrong, though :-P 19:40:21 AnMaster: pull 19:40:25 -!- poiuy_qwert has quit. 19:40:32 k 19:41:12 BAD: y doesn't act as pick instruction if given large enough argument 19:41:13 ok 19:41:18 Deewiant, how would it be wrong now? 19:41:34 pop up to the requested one, but leave everything below that untouched 19:41:38 ah 19:41:40 right 19:45:49 Deewiant, ok pushed fixed cfunge :) 19:46:08 GOOD: 000p000W goes thrugh 19:46:08 GOOD: 000p100W waits indefinitelyGOOGOOD: X works 19:46:11 still have to solve that 19:46:19 Deewiant, any idea about wtf may be going on there? 19:46:46 I copied the logic of TOYS' W from CCBI 19:46:51 or or less 19:46:55 not really, no 19:47:08 Deewiant, ok, can you tell me where in the file that is? 19:47:12 does that really print "thrugh" btw 19:47:18 Deewiant, not for CCBI 19:47:19 just grep for 000p000W 19:47:24 AnMaster: good :-) 19:47:33 Deewiant, problem is I don't know what direction to grep for it in 19:47:40 grep it left to right 19:47:45 if you can't find it, grep it right to left 19:47:52 I mean it is probably either left to right or right to left 19:47:53 but 19:47:55 and if you still can't find it, use another part of the error message 19:47:56 :-P 19:47:59 it could be upwards or downwards 19:48:07 someone need to invent a fungegrep 19:48:07 in 99% of cases it isn't 19:48:10 like there is xmlgrep 19:48:22 or if it is, then look for the next or previous message 19:48:33 v"U executes itself after transmuting"_v#! 'v>;#"BAD: 000p000W reflects"ap$$$<;^ 19:48:35 right 19:55:51 Deewiant, the problem is that it is concurrent 19:56:00 so bloody hard to make sense of 19:56:01 :/ 19:56:41 yep :-/ 19:57:39 -!- bsmntbombdood has joined. 19:59:31 -!- marshmallows has quit ("Leaving"). 20:01:00 -!- otesanek has quit (Read error: 113 (No route to host)). 20:06:16 Deewiant, so the W is kind of like Compare and exchange? 20:06:19 or? 20:06:49 W ('television antenna') pops a vector off the stack, then a value. If the cell at that vector (plus the storage offset) in Funge-Space (a la g) is equal to that value, nothing happens. If the cell in space is less than the value, it pushes the value and the vector (inverted) back onto the stack, and backs up the IP (subtracts the IP's delta from it's position, sort of a 'wait to try again' condition, useful mainly in Concurrent Funge.) If the cell in s 20:07:33 so it keeps retrying until the cell at the vector is >= the requested value 20:07:40 if it's >, it reverses, if it's =, it does nothing 20:07:45 (besides popping the vals, of course) 20:07:58 hah 20:08:01 aha* 20:08:15 Deewiant, is it reverses and tries to execute again on next tick? 20:08:26 ie a kind of semaphore? 20:08:33 yeah, kinda 20:08:43 like it says, "sort of a 'wait to try again' condition" 20:10:31 Deewiant, but why doesn't it print BAD 20:10:45 why does it print some weird GOODGOOD and missing char stuff? 20:10:53 Deewiant, and is the error really in W? 20:10:56 because it's concurrent and complicated :-P 20:10:58 I can't be sure 20:10:59 or does W use something not tested before? 20:11:04 I hope not 20:11:21 once again, compare stacks (and, since concurrent, IP positions) with CCBI 20:12:12 tix=0 tid=1 x=172 y=430: g (103) 20:12:12 tix=1 tid=2 x=164 y=432: n (110) 20:12:12 tix=0 tid=1 x=173 y=430: u (117) 20:12:12 tix=1 tid=2 x=165 y=432: @ (64) 20:12:12 tix=0 tid=1 x=175 y=430: r (114) 20:12:13 tix=0 tid=1 x=176 y=430: h (104) 20:12:15 tix=0 tid=1 x=177 y=430: t (116) 20:12:17 um 20:12:19 ?? 20:12:27 is that supposed to happen 20:12:37 it is where the through string is messed up I think 20:12:39 possibly, I can't remember 20:14:41 -!- oerjan has joined. 20:14:50 hguorht 20:14:59 Deewiant, to me it seems something overwritten wrong place 20:15:10 so what are your storage offsets like 20:15:14 because the code does not contain any @ in that place 20:15:36 hm 20:15:56 c = space[x, y]; 20:16:02 Deewiant, that is from your code 20:16:12 no storage offset is used when accessing ? 20:16:17 but only when writing it back? 20:16:26 pushVector(x - ip.offsetX, y - ip.offsetY); 20:16:29 from your code too 20:16:32 165 432 is meant to be @ 20:17:04 err *looks* 20:17:09 AnMaster: but isn't that a concurrency bug, right there 20:17:20 AnMaster: why does your other IP skip over the 'o' when the other hits '@' 20:17:39 hm 20:17:41 right 20:17:46 I was reading on the wrong line 20:18:20 Deewiant, um 20:18:22 *looks* 20:18:59 http://rafb.net/p/pYLvrJ74.html 20:19:07 the @ is put there by the p at (168,430) 20:19:16 Deewiant, if I just had such a output from ccbi too so I could compare 20:19:23 but maybe time for a funge space dump 20:19:31 I'd start with figuring out why the 'o' isn't output 20:20:13 v"U executes itself after transmuting"_v#! 'v>;#"BAD: 000p000W reflects"ap$$$<;^ 20:20:14 >"" >" :FEDNU">:#,_a,$111p > > > ^ > ;BAD;^ >na"v^<> fo lla otni detumsnart U :DOOG">:#,_1y2%!#v_p'@faf*+689**000#vt#^Wpa"hguorht"v 20:20:14 v>"nseod U"^ > ^ v<< < > 20:20:14 " stiaw W000p000 :DABvv"deb*+25ef*+*p83a*+689**p@ v "Cannot test W without Concurrent Funge-98 support."a< >>>n@"yletinifedni" 20:20:16 " v$$$< >$$$pna"stcelfer W001p000 :DAB" v >$$$pa"stcelfer W00-10p000 :DOOG" v 20:20:19 is how it looks 20:20:21 in the dump 20:20:53 '^48a*+3bd**p^ ^ < >v>;#"BAD: 000p000W reflects"ap$$$<;^ 20:20:53 > fo lla otni detumsnart U :DOOG">:#,_1y2%!#v_p'@faf*+689**000#vt#^Wpa"hguorht"v 20:20:53 ^ v<< < > 20:20:53 est W without Concurrent Funge-98 support."a< >>>n@"yletinifedni" 20:20:53 v >$$$pa"stcelfer W00-10p000 :DOOG" v 20:20:56 >;#$$$$$< ;>:#,_'@6bc*+f92a*+*01-00#vt#^Wpa"hguorht seog W00-10p000 :DAB" v 20:20:58 ^v"d5*27ef*+*pc9*f92a*+*p@ > #< # < 20:21:02 is more relevant 20:21:04 sorry for spam 20:21:08 pasting huge bunches of Befunge here isn't exactly useful :-P 20:21:24 Deewiant, problem is I can't make head or tail out of the code at all 20:21:53 like said, I wouldn't worry about reading Mycology 20:21:58 you have a bug: the 'o' isn't output 20:21:59 why not 20:22:10 you don't need mycology for that other than running through it with gdb 20:22:27 yes I realize it isn't there 20:22:35 but I don't understand it 20:22:44 the o /is/ there, in the code 20:22:53 the problem is that Cfunge is skipping over it 20:23:01 I'd wager the problem is in how you handle @ 20:23:08 hm 20:23:17 Deewiant, so why doesn't mycology test it before? heh 20:23:44 I mean I only found out because of this fingerprint 20:23:58 I can't test everything, as I've said many times before 20:24:02 hm 20:24:05 trust me, writing code for testing 2 threads was bad enough 20:24:08 let alone 3 or more 20:24:14 I agree 20:24:23 because the point is that even if space or z don't work as regards ticks, the code has to work 20:24:25 I have coded some simple concurrent 20:24:38 so I had to rerun it over and over again with CCBI's space mapped to z and vice versa 20:24:42 and make sure it worked in all cases 20:24:53 yeah 20:25:29 tix=0 tid=1 x=173 y=430: u (117) 20:25:29 tix=1 tid=2 x=165 y=432: @ (64) 20:25:29 tix=0 tid=1 x=175 y=430: r (114) 20:25:35 indeed it skips one simply 20:25:43 * AnMaster ponders 20:26:28 that means one of two files really, interpreter.c or ip.c 20:35:31 Deewiant, fixed it 20:35:40 what was the problem 20:35:43 just needed to set a NeedMove to false 20:35:54 right 20:36:04 Deewiant, I'm not sure how this will work out of there are more than two IPs though 20:36:10 it may break in the other way then 20:36:17 I think there are 3 where that's tested 20:36:20 though I'm not sure 20:36:30 no, more likely it's 2 20:36:39 no more than 2 are alive at once 20:36:42 but more are created 20:36:55 also the new IP must be index 0 in the array 20:36:59 and a few other things 20:37:19 1) the remaining ip must now have index 0 before, the killed one index 1 20:37:24 there must be no third IP 20:37:33 O_o 20:37:34 only then does the bug show up and is fixed this way 20:37:39 heh 20:37:46 I don't know if it will break in other cases 20:37:53 no idea whatsoever 20:38:09 it might 20:38:41 so I'll write a few small test cases 20:49:34 -!- Corun has quit ("This computer has gone to sleep"). 20:51:20 -!- Tritonio_ has quit (Remote closed the connection). 20:52:00 -!- Tritonio_ has joined. 20:53:14 -!- oerjan has quit ("leaving"). 20:53:14 wow 20:53:17 -!- Tritonio_ has quit (Remote closed the connection). 20:53:18 cfunge: /home/arvid/src/cfunge/trunk/src/stack.c:313: StackStackDuplicate: Assertion `old != ((void *)0)' failed. 20:53:19 Deewiant, ^ 20:53:34 :-D 20:53:35 > #vt zzzzzzzzzzzzz v 20:53:36 >#vtzzz@ 20:53:36 >a"DOOG :4">:#,_@ 20:53:36 v < 20:53:38 how'd you get that 20:53:38 on that code 20:53:48 no brainfucking clue how 20:53:49 on the second t? 20:54:00 Deewiant, on; 20:54:02 tix=1 tid=6 x=11 y=18: @ (64) 20:54:02 tix=2 tid=0 x=5 y=3: t (116) 20:54:18 wait a sec 20:54:20 that makes no sense 20:54:24 y=3? 20:54:55 yes indeed makes no sense 20:55:00 * AnMaster gets out valgrind 20:55:01 :-P 20:55:22 ==16089== Conditional jump or move depends on uninitialised value(s) 20:55:23 as I expected 20:55:35 wth 20:56:28 of course, valgrind is something you should run on your code before complaining about mycology tests ;-) 20:56:28 Deewiant, if you want to experiment: 20:56:29 http://rafb.net/p/tSF4nt31.html 20:56:44 Deewiant, well valgrind gives no issues when running mycology 20:57:00 a few memory leaks in funge space as you can't use gc + valgrind at same time 20:57:02 but that's all 20:57:03 uh? shouldn't that conditional be entered always? 20:57:15 in t or @ or wherever that is 20:57:31 in hash function 20:57:33 sill scheme interpreter name: Isch Creme 20:57:35 not sure 20:57:41 or ischcreme 20:58:01 Deewiant, ==16254== ERROR SUMMARY: 0 errors from 0 contexts 20:58:07 when running on mycology 20:58:10 AnMaster: that needs more 'z', prints 3: G4O:O DG here :-) 20:58:18 AnMaster: odd 20:58:29 AnMaster: that needs more 'z', prints 3: G4O:O DG here :-) 20:58:30 ??? 20:58:40 it should print 3: GOOD 20:58:42 ?? 20:59:13 3 and 4 are interspersed here 20:59:20 Deewiant, aha 20:59:36 please don't tell me that CCBI on linux behaves differently :-D 21:00:50 $ ~/funge/ccbi/ccbi_linux/ccbi tests/concurrent-quit.b98 21:00:51 1: GOOD 21:00:51 2: GOOD 21:00:51 3: GOOD 21:00:51 4: GOOD 21:00:53 ? 21:00:58 Deewiant, that is what happens here 21:01:05 may not be last version 21:01:15 oh wait this is a slightly different version 21:01:20 than the one I pastebinned 21:01:21 right 21:01:26 heh 21:01:40 Deewiant, ok, the first two splits are ok 21:01:44 1 and 2 in cfunge 21:01:47 then issues start 21:01:58 tix=0 tid=0 x=5 y=17: t (116) 21:02:20 splitting after the third one in fact 21:08:29 Deewiant, hm, now by adding a mutex it is "fixed", but now I need to reproduce the issue again 21:11:48 >@ 21:11:49 >#^tzz@ 21:11:49 > #^tz#vt v 21:11:49 >zzzz@ 21:11:49 v < 21:11:51 Deewiant, that does it 21:11:57 looking at minimizing it 21:12:34 the upper split can be removed 21:15:20 -!- Corun has joined. 21:18:08 actually wrong 21:18:13 it still interacts with previous code 21:19:26 -!- okopol has changed nick to oklopol. 21:23:04 Deewiant, ok this need a very specific split pattern to trigger 21:23:10 1) ip 0 split 21:23:27 2) ip 1 just goes on doing z or whatever 21:23:37 3) ip 0 split again 21:24:03 result is that suddenly we got two ip entries but array length of 3 21:38:24 Deewiant, ^ 21:38:34 Deewiant, I think I am beginning to solve it 21:59:05 -!- calamari has joined. 22:06:12 -!- nice_ka has joined. 22:19:45 -!- RedDak has joined. 22:44:29 -!- pikhq has joined. 22:47:33 -!- Deformative has quit ("Konversation terminated!"). 22:48:52 -!- Deformative has joined. 22:50:02 -!- Deformative has quit (Remote closed the connection). 22:51:00 -!- Deformative has joined. 22:58:35 -!- Tritonio_ has joined. 23:13:23 * oklopol made a O(1)-space quicksort 23:13:26 i think... 23:13:38 so hard to know what counts as O(1) 23:14:27 i need to fiddle with the bitstring of len(l) where l is the sorted list, so basically it's O(lg n) space anyway... i'm fairly sure you can't actually manage O(1), although i've been told it exists 23:15:04 err no, i need numbers 0...len(n), so it's O(lg lg n) space, i guess, but still 23:16:54 oklopol: O(1) - given any list, uses the asme space 23:16:58 a 43593459345435 elm list == same space as 4 23:17:32 oklopol: maybe you could use xrange insead of range 23:17:35 that calculates it lazily 23:19:29 -!- Deformati has joined. 23:21:02 ...what? 23:21:08 asme? 23:21:43 oklopol: thats O(1) space 23:21:54 if sort() is O(1) 23:22:08 i use a few iterators where a retard might have used a strictly evaluated list, yes, but xrange doesn't really solve the whole thing 23:22:09 sort([45,345,2,34,3]) takes same memory as sort([345345,345,35,24,12,3,7,34,5,7,4,6,7,345,,,67,345,7,,5,345,45]) 23:22:16 really? 23:22:18 it does? :O 23:22:32 if its O(1) 23:22:37 what do people usually do to get rid of the recursion stack? 23:22:39 oh, right 23:22:44 err not 23:22:46 *no 23:22:50 i specified *quicksort* 23:22:53 so... 23:22:55 enlighten me 23:23:00 my solution isn't all that trivial 23:24:04 oklopol: get rid of recursion=manual stack 23:24:22 well, it's kinda trivial, just a certain pattern around the bits of len(l) + calculating in O(n) the median, pivotting perfectly 23:24:33 ehird: how's that O(1) space more than the recursion stack? 23:25:35 oklopol, care to show the code? 23:25:39 and in what language? 23:25:40 k 23:25:42 python 23:25:47 forget it then 23:26:17 http://www.vjn.fi/pb/p531644464.txt 23:26:37 it's prolly like O(lg lg n), but it doesn't use any stack, just a few numbers 23:26:44 dunno 23:27:59 oklopol: wow 23:28:38 ehird: now that i understood "asme" in fact means "same", i can answer: indeed, it's definitely not O(1) space then, i need bignums for the length of the list, and the length can be like a quasimagrillion. 23:28:56 ehird: wow as in, CAN PYTHON ACTUALLY BE RAPED THAT BADLY?!?!? 23:28:59 or what :P 23:29:19 skipiter was the hard part 23:30:23 uses O(lg n) space, for a few numbers that is, to get the sequence 0 -> 101 -> 2120212 -> 323132303231323, which i use to get jumps right when traversing the sublists when i've "recursed" onto another level 23:30:28 god i'm bad at explaining this 23:30:54 wish i owned at math, could just prove it, and tell ppl to fuck themselves if they asked for an explanation. 23:30:59 :P 23:34:35 I would have attempted an analysis if it wasn't written in python 23:34:41 hmm 23:34:45 what language do you want? 23:34:51 i can rewrite 23:34:58 -!- Deformative has quit (Remote closed the connection). 23:35:27 nah, don't bother 23:35:44 (just needs to support mutable lists of course) 23:36:19 (or it'll trivially be at least O(n) space) 23:36:48 olsner: so basically you don't want to, and this was just an excuse? :P 23:36:59 something like that, yeah 23:36:59 my time is worthless! 23:37:04 :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 23:37:20 oklopol, C 23:37:23 rewrite it in C 23:37:36 the problem with C is, i actually need bignums. 23:37:39 well 23:37:39 -std=c99 -pedantic -Wall -Wextra -Werror 23:37:43 not really 23:37:57 actually I use more, too many to paste here 23:38:07 because if a list fits into memory, the pointer size is enough for me 23:38:24 http://rafb.net/p/326SMd71.html 23:38:33 that is from my cmake file for a project 23:38:51 i think i could do a fairly straightforward translation from python to C here, if it weren't for that one generator 23:39:18 but it's fairly simple, i now realize, to non-generatorize it 23:40:09 perhaps i'll do it tonight, after my daily south park session 23:40:21 oklopol, size_t for memory 23:40:25 I got 64-bit :) 23:40:54 i think the biggest problem will be to get a C compiler to work 23:41:21 oklopol: lunix? 23:41:28 debian/ewwbuntoo: 23:41:28 as many here already know, i'm the biggest retard in the world when it comes to installing software. 23:41:32 ehird: sadly, no 23:41:33 sudo apt-get install build-essential 23:41:36 wow, that's a crazy set of warning options! witness of the unsafe properties of C :P 23:41:38 oh darn 23:41:39 what then 23:41:44 guess ;) 23:41:51 cygwin 23:41:53 cygwin is yer friend 23:41:55 it comes with gcc 23:42:12 or mingw 23:42:13 olsner, hah 23:42:49 cygwinnnn 23:42:50 olsner, don't forget the *need* for valgrind 23:42:53 ehird: perhaps 23:42:58 ehird, cygfail? 23:43:13 AnMaster: well, if you're on windows you can just compile, test and pray 23:43:35 olsner, I'm not on windows 23:43:46 I'm on Gentoo Linux x86_64 23:43:47 :) 23:45:32 olsner, so what do you use to detect memleaks in windows software? 23:45:39 I'm also on linux at home; but not at work since certain of our target platforms have developer tools that are windows-only 23:46:16 olsner, sure GCC can't compile to those platforms? 23:47:11 Here's a hint: GCC targets *everything*. 23:47:16 it can, but produces bigger binaries and requires hacking linker scripts etc no-one's had time to perform 23:47:21 pikhq, exactly 23:47:33 Hell, I can get GCC to target a fucking PDP-11. 23:47:35 pikhq, apart from h8300, iirc that port is dead since about gcc 2.95 23:47:39 or something like that 23:47:54 -!- nice_ka has left (?). 23:47:56 I wanted to cross compile to it recently 23:47:59 AnMaster: Doesn't mean I can't get GCC to target one. 23:48:11 Granted, porting from 2.95 would be a royal pain. 23:48:20 pikhq, 8 bit CPU 23:48:24 (did they even use RTL then?) 23:48:25 pikhq: if you write a backend, it will compile! 23:48:27 wowz 23:48:53 pikhq, used in some products by Lego 23:48:59 yeah in toys 23:54:46 -!- Deformati has quit (Remote closed the connection). 23:58:15 -!- Deformative has joined.