00:00:00 --- log: started forth/18.12.20 00:15:58 --- join: rdrop-exit (~markwilli@112.201.164.82) joined #forth 01:16:26 --- join: ncv_ (~neceve@2a00:23c5:341b:d800:e144:9e2b:a867:7791) joined #forth 01:16:26 --- quit: ncv_ (Changing host) 01:16:26 --- join: ncv_ (~neceve@unaffiliated/neceve) joined #forth 01:49:47 --- join: xek (~xek@apn-31-0-23-82.dynamic.gprs.plus.pl) joined #forth 02:03:09 --- quit: ashirase (Ping timeout: 268 seconds) 02:22:30 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 02:25:27 --- join: ncv__ (~neceve@unaffiliated/neceve) joined #forth 02:28:20 --- quit: ncv_ (Ping timeout: 252 seconds) 02:37:59 siraben: http://zwizwa.be/staapl/staapl.html ? 02:54:35 --- join: dave0 (~dave0@47.44-27-211.dynamic.dsl.syd.iprimus.net.au) joined #forth 03:02:26 --- join: ncv_ (~neceve@unaffiliated/neceve) joined #forth 03:04:47 --- quit: ncv__ (Ping timeout: 244 seconds) 04:28:52 DKordic: thanks for the link, interesting stuff 04:29:35 Alright, I can boot now and display stuff to the screen, read keys and unlock the flash memory, all that's left is to implement a Forth 04:31:35 --- quit: mark4 (Ping timeout: 244 seconds) 05:14:49 --- quit: MrMobius (Ping timeout: 240 seconds) 05:24:43 siraben: Why don't You target some PIC32 ior STM32 DevBoard? 05:28:52 Yeah, targeting a PIC<32 is ... ugh. 05:29:27 i.e. any PIC with a PIC instruction set 05:33:28 Greetings ttmrichter. You are back. 05:36:23 jn__: And memory architecture, yes. :) 05:36:37 DKordic: I am, yes. The cause of my not being here is gone, so... 05:45:12 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 05:52:47 --- join: MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 06:01:36 --- quit: Zarutian (Read error: Connection reset by peer) 06:01:45 --- join: Zarutian_2 (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 06:03:34 DKordic: maybe, if I have enough time 06:28:43 --- quit: rdrop-exit (Quit: Lost terminal) 06:32:35 --- join: mark4 (~mark4@148.80.255.161) joined #forth 06:45:43 porrability is not hard, its absolutely impossible. show me ANY portable code and ill show you a clusterfuck of interleaved gordian knot code with different versions of the code all interleaved into the same source files. 06:46:15 that doesn't sound impossible 06:47:00 portable code is absolutely a MYTH. it has never existed 06:47:08 but you just described it 06:47:10 maybe java if that counts 06:47:20 no. thats not portable code thats a clusterfuck 06:48:07 portable code is code that runs on any machine AS IS. not 23486523745 different versions of the same code all interleaved into a clusterfuck 06:48:42 so your definition is that code isn't code if it compiles to something different for different targets 06:49:16 basically your claim is that conditional compilation renders something not code 06:49:58 if you take all the code for machine A and put it in its own source files, take all the code for B and put it in its own source files. have all the common code in their own source files THAT would not be a clusterfuck but it would still not be portable, machine A's code does not run on machine B 06:50:22 no. it renders it unmaintainable, unreadable and NOT "portable" 06:50:31 doesn't it mean the common code is portable? 06:50:53 the common code is portable the overall is not 06:51:07 but your argument is that portable code doesn't exist 06:51:17 mark4: easy! Just define a VM spec, target your application code to that and then implement the VM on any architecture you like. 06:51:24 i was not including trivialities in my statement. I assumed you were smart enough to understand that 06:51:36 what's trivial about common code? 06:51:37 Zarutian_2: thats what java does - for the most part 06:51:43 --- nick: Zarutian_2 -> Zarutian 06:52:01 mark4: that is a technique older than java. Pcode something iirc 06:52:04 zy]x[yz: it is not a functional entity wothout the specific code 06:52:19 Zarutian: that was the intent for forth with their standards 06:52:27 but ANS utterly fails to make ans forth portable 06:52:38 so code isn't code without the parts it interfaces with? 06:52:46 which is why you need all kinds of horrendous bullshit conditional compilation 06:52:54 who the FUCK said code was not code? 06:52:59 i said code is not portable 06:53:01 you did 06:53:52 Zarutian: c code that runs in linux, in windows, in all the bsd variants... is NOT portable code. 06:54:03 you made the assertion: "porrability is not hard, its absolutely impossible." and now i'm pointing out portable code in your own hypothetical and you're moving the goalposts to fit your bizarre definition 06:54:05 portable code is a myth 06:54:16 mark4: nope, it isnt. It barely works on any of those platforms. 06:54:42 zy]x[yz: i assumed you were smart enough to figure it out without my stating it. obviously not in this case 06:55:02 Zarutian: even java is not truly portable, its just the closest thing we have to it 06:55:07 i was smart enough to figure out that you don't know what "absolutely impossible" means? 06:55:18 maybe you chose the wrong words if that's not what you meant to communicate 06:55:19 mark4: brainfuck is more portable than java 06:55:54 brainfuck is not really a practical language... then again, some would say the same about java lol 06:56:43 i never support conditional compilation in my compilers 06:56:53 : rot >r swap r> swap ; ( is this a portable definition for rot?) 06:57:27 i would say probably not 06:57:51 and again. a FUCKING TRIVIALITY 06:57:53 duh 06:58:07 do you know what the word absolute means? 06:59:16 you can't make a claim that something is absolutely so, and then say examples of being not so don't count 06:59:29 you need to revise your thesis 06:59:46 or you need to stop being a jerk 06:59:51 one or other. or maybe both 07:00:26 i'm not trying to be a jerk, i'm challenging an idea that i find to be untrue 07:05:55 oooh hers a good example of "portable code". my android NDK forth was 100% working other than a few minor bugs. google ripped the rug out from under me and now my code which was written for ANDROID no longer runs on android AT ALL. it required an almost complete rewrite and im only just now starting to get to the point where I am ready to debug it again 07:06:24 so even code written for a specific platform, with specific tools are NOT guaranteed to work on that platform if the platform itself keeps changing 07:07:17 how is that an example of portable code if you acknowledge it's written for a specific platform with specific tools? 07:07:42 its not portable, it is so UN portable it wont even run on the platform it was specifically built for 07:07:55 of course it isn't portable, you just said it wasn't written to be portable 07:08:06 that doesn't prove anything 07:08:11 if i cannot guarantee code written for platform X will run on platform X how can i expect it to run reliably on platform Y 07:08:19 you can't 07:08:25 nobody said you could 07:08:37 Code that I write in gforth is totally portable. It runs without any modifications on x86 and ARM. 07:09:12 Same for pforth. It even runs on my android phone. 07:09:30 i doubt all code runs perfectly on both platforms but yes that almost counts as portable code 07:09:49 What should stop it from running perfectly on all platforms? 07:09:51 except... it wont run under swiftx or iforth or any other "ans" forth 07:10:07 mark4: That's like complaining that your C code doesn't run in Java. 07:10:13 john_cephalopoda: there is no such thing as bug free code, i suspect bugs exist 07:10:23 swiftx and gforth are two different programming languages. 07:10:41 john_cephalopoda: the entire point of the existence of ans forth is to make code portable. thats their primary goal 07:10:47 agreed 07:11:08 Point is, that the code is portable inside of a specific forth. 07:11:10 "the ans forth standard does not describe the FORTH language but a language of the same name" 07:11:25 if it has the same name then isn't it FORTH? 07:11:28 My gforth code will run on any machine that has gforth installed. 07:11:41 that was a direct quote from chuck moore. 07:11:44 I know 07:11:45 Retro code will not run in gforth, gforth code won't run in Retro. 07:11:48 he said something stupid 07:11:57 it's probably happened more than once 07:12:23 john_cephalopoda: congrats. prove to me that any and all code that you COULD write will work 100% identically on all machines, under all operating systems that have gforth 07:12:42 so the inventor of the forth language does not get to define what is and is not forth 07:12:44 got it 07:12:54 Point is: Hardware differs. When you want to have something portable, you'll have to abstract away the hardware completely and absolutely and write fixes so that things still work when one hardware does something in a completely different way. 07:13:03 no, read what he said 07:13:07 john YES!!!! 07:13:18 it's not FORTH, it's something else *with the same name* 07:13:21 which means it's also FORTH 07:13:26 it's a nonsensical statement 07:13:28 thats what the SYSTEM you are running under does for you. but no system can do that perfectly 100% of the time 07:13:33 java comes damned close 07:13:39 i can accept that gforth comes damned close 07:13:49 mark4: Prove to me that all code that you COULD write will not work 100% identically on all machines, under all operating systems that have gforth. 07:13:50 i will not accept that they do it perfectly 07:14:15 john_cephalopoda: your argument against my argument is just as valid as my argument 07:14:26 Even ANS is more of a guideline than an actual spec. 07:14:40 my "proof" is 30+ years of experience with so called portable code 07:15:00 Proving that there is an incompatibility requires one example. 07:15:13 john_cephalopoda: like any other spec this one leaves a lot to the designer that make portability impossible 07:15:14 Proving that there isn't requires a 500-page proof with all test-cases and stuff. 07:16:01 john_cephalopoda: in a court of law, if a tree falls over but there were no witnesses to it then the court has NO OPTION other than to rule that the tree did not fall over. I can not prove that all code works 100% of the time - experience shows me that it does not. 07:16:35 in a court of law absence of proof is proof of absence. 07:16:43 gforth is, as far as I know, ANS-compatible but has some extensions that are not in the standard. Which is totally fine, that's how Forth works. 07:16:46 thank god this isn't a court of law 07:16:57 mark4: Russel's teapot. 07:17:26 john_cephalopoda: it was designed as the reference forth but - there are (or were?) aspects of the standard that are mutually exclusive, it was (is?) not possible to be 100% ans compliant 07:17:34 john_cephalopoda: what is russel's teapot? 07:17:47 https://en.wikipedia.org/wiki/Russel%27s_teapot 07:18:31 zy]x[yz: the argument is that i can not PROVE that no code is 100% functional but neither can anyone prove that it IS 07:18:33 I can't really falsify the claim that there is some condition that isn't portable because that would require me to test all conditions. 07:19:02 john_cephalopoda: EXACTLY so the only thing you can rely on is experience. 07:19:13 The burden of proof is on your side. You have to show me that there exists one condition before I believe it. 07:19:15 john_cephalopoda: cool teapot 07:19:20 experience shows you that gforth code is, as far as you are able to test it, 100% portable 07:19:32 according to mark4, the only thing you can rely on is his personal experience 07:19:41 john_cephalopoda: i dont need to "prove" it, experience shows my statement to be true 07:20:19 https://xkcd.com/1866/ 07:20:21 i am directly aware of it 07:20:29 ok, lets see... lets monitor the gforth repository and see if any bugs are fixed within the next year 07:20:37 if no bugs are fixed you win 07:20:44 what 07:20:45 if any bug is fixed that means that my statement holds 07:21:06 now the definition has changed to "the code must be perfect and never have any bugs??" 07:21:20 are you actually high right now? 07:21:24 non portability, when portability is a goal is because of bugs? 07:21:25 maybe? 07:21:39 that explains it 07:22:45 You can go as far as calling "50 EMIT" non-portable because due to different I/O speeds on different platforms, the timing will differ. 07:23:27 It won't even run the same in two executions on the same computer. 07:23:32 john_cephalopoda: the definition for rot given above might not port to some platform, it relies on access to the return stack. 07:24:00 it also relies on : to do what we all expect : to do 07:24:04 It will run in gforth in every platform that runs gforth. 07:24:30 john ok. my assemblers rely on a word that does this foo> r> , ; 07:24:30 of course portability is built on basic assumptions about the underlying system 07:24:33 Since gforth has a return stack and I can rely on that on every platform and OS that supports it. 07:24:42 that wont work on MOST ans compliant forths 07:24:43 that's how we write portable code 07:25:11 : foo r> xxx yyy zzz ; 07:25:18 your argument is that portability doesn't exist because we have to write layers that make assumptions about their underlying layers. the point is that what you describe /is how we achieve portability as software developers/ 07:25:21 i.e. pull the return address off the stack and do something with it 07:26:15 zy]x[yz: look at any c application, for example. even when it has no conditional compiles the libraries it pulls in are HORRENDOUSLY over complicated by conditional compilations out the wazoo 07:26:27 yes. the people who create those libraries do an awesome job 07:26:49 Portability works by building abstraction layers. Either in form of a VM (like with Forth) or by compiling different low-level code for different platforms in order to form consistent API, so the high-level code will work the same (e.g. Unix sockets and winsocks in compiler macros, building the base for a networking layer). 07:26:50 but when you write an application to run on how ever many platforms you are not creating portable code 07:27:42 mark4: The code is portable because the libraries give you an abstraction layer that abstracts away the difference in hardware. 07:27:43 john_cephalopoda: of all the problems that the software engineering community has to solve, portability is probably the single MOST difficult one there is 07:28:01 john_cephalopoda: in that case yes for the most part they do 07:28:02 you might as well be arguing that modern building design is inherently unstable because it can't stand up unless it's built on a solid concrete foundation, and i'm trying to explain to you that that concrete slab is how we make modern construction designs stable 07:28:25 zy]x[yz: lol not always :P 07:29:24 i have two released versions of my forth. x4 is for x86_32 and t4 is arm thumb2. i used to have an arm32 version i used as a staging version for the thumb2 version, not sure if i still have that.... 07:29:28 --- quit: tabemann (Ping timeout: 252 seconds) 07:29:39 mark4: If the libraries don't do the job well enough to abstract away the platform, than you have to do it in your code, by abstracting away stuff, fitting it to the platform by doing platform-specific things. 07:29:40 i know of a few places where code will run on one but not the others 07:29:44 those are bugs. 07:29:45 you also seem to be under the impression that for something to be true, it has to be true in 100% of cases 07:30:19 john_cephalopoda: i would much rather see all code for one platform over here, and all code for the other platform over there 07:30:56 zy]x[yz: portable code is always horrendously complex SOMEWHERE. that means more bugs 07:31:45 so that just means it's hard 07:31:50 not absolutely impossible 07:33:14 mark4: instead of just having an ifdef that sets const PLATFORM_BITS to 32 or 64 depending on the platform, you'd prefer that there are two directories with exactly the same files but one says "32" and one says "64" when it's about bus width? 07:33:42 common files in a common directory 07:33:57 (but don't mistake those common files for portable) 07:34:21 i would like to have ONE project on github for both x4 and t4. the kernels would be in their own tree and the extensions in their own tree 07:34:55 but my extensions do not port 100% 07:35:36 i would also like to do x86_64 and aarch64 07:35:55 and then there is my android NDK version which cant use ANY of the existing extensions. 07:37:17 zy]x[yz: MAYBE my extensions are not portable because of bugs in those common files? 07:37:30 i stand by my statement. portable code is a myth 07:37:51 mark4: With enough abstraction, every code is portable. 07:37:57 sure, in some areas we have some damned close approximations 07:38:35 i say all code is a myth because it could have bugs in it 07:38:52 all code is buggy 07:39:08 Same for turing machines. They need infinite registers but there is no such thing. Totally fake. 07:39:21 All Turing Machines are theoretical. 07:39:44 Nothing is "Turing Complete", just a rough approximation of what a Turing Machine could do. 07:40:05 im certainly not sainig "all code is bad". 07:42:43 they proved some version of L4 microkernel was correct ie. no bugs 07:42:56 you can do it with math, it's just really expensive 07:43:09 math isn't real dave0 07:43:10 And then the hardware must be perfect. 07:43:27 i've never had good success with math. it's a myth 07:43:33 far out man! 07:43:34 Radiation-hardened, so particles don't destroy your correctness. 07:44:46 john_cephalopoda: you will still have to defeat the laws of entropy to prevent your hardware degrading :) 09:03:15 mark4: if you ever find the THumb1 sources, let me know ;-) I want to get something over to samd21 mcu's ;-) 09:06:12 no thunmb1, arm32 09:06:25 ah 09:06:44 are those pure thumb1? 09:06:52 ah well, pre-caffeine high-hopes ;-) 09:07:10 Nah, they are m0+, so thumb1 and some arm32, apparently. 09:07:46 the samd51 is an m4, so I think your t4 would work with tweaking over there 09:35:15 --- join: dys (~dys@tmo-097-148.customers.d1-online.com) joined #forth 09:39:38 --- quit: ncv_ (Remote host closed the connection) 09:46:09 --- quit: proteusguy (Ping timeout: 240 seconds) 10:01:50 --- quit: dave0 (Quit: dave's not here) 10:13:29 --- join: alexshendi (~yaaic@ip2505f447.dynamic.kabel-deutschland.de) joined #forth 10:20:12 --- join: learning_ (~learning@47.149.80.42) joined #forth 10:24:09 --- join: gravicappa (~gravicapp@ppp83-237-163-66.pppoe.mtu-net.ru) joined #forth 10:30:22 kinda random, but im trying to setup a ZNC so i dont have to look at logs for this channel. anyone know what this error is? #LunarBNC Cannot join channel (+r) - you need to be identified with services 10:30:51 it redirects to a page about nicknames 10:32:07 nvm i thought it was a freenode error but its something to do with how i setup the ZNC. pls disregard 10:33:00 god why doesnt shit ever just fucking work 10:33:12 there is always 99 steps no one fucking tells you and you have to debug other people's instructions 10:34:15 it does work, you just have to know what it is you're trying to make work 10:34:44 learning_: yeah. I have notice this with manuals for electronics. Quite irritating. 10:35:35 i shouldn't have to understand how a game is programmed to play a game 10:36:00 you don't have to know how znc or irc are programmed to know how to use them 10:36:16 it really isnt fucking hard to make software that just works 10:36:22 but you have to actually give a shit about the user 10:36:34 it does work, though. you just don't seem to know what +r is 10:36:39 no i dont 10:36:41 --- join: proteusguy (~proteus-g@cm-58-10-209-244.revip7.asianet.co.th) joined #forth 10:36:41 --- mode: ChanServ set +v proteusguy 10:36:45 i shouldnt have to 10:36:48 is this bitch tuesday in #forth or something 10:36:54 thursday. whatever day it is 10:36:57 one of those t days 10:37:09 they told me what info to plop into my irc, i should be able to plop it in and it should just work 10:37:32 * Zarutian eyes proteusguy and stifles an usenet-trollish political rant about you know, The Others. 10:37:37 if its not going to just work then they should explain what else i need to do 10:38:07 learning_, +r is a flag that channel operators can put on their channel to disallow unidentified users from joining the channel. a lot of channels on freenode have recently adopted this policy because there's been a bad rash of spam 10:38:16 chill out and educate yourself. it's not that bad 10:39:46 it is that bad. its literally every single piece of software that other tech people are supposed to use. its just like when you read a programming tutorial and the person isn't even aware of the fact that they are using words you don't understand. 10:40:02 welcome to earch 10:40:07 also earth. god damnit 10:40:43 and i figured out that much based on the link they give (https://freenode.net/kb/answer/registration) but it doesnt explain why im being rejected 10:40:55 this is not a phenomenon unique to software. this is unfortunately the limits of our ability to communicate 10:40:56 i just emailed them with the error and a screenshot of the server properties 10:40:58 learning_: yeah. If you have watched Guy Steeles OOPSLA'96 talk on growing a language then you know the tact I take when writing tutorial documentation. 10:41:06 it is completely unique to software 10:41:20 it isn't. you're just having a hissy fit over software at the moment 10:41:23 i have never seen any group of people that communicate so poorly 10:41:32 which is hilarious considering the work is literally working with languages 10:41:53 learning_: I have. Carrier Politicans. 10:42:32 learning_: naah, programming languages and spoken languages are quite different. 10:42:39 i can understand the GOP debates better than I can understand any Javascript tutorial you could possibly find 10:43:02 whatever /rant 10:44:15 learning_: well many Javascript tutorials are written by peeps that do not quite understand the concepts themselfs or are just too damn obtuse without realizing it. 10:44:43 the only good programming tutorial ive ever gone through was The Little Schemer 10:44:45 javascript people are also most likely going to be web brogrammers. they're going to think and express ideas in the context of their little web world 10:45:08 there's no such thing as a brogrammer 10:45:08 zy]x[yz: they are stuck in it, no? 10:45:33 i met a guy that would qualify as that. said he knew PHP. he was fired shortly after because he didnt actually know how to program. 10:45:36 learning_: oh, ya havent been to a Web Two Point Oh conference then 10:46:18 i google imaged web 2.0 conference 10:46:22 all im seeing is nerds 10:46:52 * Zarutian fucking wished that his cheapskate neighbour actually went and had the oil changed in his (neighbours) car. 10:47:47 --- quit: dys (Ping timeout: 250 seconds) 10:48:24 damn, nasty noise that internal compustion engines make when not enough oil is in them to lubricate. 10:48:38 --- join: dys (~dys@tmo-118-231.customers.d1-online.com) joined #forth 10:49:09 learning_> all im seeing is nerds 10:49:15 i figured it out: learning_ is the brogrammer 10:51:53 i've always been a nerd 10:52:06 im just from a place where nerds are socially accepted 10:52:12 zy]x[yz: at least he is trying to learn programming. Which is to say is more than many of them. 10:52:25 learning_: where is that place? Akibhara in Tokyo? 10:52:32 any place with rich people 10:52:54 rich people understand the value of being a nerd 10:54:10 when i was 16, id come home from water polo practice. i was too tired to go anywhere. no car to just drive there. wanted to do something productive. so i decided to teach myself how to make video games. ended up being way too hard, but i did learn how to program. 10:54:58 be back later 10:55:02 --- quit: learning_ () 12:15:22 --- join: pie__ (574f5734@gateway/web/freenode/ip.87.79.87.52) joined #forth 12:15:38 --- quit: gravicappa (Remote host closed the connection) 12:16:37 Hmmm... Is there a Forth-based server-side scripting language? 12:17:36 Hi guys, any recommended resources for getting started in forth? 12:18:32 I'm interested in languages as tools in general and I heard forth is rather different than the usual stuff, so I'm interested in taking a peek at it. 12:19:22 pie__: There are two books: "Starting Forth" and "Thinking Forth". 12:20:13 thanks, ill give them a look! is there a recommended usual interpreter or somesuch to use 12:21:45 https://www.forth.com/starting-forth/ 12:22:07 pie__: A very widespread option is gforth by the GNU project. 12:22:41 There are a lot of Forth dialects though. 12:35:18 john_cephalopoda: I've done some server side stuff with forth 12:35:33 In the past I ran an irc log viewer, pastebin, and a few small tools & games accessible as cgi scripts. 12:35:40 In my current work, the gopher & http servers I use on my personal servers are written in forth. 12:37:30 --- quit: dys (Ping timeout: 245 seconds) 12:37:57 I also have a private branch of my forth with cgi support that's used for a few parts of a web based order managment system, but this isn't open source 12:45:09 for something more conventional, colono is a web server with "forth server pages": https://sourceforge.net/projects/colono/ 12:45:17 --- join: mtsd (~mtsd@94-137-100-130.customers.ownit.se) joined #forth 12:48:48 I think 1-9-9-1 has similar functionality (http://www.1-9-9-1.com/) 12:53:25 crc: how is that i/o addition, inspired by DCPU-16, to nga going? 12:56:44 done, except for adding to the nga-in-retro implementation (for debugging purposes) 12:58:01 it's actually pretty nice now that it's done. rewriting the i/o code to use it took a little longer than I had wanted, but it's definitely better now 12:59:44 kewl 13:02:02 you updated the docu for nga to reflect that new i/o model? 13:02:46 Yes, http://forthworks.com/retro/s/literate/Nga.md 13:03:02 --- join: dys (~dys@tmo-102-196.customers.d1-online.com) joined #forth 13:03:48 and http://forthworks.com/retro/s/doc/DEVICES.txt 13:05:33 crc: pretty good! 13:12:22 crc: but I see you are still using zero terminated strings for paths to files in the file device. 13:14:38 yes, retro's strings are zero terminated. 13:15:29 which requires copying when getting substrings out of them 13:16:03 the pro of str_addr str_length pair on the stack is that you dont need to copy anything in memory 13:16:34 the con is that the larger string must live for the duration for any str_addr str_length pair that points into it 13:17:15 true. but I haven't found this to be a problem in my uses since I switched to zero terminated many years back 13:17:27 Zero terminated strings are absolutely solid 13:18:34 both have their pro and cons. The addr&length one is handy for embedded systems that have much less memory 13:18:36 pie__: Starting Forth 13:19:39 and there's a video of Sam Falvo II livecoding a quasi-markdown parser on youtube that is (personally) the best Forth tutorial 13:19:41 retro isn't really targetted towards embedded systems. I've run it on systems with as little as 64K RAM, but that doesn't leave much space if using the standard library 13:21:21 Well, embedded you might not need string handling, sets, file i/o etc 13:22:00 crc: what I miss from ngaro which isnt in nga is the meta access. How many cells are on the datastack and ditto for the returnstack is what I am looking for. Why? Then I can make an image that can be saved and restored. 13:23:07 From wherever it is in its program execution. 13:23:27 stack depths can be queried: 13:23:29 This doubles as a means of introspection into the VM state. Negative 13:23:29 addresses correspond to VM queries: 13:23:29 | Address | Returns | 13:23:29 | ------- | ------------------- | 13:23:29 | -1 | Data stack depth | 13:23:30 | -2 | Address stack depth | 13:23:31 | -3 | Maximum Image Size | 13:23:49 (using `fetch`) 13:24:12 WilhelmVonWeiner: thanks 13:24:28 There's no direct access to the stacks though, so some additional VM support may be needed 13:24:37 crc: oh! Then I hadnt read the documentation in enough detail then. 13:26:05 bbl 13:26:07 crc: knowing how deep the stacks is enough for me. I have four routines. Two of them to store the datastack into memory by iterate dstack-depth times, one that does the same for returnstack and then two restore routines. 13:26:39 --- quit: pie__ (Quit: Page closed) 13:28:04 crc: in the resultant image file there is a bit at the start that invokes the restore routines. 13:29:44 (plus reinit any apropos i/o if applicable) 13:30:59 makes sense 13:31:36 * crc will be exploring this for the retro-as-an-os stuff next year 13:35:03 I've started looking at x86_64 assembler to write a Forth. 13:35:38 to boot with? 13:36:00 Maybe? Seems quite complicated though 13:36:06 yeah 13:40:55 I'm not sure about x86-64. I have a bootable system for x86, looking at RPi and similar as potential targets 13:51:43 --- quit: mtsd (Quit: WeeChat 1.6) 13:52:32 Oh, I completely forgot you'd written Nga for x86 13:53:42 Will definitely look over your code 13:54:48 And a video driver from Sav Falvo?! Excelsior! 13:58:00 Yes, video driver from his old fts/forth, 13:58:26 keyboard driver from tcn's retro4 13:59:28 hmm, I may need to add the new i/o instructions to this; can't remeber if I did so previously... 14:06:38 --- quit: mark4 (Ping timeout: 250 seconds) 14:08:20 finished checking, retro/386 does use the new I/O 14:50:40 --- quit: alexshendi (Read error: Connection reset by peer) 15:01:57 --- join: mark4 (~mark4@12.41.103.244) joined #forth 15:02:01 --- join: alexshendi (~yaaic@ip2505f447.dynamic.kabel-deutschland.de) joined #forth 15:27:19 ahh.. vodka.. Now I can scroll waaaaaay back and see if I missed anything 15:29:09 john_cephalopoda: there is also a book called "Moving Forth" - or so Amazon claims. 15:32:40 ok, that was easy. Play on, lads. 16:12:25 http://www.bradrodriguez.com/papers/moving1.htm 16:15:17 Yes, and it's an ebook and paperback 16:22:23 --- join: rdrop-exit (~markwilli@112.201.164.82) joined #forth 16:26:56 Hello Forthwrights 16:27:13 hiya, rdrop-exit 16:27:37 --- quit: john_cephalopoda (Ping timeout: 252 seconds) 16:27:46 Hi PoppaVic 16:29:22 --- join: john_cephalopoda (~john@unaffiliated/john-cephalopoda/x-6407167) joined #forth 16:34:56 --- quit: alexshendi (Read error: Connection reset by peer) 17:03:29 --- quit: dddddd (Ping timeout: 240 seconds) 17:08:09 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 17:09:21 --- join: learning_ (~learning@47.149.80.42) joined #forth 17:09:42 hey guys 17:09:47 Hi learning_ 17:10:39 howdy 17:15:44 how do i enable vim mode for gforth repl lol 17:16:37 hahahahahahahahahahaha 17:22:38 begin 2over search while 17:22:46 search creates the flag for while right 17:24:02 does it? 17:24:53 im stepping through the code right now so :P 17:28:39 are any of the loop constructs more popular than the others 17:29:32 "the"? look, every imp has plus/minus - gforth happily combines most everything makes me want to scream 17:29:35 --- join: tabemann (~tabemann@h193.235.138.40.static.ip.windstream.net) joined #forth 17:32:09 lol 17:33:20 question - good idea of bad idea - optimizing one's forth implementation by turning many very common words into "smart" words - words with separate compilation and interpretation semantics, so they are immediate, but compile themselves in an inlined fashion when in compilation mode? 17:33:38 *good idea or bad idea 17:34:20 the problem is this changes how EXECUTE acts when these are invoked with it in compilation mode 17:35:06 e.g. : compile-me ['] smart-word execute ; immediate 17:35:13 would behave differently from 17:35:26 : compile-me ['] dumb-word execute ; immediate 17:36:21 i'm struggling to understand /string 17:36:34 /string c-addr1 u1 n – c-addr2 u2 string “slash-string” 17:36:34 Adjust the string specified by c-addr1, u1 to remove n characters from the start of the string. 17:36:59 all it seems to do is make the second string empty when i try to use it 17:37:18 /string adds n to c-addr1 while removing n from u1 when forming c-addr2 and u2 17:37:44 s" abc" 1 s" no way" /string type type => abc 17:38:03 Adjust the character string at c-addr1 by n characters. The resulting character string, specified 17:38:05 by c-addr2 u2, begins at c-addr1 plus n characters and is u1 minus n characters long. 17:38:43 so c-addr2 u2 should store the result, right? but all im getting is an empty string 17:38:57 all it does is adjust a pointer and a count 17:39:01 learning_: Try this: S" Hello, world" 5 /STRING TYPE 17:39:33 ohh 17:39:40 im reading the stack-comment incorrectly my bad 17:40:03 i was interpreting it as it needed, string int string instead of string int => string 17:40:05 This puts "Hello, world" into a temporary location and puts ( addr len ) onto the stack. Then I put 5 onto the stack, and it returns ( addr+5 len-5). 17:40:14 And that is typed. 17:40:24 Yup 17:40:36 ty guys 17:40:45 np 17:40:59 I just thought of something 17:41:12 a flag for tasks to indicate that they are smart words 17:41:19 s/tasks/words 17:41:46 tabemann: What would you use those "smart" words for? 17:41:55 john_cephalopoda, optimization 17:42:08 essentially inlining without requiring special inlining logic 17:42:25 Inlining what exactly? 17:42:31 this 1991 file defines a bunch of string operators which is really nice for a newb to learn from 17:42:43 really common things like 2dup 17:43:18 learning_: Check out http://dl.forth.com/sitedocs/dpans94.pdf 17:43:51 im using gforth. is it ansi compliant 17:44:05 tabemann: You mean it would translate directly to ">R DUP R> DUP" instead of putting the token of 2DUP there? 17:44:14 learning_: It's pretty much ANSI compliant. 17:44:38 cool 17:44:45 I implemnted it as "OVER OVER" but yeah that 17:45:34 How is OVER implemented? 17:45:54 carefully? 17:45:55 i cant wait to learn more low level forth just so i can do things like write colon definitions that store the source code 17:46:12 see OVER 17:46:29 it's implemented by doing pointer arithmetic on the parameter stack 17:46:32 hexadecimals pop up lol 17:46:35 tabemann: You could theoretically just tell the compiler to resolve everything down to the lowest level. 17:47:15 tabemann: But you are trading space for speed there. Instead of just one address you'd have two addresses stored. 17:47:24 but space is not a concern for me 17:47:29 this machine has 16 GB of RAM 17:47:44 But also 4GHz of CPU, so is speed a concern? ;) 17:48:14 whereas it turns out that attoforth is not as fash as I'd wish, unless I were to do something like rip out the core of attoforth and replace it with native code compilation 17:48:18 *fast 17:48:54 So, all in all it might make sense to just let the compiler translate every word to plain bytecode, if speed is really that critical. 17:48:56 --- quit: mark4 (Ping timeout: 250 seconds) 17:49:18 would a VM bytecode be faster than indirect threading? 17:49:34 No clue. 17:49:49 --- join: mark4 (~mark4@12.41.103.244) joined #forth 17:49:58 hey mark4 17:50:08 hi 17:50:50 tabemann: Hmm, I should look at your forth code. 17:51:27 google "attoforth" - it'll take you to the github for it 17:52:27 I already got it pulled in my git folder. 17:52:40 my ugly string hack doesn't work in colon definitions it looks like: : s ['] s" execute ; 17:52:58 only works on interpretation mode or whatever 17:53:17 tabemann: Some Forths use pretty low-level stuff to speed up things. Like saving ~1 or two stack elements in CPU registers to allow for way faster access. 17:53:28 yeah, I know 17:53:35 tabemann: why do you code in all upper case btw? you must be an old forth coder :) 17:53:42 lol 17:53:45 because I can 17:53:56 i used to use all upper case too 17:53:58 Can a match box? No, but a tin can. 17:54:00 I'm actually not that old 17:54:03 heretics, uppercase is for macro names 17:54:17 but i switched because i think lower case is easier to read but this is not a criticism 17:54:33 mark4: my eyes thank you 17:54:44 ..although sed can resolve it 17:54:54 I have a little convention of mine where I write normal implementation Forth code in uppercase, but when I want to add debugging code I add it in lowercase 17:54:58 DÜP DÜP RÖT ÄMIT 17:55:04 if only forth worked like lisp and i could turn on case sensitivity 17:55:17 so I know what code is debugging code when I want to tear it out 17:55:32 tabemann: you got "issues" 17:55:39 ANS forth actually says that case sensitivity can be done but it's up to the implementor to decide. 17:55:45 I also prefer lowercase. I only use uppercase for constants (to visually distinguish them) 17:56:02 I use uppercase only for metacompilation configuration constants 17:56:07 PoppaVic, what, because I code in all uppercase? 17:56:35 tabemann: YES. AT THE LEAST. 17:56:44 lol 17:57:18 I use uppercase for everything. --~~==