00:00:00 --- log: started forth/05.11.13 00:09:10 --- join: swalters (n=swalters@6532183hfc82.tampabay.res.rr.com) joined #forth 01:41:02 --- join: nell (i=ice_nell@202.1.205.189) joined #forth 01:50:41 --- part: nell left #forth 04:11:26 --- join: ecraven (n=nex@ns.AHL.Uni-Linz.AC.AT) joined #forth 04:17:27 --- join: ecraven_ (n=nex@ns.AHL.Uni-Linz.AC.AT) joined #forth 04:31:48 --- quit: ecraven ("Lost terminal") 04:46:47 --- nick: ecraven_ -> ecraven 05:04:55 --- join: PoppaVic (n=pete@0-1pool46-15.nas30.chicago4.il.us.da.qwest.net) joined #forth 05:05:13 Howdy-Doody 05:05:18 hey 05:07:53 lo 05:10:28 --- quit: aum () 05:20:48 you don't happen to have implemented a C-to-Forth compiler or something like that? something that compiles block-oriented code to forth *without* using a call-frame? 05:21:53 never seen one 05:22:08 otoh, FICL4 is pretty neat. 05:22:56 with Ficl4+, you write C and incorporate Ficl, which lets you get back and forth from C to a forth-type language. 05:23:37 i'm trying to compile Scheme to a stack-based VM, and i want to eliminate the base-pointer to the local parameters.. but i don't find any documentation about how i could do that 05:23:46 good luck with that 05:24:05 hehe, thanks.. 05:24:26 messing with the stackframe is the ABI, and prolly also regs. Either is dangerous 05:25:21 Frankly, I can't even manage to ascertain how one _learns_ of the silly stackframe and regs-use in a codified-solution. 05:26:43 i don't have regs, only two stacks (data and return) 05:26:57 right now i keep a base-pointer on the return stack with every call-frame 05:27:06 you always have regs, and you always have a stackframe - somewhere 05:27:21 or, are you writing yer own asm-core? 05:27:26 --- quit: slava (Read error: 104 (Connection reset by peer)) 05:27:47 PoppaVic: my own virtual machine 05:28:00 WHy not abstract the stacks, add another for the BP, and roll on? 05:28:14 i want to eliminate BP :) 05:28:19 it doesn't serve any use 05:28:25 Nothing sez the stacks must all be accessible 05:28:39 then why save it at all? 05:28:42 --- join: slava (n=slava@CPE0080ad77a020-CM000e5cdfda14.cpe.net.cable.rogers.com) joined #forth 05:28:45 if i could find out how to schedule stack elements so the right ones will be on top, i won't need it 05:28:59 no, right now it has its use, but i want to get rid of it 05:29:00 yer trying to solve too many probs at once 05:29:30 It is not difficult to create a "core-only" stack. 05:29:44 it doesn't even remotely need to be as large as the data or return-stacks 05:30:15 core-only stack? 05:30:28 sure.. Accessible only to your VM-guts. 05:32:35 still i don't want a BP for that :) 05:32:42 In fact, the only mention of it would be in the VM source - you'd prolly never need to mention it even exists at the user-interfface levels. 05:33:07 so when compiling (+ a (- b c)) i need to DUP/ROT/SWAP the arguments into the right order 05:33:33 thats not forth ;-) 05:33:54 no, that's Scheme.. that's what i want to compile :) 05:34:08 Again, sounds like fun. Have at it. 05:34:15 take a+b-c*a 05:34:30 i have to get the compiler to DUP a :) 05:34:41 SO what? 05:34:43 seems there hasn't been a lot of research into that :( 05:35:15 so i need to get the compiler to find out the optimal (i.e. least stack movement) order of evaluating this expression 05:35:26 sounds silly 05:35:49 Yer talking about xlating, perversion, AND optimizing - all at the same time. Always a mistake. 05:37:31 hehe, that's probably true 05:37:42 It's always true 05:38:30 Sounds like yer taking form-A, need to convert to form-B, and "compile" - optimizing should occur after any of those and is a mere drop-in. 06:01:07 i don't agree, you can't do all optimisations after conversion 06:09:22 --- join: Topaz (n=top@sown-86.ecs.soton.ac.uk) joined #forth 07:19:34 --- quit: ecraven ("bbl") 07:57:12 --- quit: Topaz (Read error: 110 (Connection timed out)) 07:59:16 --- join: sproingie (i=foobar@64-121-2-59.c3-0.sfrn-ubr8.sfrn.ca.cable.rcn.com) joined #forth 08:06:50 --- join: Topaz (n=top@sown-85.ecs.soton.ac.uk) joined #forth 08:19:00 --- join: snowrichard (n=richard@adsl-69-155-177-154.dsl.lgvwtx.swbell.net) joined #forth 08:33:24 --- quit: Topaz (Remote closed the connection) 08:48:50 --- quit: snowrichard ("Leaving") 09:00:37 --- join: tathi (n=josh@pdpc/supporter/bronze/tathi) joined #forth 09:07:21 --- quit: PoppaVic (Nick collision from services.) 09:07:31 --- join: PoppaVic (n=pete@0-1pool64-229.nas22.chicago4.il.us.da.qwest.net) joined #forth 09:09:16 --- join: snowrichard (n=richard@adsl-69-155-177-154.dsl.lgvwtx.swbell.net) joined #forth 09:22:04 --- nick: Raystm2- -> Raystm2 09:25:47 hmm...no ecraven. 09:44:01 --- join: ecraven (n=nex@ns.AHL.Uni-Linz.AC.AT) joined #forth 09:52:18 ecraven? 09:52:28 I think tathi is looking for you. 09:52:54 it wasn't that important. 09:53:07 :) what was it? 09:53:16 I was just wondering if you had seen Koopman's paper 09:53:23 http://www.ece.cmu.edu/~koopman/stack_compiler/index.html 09:53:50 and Maierhofer & Ertl's two that he mentions. 09:54:10 i've seen that one, but not the others, thanks, i'll go and find them now :) 09:54:34 Looked somewhat ad hoc, but possibly useful. 09:55:43 well, anything helps :) 09:56:28 http://www.complang.tuwien.ac.at/papers/maierhofer%26ertl97.ps.gz 09:56:30 and 98 09:57:06 thanks again :) 09:58:32 Also, the first reference in Koopman's paper, "The generation of optimal code for stack machines", was published in the JACM, so if you have a membership by any chance, I assume you could get at it. 10:00:38 --- join: Raystm2_ (n=Raystm2@adsl-68-95-251-220.dsl.rcsntx.swbell.net) joined #forth 10:00:45 --- quit: Raystm2 (Read error: 104 (Connection reset by peer)) 10:01:17 tathi: thanks, just got that as well 10:01:45 ah, i've seen that before, got to get into the math it uses :) 10:01:45 --- nick: Raystm2_ -> Raystm2 10:02:04 heh. that's always a problem with the interesting papers :) 10:02:51 Sometimes I wish I had done my masters in math, rather than stopping after the bachelor degree. 10:03:46 hm.. actually i should go to vienna some day, i'm living about 160 kilometres from there, Ertl and Maierhofer seem to do quite interesting work 10:04:25 nice. 10:05:05 are there any forth debuggers? as you don't have a base pointer, you wouldn't know what actually are parameters, right? 10:07:52 Quartus: I've ripped "Starting Forth" in half the rest of the way. Oops, :) 10:07:54 I gather many forths have stepping and breakpoint capabilities -- I've never really had cause to look into it though. 10:08:09 Quartus: don't want it back? I don't blame ya :) 10:09:17 Quartus: but I'd take a two piece "Starting Forth" with all these neat pix any day over halveing none. Get it. halving none. Guess you had to be there, or here even. 10:10:50 So, Whose going to SVFIG next week end? 10:15:17 --- join: chris2 (n=chris@p549D41FD.dip0.t-ipconnect.de) joined #forth 10:16:53 Cuz I could fly out there, but i'd need a ride from and back to the airport? 10:31:10 --- quit: Raystm2 ("User pushed the X - because it's Xtra, baby") 10:35:18 --- join: Raystm2 (n=Raystm2@adsl-68-95-251-220.dsl.rcsntx.swbell.net) joined #forth 10:47:50 --- quit: Raystm2 ("User pushed the X - because it's Xtra, baby") 10:48:09 hi ecraven 10:48:15 hey slava 11:02:03 --- quit: PoppaVic ("Pulls the pin...") 11:08:16 i'm not sure why you're compiling scheme to a stack machine 11:08:21 how do you plan on implementing closures? 11:11:19 i allocate a closure object :) 11:11:44 i use a lot of allocated objects, but i'd like to eliminate local "variables" :) 11:11:57 right now i work with two stacks, one for data, one for call-frames 11:12:27 --- join: Raystm2 (n=Raystm2@adsl-68-95-251-220.dsl.rcsntx.swbell.net) joined #forth 11:14:32 code is compiled into code-objects, a closure is a code object and a list of captured objects (i only have flat closures) 11:39:28 --- quit: Raystm2 (Remote closed the connection) 11:40:21 hmm ecraven... do I know him? 11:40:33 me? 11:40:36 probably not 11:41:05 it seems that I slept all the time 11:41:31 virl: where are you from in austria? 12:17:33 how do you represent call frames? 12:18:16 slava: closure, pc, bp 12:18:27 (the pc indexes relative to the closure's code object) 12:25:33 --- join: snoopy_17 (i=snoopy_1@dslb-084-058-178-212.pools.arcor-ip.net) joined #forth 12:26:01 --- quit: Snoopy42 (Nick collision from services.) 12:26:28 --- nick: snoopy_17 -> Snoopy42 12:39:13 --- join: Raystm2 (n=Raystm2@adsl-69-149-37-236.dsl.rcsntx.swbell.net) joined #forth 12:48:15 --- quit: swalters (Connection timed out) 13:14:22 vienna 13:17:54 then i probably don't know you :) 13:18:10 i'm studying in linz, don't know any computer people from vienna 13:19:53 --- quit: chris2 (No route to host) 13:33:40 --- join: warp0x00 (n=warpzero@wza.us) joined #forth 13:39:19 --- quit: warp0x00 ("leaving") 13:41:23 --- join: swalters (n=swalters@6532183hfc82.tampabay.res.rr.com) joined #forth 13:42:46 Raystm2: heh 14:30:28 --- join: TheBlueWizard (i=TheBlueW@ts001d0975.wdc-dc.xod.concentric.net) joined #forth 14:52:56 --- quit: ecraven ("good night") 15:11:40 --- join: Raystm2_ (n=Raystm2@adsl-68-93-114-2.dsl.rcsntx.swbell.net) joined #forth 15:28:09 --- quit: Raystm2 (Read error: 110 (Connection timed out)) 15:56:21 --- quit: tathi ("leaving") 15:58:47 --- part: TheBlueWizard left #forth 16:36:21 --- quit: swalters (Read error: 110 (Connection timed out)) 16:42:27 --- quit: Raystm2_ (Read error: 104 (Connection reset by peer)) 16:42:42 --- join: Raystm2 (n=Raystm2@adsl-68-93-114-2.dsl.rcsntx.swbell.net) joined #forth 16:47:31 --- quit: snowrichard (Read error: 104 (Connection reset by peer)) 16:48:56 --- join: snowrichard (n=richard@adsl-69-155-177-154.dsl.lgvwtx.swbell.net) joined #forth 16:54:03 --- quit: virl (Remote closed the connection) 17:12:39 --- join: swalters (n=swalters@6532183hfc82.tampabay.res.rr.com) joined #forth 17:23:45 --- quit: Raystm2 (Read error: 104 (Connection reset by peer)) 17:23:53 --- join: Raystm2 (n=Raystm2@ppp-70-248-34-70.dsl.rcsntx.swbell.net) joined #forth 17:42:29 --- quit: swalters (Read error: 110 (Connection timed out)) 17:44:41 --- join: lop (n=lop@S010600055d233ab7.gv.shawcable.net) joined #forth 17:59:31 --- join: easy4 (n=easy4@pcp0010474571pcs.reding01.pa.comcast.net) joined #forth 18:13:42 --- join: amca (n=plump@as-bri-4-1-174.ozonline.com.au) joined #forth 18:16:08 Gday! 18:17:14 hi 18:17:37 how are you going today slava ? 18:19:21 great 18:19:59 Cool. :) 18:20:04 What have you been up to? 18:20:15 working for a paid job, and working on factor 18:20:27 factor? 18:20:37 http://factor.sf.net 18:21:31 * amca look sees. 18:21:59 May I ask what your paid job is? 18:22:15 3d graphics package for mac os x 18:22:46 Like coding one up, or using it? 18:23:08 coding one up 18:23:39 its not too shabby, i get 45$US/hour 18:23:45 Cool! 18:24:03 How many hours do you have work on it a week usually? 18:24:08 30 18:24:16 approximately 18:24:37 --- quit: Raystm2 (Read error: 110 (Connection timed out)) 18:25:13 Nice 18:25:34 So are you coding up one from scratch or modifying existing code? 18:25:47 modifying existing code, i got hired two months ago 18:26:12 they needed someone with opengl experience 18:26:27 What are "predicates" please? I forget my grammar on it. 18:26:35 Which you have I assume? 18:26:51 a predicate is a function evaluating to true or false 18:27:40 tnx 18:28:07 So that is basically saying on the factor website that all objects in factor can evaluate to a boolean value? 18:28:24 no 18:28:45 you can define a class of objects as all objects that satisfy a predicate, then define methods on this class 18:29:52 So kind of like a set of objects, and objects that do not belong to the set evaluate as false? 18:30:13 objects don't evaluate to anything 18:30:42 i'll give an example 18:31:05 suppose you define a generic word 'eat' 18:31:17 yep 18:31:19 you can then define a method on the string class for 'eat' that prints "eating" or some message 18:31:34 you can define a method on the array class that calls eat on each element 18:31:41 and then you can define a method on arrays of length > 10 that prints "too much food" 18:32:43 * amca nods 18:32:48 Im following you so far 18:33:06 That's what I assumed would be occur with an OO lang 18:33:20 right, but with an OO lang, you cannot define a class "post facto" 18:33:32 and say that the big-array class is all instances of array, with the added condition that their length is > 10 18:34:24 * amca ponders 18:34:45 for example, 18:34:50 PREDICATE: integer positive 0 > ; 18:34:54 PREDICATE: integer negative 0 < ; 18:35:00 now you can define methods on the positive and negative classes 18:35:07 GENERIC: abs 18:35:11 M: positive abs ( do nothing ) ; 18:35:15 M: negative abs 0 swap - ; 18:35:23 of course, this is silly for 'abs', because you can just use a conditional 18:35:31 : abs dup 0 < [ 0 swap - ] when ; 18:35:40 but the advantage of predicate dispatch is that unlike a conditional, it is decentralized 18:35:50 so you can add methods to generic words defined in libraries whose source you do not have to change 18:35:57 So instead of having a object explicitly allocated a class at creation, with a created object, it's class is determined by looking at what features it has? 18:36:04 you can have both 18:36:11 you can define tuples, eg 18:36:14 * amca nods 18:36:15 TUPLE: color red green blue ; 18:36:15 ok 18:36:18 now 'color' is a class 18:36:25 you make instances like 100 230 116 18:36:28 and define methods on 'color', etc. 18:36:51 then you can define a predicate class 'gray-color' which is all colors where the red/green/blue components are equal 18:36:58 and some of your existing colors are now gray-colors 18:38:11 factor operates on a data stack, correct? 18:38:12 yes 18:38:32 it is basically a superset of forth, but without pointer arithmetic (that is, @ and !) 18:38:57 so the word takes the first 3 integers off the stack and returns a reference to the newly created object? 18:39:08 yes; is called a constructor word 18:39:14 when you make a tuple, you get a consturctor word defined for you 18:39:21 TUPLE: color red green blue ; 18:39:30 this makes , and some 'getter' words color-red, color-green, color-blue 18:39:32 and 'setter' words 18:39:41 and also a tester, 'color?' that checks if the top of the stack is a color 18:40:13 compare to the java situation, where you have to bang out getters/setters by hand, incredibly tedious :) 18:40:27 So the syntax of words defines what type of word they are? Or are the angle-brackets just a coding convention? 18:40:46 you can use any kind of character in a word name 18:40:56 *$#(@$ is valid 18:40:58 but silly :) 18:41:45 So it is just a coding convention to have angle brackets around the word, by having them there it doesnt necessarily tell the interpreter/compiler that it is a constructor? 18:41:53 yeah, its just a convention 18:42:20 the ? suffix is a convention too, its for words that evaluate to true/false 18:42:36 exists? ( path -- ? ) tests if a pathname exists on disk, etc 18:42:59 so, are you able to show me how to implement the class color, please? 18:43:09 what do you mean exactly? 18:43:20 TUPLE: color red green blue ; does it. TUPLE: is an immediate word that does some magic stuff 18:43:36 ok 18:43:50 factor's implementation is similar to forth's; there are immediate words that do funny stuff at parse time, and everything else is just added to the dictionary 18:43:57 So how do you define [color] instead of to be the constructor name? 18:44:11 you can't -- TUPLE: foo makes a word 18:44:13 Would you have to fiddle with TUPLE:? 18:44:16 yeah 18:44:22 well, you can just call the words that TUPLE: calls 18:44:37 but they're implementation detail and i tend to change them around, etc 18:44:52 but nothing is hidden in factor, its implemented in itself and there's no concept of 'private' methods or variables like in some OOP languages 18:45:21 So you could have TUPLE do in psudocode: if input is "color", use "[]" for delimiters; otherwise use "<>" 18:45:28 in fact the whole OOP system is implemented in factor, there are no primitives for it 18:45:43 the delimiters mean nothing 18:45:49 if you redefine constructor-word ( name -- word), you can change them 18:45:55 this word takes a string, and defines a word 18:46:00 I see 18:46:03 its just for convenience because there's a few others, not just TUPLE: that need this 18:46:05 And TUPLE: Calls it 18:46:09 yup 18:46:12 * amca nods 18:46:26 all word defining words are fully exposed; the dictionary is editable by user code 18:46:42 even : to begin a colon definition is written in factor 18:46:53 So factor does not have different types for the stack - I would guess an integer type and a object reference type - or are all types on the stack integers? 18:47:12 everything on the stack is an object 18:47:19 however, there's an optimization; small integers are not stack allocated 18:47:22 i mean heap allocated 18:47:33 so a number like 123 is not an object in the heap, it acts like an object but actually its an 'immediate' value stored in the cell 18:47:57 yep 18:47:59 I see 18:48:33 I think... 18:48:36 * amca ponders more 18:48:39 i optimized the basic type checking and dispatching with assembly primitives, so its quite efficient 18:49:27 when an integer is on the stack, is what is on the stack the actual integer, or a pointer to the integer? 18:49:42 the actual integer 18:49:44 here is how it works 18:49:55 a cell in factor has the top 29 bits as 'data', and the low 3 bits is the 'tag' 18:49:57 ok 18:50:02 if the tag is 0, the remainng 29 bits is a small integer 18:50:05 I see 18:50:07 whose value is the cell, shifted by 3 bits to the right 18:50:17 otherwise, the tag denotes a type (array, tuple, big integer, etc) 18:50:20 and the remaining bits are a pointer 18:50:29 this is because objects in the heap are 8-byte-aligned so the low 3 bits are wasted for pointers anyway 18:50:58 if you do an integer operation that cannot fit in 29 bits, it heap allocates a big integer, and you don't notice it 18:51:15 (of course its 61 bits on a 64-bit machine) 18:51:33 So there is a maximum of 8 object classes? 18:51:53 most classes have tag 3, with the class stored in the first cell of the object 18:52:22 So why 3 bits for the tag? Why not just one? 18:52:35 i'm actually going to do that later 18:52:41 right now, i have headerless objects 18:52:49 Ah 18:52:53 the cons type is headerless -- its just a pair of values 18:53:04 I see. So there is an inherent limit now, but not in future 18:53:07 conses are used for linked lists. but my plan is to redo the remaining bits of the library that need linked lists to use arrays 18:53:22 less clutter in the library that way 18:53:23 cons as in the LISP cons? 18:53:25 yup 18:53:34 What is the LISP cons short for again? 18:53:37 i have cons, car, cdr words -- but not for too long 18:53:42 its short for nothing 18:53:50 i think cons means construct or something 18:54:12 car is short for the head of a list, cdr is short for it's tail... 18:54:24 what does the LISP cons do? 18:54:28 I forget 18:54:46 (cons 1 (2 3)) ==> (1 2 3) in lisp. 18:55:47 so would (cons (1 2) (3 4)) give ((1 2) 3 4)? 18:55:52 yup 18:56:07 I see. cons prepends the item to the head 18:56:18 yup 18:56:33 Okay, now to reread what you wrote about cons in factor :) 18:56:55 factor started with having cons cells as the primary collection type, but later i added growable arrays and virtual sequences, and i don't feel conses are very useful anymore 18:57:02 arrays use less memory 18:57:51 So the cons type in factor was constructed as {(pointer to data), (pointer to next item)}? 18:58:05 yeah, but the cdr does not have to be another cons 18:58:11 you can just pair two arbitrary values 18:58:13 1 2 cons 18:58:32 after conses are gone from the core library, anybody can add them to their own code, jsut by doing TUPLE: cons car cdr ; 18:58:37 * amca nods 18:58:45 but then they use a bit more memory since there won't be the headerless optimization trick 18:58:49 so you have car and cdr types? 18:59:25 no, the car and cdr slots of a cons are of any type 18:59:38 ok 18:59:42 i understand now 19:01:16 * amca continues reeading the factor page 19:01:56 read the handbook at http://factor.sf.net/handbook.pdf 19:02:02 that reminds me, i need to upload the latest one 19:02:12 How are resizable vectors implemented? Like java vectors? 19:02:19 yes 19:02:31 but unlike java vectors, they support the same operations as normal arrays 19:02:39 * amca nods 19:02:40 there's no inconsistency 19:03:04 in factor, all sequences support the same operations -- strings, string buffers, arrays, vectors, virtual sequences 19:04:17 * amca nods. so it is nicely orthogonal. :) 19:06:04 I like your implementation of integer repetition and ranges :) 19:06:26 the non-copying slices and reversals are useful too 19:06:46 you can do any sequence operation backwards, efficiently, without writing it explicitly 19:07:09 * amca nods 19:07:29 So do your objects have a "copy on write" policy? 19:07:40 no 19:08:02 if you take a virtual slice, and modify it, the origin gets modified 19:08:07 but you can take a copied slice too 19:08:13 hmmm 19:08:18 IC 19:08:33 'dup' and such do not copy objects 19:08:35 they just copy a pointer 19:09:31 Unless it is an integer 19:09:40 dup does not care if its an integer or not 19:09:51 it just reads the cell at the top of the stack and pushes it again 19:10:00 * amca nods 19:10:15 The implementation is no different, but conceptually it is 19:10:59 i have a word eq? that checks pointer equality, and a word = that checks if all slots of two objects are equal 19:11:02 so dup eq? is always true 19:11:14 but "hi" "hi" eq? is false, since those two strings are two objects created by the parser 19:11:17 but "hi" "hi" = is true 19:11:39 * amca nods 19:11:46 I understand that concept 19:11:54 I was first introduced to it learning smalltalk 19:11:54 its pretty standard 19:12:04 however, note that eq? of two small integers is always true if they have the same value 19:12:08 its easy to see why 19:12:23 3 3 eq? is true is 3 and 3 always have the same cell value on the stack: its 3 + the fixnum tag (0) 19:12:44 "Words that take code blocks as input are known as 'combinators.' What is the difference between combinators and functions/words? 19:12:53 Are combinators immediate? 19:12:56 no 19:13:03 eg, 'if' is a combinator 19:13:11 raining? [ bring umbrella ] [ wear t-shirt ] if 19:13:17 'if' takes a boolean, and a pair of quotations 19:13:27 another one is each 19:13:40 { "ice cream" "pepsi" "candy" } [ eat ] each 19:14:29 How is that different from a word? 19:14:55 a combinator is a word 19:15:02 with the added condition that it takes code blocks as input 19:15:20 each is a word, and so is +, but + is not a combinator whereas each is 19:15:34 How are code blocks represented in memory? 19:15:45 lists containing words and literals 19:16:20 or indeed, the compiler turns them into machine code, the details are not visible to the user 19:16:29 you can do this 19:16:31 And how is a code block different from a word? 19:16:34 [ 2 2 ] [ + ] append call 19:16:41 a word is a code block together with a name 19:16:42 Is it an "anonymous word"? 19:16:45 yeah 19:16:52 like a lambda 19:16:54 yeah 19:17:03 i should have said that first 19:17:12 :) 19:17:14 nm 19:17:29 Do you mind me asking how old you are? 19:17:35 21 19:18:06 thanks. I was just curious as to the context of what yuou have grown up with 19:20:07 I dont think I knew as much about coding as you do when I was your age 19:20:52 I like the live enviroment thing too. Reminds me of Nethack... >.> 19:21:45 "Factor does not follow one specific programming 'paradigm'." I would disagree with that. I would say it follows a postfix, object-oriented paradigm. 19:24:40 Could you please remind me what a "generational garbage collector" is again? It is an alternative method to mark-and-sweep isnt it? 19:28:13 slava: 'ello? 19:31:59 Well unfortunately I musty be off. Hopefully Ill be able to continue this chat with you next time I am on. :) 19:32:01 --- quit: amca ("d34d") 19:38:45 --- join: FiLa (i=LNIX@12-208-98-237.client.insightBB.com) joined #forth 20:25:39 --- join: swalters (n=swalters@6532183hfc82.tampabay.res.rr.com) joined #forth 20:46:57 --- quit: swalters ("User disconnected") 21:05:29 --- join: swalters (n=swalters@6532183hfc82.tampabay.res.rr.com) joined #forth 21:41:37 --- join: amca (n=plump@as-bri-3-173.ozonline.com.au) joined #forth 21:59:03 --- join: ramkrsna (n=ramkrsna@61.2.69.116) joined #forth 22:05:59 Gday 22:10:57 hi 22:13:02 Did you get distracted when I was chatting to you last? 22:13:13 yes 22:13:43 Fair 'nough 22:14:02 Did you have any responses to: 22:14:33 "Factor does not follow one specific programming 'paradigm'." I would disagree with that. I would say it follows a postfix, object-oriented paradigm. 22:14:33 Could you please remind me what a "generational garbage collector" is again? It is an alternative method to mark-and-sweep isnt it? 22:14:49 no its orthogonal 22:15:01 you can have generational mark and sweep, or generational copying (which factor uses) 22:16:06 Ah 22:16:25 Could you please explain your orthogonal comment more? 22:16:40 --- quit: snowrichard ("Leaving") 22:16:59 it means its independent of mark and sweep 22:17:25 I see 22:21:10 * amca looks up about generational copying gc 22:53:55 Is the disadvantage of a copying gc, that it takes longer when it is doing the actual gc? 22:56:40 --- quit: swalters ("User disconnected") 23:02:34 no copying gc is very fast 23:03:08 What is the disadvantage it has compared to mark-and-sweep? 23:03:32 uses more memory 23:03:44 and that is it? 23:04:38 yes 23:04:56 Hmm. So the disadvantage of mark-and-sweep must be speed then 23:06:17 it can have better cache locality 23:06:26 i just used copying because its simpler to implement 23:06:37 I see :) 23:06:48 another disadvantage of mark and sweep is heap fragmentation 23:06:49 I read about the cache locality in wikip 23:07:12 * amca nods 23:13:12 What is yet to be implemented in Factor? 23:19:02 --- quit: sproingie (Remote closed the connection) 23:30:31 --- quit: ramkrsna (Connection timed out) 23:39:36 --- join: swalters (n=swalters@6532183hfc82.tampabay.res.rr.com) joined #forth 23:59:59 --- log: ended forth/05.11.13