00:00:00 --- log: started forth/20.01.24 00:15:16 --- quit: WickedShell (Remote host closed the connection) 00:15:55 --- quit: dys (Ping timeout: 265 seconds) 00:55:37 --- join: xek joined #forth 01:10:51 --- join: dys joined #forth 01:12:26 --- join: rdrop-exit joined #forth 01:16:00 good afternoon Forthwrights c[] 01:42:11 evening Zen Forth Guru! 01:42:35 hi Master Forth Technician (tm)! 01:42:45 32,43 C / 90,38 F here @ 8:42 pm 01:43:58 scattered showers here 01:44:13 nice, we may get some showers here later also 01:44:54 but Im not holding my breath for them 02:12:05 * jn__ just had a shower, but the artifical kind 02:12:20 I'm currently jumping through USB hoops 02:13:35 eww, nasty 02:13:44 embedded or pc ? 02:14:28 i have a link to a Forth USB driver that's well documented if you'd like it 02:14:47 for cortex-m3 tho 02:16:05 Both, I'm reading some FTDI docs 02:17:13 thats gotta be fun ;-) 02:17:36 I hate USB, gives me a migraine 02:17:45 I hope your FTDI chip is bonafide and not a clone as there are differences 02:18:09 not to mention the FTDI 'update' that bricks the clones 02:18:47 Yes, I'm studying their USB to JTAG bridge cables 02:19:39 The drivers are closed source proprietary 02:20:23 yeah, usb consortium stuff I guess 02:21:33 That's not the end of it, you also need to use a proprietary library to access, the driver's not enough 02:22:09 i'll bet there is a fee ? 02:22:35 Luckily no 02:22:38 there are also open source drivers/libraries 02:22:44 plus membership of the "USB sorcerers guild" ? 02:23:16 https://www.ftdichip.com/Products/Cables/USBMPSSE.htm 02:23:20 like the linux driver (which probably doesn't support all features though), and libftdi 02:23:44 openocd has a driver for "MPSSE (Multi-Protocol Synchronous Serial Engine) mode built into many FTDI chips, such as the FT2232, FT4232 and FT232H" 02:24:04 makes sense 02:24:21 have you come across 'back pressure' yet ? 02:24:41 that's the USB 'flow control' strategy it seems 02:24:42 right, MPSSE is what I'll be using 02:25:36 but to actually use it the sender must have a small EOL delay to give the USB 'back pressure' strategy time to work 02:26:02 if you don't, the 'back pressure' flow control doesn't work 02:26:13 That's what those cables are, high-speed USB-MPSSE, I'll be using one to access the target JTAG pins from the PC over USB 02:27:34 I don't really know much about it, but I have our USB driver working on a number of binary images Ive released, and I must say, it's damn fast 02:27:54 it doesnt care about the baud rate at the serial end 02:28:12 looks about like 1 - 2 mbs to me 02:28:38 That'll be the basis of the tether for my RISC-V Forth 02:29:40 how will the hardware look ? 02:29:55 PC->USB_dongle .... 02:30:18 ahh PC -> USB-MPSSE cable 02:31:13 whats the connections from the USB-MPSSE cable look like ? 02:33:38 individual wires you can connect to a header of your choice. 02:33:50 See the pics 02:33:51 https://www.ftdichip.com/Products/Cables/USBMPSSE.htm 02:34:01 ta, looking 02:37:00 ahh, I have about 10 of the FTTDI "TTL-232R-3V3-WE" cables myself 02:37:09 one is in use on my desk right now 02:37:33 Ive always liked them, good quality 02:37:55 I figure this is the best way to go from PC to JTAG despite the hassles with their driver and library 02:38:25 I think youre right 02:38:57 matthias does it by using GPIO's on a Ti Tiva board 02:39:13 thats the host for his tethered Forth 02:39:29 the PC is just a smart terminal in his design 02:40:44 --- quit: patrickg (Remote host closed the connection) 02:41:29 In my case the PC Forth has two tasks, one is the user's terminal, the other is the tether wiggling JTAG pins on the target via this bridge cable 02:42:12 total interactive control of a bare RISC-V target 02:42:14 plus all the host stuff ? 02:43:22 There's a Forth on the host PC with code for itself and for laying down code on the target. 02:43:29 ahh, my gd32vf103-72mhz.fs (submitted today) made it into Matthias latest Mecrisp-Quintus for RISC-V release today :) 02:43:46 thats what I thought, seems straightforward 02:43:56 apart from all the Forth code ;-) 02:44:30 I've also pushed the gd32vf103 up to 104MHz today and written the driver for that 02:46:29 Depending on the project I can just use the PC Forth to lay down object code on the target, or lay down a headerless Forth and build from there. 02:47:11 object code on the target ? not machine code ? 02:47:27 yes, I should have just said machine code 02:47:37 you have some resident code needed on the target ? 02:48:14 we are very strict about the proper terminology here on #forth! 02:48:16 Nothing's needed on the target beyond the JTAG infrastructure 02:48:54 nothing personal but I will have to report your breach of proper terminology to crc! 02:48:58 I can use that to cross-assemble whatever I want onto the target, up to and including another Forth 02:49:05 ;-) 02:49:13 asesome! 02:49:20 mecrisp-across is the same 02:49:55 I can (and have) plugged in brand new virgin MSp430's and started talking Forth to them right away, it's very cool 02:51:15 what annoys me is the optimisation Matthias has built into it, it's as good as my best assembly, which I know is more a reflection on me ... 02:51:53 The main thing that JTAG adds to traditional tethered Forth is that nothing's needed on the target not even a serial monitor, and you're access is at the debug infratructure level, below the normal CPU machine level, giving you total interactive control of the target board 02:52:02 as a tech my ego doesnt like programs equalling or beating skills Ive taken decades to learn 02:52:22 yeah JTAG is very impressive 02:53:10 I spent a couple of days laying out a PCB once, I usually redo it 3 times until it's the best I can do 02:53:37 I was very happy with it and then I noticed that the latest gEDA had a new 'autorouter' 02:55:01 so I loaded the schematic netlist, roughly placed the components using the 'rubberbands' to give a even crosshatch of connections and pressed "autoroute" 02:55:34 and in about 30 seconds the board was routed every bit as good as what I'd just taken days to do 02:55:41 very depressing 02:55:55 id finally been replaced by a machine, kinda 02:56:15 you've been augmented by a machine 02:56:20 now you're much faster 02:57:52 so I went to see a psychiatrist and after running all kinds of tests, he said "Terry, when you only have a IQ of 30, you just have to expect computers to do this kind of thing to you!" 02:59:09 Even if you have a computer do it for you, it's good to have the deep knowledge to evaluate the quality of the output 02:59:25 it was very impressive 03:00:04 I was shocked that PC's and FLOSS pcb CAD had caught up to commercial gear costing 100's of thousands once 03:00:26 In my high school we weren't allowed to use calculators 03:00:41 the last time I'd seen a autorouter in action was on a Tektronixc mainframe running the old AT&T Unix 03:00:55 and the mainframe was 100's of thousands of $ 03:01:15 the cad autorouter was $10's of thousands itself 03:01:35 in my high school calculators didnt exist 03:01:45 slide rules did tho 03:03:14 I got my first job at 17 and a brand new Canon 8 digit calculator came out that cost 3 months wages for me, I wanted it SO BAD, but who can afford 3 months wages on any one thing ? 03:04:12 it's amazing how much computers and electronics in general have been evolved and miniaturized over the past 50 years 03:05:40 I remember when Macy's department store in San Francisco had a calculator department, they were all locked behind glass, you had to ask the salesman to get your hands on one, it was very similar to a jewelry department. 03:06:26 heheh 03:06:27 yeah 03:06:40 remember "7 transistor radios" ? 03:06:57 yes :) 03:07:04 one made by National Panasonic was quite the status symbol back then 03:07:47 leather case, beautifully made 03:07:51 There was one from Sony that came in a jewlery case, tiny thing 03:07:56 they were very expensive 03:07:59 wow 03:08:38 full of germanium transistors 03:08:39 --- quit: X-Scale (Ping timeout: 265 seconds) 03:08:44 well, 7 of them 03:08:47 --- join: X-Scale` joined #forth 03:08:50 OC79 or whatever 03:09:09 nowdays you get a TV in a watch 03:09:46 nowadays you get a full unix in a wristwatch, even 03:09:54 --- nick: X-Scale` -> X-Scale 03:24:34 The aesthetics of gadgets from the 60s and 70s were really nice, when such things were still considered luxury items of sorts 03:25:56 they were :) 03:28:03 Some of the engineering design was great too, like the Braun protable record player that had the pickup arm coming up from underneath the record instead of on top. 03:28:49 yet I'd never go back 03:28:53 A Dieter Rams design. 03:31:27 https://www.youtube.com/watch?v=p1OLTmoR5HA 03:32:23 if you live to 2035 you may yet see 1000 "starships" and 100,000 colonists leave for Mars every 2 years 03:32:35 now that will be something to see 03:33:50 pretty cool :) 03:33:58 :) 03:34:14 we kids used to use a pin held in our hand to listen to old records 03:34:49 --- join: dddddd joined #forth 03:34:59 we had some rotating tables that used a mechanical spinner with a spring 03:35:22 and a gyro, dunno where they came from, possibly war surplus gear 03:35:49 not a gyro, a centrifugal speed regulator 03:36:22 id forgotten all about them 03:37:41 cool 03:39:50 of course! they were old gramaphone motors! 03:39:55 lol 03:39:58 wind up ones 03:40:52 wow 03:41:14 once upon a time, no electronics, just a hand wound spring that powered a turntable and was speed regulated with a centripetal govenor 03:41:43 there was a megaphone with a pin that sat in the record groove 03:42:10 they went for quite a while powered by the spring alone 03:42:45 man, that memory must be at least 55 years old 03:50:07 dinner time, catch you soon, keep on Forthin' 03:50:21 --- quit: rdrop-exit (Quit: Lost terminal) 03:50:35 cya! 04:23:27 --- join: forthnutter joined #forth 04:49:57 --- quit: iyzsong (Quit: ZNC 1.7.1 - https://znc.in) 04:56:30 --- quit: forthnutter (Quit: forthnutter) 05:02:55 --- quit: deesix (Read error: Connection reset by peer) 05:03:10 --- join: deesix joined #forth 05:13:21 --- quit: jsoft (Ping timeout: 265 seconds) 05:35:14 jn__, like something with parse for example? 05:37:05 MrMobius: yes 05:38:10 is there a way to define a word like that, define variables and use that word to fill them with data, then undefine the word to recover space? 05:38:27 seems tricky since all the variables will be defined later in the dictionary 05:43:05 i guess you'd have to have a second, separate dictionary for that 05:43:24 so you can rewind the *second* dictionary when you're done adding entries to the first 06:05:15 --- quit: dys (Ping timeout: 248 seconds) 06:10:14 --- join: tpbsd joined #forth 06:10:14 --- quit: tp (Read error: Connection reset by peer) 06:31:45 --- quit: tpbsd (Quit: I'm quitting to find peace with my inner stack !) 06:52:03 --- quit: guan () 06:52:17 --- join: guan joined #forth 07:06:15 --- join: dys joined #forth 07:26:16 --- quit: tabemann (Remote host closed the connection) 07:26:21 --- join: tabemann joined #forth 07:31:07 * crc has started working on something to generate formatted html from non-retro forth sources 07:32:26 example output at: http://forth.works/memstat.html 07:32:41 --- quit: tabemann (Remote host closed the connection) 08:10:07 --- quit: arrdem () 08:10:23 --- join: arrdem joined #forth 08:21:38 --- join: TwoNotes joined #forth 08:31:55 --- join: proteus-guy joined #forth 10:09:51 --- quit: dys (Ping timeout: 245 seconds) 10:12:55 --- join: WickedShell joined #forth 10:17:08 --- quit: TwoNotes (Quit: Leaving) 10:41:21 --- quit: dave0 (Quit: dave's not here) 11:45:28 can someone help me translate this from C? http://codepad.org/1VfUTmrR 11:45:50 seems like it would be simple but I cant figure out how to do it with lots of stack variables and pick 11:46:38 basically the tile data is bytes like this : width, height, length, color, ... followed by more length, color pairs 11:47:16 length of 0 means the row of data is finished so move down to the next line on the screen 12:32:22 a very quick and dirty translation in my forth: http://forth.works/share/72f8a4fb430ca7dd77e1327e18fbe1d4 12:33:03 it's horribly ugly, as any direct ports would be 12:34:29 so would this be too complex to just handle with stack manipulation? 12:34:48 im trying to figure out when its worth it to resort to variables or the return stack 12:36:46 not necessarily, but that would be more of a rewrite than a translation 12:38:10 I'd need to study the problem domain, refactor, etc 12:39:07 If it's something used a lot, avoiding variables would be faster. If the architecture and Forth support local variables, that might be an option. Lots to consider 13:05:21 no support for local variables 13:05:49 more of a rewrite I guess. just doing it for practice with Forth 13:07:34 I'm pretty sure I could get it down to one variable without much work 13:09:31 --- quit: newcup (Ping timeout: 246 seconds) 13:14:58 in my system, this would look something like: http://forth.works/share/d6931fd6194026d97099ddc06d8fd2c9 13:16:18 some translations for mine: [ ... ] dip is the same as >R ... R> and [ ... ] sip is the same as dup >R ... R> 13:17:57 http://forth.works/share/d6931fd6194026d97099ddc06d8fd2c9.txt for the glossary entries for the words in my system that are used in this 13:18:52 how do the brackets work there? 13:44:43 --- quit: proteus-guy (Ping timeout: 265 seconds) 13:46:49 --- quit: gravicappa (Ping timeout: 240 seconds) 14:01:13 --- join: proteus-guy joined #forth 14:27:17 crc, I got this working. anything obvious to improve? https://pastebin.com/KZJSctyk 14:37:55 is the [ ... ] construct common? seems useful 14:38:24 for return stack stuff i mean not switching to immediate mode 14:39:16 --- quit: xek (Ping timeout: 260 seconds) 15:03:35 --- join: jsoft joined #forth 15:34:10 my [ ] aren't common; I don't have predefined words equivalent to the traditional use of [ ] in my Forth 15:53:36 --- quit: reepca (Ping timeout: 268 seconds) 16:38:02 --- join: tp joined #forth 16:57:59 --- quit: tp (Remote host closed the connection) 16:58:04 --- join: tpbsd joined #forth 17:08:46 MrMobius: yours is longer than I personally prefer for a single definition, but looks ok t; me. Nicely done. 17:14:22 --- join: reepca joined #forth 17:47:26 --- join: jedb_ joined #forth 17:47:41 --- quit: jedb (Ping timeout: 268 seconds) 18:00:07 --- join: iyzsong joined #forth 18:22:57 --- nick: jedb_ -> jedb 18:27:31 crc, thanks 18:28:02 is there a name for a word that does ( a b c -- b a c ) ? 18:32:18 I can't think of one 18:38:39 --- join: tabemann joined #forth 18:40:15 hey guys 18:41:14 MrMobius there is a online Forth stack gymnastics program 18:41:43 MrMobius, you enter what you want to do and it gives you the Forth commands to achieve it 18:42:00 I've been searching for the link but havent found it yet 18:42:03 hey tabemann 18:42:09 hey crc, MrMobius 18:52:28 * tabemann finally got around to writing a number parser in thumb assembly for zeptoforth 19:22:43 --- join: rdrop-exit joined #forth 19:22:54 good morning Fortheros c[] 19:23:44 tabemann, cool, was it fun ? 19:24:03 g'day Zen Forth Guru! 19:24:29 likewise Forth Master Technician (tm)! 19:25:12 I finally got annoyed enough with hackaday.com ignoring anything Forth I wrote a rant about it 19:25:22 ooh 19:25:28 link? 19:25:51 and now all 43 worldwide readers of my blog will unite into a angry crowd! 19:26:16 sounds like a Monty Python skit 19:26:26 https://mecrisp-stellaris-folkdoc.sourceforge.io/rants.html#lackaday 19:26:28 lol 19:27:19 they will need police and watercannon at the hackaday offices as our angry mob come storming into the virtual street 19:28:22 Forth is the Rodney Dangerfield of computing 19:28:47 tabemann, these are the manes I've always used: 19:29:16 swish ( a b c -- b a c ) 19:29:29 spin ( a b c -- c b a ) 19:30:23 * names I've ... 19:30:29 back 19:30:44 programming in assembly is not fun 19:30:49 rdrop-exit, it was MrMobius who asked "is there a name for a word that does ( a b c -- b a c ) ?" 19:30:56 thumb assembly at least 19:31:00 ah, oops sorry 19:31:05 tabemann, I have always liked Assembly 19:31:12 me too 19:31:39 tpbsd: I remember linking MIPS assembly in college 19:31:41 rdrop-exit, maybe it's our age ? 19:31:49 maybe it's just thumb assembly that bothers me 19:31:53 s/linking/liking 19:32:10 perhaps 19:32:15 why do some instructions take two arguments while same take three? 19:32:24 and I have to remember all this 19:32:38 after programming in machine code for years, finally having an ASSEMBLER was like water to a man dying of thirst 19:33:00 well of course 19:33:01 RISC-V is all 3 args, except for psuedo instructions 19:33:23 rdrop-exit: all 3 args makes so much more sense to me 19:33:52 I can't fully express the awesomness of my first assembler, it knew the correct offsets for jumps! 19:34:50 I think if anyone has never had to hand enter machine code for a program, they probably can't comprehend how awesome getting an assembler is 19:35:07 this was kinda my impression of the first instruction set I was exposed to, namely 6502 - there was no order to which instructions had which addressing modes 19:35:23 so thumb assembly is a throwback to that 19:35:48 I wrote the programs for a dual 8085 industrial bottle filling machine in machine code, delivered the hardware, commissioned the machine 19:35:58 from what I gather normal ARM assembly has far more order to it 19:36:39 back in 1985, it ran for years 19:36:47 did you first write it in assembly, and then hand-assemble it? 19:36:53 no 19:36:56 It would make sense that the compressed instruction set is more of a pain to deal with 19:37:31 it was all done in machine code, entered by a hex keypad and confirmed by 7 segment displays 19:37:46 RISC-V may be funky, but it seams cleaner than ARM 19:38:00 so you didn't write down your code with paper and pencil first? 19:38:10 tabemann, all I had was the intel 8085 machine code instruction list in the manual 19:38:29 tabemann, yes I did, but it was 100% machine code 19:38:56 wow 19:39:11 rdrop-exit, and RISC-V has a lot less instructions than arm ? 19:39:34 tabemann, it was ok, but I was always making jump calculation errors 19:39:42 so lots of debugging 19:39:46 I have not compared the number of instructions 19:40:04 well RISC-V is supposed to be um ... RISC ? 19:40:12 and thumb isnt is it ? 19:40:13 So is ARM 19:40:26 (supposed to be RISC) 19:40:28 not the stm32f0 19:40:33 it's not risc 19:40:36 mind you ARM originally stood for Acorn RISC Machine 19:40:43 absolutely 19:41:46 thumb doesn't feel very riscy 19:42:12 I've done some really rough comparisons on the STM32F103 and the GD32VF103 chips 19:42:22 a typical risc instruction set to me is load-store (mind you ARM is this too), 3 argument ops for just about everything else 19:42:27 as both have a mecrisp Forth 19:43:20 and the results are that timing a primes word, theyre about the same at the same clock speed 19:44:00 so no real speed advantages in a rough, unscientific, adhoc test 19:44:44 the BIG advantage is the documentation as the ST Micro doc is light years better at this time 19:45:06 I bet RISC-V will be faster in the future, since I bet they've optimized the fuck out of ARM, while RISC-V is far less mature 19:45:13 the GD doc is incomplete and inaccurate in many places 19:45:22 so once RISC-V is more heavily optimized 19:45:24 tabemann, yeah, I agree 19:45:35 sure, it's still early days yet 19:45:38 RISC0V is like a cleaner MIPS 19:46:23 and MIPS is known for being a clean arch, aside from its infamous delay slot 19:46:33 I'm wondering which will come first, 1,000,000 settlers on Mars, or accurate, up to date GD32VF103 docs ? 19:47:01 the delayed branch was a major turnoff 19:47:14 I guess the assemblers etc will smooth out all the rough edges anyway ? 19:47:36 tpbsd: the MIPS assembler I used in college specifically hid the delay slot from the user 19:47:57 I don't like assembler's that hide or optimize 19:48:42 take Mecrisp-Stellaris, Matthias soon discovered the #immediate limitations of Thumb1 and built Words to work around it. As a result I never knew about those limitations for years 19:49:30 it's the job of software to make things easier regarding difficult hardware (imho) 19:49:56 an assembler should just assemble what you ask it to, any smarts should be in optional directives 19:50:30 rdrop-exit, as long as they tell you and give you the option to turn the optimisation on/off it shouldn't be a problem ? 19:50:50 I agree with rdrop-exit - an assembler should be a direct mapping to opcodes except when they have explicit pseudoinstructions or like 19:50:53 speaking of assemblers, is there an aarch64 assembler that's not gas? it looks like gas is omitting some instructions in the compiled output O_o 19:51:08 like the ldr r0, =foo in arm-gas 19:51:11 in the case of Mecrisp-Stellaris it's all described in the Word list 19:51:14 hey 19:51:29 hey MrMobius 19:51:37 rMobius there is a online Forth stack gymnastics program 19:51:47 MrMobius, you enter what you want to do and it gives you the Forth commands to achieve it 19:51:47 remexre, for X86-64 take a look at FASM (Flat Assembler) 19:52:19 rdrop-exit: aarch64, not x86-64 19:52:27 I'm a happy nasm user on x86-64 :) 19:52:32 oops 19:53:10 as far as I can tell, gas is the only widely-used open-source assembler for aarch64, which is :/ 19:53:13 tpbsd, for assemblers I think it's the other way around 19:53:31 (tho I'm still looking) 19:53:52 rdrop-exit, that seem logical 19:53:57 +s 19:54:23 tpbsd, like it generates a series of words or its one word? 19:56:17 MrMobius, you give it your desired stack order and it generates it using standard Forth words 19:56:28 stack frame ? 19:56:51 I'm still looking for it, it's here *somewhere*! 19:59:57 thats neat. ill check it out 20:00:10 I was just asking if it had a name though before I invent something 20:01:52 For example my RISC-V assembler has lw (load word) and c.lw (compressed load word), I choose, both are available. If I want the assembler to chose between them then I'll make an assembler directive, e.g. LW that I can explicitly use. 20:02:24 That way there's never any confusion. 20:05:09 MrMobuis, these are the names I use: 20:05:10 swish ( a b c -- b a c ) 20:05:18 spin ( a b c -- c b a ) 20:05:56 lift ( a b -- a a b ) 20:06:39 pivot ( n1 n2 -- lo hi ) 20:06:52 upivot ( u1 u2 -- lo hi ) 20:07:01 -pivot ( n1 n2 -- hi lo ) 20:07:09 -upivot ( u1 u2 -- hi lo ) 20:07:42 dup+ ( x -- x+1 x ) 20:07:51 dup- ( x -- x-1 x ) 20:08:28 neato. thanks 20:08:46 none of these are standard 20:09:15 xchg ( x1 -- x2 )( r: x2 -- x1 ) 20:09:56 I also use Chuck-ish names for return stack ops 20:11:11 --- quit: proteus-guy (Ping timeout: 260 seconds) 20:11:15 i.e. push (>r) pop (r>) copy (dup >r) top (r@) 20:12:20 is NIP part of ANS, I don't remember 20:13:16 I assume TUCK is 20:17:24 rdrop (r> drop) 20:18:55 PIVOT is useful in sorting algorithms. Also gives you an alternate way of defining MIN MAX UMIN UMAX. 20:20:15 : min ( n1 n2 -- n ) -pivot drop ; 20:21:02 oops I mean : max ( n1 n2 -- n ) -pivot drop ; 20:21:15 : min ( n1 n2 -- n ) pivot drop ; 20:21:23 and so on for UMIN UMAX 20:28:20 tpbsd: would that be http://sovietov.com/app/forthwiz.html ? 20:28:41 crc, THANKS!!! 20:28:55 crc, i searched everywhere and couldnt find it again! 20:30:47 When you feel tempted to use something like that, you should refactor. 20:38:15 rdrop-exit, absolutely 20:39:21 rdrop-exit, I recently had this humongous stack gymnastics to solve a problem ... refactored and dropped to only two stack jugglers 20:40:08 Cool 20:40:54 it's a personal rule of mine now, if it all looks 'wrong' ... refactor 20:41:54 my rule of thumb is to not have back-to-back stack operators 20:42:05 funny thing, if I write a mess of C code and refactor, it doesnt look much improved, still looks like a mess of C 20:42:53 but Forth goes from looking ugly when it's wrong, to smooth and neat when it's right, the difference is like night and day to me 20:43:54 --- join: gravicappa joined #forth 20:44:05 hmm "not have back-to-back stack operators" I'll remember that :) 20:44:16 I agree, bad Forth is migraine inducing. 20:46:51 sometimes you can't avoid a data stack op immediately followed by a return stack op, or vice-vers, but 20:47:31 in general you shouldn't have back to back stack jugglers. 20:48:49 if you end up with phrases like "rot drop" for example, you're doing something wrong. 20:49:42 yes because the extra stack item shouldnt be there at that point ? 20:50:06 if it's not there, the rot and drop become redundant 20:50:21 PICK and ROLL result in summary excommunication. 20:51:43 yes, something went wrong in how you orchestrated things 20:53:13 hahah 20:53:32 and wood, matches, rope and fire ? 20:54:40 I don't use PICK or ROLL, but have implemented them as part of my examples... 21:00:03 I do occasionally use a `reorder` word to restructure the stack, though this is very rare 21:00:13 PICK and ROLL would be useful for writing high level reflection utilities (.s type things), I wouldn't use them in production code. 21:02:25 my .s word avoids them 21:03:56 sticks and stones can break my bones and Words can break my Forth! 21:04:17 it's just a simple recursive thing: :dump-stack (-) depth 0; drop push dump-stack pop dup n:put sp ; 21:06:22 I don't have PICK and ROLL, I doubt I'll ever need them. 21:08:09 I usually use circular stacks, no DEPTH. 21:11:26 lunch is ready, catch you later, keep on Forthin' 21:11:27 I need to experiment with circular stacks sometime 21:11:39 --- quit: rdrop-exit (Quit: Lost terminal) 21:13:19 For non-standard stack shufflers, I could write a prefix that uses `reorder` so one could avoid having to name them 21:15:38 then one could do things like ¥abc-bac or ¥ab-abbbbbaaba or whatever. This would be inefficient, but could be useful occasionally, especially for one off projects 21:22:53 --- join: proteus-guy joined #forth 21:23:10 :prefix:¥ $- s:split swap n:inc [ s:keep ] bi@ |reorder ; immediate 21:43:15 --- quit: dddddd (Ping timeout: 268 seconds) 22:03:16 --- quit: cartwright (Remote host closed the connection) 22:05:51 --- join: cartwright joined #forth 23:59:59 --- log: ended forth/20.01.24