00:00:00 --- log: started forth/17.01.19 00:29:28 --- join: segher (segher@65.50.211.133) joined #forth 00:43:18 --- join: dys (~dys@ip-109-44-1-144.web.vodafone.de) joined #forth 01:27:11 --- quit: mnemnion (Remote host closed the connection) 01:51:35 --- join: true-grue (~true-grue@176.14.222.10) joined #forth 02:15:17 I feel like I really should do something with forth 02:15:40 but the kind of way moore proposes and much of the community follows is not the way I intended to use forth when I was looking for it 02:16:03 I don't believe it's effective to write things from scratch to solve the problems at hand 02:17:06 I can look at ans and know it is well engineered and that if you know what you are doing you can get alot of large scale stuff done with it 02:17:30 but on the other hand I see that the community has not really rallied behind ans forth any more than they've rallieda round ansi lisp 02:19:28 I also can't get past that from what I have read people tried to build large scale applications in ans but it did not work simply because they expected all ans code to be portable to all other ans systems 02:19:42 they did not understand the difference between writing portable ans and optomized ans 02:20:38 For this reason, in this day and age where 200 gb fits into the size of a postage stamp, I can't condone using a system which separates optomized code from portable code 02:22:38 John[Lisbeth]: ansi forth is a stupid idea 02:23:09 I think ansi forth was a stupid solution to a brilliant idea 02:23:11 that's why it didn't take off 02:23:34 what's the brilliant idea? 02:23:44 find the one language to rule them all 02:27:42 that's a stupid idea 02:29:23 I've downloaded code to find out it's not ANS and that it won't even compile much less run in GNU Forth... frustrating. 02:30:22 honestly... making the decision to intentionally not code ANS-compatible Forth when it's intended to be shared and portable is the stupid idea... not ANS itself 02:30:34 or Forth200x or whatever its successor is 02:31:02 the only thing I do not like about Forth200x is the stupid local variable separators, they made them {: :} instead of just { } 02:38:24 That's very strange to hear. Most interesting and popular applications in Forth are not ANS compatible, just because there was no ANS in 80s. 02:41:48 --- quit: nighty (Quit: Disappears in a puff of smoke) 02:42:28 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:ec46:231a:2459:425e) joined #forth 02:42:51 Whole ANS-branch of Forth is doomed. There is no famous libraries/apps for ANS Forth. GForth is just a satire on Forth. It's very shameful to see when a novice is trying to use GForth right after reading of "Starting Forth"/"Thinking Forth". 02:47:30 --- quit: mnemnion (Ping timeout: 276 seconds) 02:48:36 I 2nd that 02:50:22 most of books/docs non-ANS and you get ANS on your PC) it is like "wth is going on, it doesn't work!" 02:54:17 --- join: GeDaMo (~GeDaMo@212.225.112.221) joined #forth 02:57:02 we do need a standardized Forth... otherwise, the language as a whole is going to suffer 02:57:11 if ANS is not the answer maybe 200x is 02:57:48 It should be called 210x, it'll take that long to get people to agree to it :P 02:58:01 well 202x then 02:58:16 but they started out as 200x and appear to have kept that after 2010 so... 02:59:22 the example I'm thinking of, it was something really stupid like not even using standardized lshift and rshift but instead << or >> or something 03:04:29 --- join: GeDaMo1 (~GeDaMo@212.225.112.221) joined #forth 03:04:29 --- quit: GeDaMo (Disconnected by services) 03:05:32 --- nick: GeDaMo1 -> GeDaMo 03:17:11 to get an idea why standardization is important: imagine if + did something different 03:17:14 or swap or rot 03:23:46 --- quit: wa5qjh (Remote host closed the connection) 03:24:34 Fundamental operations like that aren't really the problem, it's things like how the compiler works or how strings should be stored in memory 03:31:10 it's also some of the words like at-xy 03:34:27 That's platform specific 03:34:41 Standardisation is great if you already have a number of good applications and a number of good Forth systems. So you have existing material to standardise and companies/organizations are interested in it. The problem with Forth is that there is nothing new to adopt yet. ANS just tries to invent things or take them from C/other PLs. Meantime there are PLs without standard. Take Lua for example. 03:35:52 I think Lua only has a single implementation which makes it a de facto standard; can't say that about Forth :P 03:36:10 Lua has many implementations! 03:36:47 It has? 03:37:59 Yes, they have eLua for microcontrollers, a number of versions in JS, LuaJIT and so on. 04:19:13 I still don't understand how a language can suffer 04:20:59 just like when people complain that lua isn't popular enough, it doesn't prevent me from using it. somebody needs to explain to me why it's important for your programming language to be popular 04:21:32 Makes it easier to hire experienced people, more likely to have a wide range of libraries 04:22:59 if you think you can't hire an experienced programmer because he has decades of experience working with other languages but not yours, I wiuldn't want to work for you anyway 04:24:34 zy]x[yz: I don't care if Forth is popular or not, but those are reasons people give for wanting languages to be popular 04:25:06 I understand. I think they're bas reasons 04:25:30 bad*. goddamn touchscreen keyboard. I miss my droid with a real keyboard so hard 04:29:00 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:ec46:231a:2459:425e) joined #forth 04:34:06 --- quit: mnemnion (Ping timeout: 276 seconds) 04:36:15 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:2120:efa6:d2c3:380e) joined #forth 04:40:33 --- quit: mnemnion (Ping timeout: 258 seconds) 04:50:45 --- quit: proteusguy (Remote host closed the connection) 05:37:27 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:e593:dbaf:98df:cd8) joined #forth 05:38:49 --- join: ricky_ricardo (~rickyrica@2602:306:328f:79f0:85f9:6e54:e88f:db56) joined #forth 05:42:21 --- quit: mnemnion (Ping timeout: 276 seconds) 05:45:12 GeDaMo: how is at-xy platform specific? for a program which needs to display output on a text screen, there's no reason it should not be standardized. it's in the ANS and 200x standards 06:08:35 --- join: nighty (~nighty@s229123.ppp.asahi-net.or.jp) joined #forth 06:11:42 --- quit: mtsd () 06:40:10 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:8a4:1290:134b:a5ef) joined #forth 06:44:24 --- quit: mnemnion (Ping timeout: 255 seconds) 07:11:04 DocPlatypus: sorry, I misspoke 07:12:29 there may be platform-specific ways to implement a lot of standard words, but I see nothing wrong with standardizing the words themselves and their behavior 07:15:35 --- join: neceve (~ncv@79.115.225.255) joined #forth 07:15:35 --- quit: neceve (Changing host) 07:15:35 --- join: neceve (~ncv@unaffiliated/neceve) joined #forth 07:22:57 --- join: proteusguy (~proteus-g@180.183.98.150) joined #forth 07:22:57 --- mode: ChanServ set +v proteusguy 07:24:23 --- join: circ-user-IVSJb (~circuser-@2602:304:4159:4770:c40f:a98e:3442:8403) joined #forth 07:29:19 --- join: mark4 (~mark4@138-229-170-157.dhcp.ftwo.tx.charter.com) joined #forth 07:35:04 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a0f7:f602:8c9a:45d2) joined #forth 07:39:18 --- quit: mnemnion (Ping timeout: 255 seconds) 07:40:34 --- quit: proteusguy (Ping timeout: 260 seconds) 07:53:15 --- join: proteusguy (~proteus-g@2405:9800:b400:495c:4eed:deff:fe9f:7678) joined #forth 07:53:15 --- mode: ChanServ set +v proteusguy 09:00:44 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:a0f7:f602:8c9a:45d2) joined #forth 09:43:40 --- quit: mnemnion (Remote host closed the connection) 09:47:06 --- quit: neceve (Quit: Konversation terminated!) 10:00:00 --- quit: proteus-guy (Ping timeout: 252 seconds) 10:00:37 --- join: proteus-guy (~proteusgu@180.183.98.150) joined #forth 10:08:21 --- join: impomatic (~impomatic@host86-190-54-160.range86-190.btcentralplus.com) joined #forth 10:11:15 --- join: mnemnion (~mnemnion@104.6.70.118) joined #forth 10:25:24 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 10:25:32 --- quit: Zarutian (Read error: Connection reset by peer) 10:26:37 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 10:53:16 --- quit: impomatic (Ping timeout: 256 seconds) 10:58:30 --- join: impomatic (~impomatic@host86-190-54-160.range86-190.btcentralplus.com) joined #forth 11:07:56 --- quit: John[Lisbeth] (Remote host closed the connection) 11:20:43 I need a better way to manage vocabularies 11:20:51 what I'm doing is just janky 11:34:28 --- join: John[Lisbeth] (~user@40.86.75.178) joined #forth 11:47:00 --- quit: GeDaMo (Ping timeout: 276 seconds) 11:48:03 --- join: GeDaMo (~GeDaMo@212.225.112.221) joined #forth 12:07:56 --- quit: circ-user-IVSJb (Ping timeout: 255 seconds) 14:17:24 how are you doing it 14:17:27 and define "manage" 14:35:53 --- quit: GeDaMo (Remote host closed the connection) 14:36:38 right now I'm basically not doing it at all 14:36:57 I just dick around with latest whenever I need to 14:38:01 I would like a nice way to be able to specify that a collection of words should go into their own namespace, and then that namespace gets activated only for the duration of parsing a file 14:42:06 I'll come up with something. what I'm doing right now isn't so bad I guess, and I have more important things to be addressing 14:50:44 --- join: vsg1990 (~vsg1990@static-72-88-80-103.bflony.fios.verizon.net) joined #forth 14:56:11 ok 14:56:20 :small" tutorial 14:56:27 first a forth with NO vocabularies 14:56:48 you have a variable called "last" that points to the most recently created header 14:56:59 that header points to the previous one.. ad infinitum 14:57:18 when you create a new header you make the new header point to what last is referencing, then you set last = new header 14:57:45 foo [enter] now has to search the entire dictionary for the word "foo" 14:57:56 yes, that what mine does now 14:58:00 also. you cant have things like a forth word called "and" and an assembler word called "and" 14:58:07 so new scenario 14:58:33 you create a variable which is basically the same as last but on a per vocabulary basis 14:58:40 each vocabulary gets its OWN last 14:59:01 this allows you do do things like NOT reveal a word (set the vocabs last) until the definition is complete 14:59:08 : foo 100 0 do bar 14:59:14 no semi.. foo is not visible 14:59:34 ; updates CURRENT (a pointer to the current vocabulary) with last 14:59:42 FIND only ever searches the vocabularies 14:59:57 also. now you can have a context stack and add and remove vocabularies and set a search order 15:00:21 so asm definitions puts the asm vocabulary in context and makes all new definitions go into the asm vocab 15:00:31 now you can refer to AND (asm version) and AND (forth version) 15:00:54 most assemblers are not put into "context" until you start using them 15:01:02 code foo ( asm is now in context ) 15:01:03 asm code 15:01:05 asm code 15:01:12 end-code ( or ;code ) 15:01:32 end code reveals FOO and removes asm from context 15:01:51 there is also an improvement you can do to this that will speed up compile times 15:02:08 instead of having just ONE pointer to a thread (of linked forth headers) you have MANY 15:02:14 16, 32, 64 threads 15:02:50 when you add the most recently created word to the vocabulary once it is complete, you calculate a hash value on its name and use that as an index into the vocabulary array 15:03:23 find calculates the hash value and ONLY searches ONE of the 64/32/16 threads of each vocabulary that is in context 15:03:28 make sense? 15:05:06 a vocabulary is really just a variable. it either has ONE or MANY threads. 15:05:16 if your just creating vocs just make it ONE for now 15:05:25 yeah, I was getting pretty close to what you described tbh 15:05:33 but you had a couple of tips in there that I hadn't thought of 15:05:41 such as not linking into last until ; 15:05:47 : foo (creates a new definition but it is not visible yet. the address of its NFA is stored in "last") 15:05:48 and keeping a current variable 15:06:16 theres context (a stack of vocabs) and current (the voc thats currently getting new definitions 15:06:29 yeah, context is the other one that I was missing 15:06:31 most forths use of a context stack is very confusing 15:06:41 but ill explain how MOST forths do it 15:06:48 when you say foo bar bam (all vocs) 15:06:53 I knew I wanted something like that, but couldn't decide exactly how I wanted it to work 15:06:59 foo - a vocabulary is a does> word. 15:07:07 and what words do you use to push/pop contexts? 15:07:17 what a vocabulary DOES> when it is invoked is add itself to context 15:07:24 there are words to clear the context stack 15:07:35 only \ removes every vocabulary EXCEPT the root vocabulary 15:07:46 ALL vocabulary creating and control words are in the root vocabulary (very important) 15:07:55 forth assembler compiler foo bar bam 15:08:04 each voc adds itself to the context stack 15:08:06 definitions 15:08:18 looks at the top of the context stack, makes that voc current 15:08:29 you will often see at the top of a forth source file 15:08:47 vocabulary foo only forth also foo definitions 15:09:07 also is sort of important because when a voc adds itself to the top of the stack its NOT a push 15:09:14 its a replacement of the top of scak 15:09:17 also is like dup 15:09:29 only forth also (you now have forth and forth on the context stack) 15:09:37 foo (replaces the second forth with foo) 15:09:39 definitions 15:09:48 makes all new definitions go in the foo vocabulary 15:10:19 only forhth also compiler also assembler also blah definitions 15:10:38 to remove the top of the context stack you use "previous" 15:10:42 thats like drop 15:11:00 when you say "only forth," what's replaced? isn't the stack empty at that point? 15:11:10 or rather, doesn't it replace root? 15:11:26 so shouldn't you write "only also forth" 15:12:01 yea that part is kind of confusing to me 15:12:08 only = DROP everyting, then add ROOT 15:12:28 so only forth seems like it would overwrite ROOT with FORTH and thus remove root from context 15:12:43 by the way. every vocabulary created is put in ROOT no matter what "context" is 15:12:49 blah definitions vocabulary foo 15:13:04 the new vocabulary foo is not put inside the blah vocabulary 15:13:08 its put in ROOT. every time 15:13:20 so if you remove root from context you can no longer add or remove anything from context 15:13:27 you cant change current or anything 15:13:33 this is a good trick 15:13:37 theres a word called seal 15:13:47 vocabulary application application definitions 15:13:52 do lots of forth coding here 15:14:02 with all kinds of vocabulary manipulations and what have you 15:14:09 then invoke seal. 15:14:25 seal says drop every vocabulary from context EXCEPT the specified vocabulary 15:14:34 i cant remember if you do ' vocabulary seal 15:14:41 or seal vocabulary 15:14:49 i thin its ' applications seal 15:14:58 now when the user runs the application he is at a FORTH CONSOLE 15:15:12 but - he only has access to the words you defined in the application vocabulary 15:17:37 that's sort of what my "import" does. you use it like: " module" import foo, and opens module.4th, swaps out last so that it's only the kernel, parses module.4th, then replaces the original last and creates a new word foo which searches in the module dictionary for the next word (e.g., "hello" is different from "foo hello") 15:18:35 seems more complificated 15:18:40 yeah... 15:20:42 thanks for the explanations! you've given me some things to think about 16:17:06 --- quit: nighty (Quit: Disappears in a puff of smoke) 16:28:41 --- quit: ricky_ricardo (Remote host closed the connection) 16:39:37 --- quit: true-grue (Read error: Connection reset by peer) 17:04:36 --- join: dual (~bonafide@subzeroup.core.rzwireless.net) joined #forth 17:21:00 --- quit: Zarutian (Quit: Zarutian) 17:33:54 --- quit: dual (Ping timeout: 256 seconds) 17:35:11 --- join: wa5qjh (~Thunderbi@121.54.90.128) joined #forth 17:36:49 --- quit: mnemnion (Remote host closed the connection) 17:37:38 --- join: nighty (~nighty@d246113.ppp.asahi-net.or.jp) joined #forth 17:45:19 anyone here have a retina or similar display? 17:54:39 I have a few VS278Q-P's, but they don't have the ppi like a retina. 18:02:53 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 18:10:58 --- join: neceve (~ncv@79.115.225.255) joined #forth 18:11:07 --- quit: neceve (Changing host) 18:11:07 --- join: neceve (~ncv@unaffiliated/neceve) joined #forth 18:15:54 whats the resolution? 18:16:30 im just trying to see if a web site im working on is responsive to display resolution 18:18:09 --- quit: wa5qjh (Ping timeout: 260 seconds) 18:21:16 1920 x 1080 18:21:31 In Firefox they have a resizing tool for responsive testing. 18:21:59 Ctrl+Shift+M 18:22:11 ok thats just 1080p, i have that 18:22:29 how can i test responsiveness on a static display size lol 18:23:23 You can type in a resolution and it makes a window inside of a window that you can see how it would look. 18:24:01 If you make it bigger than your display you'll obviously have to scroll, but it'll at least give you an idea without having to find someone with a bigger monitor. 18:24:04 Can confirm, typing in resolution of 2000x2000 works on a 1600x1200 screen 18:24:36 yea it doesnt leet me sett ANY resolution, it has a pull down with a bunch of funky resolutions 18:25:00 click on the text, not on the arrow 18:28:29 kk seems like my site is kinda responsive yay 18:43:04 reepca`, dont think ive seen you in here before. are you a forth coder? and you vsg1990? 18:43:21 or are you both hiding inside alias nick names :P 18:45:07 I've been lurking for quite some time. I don't use forth professionally or anything, I'm just a student right now. But I am interested in forth, yes, and I am trying to get better with it. 18:46:14 you have a raspberry pi? 18:46:27 Yes, though it doesn't see much use. 18:46:32 https://github.com/mark4th 18:46:43 those are my two forths for linux. x86 and arm 19:02:00 mark4: Sorry was afk, I've been in here in the past, but didn't get on for quite a bit. 19:02:12 I first learned about Forth from a minecraft mod called Red Power 2 19:10:17 --- quit: neceve (Ping timeout: 258 seconds) 19:36:13 --- join: neceve (~ncv@unaffiliated/neceve) joined #forth 19:40:20 --- quit: neceve (Ping timeout: 240 seconds) 19:41:58 --- quit: proteus-guy (Ping timeout: 256 seconds) 19:43:15 --- join: proteus-guy (~proteusgu@180.183.135.196) joined #forth 19:49:59 --- join: neceve (~ncv@79.114.38.35) joined #forth 19:49:59 --- quit: neceve (Changing host) 19:49:59 --- join: neceve (~ncv@unaffiliated/neceve) joined #forth 19:54:26 --- join: ncv (~ncv@unaffiliated/neceve) joined #forth 19:54:34 --- quit: neceve (Ping timeout: 255 seconds) 20:16:23 --- join: ricky_ricardo (~rickyrica@2601:240:4203:ecb0:f4b3:54c8:a3ae:a906) joined #forth 20:37:30 --- quit: ncv (Quit: Konversation terminated!) 20:39:34 --- join: wa5qjh (~Thunderbi@121.54.90.128) joined #forth 21:35:58 --- nick: reepca` -> reepca 21:37:37 --- quit: reepca (Quit: ERC (IRC client for Emacs 24.5.1)) 21:38:12 --- join: reepca (~user@std-001.cune.edu) joined #forth 22:02:10 --- quit: vsg1990 (Quit: Leaving) 22:23:41 --- join: roboguy` (~roboguy_@209.59.124.24.cm.sunflower.com) joined #forth 22:30:16 --- quit: wa5qjh (Ping timeout: 255 seconds) 23:40:40 --- quit: roboguy` () 23:45:23 --- quit: rprimus (Ping timeout: 260 seconds) 23:47:59 --- join: APic_ (apic@apic.name) joined #forth 23:51:50 --- quit: newcup (Ping timeout: 240 seconds) 23:51:50 --- quit: APic (Ping timeout: 240 seconds) 23:52:38 --- join: rprimus (~micro@178.79.128.27) joined #forth 23:53:02 --- nick: rprimus -> Guest26208 23:59:59 --- log: ended forth/17.01.19