00:00:00 --- log: started forth/21.06.06 00:43:44 --- join: Glider_IRC_ joined #forth 00:47:13 --- quit: Glider_IRC__ (Ping timeout: 260 seconds) 01:58:36 --- quit: Bogen85 (Remote host closed the connection) 02:43:20 A separate stack per "type" sounds like an interesting idea. 02:45:58 At least, say, for vector3 or matrix4 types. 02:55:09 remexre: you might be interested in attending BLAST 2021 https://math.nmsu.edu/blast-2021/ 02:55:39 it's not PL theory but kind of related areas in the math world like universal algebra and lattices 03:49:28 --- join: rtdos joined #forth 03:49:28 --- join: proteanthread joined #forth 05:33:40 --- join: newuser|43 joined #forth 05:35:43 As a new user I find it hard to put it all on stack - I use global variables. Is it bad code practice in forth? 06:12:44 I don't think it's bad practice. It's perfectly fine to use global variables like local variables (defined right above the word they're used). 06:14:11 --- quit: newuser|43 (Quit: Connection closed) 06:15:47 On the other hand, if you limit the word to need at most 3 items on stack, utilize return stack, and expect arguments in reasonable order, there's little need to do stack juggling. 06:33:10 what do you think about lbforth and xforth? 06:33:20 https://github.com/larsbrinkhoff/xForth 06:51:54 amirouche: I'm always interested in another AVR Forth, but i see xForth has no resident compiler, and tethered operating is not yet implemented 06:53:31 for me, it is an essential requirement to have the full interact development experience while logged into the chip itself 06:54:30 I prefer a resident compiler, though I can see arguments for tethered compiling 06:56:07 I don't want to have to burn the whole chip again to compile in a new word 06:58:07 --- quit: cbridge_ (Remote host closed the connection) 06:58:20 --- join: cbridge_ joined #forth 07:00:20 Is there some kind of web chat set up for this channel? 07:00:34 Just notice people joining under 'newuser|xx' 08:02:23 --- quit: dsmcfarl (Ping timeout: 260 seconds) 08:04:02 --- join: dsmcfarl joined #forth 08:40:23 --- join: Bogen85 joined #forth 08:40:24 --- mode: ChanServ set +v Bogen85 08:47:07 --- join: crab joined #forth 08:52:23 --- join: mark4 joined #forth 08:52:55 --- mode: ChanServ set +o mark4 08:53:33 fell asleep at 9pm last night, woke up at 11, couldnt get back to sleep till 5am 08:53:38 heh 08:53:51 just get my sleep schedule in sync with the rest of reality and this happens lol 08:54:11 interesting, yesterday much discussion in here about Forth with a compile time type stack... 08:54:20 sounds familiar :D 08:54:32 yea i sort of saw that 08:54:32 as that is what I'm working on 08:54:45 dont quite understand it but im sure those who were talking about it do :) 08:54:50 yea 08:56:28 --- quit: crab (Ping timeout: 258 seconds) 08:56:53 --- quit: cbridge_ (Remote host closed the connection) 08:57:18 --- join: cbridge_ joined #forth 09:13:39 mark4: Is x4 older than jonesforth? 09:14:32 yes by a few years 09:14:42 i started x4 in about 2000 ish 09:15:20 i also think x4 sources are much cleaner than jonesforth 09:15:28 i strive to make my code readable 09:15:38 or else i cant read it lol 09:18:28 --- nick: ornxka -> ornxka2 09:19:01 --- nick: ornxka2 -> ornxka 09:19:07 --- nick: ornxka -> ornx 09:19:36 Bogen85 is there anything I can read about compile time type stack? 09:19:48 --- nick: ornx -> ornxka 09:19:55 I personally found x4 and x64 very readable, and sort of went in and diagnosed a portability bug in x64 when I tried it out, so that's encouraging to me 09:20:25 x64 isn't 'done' right now as far as I know 09:20:33 neuro_sys, it is work in progress for me, but I saw others discussing it here yesterday 09:21:18 well, the interpreter stack, but "compiled" words won't lay down code that accesses that stack 09:21:51 so a turnkey app won't have the type stack 09:50:51 mark4: My newer Forths are also much more readable than earlier ones. The one I'm doing now and the one I did right before kind of reached a new level of "cleanness" in my opinion, with the newer one the better of the two. 09:51:14 If you spend a little time crafting assembler macros you can really get a clean way of expressing things. 09:51:31 I've got a set of macros that totally handle the dictionary structure for me. 09:52:33 And even though my headers and bodies go into different memory regions, I can use section callouts in those macros so that I can WRITE header and body right by each other. 10:07:04 kip yea one way of getting better code is to design it, write it, debug it, DELETE IT and start over :) 10:07:33 once you have a fully working app delete 100% of the sources and start over :) 10:09:09 in many work places you would fired for that 10:09:27 right. they dont want to pay you to do it twice 10:11:32 --- quit: cbridge_ (Remote host closed the connection) 10:11:33 well, with modern agile devops it is not as bad as it use to be... you deliver minimum viable products, you have full TDD or BDD (Test or Behavioral drivel developement), you maintain a backlog. But you do also plan to start over on somethings if the "toil" gets to high. 10:11:42 --- join: cbridge_ joined #forth 10:12:44 so needing to start over is not what it use to be. Often you decide up front to to scrap the initially MVP and start over based on what you learned. Where I work we have done that a few times in the past couple years. 10:13:09 MVP == minimum viable product 10:14:07 i would not recommend it for work projeccts but personal projects its fine. i dont do it very often myself, it depends on how bad the work im doing feels 10:15:36 often cost of maintenance gets higher than what a rewrite would be, like I said, good development teams even in large companies understand that (like we do) 10:15:52 (where I work) 10:16:10 i have rarely seen that in the wild 10:19:31 --- quit: gravicappa (Ping timeout: 248 seconds) 10:30:46 I've started over with my Forth several times. 10:33:53 the solution to this for work is to divide the program into a set of smaller ones that can be individually replaced :) 10:34:57 That works good if the pieces "fit together" gracefully. 10:35:27 yes; it does require a lot of planning up front 10:35:39 That's the most valuable planning you can do. 10:36:35 If agile has any shortcomings, it's that an up front "architecturral planning period" doesn't fit into it perfectly. You can do it, but you do not have a demonstrable version of your product after architectural planning. 10:36:50 --- quit: cbridge_ (Remote host closed the connection) 10:37:00 --- join: cbridge_ joined #forth 10:37:45 But I really don't believe you can just "start writing" a really compicated application and hope for it to come together as well as it could with suitable initial planning. 10:38:03 That's like believing in magic. 10:38:50 ↑ 10:38:59 maybe for some subset of programs? 10:39:10 I'm also rather doubtful about having the whole team involved in architectural planning. You can get the "too many chefs" problem, and people get butt hurt if their idea doesn't get adopted. 10:39:21 I think your two or three best people should do the planning. 10:40:00 And then they have an "oversight" function to fill during actual development. 10:40:25 But another facet of agile is that it seems to shun that sort of "leadership." 10:41:19 not always, it depends on the org and if you have "cluefull" managers and directors, but yeah, that is not always the case 10:42:42 if the teams are small enough, they are by nature, more "Agile"... 10:42:55 Yeah, I agree with that. 10:43:01 it is big entrenched teams that become dinosaurs... 10:43:09 Small teams are just better. 10:43:12 Agreed. 10:44:30 we have a lot of Java dinosaur teams where I work... there stuff is never innovative and just gets more bloated, complex, and unwieldy the more features they add... 10:44:45 Ugh. 10:45:11 There was a period of time a while back when Java became a lot more entrenched that it should have. 10:45:50 but not in my immediate teams. in my team especially, none of use will do Java. No desire to, no need to... 10:46:05 Nothing wrong with it, and if you really really need an application that will run on almost any system it's a way to go. But I once saw it chosen for a high performance system controller, where the company was going to shiop not just the software but the hardware as well. 10:46:23 I.e., they controlled the server, completely. Ultimate portability was just not required. 10:46:39 everything is cloud cloud cloud nowadays... and cloud apps need to be small if you are going to scale 10:46:43 But the manager of that team "came of age" during the Java window. 10:47:15 Java apps are never small, their footprint is 10 to 20 times other modern langugages 10:47:46 That seems backwards from how it should be. 10:47:51 both in terms of app image size and memory consumption 10:48:05 ... Not that I've studied the question in any detail, but my impression re. Linux (which is to say, the kernel) development is that ideas get discussed, the best one is picked up to be implemented, then after a few years its flaws become obvious, but it takes months before work starts on something new. I'd be curious to learn if there're approaches to solve / mitigate that. 10:48:10 You'd think that having a virtual machine that was fixed would lead to smaller applications (above and beyond the vm, I mean) 10:48:25 most cloud stuff is Linux, thankfully. 10:48:48 Who picks "the best one"? 10:49:00 Hopefully the "best" people. 10:50:20 Java should just die. While there are lots of things I don't like about Go or how it was designed, it is a far better fit for the cloud than Java. 10:50:39 And you can compile it for any platform... 10:51:03 I don't know Go myself, but I have an acquaintance whose judgement I really trust who really thinks highly of it. 10:51:17 He was very impressed, and he's not an easy guy to impress. 10:51:41 Gotta figure if anyone could "design to fit the cloud" it would be Google, I guess. 10:53:05 I don't know if he's actually an acquaintance anymore. A couple of months ago he confided a personal problem, or rather his concern about one, in me, and logged off that night planning to go react to it somehow. Then for a month he showed no online activity at all - I considered the possibility that he'd gotten himself thrown in jail or something. 10:53:18 yeah, well, any lean system that produces small binaries and has networking capabilites, and a rich default library and a growing ecosystem, is potentially a good fit for the "cloud" 10:53:20 He seems active on IRC again now, but hasn't said a word to me and hasn't responded to any messages. 10:53:38 Which, is actually sort of rude - I was very concerned about him and worried over him some. 10:53:44 But I guess if he's moving around on IRC he's fine. 10:54:02 I think he's just embarrassed at having told me the things he did that evening. 10:54:12 yeah, that happens 10:56:24 whats up with all this rain... not raining today yet though... wettest May/June that I can remember 10:57:11 Yeah, here too (Houston area). 10:57:30 North Dallas area for me 10:57:53 Ah, we've probably shared some of it, just a few hours / a day apart. 10:58:11 yeah 12:43:45 --- join: Glider_IRC__ joined #forth 12:46:43 --- quit: Glider_IRC_ (Ping timeout: 248 seconds) 13:04:41 about Java and footprint... I wrote a simple program for work that relies on Hibernate, because it uses classes shared with a much larger application that uses Hibernate - guess how large it is 13:10:18 I couldn't even begin to guess. 13:11:23 --- quit: Kumool (Ping timeout: 258 seconds) 13:17:55 it's 40-something megabytes 13:18:11 lol 13:18:14 most of the source code fits in a single, not-very-long file 13:18:20 strong performance 13:18:36 but because of all the dependencies required by Hibernate, it balloons out in size 13:19:31 makes me glad I gave up on Java long ago 13:20:06 unfortunately the big application I develop at work is a big pile of Java and JavaScript 13:21:03 the thing is, of that simple program, it itself is far less complex than my Forth, zeptoforth, which in a "big" build fits in 256K, and that is a big build 13:23:03 --- quit: cbridge_ (Remote host closed the connection) 13:23:18 --- join: cbridge_ joined #forth 13:25:49 I'm stuck using an application written in Java at work; it sucks. I've decompiled parts of it in the past to remind myself to stay away from Java as much as possible. 13:29:52 the thing about the application I work on at work is that it is unmanageably complex, whether it is the Java parts or the JavaScript parts 13:30:12 in addition to just being overly large 13:33:36 and what it really does is pretty simple fundamentally, it's just all the extra stuff forced by in this customer's needs or that customer's needs which causes it to get overly complex 13:35:36 Love it or hate it that's the kind of code that keeps most of us in business :P 13:40:47 well I get a lot of shit about it at work, because I'll make a change in response to a ticket, and then someone will come back with that it broke something completely unrelated or that there is some other problem that is seemingly related that I didn't fix (because to me as programmer it was not within the scope of the ticket, but the testers don't think that way) 13:41:13 oftentimes the things I "broke" were not broken by me at all 13:41:46 but were already broken, but the testers, in their ignorance, like to glom things onto existing tickets just because they're too ignorant to know the difference 13:43:02 what's also wonderful is when the designers at my work come up with sloppy requirements... and then the testers take them literally (and when I ask the designers to fix the requirements they don't bother) 13:45:02 --- quit: cbridge_ (Remote host closed the connection) 13:45:14 --- join: cbridge_ joined #forth 13:45:59 tabemann: example of such sloppy requirements? 13:47:10 Zarutian_HTC, horrible copy-and-paste errors taken from one part of the application to a new part... where stuff got omitted, or stuff got inappropriate included, or things weren't changed accordingly 13:48:13 that kind of recycled copypasta 13:50:10 worked once with an requirement gatherer whose criteria were damn good but it made the customer or their end users feel like they been through probeing 13:51:01 the main designer is annoying because he often acts like a tester, but he doesn't test by requirements but rather by he what he feels the customer would expect 13:51:32 the main designer is annoying because he often acts like a tester, but he doesn't test by requirements but rather by he what he feels the customer would expect 13:52:22 whereas I as a programmer obviously couldn't care less about what the customer expects, but rather I care about requirements and about issues brought up in tickets 13:52:50 if the customer expects something to be a certain way, there should be a requirement for it 13:52:55 I'm not psychic 13:54:55 --- quit: cbridge_ (Remote host closed the connection) 13:55:06 --- join: cbridge_ joined #forth 14:06:18 Haha - copypasta. Somehow I've never encountered that term before. That's a clever one. 14:06:29 -!- f-a(~f-a@151.34.43.99) has left ##forth 14:08:33 tabemann: Right. If something is unspecified then I regard it as programmer discretion. 14:09:11 I wouldn't normally expect user interface behavior to be unspecified, though. 14:09:41 oh, so cbridge_ is still relaying has left messages? or has it not stopped? 14:10:09 I guess hard to distinguish some 14:12:36 tabemann: what sort of software is this? Customer Record Management? order flow? or ui for industrial machines? 14:16:20 Zarutian_HTC, QA management software for industry, especially aerospace 14:18:20 it covers stuff like nonconformances, corrective actions, complaint handling, document management, receiving inspections, in-process inspections, and so on 14:28:28 Bogen85: it still misses a few. I'm working on it in between other tasks :) 14:32:04 crc, oh, no problem, just an observation. For a bit there I though cbridge had left, but the earlier messages were from the system, and colored 14:32:39 (the earlier cbridge quit/joined messages) 14:33:59 --- quit: cbridge_ (Remote host closed the connection) 14:34:12 --- join: cbridge_ joined #forth 14:35:14 the bridge should be pretty stable, and has auto detection for disconnects so it can restart as needed now 14:35:16 there was a long discussion here yesterday about a type stack and type checking. The project I'm working (between a lot of other tasks) is a strongly typed "forth", and I will be using a type stack during compile and interpret, but not in the compiled words. 14:36:11 I saw that, I'm interested in seeing how you make put with it 14:38:09 yeah, is taking be a bit to work out the design, it has to be clear in my head on in documentation (albeit crude) before I can start, because this in uncharted territory. All the forths I've written so far were untyped. 14:38:26 but I'm close 14:44:39 just juggling so many other things taking my time 14:45:24 I would tend towards implementing something like haskell's type system but using a type stack myself, were I to implement this 14:47:01 yeah, strong static typing, functions have types 14:47:33 (so a function vector will have a type, and you can't assign the wrong type to it) 14:49:25 well, words have types... I'm staying with that nomenclature 14:50:03 in many ways this would be more flexible than a more limited type system like trying to use a C-style type system 14:50:27 hmm, one could even do ad hoc polymorphism with type classes... 14:50:53 yeah, though I plan to go more with go struct/interfaces 14:51:41 IMHO a "Forth" with type classes would be pretty neat 14:52:30 forth has one level classes with one member function... 14:52:36 create does ... 14:53:08 and a compile time constructor... 14:56:32 such a language would necessarily have to be far higher-level than a normal Forth 14:56:49 e.g. it would have to have higher-order functions 14:57:01 s/functions/words 14:57:26 it would have to support type variables 14:57:58 just add dynamic allocation and garbage collection, and then you pretty much have Factor 14:59:15 one thing is that it would have to have deterministic stack effects 15:00:59 in many ways, though, it would be not very forth-like aside from that it would be stack-oriented 15:02:58 --- quit: cbridge_ (Remote host closed the connection) 15:03:10 --- join: cbridge_ joined #forth 15:09:18 tabemann, yeah, I'm not really referring to it as a forth, it is just forth like in how it compiles (to an extent...) 15:09:58 it is still whitespace token delimited (for the most part, in my design I'm having to make exceptions for some things) 15:12:49 my plan is to implement in ruby (outputing to ruby) (using it's GC), and output to C++, and leverage unique/shared pointers. 15:13:25 then when I have a working system, reimplement in itself 15:14:10 so what be targetting a VM, but will transpile 15:14:53 the thing with that is how would you compile code and execute it on the fly in the ruby version? 15:15:28 out to ruby strings and eval them, thereby creating new words 15:16:06 and those will (should be) jitted as well 15:17:16 oh... in the c++ reimplemented one will need to internally use a VM (or use mirjit), that that is for much later... 15:18:04 why implement in three stages, rather than two? 15:18:29 if you're going to write it initially in ruby, why not write the final implemenation using itself with that 15:19:01 ok, keep ruby all along and just output to c++ for turnkey? 15:19:47 or use mirjit from the beginning? 15:20:31 keeping/staying with ruby and outputting c++ for turnkey would be the easiest 15:20:46 nah 15:21:48 what I mean write it to compile to ruby itself initially, and use that to bootstrap a native code version 15:24:03 oh, yeah, that makes sense 15:24:04 or you could just write the whole thing in assembly and compile directly to native code :D 15:25:14 yeah, but then I'll have to implement my own memory management (lobster memory memory most likely) 15:25:28 lobsert memory model... 15:25:34 can't type... 15:27:07 I did a lot of assembly previous decades (prior to 2010). This pass decade has all been higher level languages. 15:27:12 this past... 15:29:16 --- quit: cbridge_ (Remote host closed the connection) 15:29:26 --- join: cbridge_ joined #forth 15:29:33 writing a memory manager isn't that hard - it always seems like people will do anything to avoid writing a memory manager 15:30:29 ACTION did write a memory allocator for his forths 15:30:45 well, writing an automatic one (where the programmer does not have to do frees) is not as easy 15:31:06 that does not leak, and is not a garbage collector 15:31:37 https://aardappel.github.io/lobster/memory_management.html 15:31:46 i also wrote one 15:31:58 an automatic one? 15:32:05 that knows when to free? 15:36:06 of course not, thats complexity i dont need :) 15:36:09 personally 15:36:17 the main limitation of a writing a GC is either you have to do it for a higher-level language, or you have to do it with the assumption that all aligned words might be pointers, which of course results in wasted memory and performance lmitations 15:37:14 I don't want a GC, they may work, but they heard my head. Automatic freeing is not necessarily a GC. 15:37:43 C++'s smart pointers (unique and shared), and the model the lobster author discusses 15:37:48 do you want something more along the lines of Rust's memory management model? 15:38:41 yes, similar to that 15:39:33 that lobster article talks about Rust's model 15:39:40 my memory allocator is not that sophisticated - you have to allocate, resize, and free your memory manually 15:42:12 yeah, I'm use that that (of course, I've done alot of c malloc/free/realloc, etc...). But with string manipulation that get tedious 15:42:38 puts a lot of burden on the programmer to do something simple 15:44:37 in Forth I typically don't actually use my memory allocator but rather use ALLOT or RAM-HERE! a lot 15:45:45 well, RAM-ALLOT 15:46:25 (any given task in zeptoforth has two HERE pointers, one in RAM for that task, and a global one in Flash) 15:48:37 mark4 considers me a Forth guy... I consider myself more of a polyglot in regard to programming languages... 15:49:49 i consider you knowledgeable about forth :) 15:49:58 I used to be a Haskell guy, before I really decided that I wanted to create my own systems, and that Forth was ideal for accomplishing this 15:50:48 before that I was an OCaml guy 15:51:22 I played with OCaml for a while, did not get that far 15:51:43 I've written a few toy forths 15:52:00 --- join: Kumool joined #forth 15:53:34 I've written three Forths, zeptoforth, hashforth, and attoforth; I didn't really like the latter two, which required running on an OS, whereas zeptoforth is a bare-metal SRT/NCI Forth/operating system written for Cortex-M4 and Cortex-M7 15:54:46 well, hashforth is neat in many ways, but it has the fundamental design limitation of that it was written to be TTC, which resulted in a significant performance hit (e.g. a tight loop in it is no faster than one in Python) 15:57:06 also, hashforth was designed to be portable, but then I realized that portability between large systems (e.g. Linux) and small systems (e.g. Cortex-M4) is essentially infeasible (e.g. small systems need a distinction between RAM and Flash which doesn't exist for large systems) 16:02:06 yeah, if I target a small system it would be through a hosted environment/compiler 16:02:21 I used Chipforth and SwiftX for many years 16:05:23 why not write your own compiler? 16:07:03 That is what I'm planning to do... the language project I was discussing earlier... Things keep coming up with other things in my life... 16:07:28 but the past week I've hashed out a lot of the design 16:10:07 ACTION wonders what he should do next with zeptoforth 16:13:05 maybe actually write real comments for the assembly source 16:19:43 --- part: rtdos left #forth 16:19:44 --- part: proteanthread left #forth 16:25:41 --- join: rtdos joined #forth 16:25:41 --- join: proteanthread joined #forth 16:42:37 back 17:04:04 maw 17:04:28 maw dave0 17:04:37 maw crc 17:13:58 What is "maw"? I require details. Such an engima. @.=.@ 17:15:58 we're all still wondering 17:17:58 --- quit: cbridge_ (Remote host closed the connection) 17:18:11 --- join: cbridge_ joined #forth 17:24:20 back 17:26:34 maw dave0 17:26:42 maw tabemann 17:29:45 ACTION is trying to figgure out wtf 'risk based guidence' is regarding banks. Risk that they do not perform their function? what? 17:38:43 "risk" is anything that doesn't involve them making money 17:47:25 might be, but I suspect it is just fig leaf for creepy old white men to force their out dated puriticanal views on businesses 20:35:15 --- join: gravicappa joined #forth 21:10:50 https://github.com/brightly-salty/mlatu 21:10:56 Have people here seen this? 21:13:49 no. interesting though. 21:15:53 What I'm working on, while similar (as far as stack based and statically/strongly typed) does not share the same overall project goals. 21:16:40 Zarutian_HTC it's because fractional reserve banking incurs risk by its very nature. 21:17:40 tabemann re:forth with type classes.... on it. ;-) 21:24:46 re maw 21:33:45 --- nick: proteusguy -> proteusguy-awk 21:51:23 maw dave0 21:52:24 maw KipIngram 21:54:24 --- quit: cbridge_ (Remote host closed the connection) 21:54:35 --- join: cbridge_ joined #forth 22:21:38 --- quit: mark4 (Ping timeout: 260 seconds) 22:35:07 --- join: mark4 joined #forth 22:45:55 --- nick: proteus-guy -> proteusguy 22:46:09 --- mode: ChanServ set +v proteusguy 23:59:59 --- log: ended forth/21.06.06