00:00:00 --- log: started forth/16.09.09 00:05:05 --- quit: John[Lisbeth] (Remote host closed the connection) 00:06:48 --- join: John[Lisbeth] (~user@104.210.150.234) joined #forth 00:08:19 Can you send link again I deleted virtual machine that had the link 00:13:36 Hmm maybe I should run forth on my raspberry pi 00:29:19 you could run a interpreted language forth 00:29:23 thats minimal 00:30:46 I have installed gforth 00:31:12 What would be really helpful is a book for forth that tries to teach it to someone who does not know any programming 00:32:25 oh boy but yforth is 100 kilobytes 00:34:32 starting forth by leo brodie 00:34:52 thinking forth 00:34:58 and theres other stuff 00:35:49 gotta have the smallest forth 00:36:00 smallest and fastest 00:36:10 thats not necessarily true 00:36:13 ok what about this 00:36:20 fourths that come with stuff already on the stack 00:36:23 stuff to play with 00:58:17 --- quit: nal1 (Quit: :)) 01:02:51 : greet ." Hello, I speek Forth " ; 01:23:34 It seems that you can design it in such a way that you can just write in normal sounding words to accomplish things 01:28:18 please, start to read "starting forth" ) you are reinventing thoughts from it right now) 01:32:16 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:e8e7:f96e:84a2:56ac) joined #forth 01:36:35 --- quit: mnemnion (Ping timeout: 250 seconds) 01:38:12 John[Lisbeth]: me too, i need a minimal forth too :D 01:41:01 --- quit: dys (Ping timeout: 260 seconds) 01:42:29 I will learn forth in my own way 01:42:46 You guys don't get alot of people into forth so what are the odds that I am the type of developer you want me to be. very slim 01:43:05 --- part: Inode left #forth 02:11:15 I have actually been reading startin forth apparently 02:11:23 it seems really cool 02:12:25 --- quit: karswell (Remote host closed the connection) 02:13:24 --- join: karswell (~user@216.18.189.80.dyn.plus.net) joined #forth 02:33:18 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:11c9:baf6:ab2a:662d) joined #forth 02:37:41 --- quit: mnemnion (Ping timeout: 250 seconds) 02:40:17 --- quit: ASau (Ping timeout: 250 seconds) 02:48:10 --- quit: John[Lisbeth] (Remote host closed the connection) 02:49:35 --- quit: nighty (Quit: Disappears in a puff of smoke) 03:44:19 --- join: John[Lisbeth] (~user@104.210.150.234) joined #forth 03:49:56 --- join: nighty (~nighty@s229123.ppp.asahi-net.or.jp) joined #forth 03:50:49 --- join: proteusguy (~proteusgu@49.229.118.40) joined #forth 03:50:49 --- mode: ChanServ set +v proteusguy 04:31:52 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:dea:672b:4bf1:65b) joined #forth 04:35:59 --- quit: mnemnion (Ping timeout: 250 seconds) 04:45:44 --- quit: proteusguy (Ping timeout: 244 seconds) 05:07:57 After reading a bit about forth and learning some of how to use it I am much more impressed with it than I thought I would be based on what you said. 05:08:33 basically some of the basic instructions of a computer are very efficient and can pretty much be used to preform really advanced programming tasks 05:08:47 and in a sense forth acts really closely to those 05:09:00 though on some forth systems it is bootstrapped or interpreted or bootstrapped and interpreted 05:10:34 the stack and the tokens that act on the stack allow you to program in a very versatile way using minimal things 05:11:14 so on almost anything that can be considered a turing complete system with accessable primitives it is possible to very easily build a postfix notation intepreter out of those primitives 05:14:53 the main functions are composed in a way and can build functions composed in a way that allow you use rpn without thinking much about the stack. For example if you can explain rpn to an algebra student they can do something like 2 2 + 2 + . or you can write 2 2 2 + + . knowing that it will work just as well on the stack 05:55:40 welcome to new and wonderful world 05:55:57 and don't forget to talk with DGASAU about Forth) 05:58:10 --- quit: DGASAU (Ping timeout: 276 seconds) 06:02:10 --- join: DGASAU (~user@lmpc.drb.insel.de) joined #forth 06:05:56 --- quit: DGASAU (Write error: Connection reset by peer) 06:06:41 --- join: DGASAU (~user@lmpc.drb.insel.de) joined #forth 06:47:23 do forth systems have runtime code compilation? 07:02:49 --- quit: clog (^C) 07:02:49 --- log: stopped forth/16.09.09 07:03:04 --- log: started forth/16.09.09 07:03:04 --- join: clog (~nef@bespin.org) joined #forth 07:03:04 --- topic: 'Forth Programming | logged by clog at http://bit.ly/91toWN | http://projects.forthworks.com/standards/DPANS/ | www.greenarraychips.com' 07:03:04 --- topic: set by crc!sid2647@gateway/web/irccloud.com/x-incoycbnpesmfspg on [Fri Nov 06 18:58:45 2015] 07:03:04 --- names: list (clog DGASAU nighty John[Lisbeth] karswell groovy2shoes bluekelp dograt pdewacht Vendan the_cuckoo DKordic pointfree M-jimt mekaj fiddlerwoaroof beretta ggherdov`_ _longines Quozl`_ djinni_ impomatic cantstanya jeremyheiler phadthai nha_ irsol reepca tangentstorm yunfan octophore Uniju ovf Guest23662 APic Keshl nerfur carc nighty-_ eatonphil probonono gordonjcp taij33n malyn eldre Gracana segher diginet2 dzho rprimus newcup) 07:03:57 --- join: neceve (~ncv@79.114.94.53) joined #forth 07:03:58 --- quit: neceve (Changing host) 07:03:58 --- join: neceve (~ncv@unaffiliated/neceve) joined #forth 09:02:59 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:35b6:ade2:dc65:65f1) joined #forth 09:04:04 nha_: ``A Forth System without an assembler is slightly better than no Forth System at all. '' 09:15:01 --- quit: mnemnion (Remote host closed the connection) 09:17:59 --- join: nal (~nal@adsl-72-50-84-37.prtc.net) joined #forth 09:35:54 --- join: mnemnion (~mnemnion@152.179.131.166) joined #forth 09:37:38 --- join: mnemnia (~mnemnion@152.179.131.166) joined #forth 09:39:15 --- quit: mnemnia (Remote host closed the connection) 09:39:28 --- join: mnemnia (~mnemnion@152.179.131.166) joined #forth 09:39:54 --- quit: mnemnion (Ping timeout: 244 seconds) 10:02:17 i'm was just thinking of maybe using forth as a code generating backend for some other language 10:02:41 right now im using llvm and something really basic ontop of gnu lightning that does no register allocation 10:03:08 im curious if a forth based generator would be faster/simpler 10:04:14 --- join: dys (~dys@ip-109-44-3-11.web.vodafone.de) joined #forth 10:09:01 John[Lisbeth]: read about Krivine machines. 10:10:03 John[Lisbeth]: once you do that, you'll understand that it's better not to use Forth at all. 10:13:47 well this is great 10:13:55 just have to learn french to read the wiki page 10:26:55 --- quit: nal (Ping timeout: 240 seconds) 10:31:29 nha_: IDK. 10:35:39 french? mm maybe i can translate a little or all, i'm french, #helping 10:38:12 --- join: true-grue (~true-grue@176.14.222.10) joined #forth 11:10:45 --- quit: neceve (Quit: Konversation terminated!) 11:11:21 --- join: neceve (~ncv@79.114.94.53) joined #forth 11:11:21 --- quit: neceve (Changing host) 11:11:21 --- join: neceve (~ncv@unaffiliated/neceve) joined #forth 12:20:51 --- quit: DGASAU (Read error: Connection reset by peer) 12:21:40 --- join: DGASAU (~user@lmpc.drb.insel.de) joined #forth 12:49:32 John[Lisbeth], don't worry too much about DGASAU, they just really don't like Forth 12:49:47 It 12:50:09 It's not a "Forth is awesome, it's always the best language to use" 12:50:24 but Forth does have it's uses 12:51:39 So I recently watched Samuel Falvo 's "Over the Shoulder 1" video. Anyone know if he ever made any more? 12:52:30 Also it seemed like he found it *really* easy to keep track of what was on the stack and when - no stack comments or anything. Is this something that happens naturally after some time of use or was it just a property of him having already written the code once? 12:53:58 some people can do that. I'm usually pretty good about keeping track of my stack without having to put lots of comments, but that's cause I try to only have 2~4 things on the stack 12:54:40 and I try to make words always have the same stack effect. 12:55:18 Is it usually better to order things on the stack the way you would expect it intuitively to, by looking at the word name, or the way that it would be most convenient for the place you intend to use the word at? 13:11:28 --- join: ncv (~ncv@unaffiliated/neceve) joined #forth 13:14:24 --- quit: neceve (Ping timeout: 265 seconds) 13:54:42 --- join: gyxile (~nick@cpc80309-grim18-2-0-cust167.12-3.cable.virginm.net) joined #forth 14:05:33 --- quit: true-grue (Read error: Connection reset by peer) 14:10:13 --- quit: gyxile (Remote host closed the connection) 14:14:56 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 14:29:28 --- join: ASau (~user@netbsd/developers/asau) joined #forth 15:07:28 I am sort of thinking after using it that forth has alot of the abilities of lisp 15:07:42 machine instructions at their base have alot of functionality 15:07:55 it's just the language used to script them traditinoally was terrible to use 15:08:48 in a sense a forth repl is alot like a more well thought out basic repl 15:09:03 And from a forth repl you have the ability to build whatever kind of system you could desire 15:09:11 aha 15:09:11 you can essentially build your own language really fast 15:09:12 no 15:09:19 the repl is jus syntactic sugar 15:09:24 *just 15:09:27 you don't even need that 15:09:49 John[Lisbeth]: look at how a Forth is constructed 15:10:21 for me the repl is a very important feature. I can't give up the repl 15:10:41 but that's not the clever bit 15:10:50 and it's important to understand why 15:11:31 The repl is one of the most important things to me in deciding if I like a programming language 15:11:38 and I certainly really like forth's repl 15:12:02 My history is very complicated but much of my style of programming comes from shell programming 15:12:16 okay, but the repl is utterly irrelevant 15:12:26 we will just have to agree to disagree on that one 15:12:37 no, you're missing the point 15:12:43 keep in mind this is a #forth channel so you've got to assume we are both crazy 15:12:48 --- quit: karswell (Remote host closed the connection) 15:12:57 John[Lisbeth]: that's like saying the most important thing in choosing a car is what the knobs on the stereo are like 15:13:06 some people really like those gnobs man 15:13:28 the important thing is how it actually works 15:13:36 --- join: karswell` (~user@216.18.189.80.dyn.plus.net) joined #forth 15:13:40 essentially, Forth is a virtual machine 15:14:30 Ok forth is a virtual machine. So what 15:15:02 so the code that you write can be run on any suitable Forth inner interpreter 15:15:23 your compiled code is machine-independent, within reason 15:15:38 My forth interpreter in my distro is like 500 kilobytes and there is a minimal but buggy one about 100 kilobytes 15:15:46 that's huge 15:16:09 so you are what you are saying is that if it can run the forth spec then it can run forth code the same way on any machine? 15:16:21 if you write a suitable inner interpreter, yes 15:16:29 but that's not really the clever bit 15:16:34 and it could be a language within a language 15:16:42 well yeah 15:16:46 the term is "metalanguage" 15:16:50 it's a language for writing languages in 15:17:00 Forth is mostly written in Forth 15:17:09 does it have something like lisp eval()? 15:17:25 nha_: possibly, what does that do? 15:17:58 enables runtime code gen 15:18:11 or allows rather 15:18:52 give me an example of how you'd use it 15:19:47 who are you asking? 15:19:52 nha_: 15:19:52 lets say to generate a minimal perfect hash function from input supplied at runtime 15:19:59 and have it compiled to machine code 15:21:22 okay there might be a bit of a language barrier here 15:21:32 if you wanted to use eval() what would you type in 15:21:37 and what result would you expect? 15:23:33 i cant think of an example that doesnt require a lot of background explaining 15:23:40 basicly i just want to write code that generates other code 15:23:43 at runtime 15:24:41 transpiling? 15:24:47 https://en.wikipedia.org/wiki/Eval 15:25:04 or perhaps you are trying to produce a binary file 15:27:16 (eval [+ 1 2]) becomes (+ 1 2) which becomes 3 15:27:25 where [] is an arbitrary list generated at runtime 15:27:42 shorthand for (cons + (cons 1 (cons 2 ()))) 15:29:56 nha_: oh 15:30:21 so you mean "calculate some value" then? 15:30:27 Forth would use [ and ] for that 15:30:43 calculate a function which calculates a value is more like it 15:31:06 nha_: you can set a word to be IMMEDIATE 15:31:13 so even in the middle of compilation it'll run 15:31:31 but once a binary is produced no more code gen is possible at runtime right 15:32:04 like lets say "[+ 1 2]" is not known at compile time 15:47:40 --- join: CodeTortoise (~CodeTorto@2602:306:37fe:b70::46) joined #forth 16:06:03 I'm working my way through starting forth 16:10:12 --- quit: ncv (Quit: Konversation terminated!) 16:17:00 --- quit: Guest23662 (Read error: Connection reset by peer) 16:51:27 --- quit: mnemnia (Remote host closed the connection) 16:54:25 --- quit: Zarutian (Quit: Zarutian) 16:55:47 --- join: mnemnion (~mnemnion@152.179.131.166) joined #forth 16:59:54 --- quit: mnemnion (Ping timeout: 240 seconds) 17:13:27 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 17:17:47 --- quit: mnemnion (Ping timeout: 250 seconds) 17:22:18 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 17:29:01 I assume forth is ported almost everywhere 17:29:18 and once you have fourth you can build whatever syntax you want to make things easy for your programmer. 17:29:22 --- quit: karswell` (Remote host closed the connection) 17:30:01 I personally would redefine functions like . and + in order to make them easier to read 17:30:21 --- join: karswell` (~user@216.18.189.80.dyn.plus.net) joined #forth 17:39:27 I might try to come up with function definitions which are phonetically parseable 17:49:14 --- join: mnemnia (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 17:50:17 --- quit: mnemnion (Ping timeout: 250 seconds) 17:51:09 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 17:53:45 --- quit: mnemnia (Ping timeout: 250 seconds) 18:04:42 --- join: mnemnia (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 18:05:53 --- quit: mnemnion (Ping timeout: 250 seconds) 18:07:57 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 18:08:25 --- quit: mnemnia (Read error: Connection reset by peer) 18:41:46 --- join: mnemnia (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 18:44:27 --- quit: mnemnion (Ping timeout: 250 seconds) 18:44:27 --- join: mnemnion_ (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 18:44:44 --- nick: karswell` -> karswell 18:45:10 --- quit: karswell (Quit: ERC (IRC client for Emacs 24.5.1)) 18:46:11 --- quit: mnemnia (Ping timeout: 250 seconds) 18:46:27 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 18:48:47 --- quit: mnemnion_ (Ping timeout: 250 seconds) 18:53:32 --- join: mnemnia (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 18:54:16 --- quit: mnemnion (Ping timeout: 276 seconds) 18:55:43 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 18:57:53 --- quit: mnemnia (Ping timeout: 250 seconds) 19:03:37 --- join: lambda-11235 (~lambda-11@184.63.207.209) joined #forth 19:35:34 --- quit: dys (Ping timeout: 240 seconds) 19:45:22 --- join: Skuzzzy (~Skuzzzy@149-169-125-18.nat.asu.edu) joined #forth 20:12:40 I am curious if there have been any major attempts to make package repositories for forth 20:12:49 or what kinds of languages that have been designed with forth 20:23:19 --- join: mnemnia (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 20:24:59 --- quit: mnemnion (Ping timeout: 250 seconds) 20:25:20 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 20:27:19 --- join: mnemnion_ (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 20:27:45 hmm maybe around gforth but no idea... I know that postscript is forth-like but not usually implemented in forth 20:28:00 --- quit: mnemnia (Ping timeout: 250 seconds) 20:29:25 --- join: mnemnia (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 20:29:44 --- quit: mnemnion (Ping timeout: 250 seconds) 20:30:46 --- quit: irsol (Ping timeout: 265 seconds) 20:31:55 --- quit: mnemnion_ (Ping timeout: 250 seconds) 20:32:35 --- join: irsol (~irsol@unaffiliated/contempt) joined #forth 20:33:05 --- quit: bluekelp (Ping timeout: 252 seconds) 20:39:05 --- join: karswell (~user@216.18.189.80.dyn.plus.net) joined #forth 20:40:08 --- quit: CodeTortoise (Quit: Leaving) 20:43:20 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 20:45:47 --- quit: mnemnia (Ping timeout: 250 seconds) 20:45:56 --- join: nal (~nal@adsl-72-50-85-229.prtc.net) joined #forth 20:47:34 --- join: mnemnia (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 20:49:15 --- quit: mnemnion (Read error: Connection reset by peer) 20:57:29 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 21:00:05 --- quit: mnemnia (Ping timeout: 250 seconds) 21:00:39 --- join: mnemnia (~mnemnion@71.198.73.193) joined #forth 21:01:51 Got a decent docker container for forth 21:02:08 it has an entire ubuntu base but I haven't found anything smaller that runs gforth 21:02:40 --- quit: mnemnion (Ping timeout: 250 seconds) 21:03:07 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a8ab:40a1:3e9e:2b5) joined #forth 21:04:33 --- quit: mnemnia (Read error: Connection reset by peer) 21:06:03 hmm 21:06:20 https://hub.docker.com/r/jwodder/gforth/ 21:07:07 it'd probably require some work, but m4+netbsd-rump/anykernel might be a small and supported environment that could host a forth as well (definitely not the smallest, but certainly smaller than a whole debian distribution) 21:08:02 What confuses me is how to run a single binary on top of a container 21:08:03 I'd be surprised of docker doesn't support m4 21:08:56 i.e. https://en.wikipedia.org/wiki/Rump_kernel 21:09:43 hmm not sure if that could provide a single binary 21:11:11 ah I meant l4 not m4 21:13:35 I have been considering switching back to freebsd 21:13:44 and using bsd jails 21:16:47 --- join: bluekelp (~bluekelp@bluekelp.com) joined #forth 21:22:55 rump is another concept than jails though, it allows running kernel-intended code under normal user processes without the obligatory context switches of scheduling or microkernels, and without necessarily needing to run under a unix/posix system (it could be on bare metal on a core library) 21:23:27 is there a docker container that runs there a docker container that runs the rump kernel? 21:23:29 i.e. it could provide a vfs layer + filesystem to a forth 21:23:45 I'm not sure 21:24:07 although it's one of the intentions to use rump on cloud instances if not already done 21:26:06 and that's a container and not a virtual machine? 21:27:01 presumably in both cases 21:27:51 I don't think netbsd is an available prebuilt image in my cloud service provider 21:27:56 hmm some more stuff at http://rumpkernel.org/ it seems.. I have some presentations/docs/videos about it but not hyperlinks to them without searching 21:28:20 any with xen support should run a netbsd image, but rump is not necessarily to run on top of netbsd 21:30:40 i.e. there is a netbsd/rump based userland utility for filesystem manipulation that can run on linux, but uses the kernel-intended file system drivers to do its work 21:31:05 i.e. to manipulate file system images from scripts without mounting them 21:31:44 so it's just a framework to import drivers and such for general applications 21:32:04 or to help develop drivers in userland in the testing phase 21:32:49 good night, I just hope it can inspire, I actually have no personal experience using it :) 21:34:04 --- join: dys (~dys@ip-109-44-3-11.web.vodafone.de) joined #forth 21:35:34 hmm well not exactly true, I have used it to mount cdroms or usb keys as it's integrated in netbsd mount as an option for untrusted images to just crash processes if malformed instead of panicking the kernel 21:35:50 but have not yet used it in other contexts 21:41:25 nha_: Not sure if you're still here, but Forth has EVALUATE. It takes a string instead of a list/atom like in lisp, but it's the same idea. One of the important things to note, though, is that *anything you can do with EVALUATE in Forth you can do with other means*. To use your example, generating a function based on information only available at runtime. Assuming you haven't used a tree shaker or something like that, your program 21:41:25 should still have the entire forth in it (not a big problem because forths can be very small). : is available, COMPILE, is available, FIND is available. 21:44:10 Information giving you the names of necessary operations can be used in conjunction with FIND to get xts, which can be used in conjunction with COMPILE, and : (or :noname if you don't want to give a name to it) to get a runtime-dependent definition. Which, if you think about it, is exactly what you're doing in a REPL. Only it's available all the time. 22:07:53 --- quit: Skuzzzy (*.net *.split) 22:07:53 --- quit: cantstanya (*.net *.split) 22:07:53 --- quit: carc (*.net *.split) 22:07:54 --- quit: the_cuckoo (*.net *.split) 22:07:54 --- quit: Vendan (*.net *.split) 22:07:54 --- quit: APic (*.net *.split) 22:07:54 --- quit: Keshl (*.net *.split) 22:07:54 --- quit: gordonjcp (*.net *.split) 22:07:54 --- quit: mnemnion (*.net *.split) 22:07:54 --- quit: nal (*.net *.split) 22:07:54 --- quit: karswell (*.net *.split) 22:07:54 --- quit: groovy2shoes (*.net *.split) 22:07:55 --- quit: djinni_ (*.net *.split) 22:07:55 --- quit: jeremyheiler (*.net *.split) 22:07:55 --- quit: nighty-_ (*.net *.split) 22:07:55 --- quit: eatonphil (*.net *.split) 22:07:55 --- quit: diginet2 (*.net *.split) 22:10:51 --- join: cantstanya (~chatting@unaffiliated/cantstanya) joined #forth 22:19:19 --- quit: lambda-11235 (Quit: Bye) 22:25:38 --- join: Skuzzzy (~Skuzzzy@149-169-125-18.nat.asu.edu) joined #forth 22:25:39 --- join: carc (~carc@unaffiliated/carc) joined #forth 23:34:25 --- quit: impomatic (Ping timeout: 276 seconds) 23:54:56 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 23:59:59 --- log: ended forth/16.09.09