00:00:00 --- log: started forth/04.08.05 00:36:52 --- join: Mur (~mur@mgw2.uiah.fi) joined #forth 00:36:57 --- quit: doublec ("Leaving") 00:49:25 --- quit: Mur_ (Read error: 110 (Connection timed out)) 01:42:25 --- join: Mur_ (~mur@uiah.fi) joined #forth 01:54:38 --- quit: Mur (Read error: 110 (Connection timed out)) 01:59:09 --- join: Fractal (jah@selling.kernels.to.linus.torvalds.at.hcsw.org) joined #forth 02:14:48 --- quit: Mur_ (Remote closed the connection) 02:15:27 --- join: Mur (~mur@uiah.fi) joined #forth 03:14:33 --- join: Topaz (jonny@spc1-horn1-6-0-cust217.cosh.broadband.ntl.com) joined #forth 03:52:28 --- join: Mur_ (~mur@smtp.uiah.fi) joined #forth 04:03:07 --- join: crc (crc@0-1pool36-91.nas35.philadelphia1.pa.us.da.qwest.net) joined #forth 04:05:00 --- quit: Mur (Read error: 110 (Connection timed out)) 04:05:49 --- join: chris2 (~chris@p50914939.dip0.t-ipconnect.de) joined #forth 04:17:05 --- quit: madwork (Read error: 104 (Connection reset by peer)) 04:17:06 --- quit: madgarden (Read error: 104 (Connection reset by peer)) 04:33:19 anyone know of papers on optimizing forth compilers? 04:34:16 I've been looking around a bit, too... I think forth.org had some links. 04:34:49 or on stack based languages in general... 04:35:29 http://www.complang.tuwien.ac.at/projects/rafts.html 04:35:38 That was what I found. 04:35:47 thx 04:44:10 --- quit: Mur_ (Remote closed the connection) 04:44:41 --- join: Mur (~mur@uiah.fi) joined #forth 05:16:35 --- join: Mur_ (~mur@uiah.fi) joined #forth 05:29:07 --- quit: Mur (Read error: 110 (Connection timed out)) 06:04:16 --- quit: chris2 ("Client exiting") 06:21:55 --- join: I440r_ (~mark4@216-110-82-203.gen.twtelecom.net) joined #forth 06:22:56 --- join: madwork_ (~madgarden@derby.metrics.com) joined #forth 06:25:34 --- quit: Mur_ (Remote closed the connection) 06:26:05 --- join: Mur (~mur@smtp.uiah.fi) joined #forth 07:47:29 --- quit: crc ("Time for bed... Goodnight all!") 07:57:00 --- join: Mur_ (~mur@kyberias.uiah.fi) joined #forth 08:08:44 --- quit: Mur (Read error: 110 (Connection timed out)) 08:29:01 --- nick: Mur_ -> Mur 08:33:52 --- join: warpzero (~warpzero@mi092.dn183.umontana.edu) joined #forth 08:36:47 --- join: Mur_ (~mur@mgw2.uiah.fi) joined #forth 08:38:39 --- quit: Mur (Read error: 60 (Operation timed out)) 08:47:34 --- join: I4404__ (~mark4@216-110-82-203.gen.twtelecom.net) joined #forth 08:52:21 --- quit: fridge (Read error: 110 (Connection timed out)) 08:59:14 --- join: fridge (~Jim@CommSecureAustPtyLtd.sb1.optus.net.au) joined #forth 09:01:08 --- quit: I440r_ (Read error: 110 (Connection timed out)) 09:04:40 --- join: Astrobe (~astrobe@ARouen-106-2-2-82.w193-251.abo.wanadoo.fr) joined #forth 09:13:07 --- part: Astrobe left #forth 09:14:14 --- join: I440r_ (~mark4@216-110-82-205.gen.twtelecom.net) joined #forth 09:17:06 --- quit: fridge (Remote closed the connection) 09:18:45 --- join: fridge (~Jim@CommSecureAustPtyLtd.sb1.optus.net.au) joined #forth 09:28:06 --- join: fridge_ (~fridge@dsl-203-33-167-9.NSW.netspace.net.au) joined #forth 09:29:46 --- quit: I4404__ (Read error: 110 (Connection timed out)) 09:40:24 --- quit: I440r_ (Read error: 110 (Connection timed out)) 09:41:55 --- join: kc5tja (~kc5tja@66-74-218-202.san.rr.com) joined #forth 09:42:05 --- mode: ChanServ set +o kc5tja 09:43:09 Well, folks, I am seriously considering ditching the TTA architecture in favor of a more traditional CPU architecture at this point. I am just plain NOT being successful in my attempts at engineering this new architecture so everything runs clean and smoothly. 09:44:16 For example, the way instruction fetching works naturally sets up a two-stage pipeline. Therefore control flow operations would have a branch delay slot associated with them, including subroutine calls! 09:46:13 Working around these issues will involve a LOT of logic design (read, 'gates'). 09:47:18 For example, to eliminate the two-stage pipeline, I need to drive the internal bus multiplexors with the values read directly off the data bus. Put another way, there is no distinct instruction register. 09:47:55 But as soon as wait-states are introduced (e.g., as when reading or writing data to memory, for example), this obviously means the contents of the data bus will be lost, and therefore, the "instruction" will change. 09:48:59 This also affects how literal data is loaded into the microprocessor as well. 09:49:19 hi 09:50:02 :/ 09:50:06 suck 09:50:23 Therefore, I need to implement enough logic to temporarily store the last received instruction, and be smart about when when I load the instruction register and when I don't. 09:50:36 :/ 09:50:59 you could make a staack addressomg ,acjomer 09:51:10 umm...what? 09:51:17 err 09:51:21 forgive, i just woke up 09:51:24 stack addressing machine 09:51:37 arke: I was making a stack machine. 09:51:39 instead of registers, you pass offsets into the stack 09:51:47 dunno how good that would work 09:51:55 arke: Offsets into stack == registers. 09:52:11 swap would be xchg 0, 1 09:52:20 over would be push 1 09:52:22 etc 09:52:34 That does not solve my issues. 09:52:37 :/ 09:52:39 okies. 09:52:47 forgive, i just woke up 09:52:53 First of all, you're introducing the notion of "operations" into the instructions, which isn't TTA anymore. 09:53:21 well, you said you wanted to ditch teh tta 09:53:24 so i have an idea 09:53:27 one that sucks :/ 09:53:31 Second, a stack architecture really needs no bits for addressing into the stack -- zero-operand is the ideal for code density and execution speed. 09:54:23 :/ 09:54:48 At this point, I'm very frustrated. 09:54:59 so you think you couldnt fit a decent tta on a FPGA? :/ 09:55:09 I never said that. 09:55:32 oh 09:55:38 so its just a hassle to do all of that? 09:55:42 but it would fit? 09:55:49 I'm just saying, getting the TTA concept to work will involve a LOT more work and will be a LOT more complex than I'd originally anticipated. 09:55:57 * arke note to self: turn on brain 09:56:04 :/ 09:56:13 And frankly, I'm getting impatient. 09:57:31 I came a long, long way on the MISC architecture, because it was trivial to design, easy to get code running for, and it was extremely fast in its execution. 09:57:54 Now, I have to engineer a whole new CPU architecture, a whole new compiler that has to be made to fit that architecture, etc. 09:58:05 Dude, I haven't even gotten to engineering the peripheral chips yet. 09:58:07 :'( 09:58:08 This project is getting out of hand. 09:58:48 I'm thinking of just going with an OpenRISC 1200 processor, and letting that be the main CPU. 09:58:51 what was the exact thing in your MISC that violated the patent again? 09:58:58 arke: EVERYTHING. 09:59:02 oh, and then have an optimizing compiler? :) 09:59:06 kc5tja: er...... 09:59:15 kc5tja: it wasnt just something like the idea of packed instructions? :/ 09:59:59 arke: The very *definition* of a MISC was in that patent. The packed instructions, how the stacks operated internally, the pre-computation of results, etc. 10:00:17 shit :/ 10:00:43 Because it *all* ties together -- *all* those features combined are what makes the MISC uniquely adept at doing things. 10:00:46 (and fast) 10:01:23 Anyway, the OR1K architecture is essentially just like a MIPS architecture. 10:01:31 cool 10:01:33 And it's available off of OpenCores, so it's under a free license. 10:01:44 They also have VGA controllers, SDRAM controllers, etc. 10:01:46 an optimizing compiler could create good forth code for it, i think 10:01:51 aah, coool 10:02:06 Problem is, Forth wastes the overwhelming majority of the chip's resources. 10:02:17 Forth just plain doesn't need 32 general purpose registers. 10:02:28 yep :/ 10:02:34 Although, it IS true that in the O1K, there is no distinction between an integer and floating point register. I *like* that. 10:02:40 :) 10:03:33 * arke googles 10:03:38 Supposedly, in a Xilinx Virtex II FPGA, they have achieved 33MHz maximum clock rate on it, which is fast enough for my needs. 10:03:58 cool 10:04:20 only problem is writing a compiler that can take advantage of the RISC stuff :/ 10:04:29 forth doesnt exactly lend itself well 10:04:45 no, but with a good set of libraries, you can mitigate that. 10:05:01 libraries? or copmiler? 10:05:14 * arke would LOVE to write an optimizing compiler! 10:05:33 A good set of vector words can really help increase the speed of a program, if you can think in terms of vectors. 10:05:47 well, help me think in vectors :) 10:05:55 arke: Learn J. 10:06:00 :/ 10:06:00 ok 10:06:02 * arke google.s 10:06:50 I can't help you learn anything you don't really want to learn, and it'll take me FOREVER to teach you the basics of vector programming, when a set of tutorials for J do that already. 10:07:17 okies 10:07:29 The briefest, most concise, synopsis I can give is: Lists are the core data structure of Lisp and Scheme, and tables for Lua. In a vector language, it is the humble array. 10:07:45 hmm 10:07:47 * arke reads 10:08:15 The other thing that I was thinking of using the system for also was Smalltalk and Oberon. 10:08:32 aah 10:08:45 its kinda like SIMD im getting the impression 10:08:45 This would increase the appeal of the computer to those beyond the Forth community. 10:09:13 Yes, vector operations have (conceptually) one "opcode" and one or two vectors of data, each of which has N elements, where N is some positive integer. 10:09:30 That one opcode *ideally* operates on all elements of a vector concurrently. 10:09:40 aah, cool. 10:09:58 but why would that help making a forth faster on a RISC? :/ 10:10:04 Doesn't Joy do something similar with stacks? 10:10:07 --- nick: madwork_ -> madwork 10:10:09 madwork_: No. 10:10:14 * arke 's brain is still on the bed pillow, sleeping 10:10:37 arke: Because, as with J, it eliminates explicit looping. 10:10:44 If you want to add two vectors, you say "V+". 10:11:04 Not, BEGIN DUP WHILE 2DUP @ SWAP @ + somehow-store-it 1+ SWAP 1+ SWAP REPEAT 10:11:14 (you get the idea) 10:11:28 V+ would be coded in hand-tuned assembly language for the underlying hardware. 10:11:32 wow 10:11:38 there is a LOT of stuff to this language' 10:11:46 Yes, and the language is *TINY*. 10:11:50 It's just how it's all put together. 10:12:15 Also, J's performance competes VERY well with that of raw C -- and it's purely interpreted, like the old 8-bit BASICs! 10:12:29 woah 10:12:31 nice 10:12:34 It doesn't even compile to an intermediate bytecode first (in fact, no need to -- each operation is one, maybe two ASCII characters) 10:12:48 --- join: I440r_ (~mark4@216-110-82-66.gen.twtelecom.net) joined #forth 10:12:48 This is what convinced me of the viability of vector processing. 10:12:49 (hey, I'd write a GW-BASIC clone for the kestrel :D ) 10:13:14 arke: Dude, if you can make a BASIC implementation that supported good vector operations, you'd be rocking. 10:13:18 And you'd have a loyal fan base, I'm sure. 10:13:30 --- quit: fridge ("Leaving") 10:13:37 in-basic SIMD?? :/ 10:13:41 Why not? 10:13:48 nice.... 10:13:50 :D 10:13:50 Nothing wrong with the idea. 10:13:54 And Forth doesn't map to vector processing? 10:14:06 arrays are already there. Now add some instructions to add them 10:14:07 :) 10:14:10 madwork: Forth can map as much or as little as you like. 10:14:26 madwork: My point is, Forth needs a vocabulary (e.g., a library) of words to make it happen. 10:14:42 Otherwise, Forth totally wastes the underlying capabilities of the CPU. 10:14:58 madwork: Note: I'm considering ditching the TTA in favor of a more traditional RISC -- the OpenRISC 1200. 10:15:14 Shit, I gotta get to work. 10:15:15 * kc5tja sighs 10:15:29 :/ 10:15:29 And J doesn't have a vocabulary of words? 10:15:33 But anyway, here's my rationale: I'm getting sick and tired of waiting. 10:15:38 madwork: What? 10:15:41 If it's simpler, do it! 10:15:52 is there an emulator for teh openrisc 1.2k floating around? 10:15:56 and/or assembler? 10:15:56 madwork: J is **THE** quintessential vector programming language -- it is a direct descendent of APL! 10:16:18 I'm just not (immediately) seeing how J is doing anything a hand-tuned Forth can't do similarly. 10:16:18 arke: It's all on OpenCores. It even has a version of Linux ported to it. 10:16:27 madwork: THAT IS MY POINT. 10:16:35 Oh, heh. :) 10:17:06 madwork: If J, a BASIC-like language, can get C-like speeds, then so can Forth. I don't NEED to optimize the Forth environment to hell and back *IF* (a) a good set of vector-oriented words are available, and (b) only those words are optimized. 10:17:22 Yes. 10:17:59 The idea being, optimize the most-often used words by coding in raw assembly language (or some other suitable language conducive to taking full advantage of the underlying CPU), and just use Forth as a "binding language" so to speak. 10:18:04 I'll be doing something like this with Forthy as it advances (within my abilities), since I have stacks as a basic type. 10:18:12 Right. 10:18:14 Forth would execute so "rarely" compared to the SIMD words that its performance is inconsequential. 10:18:38 Yes of course. It's all in the hardware. 10:18:46 No, it's in the software. 10:18:58 But the SIMD words are hand-tuned. 10:19:15 * madwork scrolls back looking for "SIMD" 10:19:26 OpenRISC 1200, while it does have the vector instruction extension, sucks ass for vector processing. It's not even superscalar. 10:19:43 NO processor today gets hardware vector operation right. 10:19:44 NONE. 10:19:46 >:( 10:20:03 You'll be the first? 10:20:21 No. The Amiga had a *damn* fine (and *damn* fast for its time) vector processor -- the blitter. 10:20:31 Problem is, it was limited only to doing binary operations. 10:20:33 Ahh. 10:20:37 binary LOGICAL operations, that is. 10:20:45 That's how it got its graphics so damn fast. 10:20:59 The CPU was actually slower than that in a Macintosh. 10:21:03 (by about 1MHz) 10:21:35 Well I'll be looking forward to your next design. Sounds like you're going in an interesting direction. 10:21:54 Well, I full-heartedly intend on making good on my promise of a C64-like system. 10:22:06 Cool. :D 10:22:12 That is never, ever going to change. 10:22:19 Because that is what distinguishes my computer from a PC or Mac. 10:22:21 im making a GW-BASOIC :) 10:22:27 BASOIC? 10:23:03 Anyway, i gotta get to work. 10:23:05 basic 10:23:11 lates kc5tja 10:23:17 It's even too late for me to shower now. 10:23:39 :/ 10:23:43 sorry :/ 10:24:03 Don't worry -- it's not like I sweat there or anything. (Unless the A/C is broken again, in which case, they get what they deserve.) 10:24:11 Well, get going! :) 10:24:32 All i can say is this: I'm getting damn impatient, and I've not even gotten around to designing the peripheral chips yet. 10:24:46 And I found a VGA controller on OpenCores the other day too, which I'm probably going to use as well. 10:24:48 I mean, get going to work. ;) 10:25:26 you're making him feel as if we d0ont want him here :) 10:25:31 I just hope I can get everything as Verilog source files. 10:25:50 I just want the guy to get to work on time so he can make money and Kestrels. ;) 10:25:51 OpenRISC 1200 I know comes in Verilog source; but the VGA controller may not, in which case, I may have to implement my own anyway. 10:25:58 Heheh :) 10:26:02 OK, I'm out. 10:26:09 Later! 10:26:09 --- quit: kc5tja ("THX QSO ES 73 DE KC5TJA/6 CL ES QRT AR SK") 10:26:27 :) 10:26:42 arke, seperated control-flow is dreamy compared to how I had it before. 10:27:01 cool 10:27:14 Yes. 10:27:59 Now I can work on some of the decompiler aspects. 10:51:58 --- quit: fridge_ ("rock out with your cock out") 11:04:46 --- join: Mur (~mur@kyberias.uiah.fi) joined #forth 11:15:31 --- quit: Mur_ (Read error: 110 (Connection timed out)) 11:25:33 --- join: Mur_ (~mur@kyberias.uiah.fi) joined #forth 11:38:05 --- quit: Mur (Read error: 110 (Connection timed out)) 11:47:00 --- join: TheBlueWizard (TheBlueWiz@207.111.96.120) joined #forth 11:47:00 --- mode: ChanServ set +o TheBlueWizard 11:48:17 --- join: tgunr (~davec@vsat-148-63-4-107.c001.g4.mrt.starband.net) joined #forth 11:50:12 --- quit: SDO (Read error: 60 (Operation timed out)) 11:54:40 --- join: arke_ (~chris@wbar8.lax1-4-11-100-108.dsl-verizon.net) joined #forth 11:54:40 --- quit: arke (Read error: 104 (Connection reset by peer)) 12:01:24 --- join: ASau (~root@217.16.31.100) joined #forth 12:01:33 Dobryjj vecher! 12:03:00 ASau hiya :) 12:04:07 hi 12:04:11 Hi 12:09:52 slava hiya 12:09:56 Robert hiya 12:10:52 --- quit: tgunr (Read error: 104 (Connection reset by peer)) 12:11:56 Heh. 12:12:01 You have a memory! 12:12:06 Unlike certain Forth bots... 12:12:36 huh? 12:12:39 --- join: tgunr (~davec@vsat-148-63-4-107.c001.g4.mrt.starband.net) joined #forth 12:12:49 tgunr hiya 12:14:35 TheBlueWizard: The correct-ordered greetings. 12:16:25 ah...heh...though I may forgot certain localization versions :-] 12:17:05 I think I remember most, actually. 12:17:22 * TheBlueWizard nods 12:17:30 But only some languages.. I don't speak a single word french, for example. ;) 12:17:35 Or Spanish. 12:17:41 Except for 'XD'. 12:17:48 do you know when kc5tja usually comes online? 12:17:57 XD? 12:18:23 TheBlueWizard: he had to go to work, so expect him in either 9 hours or not at all today 12:18:44 TheBlueWizard: XD is the favourite smiley of most spanish-speakers. 12:18:49 --- quit: tgunr (Read error: 104 (Connection reset by peer)) 12:18:54 --- nick: arke_ -> arke 12:18:56 arke_: I see 12:20:06 Robert: oh really? hmm...I do know some French and Spanish (I am picking up some Spanish words from all those signs and pamphlets in my town...a lot of them :) 12:20:43 --- join: tgunr (~davec@vsat-148-63-4-107.c001.g4.mrt.starband.net) joined #forth 12:23:15 TheBlueWizard: Not too much Spanish around here... Some immigrants (those we didn't send back to south america to be shot), but not really any public signs in it. :) 12:23:26 :) 12:23:28 TheBlueWizard: It's either Swedish or English.. 12:24:33 * TheBlueWizard nods 12:33:22 --- join: fridge (~fridge@dsl-203-33-167-9.NSW.netspace.net.au) joined #forth 12:33:33 --- quit: fridge (Client Quit) 12:35:32 --- join: fridge (~fridge@dsl-203-33-167-9.NSW.netspace.net.au) joined #forth 12:35:42 --- quit: fridge (Client Quit) 12:38:06 --- join: fridge (~fridge@dsl-203-33-167-9.NSW.netspace.net.au) joined #forth 12:47:22 all bye 12:47:33 --- part: TheBlueWizard left #forth 12:50:16 Hi ASau. 12:51:23 ok, ratios work and i have a test suite to prove it :) time to start work on floats. 12:51:29 for now, i'll use libc routines to do str <-> float conversions 12:52:26 'Tis what I do. 12:52:56 what funcs do you use? 12:53:19 sprintf, atoi, atof 12:53:36 ok 12:54:02 * arke is commenting code i didn't write 12:54:11 * arke is commenting PIC programming code 12:54:13 * arke hatesit 12:54:19 Robert: GONNA KILL YOU ASAALKAAAAGS 12:54:24 :) 12:54:26 o_O 12:54:35 That was unexpected. 12:54:55 well, you could have AT LEAST left a reference to the origin of the code 12:54:57 but noooooo 12:55:02 >:( 13:01:33 anyway... 13:01:42 this is gonna take me awhile 13:02:02 Bah. 13:02:08 Just go on. 13:02:12 no 13:02:15 i need this commented 13:02:15 !!1 13:02:23 That's your problem then. 13:02:24 just because you are a slacker does not mean I am :) 13:02:34 its not that bad 13:02:39 just requires some cross-checking 13:03:17 hah 13:03:25 Who's being a slacker allowing himself getting stuck at that crap? 13:03:36 ... 13:03:38 my dear friedn 13:03:59 I am taking the time to sift through those pages, check up the numbers in a reference, figure out what they do, comment on it. 13:04:05 and if it doesnt make sense, check it again 13:04:07 elsewhere 13:04:09 that takes effort 13:04:11 im not a slacker 13:04:12 :) 13:05:01 It's like saying I'm not a slacker if all I do is going in the woods picking mushrooms and feeding invisible friends with them, because that too requires some effort. 13:05:15 :D 13:05:19 ok, lets stop 13:05:32 slackForth 13:05:37 Robert: by the way - I do not see how this could work. It's doing an unsupported PIC call 13:05:41 Robert: I always wondered who that guy in the woods was 13:05:45 arke: Oh? 13:05:50 fridge: :) 13:06:02 fridge: You're welcome to help me collecting them. 13:06:18 Robert: yeah 13:06:24 Look it up yourself 13:06:52 0xff as byte 4 - that means bit 1 is set which is unsupported 13:07:30 Hm, OK. 13:08:05 * Robert solves the problem by quietly ignoring it. 13:08:26 grr 13:08:35 could you PLEASE figure out where you got that code from? 13:10:39 man, this is so screwed up 13:10:43 pleae, find out who 13:14:02 Uhm... 13:14:05 How should I know? 13:14:08 :P 13:14:15 actually, hold on, i think I might have figured this out 13:14:21 YOU STOLE THE FUCKING CODE! 13:14:24 Oh.. Tell me when you got it. 13:14:36 So WHAT? It's not like I'm its parent. 13:14:39 :/ 13:14:45 you need to know the father, mmkay? 13:15:01 Heh.... irq.asm - mein Sorgenkind. 13:15:08 :) 13:16:15 haha 13:26:37 Robert: alrighty, got it figured out 13:26:42 Nice. What was it? 13:26:46 Robert: it works. its compliant. 13:26:56 Robert: it initializes the PIC 13:27:02 Robert: masks all interrupt 13:27:05 The 0xff command was valid? 13:27:14 Robert: yes - I saw it in the wrong context 13:27:16 (YAY I RULE) 13:27:17 --- quit: I440r_ ("Leaving") 13:27:30 Robert: since it was in init mode, not operation mode by then 13:27:59 would you like me to send you the file once I'm completely done? (just have a few more things to do) 13:28:22 Robert: wait --- did you write that code? :/ 13:31:07 Robert: another question - out dl, al is valid,right? 13:33:10 What are you porting it to? 13:33:11 No 13:33:26 Or are you just fixing it up? 13:35:28 fixing it up a bit, because its massively duplicated 13:36:41 also, i'm having it save the clobbered registers 13:36:46 so that they .... aren't clobbered 13:44:56 Is there a good reason why ANS forth makes seperate compile words for stuff like CHAR? I'd think you're more likely to just want a char immediately during a word definition, rather than having to know to type [CHAR]. If you really want to, just POSTPONE it. Seems like a compiled CHAR is a less-likely case. 13:45:53 because its ANS thats why 13:46:54 madwork: Well, CHAR can be useful for compile-time stuff. 13:50:50 Robert: teehee. the new irq_enable looks longer because of the comments ;) 13:50:59 Robert: but its actually shorter than the old one 13:51:59 Robert, example? 13:52:32 I tend to think I'm more likely to want the char literal during most of my word definitions, than the behaviour of CHAR at run-time. 13:52:32 madwork: Stuff like CHAR * CONSTANT MULTIPLICATION-OPERATOR 13:52:58 That's run-time usage... 13:55:10 Hmm... Run-time is pretty much the same as compile-time. Excuse my C-influenced terminology :) 13:55:25 Heh. 13:55:27 ( 0 ) 1 3 /f . 13:55:27 # 13:55:31 ok, making progress :) 13:55:34 That didn't make too much sense. Heh. 13:55:50 (re: my own statement...) 13:55:52 I'm just saying that : foo [char] * 42 emit ; is silly. 13:55:58 ( 1 ) 1 3 /f 1 3 /f 1 3 /f + + >fixnum . 13:55:58 1 13:56:02 great :) 13:56:08 now i need to do float>str and float>str 13:56:37 slava: If you come up with any good code, I'm interested- 13:56:51 * Robert would also like floating-point support in some of his projects. 13:57:09 well for now i'm using libc to do the string conversions 13:57:13 i'll write my own code later 13:57:28 Why? 13:57:39 why libc, or why write my own? 13:57:44 Why your own. 13:58:06 well i use unicode strings, and doing a float -> c string -> factor string just seems messy. 13:58:10 or vice versa 13:58:19 Ahh, of course. 13:58:25 Taken from Forthy: snprintf(tmp, 32, "%.16g", value->value.f); 13:58:35 how big is tmp? 13:58:43 33 13:58:45 ah 13:59:20 Next line is: tmp[32]=0; 13:59:21 ;) 13:59:39 Mmm... paranoia. 14:00:10 doesn't snprintf write a null byte? 14:00:15 Well, snprintf won't write the last null if the string's too long. 14:00:54 oh. 14:01:10 So yes, just because I'm paranoid, doesn't mean people aren't following me. 14:01:58 void primitive_str_to_float(void) 14:01:58 { 14:01:58 char* c_str = to_c_string(untag_string(env.dt)); 14:01:58 env.dt = make_float(atof(c_str)); 14:01:58 } 14:02:27 madwork: :) 14:02:49 note i don't have to deallocate c_str manually :) 14:03:13 slava, your C code looks very lispy somehow. ;) 14:03:27 :) 14:03:45 c_str is stored in a temporary buffer? 14:03:53 Or just the string, rather. 14:04:32 c_str is allocated in the heap 14:04:38 by to_c_string 14:05:10 Yes. make_float() deallocates it then? 14:05:15 no 14:05:17 i have gc 14:05:24 make_float takes a double argument 14:05:25 Ah. 14:05:36 my floats are 'boxed', unfortunately. 14:05:41 boxed? 14:05:59 yes, each float is a heap allocated object storing the float value 14:06:06 Ahh. 14:06:13 heap allocation is fast -- its just a HERE increment 14:06:23 but this uses up memory quickly if you do heavy fp calculation, so you need frequent gc 14:06:33 My only GC is the stack. 14:06:44 :D 14:06:45 Or rather, value copies and drops. 14:06:48 yes, at least i don't have to copy strings when i do 'dup' :) 14:06:55 :) 14:06:56 Heh. 14:07:01 Well, I can change that easily enough. 14:07:38 So you have reference-tracked strings then. 14:10:43 hmm 14:10:45 almost works: 14:10:46 ( 0 ) "12.3" str>float . 14:10:46 16901403 14:10:46 ( 1 ) 1 3 /f unparse-float . 14:10:46 "0.3333333333333333" 14:11:05 oh it thinks str>float returned a fixnum... 14:11:59 --- quit: tgunr (Read error: 104 (Connection reset by peer)) 14:14:25 Robert: alright, irq.asm is l33t c0mpl33t 14:15:48 n33t. 14:16:05 uum 14:16:16 would you host teh f2? :) 14:16:26 --- nick: TomasuAway -> Tomasu 14:16:27 Sure. 14:16:29 * Tomasu is back (gone 43:30:30) 14:16:30 YAYAYAYAYAAYYAYA 14:16:30 ( 1 ) 0.3 0.3 + . 14:16:30 yay 14:16:30 0.6 14:16:43 yayayayayayyyyy 14:16:43 ;) 14:17:22 then you can take a look and change things 14:17:23 :) 14:19:50 --- join: tgunr (~davec@vsat-148-63-4-107.c001.g4.mrt.starband.net) joined #forth 14:21:47 Robert: uum, I'll have a working microkernel sent to you before you sleep. When do you go to sleep? 14:22:11 When I feel sleepy. 14:22:25 madwork, ping 14:22:34 madwork, what format specifier do i need so that there is always at least one zero after .? 14:22:39 eg i want 1.0 to be printed as 1.0 not 1 14:24:07 Hmm. 14:24:26 That's a good question. I should do that as well. 14:24:52 slava, why str>float? Why not just >float? 14:25:29 because >float converts integers/ratios to floats 14:25:36 i like to keep number coercion and strign parsing separate 14:26:03 OK... but I'd think you should just convert to float no matter the source type. 14:26:19 no, because >float is primitive and eventually str>float will be a colon def. 14:26:20 I am taking a scripting stance, though. 14:26:30 i'm taking a theoretical purity stance :) 14:26:36 Heh. Fair enough. 14:26:49 java factor did all kinds of automatic conversion 14:26:53 eg you could do "2" "2" + . and get 4 14:26:59 but this was too complicated 14:27:18 static void word_to_float(FSYSTEM *sys) 14:27:18 { 14:27:18 double value; 14:27:18 14:27:18 value=fs_get_float(sys, -1); 14:27:19 fs_pop(sys); 14:27:21 fs_push_float(sys, value); 14:27:23 } 14:28:08 any ideas with the 1.0 thing? 14:28:55 Let me take a look... 14:34:19 printf("*%.01f*\n", 0); 14:34:48 Actually, nope. 14:34:49 thanks! 14:34:53 oh :) 14:35:01 That works, but decimal precision is only 1 digit. 14:35:10 You'll get a 0.0 though. :) 14:35:23 --- quit: Topaz ("Leaving") 14:35:37 You may have to special-case this. 14:36:22 well its no big deal, i'll fix it later. 14:36:39 next up on the 'port from java' list: complex numbers. 14:37:03 after this, primitives for sin/cos etc... and my 31337 math library will work 14:38:47 Hehe. 14:39:02 Why don't you just let the user export their own primitives? 14:41:48 what do you mean? 14:42:06 there will be an FFI, much much later. 14:43:07 What's FFI? 14:43:31 And I mean... if they want a SIN primitive, they could export a function that does that. If they don't want it, they don't add it. 14:44:11 FFI = foreign function interface 14:44:15 what do you mean 'export'? 14:44:50 Well, they'd "register" the primitives. Like so: 14:44:50 fs_register_func(sys, "drop", fs_pop, FS_DEFAULT); 14:44:50 fs_register_func(sys, "swap", word_swap, FS_DEFAULT); 14:44:50 fs_register_func(sys, "dup", word_dup, FS_DEFAULT); 14:44:50 fs_register_func(sys, "over", word_over, FS_DEFAULT); 14:45:09 ah 14:45:13 well this isn't really for embedding 14:45:17 Ah. 14:45:18 although later i plan on supporting that. 14:45:33 java factor exists for my game. C factor exists for my http server :) 14:45:34 Cool. 14:45:36 which it can't run yet :) 14:45:39 Hehe. 14:46:29 My philosophy with Forthy was that it should only have what it needs, the rest is up to the user. So I've got a VM manipulation API, and they can compose whatever language style they like out of that. 14:46:34 java factor is cool for embedding because its very easy to call java APIs and make java objects 14:46:43 Sounds nice. 14:46:47 i have this philosophy too 14:46:54 except my idea of 'what it needs' is a bit bigger :) 14:47:05 i think nice math primitives are a must 14:47:14 but if i ever do graphics, etc it will be optional. 14:47:24 Heh. Well stuff like SIN/COS etc are not needed if you're using it as a configuration file system. 14:47:37 Or, writing high-level AI in it. 14:47:44 But then again, I'm not a math person. ;) 14:47:48 true, but 200kb is a bit big for a configuration file system, no? :) 14:47:57 sin/cos are cheap though beucase its just libc calls after all... 14:47:59 What's 20Kb? :P 14:48:02 200Kb? 14:48:11 factor executable + image 14:48:13 Forthy is <90K compiled. 14:48:14 executable is 39kb. 14:48:23 is that an exe? 14:48:25 Yea. 14:48:25 or does it have a library too? 14:48:35 like a library of forthy code 14:48:36 Well, some of the C libs it uses. 14:48:42 Oh. 14:48:48 is everything in C? 14:48:55 That's just the size of my standalone app I use for testing. 14:49:03 Yea, all C. Well, some soft words in my test. 14:49:20 ok 14:49:30 you don't think you'd reduce size by writing some parts in forthy? 14:49:49 Yea, but I want it to be fast, too. 14:49:59 true :) 14:50:06 And, I didn't think a 90K exe was too bad. :) 14:50:27 factor is not unbearably slow but its slower than a DTC forth, primarily because I do type checks and there is more memory allocation happening 14:50:55 howver, people are willing to put up with mozilla, openoffice, java, etc... :) 14:50:56 OK, 84K for the current console app I have building here at work. 14:50:59 Heh, yes. 14:51:04 Forthy is ITC. 14:51:19 And its speed is comparable to Lua. 14:51:23 So, I'm happy with that. 14:52:10 OK, gotta go home for supper, etc. bbl. 14:52:13 bye 14:53:19 bye 14:53:21 --- quit: fridge ("rock out with your cock out") 15:19:37 --- join: madgarden (~madgarden@Kitchener-HSE-ppp3576090.sympatico.ca) joined #forth 15:20:13 Back! 15:20:28 --- quit: ASau (Remote closed the connection) 15:20:33 :) 15:23:44 arke, your head a splode. 15:24:48 OX( 15:30:11 hi mad 15:32:34 Hi again. 15:57:36 --- nick: Mur_ -> mur 16:19:00 --- quit: warpzero (Read error: 60 (Operation timed out)) 16:21:32 --- nick: Tomasu -> TomasuAway 16:21:34 --- nick: TomasuAway -> Tomasu 16:45:26 --- join: doublec (~doublec@coretech.co.nz) joined #forth 16:46:08 slava, "Printing floating point numbers quickly and accurately": http://www.cs.indiana.edu/~burger/FP-Printing-PLDI96.pdf 16:46:13 slava, maybe a useful paper? 16:46:29 nice 16:46:40 you read the logs huh :) 16:46:46 yup :) 16:47:07 oh FUCK FUCK FUCK 16:47:08 scan them anyway 16:47:10 i'm trying to use FOP now 16:47:11 but 16:47:15 openjade -t fo ... just sig11's. 16:47:31 ahh, the joys of docbook. 16:48:16 :/ 16:50:05 doublec, the number tower is almost done. 16:50:20 doublec, i have to add one more primitive, then write a few words and it will have complex, floats, ratios, etc all working 16:50:51 slava, nice! 16:51:31 doing TDD has helped tremendously 16:51:43 TDD? 16:52:17 test driven development 16:52:22 writing unit tests and code at the same time 16:52:30 running unit tests after each non-trivial change 16:52:39 trying to write a unit test for each potential branch in a functione 16:52:40 etc 17:54:17 --- join: TheBlueWizard (TheBlueWiz@pc6edn1d.ppp.fcc.net) joined #forth 17:54:18 --- mode: ChanServ set +o TheBlueWizard 18:08:26 Aha... cool. 18:18:40 --- part: TheBlueWizard left #forth 18:29:28 --- quit: madgarden (Read error: 104 (Connection reset by peer)) 18:44:43 --- join: fridge (~fridge@dsl-203-33-167-9.NSW.netspace.net.au) joined #forth 18:51:04 --- join: madgarden (~madgarden@Kitchener-HSE-ppp3576090.sympatico.ca) joined #forth 18:51:27 WTF. Hi! 19:07:10 ' test ' foo is 19:07:42 er no 19:07:45 ' test is foo 19:07:56 Not with the IS I just wrote. :P 19:07:57 or ' test !> foo 19:08:16 Hmm... 19:08:26 ' test ' foo erm no you would just use ! then 19:08:53 except you would need to do a >body first 19:08:59 That's what ' test ' foo >body ! 19:09:07 Breaking standards all willy nilly is fun! 19:09:17 that woudl read as "from-store" 19:09:57 Or "store-back-into-that-thing-on-the-left" if you will. 19:10:04 lol no 19:10:18 Hey man, it's my Forth, I can do what I wanna. ;P 19:10:24 why nhmm im bored :/ 19:10:38 What's new with you? 19:10:47 nuttin 19:10:51 nuttin at all? 19:10:56 not really 19:11:04 im kinda stagnating 19:11:12 Ahh. 19:11:19 I'm actually using my Forthy for a project at work. 19:11:30 As well as a game project I'm working on. 19:11:52 :) 19:12:07 im not allowed to talk about anything im doing at work lol 19:12:12 Oh no? 19:12:17 no 19:12:40 super secret homeland defense initiative? 19:12:48 yes and no 19:12:55 building giant nuclear robots to save the U.S. from cyborg terrorists? 19:13:00 ;) 19:13:04 damn. how did you know ? 19:13:13 Women's intuition... er... 19:13:18 lol 19:13:30 I used my wife's. She's sleeping, didn't need it. 19:19:40 --- join: madgarden_ (~madgarden@Kitchener-HSE-ppp3576090.sympatico.ca) joined #forth 19:19:55 :-/ 19:20:20 lol 19:21:01 --- quit: madgarden (Read error: 113 (No route to host)) 19:21:42 --- nick: madgarden_ -> madgarden 19:26:53 What's a good name for a yielding repeat/until/again etc.? REPEAT... ? 19:27:13 10 for i . next... cr 19:28:12 --- join: proteusguy (proteusguy@66-90-229-217.dyn.grandenetworks.net) joined #forth 19:28:23 begin while repeat you mean ? 19:29:32 Yes, I want to put a "yield" just before the loop-end for any of those. So, need a good syntax for these kind of loops. 19:30:46 yield ? 19:31:44 Yea. Like, cooperative multitasking, basically... but between the C system and the Forthy system. 19:33:18 ya lost me 19:35:15 My C program is running a forthy program... and since it's a game, it needs to update at 60FPS. So if I'm doing some loops in forthy, I want to be able to yield the low priority code to the game system so it can update the rest of the logic, screen, etc. 19:36:30 oh 19:36:32 a pause 19:36:54 why not build a pause into next 19:37:31 or into exit :) 19:37:57 each thread would be able to run one whole word and then ylu would task switch :) 19:38:18 that wouldnt work too good tho :P 19:44:33 Well, I can't actually compile something into next. The inner loop is written in C. 19:44:45 But, I can single-step code if I want. 19:45:07 Anyway, this is a different case altogether... pause as you say, yes, but only for loops, so that the loop doesn't take over the whole system. 19:48:47 All I'm really asking here is a good name/syntax for the pausing loop words. ;) 19:48:51 REPEAT... 19:48:54 Or something. 19:48:56 REPEAT, 19:48:57 REPEAT. 19:49:10 hi 19:49:21 hi arke 19:49:27 :) 19:49:29 i made a song 19:49:33 called "meat beater" 19:50:46 Based on personal experiences? 19:51:00 lol 19:51:00 yeah 19:54:05 Hehe! 19:54:15 So what would *you* name a yielding loop word, arke? 20:03:59 --- quit: madgarden (niven.freenode.net irc.freenode.net) 20:05:04 --- join: madgarden (~madgarden@pptp.metrics.com) joined #forth 20:07:42 --- quit: madgarden (Killed by ballard.freenode.net (Nick collision)) 20:07:42 --- join: madgarden (~madgarden@Kitchener-HSE-ppp3576090.sympatico.ca) joined #forth 20:07:45 --- quit: madgarden (Read error: 54 (Connection reset by peer)) 20:08:26 --- join: madgarden (~madgarden@Kitchener-HSE-ppp3576090.sympatico.ca) joined #forth 20:08:36 --- quit: madgarden (Client Quit) 20:12:21 --- join: madgarden (~madgarden@Kitchener-HSE-ppp3576090.sympatico.ca) joined #forth 20:12:37 Argh. 21:32:47 --- quit: proteusguy (Read error: 104 (Connection reset by peer)) 21:34:05 Haha, cool. Just slid a map across the screen at 60FPS, using my yielding loop words. 21:38:01 you are working on your own forth? 21:39:13 Yeppers. 21:39:19 C Forth. 21:39:28 For scripting/extension. 21:41:13 cool 21:42:45 Started it in the summer of 2002. Lately, I have been using it in projects, evolving it as I need. 21:44:05 i was looking at ficl a while ago, it seems to be nice source 21:46:01 Yea, I refer to FICL now and then when working on my project. They are similar in some ways. FICL is faster, about 2.5x... but I think mine's nicer to use, though. ;) 21:50:20 Actually, with a test I just did, 1.7x faster, but it depends on what's being done, really. 21:51:47 And my empty for/next loop is over 2x faster than FICL's equivalent do/loop... so *shrug*. 21:55:48 hmm 22:03:01 Ahh... that's better. "control-flow mismatch" is a much nicer error than "error". :) 22:04:53 hi all 22:05:06 benchmarking? 22:05:37 Who me? 22:06:23 ( 1 ) [ 1000000 [ ] times ] time 22:06:23 1820 22:06:42 (milliseconds) 22:06:54 for/next loop done 1 million times 22:07:00 What speed of processor? 22:07:04 2.8ghz p4 22:07:29 4,619 ms on the jvm 22:07:34 > : test 1000000 for next ; 22:07:34 ok 22:07:34 [ ] : 0 22:07:34 > pstart test pend 22:07:34 ok 22:07:34 [ 1000005 0.05 ] : 0 22:07:36 > 22:07:44 On my Duron 700. 22:07:52 doublec, if i recompile native factor with -O3 and disable stack overflow checks: 22:07:54 ( 0 ) [ 1000000 [ ] times ] time 22:07:54 717 22:07:59 nice 22:08:06 doublec, i'll have complex nums ocmmited shortly. 22:08:10 cool 22:08:21 my jvm time: 22:08:23 ( 3 ) [ 1000000 [ ] times ] time 22:08:23 5588 22:08:36 native factor is 7x faster ;) 22:08:52 Heh. 22:08:53 that loop could be compiled in jvm factor though. 22:08:58 and be about 2x slower than native factor 22:09:00 let me try :) 22:09:09 I should try it here some time. 22:09:14 which is especially great considering that it's not jit'd whereas the java stuff is. 22:09:34 50ms for 1000000 ain't too shabby though, I figure. :) 22:10:03 madgarden, yeah, i guess you dont have the overhead of type checks? 22:10:11 doublec, i saw a freebsd port of valgrind 22:10:28 Actually, I do have types. 22:10:44 slava, great! 22:11:48 I don't check return values for the bulk of it... I use C exceptions for errors. 22:12:13 Removing so many if statements sped things up quite a bit. 22:12:28 i haven't even started optimizing native factor though :) 22:13:25 Heh, good. ;) 22:13:46 madgarden, my inner interpreter iterates a linked list, so there's an upper bound on its performance. i could compile x86 assembly at some stage though. 22:13:52 you could detect that your benchmark quotation has no stack affect and makes no external calls so it could just not call it. Speed 0ms. Not too good for real world benchmarking results tho! 22:14:04 Your system sounds to be much more dynamic than Forthy. 22:14:15 doublec, factor is too imperitive for that, its hard to make side effect guarantees 22:14:25 My inner loop is a tight loop... incrementing an IP. 22:14:27 doublec, unless you check the entire call tree for set-vector-nth, set-cdr, etc 22:14:38 madgarden, and i bet your + isn't generic? 22:14:48 yes, there would be a limited set of words it could look for. Most people would consider it cheating since it'd only be useful for giving good benchmark results :) 22:14:55 madgarden, and your for/next loop is written in C, mine is in factor :) 22:15:43 Heh, yep. 22:15:47 Well, sort of. 22:15:50 slava, what's the speed of callcc like in native factor compared to jvm factor? Is it a lighter overhead? 22:16:41 (I'd check myself but I don't have it built where I am) 22:17:26 doublec, what should i test? 22:17:29 doublec, callcc loop? 22:19:04 doublec, wow 22:19:06 doublec, check this out 22:19:08 jvm factor: 22:19:10 ( 11 ) 9 redo 22:19:10 ( [ 100000 [ [ drop ] callcc0 ] times ] time ) 22:19:10 1657 22:19:19 native factor: 22:19:20 ( 1 ) USE: continuations 0 redo 22:19:20 ( [ 100000 [ [ drop ] callcc0 ] times ] time ) 22:19:20 1597 22:20:05 slava, try a 'call' instead of drop. 22:20:17 that's pretty fast. 22:23:20 native factor: 3 seconds 22:23:24 jvm factor: OutOfMemoryError?! 22:23:43 Yeah, I'm getting the latter too. Odd. 3 seconds is very good. 22:24:29 i suspect memory leak 22:25:50 wow 22:25:54 check this out 22:26:20 http://paste.lisp.org/display/2136 22:26:56 wow, big memory growth. 22:26:57 that is jvm factor 22:27:34 and native: http://paste.lisp.org/display/2136#1 22:27:49 With -Xmx256m passed to the JVM, 100,000 iterations gives 3525ms. 22:28:01 although this distubs me: 22:28:02 131072 KB total, 130437 KB free 22:28:08 131072 KB total, 130898 KB free 22:28:15 actually no 22:28:16 i misread 22:28:37 i thought the usage reduced from startup to after this, which would suggest something got gc'd that should not have 22:29:46 nice to see the C vm frees up everything. 22:30:25 after the http server is imported, i expect memory usage to be around 180 kb 22:30:32 which is pretty damn good. 22:30:56 compared to scheme implementations with similar functionality? hell yeah :) 22:31:10 i'm adding bignum and float output to image.factor 22:31:22 there are literals in the math libs that aren't handled yet. 22:32:03 ok 22:32:57 don't worry i'll get back to work on the http server very soon. it will rock with multiplexed i/o. 22:33:08 definitely 22:33:17 downloading at 1.01 megs per second P:) 22:33:55 time for me to go, talk to you later. 22:35:01 --- quit: doublec ("Leaving") 22:40:19 --- join: proteusguy (proteusguy@66-90-229-17.dyn.grandenetworks.net) joined #forth 22:46:56 --- join: kc5tja (~kc5tja@66-74-218-202.san.rr.com) joined #forth 22:47:03 --- mode: ChanServ set +o kc5tja 22:47:48 hi kc5tja 22:54:47 Howdy 22:55:00 The OpenRISC architecture is looking increasingly attractive to me for the Kestrel. 23:14:40 slava: What are your, and other's, feelings about using the OpenRISC 1200 CPU instead of a custom-made CPU design? 23:14:48 madgarden is perfectly OK with it. 23:15:10 But using something like a more traditional RISC might end up turning some people off from the Kestrel. 23:15:29 it uses delay slots does it not? 23:15:39 Yes, it exposes delay slots to the programmer. 23:16:11 have you any clever ideas regarding them, or might they just be hard to optimize for? 23:16:30 I don't see them as being too terribly hard to optimize for. 23:16:44 I would have to do more study on it though. 23:16:55 Worst-case scenario, plot a NOP after the l.b instruction. 23:17:06 err.. l.nop -- sorry. :) 23:17:24 (anyone know why OR1K instructions all start with "l."? It's weird. But I digress.) 23:17:56 avoid MIPS comming after them? 23:18:16 zardon: Unlikely. They appear to use the prefix to sort various instruction types out. 23:18:22 E.g., lv. are for vector operations. 23:20:30 Oh well. 23:23:41 I'm just not sure what direction to take the Kestrel in right now. 23:23:44 --- quit: tgunr ("Leaving") 23:23:45 I'm very torn. 23:25:16 --- quit: Fractal (Read error: 110 (Connection timed out)) 23:26:07 TTA would be cool, but that would certainly add alot of time to get the system up 23:28:33 Yeah, exactly. 23:29:02 But the OpenRISC is more "limiting" in that I can't add unique features to it as easily (if at all, since much of the chip real-estate is going to be dedicated to the instruction and data caches). 23:36:58 kc5tja, ping 23:37:35 http://factor.sourceforge.net/factor-snapshot.png 23:37:45 in about 10 minutes, i hacked up a jedit plugin that embeds a factor interpreter 23:37:45 --- join: uxx (rpc@global.whiteh8.net) joined #forth 23:37:52 i didn't restart the editor once -- it can reload plugins :) 23:42:10 the time in the bottom left is wrong 23:42:23 i'm not sure why *nix java gives gmt time 23:44:35 --- quit: mur (Remote closed the connection) 23:45:10 --- join: mur (~mur@mgw2.uiah.fi) joined #forth 23:59:59 --- log: ended forth/04.08.05