00:00:00 --- log: started forth/20.04.21 00:01:49 --- quit: rdrop-exit (Read error: Connection reset by peer) 00:05:42 --- join: rdrop-exit joined #forth 00:17:05 --- quit: rdrop-exit (Ping timeout: 256 seconds) 00:27:22 --- join: rdrop-exit joined #forth 00:49:41 --- join: TCZ joined #forth 00:53:08 --- join: xek joined #forth 00:55:19 --- quit: rdrop-exit (Ping timeout: 250 seconds) 00:55:59 --- join: dys joined #forth 00:57:08 --- quit: ntry (Remote host closed the connection) 00:57:40 --- join: ntry joined #forth 00:58:07 --- join: rdrop-exit joined #forth 00:59:09 --- quit: ntry (Remote host closed the connection) 00:59:48 --- join: ntry joined #forth 01:30:16 --- join: jsoft joined #forth 01:54:33 --- quit: rdrop-exit (Ping timeout: 256 seconds) 02:08:00 --- join: rdrop-exit joined #forth 02:11:32 --- quit: TCZ (Quit: Leaving) 02:18:21 --- quit: WickedShell (Remote host closed the connection) 02:34:13 --- quit: jsoft (Ping timeout: 256 seconds) 02:39:12 --- join: dddddd joined #forth 02:58:47 --- join: TCZ joined #forth 03:06:22 c[] 03:08:47 a predator sitting besides a letter c.. a moment later 03:08:48 [c] 03:09:08 ouch :) 03:09:19 you broke my coffee cup 03:09:57 sorry about that! 03:10:24 np, have plenty more c[] 03:11:03 C[c] a bigger predator lurks nearby 03:11:28 my poor little espresso cup 03:12:31 * tp finishes off a few utils in his blue pill developer edition binary 03:46:55 blue pillers await with bated breath 03:47:12 --- quit: ntry (Quit: Leaving) 03:50:11 I've told both of them to be patient 03:50:19 :-)) 03:50:42 :) 03:53:49 --- join: dave0 joined #forth 04:36:26 --- quit: TCZ (Quit: Leaving) 04:36:39 --- quit: mtsd (Quit: Leaving) 04:44:39 --- join: TCZ joined #forth 04:59:12 --- join: jedb__ joined #forth 05:01:53 --- quit: jedb_ (Ping timeout: 250 seconds) 05:39:34 --- join: jsoft joined #forth 05:59:58 tabemann: ""lambda""? How to create ""mk-counter""? 06:09:15 --- quit: TCZ (Quit: Leaving) 06:12:01 --- quit: iyzsong (Quit: ZNC 1.7.1 - https://znc.in) 06:30:07 --- join: TCZ joined #forth 06:39:19 --- quit: rdrop-exit (Quit: Lost terminal) 06:49:56 --- quit: jsoft (Ping timeout: 265 seconds) 06:59:07 --- quit: dave0 (Quit: dave's not here) 07:03:14 --- quit: Zarutian_HTC| (Read error: No route to host) 07:03:45 --- join: Zarutian_HTC joined #forth 07:58:55 --- quit: TCZ (Quit: Leaving) 07:59:43 --- join: X-Scale` joined #forth 08:00:07 --- quit: X-Scale (Ping timeout: 256 seconds) 08:00:13 --- nick: X-Scale` -> X-Scale 08:09:24 tp: Still thought you would find it interesting, reminded me of rants you've written 08:12:26 veltas, yeah, it is, and Chuck is a legend, but far advanced compared to me 08:25:11 --- join: jsoft joined #forth 08:43:20 --- join: merkc1 joined #forth 08:48:10 --- join: merkc2 joined #forth 08:49:48 --- quit: Zarutian_HTC (Ping timeout: 264 seconds) 08:52:12 --- quit: merkc1 (Ping timeout: 264 seconds) 09:21:15 --- join: jpsamaroo joined #forth 09:30:05 --- join: X-Scale` joined #forth 09:30:09 --- quit: X-Scale (Ping timeout: 256 seconds) 09:30:44 --- nick: X-Scale` -> X-Scale 09:38:28 --- quit: guan (Ping timeout: 240 seconds) 09:41:13 --- join: guan joined #forth 09:42:53 --- quit: ovf (Ping timeout: 272 seconds) 09:47:26 --- join: ovf joined #forth 09:47:34 --- quit: ovf (Excess Flood) 09:49:08 --- join: ovf joined #forth 09:50:29 --- quit: dys (Ping timeout: 250 seconds) 09:59:08 --- quit: Lord_Nightmare (Quit: ZNC - http://znc.in) 10:01:13 --- join: Lord_Nightmare joined #forth 10:28:41 --- join: Zarutian_HTC joined #forth 11:42:36 --- quit: merkc2 (Ping timeout: 264 seconds) 12:19:28 --- quit: tabemann (Ping timeout: 240 seconds) 12:48:11 --- join: WickedShell joined #forth 13:12:16 --- quit: gravicappa (Ping timeout: 240 seconds) 13:30:37 --- quit: xek (Ping timeout: 260 seconds) 14:53:23 --- quit: jsoft (Ping timeout: 250 seconds) 15:37:52 What's everyone up to? 15:51:33 --- join: rdrop-exit joined #forth 15:54:51 --- join: dave0 joined #forth 15:58:13 veltas, finishing my bluepill release, you ? 16:01:35 tp: Nice me too 16:01:51 No actually I don't have a bluepill release I am reading about the stock market 16:02:25 Was teaching python earlier, was a bit of fun 16:06:24 Is it bad that I'm actually quite excited about the computers I'm getting 16:08:05 yes, very bad, say three hail Mary's and be contrite 16:08:28 this is reputedly a interesting read: http://www.gutenberg.org/ebooks/24518 16:08:38 Memoirs of Extraordinary Popular Delusions and the Madness of Crowds by Mackay 16:12:44 good morning forthwrights (-_-)zzz c[] 16:13:31 morning Zen Guru of Forthiness 16:14:39 hi Forth Master Techie (tm) 16:34:11 I'm rereading Samet 16:34:35 Foundations of Multidimensional and Metric Data Structures 16:43:28 --- nick: jedb__ -> jedb 16:50:34 --- join: tabemann joined #forth 17:47:53 --- quit: Croran (Quit: No Ping reply in 180 seconds.) 17:49:10 --- join: Croran joined #forth 18:33:41 --- join: boru` joined #forth 18:33:44 --- quit: boru (Disconnected by services) 18:33:47 --- nick: boru` -> boru 18:57:24 $ badc0ffeefaceb0b 18:58:16 ^ magic filler for 64 bits 19:00:38 hey guys 19:00:52 hi tabemann 19:00:56 hey tabemann 19:01:08 I use $DEADBEEF in zeptoforth 19:01:31 ya, that's the classic one for 32-bits 19:02:14 another one I use for 64 bits is: $ 1cedc0ffee4babe5 19:02:57 I made a new release for zeptoforth, where I reorganized the HERE-related words 19:03:17 cool 19:03:23 so , is now RAM, CURRENT, is now , and FLASH, is still FLASH, 19:03:52 likewise HERE is now RAM-HERE, CURRENT-HERE is now HERE, and FLASH-HERE is still FLASH-HERE 19:05:38 * tp passes out from word overload syndrome 19:06:05 :-)) 19:07:13 HERE THERE EVERYWHERE 19:07:29 so RAM-HERE is here, but tabemann wouldn't hear of using FLASH-HERE, here, if it was THERE ? 19:07:33 lol 19:08:43 ANYWHERE 19:09:51 * tabemann is mesmerized by the blinky he's got running for like the last 45 minutes 19:11:05 it's a four-color blinky that goes round in a circular pattern 19:11:33 you are getting sleepy, very sleepy, when I snap my fingers you will... 19:12:00 actually I am sleepy 19:13:31 your eyelids feel like lead .... 19:13:50 886frrdurittivtv7o7otogy7 19:14:05 you will tell me the combination to the safe... 19:14:51 soon you will forget ever trying to use functional programming in Forth, when I snap my fingers every time you see C code you will throw up all over it 19:14:53 * tabemann wakes up 19:15:09 :)) 19:16:44 isn't "functional forth" what factor is supposed to be? 19:17:55 there have been a bunch of different "functional forths" 19:20:23 and a bunch of "onject-oriented forths" 19:20:29 * object 19:20:43 * tabemann is guilty of adding object-orientation to hashforth 19:21:12 * tabemann is also guilty of adding dynamic memory allocation and preemptive multitasking to hashforth 19:22:33 these things are less tempting with zeptoforth, since zeptoforth has only so much memory 19:25:27 they always seem bent on injecting cruft and inefficiencies at the lowest levels of the Forth VM 19:26:07 in the name of some beloved paradigm 19:26:40 Forth already has "words", the best paradigm of all 19:26:56 my word it does! 19:27:13 :) 19:28:38 well in my case, the only added cruft as adding support for safe blocks 19:29:03 and even they weren't part of the VM 19:29:18 well, the dynamic memory allocation was inefficient 19:29:25 or in the name of finishing the project some time in the next 300 years :) 19:29:27 but this wasn't part of the VM 19:29:31 ... the only way to realistically realize the performance goals 19:29:31 and make them accessible to the user was to design the compiler 19:29:31 and the computer at the same time. 19:29:31 In this way features would not be put in the hardware which the 19:29:31 software could not use... 19:29:34 -- Fran Allen, 1981 19:30:34 tabemann, dynamic memory ? with a GC ? 19:32:03 no, not with a GC 19:32:24 what kind of insanity would drive one to make a Forth with a GC? 19:32:47 well... there is a GC library for C so it might be possible 19:33:44 the same kind of insanity that drove people to use micropython on embedded ? 19:33:48 or eLUA 19:33:55 or eLISP ? 19:34:29 well hashforth is meant for PCs, so memory is not on short supply 19:34:39 yeah 19:35:08 I think all the experimentation people do with Forth is good, one never knows what may prove to be useful 19:35:09 whereas I wouldn't think of putting memory dynamic memory allocation in zeptoforth 19:35:32 where the main means of freeing memory is to enter "reboot" 19:35:32 I guess very high level data munging/text processing applications on desktops or servers, e.g. XML processing and such 19:36:12 e.g. I did not even provide a means of freeing task 19:36:30 once a task is created it is there permanently until the next reboot 19:37:10 makes sense to me 19:37:11 my PC Forth VM has two tasks built into the "virtual processor" 19:38:20 one idiom for using tasks in zeptoforth is to, similarly, have two task, one for the REPL, and to run a scheduler in the other task to invoke any number of lightweight "actions" 19:39:08 like the blinky I have running right now has two tasks, one for the REPL, and one for a scheduler which runs eight lightweight actions 19:39:39 the actions each have their own separate timing and turn on and off the four LEDs 19:40:36 a task scheduler? I thought you were doing cooperative multitasking 19:46:11 rdrop-exit: I am; what the scheduler is it is like a cooperative multitasker, except it just runs words based upon whether they are enabled and at what times they are scheduled to execute 19:47:04 the multitasker is similar, but it has separate stacks and dictionary spaces for each task, while the scheduler has no such things beyond those belonging to the scheduler's task itself 19:48:36 --- quit: dddddd (Ping timeout: 256 seconds) 19:51:31 okay, I'm gonna hit the sack 19:51:35 tabemann, I like your designs, a two task scheduler sounds very practical to me 19:51:46 nighto tabemann 19:51:51 I'm not sure I understand what you mean by "it is like a cooperative multitasker", the "cooperative multitasker" is just the word PAUSE normally 19:52:10 goodnight tabemann 19:52:15 rdrop-exit: rather than PAUSE the word just returns 19:52:52 I'm lost 19:52:54 because the word returns, there is no need to maintain a stack or an rstack for it 19:53:36 a stack and an rstack for what? 19:54:10 for a scheduled action, unlike a task 19:54:36 most actions take the form of, essentially "execute this word at that time" 19:55:25 each action just uses the data stack and rstack of the parent scheduler's task 19:56:27 I guess I'm getting confused by your use of the term "sheduler" 19:56:35 * "scheduler" 19:58:02 it really just allows setting delays for words' execution until set times as well as just turning words' execution on and off 19:58:26 it's not a multitasker because what it schedules are not tasks 19:58:26 and takes a lot less ram than a multitasker 19:58:43 yes 19:59:49 with a multitasker each task has to have a data stack, and rstack, and a dictionary space, all of which eat up lots of RAM 20:00:20 tp, the "multitasker" in a cooperative Forth is just simply the word PAUSE 20:01:02 rdrop-exit: that PAUSE requires having a data stack, an rstack, and a dictionary space for each given task 20:01:28 rdrop-exit, in Mecrisp-Stellaris there is a lot more code than the pause word for the multitasker 20:02:03 tabemann, but that is adjustable, a terminal task gets more, a background task gets less 20:02:10 rdrop-exit, it's a bit complex so I dont know much about it 20:02:38 a coroutine on the other hand has no stacks of its own 20:03:06 rdrop-exit: yes, that is true, but even if you give them the minimum size they still take far more space than one of my scheduled words 20:04:09 so is a scheduler a coroutine ? 20:04:47 rdrop-exit's coroutines apparently involve swapping the top of the rstack and the top of the data stack 20:05:24 top of the rstack and instruction pointer 20:05:24 whereas my scheduler doesn't save any state at all about the scheduled words; they're just words that are called when scheduled 20:05:46 tabemann, thats what I was trying to achieve recently 20:05:59 hey COBOL experts ...New Jersey needs COBOL programmers because many of the state’s systems use older mainframes, and those systems are now seeing record demand for services as the coronavirus outbreak disrupts the economy. 20:06:00 For example, an unprecedented 362,000 people have applied for unemployment in New Jersey as a result of the coronavirus outbreak, and the state’s IT department is working to have the 40-year-old mainframes that power that service up and running, 20:07:15 rdrop-exit: how do you accomplish having more than two coroutines that way? 20:08:00 what do you mean? 20:08:37 also, my scheduler has timing as a key element to it, and it automatically puts the MCU to sleep (if combined with the multitasker) if no actions are ready 20:09:08 rdrop-exit: how do you maintain state for > 2 coroutines with that? 20:09:14 tabemann, nice! 20:10:33 I understand what you're saying, it's just that what you're calling a "scheduler" is not what is usually called a scheduler, but that's ok, I get what you're saying 20:10:49 (that's why it's recommended that one always combine the scheduler with the multitasker, as it is the multitasker which actually handles putting the MCU to sleep; the scheduler just tells it that it is waiting) 20:12:04 the "multitasker" in a cooperative Forth is just the word PAUSE 20:12:50 the multitasker in zeptoforth manages task waiting, and if all tasks are waiting it puts the MCU to sleep 20:14:24 "manages task waiting" 20:15:21 e.g. a task can be disabled, or it can be waiting for an interrupt, or it can be waiting for a certain time 20:16:35 typically a cooperative Forth task uses PAUSE to hand off the CPU to another task 20:17:08 well it does do this, unless it cannot find any enabled, non-waiting tasks 20:17:28 if the Forth task is waiting for an interrupt it STOPs itself, which takes it out of the PAUSE ring 20:18:20 the interrupt (or some other task) can insert it back into the PAUSE ring 20:19:17 in zeptoforth it marks itself as waiting, and when the processor wakes up, it tries to do something, and if it still can't do anything, it puts itself back in waiting state 20:19:35 except if it is waiting for a time 20:19:35 the ring itself is just a slot in each tasks descriptor that contains the address of the next task in the ring 20:20:17 where then PAUSE will not execute the task at all until the waited-for time is reached 20:20:17 there's no need for a waiting state, the STOP removes the task from the ring 20:21:04 basically not being in the ring means it doesn't get handed the CPU each time around the ring 20:21:25 there's no need to check it's state 20:21:59 your "waiting state" is implicit in a cooperative multitasker 20:23:18 if there are 3 tasks, A B C, each PAUSE jumps to the next task, ABCABC... 20:24:09 If task B is waiting for an interrupt, it just STOPs itself, which means it removes itself from the ring, which is now ACACAC... 20:24:29 what you're saying though implies that you need a separate ring, a "waiting" ring, consisting of tasks waiting for interrupts so they can be woken up by them and put back into the main ring 20:24:37 no time is wasted on B anymore until it gets hooked back into the ring 20:25:01 no, waiting tasks don't need a ring 20:25:15 so how will you know to wake them up? 20:26:26 when you want them to wake up, you insert them back in the ring 20:26:41 how do you know to do that? 20:27:04 a task outside the main ring doesn't exist unless you put it somewhere else 20:27:16 the interrupt handler can do it, or another task 20:27:47 also, how do you handle tasks waiting for a time? 20:28:26 it's not like a task waiting for IO 20:28:35 where it cna just run right away 20:28:53 you don't want to wake up a task waiting for a time each time a SysTick occurs 20:29:11 so if you don't have the in the main ring 20:29:24 you'll need to put them in a second ring 20:29:37 and execute the timing logic each time a systick occurs 20:29:51 depends how long, if it's a short delay you use a delay word, if it's a long delay you either have a timer interrupt do it, or a task that is intimate with the timer interrupt 20:30:32 my systick time is short, 1/10th of a millisecond 20:31:08 systick is not your only timer possibility 20:31:15 I know 20:32:24 if it's a very short time you don't bother with the extra overhead, you just PAUSE and when you regain the CPU check if enough time has passed 20:33:43 if it's a very long time, then some more specialized timer is probably involved 20:34:49 if you have a ton of things you need to schedule, then you setup something similar to what you called your "scheduler" task 20:39:58 the main way that timing is currently done with tasks in zeptoforth is to set a delay then calling PAUSE (or calling MS, which calls PAUSE), which sets a time to delay to, where then the task is ignored until the systick counter reaches that time (with the MCU being slept as appropriate along the way) 20:42:33 for really slow delays I can see using a busy-loop 20:42:53 but that has the disadvantage of denying CPU time from other tasks 20:42:57 you have two choices depending on how long a delay, if it's a short delay you use MS or something similar with a built-in PAUSE, if it's a long delay you remove yourself from the ring by using STOP, and have an interrupt handler or another task insert you back in the ring 20:43:37 that way for long delays you don't waste CPU cycles 20:44:18 and for a very short delay you don't waste time on unneeded overhead 20:45:25 anyways, I should really get to bed 20:45:30 g'night for real now 20:45:43 goodnight tabemann, stay healthy 21:10:46 --- join: jsoft joined #forth 21:12:11 --- join: merkc2 joined #forth 21:23:02 The cheapest, fastest, and most reliable components are those that 21:23:02 aren't there. -- C. Gordon Bell 21:24:22 --- quit: Lord_Nightmare (Ping timeout: 256 seconds) 21:28:47 --- join: Lord_Nightmare joined #forth 22:38:19 --- join: gravicappa joined #forth 23:03:25 --- quit: _whitelogger (Remote host closed the connection) 23:06:28 --- join: _whitelogger joined #forth 23:22:27 --- quit: rdrop-exit (Quit: Lost terminal) 23:30:28 --- quit: merkc2 (Quit: Leaving) 23:54:19 --- quit: jsoft (Ping timeout: 256 seconds) 23:59:59 --- log: ended forth/20.04.21