00:00:00 --- log: started forth/18.09.26 00:23:56 --- quit: jedb (Ping timeout: 240 seconds) 00:41:29 --- join: jedb (~jedb@199.66.90.209) joined #forth 00:46:46 --- join: mtsd (~mtsd@94-137-100-130.customers.ownit.se) joined #forth 01:23:48 --- quit: nonlinear (Remote host closed the connection) 01:25:08 --- join: nonlinear (~nonlinear@unaffiliated/discrttm) joined #forth 01:53:19 --- quit: cheater (Ping timeout: 245 seconds) 02:02:28 --- quit: ashirase (Ping timeout: 240 seconds) 02:07:59 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 02:50:31 --- quit: nighty- (Quit: Disappears in a puff of smoke) 03:25:37 --- quit: lemonpepper24 (Ping timeout: 244 seconds) 04:20:40 --- quit: gravicappa (Ping timeout: 272 seconds) 04:36:48 --- join: lemonpepper24 (~lemonpepp@nat-x098-040.reshsg.uci.edu) joined #forth 04:54:56 --- quit: wa5qjh (Quit: No Ping reply in 180 seconds.) 05:16:02 --- quit: mtsd (Quit: Leaving) 05:40:07 --- quit: pierpal (Ping timeout: 260 seconds) 05:45:01 --- join: cheater (~cheater@unaffiliated/cheater) joined #forth 05:51:48 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 06:04:26 --- quit: Keshl (Read error: Connection reset by peer) 06:04:41 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 06:14:27 --- join: nighty- (~nighty@s229123.ppp.asahi-net.or.jp) joined #forth 06:30:45 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 07:15:28 --- quit: tabemann (Ping timeout: 272 seconds) 07:35:25 --- quit: pierpal (Quit: Poof) 07:35:42 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 07:56:56 --- join: gravicappa (~gravicapp@ppp83-237-173-233.pppoe.mtu-net.ru) joined #forth 08:30:08 --- quit: gravicappa (Ping timeout: 240 seconds) 09:03:07 --- quit: dave9 (Quit: one love) 09:07:45 --- quit: Zarutian (Read error: Connection reset by peer) 09:07:49 --- join: Zarutian_2 (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 09:08:35 --- nick: Zarutian_2 -> Zarutian 09:13:49 --- quit: Keshl (Read error: Connection reset by peer) 09:15:02 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 09:16:48 --- quit: pierpal (Ping timeout: 252 seconds) 09:17:07 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 09:23:56 --- quit: pierpal (Ping timeout: 240 seconds) 10:22:33 --- join: dys (~dys@p54BF5E3D.dip0.t-ipconnect.de) joined #forth 10:48:37 --- quit: lemonpepper24 (Ping timeout: 246 seconds) 11:04:47 --- join: lemonpepper24 (~lemonpepp@nat-x098-040.reshsg.uci.edu) joined #forth 11:18:44 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 12:13:48 --- join: gravicappa (~gravicapp@ppp83-237-174-131.pppoe.mtu-net.ru) joined #forth 12:30:34 --- quit: Zarutian (Read error: Connection reset by peer) 14:20:25 --- quit: gravicappa (Remote host closed the connection) 14:49:45 --- join: Zarutian (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 14:54:09 what is the task scheduler algorithm that called whose description follows: lets say we have sixteen task priority levels 14:54:32 0xF is the highest and 0x0 is the lowest 14:55:08 0xF tasks run every other 'quanta' or time-slice 14:56:28 0xE tasks then run in every other free 'quanta' (that is quantas not taken up by 0xF tasks) 14:57:47 and so on down the priority levels until a priority 0x0 task is reached and dealt with 14:59:29 lets call that a round 15:00:41 so as I stated in the begining of this, anyone know if this has any spefic name? 15:11:56 Is there a way to parse the next item in the input stream, and tell if it's a word or a number? 15:40:26 --- quit: groovy2shoes (Ping timeout: 240 seconds) 15:41:40 --- join: groovy2shoes (~groovy2sh@unaffiliated/groovebot) joined #forth 15:47:03 Well, that's exactly what the interpreter does, right? Do you mean without consuming it? 15:47:59 You could probably write a word that copies >IN and uses the copy to "peek ahead" without moving >IN itself. 15:48:30 Or I guess you could save >IN, call BL WORD, run FIND, and then restore >IN from the copy? 15:49:07 In Forth the answer to "is there a way to ...?" is almost always yes. :-) 15:50:04 is there a way to write c 15:50:31 : int ' integer set-return-type ; 15:50:42 :-) 15:50:44 zy]x[yz: LIT 0x63 EMIT 15:50:54 I would assume it could be done. 15:51:05 I mean, you can write an assembler. 15:51:08 Zarutian, what forth are you using that parses hex numbers that way 15:51:21 gforth does 15:51:26 shouldn't it be $63 ? 15:51:43 `0x63 emit c ok` 15:51:44 0x seems to work 15:52:06 Oh, I thought he mean the C programming language. 15:52:13 I did 15:52:19 zy]x[yz: I added 0x 0o 0q 0b to the NUMBER word in the forth I am using 15:52:37 0q? 15:52:38 * Zarutian was being obtuse ;-Þ 15:52:40 should be using radix prefix notation 15:52:45 I can do :, where base is any decimal integer 2-62. 15:52:57 is then interpreted in that base. 15:53:03 WilhelmVonWeiner: quads, you know 0, 1, 2, 3. Like what they use on Star Trek 15:53:15 Never been a trekkie. 15:53:28 My imaginary Forth has 0g, for guzzoline 15:53:48 I have x: and b: as shortcuts for 16: and 2: as well. 15:54:01 WilhelmVonWeiner: but in seriousness, it seemed as logical as 0o for octals 15:54:15 Just because I did the same thing in my last one (:), and thought all the 16: was ugly. 15:54:20 never seen quads used, personally 15:54:34 but I can see em being useful 15:54:36 I'm not making that Trek connection either. :-( 15:55:16 KipIngram: well quad was/is an fictional data storage size unit in Star Trek 15:55:35 KipIngram: usually expressed in kilo, mega and giga quads 15:55:37 Oh. Ok. Must have been in TNG or DSN or Voyager. 15:55:40 I didn't really watch those. 15:55:58 I liked the original series and Enterprise. 15:56:36 KipIngram: I am subverting it here because the script writers choose that fictional unit because they didnt want their characters dialogue to sound quinte in a few years time. 15:57:25 I see. So it was a quaternary logic, I guess? 15:57:27 They also wanted to avoid a funny name like Bloops 15:58:19 KipIngram: they use isolinear chips on TNG, DSN and Voyager, have no idea how the logic works on those. 15:58:22 I did the numbers the way I did in my Forth to avoid having global variablel BASE. 15:58:56 KipIngram: it might be that the quads were basically used due to four stable states of their data storage systems 15:59:10 I'd think so. 15:59:44 We could do that with transistors, but it would be really complicated, and it would consume a lot of power, because for two of the states the transistor would be in neither cutoff nor saturation. 16:00:07 Power's low in those states because I=0 in cutoff and V=(damn near)0 in saturation. 16:00:44 In between is the "active range" and both V and I are significantly non-zero. 16:00:50 KipIngram: well, I mean not states stored with transistors (like with Flash nowdays) but something like mram or fram 16:00:52 Make a word that returns a new interpreter working a base provided by an argument 16:00:57 BOOM, no global state 16:01:08 --- join: wa5qjh (~quassel@175.158.225.197) joined #forth 16:01:08 --- quit: wa5qjh (Changing host) 16:01:08 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 16:01:33 * Zarutian hands three Futamura projectors and a partial evaluator 16:01:37 Seems to me like that whole interpreter is then the global state. 16:01:57 * Zarutian hands them to WilhelmVonWeiner 16:03:05 Zarutian: Thanks, I think I'll curry em 16:04:48 KipIngram: I'm pretty sure in canonical Forth the interpreter is a QUIT-based loop 16:06:17 KipIngram: : UK POSTPONE BR_EXIT ; \ no? Too obscure? 16:06:56 ...can we refactor this definition in parliament? 16:10:08 --- quit: dys (Ping timeout: 250 seconds) 16:10:19 Yes, I agree re: the QUIT-based loop. 16:10:41 So I wouldn't consider it really a state 16:10:57 But if the new interpreter uses some other value of BASE it must have some way to store it, so I think that global is still there. 16:11:10 I just like what I did because it puts the base spec right there with the number. 16:11:14 WilhelmVonWeiner: what? The UK? I wont be one much longer 16:11:32 s/I/It/ 16:11:47 * Zarutian dugunks some of his keyboard keys. 16:12:15 I would have the interpreter as a (TCO'd) recursive function that consumes BASE and other similar words off the stack 16:12:24 Or a locals stack. 16:12:35 Ah, ok, I see that. 16:12:53 "The stack" is basically passed from function to function 16:12:54 My number conversion code does that - uses a stack frame. 16:13:13 16:13:24 I mean technically it's probably considered global state but in a concatenative language it's just passing the entire stack as the only argyument 16:14:03 Starts off with 10; if it sees a : it nips out the base and resets the accumulator to 0 with ROT DROP 0 SWAP. 16:14:10 That pushes the previous accumulator into the base position. 16:15:29 When it's all done, it does DROP NIP *. 16:15:47 DROP gets rid of the string pointer, NIP gets rid of the base, and is just +1 or -1. 16:17:32 It does floating point conversion if there's a . in the number string. But it uses the FPU to help with that - just converts the mantissa and exponent into ints and then uses FPU to calculate mantissa*10^exponent. 16:19:20 * Zarutian doesnt truck with fixed sized floating point numbers 16:25:20 crc and a japanese megabrain proposed some new way to encode 64 bit fp numbers into 32 bit integers 16:25:40 the paper is in the doc/ folder in the latest release tarball 16:26:08 How is that possible? To store 64 bits of information in 32 bits? 16:27:17 Zarutian: I probably find your reasoning on that sound, but that format is what the hardware is able to work with, so I'll deal. 16:27:23 Dive in and find out http://forthworks.com/retro 16:28:36 Honestly the only reason I sometimes use Forth over Retro is for the nostaglic feeling (and the sheer speed of gforth-fast lol) 16:28:38 lol fossil 16:28:56 KipIngram: the IEEE 754 FPU? It is pretty much a waste of silicon estate and power. Besides the MCUs and SOCs I am targetting do not have FPUs 16:29:33 dzho: Fossil is great 16:31:45 Ok, I see. They're not claiming the precision of the 64-bit representation; looks like they're claiming good precision in certain ranges. That's just from reading the abstract. 16:32:48 Did I not mention the accuracy 16:33:44 --- quit: pierpal (Ping timeout: 245 seconds) 16:36:48 --- quit: jedb (Ping timeout: 252 seconds) 16:36:54 https://hub.darcs.net/pointfree/forth-binary-complex-numbers/raw-file/A_Binary_System.pdf 16:36:55 Well, you said the encoding was to 32-bit int, which pretty much implies a loss of accuracy. 16:37:15 Their idea is kind of interesting. 16:37:30 I guess there point is that "there are application domains where this will 'get you there.'" 16:39:48 pointfree: mind if I ask how gelforth is coming along? my PSoC is getting lonely 16:40:35 --- quit: Keshl (Quit: Konversation terminated!) 16:49:38 --- join: jedb (~jedb@199.66.90.209) joined #forth 16:51:42 --- quit: wa5qjh (Quit: No Ping reply in 180 seconds.) 16:55:08 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 16:58:48 --- quit: jedb (Ping timeout: 252 seconds) 17:03:52 --- quit: nighty- (Quit: Disappears in a puff of smoke) 17:10:03 --- join: tabemann (~tabemann@34-83-181-166.mobile.uscc.net) joined #forth 17:11:34 --- join: jedb (~jedb@199.66.90.209) joined #forth 17:16:25 --- quit: lemonpepper24 (Ping timeout: 246 seconds) 17:16:25 --- quit: jedb (Ping timeout: 244 seconds) 17:18:18 WilhelmVonWeiner: Well you can put mecrisp on it for now https://hub.darcs.net/pointfree/mecrisp-stellaris-cy8c5888-bb and use these https://hub.darcs.net/pointfree/psoc-logic-examples/browse from mecrisp. Not a synth/par, I've been replacing the old system with Majority Inverter Graphs because that will work well over arithmetic-style logic, such as the datapath blocks and the Digital Filter Block as well as Boolean logic. 17:18:48 haven't had as much time to work on it lately :( 17:19:27 --- join: lemonpepper24 (~lemonpepp@nat-x098-040.reshsg.uci.edu) joined #forth 17:19:45 * tabemann now can't see how he did without using wordlists before 17:20:35 (i.e. now I can tuck multitasking functionality and low-level IO functionality into their own wordlists, so they're not taking up namespace by default) 17:21:02 Majority Inverter Graphs are the way of the future (help wanted) 17:21:06 https://wiki.epfl.ch/edicpublic/documents/Candidacy%20exam/Amar%20Gaillardon%20Micheli%20-%202014%20-%20Majority-Inverter%20Graph%20A%20Novel%20Data-Structure%20and%20Algorithms%20for%20Efficient%20Logic%20Optimization%20copy.pdf 17:23:26 tabemann: word lists are nice. Forth has varied over the years in how it handles that. 17:23:38 I'm using Forth 2012 wordlist 17:23:43 *wordlists 17:24:03 I've got a home-grown thing, that may be more or less one of the "official" ones, but I wouldn't know. 17:24:25 It's not too different from the FIG approach, but iirc it's not quite exactly the same. 17:24:35 Well, maybe the dictionary structure is. 17:24:48 But I have a stack of vocabularies from my CONTEXT, not a single variable. 17:24:54 right now I've got three wordlists by default, FORTH-WORDLIST, TASK-WORDLIST, and IO-WORDLIST 17:25:12 for me each wordlist is a linked list of word definitions 17:25:15 Though in a conversation here the other day the notion of a "stack of such stacks" came up, and that seemed pretty slick to me. 17:25:24 Yes, same here. 17:25:36 And a word in one of those lists can be the "root" of a new list. 17:25:36 and each wordlist order is a buffer containing up to 128 wordlist entries 17:25:57 I allocate a single cell on the stack to represent a given wordlist 17:26:02 Each of those root entries holds a pointer to the current latest word in that list. 17:26:10 and that cell points to the most recent word in that wordlist 17:26:12 And it's pointers to those root entries that go on my context stack. 17:26:30 each task has its own wordlist order in Attoforth 17:26:38 but tasks can share wordlists 17:26:53 For me it's each process; each has its own dictionary, that connects to the tip of the system initial dictionary. 17:27:03 A process can run multiple tasks, though. 17:27:19 all task in my Forth share the same memory space 17:27:24 But only the initial one should be manipulating the process's dictionary. 17:27:44 I have "task variables," "process variables," and "system variables." 17:27:47 any task can modify any wordlist in my Forth 17:28:05 Tasks have their own task variables, but share process variables (belonging to their parent process). 17:28:11 And the system variables are the same for every task. 17:28:35 pointfree: mecrisp, nice 17:28:42 was using this on STM32F401 17:28:47 thanks 17:28:47 there are very few global variables in my Forth; the three builtin wordlists are like the only ones visible to the user ATM 17:28:56 Well, I don't have any memory security, so any task COULD do that in my Forth, but they'd have to sneak around the system data structures to find the stuff belonging to other processes. 17:29:02 almost all variables the user can see are task variables 17:29:10 --- join: jedb (~jedb@199.66.90.209) joined #forth 17:29:14 or are definitions in any given wordlist 17:29:24 I'm thinking your task is closest to my process. 17:29:31 Most of my variables are process variables. 17:29:43 There are only a few system varibles, primarily having to do with managing the system memory heap. 17:30:02 I should say "heap" because it's a pretty limited heap. 17:30:04 Fixed size pages. 17:30:13 with little modification I could implement cooperative multitasking fibers on top of my preemptive multitasking heap 17:30:21 So no garbage collection required, and very simple fast allocate and free words. 17:30:48 my Forth makes pretty heavy use of the heap, so it can avoid writing to the data space of any given task 17:31:15 it's a Forth for "big" systems, mind you (in relative terms - a Raspberry Pi is a "big" system) 17:31:20 I originally envisioned rather large heap pages, so that processes kept their tasks within their page, as well as definitions and headers. 17:31:23 I.e., EVERYTHING. 17:31:49 my data and return stacks and my data spaces for each task themselves are allocated on the heap 17:32:03 actually each task can have multiple data spaces 17:32:06 This past week I've re-worked it so that tasks, headers, and definitions all go in separate pages, and over the next couple of days am going to make it so headers and defs can expand to additional pages if they fill up the initial ones. 17:32:17 So I'll be able to crank the page size down fairly small. 17:32:19 because whenever you create a word it checks if there's a good amount of room left in the data space 17:32:25 and if there isn't 17:32:33 it creates a new data space in another place in the heap 17:32:37 Right - that's what this next work will do. 17:32:54 Except I'm going to be willing to break a definition across page boundary, by just compiling a jump to the new page at the very end. 17:33:07 you can still run out of data space though 17:33:21 if you keep on alloting and alloting and alloting without defining any more words 17:33:25 Well, my data goes in the definition pages. 17:33:39 words are defined in my data spaces 17:33:39 What you'd call the "parameter fields" in traditional Forth parlance. 17:33:57 so when you define a word it puts a word header in the data space 17:34:00 Ok, so you're saying "data" and I'm saying "definition," but I think we're referring to the same beast. 17:34:07 On the other hand, headers are separate. 17:34:11 and then points the data pointer immediately after the name field of the word 17:34:34 Ok, so you can't have multiple entry points to a word then. 17:34:40 Because you have to have a header right before it. 17:34:51 You could, but you'd have to jump over the header for the second entry point. 17:35:00 each word contains a "secondary pointer" 17:35:00 That's the main reason I separated headers into a separate region. 17:35:05 So I can do this: 17:35:11 which points at the threaded code 17:35:18 : entry1 1 2 3 : entry2 4 5 6 ; 17:35:20 there's four pointers in my word headers 17:35:23 next pointer 17:35:26 code pointer 17:35:28 Same here. 17:35:28 data pointer 17:35:31 and secondary pointer 17:35:44 the secondary pointer is important for CREATE ... DOES> 17:35:51 I don't store my name strings in the header - I'm going to have a system-wide persistent symbol table. 17:36:06 because it can point into the middle of another word's code 17:36:12 So my four items are 1) link, 2) symbol table index, 3) code pointer, 4) parameter (secondary) pointer. 17:36:58 the reason why I have a data pointer is so I don't have to do an add to jump over the name of the word, because the name is right after the header and before the data 17:37:23 it's stupid really 17:39:03 it's also so that if I ever port this to an arch that requires alignment 17:39:12 I don't have to calculate the alignment 17:39:23 tabemann: naah, this reminds me of eForths split dictionary technique. That is there are name headers that have code pointer next pointer and the name. The next pointer always points to the start of the name of the next entry 17:44:42 * tabemann just changed his word format so that the code pointer comes first (to shave off an add for each word execution) 17:45:31 actually, I don't use the data pointer that much 17:45:38 Good. My code and parameter pointers come last, but compiled definitions point to the code pointer, not to the beginning of the header. 17:46:03 Links point to the symbol table index field. 17:46:05 I can do an add for data pointers, but that only really affects CREATEd words 17:46:57 Right - generally something has to be done to get from code pointer to data address. In old FIG forth it was just "code pointer address + cell." 17:46:58 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 17:47:13 cell == word size for all these things. 17:51:43 WilhelmVonWeiner: also check out http://www.psoctools.org/ and https://hub.darcs.net/pointfree/psoc-tabular if you want to write some hand-crafted bitstreams. 17:52:43 --- join: nighty- (~nighty@kyotolabs.asahinet.com) joined #forth 17:53:25 well, I'm gonna go - will be on later 17:57:54 --- quit: tabemann (Ping timeout: 245 seconds) 18:05:54 --- quit: dddddd (Ping timeout: 252 seconds) 18:31:25 --- join: tabemann (~tabemann@2602:30a:c0d3:1890:ccf2:f6ec:5a58:6b88) joined #forth 18:32:20 --- quit: wa5qjh (Quit: No Ping reply in 180 seconds.) 18:35:49 --- join: wa5qjh (~quassel@175.158.225.197) joined #forth 18:35:50 --- quit: wa5qjh (Changing host) 18:35:50 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 18:48:49 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 18:49:21 hi 19:51:27 --- join: pierpal (~pierpal@host102-235-dynamic.181-80-r.retail.telecomitalia.it) joined #forth 20:10:41 yes! changed around my word structure to successfully optimize CREATE while eliminating the need for a data pointer 20:12:48 well, not CREATE but CREATEd words 20:12:48 --- join: rdrop-exit (~markwilli@112.201.162.180) joined #forth 20:13:10 * tabemann had not thought of putting the name of a word *before* the word header 20:13:16 Great video interview of Chuck Moore: https://www.google.com/url?q=https%3A%2F%2Fwiki.forth-ev.de%2Fdoku.php%2Fevents%3Aef2018%3Ainterview&sa=D&sntz=1&usg=AFQjCNFdgghydaonH_0lU1Ed0r52hvOnvA 20:13:55 this allows getting the data address from a word by simply adding a constant to the word address 20:13:57 Better link: https://wiki.forth-ev.de/doku.php/events:ef2018:interview 20:15:10 the key innovation is putting the length of the name *after* the name 20:22:16 tabemann: i thought of another trick, instead of one linked list of words, have 31 lists where list01 is a list of words that are 1 char in length, list02 is all words of 2 chars, list03 is words of 3, etc. 20:22:44 costs 32 pointers, but should speed up searching the words a lot cos you don't need to compare lengths 20:22:53 you might as well implement a hash table 20:23:04 not the same 20:23:15 in a way it's a hash table 20:23:21 or better yet, n number of hashtables 20:23:52 what I have implemented is slow and inefficient, but word lookup doesn't need to be efficient 20:23:56 "hashing" on the lengths of words 20:24:07 considering that it's normally essentially a one-time cost 20:24:45 one thing I'm not implementing is FORGET 20:25:00 I don't know a reasonable way to implement it with multiple wordlists 20:25:17 I can see implementing it with a single wordlist comprised of a linked list 20:27:45 You could just implement MARKER to rollback the whole dictionary 20:31:59 MARKER seems like it requires storing the search order when each word is defined 20:32:14 I'm not going to do that 20:33:54 oh I see how it works 20:34:22 well there's one major problem with it 20:34:43 my Forth is multitasking and each task has its own wordlist order 20:36:42 Why do you need a wordlist order per task, is your Forth multi-user? 20:37:00 it could be 20:37:47 basically each task has its own data space and is largely independent of the other tasks, even though tasks can communicate and can modify the same wordlists 20:38:03 the point is so that each task can change the wordlist order independent of the other tasks 20:38:30 I don’t see the point of a maintaining a search order per task, only per user assuming a multi-user system 20:39:22 think of it that each task can execute a separate program, and each program may want a different wordlist order from each other program 20:39:44 each task can still modify wordlist it shares with other tasks though 20:41:23 a use case is this 20:41:34 a program may not want to pollute FORTH-WORDLIST 20:42:36 so it executes GET-ORDER 1+ WORDLIST DUP >R SWAP SET-ORDER R> SET-CURRENT 20:42:39 Only a terminal task requires wordlists 20:42:44 and then it has its own namespace all to itself 20:43:22 why? 20:43:33 to me wordlists are like modules or namespaces in other languages 20:45:21 A user interactively interprets and compiles words and therefore needs dictionary search 20:46:39 but the user can fork off threads that can interpret and compile code too 20:48:03 You normally don’t burden code with dictionary searches at runtime 20:49:24 in general, though, I've designed this Forth with the idea that it could be multiuser if it wanted to be 20:49:53 in general, though, I've designed this Forth with the idea that it could be multiuser if it wanted to be 20:50:05 oh I didn't see that that printed 20:50:36 But even multi-user, only the terminal tasks would require vocabulary searches, most tasks wouldn’t 20:51:22 wordlist orders are lightweight enough that there's no reason to limit which tasks can have them 20:56:00 It’s still a waste, I can’t think of many scenarios where something other than an operator task would ever use wordlists. 20:58:24 The code that is run by a background task normally just executes, the relatively slow wordlist lookups were done in advance at compile-time when the user was compiling the code. 20:59:11 --- quit: dave9 (Quit: one love) 21:13:42 Gotta walk the dogs. Cheers. 21:13:53 --- quit: rdrop-exit (Quit: rdrop-exit) 21:15:25 --- nick: nonlinear -> NB0X-Matt-CA 21:40:04 --- join: reepca (~user@208.89.170.250) joined #forth 22:05:18 --- nick: dk_jackdaniel -> jackdaniel 22:51:58 --- join: [1]MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 22:54:59 --- quit: MrMobius (Ping timeout: 245 seconds) 22:55:00 --- nick: [1]MrMobius -> MrMobius 23:04:59 --- quit: Keshl (Ping timeout: 245 seconds) 23:06:33 --- quit: reepca (Remote host closed the connection) 23:06:49 --- join: reepca (~user@208.89.170.250) joined #forth 23:07:51 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 23:28:28 --- quit: lemonpepper24 (Ping timeout: 246 seconds) 23:30:27 --- quit: Keshl (Ping timeout: 246 seconds) 23:31:44 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 23:49:07 --- join: gravicappa (~gravicapp@ppp83-237-174-131.pppoe.mtu-net.ru) joined #forth 23:59:59 --- log: ended forth/18.09.26