00:00:00 --- log: started forth/19.03.30 00:09:27 --- join: wa5qjh (~quassel@110.54.239.163) joined #forth 00:09:27 --- quit: wa5qjh (Changing host) 00:09:27 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 00:22:04 --- quit: wa5qjh (Remote host closed the connection) 00:44:06 --- quit: dddddd (Remote host closed the connection) 00:46:13 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 01:28:13 --- quit: wa5qjh (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) 01:28:47 hi PoppaVic 01:40:40 i rewrote >number again 01:40:48 i have to test it 01:46:40 --- join: rdrop-exit (~markwilli@112.201.169.15) joined #forth 01:52:09 --- join: wa5qjh (~quassel@110.54.239.163) joined #forth 01:52:09 --- quit: wa5qjh (Changing host) 01:52:09 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 01:54:58 Good afternoon Forthwrights :) 01:57:30 hi rdrop-exit 01:58:36 Hi dave0 02:02:07 --- quit: wa5qjh (Remote host closed the connection) 02:02:54 --- quit: ashirase (Ping timeout: 245 seconds) 02:04:53 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 02:07:00 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 02:07:09 --- quit: wa5qjh (Remote host closed the connection) 02:33:08 --- join: DKordic (~user@109-93-124-3.dynamic.isp.telekom.rs) joined #forth 02:36:40 --- join: dys (~dys@tmo-084-127.customers.d1-online.com) joined #forth 02:54:50 i finished re-writing >number again! check it out: https://termbin.com/unxr 02:55:02 Cool, ok 02:55:19 it's pretty unreadable :-p 02:59:57 Nice, my >number is more limited, it only does decimals, I have other words for other bases. 03:01:52 iirc KipIngram uses a prefix as the base for his numbers 03:02:29 he writes really short words, mine are longer 03:02:52 I use prefixes as well, but not embedded in the number, mine are separate words. 03:04:46 e.g. something like $ ffff for hex, and % 10111 for binary 03:04:54 aaah 03:05:11 they are old-school prefixes :-) 03:05:27 You could say :) 03:06:10 I don't like to complicate my intepreter or compiler 03:06:53 The outer interpreter just does decimal, anything else can be done with prefix words 03:07:15 how do you print hex addresses? 03:07:31 $. 03:07:37 ahh 03:07:40 makes sense :-) 03:07:48 : u. ( u -- ) 10 x. ; 03:07:49 : $. ( u -- ) 16 x. ; 03:07:49 : %. ( u -- ) 2 x. ; 03:08:21 good, no octal lol 03:08:44 No, but it would be trivial to add it if ever I need it 03:09:07 don't taint your system with octal :-( 03:09:27 I haven't found a need to yet 03:12:21 Currently x. can handle any base up to 39, if I ever need higher bases suech as 60 I'll need to do a minor rewrite of x. 03:15:55 Correction, I meant base 40, my DIGIT word handles digits between 0 and 39 03:16:34 there is only 36 chars! 03:16:41 0-9 and a-z 03:17:29 I use 0 .. 9, a .. ~ 03:17:47 aah 03:18:53 i looked up base64, you kow the encoding for binary in email? it would have been nice if forth handled it directly by setting BASE to 64 heh 03:19:16 unfortuntely it's not :-( but it would have been nice :-) 03:19:43 i think in base64 the letters come before the numbers 03:19:48 It's not hard to do up to base 95 03:20:05 using 7-bit ascii 03:20:23 or maybe it's base 94 03:20:30 --- quit: pierpal (Quit: Poof) 03:20:50 --- join: pierpal (~pierpal@host161-197-dynamic.245-95-r.retail.telecomitalia.it) joined #forth 03:20:51 Use everything but control characters 03:21:42 i.e. except $ 00 ... $ 1f, and $ 7f 03:21:43 there's a few encodings 03:21:57 yeah 32 to 126 03:22:12 execpt maybe space in forth 03:22:16 33 to 126 03:22:59 there you go base 94 03:23:31 oops base 95 :) 03:24:56 94 if you don't want the space character 03:32:45 unsigned decimal, hex, binary, and signed decimal cover 99.99% of my needs, I don't mind coding up something special if I ever need some unusual encoding 03:36:09 8 03:36:09 9 : >number ( a # -- u|n ) 03:36:09 a dup averts xnan over b@ ascii - <> if 10 (>unsigned) then; 03:36:09 b step 10 >unsigned dup mnn u<= averts xovf negate ; 03:36:09 c 03:36:41 This one doesn't do double-cell numbers, it's for a 64-bit system 03:38:58 i got rid of all the double number stuff except multiply add and divide um* (u u -- ud) um+ (u u -- ud) um/mod (ud u -- u u) 03:39:23 i think they are powerful enough to make bignums 03:39:52 i used them in >number to check for overflow 03:44:29 In don't have any double words in this Forth, although the scaling operators opcodes use double cell intermediate products internally 03:45:29 And I have u*hi and *hi operators 03:46:07 u*hi ( u1 u2 -- u ) 03:46:15 *hi ( n1 n2 -- n ) 03:46:34 1 03:46:34 2 u*hi High-order 64 bits of a 128 bit unsigned product. 03:46:34 3 03:46:34 4 *hi High-order 64 bits of a 128 bit signed product. 03:46:34 5 03:54:55 aah 03:56:01 c doesn't have that 03:56:48 you can do bignums in c but it's tricky.. forth is better 03:59:54 It's difficult to do 128 bit arithmetic in C portably (i.e. without using compiler specific intrinsics and such), doable but a pain 04:01:41 it's easier to do it in assembler :-p 04:01:46 forth lets you go there 04:03:33 right 04:17:05 --- quit: Zarutian (*.net *.split) 04:17:05 --- quit: MrMobius (*.net *.split) 04:17:05 --- quit: PoppaVic (*.net *.split) 04:17:05 --- quit: bluekelp_ (*.net *.split) 04:17:05 --- quit: APic (*.net *.split) 04:17:05 --- quit: jackdaniel (*.net *.split) 04:17:12 --- join: bluekelp (~bluekelp@bluekelp.com) joined #forth 04:17:32 --- join: PoppaVic (~PoppaVic@2600-6c54-7a00-1332-959f-a282-5d9d-8ad0.dhcp6.chtrptr.net) joined #forth 04:17:39 --- quit: PoppaVic (Changing host) 04:17:40 --- join: PoppaVic (~PoppaVic@unaffiliated/poppavic) joined #forth 04:17:44 So far I've managed to keep the POSIX VM I use on my Host Forth portable and compiler neutral, had to jump through many hoops, not sure it was worth the bother. 04:18:13 --- join: Zarutian (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 04:19:01 --- join: MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 04:19:22 --- quit: dys (Ping timeout: 246 seconds) 04:22:12 --- join: jackdaniel (~jackdanie@hellsgate.pl) joined #forth 04:22:32 --- join: APic (apic@apic.name) joined #forth 05:25:10 --- join: proteusguy (~proteusgu@49.145.102.106) joined #forth 05:25:10 --- mode: ChanServ set +v proteusguy 05:25:42 --- quit: proteusguy (Remote host closed the connection) 05:27:06 --- join: proteusguy (~proteusgu@49.145.102.106) joined #forth 05:27:06 --- mode: ChanServ set +v proteusguy 05:34:33 https://prog21.dadgum.com/8.html 05:35:26 --- join: dys (~dys@tmo-121-79.customers.d1-online.com) joined #forth 05:40:27 that was a cool article on forth 05:40:31 short and sweet 05:40:36 dys: you missed this 05:40:38 https://prog21.dadgum.com/8.html 06:02:02 Cool 06:02:24 his odd? doesn't return a flag though 06:03:39 I shouldn't nitpick 06:04:27 :) 06:51:59 --- quit: dys (Ping timeout: 255 seconds) 06:57:38 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 07:29:14 --- quit: rdrop-exit (Quit: Lost terminal) 08:40:56 Hey guys. Sixels. What is the underlying console technology that supports that? 08:41:33 I just read that this or that terminal emulation "supports sixels," but it seems there has to be an underlying "system level capability" that makes it possible. 08:42:08 /dev/fb? 08:42:15 framebuffer? 08:51:10 KipIngram: IIRC it's due to terminal emulators emulating older systems like the VT340 08:51:39 KipIngram: also, I recently came across https://github.com/csdvrx/sixel-gnuplot 08:52:29 Yeah, but what is the terminal emulator DOING? 08:52:44 What is it in Linux that lets us have bitmap control over a console screen? 08:53:06 Or is the emulator not treating it as a console screen then, but rather as a graphics screen? 08:53:11 it's just a character set with every permutation of pixels, isn't it? 08:53:24 Like, does it work in the raw Linux terminal devices, as opposed to emulators running under X? 08:54:37 I'm talking about those terminals you can get with that weird ctrl-alt-Fkey pattern, or whatever it is. 08:54:44 Those terminals are "different." 08:54:58 For that you'd have to look at the source 08:55:35 zy]x[yz: That's an awfully large character set. 08:55:51 Say your chars are 8x12; that's 96. 2^96 possibilities? 08:56:38 Seems like instead you'd do a row at the time? 08:56:51 Then your 256 charcters could fully specify that 8-bit row. 08:57:17 Though that doesn't get colors. 08:57:24 KipIngram: I just downloaded the xterm source code and got this https://paste.debian.net/1075316/ 08:57:28 When I searched for sixel 08:57:52 Oh, interesting. 08:58:20 Ah so it's a C file 08:59:06 KipIngram: https://dpaste.de/wK9i/raw 08:59:38 +KipIngram> zy]x[yz: That's an awfully large character set. 08:59:43 they could be generated on the fly 08:59:58 but yeah from the wikipedia description, it sounds like that's not what it is afterall 09:00:13 Ugh, Forth has ruined me. 09:00:35 I'm looking at that last link siraben posted - all the code just spilling across screen after screen... 09:00:43 C is such a... "sprawling" language. 09:06:18 c is a good language 09:06:40 I know - not really "criticizing." It just has a TOTALLY different look. 09:07:12 Heh. Me to C: "It's not you - it's me." 09:07:27 --- quit: cantstanya (Remote host closed the connection) 09:11:09 --- join: cantstanya (~chatting@gateway/tor-sasl/cantstanya) joined #forth 09:17:03 --- join: dave69 (~dave0@223.072.dsl.syd.iprimus.net.au) joined #forth 09:17:05 --- quit: dave9 (Ping timeout: 250 seconds) 09:17:31 --- quit: dave0 (Ping timeout: 250 seconds) 09:19:30 --- nick: dave69 -> dave0 09:21:58 c just clicks for me. the way things are represented best fit my mental model of memory and program flow. i also like the structure of defining header files as both interface definitions and documentation. if you do it right, headers are almost like shadow blocks in forth 09:25:51 I think that's exactly what's happening with me here. I've been doing mostly Forth programming of late, and it's changing how I "think." 09:28:09 I'm happy about it - I feel like I'm becoming a better Forth programmer. 09:33:13 Forth to me is portable assembly 09:33:30 I think it's much more than assembly, though. 09:33:43 It can do assembly caliber work, definitely. 09:33:48 Is there any equivalent to Forth? A language that is so minimal, that the entire parser and compiler can be implemented in but a couple dozen bytes 09:33:55 And interactive too 09:34:04 I'm not aware of any. 09:34:13 It's a very unique tool. 09:34:34 I have tried to think of alternative ideas but Chuck got them all right 09:34:45 Forth has a powerful means of abstraction; the word 09:35:07 Which can call other words, and whether they're written in assembly or built from other words, it doesn't matter to the caller 09:35:10 I'm not in favor of calling it an assembler, though, because to me an "assembler" is something that gives you TOTAL CONTROL over the generated code. The code is exactly what you call it out to be, with no translation or whatever. 09:35:18 You can have an assembler in Forth that does that. 09:35:23 But "Forth itself" does not do that. 09:35:37 Right, Forth is not assembly 09:35:43 You are calling out abstract operations, and the code that is generated (well, it isn't even CODE for the most part) is not directly under your control. 09:35:56 Exactly. 09:36:14 e.g. executing : does stuff "outside our control" 09:36:30 Well, the functionality is under our control. 09:36:33 I like how one can learn it without needing to know exactly what : does until the time comes to implement it 09:36:39 I sure didn't when I first learned Forth. 09:36:40 The bit patterns laid down in memory are implementation dependent, though. 09:36:52 Nor did I know how DO...LOOP works, etc. 09:36:53 Yes. 09:37:22 It's pretty much completely free of needing to know any "syntax structural" stuff. 09:37:38 There's a bit of that - if you want to make a definition you need to know that a definition is 09:37:44 : ...code... ; 09:37:46 And that is a structure. 09:37:50 But it's minimal. 09:37:54 On a side note: I'm reading the textbook "Compiling with Continuations", and it takes an awful lot of program transformations and what have you until you can take a Standard ML program and convert it to assembly. 09:38:16 although seeing how closures and the register allocation algorithm worked was enlightening 09:39:40 KipIngram: and again, I'm reminded that a lot of Forth words are "pure" in the sense that they have a predicatable behavior and don't perform some "side effect" like changing memory or otherwise 09:40:22 Well, except the ones that are SUPPOSED to. 09:40:37 To me changing memory IS a predictable effect. 09:40:48 I mean changing memory when you didn't plan to 09:40:51 When I run !, I am saying "chaing THAT memory to THIS." 09:40:52 Right. 09:40:56 I agree. 09:41:06 Also the ! @ absolutely cleared up pointers for me 09:41:15 C's syntax of & and * was confusing 09:42:19 KipIngram: Forth has the ability to play around with control structures and do plenty of meta-progrmaming 09:42:23 programming* 09:42:37 Define words that define words that define words that define.... 09:42:42 Forth just makes pointers explicit, that's all. 09:42:55 A variable name "is" the *address*, not the contents. 09:42:58 fuck.ME.. OK, well - the COLD test now gets control again. Man, that was finagling. 09:42:59 “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” 09:43:05 * siraben sent a long message: < https://matrix.org/_matrix/media/v1/download/matrix.org/MpVtklVzQYyLAdpeJBjfxOZZ > 09:43:13 Basically Forth's philosophy in a nutshell 09:44:06 That didn't open for me. I just got a signature but nothing above it. 09:44:54 Hm? 09:44:59 Your link. 09:45:05 I didn't send a link? 09:45:09 Oh which link 09:45:20 "siraben sent a long message: ..." 09:45:30 It's just a quote 09:45:34 But I agree with your quote just before that. 09:45:42 It's HARD to write a good Forth solution. 09:45:51 Takes lots of work and thought. 09:45:54 Ah, the message after was just "C. A. R. Hoare" 09:46:08 Yeah, ok. 09:46:10 I saw that. 09:46:34 I'm working through "Introduction to Algorithms" and will see if I can do it in Forth 09:46:38 Or better yet, assembly. 09:47:06 Forth already has a linked list, but implementing merge sort, heaps and so on should be fun 09:47:18 Plus there's the BEGIN-STRUCTURE ... END-STRUCTURE words 09:47:58 Well, a good practice problem is implemnenting a stand-alone doubly linked list in Forth. 09:48:06 There IS a clean tight solution, but it is hard to find. 09:48:11 Why a doubly-linked list? 09:48:15 I know because I've had to search for it several times over the years. 09:48:16 --- join: dys (~dys@tmo-101-122.customers.d1-online.com) joined #forth 09:48:20 What do you mean by stand-alone? 09:48:39 It just adds enough "extra" to make it slightly out of reach of Forth's standard stack operators unless you really get it structured right. 09:48:52 But when you do get it right, it's a nice "AHHHHHHH...." sensation. 09:49:22 Hm. I'd be interested in seeing the actual solutin 09:49:27 solution* 09:50:15 I don't know if I have it around right now - I had doubly linked listts in my heap page management (the ones that the dictionary lives in were doubly linked) but I simplified that to singly linked later on. 09:50:26 All those beneifts of Forth, but it's a language designed for simpler times, these days tasks outside of embedded systems are much more involved and require extra fluff in the language to make it work 09:50:42 zy]x[yz was working on some problem a number of months ago, and I offered some code to him that I think he then made even better. 09:50:48 so it's floating around in the logs somewhere 09:50:52 I'm thinking of implementing a dynamic memory allocator and garbage collector in Forth 09:50:53 You might search the log for LINK 09:51:07 Yeah, I'll be doing that at some point. 09:51:14 Actually, a better challenge would be to make a parser in Forth, but in a way that it looks like BNF 09:51:15 I have one now, but it's very simple and works with a fixed page size. 09:51:24 So it gets to dodge a lot of the stuff that's normally required. 09:51:44 https://www.bradrodriguez.com/papers/bnfparse.htm 09:52:00 If you look at the examples at the end, it really does look like BNF 09:52:02 It allocates from the bottom of free RAM up; I imagine eventually I'll have a "real" allocator that allocates from the top of free RAM down. 09:52:08 but Forth executes it perfectly 09:53:17 I have a number of singly linked list things in play in my system - singly linked is pretty straightforward. 09:54:03 I'm working on one today, in fact - a "rectangle manager." 09:54:11 Imagine you have a stack of overlapping windows on your screen. 09:54:16 Start with just the bottom one. 09:54:19 That's a rectangle. 09:54:27 You can put it in a list, and there will be one rectangle in the list. 09:54:35 Now imagine dropping the next one up on top of it. 09:54:43 Maybe they don't overlap, so now you have two rectangles in the list. 09:54:57 Or maybe you totally covered the first one up, so you delete it but have added the new one, so you still have one. 09:55:06 Or, maybe the new one covers a corner of the old one. 09:55:23 Now you need two rectangles to represent the visible part of the old one, so you wind up with three rectangles. 09:55:49 Anyway, you might need as many as four rectangles to represent the original one, if the new rectangle is smaller and totally within the old one. 09:56:12 The idea is to work one by one up the stack of windows, until finally you add the topmost one, which will just be a single rectangle in the list. 09:56:23 Interesting idea 09:56:29 What you wind up with is a list of rectangles that define all of the visible stuff on the screen, with the covered stuff totally removed. 09:56:45 Now that will get fed into rdop-exit's screen refresher. 09:57:03 I was recently looking at the demos of the Xerox Alto and thought, "what if they used a Forth-like model instead"? 09:58:06 My Forth-based OS doesn't need a WM at the moment, but I will need to think of a good abstraction for drawing menus and so on 09:58:47 I'm at that point now. I haven't needed one, but to do all the stuff I yet have planned I do. 09:59:05 Processes won't necessarily have to use it, but I want them to have the option of doing so. 09:59:23 Right now my output just writes directly to the screen. 09:59:51 I want to move to a model where process output manipulates buffers owned by that process, and those buffers, or parts of them, may or may not be visible on the screen. 10:00:35 Each of these rectangles will identify the underlying buffer holding the data, so this whole thing will be able to pull data from all over onto the screen in appropriate spots. 10:00:51 Sounds like the Smalltalk philosophy of things 10:00:54 A "window" will basically just be a viewport into a memory range. 10:01:00 Processes commmunicating to each otehr 10:01:15 Oh, well, that's separate, but yes - the processes will be able to talk to one another. 10:01:20 Probably using something like msgpack streams. 10:01:27 Flow-based programming. 10:01:47 What about in the case of failures? 10:01:58 I was headed this direction instinctively, but I believe it was zy]x[yz that put me onto the formal idea of FBP. 10:02:15 I like Forth its simplicity, but IMO when building complex systems there is a problem of dealing with failures 10:02:49 Yeah - my error recovery system is inherently "single process" right now. It's a damn sledge hammer - there's very little that one process can do, in its own space, that will beat it. But there are definitely going to be failure modes involving communicating processes that's not able to cope with. 10:02:56 On embedded systems like my calculator it usually means a crash happens and I have to take out the batteries, and so on 10:03:05 I don't know yet if I'll try to extend it, or just throw up my hands and say "Start over, dude." 10:03:39 What I mostly wanted from it, though, was just to not have stupid typos I make ruin all the progress I had made on something, and it accomplishes that VERY effectively. 10:03:49 Then again, if entire operating systems have been built out of completely unsafe languages like C, then it is possible in Forth 10:04:09 Forth is definitely not a "safe" language. 10:04:19 You can commit hari kari in all kinds of ways. 10:04:30 Mmmhm 10:04:48 as long as it crashes with a report/log, and restarts - it's no worse than anything else ;-) 10:04:48 But a language that gives you the sort of full access to everything Forth gives you pretty much would have to be like that. 10:05:23 My error recovery restores the running process to its complete state that it was in before you started typing the line of code that had the error. 10:05:36 The stacks, the vocabulary structures, everything. 10:05:39 Every time I sat down to really think through what a language other than Forth would look like (but still be super easy to implement, have a small parser/compiler etc.), I get nothing out 10:05:44 KipIngram: that's a good idea 10:05:57 Hopefully that recovers as much as possible 10:06:14 And since I have a command history that lives outside of the process memory space, I can just hit ctrl-K to recover my bad line, edit it to fix it, and hit enter. 10:06:18 It's a nice smooth operating flow. 10:06:33 It recovers EVERYTHING that's owned by that process 10:06:39 I snapshot the entire thing. 10:06:49 Really, a "safe" Forth could make operations like ! @ and so on check the memory accesses and references 10:06:57 And checking EXECUTE 10:07:03 yes, but that would clobber your performance. 10:07:13 Since that check would have to be IN the primitives. 10:07:15 Then have unsafe versions like !! and @@ 10:07:22 Usually it's the Forth INTERPRETER that does your error checking. 10:07:32 Once you launche a compiled word, it runs through without any checks. 10:07:43 * PoppaVic sighs 10:07:52 RIght, it's super easy to catch undefined word errors 10:08:00 PoppaVic, how come? 10:08:03 Or stack imbalances, and so on. 10:08:22 you could simply write one version with the extra-overhead for checking - forth I mean; and the second version for "shit works, rape the ape!" 10:08:45 Oh, hmmm. I just thought of something my error recovery does not do, that I might look into adding. 10:08:54 My Forth puts the dictionary in a string of heap pages. 10:09:00 It can grow to new ones as needed. 10:10:05 I tend to adhere to the philosophy of "obviously no errors" at this point 10:10:13 If, during execution of an error line, I grew to a new heap page, I don't think it releases that page on recovery. 10:10:21 99% of the time one's Forth code will only never be run by oneself, 10:10:22 Now, the process no longer knows about it - process integrity is fine. 10:10:27 But that's a memory leak. 10:11:01 siraben: And in the other 1% it will drive some critical infrastructure and has to be perfect ;þ 10:11:12 What I ought to do is compare the error time string to the shapshotted string, and release "extra pages." 10:11:15 john_cephalopoda: like a spacecraft 10:11:16 Simple. 10:11:53 siraben: For example. Don't want to sink another one into the mars atmosphere :þ 10:11:58 I really want to write a interpreter for a high level language in Forth eventually, it will be the ultimate way to bridge levels 10:12:14 :-) Forth is a high level language. 10:12:25 It's extensible to any level you want. 10:12:36 A compiler is much harder, that's why you write it in the language you're implementing, and use a interpter to bootstrap the whole thing 10:12:45 It breaks all the "categorization rules." 10:12:48 Right, so it's all about finding the right abstractions. 10:13:22 I'm planning to implement "Octave" in Forth. 10:13:22 It's time for me to pick up x86 10:13:29 Z80 is really limited 10:13:36 Not exactly - it will be a postfix type thing similar to Octave. 10:13:39 GNU Octave? 10:13:40 Wow 10:13:43 But with all the same numerical capabilities. 10:13:58 Yeah, I often enjoy tinkering with scientific problems. 10:14:00 What about floating point, matrices etc? 10:14:07 Octave is a huge program 10:14:08 Yes, yes, and yes. 10:14:40 I haven't started yet, so I may have no clue what I'm diving into, but basic support for those things I already know exactly how I'll do. 10:15:21 That's what's on my mind when I talk about "type stacks" and so on. 10:15:44 What is this thing on top of the stack? A scalar? A vector? A matrix? Etc. 10:15:52 That affects what + or * or whatever MEANS. 10:16:25 If the top two stack items are vectors, then + means add vectors. 10:16:27 And so on. 10:16:56 I want to see if I can add graceful tensor support. 10:17:23 --- join: rdrop-exit (~markwilli@112.201.169.15) joined #forth 10:17:25 A tensor is generally just a matrix, but it's "connected" to a coordinate system. The component values and the coordinate system together make it represent something PHYSICAL. 10:17:43 If you changed to another coordinate system, the numerical component values will change, but it still represents exactly the same thing. 10:17:57 Same velocity, or force, or whatever. 10:18:32 I see. 10:18:33 + would be overloaded 10:19:07 IMO Forth is best used as a intermediate language to bootstrap a higher level interpreter to bootstrap its own compiler 10:19:34 I think so too siraben, but i haven't actually seen it done often 10:19:38 Obviously, it's difficult to implement a Lisp interpreter in assembly, but not so mcuh in Forth 10:19:44 I have yet to see a ML interpreter in Forth though 10:19:59 But I'd still call all those derivatives Forth. 10:19:59 well it would be fine to implement the ML in the lisp you made wouldn't it? 10:20:07 Right 10:20:21 https://bootstrapping.miraheze.org/wiki/Forth i collect the ones i found here 10:20:26 but if you can add it to please do 10:20:26 Because if I augment the Lisp (probably R5RS Scheme) with strings, it's done 10:20:48 Wow, good list 10:21:27 Yeah it's an ultimate goal, if I can pull it off, I can't imagine what I'll feel 10:21:46 I like the idea of building my own stack of tools 10:21:54 but it's a lot of work... 10:22:26 It really seems super doable in Forth 10:22:45 Once you have a CORRECT lisp parser, the interpreter is trivial 10:23:06 i don't think it's trivial 10:23:17 Easy, at least 10:23:28 Scheme isn't a hard language to interpreter 10:23:32 interpret* 10:23:39 yeah it's not too bad 10:23:56 but there's a few pieces that need implemented, like data structures to represent objects and closuers 10:23:57 The only issue is the hygenic macro system 10:24:05 it's ok to not implement hygienic macros 10:24:10 I want a macro system to be able to implement monadic parsing to boostrap the ML compiler 10:24:17 I don't know Lisp, but that's the impression I've had. That it existed as a set of ideas and algorithms first, sort of used for academic discusisons, and then one day someone said "So, let's just code *this*..." And the first Lisp was born. 10:24:21 because once you have a rubbishy basic lisp, you can implement a more serious lisp in that 10:24:28 KipIngram: Lisp is easy to learn! 10:24:39 I'm put off by all those parentheses. 10:24:58 Besides... I have Forth. 10:25:02 Eh, it really is just a syntactic thing 10:25:03 Like Forth, it makes parsing unambigious 10:25:07 It's like you're writing in the AST all the time 10:25:26 rain1: oh yeah, I forget that Lisp can bootstrap itself 10:25:59 So, it would look like Assembly -> Forth -> Intermediate Scheme -> Scheme with macros -> ML compiler 10:26:12 It's like having Eliza Dushku and being offered Alyssa Milano. Though, when I put it THAT way... ;-) 10:26:36 I actually already have a Scheme assembler, so if I retarget the x86, then write a Lisp in Forth and bootstrap itself from there, I can self-host! 10:26:52 I guess I'm just slightly more monagamous when it comes to languages... 10:26:52 I have implemented a basic scheme in C which can build my self hosted scheme compiler 10:26:54 It's convoluted but the whole point is to treat Forth as an intermediate 10:27:01 rain1: do you have a repo? 10:27:05 That sounds fascinating 10:27:18 yeah https://github.com/rain-1/single_cream 10:27:23 Oh yeah that 10:27:37 I saw you on #scheme 10:29:09 it could be interesting to use forth as the compile target for a scheme compiler 10:31:12 So when I have a word that's a loop (ends in an unconditional jump) I typically try to remember to close it with [ instead of ;. All my ; does (tail optimization aside) is compile (;) and set STATE to 0. But if the preceeding thing is a jump, I don't need the (;). 10:31:24 I really should code that into ; - it would be an easy check. 10:31:37 Just another case of "tail optimization." 10:31:57 Then I wouldn't do anything different - ; would just do the right th ing. 10:33:21 rain1: definitely possible. I've been working on a Haskell implementation of the R5RS spec http://github.com/siraben/r5rs-denot 10:33:29 And you only need a handful of primitives 10:34:01 rain1: hygenic macros https://prl.ccs.neu.edu/img/kffd-tr-1986.pdf 10:34:33 KipIngram: tail optimization like that? 10:34:43 I've only ever seen tail optimization as a final phase after CPS-conversion 10:34:48 Well, that's not what we generally refer to with that phrase, but it's related. 10:34:57 il have a look at this paper but i don't think it's the only way to do hygienic macros 10:35:26 "tail optimization" really means to look and see if the immediately preceeding thing was a Forth word call, and if so change it to a jump. 10:35:52 I'm just saying that if what came before ALREADY WAS a jump, then we similarly don't need the (;). 10:36:06 No editing of the prior code would be required, but it's another reason to suppress the (;). 10:36:26 There's tail call elimination, and there's avoiding a superfluous "ret" 10:37:02 Yes, in both cases you're avoiding a superfluous ret. In the one case you'd need to create the jump - in the other case it's already there. 10:37:38 Not saying they're exactly the same - just that they're related ideas. 10:37:52 In the second case don't lay down the ret if it's superfluous 10:38:00 And that ; is in position to do both of them. 10:38:05 but yeah, I'm convinced that Forth is the best intermediate language to bootstrap high level languges from assembler or even machine code 10:38:13 Right - that's EXACTLY what I'm saying. 10:38:32 Right now I do, so I have to manually remember to use [ instead of ; if I want to avoid the (;). I should modify my ; to do it for me. 10:38:55 siraben: it often can BE the machine code as in dual stack machines 10:39:12 "assembler" and "machine code" are pretty much the same thing. 10:39:23 Assembler is just a human readable form of machine code. 10:39:26 Zarutian: precisely 10:39:31 KipIngram: right 10:39:45 A jump is not the only instruction that can cause a ret to be superflous, and it can also happen in other places then the final ; 10:40:04 KipIngram: nope, as you can have pretty good macro assemblers but I get your point. Many that just do conversion from memnomics and lables to binary numbers suffice 10:40:08 * than the final ; 10:40:15 Yes, it can happen with ;, too. 10:40:21 My nomenclature. 10:40:36 But when I say ; I really mean ;, - my ; just runs ;, and terminates compilation. 10:40:43 All the smarts are in ;, 10:40:44 With raising exceptions as well 10:40:58 True - afer ERR 10:41:16 That doesn't happen in many places, though, so I'm not as interested in it. 10:42:30 You have to check your instruction set for those instructions that "discharge" a potential ret 10:42:55 Well, you have to do whatever you want. Often I grab the low hanging fruit and am happy. 10:43:06 We don't have to be perfectionist about every single thing we ever do. 10:43:20 If it's your own instruction set you can group them together so that they have contiguous opcodes 10:43:35 I don't have opcodes - I have primitive addresses. 10:43:36 Easier to check if a ret is discharged 10:43:45 So yes, I could do that and then use a range check. 10:44:03 But is the payoff worth the effort? Maybe, maybe not. 10:44:44 Not much effort involved overall, but it is a "micro" space optimization 10:44:57 This particular one has bugged me - I'll come across some code I've written where I used ; and should have used [ - I change it but am annoyed. 10:45:06 So automating that brings me a benefit that's tangible to me. 10:45:23 Plus the [ just doesn't LOOK as nice - it interrupts the visual aesthetic of the source. 10:45:35 It's just as simple as tail call elimination 10:45:47 I don't think I've claimed otherwise. 10:45:52 I've just expressed disinterest. 10:46:02 I didn't claim you claimed otherwise :) 10:48:35 I agree with you that ending a word with [ is best avoided, there is usually some housekeeping work that can be rolled in to ; 10:49:15 and similar words such as ;inline 10:49:44 I would only bother with tail call optimization at the Scheme → Scheme + Macro level 10:49:54 Forth is intermediate 10:52:56 It need not be 10:54:30 BTW KipIngram have you ever looked into the design of Oberon's UI? 10:55:34 As detailed in the original Project Oberon book. 10:56:09 Oberon... Wasn't that the OS in Modula? 10:56:25 Descendent of Modula, also by Wirth 10:57:01 Is it about the UI where every menu entry is actually an executable command that can be edited? 10:57:32 There are several Oberon iterations and that feature is only available in the first one. I found it very inspiring. 10:57:49 Just being able to edit your UI to your liking... 10:58:14 It had a interesting UI design/architecture that was much leaner than systems such as Smalltalk 10:58:41 The original was coded by two people in a year or so IIRC 11:00:21 --- join: cp- (~cp@b157153.ppp.asahi-net.or.jp) joined #forth 11:03:06 --- quit: cp- (Client Quit) 11:05:03 The original Oberon book is worth a read if you're trying to make a sophisticated but relatively lean text oriented GUI 11:05:36 from scratch 11:06:28 --- join: cp- (~cp@b157153.ppp.asahi-net.or.jp) joined #forth 11:06:50 I haven't read the later docs 11:06:52 https://en.wikipedia.org/wiki/Oberon_(operating_system) 11:06:59 siraben: I'd implement TCO at compile time using a word defined at edit time - like this example in RETRO 11:07:14 :me d:last compile:jump ; immediate 11:07:31 crc's implementation of KipIngram's `me` 11:08:08 Ok, that was simple enough - done. 11:08:41 Now : test swap ; has (;) at the end, but : test swap me ; does not - it has -8 at the end, the jump offset. 11:09:04 also KipIngram thanks for suggesting `me` - I use it far more than any looping control structure 11:09:30 :-) I've enjoyed it quite a lot. 11:09:33 for counted loops I use the word 0; and manage the counter myself 11:09:50 I have conditional versions too - 0=me 0<>me etc. 11:10:29 Yes, I don't know if I'll ever add a counted loop structure - I do the same as you. 11:10:32 Maybe I'm unnecessarily optimising but quotations in retro do have overhead and so avoiding them in a loop probably saves cycles 11:10:47 your guess is as good as mine kekeke 11:11:12 No, my guess about retro would NOT be as good as yours. :-) 11:11:17 WilhelmVonWeiner: ah, that makes sense 11:11:33 But how much does TCO help anyway? 11:11:39 For Forth 11:12:24 saves popping off the top of the return stack 1000x times 11:12:37 overflowing it is still possible after all 11:13:34 Siraben: It helps the same as in any other language, jump vs call+ret 11:14:18 yeah I was thinking 1 instruction vs 2 or 3 11:14:40 or hell some kind of crazy stack frame manic hell-dimension 11:15:03 --- join: dave9 (~dave@223.072.dsl.syd.iprimus.net.au) joined #forth 11:15:08 I am not great on PLT so I don't know much about that as of yet. 11:15:31 --- quit: cp- (Quit: WeeChat 1.9.1) 11:15:39 "crazy stack frame manic hell-dimension" :)) love it 11:18:18 rdrop-exit: I see. 11:19:15 Instead of |call|addr|ret| you have |jmp|addr| 11:19:35 --- quit: dys (Ping timeout: 245 seconds) 11:20:53 WilhelmVonWeiner: repeat/again loops use jumps, so avoid call/return overhead (in retro) 11:22:18 --- join: cp- (~cp@b157153.ppp.asahi-net.or.jp) joined #forth 11:24:38 To some extent me doesn't really do a whole lot that using the name and getting tail optimization wouldn't also do. 11:24:49 But the conditional variations on the theme do bring new capability. 11:25:16 And me is shorter than most names, so it save a byte or two of source space here and there. 11:27:19 Oh, actually, ERR ; gets tail optimized in my system, since ERR is a dfinition. So I don't get a (;) in that case. 11:27:28 That one is a bit more subtle - you actually don't need EITHER. 11:27:42 You could CALL ERR, and still not use the (;), since you're never coming back. 11:28:40 That would offer some advantages - the call location would then be on the return stack for analysis if I did any. 11:28:58 Jump to it and you have no idea where you came from. 11:32:21 I think the current standard uses RECURSE for your ME, in my Forth I name it RECUR 11:35:33 RECUR is basically a jump to MYSELF which is the code address of the definition 11:44:58 More or less, yes. I use "the most recently defined name," which is pretty much the same thing. I think it's fair to say that in 11:45:12 : A ...code A... : B ...code B... ; 11:45:19 That code B is the "definition of B." 11:45:26 kIt happens to also be included in A, but... 11:45:37 In the EXECUTION of A. 11:46:00 Almost any tool you had that told you "what word a spot was in" would report B for the stuff in ...code B... 11:47:24 --- quit: cp- (Quit: Disappeared in a puff of smoke) 11:47:29 --- quit: gravicappa (Ping timeout: 245 seconds) 11:47:44 --- join: cp- (~cp@b157153.ppp.asahi-net.or.jp) joined #forth 11:48:25 On second thought the standard's RECURSE isn't explicit tail recursion as in our case. 11:50:07 Same here, the code address in question is that of the word "currently under construction" 12:05:29 --- quit: rdrop-exit (Quit: Lost terminal) 12:07:10 --- quit: dave0 (Quit: dave's not here) 12:07:22 --- quit: nighty- (Quit: Disappears in a puff of smoke) 12:17:52 --- quit: pierpal (Remote host closed the connection) 12:54:53 --- join: gravicappa (~gravicapp@h109-187-213-103.dyn.bashtel.ru) joined #forth 13:30:37 --- quit: gravicappa (Ping timeout: 246 seconds) 14:05:22 rdrop-exit: Since you have this scheme for rendering all 256 byte values as a displayable character, what are you doing with the attribute portion of your storage array? 14:06:07 Is that to make "normal printable characters" have controllable attributes? 14:06:26 So it's an *additional* way of activating attributes? 14:06:55 I take it that when you're interested in your "binary" display you wouldn't *also* drive attributes through that mechanism, right? 14:15:30 That's how I'm leaning right now. In fact, I'd "activate" the "binary view" by having null in the attribute buffer pointer of my window structure. 16:00:36 --- join: wa5qjh (~quassel@110.54.239.163) joined #forth 16:00:36 --- quit: wa5qjh (Changing host) 16:00:36 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 16:07:53 --- quit: wa5qjh (Remote host closed the connection) 16:12:01 --- quit: proteusguy (Remote host closed the connection) 16:23:38 --- join: wa5qjh (~quassel@110.54.239.163) joined #forth 16:23:38 --- quit: wa5qjh (Changing host) 16:23:38 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 16:35:24 --- quit: wa5qjh (Remote host closed the connection) 16:38:04 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 16:41:14 --- quit: wa5qjh (Remote host closed the connection) 16:48:15 --- join: wa5qjh (~quassel@110.54.239.163) joined #forth 16:48:15 --- quit: wa5qjh (Changing host) 16:48:15 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 16:49:39 --- quit: wa5qjh (Remote host closed the connection) 17:22:06 --- quit: john_cephalopoda (Ping timeout: 250 seconds) 17:36:23 --- join: john_cephalopoda (~john@unaffiliated/john-cephalopoda/x-6407167) joined #forth 17:52:05 --- join: rdrop-exit (~markwilli@112.201.169.15) joined #forth 17:56:04 Good morning Forthwrights :) 18:07:46 KipIngram: All three display panes use DEPICT at the moment, that can easily change if I ever the need to use the BOLDNESS and UNDERLINING bits for other purposes. 18:12:09 For the moment foreground and background colors have been sufficient for the rest of my needs. 18:24:09 --- join: dys (~dys@tmo-101-122.customers.d1-online.com) joined #forth 18:29:40 1 18:29:40 2 depict Translate a byte to its character-cell depiction. 18:29:40 3 18:29:48 1 18:29:49 2 : depict ( b -- cc ) 18:29:49 3 dup >ascii display? ?; ~ctrl boldness% or ; 18:29:49 4 18:40:50 Ok. So in a lot of cases you wouldn't even need the attribute bytes. Do you keep your data and attributes together, alternating? 18:41:05 I'm looking to put them separate, so I can not have the attributes if so desired and save RAM. 18:41:33 Obviously the system buffer that actually controls the screen would need attributes. 18:41:38 Probably at least. 18:41:39 --- quit: dys (Ping timeout: 245 seconds) 18:41:45 I'm talking about the application side buffers. 18:43:17 They're parallel arrays, they can't be interleaved as that would require copying data 18:43:49 Ok. Parallel just makes more sense too. 18:44:28 For example when displaying a block the data array for that pane is the block itself 18:45:00 Oh, yes, of course - you said that. So I already knew that answer. 18:46:12 The character cell cache is interleaved though, 16 bits per character cell 18:46:24 (for the whole screen) 18:47:32 It makes sense to interleave in that case as you're always walking through it from sequentially 18:49:47 I see. Yes. I'm going to be switching processes, though, which will me major, near-full-screen updates. I had thought it might make sense to 1) copy the process data to the system data, 2) fill the system attribute with "plain", 3) print the whole system data string in one shot, and THEN 4) run the diffing process to pick up what we missed. 18:50:04 I don't know - it might not be needed, but it seemed like a potential time saver for those major changes. 18:50:10 But you don't switch processes, I guess. 18:50:32 In that case I'd want the system data and attributes separate, so I could print the whole thing as a string. 18:51:35 I did some timing tests the other night - my system can TYPE a full-screen string in about 800 microseconds. 18:53:19 I may go back to working on meta-compilation. It occurred to me that in some ways that's basically a "re-write," though a fairly fast one since it's harvesting a LOT of stuff that came from before. But I could just work this new display stuff into that re-write, rather than try to transition my current system to it. 18:53:25 Not sure yet - I'm interested in both of those things. 18:55:32 I would definitely want a naked, simple screen FIRST. It's simple, cheap, usable, sells. 18:56:53 The naked simple screen is always there, that's just writing to the tty directly. 18:58:06 that's my point- although I also meant his editor 18:58:38 I see 18:58:40 Well, that's a good point. 18:59:24 And actually when I first had that thought it was earlier in my thinking process, when I didn't have this all as clearly in mind, and I was imagining that each process would have a full-size screen buffer. 18:59:41 I hadn't yet caught on to the point that this is referencing the process memory regions of interest DIRECTLY. 18:59:51 The cool factor went up quite a bit when I clicked to that. 19:00:28 I was viewing this all as primarily a way to get to "per process screens," and I envisioned windowing to come in the next layer up. 19:00:36 But this is much more efficient that that would be. 19:01:43 You don't do any overlapping, do you? 19:03:04 I was thinking this weekend about how to add that. It would just be an optional layer that went between the rest of the process side and the screen rendering. 19:03:29 It would work from bottom to top of a stack of potentially overlapping windows, and produce a set of non-overlapping records that you'd then do the refresh on. 19:03:57 I think I see how to do it just about as fast as possible, but I don't have a feel for whether or not it would have a nasty performance impact. 19:04:04 I may just have to try it. 19:04:35 But it's entirely optional - that list of non-overlapping "things" that it produces will look just like a list of original "things." It just "slips in." 19:07:16 There's a book that covers GUI code for embedded systems (in C) 19:07:26 Let me dig it up, just a sec 19:09:31 Front Panel by Niall D. Murphy 19:10:09 Oh neat. 19:11:08 Nifty. 19:11:16 Just picked up a used copy on Amazon for $4. 19:11:41 Cool 19:11:41 KipIngram: https://www.amazon.com/Front-Panel-Designing-Software-Interfaces/dp/0879305282 - d'oh, you got there faster ;-) 19:11:55 * KipIngram is fast... 19:12:27 otoh, I am looking at the reviews ;-> 19:12:33 $4. 19:12:40 It can suck and I won't be upset. 19:12:45 Besides, it just got recommended here. 19:12:48 if it sucks, you can start a fire 19:12:49 The reviews on Amazon aren't stellar, but I think it fits your needs. 19:12:55 Maybe other people are unappreciative. 19:13:00 yup 19:13:10 I like grist for the idea mill. 19:13:22 And I'm not at all ashamed of using good ideas from other sources. 19:13:29 I have enough of my own to feel secure. 19:13:46 Now, most of those are already out there too - it's just that I didn't GET THEM from there. 19:13:48 :-) 19:14:01 Right attitude :) 19:14:07 It's hard to be the very first person to think of something. 19:14:32 Those monkeys have been pounding those typewriters for a LONG time. 19:14:37 And there are a lot of 'em. 19:20:53 Attribute buffers for a pane don't need to be as low level as those of the display cache 19:21:20 Let me rephrase 19:22:19 The attribute buffer for a pane doesn't need to be as low level as the attributes of the display cache. 19:24:43 That's clear. 19:26:01 They can be application level attributes, that get mapped to display attributes at refresh time. 19:26:20 (for example). 19:57:44 I prefer tiled interfaces to overlapping windows, which is one of the resons I found Oberon worthy of study. 19:57:59 * reasons 19:58:37 Yeah, I am happy to see that there is a "path" to overlapping windows that looks pretty feasible, but a good tiled interface is a really nice thing. :-) 19:59:14 I mean, OBVIOUSLY if you have part of a window covered up you're not interested at this moment in that window, so why are you looking at ANY of it? 20:00:00 One could argue you want it to be visible so you can click on it (if you were in a graphical system), but I'd argue back that there should be a better way to navigate windows than having to reach over to the mouse. 20:00:04 A keystroke sequence. 20:00:16 And the keystroke sequence would win the timing race. 20:00:23 Oberon also shares some attributes with Forth in that it is a combination of OS, language, and UI. 20:00:36 I'm unfamiliar - I'll have to check it out. 20:00:55 It's by Wirth the guy who did Pascal. 20:01:02 Oh, ok. 20:01:11 I'm the right age for Pascal to have been a big deal for me. 20:01:16 https://en.wikipedia.org/wiki/Oberon_(operating_system) 20:01:23 It was making a run at being "the language" when I was learning. 20:02:18 It's a fine language, but I think it's appropriate that C passed it up. 20:02:36 The original Oberon book is worth reading, Project Oberon by Niklaus Wirth 20:02:39 ESPECIALLY if you're interested in low-level stuff. 20:02:45 I'd point out that TURBO pascal was an excellent learning-dialect. 20:03:03 Indeed it was 20:03:03 Turbo Pascal was an EXCELLENT application. 20:03:15 Just the way it worked, mechanically, was superb. 20:03:40 I remember it standing out as one of the first applications I ever saw that was so well "down to business" targeted. 20:03:42 I had the whole Turbo line-up, TASM, Turbo-Pascal, Turbo-C, Turbo-Prolog. 20:03:49 Very much a "lets waste no time" program. 20:04:17 I actually liked the very early TP's better than the later ones. 20:04:34 I felt like they stepped back a bit from that "cutthroat" mentality in the later versions. 20:04:38 I only used the early stuff I think 20:04:49 well, they started to drag in Modula-2 - and then the Delphi crap 20:04:51 I guess that was a sign that times were changing already, and that I wasn't changing with them. 20:05:08 The whole "look and feel" of the interface changed. 20:05:43 I remember loving how there was NOTHING on the screen except the stuff I was interested in in the beginning. 20:05:46 It was great. 20:05:55 I still have the TASM and Turbo Debugger manuals somewhere 20:05:59 And it was SO SO SO *fast*. 20:06:04 Unbelievably fast. 20:06:47 So, back in 1983 my first wife and I went to San Francisco - I was giving a poster session at the MacWorld conference. 20:07:04 Apple had just come out with the Mac II (which supported plug-in cards via the NuBus). 20:07:13 yep, I had TP for cp/m, iirc - and it was excellent in the extreme.. I was less impressed when I upgraded it all on a 286 20:07:18 I'd designed a NuBus card for the thing that was capable of becoming bus master. 20:07:31 Turns out it was one of the first ones anyone had done, and they wanted me to talk about it. 20:07:37 I met Philippe Kahn once at a SEF dinner 20:07:49 We got to the hotel, and there was a mix-upwith the rooms. 20:07:53 They wound up putting us in a suite. 20:08:02 Much better than what my company had sprung for. 20:08:07 It was actually pretty awesome. 20:08:12 Best hotel room I've ever stayed in. 20:08:22 Anyway, Philippe Khan had been in that room the night before. 20:08:35 The hotel had comped him a bottle of champagne, and it was still in the room. 20:08:46 So my ex and I drank Phillippe's champagne. ;-) 20:09:13 "Gettng some" was pretty rare with that woman, but I think I did that night. 20:10:06 I know this because there was a note from the hotel manager to him associated with the bottle. 20:11:14 Cool, my wife and I honeymooned in a B&B, Nicole Kidman and Tom Cruise occupied the room the previous night. They didn't leave us Champagne :( 20:11:50 Actually it was a cottage not a room 20:24:49 The only Silicon Valley celebrity I ever had a formal meeting with was Larry Ellison, I was the token American accompanying a Hitachi bigwig from Japan. I really didn't like his manner, but man he wore a fantastic looking suit. 20:26:25 I prefer Woz types, to Ellison types. :) 20:29:12 --- join: nighty- (~nighty@b157153.ppp.asahi-net.or.jp) joined #forth 20:50:17 --- join: gravicappa (~gravicapp@h109-187-213-103.dyn.bashtel.ru) joined #forth 20:54:33 hey guys 20:58:37 Hi tabemann 20:59:58 * tabemann is not a fan of Larry Ellison types himself 21:00:15 :) 21:01:31 I'm annoyed that the grocery store ran out of sriracha-flavored arare 21:02:13 (probably because they weren't stocking them as fast as I was eating them) 21:04:25 * tabemann never got to try out Turbo-whatever; he started out as an Apple //e user, then was a Mac user, then switched over to being a Linux user 21:07:14 I started out with an Apple ][ then CP/M, DOS, AT&T Unix and various home computers. 21:09:28 speaking of development environments (from looking up), I have to say that I hate modern Java development environments - so clunky and overbuilt 21:09:47 but I use them at work because everyone else I work with uses them 21:10:04 I learned C in a Berkeley extension night course at Xerox PARC. 21:11:19 I learned C and C++ because the first Mac my family owned was a used one that had belonged to a programmer, and he left us all his Mac development books and disks in addition to the Mac itself 21:11:35 Cool 21:12:50 * tabemann remembers the time you could go to your local public library and get books containing programs written in BASIC, which you'd take home and tap into your microcomputer and execute 21:13:01 --- quit: dddddd (Remote host closed the connection) 21:13:48 I also remember taking home books on things ranging from UNIX to Lisp to Prolog 21:14:09 computer sections in libraries suck nowadays 21:15:42 In the 80s much of my disposable income was spent at the Computer Literacy bookstore in Sunnyvale. 21:17:24 I still have tons of books I bought there. 21:17:42 I didn't have much disposable income in the 80s :P 21:18:05 That's where I bought Knuth's opus. 21:18:24 Blew my mind. 21:20:25 these days programmers don't care about Knuth's sort of stuff; they just have libraries handle it for them, rather than implementing data structures themselves, and they don't care if their algorithms are the most efficient as long as they pretend to work 21:23:01 Right, back then most programmers where fascinated by everything from the ground up, hardware engineering to algorithms 21:24:54 of course the consequence of this is Wirth's Law 21:26:11 I got interested in computers when we had a school trip to Lawrence Livermore Labs and got to play a game on paper teletypes with their mainframe. 21:27:22 paper-roll fed teletypes 21:27:47 my interest in computing started when I was in third grade - at my elementary school there was a computer club after school that students could go to once they were in third grade or higher - and one day I asked the lady who ran it how do you program these machines, and she gave me a ProDOS boot disk and lent me an Applesoft BASIC manual 21:27:58 and from then on I was hooked 21:28:03 Cool 21:28:04 heh.. Startrek - on fanfold... stored on papertape 21:28:16 :) 21:30:41 --- quit: APic (Ping timeout: 244 seconds) 21:31:10 Have to go, kids are visiting for Family Sunday. Catch you all later, keep on Forthin' :) 21:31:17 see ya 21:31:22 --- quit: rdrop-exit (Quit: Lost terminal) 21:42:44 --- join: APic (apic@apic.name) joined #forth 23:25:47 --- quit: nighty- (Quit: Disappears in a puff of smoke) 23:47:26 KipIngram: tabemann: great stories, much enjoyed reading them :) 23:54:20 I would have complimented rdrop-exit too but he left :) 23:59:59 --- log: ended forth/19.03.30