00:00:00 --- log: started forth/18.09.20 00:09:34 --- quit: jedb (Ping timeout: 245 seconds) 00:22:32 --- join: jedb (jedb@gateway/vpn/mullvad/x-nbiahzjrcbmnbcts) joined #forth 01:16:02 --- join: Keshl_ (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 01:16:52 --- quit: Keshl (Read error: Connection reset by peer) 01:17:10 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 01:22:46 --- quit: dave9 (Ping timeout: 272 seconds) 01:40:32 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 01:40:40 re 01:57:50 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 02:02:44 --- quit: ashirase (Ping timeout: 250 seconds) 02:08:32 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 02:12:15 --- quit: dys (Ping timeout: 252 seconds) 02:35:47 --- join: ncv (~neceve@2a02:c7d:c5c9:a900:6eaf:6ef7:3b81:d5f6) joined #forth 02:35:47 --- quit: ncv (Changing host) 02:35:47 --- join: ncv (~neceve@unaffiliated/neceve) joined #forth 02:38:03 --- quit: ncv (Remote host closed the connection) 02:38:23 --- join: ncv (~neceve@2a02:c7d:c5c9:a900:1ec6:932f:1b02:d27e) joined #forth 02:38:23 --- quit: ncv (Changing host) 02:38:23 --- join: ncv (~neceve@unaffiliated/neceve) joined #forth 02:44:51 --- quit: nighty- (Quit: Disappears in a puff of smoke) 02:53:31 --- quit: sigjuice (Ping timeout: 252 seconds) 02:54:50 --- join: sigjuice (~sigjuice@107.170.193.86) joined #forth 03:30:05 --- join: nighty- (~nighty@s229123.ppp.asahi-net.or.jp) joined #forth 03:44:22 pointfree: you mean how falvo just rdrops? Else i'm not sure how you define assertive-style programming 03:45:30 I like Factor and Retro style quotations that push anonymous functions on the stack `[ blah blah ] if` 03:45:50 This vector stuff looks confusing but I'll check it out, because I've always liked and wanted to learn APL 03:46:31 ...but the documentation is AWOL, lol. 04:04:12 --- quit: ncv (Remote host closed the connection) 04:05:10 --- join: ncv (~neceve@2a02:c7d:c5c9:a900:1ec6:932f:1b02:d27e) joined #forth 04:05:10 --- quit: ncv (Changing host) 04:05:10 --- join: ncv (~neceve@unaffiliated/neceve) joined #forth 04:27:00 WilhelmVonWeiner, pointfree: I'm finding that conditional returns, especially if also offered in variations that will return two levels instead of one (i.e., return to grandparent) have TREMENDOUSLY reduced my reliance on if...then constructs. I'm also finding that words that simply jump back to the start of the current word (unconditionally or conditionally) seems to reduce the need for the traditional 04:27:01 looping constructs. 04:27:43 All of these things also encourage factoring, since they take what would have previously been a "clause" and make it an independent word. 04:28:46 The conditional returns particularly seem to take advantage of an additional "dimension" of control structure - using them control structures span up and down in the call hierarchy. 04:29:29 I feel like that "dimension" is a resource that's not well-exploited by the strictly traditional word set. 04:30:50 A fully complete set of conditional returns and conditional "jump to start" words winds up being quite a large number of words. I'm implementing all of them as primitives in my system, but I may find after using them for a while that only a subset of them tend to be used really frequently. 04:33:12 recently crc shared a word in retro `:me :me d:last compile:jump ; immediate 04:33:24 I've made that word count even worse by supplying these things in two versions. One is what you'd think of as "standard" in that it consumes the flag from the stack. The others DON'T consume the flag. Those are actually faster since no stack adjustment is required, and in cases where they help you out they also remove the DUP you'd need to copy the flag before calling them. 04:33:38 Yeah, I think he got that idea from me. 04:33:39 Which won't bloat the call stack 04:33:47 I was flattered. 04:34:36 If you have tail optimization you can implement the same thing by just calling your word again, but ME can be placed anywhere in the word - not just at the end. 04:34:56 So in that sense it adds new capability. 04:36:15 So those three things - conditional returns, multi-level returns, and "me" are the most significant new things I'm trying out in this particular project. 04:36:41 Oh, and I guess the partially non-destructive versions too. 04:37:09 I put a . at the beginning of the name for those, but that's obviously not anything special. 04:37:23 I've just used it really consistently so it's easy for me to remember the word names. 04:37:45 And once I had that theme going, I also dropped in .. one day, which is just . without dropping the argument. 04:38:10 That's really handy for debugging. I'd previously done a lot of "dup ." in my debugging. 04:38:52 . isn't *universally* equivalent to "dup " - only in cases where there's just one argument. 04:39:09 The . versions always retain the DEEPEST argument that would otherwise be dropped. 04:39:25 Very handy if you need to, say, compare a data character to a bunch of ranges or something. 04:39:53 In those cases the test drops the range information and gives you a result, but doesn't drop the data, so it's still there for re-use on the next test. 04:40:53 Regarding the impact on if...then, I've replaced an awful lot of if..then clauses by putting the code in the if...then in its own word with a conditional return at the beginning. 04:41:42 When I'm doing a bunch of tests like that, and I want to test until a case passes, I do a conditional single return if the test fails, so I can proceed in the parent word to the next test. 04:41:57 But if the test succeeds I do whatever I need to do and then do a double-return, bypassing the rest of the testing. 04:42:34 `[ quotations are better ] [ "he's right, you know" ] choose` 04:43:55 What do the brackets do there? 04:44:18 start and end an anonymous function 04:44:40 Can you put all of that in a definition? 04:44:43 sorry, anonymous """word"""/function/subroutine/procedure 04:45:08 If so, where do you put the new functions, since you're in the middle of compiling another one? 04:45:35 Ask crc how the sausage is made, all I know is they go on the stack 04:47:18 :-) Ok. 04:48:17 I can do "not in dictionary" words in a simple way; in my system I'd define those two clauses as named words, above the main word's definition, but without keeping the names in the dictionary long-term. 04:48:25 I use :: instead of : for such words. 04:48:35 Names retained until I run a word ::wipe. 04:49:02 I mean, I think quotations are similar to :NONAME though I've never used it 04:49:34 you just get the xt on the stack 04:50:12 Hmmm. Maybe I'll get him to tell me about it later - the bodies have to go somewhere. 04:50:32 Lots of ways, I guess - just some kind of slightly more-complex-than-traditional memory management. 04:50:58 In my system I have a very simple heap. Fixed page size, so I don't ever have to garbage collect. 04:51:03 All of Retro 12's source is well commented 04:51:13 When I come upon a :: word I just grab a heap page for temporary storage of the name info. 04:51:25 The normal header area only gets the CFA/PFA pointers. 04:51:49 Then ::wipe returns that heap page to the free list. 04:52:38 :: in factor defines a word using local variables as determined by the stack comment. 04:52:42 Currently each process gets a heap page to live in, and I manage defintiions and headers into separate parts of that. 04:52:54 but I'm thinking of changing that so that they each have their own heap page. 04:53:21 I'm porting this thing to a little Arm board with 192k of RAM, and it's caused me to do a good bit of thinking about using RAM efficiently. 04:53:40 I'm leaning toward rather small heap pages and the ability to just grab a new one when one gets full. 04:53:55 If you were mid-definition when the page filled up, you'd just put a jump at the end to the start of the new page. 04:54:19 When a process exists, all of its pages get freed. 04:55:02 I'm actually thinking about making that one a 32-bit data Forth with 16-bit internals (16-bit cells in the definitions). 04:55:19 I'd use more than 64k by having multiple copies of the core system. 04:55:54 ...why? 04:56:38 Well, it's more compact. So you could fit more processes onto the system. But probably mostly because it's interesting, and this really is mostly a hobby for me. 04:56:57 But yeah, the alternative would be to just do 32-bits across the board and not worry about it. 04:57:42 The MacOS version is "hybrid" like that - 64 bit stacks / vars, but 32-bit "internals." 04:58:32 When I first started messing with Forth everything was 16 bits, so I got used to the "size of the system" based on that. 04:59:02 So my 32-bit internals implementation always feels "fat" to me, even though I know that it's going to be about twice as big as a 16-bit one. 05:00:13 That decision is by no means final yet, but it's entertaining working out the details of how to make it work. 05:00:30 Without having it get sadly complex. 05:01:41 When I wrote this on the Mac I just wrote it. I didn't really do anything to "hide" the implementation details in the assembly code. 05:02:03 The last couple of days I've been going through and re-doing all the machine code using macros, so that I can port to Arm by just re-writing those macros. 05:02:26 And that also provides an opportunity to hide all of the cell size details from the code as well. 05:03:26 Insted of mov , dword [] I have a macro "GETI" (get instruction cell). 05:04:11 So one reason for making a hybrid size design work is to make sure I've done that right - that I've really used the right macros in the right places. 05:04:23 If everything was the same size it could work even with mistakes on that front. 05:43:56 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 07:01:12 --- join: reepca (~user@208.89.170.250) joined #forth 07:06:48 I got around to watching the Sam Falvo Text Preprocessing video that's like an hour long 07:07:11 very much appreciate his emphasis on short words that don't require stack comments 07:07:56 I put them in for consistency but even CM thinks comments are bloat 07:11:47 I tend to not comment for that main reason - I just don't like how they make my code LOOK. 07:11:54 Sometimes it seems HARDER to read tome. 07:12:03 I'm arranging this implementation so that I can store comments remotely. 07:12:09 Toggle them on and off in the editor. 07:12:27 I agree best of all is to write words that don't need comments. 07:12:42 "store comments remotely" 07:12:44 Once in a while you really should have them, though - sort of proportional to how "clever" you're being. 07:12:51 ...just implement shadow blocks 07:13:06 honest to god blocks >>>> files 07:13:42 if only polyForth had an ed, nano, or emacs style editor 07:18:39 I'm a block fan. 07:19:01 So many people I know that are involved with Forth - the first thing they seem to want is to add a file system. 07:19:24 To the extent I add any further organization to the disk setup, it will be more "database" oriented than "file system." 07:56:01 --- join: gravicappa (~gravicapp@ppp83-237-164-165.pppoe.mtu-net.ru) joined #forth 08:11:19 --- quit: pierpal (Ping timeout: 252 seconds) 08:12:23 lol my own company about called security on me 08:12:50 had a package delivered to me, but for some reason it went to another building we lease in the office park 08:13:36 so I go over there and go up to the floor, get off the elevator, and there's a front desk behind glass doors 08:14:01 which is similar to our building, but in our building it's open to the public and there's someone working at the desk as a security checkpoint 08:14:28 so I try to go in, and the doors are locked and nobody's behind the desk, so I figured maybe whoever mans the desk is away momentarily and so they locked the door, right? 08:14:58 so I hang around for a bit, and eventually she comes back, goes off to the side (like waaay off to the side, down a hallway a bit where I didn't notice) to swipe her keycard, and enters the doors 08:15:09 so I figured "okay the lady who mans this desk is back, I'll follow her in and talk to her" 08:15:15 so I came in behind her and she about lost her shit 08:15:23 DO YOU WORK HERE? WHO ARE YOU? WHERE IS YOUR ID? 08:16:19 so I calmly tell her who I am and that I'm there to pick up a package, but she's like in full-on panic mode - NO YOU NEED TO TELL ME EXACTLY WHO YOU ARE. WHO IS THE PACKAGE ADDRESSED TO? WHAT IS IT? 08:16:48 and I'm like... I'm sure that's it right there on the desk. it's addressed to me, and I tell her my name again 08:17:25 and there was like a full 5 minutes of this back-and-forth with her just repeating the same questions 08:17:48 people are nuts 08:18:31 inherently 08:18:45 --- quit: dave9 (Quit: one love) 08:21:23 I mean, I understand her mistaking me for suspicious, but it's like geez lady once I give you my name, tell you what I'm there for and give you verifiable information, AND explain the misunderstanding because in my building it's an open lobby and that the key swipe was so far down the hallway I didn't notice it, that is the proper point at which you chill out a bit and go sit down at your desk and confirm 08:21:30 who I am 08:21:45 the proper response is not to just stand there and continue grilling me, making a scene to people passing through 08:25:24 --- quit: gravicappa (Ping timeout: 245 seconds) 08:43:24 Lack of trust in society these days 08:43:25 SAD! 08:44:13 Programmer wants to write short, clean efficient code - learns OOP, stuck only thinking in infix. Java. Many such cases. SAD! 08:46:19 hey man, I think her lack of trust is founded. I just think she needed to handle it a bit better 08:47:27 as for the rest of that - yeah, I guess 08:48:13 maybe learning OOP wasn't entirely detrimental. there's value to be gained from studying the wrong way to do things 08:53:08 well, there is OOP (wich is often thought to be based on classes and such) and there is object based programming 08:53:50 people seem to glom onto the class aspect of it for some strange reason. 08:55:07 for instance, if I am writing some javascript (it happens) I prefer to use closure or record of closures objects instead of prototypical inheritence. 08:56:16 this means that I use composition much more than clunky inheritence. 08:58:04 zy]x[yz: ^ 09:01:03 uh huh 09:02:07 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 09:09:02 --- quit: pierpal (Read error: Connection reset by peer) 09:18:31 --- join: mark4 (~mark4@cpe-2606-A000-8096-FE00-5A94-6BFF-FEA6-29D4.dyn6.twc.com) joined #forth 10:41:18 zy]x[yz I think OO fits some applications. 10:41:29 The failure was trying to declare it the "one true way" for everything. 10:42:03 --- join: dys (~dys@tmo-119-88.customers.d1-online.com) joined #forth 10:42:10 Note - I may be conflating the "object-based" and "OO". 11:00:32 Any of you guys familiar with nasm? I'm still trying to figure out how to do the header macro magic that I was able to make work in gas. 11:01:14 I used "subsections" in gas. But I can find no reference whatsoever to nasm subsections, and even though I DID find a reference to "sections can be named anything" my nasm barfs on me if I change the name of a section to anything other thant .text, .data, or .bff. 11:02:19 It also spits up all over my source if I don't give the -f macho64 option. 11:03:50 I'm familiar with it in the sense that I've heard of it before and I think I used it once like 10 years ago. I don't know the answer to your question though 11:21:45 Is anyone else unable to connect to any German irc networks? I want to join #forth-ev https://wiki.forth-ev.de/doku.php/infos:forthchatirc 11:31:37 Ok, I added bits 64 to the file and now it will assemble without -f macho64, AND it will accept other section names. 11:31:51 So this must be some damn macho thing that only allows specific section names. 11:31:56 That's... annoying as hell. 11:32:15 And the nasm docs make a big deal about not letting you play games with org. 11:32:30 In MASM you could org all over the place - frontwards, backwards, upside-downwards. 11:32:37 Nasm insists that org move you FORWARD. 11:32:54 I don't see why - it's up to me to know what I'm doing; let me do it. 11:33:45 But SURELY there must be some way to deposit output in various places as you move through your input. 11:34:15 Specifically, I want my symbol table first, then my code, then my headers, then my definitions. 11:34:50 So I want to be able to call a header macro, have it add something to the symbol table, add somethign to the headers, and then leave things so that what comes next will either add to the code or add to the definitions. 11:35:12 So that I can write my code like so: header, implementation... header, implementation... etc. 11:37:17 KipIngram: look at my x4 soruces on github 11:37:27 for the header macros 11:41:14 Cool, thank you. 11:41:44 --- join: gravicappa (~gravicapp@ppp83-237-163-12.pppoe.mtu-net.ru) joined #forth 11:43:00 Do I just type x4 into the search bar? 11:43:58 github,com/mark4th 11:44:09 or maybe its just mark4 i forget, i think its mark4th 11:44:49 theres x4 and t4 in there (x4 is x86 forth formerly known as isforth, and t4 is the thub2 port that runs on any raspberry pi or beagleboard/bone) 11:44:53 Got it. 11:45:07 the macros in there are a bit hairy lol 11:46:05 Oh, you call out specific header names. 11:46:18 My nasm won't seem to allow that if I specify the -f macho64 flag. 11:46:39 Anything other than .text .data .bss and it throws up on me. 11:47:02 well i doubt thats a restriction in 64 bit 11:47:17 Does it even with bits 64. 11:47:28 i have not looked into 64 bit x86 yet 11:47:30 But maybe I just haven't figured out how to make it work. 11:47:45 But yes, I see what you're doing. 11:48:02 I did basically the same thing with gas, which supports subsections. 11:48:05 i have separated headers and code 11:48:12 headers are in a head space section 11:48:25 i didnt use sub sections with t4 11:48:31 So I was .text section all the way, but put symbols in .text 0, code in .text 1, headers in .text 2, definitions in .text 3. 11:48:35 nd it separated them all out nicely. 11:48:36 could take a look at the macros file in t4 too 11:48:50 cant do that 11:48:59 because .text cannot be readable, writeable AND executable 11:48:59 Can't do what? 11:49:15 Oh - I only put pre-defined stuff in there. 11:49:25 New stuff I put in at run-time goes into .bss. 11:49:29 Links to the the stuff in .text. 11:49:50 for my android ndk version i had to switch to indirect threading and have .text contain code, .data contain headers and .bss contain variable content 11:50:03 And I copy the symbols into a heap page for it to grow in. 11:50:11 Because the symbols have to be continuous - they don't use links. 11:50:13 so variables and constants are the same here, a constant has its value inline and a variable has a constant .bss address inline 11:50:17 Each symbol is just the next 16-byte record. 11:51:08 Eventually I'll have my symbol table disk-resident, and it will come out of the source altogether. 11:51:24 So having it in there and copying it to bss is just a temporary expedient. 11:52:08 lol maybe i should send you a copy of my a386 DOS version of isforth 11:52:23 :-) 11:52:37 with the A386 asembler i could assemble all words onto their correct thread in their respective vocabularies 11:52:51 I'm guessing that this is a restriction imposed by the MachO executable format that is just being enforced by nasm. 11:52:56 i.e. i could do build time hasing and select the correct thread to link new words onto, all in the macros 11:53:11 with nasm and gas i have to link ALL words on the first thread of a vocabulary and do a run time fixup :/ 11:53:26 Yeah - that's PROGRESS for you. 11:53:40 That's what happens when peopl writing the tools think they know better than you do how you should code. 11:54:06 thats my #1 problem with linux AND android development tools 11:54:30 and actually with the C language in general 11:54:46 the C compiler is your mommy and will FORECABLY hold your hand and protect you from you 11:55:38 no! you CANT store that BYTE in that variable because its for CHAR data! 11:55:52 Yes. 11:56:02 so now you have to duct tape fix your code to MAKE the compiler do what you as the engineer KNOW is safe (i.e. you have to do casting) 11:56:39 Fortunately I've never wanted assembly-time vocabularies, so I'd never given that any thought. But sure, you ought to be able to do that. 11:56:51 right now im trying to get my NDK version of x4 working again, the development tools in android have changed and so has android itself 11:57:19 I put everything in Forth, and use vocabularies when I'm writing Forth. But that's just my particular goal. 11:57:54 well you need to have a ROOT vocabulary, because all your vocab control words are in root :) 11:58:06 like "vocabular" and "only" and "also" etc 11:58:18 tho, x4 does not have an ALSO word 11:58:36 only: remove everything from context and leave ONLY root in context 11:58:48 I'm not sure my approach to vocabularies is perfectly standard. 11:58:54 forth/blah/foo/bar/bam (vocabulary name) add said vocabulary to context 11:59:08 if the specified vocab is already in context rotate it out to the TOP of contextx 11:59:38 so if context is bottom->forth root compiler foo bar bam <-- top and i type "forth enter" my context becomes 11:59:54 root compiler foo bar bam forth 12:00:06 with forth at top. cannot put the same vocabulry in context more than once 12:00:46 In fact, I'm sure it's not (my vocabularies). 12:01:00 Yeah, I do do that. 12:01:10 mine is very much NOT standard 12:01:14 I have a context stack, and if I execute one that's already in there I pull it to the top. 12:01:25 i was told that there are very good reasons to be able to add the same voc to context more than once, 12:01:38 I've wondered about that. 12:01:54 because if you have "forth foo bar bam" and you want to add foo forth bam fud" and then revert back to the original state later you cant 12:01:56 I could see a situation, where I wanted one briefly and then wanted back the previous stack. 12:02:11 thats why i have a STACK of contexts :) 12:02:23 context: my-context <-- i just created a new context stack 12:02:29 only foo bar fud bam 12:02:39 OH, you have a stack of stacks. 12:02:41 now i can mess with MY context stack to my hearts content 12:02:44 That's clever. 12:02:49 I like it. 12:02:57 then when im done i just destroy my context stack :) 12:03:03 Yep. Clean. 12:03:06 and the old one taks over again and i didnt mess with it 12:03:12 Right. 12:03:20 not as simple as the traditional way but MUCh cleaner 12:03:33 Yes. There are things you can't do with the traditional way. 12:03:40 And besides, the traditional way has changed over time. 12:03:47 FIG and F79 are different, iirc. 12:03:53 i also HATE words like "invert" and "postpone" 12:04:13 isforth (now called x4) is very very very loosely based on the 83 standard 12:04:17 i cannot abide ans standard 12:05:26 which is probably why x4 has not achieved any kind of recognition :) 12:05:27 lol 12:08:38 I think 83 is the best standard personally 12:08:47 ANS just includes so much stuff 12:08:58 it's probably partly what killed Forth 12:09:50 my objecton to the ans standard is how it wimped out on things like :"oooh there are two conflicting definitonos for NOT in various existing standards, lets NOT define NOT and create a new LIMP WRISTED word to replace it called 'invert;" that way we dont have to break anyone who is too lazy to actuallly FIX their code" 12:10:14 the 79 standard or possibly the FIG standard had a broken definiton for not that was identical to 0= 12:10:28 this was fixed in the 83 standard where not was defined as a 1's complement 12:10:43 x4 is more 83 standard but is 32 bit not 16 :P 12:11:43 i have lots of other innovations such as my case statments envorce factoring, i do not have of/endof so you cannot polute the switch statement with 2834765897236495828345 2839563924 lines of code per case. you can have ONE reference to a different word and i changed "of" to "opt" 12:11:56 so case: 1 opt foo 2 opt bar 3 opt bam ;case 12:12:01 sort of thing 12:12:19 and i invented a word called ?: that does the same thing for if/else/then 12:12:49 foo bar bam ?: xxx yyy if the result prior to ?: is true then ONLY xxx is executed and yyy is skipped. else xxx is skipped and yyy is executed 12:13:32 I like that one. I haven't put anything like that in mind, but it seems like it would be valuable. 12:14:55 i also have a complete terminfo parser and text user interface 12:15:43 THAT is VERY nice. I'm very primitive in that regard. 12:15:56 I basically force the thing most of the way into raw mode and use it that way. 12:16:07 oh yea and a mamory manager too allowing allocate and free :P 12:16:08 Not all the way to scan codes - I still get ASCII. 12:16:23 I have a basic one of those. 12:16:31 Fixed size pages, so I don't have to garbage collect. 12:16:34 Very simple. 12:16:44 when i showed the author of ncurses what i could o with my TUI he said that would be almost impossible with ncurses 12:16:53 :-) 12:16:56 i had overlapping movable windows with text scrolling in any direction lol 12:17:23 there IS one thing i have not been able to figure out however! 12:17:34 how do you get the alt charset to work in the linux terminal 12:17:45 i see it fail with ncurses too 12:18:23 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 12:18:41 in terminfo thers an escape string called "enacs" which means "enable alt charset" but its not valid in the linux terminal, not needed. you just do "smacs" which means set mode alt charset 12:18:44 Ah, I may have found a way out of my section problem. 12:18:47 but... it doesnt work except in x 12:19:10 I haven't previously used .data for anything. 12:19:25 i told you to use .data lol 12:19:34 Oh, sorry - I failed to see that. 12:19:35 i use .text for code and .data for headers in some places 12:19:52 other times i just create a custom section called "headers" 12:19:53 Yes, that's where this is headed. 12:20:13 with nasm i think i used .text and .data 12:20:28 That leaves symbols outstanding, though, but since those are "temporary" as far as being in the source goes, I'll find a way. 12:20:56 I use .bss too. I call out a huge amount of space there so the OS will give me RAM when I run. 12:21:01 That's where I put my heap. 12:21:09 oh yea i also have a macro facility built into x4 so youp dont have to keep doing postpone x postpone y postpone z lol 12:21:11 That's where process dictionaries live. 12:21:21 macro: foo 100 0 do i . loop ;macro 12:21:32 : fud 100 0 do foo loop ; and FOO inlines its code 12:22:12 and yes you can do loops and strings and anything else which you CANT do with postpone :P 12:27:26 --- quit: ncv (Remote host closed the connection) 14:07:54 --- quit: gravicappa (Ping timeout: 245 seconds) 14:12:54 --- quit: dys (Ping timeout: 272 seconds) 14:41:24 --- join: lemonpepper24 (~lemonpepp@c-24-6-137-62.hsd1.ca.comcast.net) joined #forth 14:53:06 --- quit: mark4 (Quit: bbl) 14:55:50 --- quit: epony (Remote host closed the connection) 14:57:55 WilhelmVonWeiner: This https://www.reddit.com/r/Forth/comments/7fa5gw/7_years_later_declarative_inquisitive_then/ is what I call assertive-style programming. 14:58:53 Sam Falvo is now avoiding the rdrop outer exits. 14:59:37 Some people say they make words less composable. 15:00:09 I'm don't necessarily agree. 15:03:15 with outer exits the call hierarchy is in effect also a stack of parameters 15:04:52 it's vertical factoring and there is room for flexibility and composability there. 15:05:38 --- join: epony (~epony@unaffiliated/epony) joined #forth 15:53:30 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 15:54:09 hi 16:00:56 hello 16:04:02 hi zy]x[yz 16:26:45 hi dave8 16:27:04 hah! i see what you did 16:27:39 yes but i immediately realized it would have been better if i had said steve8 17:07:30 wut? no Hal10000? 17:29:38 what if the hal-9000 had to battle 9 t-1000s, who would win? 17:50:28 --- quit: dddddd (Remote host closed the connection) 17:55:11 --- join: cobax (~rien@2604:2000:c680:8700:b864:5c20:fb1e:2974) joined #forth 18:41:49 --- join: tabemann (~tabemann@99-80-181-166.mobile.uscc.net) joined #forth 18:44:01 how many of you have rolled your own Forth implementations? (just wondering) 18:48:19 --- join: siraben (~user@unaffiliated/siraben) joined #forth 20:05:27 --- quit: tabemann (Ping timeout: 260 seconds) 20:28:32 --- quit: pierpal (Quit: Poof) 20:28:48 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 20:29:34 --- join: tabemann (~tabemann@2602:30a:c0d3:1890:ccf2:f6ec:5a58:6b88) joined #forth 21:26:45 --- quit: dave9 (Quit: one love) 21:33:28 --- quit: tabemann (Remote host closed the connection) 21:33:28 --- join: tabemann (~tabemann@2602:30a:c0d3:1890:ccf2:f6ec:5a58:6b88) joined #forth 22:00:25 --- quit: Keshl_ (Quit: Konversation terminated!) 22:18:52 --- quit: siraben (Ping timeout: 252 seconds) 22:21:37 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 22:22:11 --- quit: pierpal (Read error: Connection reset by peer) 22:22:27 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 22:50:56 --- quit: lemonpepper24 (Ping timeout: 240 seconds) 23:01:29 --- join: CatchMe (~islam@156.208.211.195) joined #forth 23:32:10 --- quit: Keshl (Read error: Connection reset by peer) 23:59:28 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 23:59:59 --- log: ended forth/18.09.20