00:00:00 --- log: started forth/05.09.16 00:09:00 --- quit: sproingie (Remote closed the connection) 00:10:06 --- quit: Quartus (Remote closed the connection) 00:10:26 --- join: Quartus (n=trailer@ansuz.pair.com) joined #forth 00:15:19 --- quit: Quartus (Remote closed the connection) 00:24:44 --- join: Quartus (n=trailer@ansuz.pair.com) joined #forth 00:29:17 --- quit: Quartus (Remote closed the connection) 00:32:25 --- join: Quartus (n=trailer@ansuz.pair.com) joined #forth 00:37:29 --- join: amca (n=plump@as-bri-3-4.ozonline.com.au) joined #forth 01:05:04 Hello 01:29:27 --- join: aum (n=aum@60-234-156-82.bitstream.orcon.net.nz) joined #forth 01:30:07 --- part: aum left #forth 02:22:54 --- quit: amca (Read error: 113 (No route to host)) 02:22:59 --- quit: Quartus (Remote closed the connection) 02:23:32 --- join: Quartus (n=trailer@ansuz.pair.com) joined #forth 02:46:49 --- nick: Raystm2_ -> Raystm2 05:45:34 --- join: folajimi (n=folajimi@shell3.sea5.speakeasy.net) joined #forth 05:45:55 --- quit: folajimi (Client Quit) 05:53:00 --- join: aardvark (n=folajimi@shell3.sea5.speakeasy.net) joined #forth 06:00:17 --- nick: aardvark -> aardvarx 06:01:22 Morning, all. 06:03:17 --- join: tathi (n=josh@pdpc/supporter/bronze/tathi) joined #forth 06:10:41 --- join: madwork (n=foo@derby.metrics.com) joined #forth 06:27:17 --- join: ccfg (i=ccfg@dsl-roigw3de0.dial.inet.fi) joined #forth 06:27:19 morning 06:29:04 --- nick: docl_ -> docl 06:31:16 docl, morning. 06:33:37 hi aardvarx, what's up? 06:34:10 docl, have you ever used isForth? 06:35:37 Good morning, Men! 06:36:49 Morning, Ray_work . 06:36:54 no, I don't think I have tried it yet 06:37:00 k 06:38:10 hi Ray_work 06:40:45 * docl downloads isforth 06:45:19 aardvarx: got questions about isForth? 06:46:41 --- quit: ccfg (Read error: 110 (Connection timed out)) 06:47:52 tathi, I was just wondering who would use it (for what purpose). 06:52:51 ah. 06:53:12 Also, how can I find the quotient of two values declared using a #define statement without using the division sign (i.e. '/')? 06:53:28 I know it's OT, but I'm having issues with it right now. 06:54:05 err...the division sign is how you normally do division, what's wrong with that? 06:54:15 I assume you're talking about in C? 06:57:12 tathi, yes. 06:57:16 and...I440r doesn't like C or the normal C/unix libraries much, and considers direct-threading to be "the only true forth" implementation model. 06:57:30 I gather he couldn't find a tool that fit those criteria, so he wrote IsForth. 06:57:52 tathi, I do concede that it seems silly, but my experience with numerical analysis has influenced me to avoid the operation where possible. 06:58:17 What do you mean by "direct threading"? 07:00:07 basically each colon definition is a list of addresses of the words that it calls 07:00:32 http://en.wikipedia.org/wiki/Threaded_code 07:00:49 Thanks. 07:01:08 http://www.complang.tuwien.ac.at/forth/threaded-code.html 07:01:24 this one describes it more as Forth people usually see it 07:04:34 tathi, do you have an example of actual threaded code to illustrate what the Wikipedia article is referring to? 07:05:06 hmm... 07:06:29 No worries if you don't have any examples. 07:06:54 well, words in IsForth look something like this: 07:07:14 : ' defined 0= ?missing ; \ in forth 07:07:27 tick: 07:07:31 call nest 07:07:36 dd defined, zequals 07:07:40 dd qmissing 07:07:41 dd exit 07:07:56 if that helps... 07:09:04 'nest' is a routine that pushes the address onto the return stack, and then loops through the rest of the definition 07:09:22 grab address, branch to it, repeat 07:09:34 You mean all the dd* instructions? 07:09:45 oh, sorry. 07:10:03 yeah, that's an assembly directive, short for "define doubleword" or something. 07:10:05 I'm new to forth. 07:10:17 okay. 07:10:29 it outputs a 32-bit value for each argument. 07:10:49 err...everything starting with 'tick:' there was assembly language. 07:11:13 so the rest of the instructions are subroutines? 07:11:50 yeah, they would either look much like this one (i.e. colon definitions; call nest; dd ) 07:11:55 or just be straight assembly language. 07:17:54 --- join: PoppaVic (n=pete@0-1pool74-238.nas24.chicago4.il.us.da.qwest.net) joined #forth 07:18:10 Mornin' 07:18:14 yeah...I'm not explaining that very well. 07:18:18 Morning 07:18:44 How goes it? What am I missin'? ;-) 07:18:52 Basically, in direct threading, you have a bunch of addresses that point straight to actual machine code. 07:19:04 yah 07:19:13 With indirect threading, the addresses point to a header which points to the machine code, and may also have other data. 07:19:48 "to a header" (aka. "or some structure") 07:19:55 yeah 07:20:48 I think Gforth info-file and the FIG site cover the variants prettywell 07:21:28 now, don't forget "call-threaded", either 07:21:59 * PoppaVic thinks he recalls F-pc was "call-threaded" 07:22:19 also called "subroutine threaded" -- instead of addresses, you have actual "call" instructions. 07:22:26 right 07:22:33 takes up more space than direct threading (on many processors) 07:22:50 and also, surprisingly enough, is often slower than direct threading. 07:22:58 or, at least you jump into the addr which has a "call foo" - but can be anything thereafter. 07:23:06 right 07:23:35 Actually, I think the "slower than direct threading" thing is an artifact of x86's stupid "instruction-cache snooping the data cache" design. 07:23:46 likely 07:24:27 This is more than I can comprehend at this point :P 07:24:44 yes, it takes awhile - and maybe some drawings 07:25:26 Yeah, I thought there was a good web page describing it somewhere -- but I can't find it. 07:25:39 You're right though, the gforth info page isn't bad... 07:25:55 perhaps somewhere along the ring - forth info is spread all over between hell & gone. 07:26:36 aardvarx: info page for gforth under Engine and then Threading if you want to try a look there. 07:27:00 will do. 07:27:03 thanks/ 07:30:10 I think it's interesting that so many forths experiment with so many methodologies. Always seemed to me a tribute to the essential flexibility. 07:30:52 yeah. 07:31:19 Don't you think this is a case of "too many cooks in the kitchen?" 07:31:35 --- join: JasonWoof (n=jason@pdpc/supporter/student/Herkamire) joined #forth 07:31:35 --- mode: ChanServ set +o JasonWoof 07:31:36 and having (thanks to Quartus) been taking a closer look at the ANS standard recently, I have to say it's impressive how many options they manage to allow. 07:31:50 while still providing predictable behaviour so you can write portable programs 07:32:31 aardvarx: maybe.. But, I believe I can unequivocally point at linux for the worst offender. 07:33:07 --- join: sproingie (i=foobar@64-121-2-59.c3-0.sfrn-ubr8.sfrn.ca.cable.rcn.com) joined #forth 07:34:15 tathi: hmm. Perhaps. I think it's more a tribute to their organizational-skills. I'm never going to go nuts over ANS (why the hell does this always look like 'anus' to me? ;-), but it never hurts to have some starting-point. 07:34:49 So, no more ANS-heckling, PoppaVic ;) 07:35:24 dude, it's just that I get upset when folks rant over it, or ansi-C, or posix. Pretending that "the work is done". 07:35:28 yeah. I'm just saying, I always thought of ANS as specifying "you have to do things this way", but... 07:35:57 I'm coming to think of it as more that "however your thing actually works, you should provide an overlay with these semantics" 07:35:58 tathi: sure, it's more like guidelines and "to be 'compliant' behave like thus.." 07:36:05 right 07:36:44 Mind you, I've not written any executable test-code for this beast, but it seems likely we can sorta' embrace ANS 07:36:50 ..or areas of it, anyway 07:37:32 I just always thought that some of the things I like to do (like separate 'forth'/'macro' dictionaries) were incompatible with the spec, but now I think I could create an ANS layer over top of that model pretty easily. 07:37:33 What folks always need to recall is you can get a paradigm-shift that invalidates part of "the standard" 07:37:38 (for those who want it) 07:37:44 exactly 07:37:55 forth also ANS 07:39:57 or, in your case: "only retro also ANS" ;-) 07:41:19 PoppaVic, I gues when you put it in that context, I do agree that having people running around saying "IT IS DONE" is not helpful. 07:41:33 *guess* 07:42:20 sure. ANd, then we get the lispers in ##C: basically they want to throw out the baby with the bathwater, and we are all supposed to switch to lisp. 07:42:42 (or python, or whatever the hell they want to advocate) 07:43:13 language-wise, i can see their point completely 07:43:19 The *other* side of the coin is justifying learning 3...N languages, because "each language has something special" 07:43:28 but as a platform ... i can't think of a language with more runtime policy than common lisp 07:43:36 except perhaps java, and perhaps not even that 07:43:45 sproingie: "runtime policy"? 07:44:04 yeah, as in stuff the runtime library has to do 07:44:08 ahh 07:44:08 with C, it's pretty minimal 07:44:12 right 07:44:23 on the flip side, it's also stuff you're stuck with the runtime library doing 07:44:33 How about Forth? 07:44:34 I know they often debate wild, CS-issues about lisp-dev 07:44:52 forth basically has no runtime policy 07:44:53 I guess it's academic at this point... 07:44:56 aardvarx: well, look at the variations 07:45:22 brb - nature screams... 07:45:27 or safer to say that as an interpreter most of the time, forth has the policy of its interpreter 07:46:38 ok, gotta restart X to clear some droppings it left permanently on the screen. brb 07:46:54 --- quit: sproingie (Remote closed the connection) 07:50:20 Yeah, the way you use "policy", I suppose I'll buy that 07:51:48 tathi: the weird thing is, the wording in ANS makes it sound like it's telling you how to implement your system 07:51:59 Right. Exactly. 07:52:04 Well, that is bad. 07:52:33 aardvarx: I believe it's an artifact of std-docs. They can't just "suggest" in the doc. 07:52:35 That is the easiest way to alienate people like PoppaVic. 07:53:09 aardvarx: it's worse when adherents pretend those docs to be written in stone-tables with that semantic-view. 07:53:47 ..because THEN, instead of being "damned useful", the docs (and the fanatics) end up as a straitjacket. 07:54:12 JasonWoof: yeah, I've been looking at it more closely over the last couple of days, and I think they're actually just specifying semantics. 07:54:17 * aardvarx scoffs. 07:54:24 Who needs acolytes anyway? 07:54:46 It is kind of "how it should work", but I think I could overlay it on my little forth if I wanted. 07:54:56 Morning all. 07:55:01 Quartus, greetings. 07:55:02 hi Q ;-) 07:55:15 yeah, tathi I'm pretty sure it could be a layer or voc 07:55:22 I mean, I might have to replace some of my words with ANS versions, but I _could_ provide an ANS layer if someone wanted it (I think) 07:56:41 PoppaVic, it can. There's a "nearly-ANS' layer for F-PC, for instance. One of the few discrepancies there is that the : is its own interpretation loop; in Standard Forth that's not how it works. Unless you're doing that, it should be eminently possible to write a Standard compability layer. 07:57:03 --- join: sproingie (i=foobar@64-121-2-59.c3-0.sfrn-ubr8.sfrn.ca.cable.rcn.com) joined #forth 07:57:04 Quartus: ok, I thought so. 07:58:32 The Standard isn't an 'only this' specification; it's a 'must be at least this'. You can extend a system significantly and still be compliant. Quartus Forth has inline words, for instance; that doesn't in any way affect its Standard compliance. 07:58:54 Yep. I can envision that. 07:59:11 In some ways, it's superior to this "posix standard" noise. 07:59:36 Quartus, that definitely sounds much better to me :) 07:59:38 Further to your point about the speed of subroutine threading vs. direct threading, PoppaVic, as soon as you add even trivial inlining, you become appreciably faster than direct threading. 07:59:54 Quartus: of course. 08:00:13 Are you sure about that? 08:00:19 Yes. 08:00:25 Quartus: I imagine that 'see' will throw the whole mess up, however. 08:00:40 speed of direct vs subroutine has a bit to do with architecture 08:01:02 just about any modern arch does better with subroutine 08:01:03 aardvarx: sure. It's akin to writing nice, neat macros in C - that can expand to a lot of code right in-place. 08:01:18 It's not as bad as all that; decompilation is diassembly in a native-code system, but it's not hard to re-map short inlined sequences back to Forth words. That's what I do in Quartus Forth. It's not 100%, but it suffices. 08:01:28 I'm trying to reconcile that with what I am reading from Wikipedia... 08:01:37 Quartus: interesting 08:01:55 wikipedia's full of shit in a lot of areas. quartus is in a position to know the reality :) 08:02:41 That's true. 08:02:42 otoh, I always figure functions are always easy to find and read. And, I'm willing to take a bit of a speed or size hit for readability - trusting that another, finer-grained tool can make shit smaller or faster. 08:03:25 PoppaVic, I don't use SEE as a programming tool. If I suspect the compiler is buggy, I might, I suppose. 08:03:44 There are 38 'must be inlined' words in Quartus Forth presently; 24 of those are two-byte sequences that map directly back to Forth words. 08:03:47 Quartus: oh, it's sometimes handy to 'see' how some similar word did its job. 08:04:07 PoppaVic, yes, and you can still do that. 08:04:36 Quartus: for an interactive "development environment", 'see' is handy. Once you are prepared to distro some app, We prolly can live w/o this sorta' decompiling-info 08:04:38 And because it's a Standard system, you could always run a direct-threaded Standard system on the desktop and use a one-to-one SEE to your heart's content. 08:04:48 exactly 08:05:03 And then move your source back to a native-code environment when you want it to run at speed. 08:05:11 right! 08:05:54 It's really not difficult to read the SEE output in a native-code system, though. It does mean knowing assembler, but if you're working at that level you pretty much need to anyway. 08:06:16 And, at least in Quartus Forth, it doesn't use a lot of esoteric assembler. 08:06:39 Mostly moves and branches. 08:06:51 sure, but again: we are definitely speaking about "traditional do-all forth" versus "we know we can live in the former and recompile far faster/better" 08:07:45 Quartus, "esoteric assembler"? 08:08:09 Seldom-used or tricky assembler instructions. 08:08:39 aardvarx: bordering on "undocumented uncodes" or "hacks" 08:09:26 To me, native-code generation is the obvious choice. It prevents old-school Forth code modification (where values are stored directly into the thread), but I have yet to see an example of that technique that was the only way to achieve the desired result, or the least confusing of the available options. 08:09:27 PoppaVic, now that's just plain nasty! 08:09:57 If thread == subroutine, why not just say so? 08:10:09 Right, Q. There _could_ be a benefit, say... In cross-compiling to some embedded-device. 08:10:09 It doesn't, aardvarx, as such. 08:10:41 aardvarx: the definition of "thread" has changed significanly over the decades of micros 08:10:59 PoppaVic, I'd do native-code in an embedded environment too, but with less agressive inlining. 08:11:12 ..and most forth-docs are guilty of using that very term at least 2 ways. 08:11:32 Q: certainly, because space would be at a premium. 08:11:44 Right. But the speed advantages are huge. 08:11:51 absotively 08:12:12 Look at CONSTANT in Quartus Forth. 5 constant foo is exactly equivalent to : foo 5 ; inline 08:12:13 PoppaVic, what constitutes a "thread" and does it have any relevance to "multithreaded" applications? 08:12:29 This is one of the reasons I like the idea of this bytecode vm under-forth/over-C 08:13:09 aardvarx: in forth, they can mean a LL of some type, or a "task" or a real "thread", or almost any other perversion. 08:13:24 LL? 08:13:29 linked-lists 08:13:38 Ahhhh!!! 08:13:39 tathi: I wonder if you could write two versions of the words that are incompatible with ans. Have a sort of vecabulary or something. and it starts out with the ans versions, and if you want the cool ones, you have to do "set nocompatible" or something at the top 08:13:46 such as when they speak of word-threads in vocs 08:13:51 So that's what amca was trying to say yesterday!! 08:13:55 aardvarx, a thread, Forth-style, is a list of subroutine addresses. 08:14:24 Quartus: yeah, and I try to speak of LOL (lists of lists) and Lists 08:14:34 Although the _list_ itself is not a subroutine, right? 08:14:40 right 08:14:42 'multi-threading' refers to a form of multitasking, and is something else. 08:14:53 Thanks. 08:15:16 aardvarx: usually, the 'list' is either nodes-of-something, or we mean "steps to execute in a colon-word" 08:15:40 In fact each subroutine (word) in a threaded Forth system is either a primitive (machine code), or a list of word addresses. 08:15:48 exactly 08:16:18 and, bear in mind that "word addresses" is why they threw in that whacky XT term 08:16:31 This is how it's implemented, and depending on the exact mechanism it's either called 'direct' or 'indirect' or 'subroutine' threading. 08:16:47 In subroutine threading, you don't need what used to be called an 'inner interpreter' loop; the CPU does that for you. 08:17:07 And when you add optimization such as inlining to a subroutine-threaded system, you get what's called a 'native-code' system. 08:17:21 * PoppaVic enjoys watching the analysis and remembers the Old Days ;-) 08:17:26 Quartus, are you saying that they "are calling a rose by a different name"? 08:17:37 No; each one is a different flower. 08:17:41 k 08:17:50 the commonality is "flower" 08:18:08 They smell different though, right? 08:18:27 yep, and they can be internally quite dissimilar 08:18:33 Conceptually, a word is still built up from other words in a native-code system, just as it would be in a 79-vintage FIG system. : star 42 emit ; does the same thing, looks the same. 08:19:22 What still creeps me out is how Forth "compiles itself" 08:19:29 heh 08:19:30 thread in forth has the same connotation of thread in multithreading, but "threading" doesn't automatically mean "multithreading" 08:19:35 I find that Forth implementors are so proud of their conceptual grasp of the implementation method, that they're terribly anxious to 'expose the plumbing', as it were. Virtually every Forth primer opens the kimono in the first couple of chapters, which I think confuses the hell out of newcomers. 08:19:35 Sort of like "an uncreated creator..." 08:19:42 Metacompiling forth is very rare 08:20:00 Quartus: I think I'd agree 08:20:01 Quartus: yep. even starting forth does this. i think the sad reason is because there isn't much else to show by that point 08:20:18 sproingie: well, remember the age of that book 08:20:23 Quartus: you can only print lines and boxes of stars for so long before you wonder what it's good for. then you get to do it yourself 08:20:34 Hell, as Scott Adams once said, they don't just open the kimono, they do naked jumping-jacks in front of the window. 08:20:46 lol 08:21:02 if bigforth weren't such a buggy festering pile, it'd make a good tutorial, what with the 3d turtle 08:21:18 bigforth??? 08:21:20 I'd not wish Bigforth on other than an enemy 08:21:21 That's new. 08:21:29 aardvarx: ignore it 08:21:33 okay. 08:21:34 lol 08:21:37 bigforth's fast, reasonably complete, and got lots of neat features 08:21:42 Yet you won't find a book on learning C that talks about how symbol lists are implemented in the compiler. Or what the intermediate code generation looks like. 08:21:43 it also features a million ways to crash 08:22:07 Yeah, a great selling point. 08:22:12 Quartus: I agree, and - generally speaking - even forthers can avoid that for many moons 08:22:54 aardvarx, metacompilation isn't so hard to imagine. For instance, new versions of GCC are recompiled using GCC; no different. 08:23:09 What forth needs is a book with a decent number of examples that - as I often tell new C'ers - emulate handy programs. 08:23:15 * sproingie still isn't convinced how well forth syntax scales up to large scale control when the flow is very nonlinear 08:23:44 Quartus, I guess that's what happens with the LFS project. 08:23:45 sproingie, why do you think it wouldn't scale? 08:23:53 aardvarx - LFS? 08:23:59 linear flow, it's beautiful. : wash load fill agitate drain spin fill agitate drain spin end ; 08:24:01 sproingie: as near as I can tell, this is due to fanatics, haqueers, and the general issue of the best forths are for-pay. 08:24:12 Yet, I get the willies just thinking about life before the first compiler. 08:24:23 Quartus, LFS =LinuxFromScratch. 08:24:33 Ah. 08:24:34 nonlinear flow with branches ... well, reading an "if" in forth still tends to be pretty yick 08:24:41 You compile gcc from a host. 08:24:46 aardvarx: "adventures are the nonterrifying horrors others suffer" 08:24:59 sproingie, if it's a complex task I'd use a finite-state table, but then I'd do that in any language. Nobody likes nested conditionals. 08:25:06 However, the question remains: where the first compiler came from? 08:25:16 nope 08:25:21 I know where they came from 08:25:21 yep, if/then is an awful construct for actual complex state flow 08:25:34 It's like that chicken/egg routine... 08:25:38 aardvarx, the first compiler was a human being. Creating the first compiler program was a natural progression, to save the human all that work. 08:25:39 aardvarx: it took godlike patience and a lot of toggle-flipping. 08:25:42 "Who's on first" 08:25:43 nondeterminism, backtracking, polymorphism, that's where it's at 08:25:54 blech 08:26:02 * aardvarx shudders. 08:26:23 unfortunately, forth will give you the tools to assemble such tools, but no implementation of it 08:26:28 sproingie, what the hell is a nondeterministic program? Random-number generator strapped to an I/O port? 08:27:18 I go to a great deal of trouble to make 'deterministic' programs, I don't need help going the other direction. :) 08:27:30 Quartus: read up on "amb", lot of lisp and scheme books cover it 08:27:58 I belive a lot of it is academic and buzzwords 08:28:44 one semi-contrived pseudocode example of using it might be something like: session := verify_credentials(amb(ticket,smartcard,password,fail)) 08:29:06 Ah, ok. They're using 'nondeterministic' to mean something other than nondeterministic. 08:29:08 PoppaVic, I guess you'll be fine as long as you don't spew that sort of heresy in #lisp :P 08:29:10 hrm...looks like it means much the same thing as "functional" programming language. 08:29:32 aardvarx: I try to not "spew" and I've never bothered the #lisp'ers 08:29:33 Quartus: it's nondeterministic in the sense of an NFA -- there's still a programed path through it, but it's just not apparent from the text of the program 08:29:41 and yes, amb is deeply rooted in FP 08:29:43 specifying result conditions rather than how you get there. 08:30:21 err... s/result conditions/desired results/ 08:30:26 tathi: that's perhaps the most succinct explanation of declarative i've seen 08:30:34 amb is declarative conditionals, basically 08:30:41 tathi: as in a prototype? 08:30:43 Certainly achievable in Forth. 08:30:55 Quartus: everything is achievable in forth if you write it yourself 08:31:03 often it doesn't even take much code 08:31:11 Right. Easily achievable, I mean. 08:31:12 right, hence: I believe forth is never really developed. 08:31:24 but writing it yourself means debugging it yourself 08:31:37 ..Forth is a lot like a kid that never does more than toddle-around in diapers. 08:31:48 debugging a nondet or backtracking mechanism is wickedly hard 08:31:51 Forth/Forths 08:32:20 PoppaVic: it does more than toddle around, it does running backflips. but you gotta train it first 08:32:24 laboriously 08:32:46 right - almost like their "parents" prefer to keep them in diapers. 08:32:59 well, part of the reasons for this are obvious 08:33:16 1) There is no good, "standard" way to use libs 08:33:25 2) Everything is source, or not at all 08:33:57 I don't find it laborious. But I share source, and I re-use other people's wheels whenever possible. 08:34:03 yeppers 08:35:03 I got the feeling that "Bigforth" was supposed to cure the above, but just falls on its nose. 08:35:26 ..maybe it was just a vehicle to market a "for pay" system. 08:35:37 If you want esoteric programming features, you may be well-served to use a language expressly designed around them. Prolog, for instance, is probably useful to somebody somewhere -- but you wouldn't write a calculator app in it. 08:35:53 Quartus: actually prolog is exquisite for calculator type apps 08:36:14 Quartus: bad choice of example ... but yah i get the idea 08:36:20 Ok, that just illustrates my ignorance of Prolog -- let's say 'video game', then. 08:36:46 you might write the AI in prolog and possibly the menu. certainly you wouldn't write a sprite engine in prolog 08:36:57 Sure. It's not a general-purpose system. 08:37:00 you could, but the code wouldn't really use any of prolog's functionality 08:37:53 windows uses prolog to resolve dependencies in the network driver stack 08:38:08 it actually embeds a little prolog engine 08:39:34 unification, there's another exotic control mechanism i hadn't thought of 08:40:16 might be a little harder in forth, what with having a stack instead of bindings 08:40:50 I consider Forth an ideal base for algorithmic experimentation; when used well (short definitions, in-code testing) it debugs better than anything I've ever used. 08:40:58 ahhhh, shit. I just realized a use for "user variables". Sunnabitch. 08:41:42 * PoppaVic bangs his skull off the wall 08:41:50 my previous retroforth project is stuck because of the lack of exception handling words 08:42:15 I hate exceptions, I really do 08:42:16 i could use a global control flag and check it everywhere, but that's just nasty 08:42:33 i have a utf-8 decoder. it runs across a malformed sequence 08:42:39 what am i supposed to do, exit the program? 08:42:49 I've never seen a decent, sensible, readable exception-system 08:43:07 PoppaVic: you haven't looked very hard 08:43:10 How about Java? 08:43:10 I never see much of an issue in scream & die 08:43:17 aardvarx: like I said ;-) 08:43:23 yeah that's robust software 08:43:26 Hmmm. 08:43:28 PoppaVic, have you looked at Standard CATCH and THROW? 08:43:34 make the entire system die because of a malformed sequence 08:43:43 I thought it was the best thing going in terms of exceptions... 08:44:07 aardvarx: java's exception handling is bog-standard try/except, and frankly it ain't that fun 08:45:04 common lisp has fabulous exception handling 08:45:39 i could make it return a "success" or "fail" flag on the stack, but frankly that's just disgusting 08:46:05 with rf, i could screw with the carry flag, but that doesn't propogate well, anything could reset it 08:46:13 * aardvarx needs to read up on the need for exception handling anyway... 08:46:23 i just gave one example 08:46:50 decoding a utf-8 stream, come across an invalid sequence. communicate this to some caller that may be some arbitrary distance back 08:47:01 and allow it to recover 08:47:19 As opposed to just exit()-ing ? 08:47:38 yes, as opposed to having the entire operating environment exit 08:47:59 Fair enough. 08:48:00 invalid utf-8 happens every time you cat a binary file or even a slightly malformed textfile 08:48:12 I thought there was more to it than that for exceptions... 08:48:27 that's a simple usage of exceptions 08:48:33 Anyway, that is still nice to know. 08:48:38 sorry, back. *sigh* 08:48:42 * aardvarx heads out for food. 08:48:49 but the idea is to communicate an error state to a caller that may be some arbitrary number of levels back in the call stack 08:48:55 and allow it to recover from it 08:49:16 Q: no, all I've seen is code-bodies and ideas that really bug me. 08:49:18 recover != fix, right? 08:49:34 recover == do-something and resume 08:49:41 recover as in take some alternate action 08:49:49 and either exit gracefully or skip over 08:49:55 * aardvarx blows raspberries. 08:49:56 basically, recover as in not die horribly 08:50:03 I generally dislike the idea But, I'm beginning to think its personal. 08:50:09 only exception system i know of that can really "fix and retry" is common lisp 08:50:25 That's *exactly* what I am concerned about. 08:50:27 others have to fake it 08:50:35 That's just lame. 08:50:51 lispers would say so 08:51:13 "Fake it 'til you make it" sounds so wrong in this context... 08:51:13 exception handling means a lot of things. throw/catch is minimal 08:51:28 I *WILL* admit that these 'exceptions' might be preferable to every func testing returns/errno 08:51:28 YMMV, right? 08:51:42 PoppaVic: that's the purpose of exceptions 08:51:46 Minimal, but adequate in the vast majority of cases. 08:51:52 yup 08:51:54 bbiab... 08:52:02 but, as a rule: most exceptions-fanatics just don't WANT to consider tests. 08:52:13 (or so it seems) 08:52:14 tests and exceptions are orthogonal 08:52:48 exceptions are not for catching errors in code, they're for catching exceptional conditions that you expect to happen anyway 08:52:53 stuff outside your control 08:53:28 like I said, I've looked for a clean C-ish or forthish example, and nothing I've seen makes me want to embrace it. 08:53:29 there is a lot of java out there that DOES paper over poorly specified code with exceptions 08:53:42 but this doesn't malign exceptions, just the state of the engineering art in java 08:53:57 exceptions aren't to be embraced 08:54:07 I'd love to add it to the bytecode-vm, but I'm not sure what I'd want the guts to do - that isn't some noxious mess 08:54:08 they should be the exception, not the rule :) 08:54:32 anyway, i gotta get to work 08:54:35 * sproingie waves 08:56:33 See ya! 08:56:37 Quartus: I started to review dpans and throw/catch - looks like days of reading and study, so I'll have to pass for now. 08:56:51 THROW and CATCH aren't too tough; minutes, not days. 08:57:22 no, days. I'd have to integrate the concepts myself, and into the still-evolving vm 08:57:22 CATCH is like an EXECUTE that returns a flag. 0 if there weren't any THROWn exceptions, or the THROW code if one was thrown. 08:58:15 THROW unwinds the context (stacks, primarily) back to the most recent level of CATCH. 08:58:19 where doth the handlers reset the machine? 08:58:33 what do you mean? 08:59:19 I presume a handler will either repair the issue, or warmstart, etc. So it either has to get back to the thrower/tryer or restart at some-point. 08:59:31 It's all in how you build it. 08:59:40 yah, so also is my thought 09:00:12 --- quit: tathi ("out biking") 09:00:22 : foo ... ( some error that can't be recovered from at this level ) -n throw ; : bar ... ['] foo catch if ... perform recovery then ... ; 09:00:49 geezus keerist 09:01:12 In this case, say foo was sending characters to an output device. If it can't, it throws an error up to bar; bar does whatever is required, and then (possibly) retries foo. 09:01:46 Here's my issues... 09:01:55 1) I can envision a handler list; 09:02:11 2) "foo" throws ex#4; 09:02:30 3) we need to CALL upon the handling; 09:02:37 What does 3) mean? 09:03:07 3(just like any other opcode, colon-word) 09:03:15 what do you mean 'upon the handling'? 09:03:20 ahh 09:03:29 this is where it all breaks up. Shit. 09:04:13 CATCH establishes a new exception frame in the list, and EXECUTEs the specified xt. THROW restores the context from the lowest-hanging C 09:04:24 the handling would be, near as I can tell, nothing more a LL of execept# and handler-words. We write an opcode to race thru the list to see if there is a handler, and just run the handler 09:04:26 CATCH frame. 09:05:09 In the Standard setup, the handler for an exception is specified by the most recently-established exception frame. 09:05:14 4) we either handle the exception (found) or it fails. 09:05:29 If a throw can't be handled at that level, it can be either ignored or thrown up higher. 09:05:30 yeah, I saw they enforced a whole new stack and frame-abi 09:05:58 If there's no handler, there's a default exception frame which is (in Quartus Forth) an error message at the console + ABORT, or in a turnkey app, a pop-up alert with the error info in it. 09:06:15 hmm 09:06:23 Exception frames are conceptually on their own stack, but in real-life they live on the return stack. 09:07:04 Q: would you mind overly if I sorta' ignored it for the nonce and we debate and try to implement when we've got a solid api? I think it's stressing my poor ol' neurons. 09:07:18 You may be trying to make it more complicated than it is. 09:07:23 Quite possible 09:08:02 In its simplest form, CATCH stuffs the current stack pointers and the address of the previous exception frame onto the return stack, and does an EXECUTE. 09:08:14 I'm disinclined to add "more stacks" and such, and I'd hate to implement something like this w/o more solid-ground to stand on... Although, I can see a good reason to use them now. 09:09:08 At the least, they seem like they'd shrink the codebase just by aggregating tests/handling of so many similar issues. 09:09:33 Again, in its simplest form, THROW retrieves the address of the most recent exception frame, pops the pointers, and returns. 09:09:55 Leaving the non-zero throw code on the stack. 09:10:10 Somehow, I think I also might be suffering from a subconcious parallelism with "interrupts" 09:10:20 CATCH is effectively an EXECUTE that you can do a non-local return to, via THROW. 09:11:51 'throw' suggests to me a colon-word/RP push and call; we check handlers up the list and handle or repeat, etc. Returning via the rdrop or recycling to a warm-state/abort 09:12:00 Nothing like scanning a list occurs. 09:12:10 it will in this vm 09:12:26 I believe that's both overly complex and unnecessary. 09:12:34 ..I believe a list of handlers for catching is prolly easiest 09:13:04 Easiest and simplest is to pass control to the most recent CATCH, and let the error be thrown upward as required. 09:13:12 this means we can have opcodes for [throw] 09:13:51 Quartus: i hadn't thought of catch as an execute ... that might be enough of a hint to implement it in retroforth 09:14:05 PoppaVic, you're jumping from saying you don't see any purpose to exception handling, to not understanding how it's implemented, then straight into deciding to use a furiously-complicated approach in your VM. 09:14:29 rf is like this close --><-- to having real continuations, so maybe i can use those when they're done, but in the meantime, i could do it like that 09:14:34 nope, no code or support there for the nonce. Trying to see where it bolts and what we'd require 09:15:12 sproingie, it's very simple to build. Really -- in pseudocode: catch sp@ >r rp@ >r fp@ >r handler @ >r execute 0 ; 09:15:16 reva has throw/catch built in, but well, it's build in 09:15:20 oops. 09:15:29 sproingie, it's very simple to build. Really -- in pseudocode: catch sp@ >r rp@ >r fp@ >r handler @ >r rp@ handler ! execute 0 ; 09:15:41 Quartus: i'll have to come back to this later. i'm late for work :) 09:16:03 and if any of yall think exceptions are mind-bending, try continuations 09:16:10 ;) 09:16:12 * sproingie waves 09:16:19 Then THROW is : throw handler @ rp! r> fp! r> rp! r> sp! ; clearly my pseudo-fu is lacking here, but you may get the idea. :) I need coffee. 09:17:14 tho i guess continuations dont actually impress forthers once they realize what they are -- an XT that remembers the stacks from when it was defined 09:17:14 (there are reasons I never see the word "continuations" ;-) 09:17:21 ok, time to go for real now 09:17:26 In fact that pseudocode is going to generate serious pseudo-errors, so just stand back about 20 feet and squint at it. :) There's an implementation in the Standard appendix that makes more sense. 09:17:28 laters 09:18:57 http://quartus.net/dpans/dpansa9.htm 09:19:13 downloaded dpans the other day 09:19:38 hmm 09:19:53 I think I see some of the boggle... It's our communications. 09:20:17 gforth suggests "catch" as made of lower words 09:20:22 I have an official copy of the Standard -- the draft is cheaper and has the same info. :) 09:20:57 I believe I'm thinking throw/catch in some C or C++ memory. 09:21:08 It's not so different a notion. 09:21:18 ahhh, but apparently it is. 09:21:26 In what way? 09:21:51 C doesn't have the catch-ing/throwing - they screw with goddamned attibutes and funcs. 09:22:28 If it's C you're thinking of, CATCH/THROW's closest cousins are setjmp() and longjmp(). 09:22:39 So, I believe we are in the same universe - but our terms and mechanisms may be screwed^H^H^H^H^H^Hkewd 09:23:12 yeah, and I *despise* setjmp/longjmp - I avoid it more than people and plagues 09:23:29 Have used it, however.. I remember now. 09:24:25 I have a feeling it's the collection of semantics that are bugging me, as I reconcile over to the vm. 09:24:52 setjmp() and longjmp() can be expensive, as all the registers are saved. 09:25:03 Also signal masks. 09:25:17 Quartus: can you envision a way to do exceptions with signals or interrupts? Just yes or no. 09:26:26 In Forth? You could do it with signals, but it seems to me a far clumsier approach. 09:26:30 Because, I believe my "view" of them is predicated on those concepts as supportable by the VM. 09:27:19 If you've got stacks an an instruction pointer, you can build CATCH/THROW without blinking. 09:27:33 in other words, I believe I may be visualizing the throw as a simulated-interrupt. 09:27:51 Well, stop that. 09:28:03 It's a non-local GOTO. 09:28:33 heh - really? And what is the throw? An indice into a new word? 09:28:57 No. What do you mean by that anyway? 09:29:03 * PoppaVic sighs 09:29:10 Man, this topic is killing me. 09:29:17 THROW is a non-local GOTO. 09:29:20 "throw" is a word 09:29:21 CATCH is the label. 09:29:36 yeah, and I think of them as triggers and handlers 09:29:50 If you like. Same idea. 09:30:04 well, then I *WAS* thinking properly. 09:30:32 someone, somewhere writes a handler - or the throws run right along until you hit "no fuckin' clue - scream and die" 09:30:47 Sure. Most-recent handler gets control from a non-zero throw. 09:31:19 "most recent" doesn't sound apropos. Unless you believe handlers need to write chain-code?? 09:31:41 But it's really, really simple. THROW doesn't raise a signal, or trigger an interrupt, or anything that fancy. It just reads the top of the exception-handler chain, and unrolls the stacks. 09:31:59 ahhhh, ok - so I wasn't too insane 09:32:07 Yes, the handlers chain. 09:32:25 The exception frame contains a link to the previous exception frame. 09:32:34 "ah so desu", iirc 09:33:00 "exception frames" are a implementation-artifact. 09:33:32 in fact, they sound a lot like the docs I've read on ppc "stack frames" and their 'links' 09:33:38 Yes, they contain the VM context for the virtual machine -- stack pointers and IP. 09:33:44 Aha! 09:33:46 ahhhhh 09:33:59 That's another thing I've been meaning to read up on! 09:34:21 Man.. Some days, we go apeshit trying to get our reference-terms to mesh. It's like running marathons. 09:34:47 I'm doing the best I can to be clear about it. 09:34:57 they contain a COPY of the vm-context. Gotcha' 09:35:05 The Quartus Forth exception frame has a whopping great 18 bytes in it. 09:35:15 Quartus: me too, it appears to just be "contextual". 09:35:57 Does anyone here know if the Wikipedia article on stack frames is accurate enough so that it is worth reading? 09:36:23 To implement CATCH, grab your stack pointer values and the address of the most-recent handler, throw them on the return stack, and EXECUTE the xt; put a zero on the stack, and you're done. 09:36:43 I did it again. Before you EXECUTE, update the handler pointer. 09:37:22 Then a non-zero THROW reads the handler pointer, grabs the stack pointers out of the exception frame, updates the handler pointer to the previous handler, and returns with the non-zero value on the stack.. 09:37:29 A 0 THROW does nothing. 09:37:32 That's the whole thing. 09:37:36 aardvarx: there really is no such beast. it seems to be almost 90% a language or ABI construct. 09:38:42 Of course CATCH cleans up its own exception frame. 09:40:37 OK. As I mentioned before, I may leave this particular view to a later date and maybe some input from you - for the vm. I'm pretty sure I can either ignore it this low or employ my fakeout. I'm not at all sure there is a diff, or why their should be. BUT, I do know I really hate the idea of non-local goto. 09:41:31 It's not quite the same thing, as it isn't a directed non-local goto -- it always goes to the most recent CATCH. 09:41:35 PoppaVic, "no such beast" ? 09:42:02 You really want to implement it on the same level as EXECUTE. 09:42:15 Q: understood - there is some vague overlap, and I'm not that thrilled with alternatives from either 'wing' 09:42:39 aardvarx: yeah, "stack frame" can mean per CPU, or per language, or some combination. 09:43:08 Interesting :/ 09:43:31 aardvarx: on an x86, they really do have 'frames' and even a register for "base pointer" - on other systems, ymmv 09:44:13 further, recall: a stack "frame" really is a type of structure. And, some systems document it better than others. 09:44:24 So a parallel situation probably DNE on Alpha. 09:44:31 no idea 09:45:17 What do you interpret it to mean anyway? 09:45:56 I no longer really do. My powerbook is so much more weird than my x86 was - I have to ignore it, it makes my head ache. 09:46:20 That's a dying platform anyway, isn't it? 09:46:22 aardvarx: to me, it's the C call args and locals. 09:46:22 In a typical C implementation, a stack frame holds data local to a subroutine when it's executed. 09:47:01 Quartus, do local variables count? 09:47:02 Quartus: yeah, it gets ugly when you work with ppc, x86 and others. The clarity diminishes 09:47:06 sure 09:47:12 As I understand it, Standard C does not mandate the use of stack frames for this purpose, but it's what you'll usually see. 09:47:24 in C, it's trivial - elsewhere, "locals" can get insane 09:47:50 I disagree, i don't find them complex either conceptually or in implementation. 09:47:58 You mean from a malloc/free perspective? 09:48:05 Quartus: well, yeah. In C, yer really not privy to the ABI. And a "frame" is ABI. 09:48:37 Whether or not the internal structure is documented, it's not complex concept. 09:48:45 aardvarx: well, look: in C itself, the "stack" doesn't really exist - you've args and locals and returns. 09:49:14 clear 09:49:14 Quartus: the concept is trivial, the assorted semi-documented ABI and calrity can be. 09:49:32 *clarity* you mean? 09:49:39 yah, my bad 09:49:54 no worries. 09:50:01 C may not allow explicit manipulation of the stack, but a conceptual stack does exist. 09:50:15 I've had docs about ppc "stack frames" for a few weeks - I gave up. Fuck 'em, I ain't gonna' live long enough to care. 09:50:26 Quartus: agreed 09:50:27 Whether it's implemented as a real stack, a virtual stack, or postcards mailed to Dennis Ritchie. 09:51:12 I can see where a debugger-author or a compiler-writer might care, but the rest of us have to draw a line and get along with it. 09:51:33 By the way, I sorted out the wiki issues. 09:51:50 excellent - was it screwed up too bad? 09:52:20 Apparently a vulnerability in one of the scripts. The admins decided to disable the permissions on the directory, and then didn't bother to email me that they'd done so. 09:52:27 I've upgraded. 09:52:28 ahhhh 09:52:36 spanking time ;-) 09:52:46 It's not what I'd call professional support. 09:52:53 yeppers 09:53:12 They left a file in the parent directory that said PLEASE_CALL_SUPPORT, which is surpisingly hard to notice when you have no freaking clue that it might be there. 09:53:20 hehe 09:53:28 pretty lame 09:53:30 Yeah. 09:53:40 --- quit: Quartus (Remote closed the connection) 09:54:03 well, as long as our confuzzlement didn't hurt you. I was worried. 09:55:25 BTW, I did figure out how we could appreciate USER variables. But, I'm struggling with a decent way to handle them. 09:56:49 Envision 2+ vm's using the same initial dictionary-bases... Now let A add a few vars/consts and B the same. - we'd never want them installed to a shared-memory accidentally. 09:57:48 So, I'm guessing we can either suffer "USER" or accept the more simple fact that all new, extensions, end up in unique spaces/buffers/files. 09:59:07 PoppaVic, you *are* aware that Quartus got dropped five minutes ago, right? 09:59:09 :P 10:00:35 no 10:00:44 lol 10:00:47 I was typing and I ignore a lot of systems-msgs 10:02:02 Well, it looks like he got dropped by accident, so hopefully he'll be back soon. 10:02:11 aardvarx: btw, we mentioned the other day - and I plan to experiment - with stacks with tags that can tell us how to r/w the data. I've just about concluded that stacks need not 100% reflect memory. 10:02:47 Do you mean Forth stacks? 10:03:11 instead, stacks are struct[] which may well have more info than we'd expect users/programmers to know. 10:03:15 yes 10:03:28 Sweet! 10:04:00 yeah, this an idea from earlier in the year, and I'm guessing may well offer a pardigm-shift. 10:04:01 You're referring to how C will interface with Forth, right? 10:04:22 sure: I'd use a flags-var or a set of bitfields. 10:05:15 which would then allow us to INSURE that fetched, gotten or comma'd vars were potentially absolute or offset 10:05:30 hehe - of course you are ;-) 10:05:49 good deal! 10:06:22 yes. It offloads some of the systemic work, (mostly for relocation), on the machine - instead of the programmer. 10:06:56 and, hell - it lets us consider screams and exceptions if the stack content is not something we EXPECT 10:07:22 You're making room for exceptions too? 10:07:24 Wow! 10:07:58 yeah, I've left it back-burnered, but mostly because I seem to vary in implementation ideas as well as context 10:08:46 Hopefully, the user/programmer will be able to keep track of the stack content if need be. 10:09:05 I believe I might add some ops to cover the very basics and implement very-low code support, but leave the insanity of "what I mean is.." to higher code. 10:10:34 As a rule, I want this vm to almost act like a cpu-simulator. Anything above should just be added above. 10:10:38 Sounds decent enough. 10:10:58 Rather ambitious, if I may say so. 10:11:18 well, damnit, I need it and I can't see it can possibly hurt. 10:11:34 lol 10:12:04 As I've oft mentioned, nothing sez a few guys can't "cop a 'tude" and write a "cross-compiler" or "native-code compiler" 10:12:28 We just need a portable "baseline" 10:12:47 You're talking about some "bad dudes" then! :P 10:13:13 For interactivity, I presume it might be a touch bulky or "slow", but they can xcompile to whatever. 10:13:31 xcompile?? 10:13:57 not really. They could "parse" the bytecodes and either lay down true asm, or C or whatever - or calls, etc. 10:14:07 cross-compile 10:14:17 I see. 10:14:59 I've thought, for many years, that forthers need to get past "we compile binary" and into "we are interactive-compilers that can be recompiled" 10:15:56 What's the problem with binaries anyway? 10:16:05 Is it an inflexibility issue? 10:16:09 they are non-portable 10:16:34 they MAY work on comparable platforms and cpus 10:16:57 * aardvarx notices big 'MAY' ... 10:17:52 So, fuck it. We'll "compile" bytecodes, expect an engine/lib, and folks that want a "binary" or "native-code" can write a tool to interpret either source or the image-burned bytecodes. 10:17:53 --- quit: aardvarx ("Lost terminal") 10:18:54 --- join: aardvarx (n=folajimi@shell2.sea5.speakeasy.net) joined #forth 10:18:58 Please realize, even libc is not really "portable" - systems add or remove shit on whims 10:19:21 otoh, glibc is glibc, etc. 10:19:28 I got kicked off; What was that about??? 10:19:40 That's never happened to me before! 10:19:54 back to channel 10:20:04 O_o 10:20:38 --- join: tathi (n=josh@pdpc/supporter/bronze/tathi) joined #forth 10:20:49 folks do not often realize glibc has tons of useful shit, but it MANDATES glibc - or that *bsd popen() can r/w 10:20:51 Any explanation for what just happened? 10:20:57 no idea 10:21:07 split/join? 10:21:11 --- join: Quartus (n=trailer@ansuz.pair.com) joined #forth 10:21:15 wb 10:21:36 Hi all. The Quartus wiki is unfortunately offline temporarily. The Pair admins claim it continues to have a vulnerability, despite it being specifically patched to the latest release. 10:21:40 Man, that was nasty!!! 10:21:51 Their approach to telling me this was to disconnect me and disable my account and wait for me to call them. 10:22:02 Q: damn, I'm sorry about that - it sucks that they do that. 10:22:03 Can anyone recommend a professional hosting service? 10:22:11 Speakeasy? 10:22:11 heh 10:23:00 I will have to head upstairs and brew chili right-quick, so.. No. i've never found even a "good ISP" 10:23:48 Best ISP money can buy, IMHO. 10:24:13 never found one yet, although my next is located upstated 10:24:21 /d/ 10:24:44 I found one that does NOT use fornat 'tech support" 10:25:32 anyway.. Lemme' go play Cook. I'll talk with you guys tomorrow. 10:25:38 stay well, folks. 10:25:41 --- quit: PoppaVic ("Pulls the pin...") 10:25:43 speakeasy, eh? Full cgi-bin suport? 10:25:45 +p 10:25:59 Yes. 10:26:05 Is that good or bad? 10:26:11 Good. 10:26:18 :) 10:26:57 Tell 'em that I sent ya! 10:27:05 :P 10:27:09 I'm also looking for an alternate wiki package, hopefully one that I can migrate from the twiki. 10:29:14 Hmm... 10:29:37 I'm also with the TLDP... 10:30:08 they're looking to set up a wiki to aid documentation efforts. They have yet to decide on one. 10:30:34 They do have something as a trial run, though. 10:30:49 It's being hosted by Ibiblio at tldp.org/log 10:31:34 "the TLDP" :) 10:31:53 ? 10:32:11 expands to "the the linux documentation project"... 10:32:27 :P 10:32:37 I stand corrected. :) 10:32:39 * tathi finds that sort of thing amusing for some reason... 10:32:46 "the LDP" 10:32:56 :P 10:36:59 --- join: virl (n=hmpf@chello062178085149.1.12.vie.surfer.at) joined #forth 11:24:45 --- quit: aardvarx ("leaving") 13:15:08 The wiki's back up, presently. 14:04:34 --- quit: saon ("leaving") 14:04:39 --- nick: saon_ -> saon 14:11:05 --- quit: Ray_work ("Stupid NetSplit") 14:30:16 --- join: Ray_work (n=vircuser@adsl-65-68-201-174.dsl.rcsntx.swbell.net) joined #forth 14:30:30 wb ray :) 15:27:48 --- quit: virsys ("bah") 15:39:07 --- join: virsys (n=virsys@or-65-40-181-238.dyn.sprint-hsd.net) joined #forth 16:01:44 --- join: crc (i=crc@pool-70-110-222-85.phil.east.verizon.net) joined #forth 16:02:02 --- mode: ChanServ set +o crc 16:08:13 --- join: asymptote (n=weldon@c208-37-7-248.ip.newc.com) joined #forth 16:10:48 Hey all. 16:14:47 hey you 16:14:56 hi Quartus, thinfu_ 16:15:00 --- quit: Ray_work (Read error: 110 (Connection timed out)) 16:22:35 --- join: dmesg (n=weldon@220.muma.nsvl.chcgil24.dsl.att.net) joined #forth 16:31:39 --- quit: asymptote (Success) 16:44:38 What's the news of the world? 17:03:35 Date line my bedroom...... 17:04:00 wife a sleep, for the night shift comming up at 10pm local time. 17:04:24 Son asleep, as he is unemployed and not in school. He'll party tonight. 17:05:06 Daughter is at a friends. I'm alone and relateing the news of my world to someone i've never `really' met, in an international chat room. 17:05:51 How's that working out for you? 17:06:06 so far, pretty darn good. :) 17:06:35 How's your day going Quartus? 17:06:52 Besieged by the incompetent. Otherwise, ok. 17:07:32 Hello, let me introduce myself, I'm one of the incompetent :) 17:07:50 Prepare to be besieged, yet again. 17:08:41 There has been a lot of great convos lately about forth. 17:08:51 Great for me, as I need instruction. 17:09:08 Maybe great for you, if you enjoy teaching. 17:10:09 I do. And believe me, you don't rate as incompetent against today's bunch. 17:11:11 I'm not talking about anybody in the channel! 17:11:58 I, personally, would not be offended if you were. 17:12:27 I'm glad you enjoy teaching. You're well spoken, and obviously experianced. 17:13:34 I learned, today, just how little you really need to know to start writing forth. 17:14:01 Also, I learned how much more there is to learn. 17:20:50 --- quit: dmesg (Read error: 110 (Connection timed out)) 17:23:31 Thanks, Ray. Sorry, was on the telephone briefly. 17:32:33 and Raystm2, how is the website? 17:38:27 Quartus np. and your welcome. I enjoy reading your posts. 17:38:34 hi virl 17:38:43 website, you mean your new one? 17:40:10 virl: I like it, so far. You have a style that is completely your own. 17:40:57 which website? 17:41:19 I do fear, however, that someone should get to know you before they go to youir site. First impressions are very important, espesially in text. 17:41:37 especially even :) 17:41:51 hi slava, getting link. 17:42:02 what's virl's website? 17:42:21 http://xell.forthworks.com 17:42:27 thanks crc :) 17:42:39 np 17:55:36 when someone stumble over something which is very hard to read then please say it to me 17:56:22 code would be more interesting :) 17:56:35 eh? 17:56:38 virl okay 17:57:39 virl: slava is saying, if you had some code up, the site would be more interesting. This site is being pounced before announced. 17:59:08 ah.. which code? forth code or the code of my very very incomplete C implementation? 17:59:18 any and all code 17:59:47 errand, 20 minutes brb 18:01:20 slava, for what? 18:02:08 for your project 18:06:11 slava, the project is about an evolving concept of a bytecode vm. it's not about any specific implementation. 18:06:27 will there be an implementatin? 18:07:21 there will be links listed on the site to them under the point 'implementations' 18:08:25 at the moment I'm doing a website for it and then it will have a link. 18:45:57 --- quit: sproingie (Remote closed the connection) 19:00:11 --- join: sproingie (i=foobar@64-121-2-59.c3-0.sfrn-ubr8.sfrn.ca.cable.rcn.com) joined #forth 19:18:16 --- quit: crc (Read error: 110 (Connection timed out)) 19:26:22 so anybody here? 19:28:53 I am. 19:28:59 Off and on. 19:30:03 --- join: crc2 (i=crc@206.148.25.9) joined #forth 19:30:25 now there is an implementation of xell, it's my experimental one. please don't build a view of it. to build a view of it is like suggesting how good a food for a cow was with it's cow pat. http://xell.forthworks.com/implementations.html 19:30:42 --- nick: crc2 -> crc 19:38:43 --- quit: crc () 19:40:26 --- join: crc (n=crc@pool-70-110-147-32.phil.east.verizon.net) joined #forth 19:44:02 --- join: LOOP-HOG (n=chatzill@sub22-119.member.dsl-only.net) joined #forth 19:53:26 --- quit: virsys (Read error: 110 (Connection timed out)) 19:53:43 --- join: virsys (n=virsys@or-65-40-183-200.dyn.sprint-hsd.net) joined #forth 19:59:49 --- join: snoopy_16 (i=snoopy_1@dsl-084-058-144-108.arcor-ip.net) joined #forth 20:11:24 --- quit: tathi ("leaving") 20:18:09 --- quit: Snoopy42 (Read error: 110 (Connection timed out)) 20:18:26 --- nick: snoopy_16 -> Snoopy42 20:46:57 --- quit: virsys (Connection timed out) 21:26:22 --- quit: Quartus (Remote closed the connection) 21:52:27 --- join: virsys (n=virsys@or-65-40-183-200.dyn.sprint-hsd.net) joined #forth 21:55:39 --- join: Quartus (n=trailer@ansuz.pair.com) joined #forth 22:42:10 --- quit: JasonWoof ("off to bed") 22:43:06 --- quit: Pepe_Le_Pew (Remote closed the connection) 23:11:03 --- quit: LOOP-HOG ("ChatZilla 0.9.61 [Mozilla rv:1.7.1/20040707]") 23:25:25 --- nick: thinfu_ -> thinfu 23:25:32 --- mode: ChanServ set +o thinfu 23:49:11 --- quit: Quartus (Remote closed the connection) 23:49:33 --- join: Quartus (n=trailer@ansuz.pair.com) joined #forth 23:49:34 hi thinfu 23:50:38 sup 23:51:00 whats new? 23:51:32 ported an ocaml raytracer to factor, got the running time down from 102 seconds to 23 by improving my compiler 23:51:54 a forth port would be interesting to see 23:53:48 to see how it compares? 23:54:06 yes, both in terms of performance and how complicated the code is 23:54:11 why did you port an ocaml raytracer? 23:54:16 and not code a factor raytracer? 23:54:30 because its been ported to various other languages, so i can benchmark with them 23:55:05 ok so essentially you just kept the algorithms the same? 23:55:08 yes 23:55:19 url to ocaml raytracer source? 23:55:53 don't want to accidentally google the wrong site 23:55:58 http://www.ffconsultancy.com/free/ray_tracer/code/1/ray.ml 23:57:03 so it essentially outputs a string? 23:57:20 which is viewable with a pic viewer? 23:57:23 a PNM file, yes 23:57:27 ah ok 23:57:34 its a very simple pixmap format 23:59:59 --- log: ended forth/05.09.16