00:00:00 --- log: started forth/04.01.26 00:32:03 --- join: schihei (~schihei@pD9E5C929.dip.t-dialin.net) joined #forth 01:00:20 --- quit: kc5tja ("THX QSO ES 73 DE KC5TJA/6 CL ES QRT AR SK") 01:03:32 --- join: kc5tja (~kc5tja@66-91-231-74.san.rr.com) joined #forth 01:03:42 --- mode: ChanServ set +o kc5tja 01:03:46 Hey kc5tja 01:04:03 http://forth.bespin.org/Members/kc5tja <-- is that the main page about you? 01:04:04 Howdy. 01:04:08 Just testing stuff out. 01:04:12 Or do you have another? 01:05:12 While the information presented there is accurate, I no longer have any "official" pages of my own. 01:05:37 I expect to get my own personal pages again shortly, though. 01:05:47 Okay. 01:05:55 I'm going to repurpose a section of my company's site to my personal stuff. 01:05:57 Why do you ask? 01:06:25 Anyway, it's 1AM here. 01:06:27 I440r said he wanted a link to your page, and he didn't reply when I asked if you had any :) 01:06:27 I have to get to bed. 01:06:31 Good night 01:06:46 --- quit: kc5tja (Client Quit) 02:34:43 --- quit: Nutssh ("Client exiting") 03:12:54 --- join: qFox (C00K13S@cp12172-a.roose1.nb.home.nl) joined #forth 05:39:46 --- quit: proteus-away (Connection timed out) 05:54:37 * warpzero is back (gone 06:48:23) 06:07:41 --- quit: qFox (Read error: 54 (Connection reset by peer)) 06:09:04 --- join: qFox (C00K13S@cp12172-a.roose1.nb.home.nl) joined #forth 06:25:24 --- quit: I440r ("Leaving") 06:37:21 * warpzero is away: Educamation. 06:42:34 --- quit: chandler ("Reconnecting") 06:42:38 --- join: chandler (~chandler@d-84-77.dhcp-149-159.indiana.edu) joined #forth 07:41:40 --- join: Herkamire (~jason@h000094d30ba2.ne.client2.attbi.com) joined #forth 08:14:44 --- join: kc5tja (~kc5tja@66-91-231-74.san.rr.com) joined #forth 08:14:53 --- mode: ChanServ set +o kc5tja 08:33:45 Hello 08:33:53 Greetings. 08:36:21 yo 08:36:46 * kc5tja made some progress on FTS/Forth yesterday. 08:36:57 yay 08:36:59 Got a number of primitives implemented (though they're rather dumb at the moment; no peephole optimization) 08:37:08 cool 08:37:14 I've decided to skip the optimization step until a subsequent version of FTS/Forth. 08:39:59 kc5tja: speaking of optimization, I played with your memory bandwith benchmarks, and herkforth was about 7X slower than optomized gforth 08:40:46 Do you do any kind of optimization at all? 08:40:55 Or, more accurately, does herkforth? 08:40:56 later, but 7x is with none 08:41:03 * kc5tja nods 08:41:20 Mine varies between 3x slower than GForth to 2x faster, depending on how you code it. 08:41:56 did I say gforth?? oops. I meant gcc 08:42:21 7x slower than gcc -O2 -funrol-loops 08:42:42 Ahh, in that case, you're better than me. 08:43:00 I'm currently about 10x slower than GCC with -march=athlon -O3 -fomit-frame-pointer. 08:43:27 yeah I have -arch=7400 08:43:40 Damn RISC users... :D 08:43:49 :) 08:44:00 optomization has got to be simpler on my box. 08:44:19 * kc5tja nods 08:44:26 I changed the inner loop to fetch and store to/from a register instead of the stack, and unrolled it a bit, and it was only 5% slower than gcc 08:44:57 I didn't unroll in mine, because I lack the facilities to do it beyond 3 or 4 times. 08:45:18 But I did switch to using an A register, and that improved performance by a small amount (21 minutes run-time instead of 33). 08:45:37 7x is with my A register 08:45:47 Oh. 08:45:58 I use the A register all the time. 08:46:09 *Epiphany* I guess 7x is about right for me too. 21 minutes / 3 minutes = 7. :) 08:47:14 oh, I don't know if it makes much differenc, but I reduced some of the numbers in the benchmark so I din't have to wait so long. 08:47:38 I used large numbers to make the timer resolution irrelavent. 08:47:43 my times ranged from 40 secconds to 289 08:47:47 As long as your timers are good enough, you can use shorter intervals. 08:49:14 If I can get herkforth to optomize out some stack usage, It could be very fast 08:49:42 That's where the peephole optimization comes into play. 08:49:49 I hope that will help. 08:50:49 It may not help nearly as much as I'd like though. 08:51:43 gcc unrolled was 40s. herkforth unrolled, with my asm was 42s 08:52:07 Oh, so you used assembly language too, eh? :) 08:52:10 Cheater. :) 08:52:36 gcc -O2 was 57s. It looks like I forgot to write down herkforth/asm without unrolling, but I imagine it's about 60-70s 08:53:28 not for 7X. 7X is just coding it normally in herkforth 08:53:43 I think that's obvious from what you said above. 08:53:49 42s versus 40s is not 7x. :) 08:53:55 hehe :) 08:54:27 the optimization to go from 289s to 60-70s is to simply use a register instead of the stack. 08:54:37 this optomization dosn't seem to hard. 08:54:54 My code currently uses the "A" register, and it still takes 21 seconds. 08:55:02 --- join: proteusguy (proteusguy@137.sub-166-153-167.myvzw.com) joined #forth 08:55:14 I would have to recode the entire V+ function in assembly language if I were to get comparable performance, I think. 08:55:41 But remember, too, I don't yet have peephole optimization either. 08:55:57 just look back at the last two instructions, if it's DUP followed by any instruction with destination of the TOS cache register, I can remove the DUP, change the destination register to say r3 and change the source register in the instruction I'm compiling to r3. 08:55:58 So things like 1 @a + !a+ still do a lot of stack juggling. 08:56:29 See, I can't do that. :) 08:56:38 yeah. 08:57:09 Actually, I currently do this: @a 1+ !a+, where 1+ emits the code for INC EAX (a single instruction to increment EAX by 1). 08:57:29 Still, @A emits code to DUP, and !A+ emits code to DROP, so there is always that stack overhead involved. 08:57:39 same here 08:58:33 With my register-based MachineForth concept, it'd just allocate and free registers instead of emitting actual code, so I would expect that version to just utterly scream. :) 08:58:40 But, I'll play with that at a later time. 08:59:49 Although, to be perfectly fair, I don't think such a MachineForth would have an A register, due to x86's limited set of registers. 08:59:58 yeah, I've read about a system for stack optomization where as you compile you keep track of which registers have the top few stack items. and if you need to call an already compiled word, then you first put those values onto the stack normally (or in whatever form you standardize) 09:00:00 EAX, ECX, EDX, EBX, EBP, ESI, and EDI would be all I have. 09:00:22 Herkamire: Yeah, that's basically what my system would do. 09:00:27 I like the A register :) 09:00:52 Only the depth of the data stack is explicitly restricted to 7 registers. 09:01:19 oh... you're talking about having the stack entirely in registers? 09:01:26 Yes. 09:02:14 too bad you don't have ppc. 09:02:22 The emphasis here would be on simplicity of the compiler again. 09:02:34 Then, I'm thinking beyond that, I'd try to make a dataflow-based optimizer. 09:02:53 That's where we extend the concept to include the actual Forth code representation too. 09:04:20 Interestingly enough, in the dataflow-optimized Forth environment, I'd store the "compiled" code in a token-threaded or indirect-threaded form. 09:04:39 This representation would be stored in the data space. 09:05:01 The code space is reserved explicitly for real compiled code, where the compiler generates code only when necessary. 09:06:01 E.g., when you reference a word that has not been compiled yet, it'll perform global optimization on that word and all words it depends on (up to a practical limit of course), thus guaranteeing sufficient context with which to optimize register usage, stack usage, and whatnot. 09:06:06 It'll be sweet when it's done 09:06:12 (inspired by RAFTS prior art) 09:06:45 I was thinking of doing something similar 09:06:51 would be very cool 09:07:21 I've decided not to do optomization yet though (asside from immediate words that compile one or two instructions) 09:07:44 That's what I'm doing. Concentrating on correct code first, then fast code later. 09:10:05 it seems like really good optomization would be much easier with some sort of intermediate representation, like token-threaded 09:10:22 Yes, that's why I would use it. 09:11:09 Especially because I need to record things like how many times a word is referenced, how many cells it takes as parameters, how many cells it produces, whether or not it returns a variable number of results, etc. 09:11:20 The use of tokens lets me record such meta-data easily. 09:12:27 For example, if a word has already been compiled, there is no point in recompiling it again. That'd just waste code space. 09:13:16 Likewise, if a word is only used three or four times before being redefined for something else, then you might as well just inline all three or four instances. :) 09:14:44 I really want my system to have a builtin profiler that automagically optomises cod it fnds to be takink lots of time 09:15:38 That's a little bit too complex for my liking, I think. :) 09:16:27 that's something I was thinking of doing long after it's in OS 09:18:34 I'd have a timer interrupt that would go of frequently and keep a tally of what words were taking a lot of time 09:19:28 there's things I don't like about it. 09:19:55 most notably that I don't have any way with my current system to recompile a given definition 09:20:38 * kc5tja nods 09:21:33 * kc5tja was thinking of writing an OS-like environment in Forth too. 09:21:36 Multitasking and all. 09:21:43 It ought to be pretty easy to do. 09:22:11 The only problem is when you run programs A, B, C, and D, and you want to terminate B, you have two options: either let the code just sit and rot there, or recompile C and D so that the memory is compacted. 09:22:28 I think that program termination is so rare that it makes sense to take the latter approach. 09:22:50 However, here again, it also requires that variables be kept in block storage, like ColorForth does. This way, program state is preserved. 09:22:56 (well, most of it at least.) 09:25:22 I keep my variable values in the dictionary sturcture (dictionary = struct with CFA, string, flags) 09:26:08 Not in the code or data spaces? 09:26:10 that would be interesting. I hadn't seriously considered having the different programs use different registers so they would be very easy/quick to swap 09:26:20 I will put it in the data space. 09:26:39 I did't have a data space when I implemented them. 09:26:55 my variables are persistant 09:27:16 Yeah, that's what I mean. In order for my system to work, variables, buffers, et. al. all need to be persistent. 09:27:20 (somehow) 09:27:49 I could easily put 4 processes in my 32 int registers (just on the first CPU) 09:28:43 or 6 I suppose 09:31:08 I suppose I could do my forth with just 4 registers, and have 7 processes + a few extra registers for the task switcher 09:31:42 Hehe 09:31:52 Oh, but let's not forget the FPU registers either. :) 09:32:17 maaan 09:32:21 Too bad you can't address memory with an FPU register. :) 09:32:29 hehe :) 09:32:42 my cpu certainly does have a lot of registers 09:33:04 192 by my count 09:33:21 Well, 64 definitely with just integer and floating point alone. 09:33:26 Then you have another 32 for vector registers. 09:33:33 Then you have all the system-specific registers. 09:33:40 * kc5tja wishes he had a fast PowerPC. :( 09:33:47 oh right, I wasn't counting the special purpose registers 09:33:51 * kc5tja wishes they were more affordable. 09:33:54 I don't know how many of those there are 09:34:52 It changes from CPU to CPU, really. 09:35:03 The opcode space permits up to 1024 though. :) 09:35:09 :) 09:36:20 Man, at this point, I would probably be happy with a 66MHz PowerPC 601 even. :D 09:36:28 I like that idea of running processes on different registers to make task switching fast. :) 09:36:50 I haven't done anything CPU intensive with my forth yet 09:37:01 --- quit: schihei (Client Quit) 09:37:06 Neither have I. 09:37:20 Though that will probably come in time, especially as I start making my circuit simulator software. 09:37:22 I will after I get it to boot and get nice graphics support 09:47:41 I like to play with making cool graphics with recursive algorithms like fractals. 09:48:05 * kc5tja nods 09:48:23 And I would eventually like to have a ray tracer 09:48:27 Since you have the floating point registers on your system, are you going to make a floating point wordset too? 09:48:47 I don't know 09:50:04 Well, all I know is that my circuit simulator would definitely benefit from vector math acceleration. 09:50:23 * kc5tja is going to research the MMX and 3DNow! instructions to see if they can benefit me in my quest. :) 09:50:31 When I get to that stage of course. 09:50:45 I'm certainly going to make it easier to do floating point than doing normal asm, but I'm not sure how it will end up. 09:52:47 I was just wondering, because I can't imagine making a fractal generating program that uses all integer arithmetic. 09:53:21 :) yeah 09:53:34 fp certainly makes things easier 09:53:56 The other thing about FTS/Forth is that the A register is the EDX register, which is also used by the multiplication and division instructions. 09:54:16 :-/ 09:54:17 So, I don't need an explicit */ operator, because >r * r> / will achieve exactly the same thing. 09:54:37 The A register holds the most significant 32-bits of the multiplication result, or the / input. 09:55:22 It makes vector multiplication a bit wonky, I suppose, but overall, I think it's a feature that can be nicely exploited. I think, at least. 09:55:41 x86 is so funky 09:59:29 I'm so glad I have hardware I like 10:03:13 Interesting. In ColorForth, * doesn't affect the A register, but / behaves exactly as I'd predict: it sets the A register to the remainder of the division. 10:04:18 Maybe I should start calling it the M register: short for Memory or Multiplicand, depending on what you're about to do. :) 10:04:35 * kc5tja will stick with A for now though. 10:05:59 :) 10:23:44 YAY! Got FTS/Forth's read-evaluate loop implemented. 10:23:54 Of course, evaluate just reprints, verbatim, what the user types in. :) 10:24:05 Just a glorified "Hello, what's your name" type program at the moment. 11:28:10 --- join: Nutssh (~Foo@gh-1177.gh.rice.edu) joined #forth 11:38:44 yay :) 11:38:56 did you use query/expect ? 11:40:36 --- join: bjazz (jazz@pD9E59A8B.dip.t-dialin.net) joined #forth 11:41:25 I used the ANSI semantics for ACCEPT. 11:41:30 ok 11:41:44 It fit so perfectly with the system call interface that I have that it was a no-brainer. 11:41:53 Plus, I prefer ACCEPT over the traditional words anyway. 11:42:02 :) 11:42:15 ANSI did get *some* things right. 11:42:30 heh thats debateable ;) 11:42:36 but lets not :P 11:42:58 Heh 11:43:29 Well, ACCEPT is a fine example of one word they got right. 11:43:37 As is KEY and EKEY, KEY? and EKEY?. 11:43:37 hehe 11:43:46 err wtf is ekey ? 11:43:49 ekey is an ansi word? 11:43:52 Yes. 11:43:53 and how do you proniunce it 11:44:02 EKEY is pronounced E-Key. 11:44:23 It behaves like key, but fetches *events* (and returns a key to that event) instead of key presses. 11:44:28 Useful for event-driven programming. 11:44:37 thank god they didnt go for eckey... like ickey but different heh 11:44:40 aha 11:45:04 cool 11:45:17 ppforth uses ekey, I just asumeb he made it up 11:45:21 Damn, I need to change my ELF code to include the data section needed for the Forth vocabulary vectors. 11:45:44 kc5 erm- bss ? 11:45:56 mmanning: No. Hell no. Absolutely no. 11:46:01 good :) 11:46:04 mmanning: Otherwise, what good is the cross-compiler? 11:46:05 just chekkin 11:46:24 Nothing wrong with BSS sections, but I need to preserve the vocabulary state, obviously. 11:46:42 bss is a bitch 11:46:52 But the ELF code I have is so nice and succinct. :D It produces, literally, *the* tiniest applications I've ever had a compiler for on this box. :) 11:47:00 you cannot guarantee that the bss will be contiguous with your data section 11:47:13 you cannot have "code, bss, data, bss" 11:47:17 mmanning: Why in the world would you want it to? It's a totally separate section. Treat it as such. :) 11:47:22 its all just too skrewie 11:47:36 kc5 so that my data can be extended 11:47:39 No, you just don't understand how to properly use it. :) 11:47:40 --- quit: bjazz () 11:47:45 mmanning: That's not what BSS is for. :) 11:47:49 i dont use it 11:47:54 i have ONE section effectivly 11:48:08 mmanning: It's for allocating variables that don't need pre-allocation. Typically used when you have, oh, say, 16MB worth of uninitialized data in your code. 11:48:18 It'd suck to have a 16MB executable, only 4K of which is real code. 11:48:21 yes i know heh 11:48:55 i know what bss is, i initially looked into using it as above but ran into problems ;) 11:48:59 and im glad i did 11:49:00 * kc5tja is glad that Forth uses its dictionary like a stack 11:49:10 because even if i had solved those problems the result would have been a DOG 11:49:18 It lets me make a version of FTS/Forth with a 16MB dictionary space if I wanted to, and it'd still only emit the minimal-sized executable. 11:49:51 yes. there are no great big gaping holes in an isforth save either heh 11:50:25 on entry into forth all headers are butted up against code space and are relocated out to head space 11:50:42 on fsave the headers are relocated again to "here" and everything is saved as a single entity 11:51:08 * kc5tja nods 11:51:12 im thunkin of adopting some sort of compression mechanism so that isforth executables unpack themselves on boot 11:51:22 * kc5tja likes the idea of using separate sections though. It seems more modular to me that way. 11:51:45 well head space and list space are internally seperate sections, but the elf file is ONE section :) 11:51:54 That's what I mean. 11:51:59 I prefer separate sections in the ELF file. 11:52:20 yes i originally wanted that too but decided this way was actually easier 11:52:21 This way, I can quickly examine different section contents using commonly available tools. 11:52:21 --- join: ASau (~asau@158.250.48.196) joined #forth 11:52:35 Dobryjj vecher! 11:52:40 actually, kernel.com does have list and header in different sections 11:52:43 And, separate sections are a requirement if I want to start linking to libdl.so. 11:52:58 but when isforth does an fsave after extending the kernel its all in 1 section 11:54:40 --- part: Nutssh left #forth 11:56:35 I like accept 11:57:34 * kc5tja now has two blocks, one for turnkey, and one for save. :) 11:57:40 turnkey, of course, creates just a raw executable. 11:57:49 save also records the state of the vocabularies. 11:58:15 kc5 - does your turnkey include only an entry-word's dependencies? 12:01:22 I found several APLs for unix, also: an ancient ASCII apl11 written by Ken Thompson, a GPL'd openAPL based off apl11, adding APL's font and various modernizations, and something else that I haven't managed to compile. 12:01:57 both of them assume that you have a clue as to their use and terminology, unfortunately. 12:02:18 I think I'll just implement a K-lookalike. 12:04:46 --- join: golya (~golya@kempelen.iit.bme.hu) joined #forth 12:06:13 Hi! I'm a forth newbie. I'm stuck at the end of the tutorial, but I want to peek into forth's capabilities. Can sy say in what is forth good at? So where to use forth? 12:07:22 cleverdra: There is no automated dependency management. You must manually ensure the dictionary is as clean as you desire it to be before turnkeying. 12:07:32 golya - this question would go easier for everyone if you talk about Forth's applicability to a specific domain that interests you. 12:07:39 golya: I'm not sure how one can answer that question. That's a little like asking what C is good for. 12:07:40 kc5 - OK, good enough. 12:09:04 well. Now, what I know about forth, that it is a cross-platform, low-level language, and fast. 12:09:20 cleverdra: Yeah, K is a nice language. Very nice. I'm just not too sure how it can work so well without the ability to apply vector arithmetic to different dimensions/axes in a vector/matrix operation. 12:09:34 'low-level' doesn't describe it very well. gcc -DPACKAGE_NAME=\"gc\" -DPACKAGE_TARNAME=\"gc\" -DPACKAGE_VERSION=\"6.2\" "-DPACKAGE_STRING=\"gc 6.2\"" -DPACKAGE_BUGREPORT=\"Hans.Boehm@hp.com\" -DGC_VERSION_MAJOR=6 -DGC_VERSION_MINOR=2 -DPACKAGE=\"gc\" -DVERSION=\"6.2\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DSILENT=1 12:09:41 cleverdra: There must be something I'm missing. 12:09:41 blech. 12:10:00 kc5 - er, why do you suppose that it lacks that ability? 12:10:20 cleverdra: Because it's not in the set of adverbs or verbs of K, as documented in the K Users Manual. 12:10:30 I'm referring to J/APL's " adverb, BTW. 12:10:33 cleverdra: well, that can I do nice interactive programs in forth? Are there data structures? (I'm not a forther [yet]) 12:10:40 kc5 - I don't know anything about that adverb, sorry. 12:11:14 golya - er, yes, Forth has any kind of data structure (with as nice a syntax) as you want -- hence my interrupted "'low level' doesn't describe it very well." remark. 12:11:14 golya: There are no data structures built into the language. You would need to code these yourself. It's not usually hard to do, but it dependign on the Forth environment, it may impose a small performance hit if you do. 12:11:47 golya: Due to Forth's low-level beginnings, it seems that the best data structures you can apply in Forth are the array and the stack. 12:11:59 golya - Forths generally make 'nice interactive programs' more easy to develop than most other languages, simply because of KEY EKEY KEY? and such. 12:12:02 some forths have data structures, but I think it's better to do them yourself. as kc5tja said, it's not hard 12:12:35 golya: If you really wanted to, you can even include object oriented programming facilities as powerful as Smalltalk. 12:12:46 Well, is there a place, where I can see some *easy* but useful forth code? 12:12:54 CLOS-like object orientation is a bit harder, but not unobtainable. 12:12:59 golya - gforth comes with an 'oof' example of a particular OO extension and Lisp-like list extensions. 12:13:08 golya - take a look in the gforth distribution, to start. 12:13:18 cleverdra: What Forth tutorial are you looking at? 12:13:28 kc5 - I don't look at any. 12:13:40 Freaking autocompletion. 12:13:44 I have the gforth 0.6.2 manual. 12:14:01 golya: you have gforth installed then? 12:14:03 That is perhaps not the best tutorial I've seen. :) It's adequate I suppose, but . . . 12:14:03 golya - note that gforth has two tutorials. 12:14:56 golya: Also, there is usually an inverse relationship between easy and useful. :) 12:15:01 I read that, which is not about the internals of forth 12:15:37 So? Any good place to look at? url? 12:15:44 golya - gforth has two 'easy' (but not very useful -- unless you like what they do) games in the distribution: sokoban.fs and tt.fs 12:17:08 * cleverdra prepares to go back to school. 12:19:23 Hm. 12:19:34 Why not start from Gforth? 12:19:50 Asau: I don't know what to do now. 12:20:09 golya - fix the bugs in sokoban.fs 12:20:15 Maybe I need some exercises, that prove me, that forth is easy and useful :) 12:20:16 hehe 12:20:26 Though you have too many possibilities, it's rather good way to start. 12:20:43 golya - add a 'go to level N', a 'skip level', and a 'refresh level' command. Make sure that you handle scoring sensibly. 12:20:44 golya: print out the first 100 primes :) 12:21:04 Herkamire - oh, boo. If you can do that you may as well print out N primes. 12:21:05 golya: or the fibbinochi sequence 12:21:17 golya - write a program to emit the digits of PI until you stop it. 12:21:33 Clev., Herk.: Should start from simple calculations. 12:21:44 Yes, and after? 12:21:47 golya: print out four plus five :) 12:21:51 asau - the tutorial has those enough. 12:22:07 golya: Are you familiar with the use of CREATE and the , and C, words? 12:22:08 Herkamire 4 5 . 12:22:19 OK. Then why not follow tutorial? 12:22:24 golya: actually, 4 5 + . 12:22:29 golya - write an IRC keepalive -- something to stay on a connection, allow local connections, and keep an IRC connection alive with logging. 12:22:31 kc5tja: I'm exactly at that point. 12:22:36 kc5tja Ok. 12:22:49 kc5tja Ok. typo. 12:22:59 golya: what kind of programs do you like to create? games? editors? graphics? 12:23:02 golya: Then, maybe what you can try doing is a program that take a string and prints it out in big letters. 12:23:34 kc5tja: that sounds fun 12:23:48 Like, S" A" bigtype might produce the following: 12:23:49 * 12:23:50 * * 12:23:55 ***** 12:23:56 * * 12:23:58 * * 12:24:00 or something. 12:24:03 I'm sure you have plenty of ideas, but I prefer an URL, or some kind of structured stuff. 12:24:11 kc5tja: Maybe, SF? 12:24:39 ASau: Marcel Hendrix' version you mean? Perhaps. 12:24:56 there is some source code here: http://www.forthfreak.net/wiki/index.cgi?ForthCode 12:25:05 kc5tja, I do. 12:25:21 I don't know how good it is as I haven't looked at much of it. 12:27:44 golya, http://dmoz.org/Computers/Programming/Languages/Forth 12:27:56 Then, "Personal Pages" 12:28:06 "Marcel Hendrix" 12:28:55 There is "Starting Forth" book at his site. 12:29:11 "SF" is a must, I think. 12:29:20 thx 12:30:17 Also, dmoz is a good starting point. 12:33:50 I can't help with better English book as I'm satisfied with native translations. 12:34:22 You can try to find a better tutorial in dmoz' links. 12:34:46 As far as code *examples* are concerned, though, the ForthFreak Wiki page posted earlier is a good start. 12:34:51 I'd wager it's even better than Taygeta's. 12:35:09 :) 12:35:15 cool :) 12:35:35 Yes, and there's http://www.forthfreak.de/wiki 12:39:18 And I think making an interpreter is also possible in forth :) 12:39:29 BTW, Herkamire. 12:40:22 IIRC, you provided Forth bot here? 12:41:21 "16-bit dragon" 12:56:18 w00t! Got the ELF image all created, and things are lookin' good. 12:56:37 Now I can write the parser and hopefully get the system interpreting from command-line before I need to get to work. 12:57:10 golya: interpreter for what? 12:57:48 ASau: yeah, I had a bot in here. the forth it supported was rather limited and accentric though. 12:59:36 it would be better to have a more standard and extensive 13:01:47 Hm. 13:02:01 hm, there was a forth bot? 13:02:08 There used to be. 13:02:26 It seems I've seen something to link stdin/stdout and IRC. 13:02:26 cool 13:02:29 isforth has teh sources to a do nothing irc bot written entirely in forth 13:02:37 But I may be wrong. 13:03:25 Ha! 13:03:54 I don't know IRCP but I've run telnet to Forth console. 13:04:00 Done with netcat. 13:11:14 --- quit: golya ("Leaving") 13:28:17 --- quit: proteusguy (Read error: 104 (Connection reset by peer)) 13:41:48 ASau: tcpclient 13:42:15 except that links descriptor 6 and 7 to read/write a tcp socket 13:43:19 --- join: _proteus (proteusguy@109.sub-166-153-176.myvzw.com) joined #forth 14:47:32 --- join: Nutssh (~Foo@gh-1177.gh.rice.edu) joined #forth 15:04:29 --- quit: ASau () 16:01:09 --- join: I440r (~mark4@12-160.lctv-a5.cablelynx.com) joined #forth 16:03:58 --- join: proteusguy (proteusguy@182.sub-166-153-176.myvzw.com) joined #forth 16:29:35 --- join: Sonarman (~matt@adsl-64-160-166-125.dsl.snfc21.pacbell.net) joined #forth 16:34:35 --- quit: _proteus (Connection timed out) 16:36:30 --- quit: chandler ("Changing IRC hosts...") 16:36:51 --- join: chandler (chandler@64-145-60-36.client.dsl.net) joined #forth 16:57:53 herkforth has a cut/paste stack 16:58:24 sorta like an undelete key, except it puts it after the cursor 17:00:14 so you can hold down backspack to delete a definition, then go elsewhere, and hold down shift-U to paste it 17:15:55 --- join: dubious (~marc@209.71.234.197) joined #forth 17:45:05 * warpzero is back (gone 11:07:37) 17:45:54 Herkamire - what platforms does herkforth target? 17:51:19 ppc i think 17:56:29 --- quit: Nutssh ("Client exiting") 18:24:07 --- join: blockhead (default@dialin-2-tnt.nyc.bestweb.net) joined #forth 18:53:56 cleverdra: ppc linux right now. eventually newworld Macs 18:54:25 it could easily be ported to Mac OS X 18:54:46 I just need the Mach-O header format 18:55:15 (once I get it booting it won't matter what OS you have, so long as you have Mac hardware 19:16:46 --- join: Nutssh (~Foo@gh-1177.gh.rice.edu) joined #forth 19:24:00 hi Nutssh 19:30:23 Hi. 19:30:29 Rah, another windows worm. 19:31:01 --- quit: qFox ("if at first you dont succeed, quit again") 19:40:53 Herkamire: I haven't had time to look at it myself but the mach-o file format is documented well by Apple 19:41:09 http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/8rt_file_format/chapter_4_section_1.html 19:45:02 chandler: thanks for the link 19:45:22 looks like it only shows how to do it in C though. not giving values for any of the constants. 19:46:04 I can deal though. I have a C program that makes it easy to print out many constants and their values 19:47:23 I'm not going to add Mach-O support anytime soon. others are welcome to though. 19:47:27 I'm more interested in making it boot 19:55:54 there are other docs around on their site though 20:05:56 --- join: arke (~Chris@wbar8.lax1-4-11-099-104.dsl-verizon.net) joined #forth 20:06:04 --- quit: blockhead ("Client Exiting") 20:10:48 oh yay it works oh yay it works oh yay it works 20:11:23 --- quit: cleverdra ("grumble") 20:14:45 Oh Man. 20:14:54 I have thought of soooooo much cool stuff while I was netless 20:15:01 --- quit: arke ("Leaving") 20:15:17 --- join: arke (~Chris@wbar8.lax1-4-11-099-104.dsl-verizon.net) joined #forth 20:15:35 Erm, that was _not_ on purpose ^_^ 20:15:40 Erm 20:15:43 Actually 20:15:51 I meant to say that that was me, not my connection 20:15:51 :D 20:16:20 alright, who wants to know of the great things I thought about while gone? 20:22:23 --- join: [Forth] (~Forth@12-160.lctv-a5.cablelynx.com) joined #forth 20:22:32 Hi ForthBot 20:38:00 --- join: cleverdra (irc@206.61.132.99) joined #forth 20:45:52 :) one of my koch fractals came out nicely: http://herkamire.com/jason/images/fractals/koch/19.png 20:46:46 Hiya Herk! 20:46:55 Wow, that's neat 20:50:20 source for it is here: http://herkamire.com/jason/programming.html 20:50:24 --- quit: arke (Read error: 104 (Connection reset by peer)) 20:50:31 SDL + Linux 20:52:06 --- join: arke (~Chris@wbar8.lax1-4-11-099-104.dsl-verizon.net) joined #forth 21:01:03 --- join: arke_ (~Chris@wbar8.lax1-4-11-099-104.dsl-verizon.net) joined #forth 21:01:03 --- quit: Herkamire ("goodnight all. bb tomorrow") 21:01:05 --- quit: arke (Read error: 104 (Connection reset by peer)) 21:01:07 --- quit: dubious ("Leaving") 21:06:39 --- nick: arke_ -> arke 21:09:25 --- join: dynamowku (~d@adsl-217-182-47.owb.bellsouth.net) joined #forth 21:10:18 if i create a word : bla ( a1 -- push a1 ) a1 ; it doesnt let me use a1 in my word...how do i do that? 21:10:55 a1 is already on the top of the stack there, if that's the correct stackframe 21:11:15 what did you want bla to do? 21:11:42 evaluate a polynomial but this stack notation is making hard on me to keep the a1 values....and its a float value too 21:11:48 I think dynamowku wants locals. 21:11:59 TreyB: what's that? 21:12:00 eek locals are evil ^_^ 21:12:34 dynamowku: locals == automatic variables in C 21:12:35 im really really new to this...its for programming languages course in my college...we learn a new language every other week or something... 21:12:57 oh ok...so i dont want those correct? i should find a way to do my word with the stack? 21:13:12 You should try that, yes. 21:13:25 hmm...*grabs pencil and paper* :) 21:13:31 :) 21:13:39 you can cheat and use the return stack 21:13:51 although that's not really cheating ^_^ 21:13:54 what's that? 21:13:58 Heh. 21:14:01 he didnt mention that stack.... 21:14:09 floating point and the regular is all he mentioned 21:14:17 Have you seen any of the Forth tutorials? 21:14:18 When you call a word, it pushes an address of where to go back to on the return stack. 21:14:33 no i havent seen any tutorials...just the documentation my prof gave us along with GForth 21:14:41 Ah. 21:14:57 Gforth comes with a tutorial in the info file. 21:15:06 so im shooting blindly right now... 21:15:19 hmm...ill go download the full GForth then and see if it can help 21:15:31 You have access to a UN*X box with gforth installed? 21:16:05 If so, you probably already have the tutorial on the machine. 21:16:09 umm...i doubt it...my work servers probably doesnt have forth 21:16:43 dynamowku: by the way, rot -rot >r r> are your friends ^_^ 21:16:44 What platform do you do your classwork on? 21:17:07 i just checked...my linux box doesnt have them...we do it on windows 21:17:23 ive seen rot and -rot...ill checkinto >r and r> 21:17:43 Did you install gforth from the .exe installer? 21:17:57 no...my prof just gave us the .exe 21:18:00 dynamowku: just make sure that you keep it the way it was with >r and r> 21:18:02 Ah. 21:18:32 http://www.complang.tuwien.ac.at/forth/gforth/Docs-html/ 21:19:06 Follow the tutorial section there. 21:19:46 ok..thank you! 21:21:52 * TreyB goes to play a bit of Ratchet and Clank. 21:22:02 :) 21:22:25 good game :) 21:23:11 Back. 21:24:06 kc5tja: :) 21:24:15 kc5tja: i have thought of sooooooooooooo much stuff while I was gone :) 21:24:29 * kc5tja nods 21:24:45 I got a lot of progress with FTS/Forth today. 21:24:59 Cool :) 21:25:03 Implemented many MachineForth primitives, including the A register, and such. 21:25:06 Really, really neat. 21:25:17 I'm not going to make my goal, though, it looks like. :( 21:25:25 Heh 21:25:31 I came up with something that might help you alot 21:25:42 My goal was to get it interpreting text from command line today. Doubt that'll happen. 21:25:48 But I do have the read/evaluate loop implemented. 21:25:55 awesome :) 21:26:21 kc5tja: OT: do you know of a good editor beside Vi/Emacs? possibly something very exotic and ... different. 21:26:28 What things did you think of 21:26:31 ? 21:26:38 arke: I am not familiar with any. 21:27:02 I know they exist though. 21:27:13 kc5tja: Well, I thought of a very very very cool forth register assignment scheme for x86 21:27:24 i heard of THE or something ... is that any good? :) 21:27:36 I've seen some references to an editor called `sam,' though I'm not sure how exotic it is. Supposedly, it's based on acme, the 8.5 standard text editor. 21:27:39 kc5tja: esp = rstack, esi and edi are _both_ used for the data stack 21:28:10 arke: THE is something I'm very interested in. qm was going to be a text editor by me, with my own interpretation of the concept. 21:28:41 Why both ESI and EDI? 21:28:42 Well, I didn't mean the humane interface, but the editor THE :) 21:28:55 Oh. I don't know anything about THE. 21:29:04 the "other white editor." 21:29:10 :D 21:29:18 Well, here's how it works. 21:29:50 : dup s-write stosd, ; 21:29:58 : drop s-read lodsd, ; 21:30:50 s-write is an immediate word that ensures that edi is up to date 21:31:02 I would change the order of operations. 21:31:15 good case, it does nothing, bad case, it compiled a mov edi, esi 21:31:18 I would always assume that ESI=EDI at the beginning of DUP and DROP, and do something like this: 21:31:24 : dup stosd, s-write ; 21:31:28 : drop lodsd, s-read ; 21:31:42 how would that work? 21:31:48 (but do you like my idea? :) ) 21:32:16 Well, when stosd is executed, we know for a fact that ESI != EDI. So s-write compiles mov esi,edi. 21:32:34 oh, heh 21:32:37 naah 21:32:43 Likewise, when lodsd is executed, we know that ESI != EDI. So, s-read compiles mov edi,esi (note register reversal). 21:32:53 compiler keeps a flag on which register is currently up2date 21:33:22 Hrm. I don't really know which would be better. 21:33:24 --- part: dynamowku left #forth 21:33:37 Well, as long as the compiler can maintain proper state, then that's a fairly neat idea. 21:33:53 Something you might wanna do for FTS/Forth :) 21:34:06 For now, I'll continue to use what I'm using now. 21:34:14 Of course :) 21:34:15 But I'll evaluate it for later use in future optimizations. 21:34:26 I'll definetely be using that for RkForth, once I finally get that started. 21:34:36 Do you like the idea? :) 21:34:59 As long as you can maintain proper compiler state, sure. That's the trick that would make the whole thing work. 21:35:35 The only problem is that it sucks up a CPU register that perhaps could be used for something else. 21:35:42 So it depends on what you want in your target Forth environment. 21:35:53 like what? Forth doesn't need many registers :) 21:36:31 Get it working, then worry about tweaks? 21:36:36 EBP is spare too. Got nothing for it to do. Might use it as a dictionary base pointer 21:36:48 Ideally, true. But I'm quite likely going to be implementing primitives that work with vectors in the future (especially for my circuit simulator). I may need an extra register or two. 21:36:58 vectors? 21:37:13 arke: Vectors are 1-dimensional arrays. 21:37:34 an array-based forth? :D 21:37:49 No, vector math primitives coded for FTS/Forth. 21:37:52 You know what's pissing me off? 21:38:02 I'm killing stuff, yet it won't die. 21:38:05 But my friend Billy is seriously considering a vector-based Forth implementation. 21:39:02 cool 21:39:28 * arke is coding a 3D renderer for his TI-83 .... yes, you may laugh. 21:40:51 I read about CF's */ 21:40:58 Talk about coolness. 21:41:11 You never knew about */? It's been in Forth since the very beginning. :) 21:41:17 heh 21:41:21 In fact, MY Forth is the oddball of the bunch, in that it lacks */ completely. 21:41:39 */ ( a b c --- a*(b/c) ) 21:41:55 quite useful, I must say. 21:41:58 Well, more accurately, as far as order of operations is concerned, it's (a*b)/c 21:42:01 * kc5tja nods 21:42:11 kc5tja: well, but it comes out the same, ... i think. 21:42:26 When dealing with integers of finite length, not always. 21:42:42 Multiplication is done first because it produces the higher precision (32-bits times 32-bits equals a 64-bit number). 21:42:52 Then division is used to reduce the precision back to 32-bits. 21:43:12 I don't really get how the CF */ works. 21:43:21 But you can think of it as being the same algebraic operation, yes. 21:43:36 Here is FTS/Forth's definition: 21:43:42 : */ >r * r> / ; 21:43:43 mov ecx, eax 21:43:49 lodsd 21:43:55 imul [esi] 21:44:00 idiv [ecx] 21:44:07 imul [esi] 21:44:08 lea esi, esi+4 21:44:13 idiv ecx ; no [...] 21:44:19 add esi, byte 4 21:44:39 I440r: No, lea esi,[esi+4]. LEA is smaller, and doesn't change flags. 21:44:41 i dont thing add esi, byte 4 is any slower but its smaller 21:44:49 according to chuck, its idiv [ecx], but that might be a typo :) 21:44:54 i dont think the lea is smaller 21:44:58 arke: Definitely a typo. 21:45:05 I440r: LEA is 3 bytes. ADD is 6. 21:45:09 i think the 4 is compiled as a 32 bit number 21:45:11 I440r: but it doesn't preserve flags. 21:45:12 Don't believe me? NASM it. :) 21:45:26 which, unfortunately, CF is based on :( 21:45:30 * arke hates the concept of flags 21:45:32 add reg, byte n is not 6 21:45:43 I440r: Don't make me paste the results of ndisasm here. 21:45:48 ill accept the preserve flags arguement :) 21:45:54 :) 21:46:06 or debug, for that matter. 21:46:11 but debug isn't linuxed 21:46:52 I440r: Sorry, I didn't see the byte modifier. 21:46:58 I440r: In that case, it's the same length as LEA. 21:47:02 3 bytes either way. 21:47:16 :) 21:47:27 How do imul and idiv work? 21:47:32 they seem evil. 21:47:41 :) 21:47:41 arke: IMUL => EDX:EAX = EAX * ECX 21:48:04 arke: IDIV => EAX = (EAX/ExX); EDX = (EAX % ExX) 21:48:25 2 21:48:25 3 00000000 6683C001 add eax, byte 1 21:48:51 however i DO accept the flags arguement heh 21:48:56 I440r: Your assembler is buggy; the 66 prefix turns that into add al,byte 1 21:48:58 yep :) 21:49:04 no 21:49:15 er thats nasm 21:49:33 Dude... 21:49:34 * kc5tja sighs 21:49:35 * kc5tja posts 21:49:38 [bits 32] 21:49:40 kc im starting to believe you 21:49:42 i know 21:49:47 add esi,4 21:49:47 i know what the 66 is 21:49:50 add esi,byte 4 21:49:54 lea esi,[esi+4] 21:49:56 produces: 21:50:20 00000000 81c604000000 21:50:20 let me change to using esi instead of eax 21:50:32 00000006 83C604 21:50:41 00000009 8D7604 21:50:42 :) 21:50:58 Ack. 21:51:02 x86 evil. 21:51:07 * kc5tja thinks you forgot to include [bits 32] in your source. 21:51:22 I really think we should all start using _my_ CPU :) 21:51:37 oh i did 21:51:53 * arke came up with the coolest chip ... maybe great for embedding? 21:52:09 5 00000000 83C601 add esi, byte 1 21:52:09 21:52:17 3 bytes 21:52:23 Yep, that agrees with what I have. 21:52:27 But I'm also correct re: LEA. :D 21:52:37 yes it preserves flags 21:52:55 however. in certain cases the lea is slower i believe. however this may no longer be true 21:53:05 i dont keep up with that shit no more 21:53:08 waste of time to do so 21:53:19 0xF-bit RISC proc, with 0xF instructions, and a 0xF instruction fetch. 0xF registers, r0 being a constant non-locking 0. Jumps/Branches are cool as they use register dependencies to make wasted prefetch cycles = 0 21:53:27 Not for that addressing mode. I think it's slower if you do something like [esi+edi], since that would require 4-port access to the register file to do fully. 21:53:50 well the only time i would use lea that way would be for a multiply 21:54:00 lea eax, [eax+2*eax] 21:54:05 multiply eax by 3 21:54:17 * kc5tja nods 21:54:18 lea is kinda neat that way ^_^ 21:54:41 the a86 assembler allows you to do lea eax,[eax*3] hehe 21:54:57 etc etc 21:54:57 i think nasm does too 21:54:58 Its probably an at-least 1 ghz CPU. An extra clock cycle in a prototype don't matter. :) ANd profiling will be much better at fidning problems anyways. :) 21:55:18 Nutssh: referring to me? 21:55:28 Nutssh: I was more thinking of something like 20mhz. 21:55:30 hmmm ill benchmark 10000 lea's against 10000 adds hehe 21:55:31 I"m not sure. 21:55:49 whic will tell me which one is faster on MY box lol 21:55:55 :) 21:56:02 ;) 21:56:18 I've always had the best luck write it first, then profile. 21:56:20 I440r: Good point. Maybe I should do the same. But not right now. I have more important things to do with FTS/Forth first. 21:56:20 kc5tja: how do ya like my newest CPU? (not that you know alot :)) 21:56:44 err how do you tell nasm to assembler something multiple times ? 21:56:50 rept ? 21:56:56 I440r: TIMES 21:57:02 kc5tja: no FPU or MMU, but I think that at 20Mhz with decent hardware, it'll do the job those mcd's p2-200 registers barely do. 21:57:13 hats it 21:57:39 arke: Well, I'm looking at perhaps building my own MISC using discrete components, with asynchronous logic. 21:57:56 so times 10000 lea eax, [eax+1] 21:58:08 I can probably get the thing running at around 40MHz equivalent speed because of asynch's unique signaling, and its highly localized signal propegation paths. 21:58:11 WHY THE FUCK WONT WINDOWS KILL 21:58:18 ugh 21:58:21 i wanna know why it wont die :) 21:58:54 kc5tja: Sounds neat. 21:58:57 --- join: imaginator (~gps@166.70.196.201) joined #forth 21:59:17 And while it's possible for it to go faster, I'd be really shocked if it did. :) 21:59:37 --- quit: arke (Read error: 104 (Connection reset by peer)) 22:00:35 Hi 22:00:56 Why did the Forth CPUs not take over the world? 22:01:39 Too simple. 22:01:50 the add seems to be faster here 22:01:55 but i would never swear to it 22:02:06 timer-reset fud .elapsed 00:00:01.715 ok 22:02:06 timer-reset zud .elapsed 00:00:01.498 ok 22:02:10 You can't maintain business if the CPU is so simple that any arbitrary competitor can make one without a lick of reverse engineering expenditure. 22:02:29 not unless you have it patented 22:02:33 which takes time 22:02:42 I440r: Chuck has patents on them already. 22:02:44 What cool apps ran on the Forth CPUs? 22:02:45 But that didn't help. 22:03:13 imaginator: Virtually every satellite in orbit today has an RTX-2001 stack CPU in it. There are some exceptions (e.g., Hubble Space Telescope has 80286). 22:03:31 wow 22:04:29 286 ? 22:04:31 lol 22:04:39 ok the add is definatly faster here 22:04:47 i did 100000 instructions each 22:04:50 I440r what are you benchmarking? 22:04:54 and did a 10000 0 do xxx loop 22:05:09 the difference between lea eax, [eax+1] and add eax, byte 1 22:05:15 the add was faster on THIS processor 22:05:21 amd athlon xp 1800 22:05:40 you watch - the numbers will reverse on a pentium :P 22:05:50 00:00:12.977 22:05:50 00:00:09.837 22:05:50 ok 22:06:15 thats 100 thousand instructions of lea inside a 100000 0 do loop takes 12 seconds 22:06:22 the same number of adds takes 9 22:06:50 That reminds me, I've been trying to convert a saying in finance to programming. Basically the statement is: "If you take care of the pennies the dollars fix themselves." 22:07:07 thats an old brittish saying 22:07:12 If you take care of the cycles the [what?] fix themselves. 22:07:17 look after your pennies and the pounds will look after themselves 22:07:45 imaginator, i think optimizing at the instruction level is FUN. it has no other practical use that i can see 22:08:15 I440r: Then you've never had to squeeze every ounce of performance from a CPU for a real-world application then. 22:08:33 kc5 name one (no im not saying they dont exist) 22:09:13 ive had to optimize specific routines before. but only because i was not allowed to change the algorithm to a faster one 22:09:17 I440r: To one-up the competition, Hifn released a Pentium software-only implementation of an LZ77 decompressor in software that outperformed HARDWARE by a factor of 2:1, by hand-tweaking the code in assembly. 22:09:39 hifn ? 22:09:47 The result: the software is now embedded in many routers used in the world today, because it performs as good as dedicated compression hardware for network packet processing, without requiring a twice-as-expensive CPU. 22:09:57 kc5 i can guarantee that half of his optimizatijons were intel cup specific 22:10:04 I440r: Duhh, of course. 22:10:18 I did say Pentium-tweaked. :) 22:10:26 i.e those optimizations are counter proiductive on a amd 22:10:35 I440r: Perhaps. 22:10:44 the point for production software is you cant always guarantee exactly what processor it will run on :) 22:10:49 but it IS fun :) 22:10:50 Wrong. 22:11:00 i said you cant ALWAYS 22:11:01 Production software != DESKTOP software. 22:11:10 ok 22:11:14 :) 22:11:15 if your going toi make that qualification :) 22:11:18 I've found that sometimes the most trivial of changes can be a huge difference, the trick is figuring out what needs to be changed. 22:11:54 you take your pick of processor. optimize a quic sort written in any languate you want 22:11:56 c or assembler 22:12:01 optimize it to the hilt 22:12:28 ill use a radix counting sort and do multiple sorts on the same data in the time it takes you to do it once 22:12:35 assuming a non trivial ammount of data 22:12:42 however 22:12:45 !!! 22:12:48 i cant sort in place heh 22:12:54 so i need more memory than you 22:13:25 I440r: Why are you so patently obsessed with this irrelavent and inapplicable benchmark? 22:13:43 its not irrelavant - well IT is - the point its making isnt 22:13:44 If radix sort is so much faster, then what is preventing me from coding the most optimized, bad-ass RADIX sort instead of quicksort? 22:14:01 kc5 lol nothing 22:14:04 * warpzero is away: Cuss words! Oh no! 22:14:22 but your optimized quick against my very badly written radix counting 22:14:29 the radix will win 22:14:43 assuming i have the memoryh for 2 copies of the data 22:14:46 1 sorted 22:14:48 1 unsorted 22:14:53 PLUS a buffer for the counts 22:15:00 of 256 bytes 22:15:22 Well, I am offended by even mentioning that comparison, because as a professional programmer, I benchmark several sorting algorithms, determine which is best for my needs, then optimize the hell out of *that*. For me, it's a complete non-issue. 22:15:59 kjc5 but you picked the best algorithm. not "take this one out of the library" 22:16:05 thats cheating :P 22:16:46 heh 22:16:48 .ckear 22:16:51 wtf 22:16:55 yes. processor optimizations can give HUGE performance increases. but not as huge as algorithm selection 22:16:58 eh ? 22:18:35 my typing must be infectious 22:22:03 --- join: Serg (~z@212.34.52.140) joined #forth 22:23:30 I440r: The thing is, they're multiplicative in nature. 22:23:49 Processor + algorithmic optimization makes for overwhelmingly superior performances. 22:29:11 yup 22:29:26 until someone tries to run it somewhere else lol 22:29:57 --- quit: Sonarman (Read error: 110 (Connection timed out)) 22:31:15 Yup, but knowing what parts are important is also important, and is frequently surprising. 22:32:10 ya 22:32:14 profiling helps 22:33:44 Is there a profiler that gives more usable output than gprof? It seems more function oriented, and as I try to avoid functions it ends up not being very useful. 22:34:09 forth teaches hyou to factor your code 22:34:11 (that is something better for profiling than clock() or time()) 22:34:15 FACTOR your code :P 22:34:31 huh? 22:35:07 you said you avoid functions 22:35:07 I use the inline keyword, and my code is factored. 22:35:14 ok :)O 22:35:43 I'm searching for more of an instruction level profiler that would work w/ C. 22:35:52 aha 22:36:40 the best kernel humour can be found in /usr/src/linux/drivers/net/sunhme.c 22:36:41 one of suns original network cards was named the Sun Big MAC 22:36:41 (mac as in mac address, network wise) 22:36:43 some future developers decided to continue on the naming scheme and produced the Sun Happy Meal Ethernet adapter (hme)... 22:36:46 lol 22:37:21 I hope that McDonalds doesn't sue ;) 22:37:26 * kc5tja liked Commodore's continued system of naming their I/O chips after government organizations. :) 22:37:27 lol 22:37:34 lol 22:37:41 Motorola had the PIA, MOSTek had the VIA, and then Commodore had the CIA. :D 22:38:02 It was rumored the Commodore 128's I/O interface chip was supposedly called the FBI chip, but it turned out to be just a refined CIA. :) 22:39:18 imaginator: gprof can give you line-level information if you compile the program with debugging flags and pass gprof the right options. 22:39:48 Nutssh: I'll look into that then. Thanks 22:39:51 And, there are ways to do basic block level profiling, which can also be useful. 22:40:36 (the statistical sampler gives the current PC at 100hz, which gprof can combine with symbols to assign that PC to a line of code or to a function, but the raw PC statistics are there.) 22:41:53 zzz time 22:41:59 hi folks ! 22:42:13 serg lol 22:42:18 see my homepage: http://cryptomancer.narod.ru 22:42:34 all in RU, but maybe add some ENG 22:42:49 I440r: it has link to IS-FORTH ;)) 22:42:59 --- join: vegemite (leontopod@intertwingled.net) joined #forth 22:43:03 cool :) 22:43:15 ? 22:43:26 --- nick: vegemite -> Teratogen 22:43:30 HALLO! 22:43:33 hi lol 22:43:51 seems like I440r eaten a LOL pill ;)) 22:43:55 Nutssh: that sounds great. 22:44:03 :) 22:44:49 actually i440r needs to eat a sleeping pill :/ 22:45:17 anyone here a rubics cube fanatic ? 22:45:32 ;(((((( i hate drugs (anything mind-active ex .. 22:45:42 ..ex vitamines found in natural food 22:45:50 i mean its time for bed, i never do drugs like that 22:46:07 ;) 22:46:13 me slept a little too 22:46:25 was playing GTA3 ;) 22:46:43 gta3 ? 22:46:51 I440r, hallo! 22:47:00 shoot a bus and chase it till it burn, looking how it rampages and smashes other cars 22:47:00 eh ? 22:47:09 I just upgraded from win 98 to win 98 se 22:47:10 wh00t 22:47:10 GTA3 = Grand Theft Auto 22:47:30 great game ! drive'n'shoot ;)) 22:47:33 i saw a mpg today of a us helecopter watching 3 iraqui guys setting up to plant a road mine 22:47:38 my favorite game of all time was and is Descent 2 22:47:43 although I here there is a Descent 3 22:47:50 he shot at one of them as he crossed the road and LITERALLY tore the guy to pieces 22:48:04 the others were on the left side of the road and right side of the road each 22:48:19 the second iraqui was fired on 2 seconds after the first 22:48:23 and HE was tore up 22:48:33 the third hid behind a druck and would have stayed hidden 22:48:40 but he slipped and fell and came into view 22:48:43 not for long 22:48:52 seems like VERY BAD play movie 22:48:53 i didnt like the decent games heh 22:49:14 it was actual footage from the helecopter 22:49:21 vere they blind and deaf ?????? did they hear and see chopper ??? 22:49:25 you were seeing exactly what the pilot was seeing 22:49:32 you see a shudder in the view as he fired 22:49:41 then you see the bullets rip the target to pieces 22:49:56 no. he was at least a couple of mies away 22:50:04 but why target was so stupid ??????? 22:50:07 using infared 22:50:16 they were iraqui 22:50:20 would YOU plant a mine in view of enemy chopper ???? 22:50:40 the first guy was crossing the road looking happy, you coule TELL!!!! 22:50:53 he was bouncing about ina "weehee im gona plant a bomb hehe" mannter 22:51:04 he didnt knwo the chopper was there 22:51:10 hey, was he deaf ?? 22:51:13 noi 22:51:20 the helecopter was 2 miles awayu 22:51:31 can you hear a helecopter 2 miles away ? 22:51:46 it might even have been further away - but if he was his shooting was awesome 22:52:06 I440r: Computers are wonderful things. :) 22:52:06 can YOU hit anything from 2 miles, even from bench-rest, not to say from chopper what is not stable gun platform ? 22:52:25 kc5 yes but his shooting was STILL awesome if that was further than 2 miles 22:52:41 serg duh ive seen people who could 22:52:56 a 30-06 will go 2 miles NO problem 22:53:01 these were 30 mm cannon 22:53:34 imagine 80 or 90 of those slamming into you in half a second flat 22:53:48 actually the rate of fire wasnt that fast 22:54:06 but shit all you could see on the infa-red was a huge patch of warm sand 22:54:42 even 7.56 of Mosin goes 4 km, but think of _dispersion_ 22:54:46 i can hit a 6 inch target with my 45 caliber handgun at 100 yards :) 22:55:06 drop can be calculated 22:55:23 wind interfearance would be negligable to a 30 mm cannon at those ranges 22:55:31 specially at those rates of fire 22:55:46 the recoil would cause more vertial drift 22:56:15 ok. that 45 at 100 yards is without a rest 22:56:48 listen, I440r: 22:57:06 IL-2 of WW2 time had 2 20-mm rapid fire cannons 22:57:26 ok 22:57:31 it shot _tank_ from 1000-200m w/ collimator aim 22:57:38 erm actually ive been saying 30mm and i meant 20 lol 22:57:57 of 100-400 rounds, wery few hit so huge target, coz of _dispersion_ 22:58:16 very few _if any_ in some passes 22:58:30 i saw the bullets from these shots hit a 6 to 8 foot ciccle 22:58:36 with the target centered therein 22:58:48 was that helecopter moving or stationary 22:58:54 this one was hovering 22:58:55 watching 22:58:59 picking its time 22:59:04 chosing its targets 22:59:40 IL-2 was strafing at panzer column at 300-400 km/h 22:59:53 thats why they missed 23:00:29 If you're hovering, you're basically sniping. 23:00:35 yup 23:00:41 hell no ! 23:00:43 thats exactly what this guy was doing 23:01:04 try 'sniping' from a swing ;)) 23:01:11 serg i think the apache is kinda more advanced than a ww2 helecopter hehe 23:01:18 lol 23:01:22 Serg: Our choppers can stay stationary as a rock when hovering due to gyroscopic stabilization. 23:01:47 how much does it weight ? 23:02:03 the apache usually pokes its head up ofer the crest of a hill, lets its electronics take a snapsoot. then it ducks for cover 23:02:04 It'd take some pretty nasty cross-winds to make it swing while hovering, and I know for a fact that Iraq doesn't have heavy cross winds. It *can't* -- it's a desert. :) 23:02:18 the pilots then pick their targets and take em out one at a time 23:02:32 what is speed and weight of a round (bullet+gases) ? 23:02:40 no idea heh 23:02:54 i cant even tell you what my hand loaded 223's chrony at lol 23:02:57 Serg: That's rather classified information anyway. There's no way we'd be able to find out as civilians. 23:03:00 but there a 69 grain bullet 23:03:23 fu.. grains, let's talk in SI 23:03:28 Hahahah :) 23:03:37 lol i cant shoot that in my ar-15 lol :P 23:04:00 i think i wanna get my ar a new barrel 23:04:09 because this one has excessive freebore 23:04:16 most modern rifles do 23:04:18 bah 23:05:34 really, i suspect what damn propagandf men hired innocent 'actors' from poor dropouts to 'plant a mine' as play movie, and then meanly killed 'em point-blank 23:06:02 point blank lol 23:06:11 and i change my mind _only_ then i see or calculate what such far hit is possible 23:06:14 no. you could tell that one guy was really really happy lol 23:06:24 he was lioke "woohooo!!! im gona plant a bomb!!!!" 23:06:33 oopts.. think again buddy 23:06:50 sure - he was thinking of money he'll get for play, but caught a 20mm shell 23:07:18 more than just one 23:07:23 40 or 50 if you ask me 23:07:27 ;( 23:07:30 all within the space of a second or 2 23:07:34 anyway time for zzz 23:07:49 let us go Forth, brothers 23:07:55 anyway, i'll change my mind only after seeing or calculating so far hit 23:07:56 :) 23:08:00 yea, let us go Forth into the valley of the Shadow of Lisp 23:08:07 lol 23:08:27 yea tho i walk in the shaddow of the valey of LISP. i shall fear NO evil! 23:13:10 You fools! The LISP cannot be destroyed with your weapons! It can only be destroyed in the land of McCarthy, where it was forged!! 23:13:13 Oops, wrong story. 23:14:24 * Serg did not grasp Lisp as easy as Forth ;)) 23:15:45 lol 23:16:30 lotsa parens like holes in a road, i stumbled over at every step 23:18:45 It definitely takes some getting used to. 23:18:52 A good tutorial is a requirement. 23:19:11 But I still think it's very beneficial to learn Lisp (or Scheme, a very, very close relative to Lisp). 23:33:07 --- part: Nutssh left #forth 23:40:29 --- quit: Teratogen ("SKYKING, SKYKING, DO NOT ANSWER") 23:43:18 kc5tja: only if i'll have a task what can be done in Lisp superiorly to other languages 23:43:25 what are such tasks ? 23:48:57 Serg: That's like saying you'll only learn C only if it can be used for tasks that it's well suited for. 23:49:05 Lisp is a general purpose programming language. It can be used for anything. 23:49:47 * kc5tja notes that AutoCAD is written in Lisp, as is Emacs. 23:50:10 Many plug-ins for GIMP are written in Scheme, a simplified dialect of Lisp. 23:50:20 Etc. 23:51:38 except that Lisp has certain fairly important features that make it slightly more 'general purpose' than, say, C. 23:53:01 hi cleverdra ;))) 23:53:15 howdy, Serg =) 23:53:24 so, what adwantage Lisp gives me ? 23:54:14 dynamic typing, the compiler at run-time, and the language at compile-time =) 23:57:06 * Serg is screwed - main W2K server hung like fascist schwine in Nurenberg ;(( 23:59:59 --- log: ended forth/04.01.26