00:00:00 --- log: started forth/16.07.20 00:05:50 --- quit: impomatic (Ping timeout: 244 seconds) 00:07:22 --- join: impomatic (~impomatic@host31-52-247-186.range31-52.btcentralplus.com) joined #forth 01:44:24 --- quit: ASau (Ping timeout: 276 seconds) 02:31:49 --- join: true-grue (~true-grue@176.14.216.104) joined #forth 03:36:52 --- quit: wa5qjh (Ping timeout: 276 seconds) 05:48:10 --- quit: gravicappa (Ping timeout: 258 seconds) 05:50:38 --- join: gravicappa (~gravicapp@h62-133-162-222.static.bashtel.ru) joined #forth 06:00:14 --- join: wa5qjh (~Thunderbi@203.111.224.40) joined #forth 06:23:18 --- join: nal (~nal@adsl-64-237-237-80.prtc.net) joined #forth 06:48:34 --- join: impomatic_ (~impomatic@host31-52-247-186.range31-52.btcentralplus.com) joined #forth 06:49:55 --- quit: impomatic (Ping timeout: 240 seconds) 06:49:59 --- nick: impomatic_ -> impomatic 07:39:33 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 09:06:00 --- join: Carisius (~Carisius@cm-188-171-4-60.telecable.es) joined #forth 09:58:52 --- quit: Zarutian (Quit: Zarutian) 10:00:57 --- join: bedah (~bedah@31.150.92.255) joined #forth 10:21:05 --- join: dys (~dys@2001:4dd0:ff00:809d:eab1:fcff:fe36:4b0b) joined #forth 10:21:36 --- join: reepca` (~user@184.52.15.40) joined #forth 10:25:44 --- quit: reepca (Ping timeout: 260 seconds) 11:50:30 --- quit: gravicappa (Ping timeout: 250 seconds) 13:02:29 --- join: Inode (~inode@unaffiliated/inode) joined #forth 14:19:22 --- quit: Carisius (Ping timeout: 244 seconds) 14:28:49 --- quit: JDat (Ping timeout: 276 seconds) 14:40:37 --- join: ASau (~user@netbsd/developers/asau) joined #forth 14:46:57 Question... when most people talk about "native code" forths, is that mostly synonymous with "subroutine threading"? I assume that the primitives for direct/indirect threaded forths are in machine code, right? The difference is just whether an inner interpreter or machine code subroutine calls are doing the calling, right? 14:48:25 from what I've seen, yeah 14:49:12 is there a major performance difference (assuming x86) / what causes it? 14:49:18 I generally do indirect threaded, as that's relatively easier and sometimes fits the platform better 14:49:31 well, indirect threading involves memory reads all over the place 14:49:37 to read the next token and such 14:49:44 as well as the stack 14:49:56 so you don't get as much cache locality bonus 14:51:07 STC allows the processor to use it's branch prediction and such to boost the code reading speed, cause it knows a "call 0x13241" means the next code to read will be at that address 14:51:36 I wonder, do forth-based CPUs have a built-in inner interpreter? 14:52:11 --- quit: proteusguy (Read error: Connection timed out) 14:52:57 --- join: proteusguy (~proteusgu@180.183.141.52) joined #forth 14:52:58 --- mode: ChanServ set +v proteusguy 14:53:01 some may? The main one I'm familiar with, the J1, doesn't really 14:53:25 --- quit: bedah (Quit: Ex-Chat) 14:53:28 I looked a bit at the j1 cpu... correct me if I'm wrong, but it seemed like the stack was 4 cells deep? Assuming I didn't get the units wrong looking at a bit of the verilog 14:54:02 33 cell data stack, 32 cell return stack 14:54:23 Yep, definitely got the units wrong 14:55:02 [4:0] is the dsp, and refers to a there being 5 (4, 3, 2, 1, 0) "wires" for it 14:55:41 I was looking at common.h `define DEPTH 4 14:55:45 so it can address from 0 to 31, i.e. 32 vals on the data stack, and there's a "top of stack" value held separate, so 33 cell data stack 14:56:47 ah, so it's 2^(depth+1) stack cells? 14:58:24 basically? but the actual stack depth is defined by the cpu hdl 15:14:49 --- quit: Inode (Quit: ) 15:33:23 --- join: karswell` (~user@179.63.114.87.dyn.plus.net) joined #forth 15:44:49 --- quit: true-grue (Read error: Connection reset by peer) 15:51:01 --- quit: nal (Ping timeout: 272 seconds) 16:10:43 --- join: nal (~nal@adsl-64-237-237-80.prtc.net) joined #forth 16:15:24 evening 16:20:30 hullo 16:25:49 reepca`: hi 16:37:32 --- quit: proteusguy (Ping timeout: 258 seconds) 16:52:06 --- join: vsg1990 (~vsg1990@pool-173-64-14-42.bflony.fios.verizon.net) joined #forth 16:59:12 --- join: leaverite (~Thunderbi@203.111.224.43) joined #forth 17:00:32 --- quit: wa5qjh (Ping timeout: 240 seconds) 17:00:33 --- nick: leaverite -> wa5qjh 17:22:50 in ANS Forth, what does ALLOT actually do? As in, what is its purpose? All I can see it doing is changing the value put on the stack by HERE. 17:24:48 reepca`: that's about it 17:25:31 here points to the first free cell in the dictionary 17:25:53 allot moves that up, so that the next thing compiled has some blank space ahead of it 17:26:42 reepca`: say you want to create an array of bytes 17:27:03 you might say "CREATE things 10 ALLOT" 17:27:20 that'll create a dictionary header for "things", and leave ten bytes following 17:28:00 but what distinguishes a free cell from a not-free-cell? 17:28:27 it's free if it's north of what HERE says is the first free cell 17:28:57 there's no real allocation as such like in C 17:30:12 I suppose it's mostly a portability thing? In gforth at least, I can just as easily read/write memory north of HERE (at least, as far north as HERE + UNUSED), but I guess that might not be the case in other implementations? 17:31:14 err wait... by "north" I mean "the direction HERE increases in when given positive values to ALLOT" 17:31:17 right 17:31:27 yeah, colloquial term 17:31:38 addresses greater than the one pointed at by HERE 17:31:46 you could stick anything you like there 17:31:46 yeah 17:31:52 say HERE gives you $7ff0 17:32:00 you can bung things into $8000 17:32:19 the next word longer than $10 bytes including header will smash what you put at $8000 17:32:57 --- nick: karswell` -> karswell 17:34:08 --- nick: reepca` -> reepca 17:34:55 so HERE is only special insofar as it is used by the word-defining mechanism? 17:39:55 --- quit: vsg1990 (Quit: Leaving) 17:49:57 well, HERE is always pointing to the first place you can put a new thing 17:50:28 or rather, DP is pointing to it 17:50:39 HERE is just DP @ ; 17:54:54 huh, I didn't realize DP was a user variable that could be set and read directly 17:54:58 neat 18:17:21 note there are a variety of other memory allocation schemes out there 18:17:44 on top of what HERE and ALLOT does 18:17:59 --- quit: groovy2shoes (Quit: Leaving) 18:18:48 --- join: groovy2shoes (~groovy2sh@unaffiliated/groovebot) joined #forth 18:19:20 including the actual MEMORY-ALLOCATION word set defined by ANS Forth 18:48:06 --- join: vsg1990 (~vsg1990@pool-173-64-14-42.bflony.fios.verizon.net) joined #forth 19:20:27 --- join: proteusguy (~proteusgu@180.183.137.110) joined #forth 19:20:27 --- mode: ChanServ set +v proteusguy 19:47:57 --- quit: proteusguy (Ping timeout: 276 seconds) 19:58:34 --- quit: reepca (Read error: Connection reset by peer) 20:01:43 whoa - so much activity i need to go and read the channel logs! (heart) 20:02:15 --- join: reepca (~user@184.52.15.40) joined #forth 20:06:53 --- quit: reepca (Read error: Connection reset by peer) 20:12:26 --- join: reepca (~user@184.52.15.40) joined #forth 21:00:45 --- quit: vsg1990 (Quit: Leaving) 21:39:49 --- quit: wa5qjh (Ping timeout: 264 seconds) 22:06:27 --- join: wa5qjh (~Thunderbi@203.111.224.43) joined #forth 22:20:23 --- quit: wa5qjh (Ping timeout: 244 seconds) 22:21:19 --- join: wa5qjh (~Thunderbi@203.111.224.43) joined #forth 23:46:18 --- join: karswell` (~user@179.63.114.87.dyn.plus.net) joined #forth 23:48:04 --- quit: karswell (Ping timeout: 250 seconds) 23:52:37 --- quit: dys (Ping timeout: 258 seconds) 23:59:59 --- log: ended forth/16.07.20