00:00:00 --- log: started forth/11.05.10 00:11:17 --- join: gogonkt (~gogonkt@183.27.209.79) joined #forth 00:32:29 --- join: qFox (~C00K13S@5356B263.cm-6-7c.dynamic.ziggo.nl) joined #forth 00:44:17 --- quit: ttmrichter (Ping timeout: 240 seconds) 01:29:33 --- quit: nighty-- (Read error: Operation timed out) 02:07:50 --- quit: gogonkt (Ping timeout: 276 seconds) 02:32:35 --- quit: nighty (Quit: leaving) 02:33:13 --- join: nighty (~nighty@x122091.ppp.asahi-net.or.jp) joined #forth 02:34:21 --- join: gogonkt (~gogonkt@183.27.209.79) joined #forth 03:11:09 --- join: ttmrichter (~ttmrichte@221.234.156.62) joined #forth 04:34:09 --- join: Deformative (~Joseph@c-68-40-186-71.hsd1.mi.comcast.net) joined #forth 04:39:20 --- quit: Deformative (Ping timeout: 240 seconds) 04:40:40 --- quit: ygrek (Ping timeout: 246 seconds) 04:54:45 --- join: ygrek (debian-tor@gateway/tor-sasl/ygrek) joined #forth 05:17:52 --- join: Deformative (~Joseph@c-68-40-186-71.hsd1.mi.comcast.net) joined #forth 05:22:30 --- quit: Deformative (Ping timeout: 240 seconds) 05:26:00 --- quit: qFox (Ping timeout: 276 seconds) 06:18:16 --- join: Deformative (~Joseph@caen-cse-141-212-202-197.wireless.engin.umich.edu) joined #forth 07:05:52 --- quit: nighty (Ping timeout: 258 seconds) 07:06:41 --- join: nighty (~nighty@x122091.ppp.asahi-net.or.jp) joined #forth 07:22:53 --- join: qFox (~C00K13S@5356B263.cm-6-7c.dynamic.ziggo.nl) joined #forth 08:29:59 --- join: Hirams (~Hiram@93.186.101.237) joined #forth 08:30:04 As it were me to find the program against Google, which itself opened and closed the sites, in that time when me íåòó near computer. She worked as DDOS attack, has put(deliver)ed, but itself will go to walk. Remarkable Google on I created wipe after such, but sites miscellaneouses opened on all-round themes with enumeration of the main trends of the themes advisable and regulation amount visit given to directivities. 08:30:04 If I have simply program, that all like Google collectors immediately loose in that material, which I interest, not will possible create on me psychological portrait on my taste, habit, interest... 08:30:04 Since Google aside from installation cookie beside me on computer else has its extensive statistical database about which is hard cushioned. Our criticality on computer in contrast with their given about us - a triviality so shave off possible only boat, directed on opening and closing site while master íåòó building or than that occupied. Spreading the program ïîäîðâåò given about folk and all-out collection to information - better than attack DDoS attack Goo 08:30:04 gle, it is necessary ïîäîðâàòü his(its) purposes. In addition there is one more psychological advantage to the whole - advertisment control on its taste - a triviality, but pleasantly. Not whole advertisment I do not like, but here is determined sort can, and was useful at whiles. One more plus in that that managers of the local-area networks too got mixed up in my interest. Here just appropriately add such characteristic in program that she ïðåáûâàëà on open 08:30:04 page not strictly fixed amount of time, but different - that was an illusion of the functioning(working) the alive person. That is to say, who stakes out my opening the pages, could easy believe that works the alive person. Length of stay to fasten from amount of the letters on page. Here is such order on given program - some she was much needs and had its demand, particularly for one, particularly values invulnerability. 08:31:48 --- join: MayDaniel (~MayDaniel@unaffiliated/maydaniel) joined #forth 08:32:13 --- part: Hirams left #forth 08:46:42 what the hell was that? 08:46:54 --- quit: MayDaniel (Read error: Connection reset by peer) 09:08:31 --- quit: ttmrichter (Quit: No wonder these puppets are always in a lousy mood.) 09:19:14 --- quit: gogonkt (Ping timeout: 240 seconds) 09:21:47 --- join: gogonkt (~gogonkt@183.27.209.79) joined #forth 09:37:08 --- quit: scj (Remote host closed the connection) 09:57:50 --- join: scj (scj@shells.mycrosoft.us) joined #forth 10:28:12 --- quit: gogonkt (Ping timeout: 240 seconds) 10:28:32 --- join: gogonkt (~gogonkt@183.27.209.79) joined #forth 10:34:59 --- join: MoALTz (~no@92.18.16.192) joined #forth 11:46:18 --- join: Joseph_ (~Joseph@caen-cse-141-212-202-197.wireless.engin.umich.edu) joined #forth 11:49:24 --- quit: Deformative (Ping timeout: 252 seconds) 12:18:20 o_O 12:19:41 it seems to random to even be generated by markov chains 12:19:52 s/to/&o/ 12:31:27 --- join: Snoopy_1611 (Snoopy_161@dslb-178-004-222-241.pools.arcor-ip.net) joined #forth 12:34:02 --- quit: ygrek (Ping timeout: 246 seconds) 12:34:42 --- join: solar_sea (~solar@87.119.104.253) joined #forth 12:36:43 --- quit: DocPlatypus (Read error: Connection reset by peer) 12:41:45 --- quit: Snoopy_1611 () 12:43:11 --- join: Snoopy_1611 (Snoopy_161@dslb-178-004-065-046.pools.arcor-ip.net) joined #forth 12:53:53 --- join: DocPlatypus (~skquinn@dsl253-084-031.hou1.dsl.speakeasy.net) joined #forth 13:10:26 --- quit: DocPlatypus (Read error: Connection reset by peer) 13:18:42 --- quit: solar_sea (Quit: leaving) 13:19:57 --- quit: Joseph_ (Ping timeout: 260 seconds) 13:21:03 --- join: Joseph_ (~Joseph@caen-cse-141-212-202-197.wireless.engin.umich.edu) joined #forth 13:24:24 --- join: DocPlatypus (~skquinn@dsl253-084-031.hou1.dsl.speakeasy.net) joined #forth 13:45:11 --- join: TeruFSX (~quassel@71-210-136-53.mpls.qwest.net) joined #forth 14:15:25 --- nick: Joseph_ -> Deformative 14:35:17 --- quit: TeruFSX (Quit: No Ping reply in 180 seconds.) 14:36:21 --- join: TeruFSX (~quassel@71-210-136-53.mpls.qwest.net) joined #forth 14:52:57 --- quit: TeruFSX (Quit: No Ping reply in 180 seconds.) 14:58:28 --- join: TeruFSX (~quassel@71-210-136-53.mpls.qwest.net) joined #forth 15:00:43 I've read that EXECUTE is a somewhat expensive operation, so when I want to implement ie a list map function that takes a list and an xt, would it be "cheaper" to have map create a :noname on the fly with all the iteration code postponed, COMPILE, in the xt in the right place and then executing the final xt? 15:01:50 --- join: I440r (~mark4@108-64-168-250.lightspeed.wepbfl.sbcglobal.net) joined #forth 15:01:51 --- mode: ChanServ set +o I440r 15:03:17 then the function xt sent /to/ the map would only be interpreted once for compilation and in the loop be a native part of the code 15:11:37 --- join: mark4 (~mark4@108-64-168-250.lightspeed.wepbfl.sbcglobal.net) joined #forth 15:15:08 --- quit: qFox (Quit: Time for cookies!) 15:15:20 --- quit: I440r (Ping timeout: 276 seconds) 15:24:33 hmm, it is not possible to do it as I figured I'd do it, but input would be welcome anyways 15:25:04 do what? 15:25:51 implement the functionality whose effectivity I asked about above (or did you join recently? I have join messages on /ignore) 15:26:54 ijust joined :) 15:26:57 ah 15:27:19 I'll repost then, the channel is pretty idle so I doubt anybody gets angry 15:27:26 nobody will 15:27:28 I've read that EXECUTE is a somewhat expensive operation, so when I want to implement ie a list map function that takes a list and an xt, would it be "cheaper" to have map create a :noname on the fly with all the iteration code postponed, COMPILE, in the xt in the right place and then executing the final xt? 15:27:37 then the function xt sent /to/ the map would only be interpreted once for compilation and in the loop be a native part of the code 15:28:19 execute is not expensive at all in my forth. but then it looks like your talking about ANS forth related code 15:28:30 which is automatically much more complicated and slower 15:28:58 I'm using gforth, but as I said, I just read it, I haven't actually tested it 15:29:35 yea gforth is written in c 15:29:45 that makes it abouy 2846592654294659264985264965239465923645932 times more complicated than it needs to be 15:29:50 hah 15:30:03 its also ans forth which makes it 284650847632596492465986426582649826562846593264592736459864589728546926549236459832645982634985623562345682304590238465 times more complicated than it needs to be 15:30:11 im not an ans fanboy 15:30:26 in fact i HATE the ans forth standard with a passion that goes deeper than my hate for C :) 15:30:32 why? 15:31:14 because the ans team FUCKED UP the language by implementing bullshit like "invert" and "postpone" 15:31:34 postpone is for dumbasses that cant get to grips with what word is and what word isnt immediate 15:31:52 theres no sane reason for postpone, compile and [compile] work PERFECTLY 15:32:10 the ans forth standard does not describe the forth language 15:32:14 but a language of the same name 15:32:18 -- chuck moore -- 15:32:28 the word TO is also stupid 15:32:31 the word is called !> 15:32:35 ! is pronounced STORE 15:32:39 > is pronounced TO 15:32:41 mark4: I happen to like ANS Forth 15:32:55 the ans word "TO" does not describe what it is doing 15:33:12 and if you want to use non-standard stuff like !> that's fine, just alias it to "TO" so it will still work on an ANS Forth 15:33:21 !> is not "non standard" 15:33:26 the standard is non standard 15:33:29 Postpone is the only sane way to do any meta-programming in Forth. 15:33:40 Only dumb-asses deny that trivial fact. 15:33:55 but the ans team thinks everyone who codes forth is too stupid to read squiggles and blobs like @ and ! and wont understand !> means STORE TO 15:34:00 mark4: ANS Forth is the best standard we have. if you don't like it, by all means contribute to the 200x standard 15:34:05 which I guess would now be the 201x standard 15:34:09 and !> was around for at least 15 years before the ans standard 15:34:33 DocPlatypus, why the fuck would i butcher my forth code by contributing to a bunch of career academics fucking with perfection? 15:34:36 !> looks like it belongs on the head of a duck 15:34:50 I mean... @ and ! are cryptic enough 15:34:53 yes. your new to forth i see 15:34:57 Sorry, I did not mean to start a language war 15:34:59 @ and ! are not even cryptic 15:35:12 mark4: actually I've been programming in it off and on for about 3 years-ish 15:35:20 tlvb, me either but it happens alot when people bring up ans forth in here with me :))) 15:35:28 yea. like i said. not long 15:35:30 even though I find people's thoughts interesting 15:35:52 ive been coding forth since the 83 standard and there are thingx the 83 standard fixed that the ans team subsequently LIMP WRISTEDLY broke 15:37:00 while the 83 standard has some things that were wrong with it they could have been fixed far more elegantly 15:37:05 which is why i developed isforth 15:37:35 what isforth? :p 15:38:00 www.isforth.com 15:38:11 its a 32 bit x86 linux forth 15:38:25 the isforth kernel is coded in 100% PURE assembler and uses no external libraries 15:38:33 "640K should be enough for everyone" :D 15:38:33 woah 15:39:06 asau pretty much 15:39:32 ah 15:39:37 isforth is also the single fastest compiler of any non trivial language. when someone shows me another compiler that can compile sources faster ill stop claiming that 15:39:39 this is the Forth that didn't even know what RSHIFT was 15:40:08 why not call it "shift-the-cell-at-the-top-of-the-parameter-stack-right" 15:40:14 the word is >> u>> and << 15:40:17 The value of compiler is the speed at which it compiles. :D 15:40:24 but dont bother your too dumb to read squiggles and blobs it seems 15:40:38 asau compile time IS significant 15:40:46 >> is C nonsense 15:40:51 is it 15:41:05 the ANS Forth standard has RSHIFT in it. and no mention of >> 15:41:14 so, my code has RSHIFT in it. 15:41:17 if @ and ! are too cryptic for you then you should probably go write java or something 15:41:19 mark4: right, that's why linux is written in isforth. :D 15:41:30 it should be :) 15:41:36 But it isn't. 15:41:54 I wonder why people abandoned forth for C. 15:42:07 I saw that isforth didn't know what RSHIFT was... and gave up right there. 15:42:13 Perhaps they're all lemmings that don't understand what is good for them. 15:42:16 because every moron and his autistic brother can code c 15:42:21 * mark4 points at asau 15:42:35 I mean, I can deal with a lack of require, [undefined], and even d+ and d- 15:42:58 isforth doesnt have require. doesnt support conditional compilation 15:43:02 doesnt have postpone 15:43:06 doesnt have invert 15:43:23 And has single user. :) 15:43:24 sheesh. at least omit words that are easy to bootstrap if we need them 15:43:57 doc thats correct - ans fanboys can inject their bullshit into my system easilly 15:43:59 it is a bi%&# to try to code words like invert out of nothing 15:44:14 it has NOT 15:44:16 it has NEGATE 15:44:44 the word invert is part of why i hate ans forth. if you knew your ass from a hole in the ground about forth history you would know what invert is all about 15:44:49 let me give you a clue 15:44:56 the 79 standard had a BROKEN definition for not 15:44:58 Isn't "negate" ANS? It was "minus" before. 15:45:04 it was identical to the definition for 0= 15:45:04 :) 15:45:11 yeah 15:45:15 I remember that... 15:45:16 the 83 standard fixed not and made it a 1's compliment 15:45:20 or rather I remember reading about it 15:45:33 no. negate was negate even in the 79 standard 15:46:01 the ans team seeing that there were some people who had code that expected NOT to be identical to 0= and some people who expected not to be a 1's compliment 15:46:22 decided to invent a new word called INVERT which is identical to the CORRECT definiton for not 15:46:24 DocPlatypus: you can implement "invert" with "negate" and "-" :) 15:46:45 no. you implement invert as ' not alias invert 15:46:58 invert IS not with a new name 15:47:32 negate - is the same as + 15:47:47 okay 15:47:48 : - negate + ; <-- is quite often how - is defined 15:47:55 negating and subtracting is the same as adding too 15:48:07 ' >> alias lshift 15:48:20 ' u>> aliasi ulshift ???? lushift??? wtf? 15:48:27 erm rshift i mean 15:48:32 ' << alias lshift 15:48:54 okay... how do you load another file in isforth? 15:49:00 there's no include, no require 15:49:05 and -fload only takes one argument 15:49:34 ideally, I'd like to load a file from within another instead of copying the whole mess 15:49:54 ./isforth -fload root-file.f where root-file.f is an single source file containing as manu fload directory/file.f as required 15:49:58 or you cah just say fload blah.f 15:50:17 i STRONGLY discourage files including files including files including files 15:50:26 in fact you cant nest deeper than 5 levels in isforth 15:50:26 well it's the easiest way to get this particular code working 15:50:35 my recommendation is to have ONE FILE that contains fload blah.f 15:50:51 if blah.f requires foo.f to be loaded then you place an fload foo.f above the fload of blah.f 15:51:07 ok 15:51:08 right now 15:51:16 nested includes to the umpteenth level is part of why C is as horrendously BAD as it 15:51:17 is 15:51:20 I have: require higherprecision-compat.fs 15:51:27 inside higherprecision.fs 15:51:37 foo.h includes bar.h which includes futs.h which includes which includes which includes... ad infinitum 15:51:49 will ' fload alias require work? 15:51:59 probably 15:52:17 but isforth has no floating point extensions or conditional compilation 15:52:33 you know what ' is yes? 15:54:03 : ' defined 0= ?missing ; 15:54:19 yeah 15:55:10 it returns the code field address (an xt) of the word if its found 15:55:47 I know what ' does, used it a lot already 15:55:50 okay 15:56:09 trying to figure out how to teach isforth [if] 15:56:33 do you know how [if] etc etc are defined in gforth? 15:56:36 yeah 15:56:58 it appears to do something specific to gforth internals 15:57:14 : [if] 0= IF countif off lookup @ 10415156 ! [struct]-voc lookup ! then ; immediate 15:57:22 well 15:57:24 that's see output 15:57:33 you can probably parse for another [ character than peek ahead of the [ to see if its an [else] or a [then] or just a [ 15:57:48 okay 15:58:05 all my code uses [if] to determine just what needs defining and what is already there. 15:58:08 yea 10415156 ! is very descriptive 15:58:15 thats SEE. use view [if] 15:58:23 i suppose gforth has view? 15:58:25 maybe not 15:58:31 nope 15:58:36 "Undefined word" 15:58:39 isforth doesnt have view either 15:58:47 isforth lacks even see 15:58:54 grep the sources for the definition for [if] 15:59:00 no it doesnt 15:59:12 the one I downloaded does 15:59:14 it even has a built in debugger - but i think its borken atm 15:59:18 okay 15:59:20 what version do you have 15:59:20 or maybe not 15:59:28 it does have see, turns out 15:59:28 1.22 15:59:43 yea but its leaving a value on the stack atm 15:59:46 just doesn't do anything for words defined in assembler 15:59:54 and cant SEE does> words - which it used to be able to do 16:00:05 no. thers no disassembler 16:00:22 I'd be happy if it just spit out "* is code" 16:00:28 i kind of burned out on isforth - 3 years of 18+ hours a day doing nothing but code isforth 16:00:29 or something similar, a la pforth 16:00:30 I think? 16:00:34 --- quit: Deformative (Ping timeout: 252 seconds) 16:00:36 yeah 16:00:51 isforth is still in beta 16:00:56 isforth feels like a prototype dune buggy 16:01:01 the decompiler needs some work as does the debugger 16:01:11 gforth more like a car I'd be content driving to the store and back 16:01:19 but the purpose of the debugger is to show people how forth works internally 16:01:23 DocPlatypus: gforth's "[if]" uses separate wordlist to implement necessary semantics. 16:01:51 DocPlatypus: what you see is replacing current search order with that one hidden list. 16:01:56 ASau: oh. translation: "DocPlatypus: you're crazy for trying to write anything like it for isforth. put down the case of Full Throttle and back away slowly" 16:02:10 even the name "word lists" is another limp wristed ans forth invented word 16:02:21 to save the morons who dont know forth from having to learn what a vocabulary is 16:02:35 VOCABULARY. not (camp voice) word list 16:02:39 And what "vocabulary" is? 16:03:16 Linked list? 16:03:17 yea obviously you dont code forth 16:03:29 its funny though ans doesnt have 16:03:31 wordlist blah 16:03:38 they have vocabulary blah 16:03:44 to create a new "word list" lol 16:03:47 fucking stupid 16:03:58 That's because you never coded Forth. 16:04:05 You code in your toy dialect only. 16:04:29 thats right asau. you know everywhere ive worked and everyone ive worked for 16:04:36 Wordlists are more useful than "vocabularies", since they are anonymous. 16:05:03 word lists ARE vocabularies 16:05:04 You can implement "vocabulary" with wordlist, but not vice versa. 16:05:38 Or you need to jump through hoops to do that. 16:08:40 mark4: postpone in gforth is comp' postpone, why is postpone so bad? 16:10:09 tlvb: postpone is bad because it allows you not to care whether you're using word that compiles or just a regular word. 16:10:34 prior to postpone there was compile and [compile] 16:10:48 tlvb: and you're supposed to learn all you dictionary by heart, and apply "[compile]" and "compile" properly. 16:10:48 [compile] took the next token out of the INPUT stream and compiled its XT 16:10:57 it was used to force immediate words to compile instead of execute 16:11:16 compile on the other hand took the next XT out of the execution stream and compiled that xt 16:11:39 i guess the ans team AGAIN felt YOU were too stupid to know how to use each of the above because they have similar names 16:12:02 and would require you to understand what an immediat word was and to know what ALL immediate words in your system are 16:12:16 so to solve this COMPLETE NON PROBLEM they invented postpone 16:12:32 tlvb: note also that "postpone" allows native code, and non-threaded code is HERECY. 16:12:35 thus relieving you of the responsibility of knowing the language 16:13:04 thers no reason for compiler or [compile] to not work with native code 16:13:27 and they certainly would not need to be as clusterfuck obfuscated as the definitinon for postpone 16:13:28 Oh, your "compile" is immediate! :D 16:23:07 tlvb: JFYI, since you expressed some interest in meta-programming, 16:23:27 tlvb: some people use ` as synonym for "postpone". 16:24:21 tlvb: this allows defining meta-definitions in a saner way than with "[compile]"/"compile". 16:25:54 that makes sense, right now I have some definitions full of postpone, I'm trying to wrap my head around what is actually happening with it 16:26:15 as in postpone with a grammatical comma, not the word "POSTPONE," 16:26:19 If you're using gforth, : ` postpone postpone ; immediate works. 16:27:25 Of course, it is ANS HERECY(!), it is NOT-FORTH(!), and blah blah blah. 16:27:44 heh 16:27:56 postpone postpone sounds a lot like procrastination though :) 16:28:28 no its obfuscation on top of obfuscation 16:28:40 compile and [compile] are SIMPLE to use and understand 16:28:53 rotsa rukk understanding what postpone does or how it does it 16:29:06 becuase that secret sauce under the hood black magic 16:29:08 u no look! 16:29:33 if your trying to do "meta definitions" i ask... what do you need them for 16:29:59 im not even sure i know what a meta definition is or why anyone would actually need them 16:30:11 im sure thers a far FAR simpler way to accomplish the same thing 16:30:17 So that I don't write stupid patterned code again and again. 16:30:35 fancy shmancy macros? 16:30:41 Of course, it NOT-FORTH, NOT-PROGRAMMING, and blah blah blah. 16:30:50 macro: blah 100 0 do i . loop ;macro 16:31:03 which you CANNOT do with ans forth macros 16:31:11 you cant do loops or branches or nest them 16:31:22 Is it lexically or dynamically scoped? 16:31:36 what do you mean 16:31:41 are the macros just strings? 16:31:54 I mean what I write. 16:32:00 Are you macros lexically scoped? 16:32:06 no they are compiled and their run time causes them to inline themselves 16:32:32 they are transient. you can discard all macro definitions 16:32:39 YOU decide their scope 16:33:10 It is obvious that you don't even understand the question. 16:34:56 Which code is inlined for the definition you give above? 16:35:05 Reduce "100" to "5". 16:37:09 hehe, postpone is implemented with postpone, which is implemented with postpone ... 16:38:09 Does it bother you? 16:38:24 it seems a little circular 16:40:05 tlvb its not using recursion 16:40:09 : foo ..... ; 16:40:17 : foo .... foo ..... ; 16:40:29 the second definiton for foo makes a reference to the previous definition for it 16:41:03 : blah write lots of forth code here blah blah ( right now the definition for blah is HIDDDEN) .... ; 16:41:18 to do recursion you would do : blah ... . . . . recurse ... . ; 16:41:41 yes, but the definition is still circular, it is the same as trying to explain a concept and using the concept as a part of the explanation 16:42:20 tlvb: that's normal. 16:43:30 tlvb yup. thats ans forth normal 16:43:34 its not forth normal 16:43:41 in fact ans forth does ALOT of anti forth things 16:43:48 like hide system details from you 16:44:03 there is not user. there is no system there is NO SPOON 16:44:05 there is just forth 16:44:29 any forth system thats too complifuckated for YOU the complete novive to understand at ALL LEVELS... is bad 16:44:37 isforth fails in this way in some places too :/ 16:44:41 --- join: Deformative (~Joseph@c-68-40-186-71.hsd1.mi.comcast.net) joined #forth 16:44:44 i can pretty much fix that once im metacompiling tho 16:44:55 "complete novice" even 16:47:56 Forth can only be Forth if you can tell that you run it on l00n1x/i386. 16:48:22 If you cannot tell whether you run it on amd64 or MIPS, it isn't Forth. 16:48:38 And it isn't Forth at all, if it runs on custom Forth-based CPU. 16:49:42 :D 17:04:01 --- quit: Deformative (Ping timeout: 240 seconds) 17:09:56 --- join: Deformative (~Joseph@c-68-40-186-71.hsd1.mi.comcast.net) joined #forth 17:18:47 to be honest... using the previous definition of a word like that is horrible practice 17:18:55 makes code much harder to read and understand 17:19:24 what you think "foo" does, and what it actually does, may be two way different things 17:22:12 so call it "foo-proto" or "foo-part" or something that sets it apart 17:27:07 usually a primative for a function is wrapped inside () 17:27:17 so : (foo) ......; 17:27:27 : foo lots of forth code here (foo) loop ; 17:27:45 doc thats not alwaus true 17:28:12 for instance my forth kernel has a word called expect 17:28:26 its kind of primitive but sufficient for the kernel itself 17:29:04 later on if i want command history or REAL editing (not just delete/backspace/retype) i can create a NEW definition of expect 17:29:15 which could possibly reference the previous definition of it 17:29:30 doing this is NOT bad 17:29:40 doing it and not FULLY explaining it in the COMMENTS is bad 17:40:02 --- quit: gogonkt (Ping timeout: 240 seconds) 17:40:30 hm, no surprise I find it difficult to understand postpone in terms of compile and [compile] -gforth does not have compile 17:43:27 compile is a parsing word. it parses the next token out of the INPUT stream 17:43:31 compile blah ... .... . . 17:43:43 compile is immediate. it parses in blah and compiles its xt 17:43:49 should these be the same?: : a postpone + ; immediate : b a ; -and- : a + ; immediate : b [compile] a ; ? 17:44:46 i have no idea. i refuse to wrap my head around obfuscation like postpone 17:45:11 mark4: ok, how would you compile the compilation semantics of a word? 17:45:33 I found this that I tried to use: http://www.complang.tuwien.ac.at/forth/dpans-html/dpansa6.htm#A.6.1.2033 17:46:14 inthe abov examples : a postpone b ; i ask this 17:46:22 does the definition for A compile the XT for b? 17:46:31 i.e. when X executes. b gets compiled? 17:46:47 what i would do here instead of having A and doing : blajh ..... A .... ; 17:46:54 so that where A is referenced B is compiled 17:46:56 u would do 17:47:02 : blah ...... B .... ; 17:47:30 --- join: gogonkt (~gogonkt@183.27.209.79) joined #forth 17:47:35 A is a macro to compile B 17:47:46 now... if b is more complex 17:48:03 macro: a lots of forth code here loop ;macro 17:48:07 : foo ...... a ; 17:48:25 however. inlining is pretty much a pointless waste of time 17:48:30 : a lots of forth code here ; 17:48:36 : blah ...... a .... ; 17:48:40 call A from within blah 17:49:16 ans code has a horrendously fucked up habit of having : blah postpone a postpone b postpone c postpone d postpone e ; immediate 17:49:29 which was why i wrote my macro colon definitions. 17:49:40 with postpone crap you cant "postpone" loops or branches 17:49:52 with my macro colon definitions you CAN 17:49:57 what? yes you can 17:50:51 you cant do :a postpone 10 postpone 0 postpone do postpone i postpone . postpone loop postpone foochck postpone if postpone do-thois postpone else postpone do-that postone then 17:51:07 and even if you COULD it would be another horrendously cluster fucked up pile of SHIT code 17:52:05 lets take a beautiful SIMPLE, elegant language and add inordinate amounts of visually cluttering syntatic sugar bullshit 17:52:13 ans forth is FUCKED IN THE HEAD 17:52:18 so is eveyrone that uses it 17:52:48 I think you can't postpone numbers, but you can do : foo postpone begin postpone again ; immediate just fine 17:53:10 you cant do if/else/then as far as i know 17:54:23 haven't tried that, but the gforth manuals have the example : endif postpone then ; immediate 17:54:41 you also cant compile a ." 17:55:03 ugh 17:55:06 fucking dumb too 17:55:16 ' then alias endif 17:55:21 : then endif ; immediate 17:55:48 actually then is immediate so you do need to "postpone it" there 17:56:00 but creating a new definition that calls the old one like that is moronic 17:56:08 alias creates a new header (new name) on an old word 17:56:11 --- join: ttmrichter (~ttmrichte@221.234.156.62) joined #forth 17:56:14 it creates NO NEW CODE 17:56:41 however. why do you need to postpone foo postpone bar postpone bam postpone blah 17:56:48 just do : xyzzy foo bar bam blah ; 17:56:56 and CALL xyzzy not inline it 17:57:02 --- quit: gogonkt (Ping timeout: 240 seconds) 18:20:43 I'm trying to do a bit more metaprogramming than that 18:20:57 define metaprogramming 18:23:07 maybe that is the wrong word, but I'm implementing a linked list, easy enough, and a map function for that list, i.e. that takes an execution token and applies it to all the elements of the list, however there are two kinds of functions that can be mapped on the list those that operate on the list nodes, and those that operate on the node data 18:24:37 kind of like a spreadsheet :) 18:25:56 : linked-list create , does> do-linked-list-operations ; this is a creating word that creates a linked 18:26:01 I can make two map functions, one for each kind of operation, or I can make the map function expect an xt that operates on the nodes, and if I don't want that first transform the xt into something that does 18:26:20 list. the head of the list is commad in. you can now create a word to ADD to the linked list or remove from it 18:26:53 : printnode node@ . ; nodeaddr ' printnode map 18:26:55 some-item add-to my-list or some-item ' my-list add-to-list 18:27:05 add-to-list operates ON the list 18:27:16 some-xt my-list 18:27:38 my-list when it is executed will run the do-linked-list-operations code 18:27:51 which takes the xt and applies it to all the items in the list 18:27:52 however 18:28:11 the do-linked-list-operations is going to have to know A LOT about the kind of items being stored in the list 18:28:22 what is the nature of the data stored in one node of a list 18:28:44 single cell for now, but it is not really important 18:29:10 will every list ALWAYS contain the same "types" of data 18:29:26 or can one item in the list be a string. another be an xt. another be a random number etc etc 18:29:35 for now, yes it is more proof of concept, programming exercise than anything else 18:29:44 ...yes it will be the same type of data 18:30:18 then you certainly do not need to be doing postpone foo postpone bar postpone bam ; immediate 18:30:41 in fact every time i see that i see a classic example of someone with their head stuffed too far up their own ass to know good code if it bit them on said ass 18:30:57 its VERY VERY bad 18:31:07 it makes the code visually cluttered and thus difficult to read and maintain 18:31:36 hah, if I were concerned with the result I would use a language that has lists already 18:31:36 theres NO reason why instead of ding : foo postone x postpone y ; immediate you dont simply define : foo x y ; 18:31:59 forth doesnt hand everything to you on a plate 18:32:08 if you want linked lists its trivial to create them 18:33:18 i know im not helping much tho :) 18:33:23 im RABIDLY anti ans forth 18:33:32 : rw-iter ( xt [ n -- n ] -- xt [ nodeaddr -- nodeaddr ] ) >r :noname r> postpone read-node compile, postpone writenode 18:33:40 ...bleh restart 18:34:03 : rw-iter ( xt [ n -- n ] -- xt [ nodeaddr -- nodeaddr ] ) >r :noname r> postpone read-node compile, postpone writenode postpone next-node postpone ; ; immediate 18:34:13 erm what does :noname do - create an anonymous : def? 18:34:16 yes 18:34:18 ugh horrible 18:34:24 isforth has 18:34:28 you then create an NON anonymous definition 18:34:41 : bar .... ; 18:34:45 then 18:34:49 headers> to turn headers back on 18:34:56 : ..... bar .... ; 18:35:06 i.e. you can SEE in this definition that BAR is being referenced 18:35:23 then you do "behead" to DELETE all the headers of the definitions that were marked for beheading 18:35:49 NO noname: definitions. you always give the words a name. therefor all the definitions that reference them are READABLE 18:36:18 i.e. they are more self commenting than they would be if you simply commad in the XT of an anonymous definition 18:37:04 i cant read all that postpone compile, postpone blah blah crap 18:37:10 what is compile, 18:37:28 and is it an immediate word? 18:38:05 compile, xt – core-ext “compile-comma” 18:38:06 Compile the word represented by the execution token xt into the current definition. 18:38:11 the problem is, compile foo and [compile] foo are TOTALLY DIFFERENT OPERATIONS 18:38:15 from the horse's mouth 18:38:21 yet both are mashed into the functionality of POSTPONE 18:38:38 i cant tell what the fuck postpone is doing because it could be doing one of TWO different operations 18:39:32 : b postpone a ; immediate : c b ; see c 18:39:33 b ok 18:40:20 postpone foo <--- foo COULD be an immediate word and in this case postpone is performing the same operations as [compile[ 18:40:26 erm [compile] 18:40:48 if foo is NOT immediate thehn "postpone foo" is taking the XT of foo AT RUN TIME and compiling it 18:41:07 i.e. postpone foo could be a compile time action or it could be a run time action of the word containing it 18:41:10 YOU CANT TELL 18:41:18 postpone is bad 18:41:45 compile and [compile] are TOTALLY DIFFERENT OPERATIONS. "postpone" does both 18:42:39 its like having a word called ANDOR taht does eithr and AND operation or and OR operation depending on "compile time context" 18:42:48 or maybe depending on run time context... 18:43:44 andor might be an immediate word that at run time performs an AND. or it could compile an OR into the definition containing it so that at RUN time it does an or 18:44:05 erm an immediate word that at COMPILE time does an AND or compiles an OR for a run time or operation 18:44:08 is what i meant to say 18:44:21 thats how postpone works. FUCKING MORONS invented postpone 19:09:11 basically I'm not interested in postpone's actions on immediate words, but on normal words, I want to compile the compilation semantics of a word 19:09:36 you know how create does> works? 19:09:55 create creates a word. does> defines the run time actions of that word 19:11:50 I have used it to create words that act as counters, but no advanced things 19:12:18 ok well a definiion for constant COULD be : constant create , does> @ ; 19:12:34 you need a linked list creating word 19:12:44 the creating word JUST CREATES the linked list 19:12:58 you also need to be able to add to that linked list, remove from it 19:13:12 or perform actions on its elements 19:13:42 a linked list could simply be a 2 cell array that contains pointers to its head and its tail 19:13:56 : linked-list: create 0 , 0 , ; 19:14:08 linked-list: my-list 19:14:52 you will also need a node item. a node item would contain forward and backward links AND a pointer to its data 19:14:59 so a node is a 3 cell item. 19:15:14 this way a node never contains its payload, it just contains a POINTER to its payload 19:15:39 : node: here 0 , 0 , 0 , ; 19:15:47 nodes have no names here 19:16:05 node: just returns an address. the address of the node 19:16:44 well, I have the linked list down already, although with memory on the heap 19:16:59 yea using heap is actually how i did it too 19:17:24 i wrote a heap handler (memory sub allocator) in isforth 19:17:43 im not saying this is how you SHOULD do it. im just using examples 19:17:47 lose ones :) 19:18:12 so you have a linked list. you have the ability to add to the list, remove from it, or... operate on its elements 19:18:26 create a word that traverses a list 19:18:40 : traverse ( xt --- ) do lotsa stuff here ; 19:18:50 err wrong 19:19:01 : traverse ( xt head --- ) ... ; 19:19:41 traverse scans the linked list passed to it and executes XT on each element 19:19:56 now. will xt operate on the node or on the payload of the node 19:20:08 exactly 19:20:12 i.e. each node might contain an integer and the xt might be a 2* 19:20:13 this is where I am currently 19:20:21 i.e. a double the payload 19:20:58 xt MIGHT have to be defined as : double (xt node --- ) fetch-node payload 2* store-back-in-node ; 19:21:03 or traverse might do 19:22:04 : traverse ( xt head --- ) 2dup fetch-node swap execte over store-node scan-to-next-node and repeat till end of list ; 19:23:04 isee NO postpone foo postpone bar postpone bam postpone foobar postpone foofoo postpone stupodity 19:23:09 stupidity 19:23:16 or any reason for it 19:23:33 forth USED to teach simple coding design and simple code implementation 19:23:36 not any more 19:23:40 ans forth destroyed that 19:24:17 were there ever Forths that had less than 16-bit cells? 19:24:25 I know ANS says 16 bit minimum 19:24:31 well. yes sort of 19:24:37 wow 19:24:39 there ARE 8 bit uC's you know 19:24:40 but 19:24:47 yes, the 6502, Z80, etc 19:24:47 they all use 16 bit cells really 19:24:54 except.. there are 11 bit processors too 19:24:56 even today 19:25:25 or even 24 bit processors like the abominations pic produces 19:25:32 yeah 19:25:43 tho data space is 8 bit addressable on those 19:25:55 a lot of my code that I wrote as a hobbyist has a 32-bit cell or greater environmental dependency 19:26:07 code space is also 16 bit addressable but has 24 bits in 16 bits of space 19:26:12 ah 19:26:18 so the top byte is a dummy byte 19:26:37 i.e ONE 16 bit cell has an upper and a lower cell. the upper cell however only has 8 bits of real data in it 19:26:38 and I agree a bit that postpone can get confusing 19:26:43 exactly. its a ghost byte 19:27:00 potpone isnt confusing, its just BAD coding 19:27:01 mark4: the thing is that I have either to make traverse list do the @/! node operations, but if I just want to print the list I can't do somelist ' . traverse, but have to do : dup. dup . ; somelist ' dup. traverse because traverse expects the xt to leave the new number on the stack 19:27:02 the only time I've really used postpone 19:27:09 the entire reason for postpone was STUPID 19:27:17 is because GNU Forth has these special optimization words 19:27:19 ?dup-if 19:27:24 ?dup-0=-if 19:27:25 mark4 or I need to implement all the @!'s in the xt function 19:27:29 and others like it 19:27:40 and I have to write a definition for it for non-GNU Forth 19:27:46 tlvb thats doable 19:28:02 just have a word called node@ that fetches the contents of the node 19:28:03 : ?dup-if postpone ?dup postpone if ; 19:28:03 so 19:28:07 etc. 19:28:41 : do-something ( xt node --- ) tuck node@ swap execute swap node! ; 19:28:48 erm no 19:28:55 do-something wont be given the xt 19:29:04 mark4: currently I have traverse expect the xt to do the @!, but then all functions need to be capsulated into new words with @! ops 19:29:06 ok lets say you want to do 2* on every noe 19:29:07 node 19:29:08 okay 19:29:16 how would you do what I just did without postpone? 19:29:34 : node2* ( node --- ) dup node@ 2* swap node! ; 19:29:53 ' node2* is the XT you pass to traverse 19:30:15 so instead I create a word rw-iter ( xt -- xt ) that takes a xt that takes a number and leaves a number and wraps @! ops around it and returns an xt for /that/ 19:30:55 well. everywhere i have ?dup-if i would just do "?dup if" basically 19:31:18 I also have ro-iter that does the same but does not expect the input xt to leave a number (eg for ' . ) so it won't wrap ! ops around it, just @ 19:31:29 tlvb, that sounds like its trying to be more complex than it needs to be 19:32:04 just have node@ node! words, and operation words that use those AND perform some operation 19:32:39 then just pass the xt for your operation word to traverse along with a list 19:32:54 : traveerse ( operation-xt list-head --- ) 19:33:11 but then you would have to do new words for any word you want to apply to the node payload of a list 19:33:35 instead of just somenode ' someword rw-iter map 19:33:40 for every "operation" you will need a word to perform that operation yes 19:33:49 mark4: I want to take advantage of GNU Forth's optimization though 19:33:49 where someword operates on the payload 19:33:55 so my code will have ?dup-if in it 19:33:58 DocPlatypus, bad idea 19:34:00 and that needs to be defined for others 19:34:15 isforth has no optimizer at all. optimizers do MANY bad things 19:34:25 1: it destroys the 1:1 corelation between source and object 19:34:37 2: it makes the coder lazy "Because the optimizer will fix it for me" 19:35:00 Oh please. 19:35:12 What an optimizer does is make a lot of extra work for the compiler developer. 19:35:15 Rightfully so. 19:35:20 haha 19:35:42 ok 19:35:46 GNU Forth has ?dup-if in code 19:35:49 speeding it up 19:35:55 right. and makes it more likely that the simple compiler be turned into a horrendously complex clusterfuck of bugs 19:35:57 like gcc 19:36:01 I don't see anything wrong with a simple fallback for other Forths that does the same thing 19:36:34 ?dup-if does something kind of bad 19:36:39 if im reading it right 19:36:56 if the top of stack is 0 the ?dup-if will EAT it and branch to the else/then 19:36:59 It also makes it more likely that your code will run at a tolerable reate. 19:37:02 rate 19:37:08 or it will leave it there for the IF part to act on 19:37:11 * Deformative is an optimization researcher btw. 19:37:36 Deformative, 1% of 1% of 1% of 1% of any application ABSOLUTELY NEEDS to run fast 19:37:37 mark4: it does the same as a ?dup followed by an if 19:37:43 in those cases DROP DOWN TO ASSEMBLER 19:37:53 yeah 19:37:54 doc yes thats how i read it 19:37:58 mark4: Throughput is different from latency. 19:38:02 do you consider ?dup bad? 19:38:02 so ?dup-if do this then 19:38:16 only does do-this on the top item of the stack IF IT IS NON ZERO 19:38:20 else its an effective drop 19:38:27 no ?dup isnt bad 19:38:29 yeah it saves the extra drop when it's not needed 19:39:00 but ( n1 --- ) ?dup-if blah says pass n1 to blah only if its non 0 19:39:05 otherwise drop n1 19:39:16 now i have some sort of fucked up key beep as i type 19:39:23 and ive no idea how the fuck i just turned it on 19:39:36 muting my sound lol 19:39:57 in isforth i sort of have a similar mechanism 19:40:06 i have a word called ?: 19:40:21 ?: do-true do-false 19:40:30 its an if/else replacement 19:40:56 i suppose in isforth you could do ?dup ?: do-this noop ... . .. 19:41:03 but it adds the extra noop 19:41:49 but if you REALLY want a definition for ?dup-if 19:42:30 : ?dup-if compile ?dup [compile] if ; immediate 19:42:54 see the difference between your above posted definition? 19:43:07 ah 19:43:09 in yours you have TWO totally different operations of postpone. 19:43:36 and I didn't even realize those two postpones were that different 19:44:09 the definition for ?dup-if contains 3 xt's 19:44:17 the xt for compile. the xt for ?dup and the xt for if 19:44:48 exactly 19:44:55 ans forth HIDES that from you 19:45:09 i.e. postpone is an excuse to NOT know how to program forth 19:45:37 and thers ABSOLUTELY nothing what so ever wrong in any way shape or form with either COMPILE or [COMPILE] 19:45:39 the case can be made that postpone simplifies things 19:45:43 no 19:45:50 the case can be made that it COMPLICATES things 19:45:53 so the programmer doesn't have to keep track of minutia 19:45:54 far more easilly 19:46:09 i.e. you did not even know what the fuck EITHER of those postpones was actually doing 19:46:21 postpone as stated earlier is like my ANDOR word 19:46:37 : andor state @ if and else compile or then ; immediate 19:47:28 actually that should be state @ NOT if 19:47:37 or... for the purists state @ 0= if 19:48:16 because your using ans forth and are using postpone you have NO FUCKING IDEA what the compiler is doing for you 19:48:33 postpone blah <--- does this compile blah at compile time or at run time 19:48:37 you CANNOT tell 19:49:07 compile blah <---- this compiles the xt for blah at RUN time. 19:49:21 [compile] blah <=--- this compiles the XT for blah at COMPILE time 19:49:31 you CAN tell. you see exactly what the fuck is going on 19:49:42 the sources VERY SIMPLY describe exactly whats happening 19:49:49 not so with ans forth 19:50:46 ans forth does NOT make the sources simpler, it makes them far more complicated 19:50:52 far more visually cluttered 19:52:11 so... someone tell me what this does 19:52:27 : foo compile [compile] bar ; 19:52:29 immediate 19:52:48 the same as: postpone bar 19:52:51 :-) 19:52:54 from those sources you can see that bar is immediate 19:53:11 and that when FOO is executed it will compile the xt for bar 19:53:26 : foo postone postpone bar ; 19:53:27 nope 19:53:34 oh 19:53:40 is NOT the same 19:53:49 you cannot do my definition for bar in ans forth 19:54:08 maybe : foo postpone postpone postpone bar ; 19:54:11 erm not sure 19:54:23 becayse the first postpone will postone the second postpone. 19:54:34 then the thrid postpone will postpone the bar 19:54:41 yea. thats how you do it 19:54:43 DUMB 19:55:17 so they complicate things by making the code more of a clusterfuck visually cluttered gordian knot 19:55:21 yea. postpone ftw 19:56:16 and even so you STILL cant say for sure just from the sources what : foo postpone postpone postpone bar ; really does 19:56:32 the sources DO NOT describe what they are doing OR WHY 19:56:48 : foo compile [compile] bar ; <----- EVERYTHING is obvious 19:56:52 : foo &bar , ; immediate 19:57:05 its obvious that bar is immediate 19:57:24 crc well yes : foo [ ' bar literal ] , ; immediate 19:57:42 but its not as simple as my compile [compile] bar 19:57:49 and again does NOT show that bar is immediate 19:57:55 mine does 19:58:10 postpone is a horrendously BAD IDEA 19:58:11 do we care that bar is immediate? 19:58:32 your asking "should we ever have to care weather or not a word is immediate" 19:59:03 : bar .... postpone foo .... l 19:59:17 should always do exactly the same thing weather foo is immediate or not 19:59:20 thats what your saying 19:59:36 in ans, : foo ['] bar compile, ; immediate 19:59:46 * crc has no postpone, compile, or [compile] 19:59:52 ['] bar wont work on an immediate word 20:00:00 it does in gforth 20:00:00 not unless ['] is also immediate and parsing 20:00:10 err which it is duh 20:00:17 sorry wasnt thinking - yea ur right 20:00:24 ['] does a ' literal 20:00:28 * crc doesn't have ['] either :) 20:00:33 : ['] ' literal ' immediate 20:00:41 isforth does 20:00:44 i just wasnt thinking lol 20:01:07 I use a prefix of & instead 20:01:20 however. compile, should be COMMA not compile comma 20:01:31 : foo ['] bar , ; immediate 20:01:44 compile, is like... what the fuck is this bullshit? 20:01:55 compile, is the ans form, since the compiler isn't necessarily threaded 20:02:00 compile, is a special word designed to COMMA an execution token i guess 20:02:26 i.e. commaing an XT might be commaing a CALL to that xt, not just its address 20:03:07 correct. in a native code system, you can't just comma the address and expect it to work 20:03:54 compile, i can understand then 20:04:05 however i would have called it xt, 20:04:25 or ,call 20:04:39 ,call compiles a call to the address at top of stack. 20:06:07 but we still didnt resolve postpone postpone postpone blah :) 20:06:20 : foo compile [compile] foo ; immediate 20:06:34 yes we COULD do ['] foo whatever, ; 20:06:42 the point was with postpone 20:07:04 postpone fud <--- explain E X A C T L Y what that is doing 20:07:09 you cant 20:07:26 it could be doing one of two TOTALLY DIFFERENT THINGS 20:12:45 --- join: Joseph_ (~Joseph@c-68-40-186-71.hsd1.mi.comcast.net) joined #forth 20:12:45 --- quit: Deformative (Ping timeout: 240 seconds) 20:18:11 --- join: Joseph__ (~Joseph@c-68-40-186-71.hsd1.mi.comcast.net) joined #forth 20:21:57 --- quit: Joseph_ (Ping timeout: 248 seconds) 20:28:44 --- quit: Joseph__ (Ping timeout: 240 seconds) 21:22:53 --- quit: ttmrichter (Read error: Connection timed out) 21:22:58 --- quit: MoALTz (Quit: Leaving) 21:23:22 --- join: ttmrichter (~ttmrichte@221.234.156.62) joined #forth 21:44:16 --- quit: mark4 (Read error: Connection reset by peer) 21:49:35 tlvb: see " and is it an immediate word?" ? 21:52:11 tlvb, DocPlatypus: "postpone" does simplify all things. 21:52:28 Only anti-ANS obstructionists argue otherwise. 21:53:53 Obscurantists in action. 21:55:56 Oh, and state-smart like "andor" are _real_ fun. 21:56:15 They're not composable, hence you have to watch out. 22:29:27 --- join: I440r (~mark4@108-64-168-250.lightspeed.wepbfl.sbcglobal.net) joined #forth 22:29:36 --- mode: ChanServ set +o I440r 22:42:55 --- quit: I440r (Quit: brb) 22:50:06 --- join: I440r (~mark4@108-64-168-250.lightspeed.wepbfl.sbcglobal.net) joined #forth 22:50:06 --- join: ygrek (debian-tor@gateway/tor-sasl/ygrek) joined #forth 22:50:14 --- mode: ChanServ set +o I440r 23:24:24 --- quit: TeruFSX (Ping timeout: 276 seconds) 23:42:54 --- quit: I440r (Ping timeout: 240 seconds) 23:59:59 --- log: ended forth/11.05.10