00:00:00 --- log: started forth/17.01.29 00:11:15 --- quit: mnemnion (Remote host closed the connection) 00:14:58 .s predates ans 01:42:02 --- quit: I440r (Ping timeout: 240 seconds) 01:49:52 yeah I'd had .s since the 80's - just thought perhaps it was somehow missing from gforth (which I never use). 03:15:36 --- join: GeDaMo (~GeDaMo@212.225.112.221) joined #forth 06:08:41 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 06:43:58 --- quit: GeDaMo (Ping timeout: 245 seconds) 07:09:49 --- quit: Zarutian (Quit: Zarutian) 07:22:59 --- join: GeDaMo (~GeDaMo@212.225.112.221) joined #forth 07:39:56 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:2168:b312:c477:5356) joined #forth 07:44:16 --- quit: mnemnion (Ping timeout: 255 seconds) 08:28:16 --- join: mat4 (~Claude@ip5b409f21.dynamic.kabel-deutschland.de) joined #forth 08:30:08 --- quit: mat4 (Client Quit) 08:44:38 --- join: rgrinberg (~rgrinberg@24-246-56-85.cable.teksavvy.com) joined #forth 08:56:56 so guys 08:57:21 I kind of hate vocabularies and search orders 08:57:32 there has to be a better way 09:14:29 why? they're pretty straightforward. what's the problem? 09:18:05 seems prone to name collisions 09:18:19 and I don't know, I just don't understand how to use it effectively 09:18:42 maybe it's just a knee-jerk reaction because it's not what I'm used to or hoped for 09:29:22 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 09:41:16 --- quit: neceve (Quit: Konversation terminated!) 09:45:37 It's exactly how you avoid name collisions. 09:46:20 I always wondered how Emacs works. it doesn't have namespaces and it has a ton of code 09:46:56 + random libraries people write. and it still works 09:47:02 unbelievable 10:20:25 random libraries probably use a plugin interface 10:20:36 no externally-linked symbols 10:26:50 zy]x[yz: could you give an example use case in which vocabularies / wordlists are incapable of handling it? 10:27:26 zy]x[yz: all functions are global 10:27:30 and most variables 10:37:52 emacs bascially uses some variant of lisp for its code iirc. 10:41:02 yes, Emacs Lisp 10:43:57 because of lexical scoping you dont get that namespace pollution problem iirc. 10:50:50 --- join: I440r (~mark4@138-229-170-157.dhcp.ftwo.tx.charter.com) joined #forth 10:51:46 Zarutian: most libararies don't yet use lexical scoping. Elisp has dynamic scoping by default. lexical scoping is a recent addition 10:52:03 oh, I see 11:05:02 --- join: mnemnion (~mnemnion@2601:643:8102:7c95:2168:b312:c477:5356) joined #forth 11:18:09 --- join: circ-user-kCDGy (~circuser-@67.213.212.240.adsl.inet-telecom.org) joined #forth 11:51:17 --- quit: circ-user-kCDGy (Read error: Connection reset by peer) 11:56:03 --- join: alexshendi (~alexshend@HSI-KBW-095-208-250-087.hsi5.kabel-badenwuerttemberg.de) joined #forth 12:04:48 <+proteusguy> It's exactly how you avoid name collisions. 12:05:10 how does it avoid name collisions if you want to reference two vocabularies that define words with the same name? 12:06:31 You specify a search order, so it uses the one it finds first 12:06:56 so there's no way to reference them both. you have to choose one or the other 12:08:23 If you need both at the same time, you can define an alias for one 12:08:54 bleh 12:09:26 seems like there's a better way 12:14:57 --- join: vsg1990 (~vsg1990@static-72-88-80-103.bflony.fios.verizon.net) joined #forth 12:18:03 `` WordSet . "name" ''? 12:18:19 I actually just discovered that myself 12:18:58 a week ago I had a module system where you import a module, give it a name (say "foo"), and then reference words in it just with "foo bar" 12:19:43 but I found this hard to read and it was kind of limited, there was no clean way to add words to a module once it had been "closed" 12:19:48 --- quit: rgrinberg (Remote host closed the connection) 12:20:29 so yeah, I was just sitting here thinking about having the "foo" just be an immediate word that pushes the address of the module vocabulary, and then a word like . to parse and search in that vocab 12:20:45 it also looks clearer to read imo 12:22:47 Unicode? 12:23:33 what? 12:24:15 heh, foo :. mybar baz ; ( starts to look like braille ) 12:24:28 --- join: rgrinberg (~rgrinberg@24-246-56-85.cable.teksavvy.com) joined #forth 12:24:44 Have You thought about using weird Unicode characters? 12:25:05 no, and I don't want to 12:25:22 . is fine. I don't plan to use it for printing numbers; I think that's dumb 12:25:32 I agree. 12:31:36 BTW there is at least one more pair of parentheses and a few more pairs of quotes in Unicode :) . 12:34:03 Actually, there are lots of different quote / bracket type characters 12:34:11 I should use an emoji 12:34:46 〔for example〕 12:34:57 nice, staples 12:35:24 If you want to use two things with the same name, is there a problem with just switching between wordlists at will? For example "floating-point >order + previous integer >order +" to use different versions of + 12:35:29 too clunky? 12:36:00 the whole thing just seems clunky to me. but like I said, I 100% admit that it may just be that I don't understand how to use it right 12:38:17 I've seen a suggestion of a word "the" which parses two words, the first being a wordlist / vocabulary name and the second one being the name of the word to search for 12:38:25 it would be used like "the floating-point +" 12:39:09 which looks more natural than float.+ in my opinion 12:39:22 I like that 12:39:46 pretty clever. seems kind of verbose though 12:41:51 reepca: How to chain them, like with `` WS1 . WS2 . name ''? 12:42:30 Can wordlists be nested? Should they be nested? 12:43:06 Oh, you mean like where a word identifying another word list is contained within a wordlist? 12:43:27 Yes. 12:45:04 Yeah, that's a limitation of the parsing-word approach. "Forth has a perfectly good interpreter if you will just accept the word order" 12:45:34 Of course, the advantage of "looks pretty to english speakers" goes out the window in that case. 12:47:58 you could also pretty easily write a word that uses c++-style namespaces, sorta like "float :: +" and have float be an immediate word that pushes the wordlist id on the stack and :: be an immediate word that searches the wordlist for the word that comes after it in the input stream and executes it (might have to be state-smart, though) 12:48:02 --- quit: karswell` (Remote host closed the connection) 13:06:58 then you could write WS1 :: WS2 :: name 13:39:45 --- quit: true-grue (Read error: Connection reset by peer) 13:41:30 --- quit: rgrinberg (Remote host closed the connection) 13:44:38 reepca, yeah, that's exactly what I was thinking 13:44:59 well, almost 13:45:43 my :: won't actually parse a word, but sets a variable that find uses to start its search, and then find always resets it back to the default before returning so that it's always one-shot 13:47:02 I suppose that fixes the state-smartness part 13:47:20 at the cost of having to change how the interpreter works 13:57:27 --- quit: GeDaMo (Remote host closed the connection) 14:02:48 --- join: circ-user-ZCCmR (~circuser-@2602:304:4159:4770:b1f8:551d:c19e:a95b) joined #forth 14:07:16 --- quit: alexshendi (Quit: Leaving) 15:07:57 --- quit: circ-user-ZCCmR (Ping timeout: 255 seconds) 15:16:13 --- join: circ-user-kCDGy (~circuser-@67.213.212.240.adsl.inet-telecom.org) joined #forth 15:36:58 --- quit: nighty (Remote host closed the connection) 16:07:22 --- join: circ-user-ZCCmR (~circuser-@2602:304:4159:4770:b1f8:551d:c19e:a95b) joined #forth 16:31:14 --- join: rgrinberg (~rgrinberg@24-246-56-85.cable.teksavvy.com) joined #forth 16:34:21 --- quit: circ-user-ZCCmR (Ping timeout: 255 seconds) 16:37:02 --- quit: circ-user-kCDGy (Ping timeout: 240 seconds) 16:37:26 --- join: circ-user-kCDGy (~circuser-@68.21.148.119) joined #forth 16:55:59 --- join: rprimus (~micro@178.79.128.27) joined #forth 16:59:17 --- join: circ-user-ZCCmR (~circuser-@2602:304:4159:4770:b1f8:551d:c19e:a95b) joined #forth 17:00:08 --- quit: circ-user-kCDGy (Ping timeout: 264 seconds) 17:03:36 --- quit: circ-user-ZCCmR (Ping timeout: 255 seconds) 17:06:56 --- join: nighty (~nighty@d246113.ppp.asahi-net.or.jp) joined #forth 17:09:44 --- quit: Zarutian (Quit: Zarutian) 17:58:11 --- quit: reepca (Remote host closed the connection) 17:58:45 --- join: reepca (~user@std-001.cune.edu) joined #forth 18:14:21 --- join: true-grue (~true-grue@176.14.222.10) joined #forth 18:14:29 --- join: ACE_Recliner (~ACE_Recli@c-50-165-178-74.hsd1.in.comcast.net) joined #forth 18:16:21 --- quit: dys (Read error: Connection reset by peer) 18:30:32 --- join: neceve (~ncv@79.113.88.232) joined #forth 18:30:32 --- quit: neceve (Changing host) 18:30:32 --- join: neceve (~ncv@unaffiliated/neceve) joined #forth 18:44:22 --- quit: ACE_Recliner (Ping timeout: 260 seconds) 18:46:45 --- join: ACE_Recliner (~ACE_Recli@c-50-165-178-74.hsd1.in.comcast.net) joined #forth 19:08:26 --- join: circ-user-ZCCmR (~circuser-@2602:304:4159:4770:b1f8:551d:c19e:a95b) joined #forth 19:13:01 --- quit: reepca (Remote host closed the connection) 19:35:04 --- join: reepca (~user@std-001.cune.edu) joined #forth 19:39:00 --- quit: proteus-guy (Read error: Connection reset by peer) 19:39:17 --- join: proteus-guy (~proteusgu@14.207.171.119) joined #forth 19:52:40 --- quit: circ-user-ZCCmR (Remote host closed the connection) 20:14:49 --- join: wa5qjh (~Thunderbi@121.54.90.152) joined #forth 20:33:57 zy]x[yz, forth words have hyperstatic scope. If you're trying to use scope parameters to pick words then you're likely not doing something correctly. You should alway be working within the scope of a local context and generally only words that further specialize the prior word will reference the original - and these two words have the same name typically. 20:34:00 http://wiki.c2.com/?HyperStaticGlobalEnvironment 21:02:36 I would assume that the problem mostly appears when you try to reuse code from two orthogonal things that happen to contain the same names 21:02:49 which admittedly does sound like a rather uncommon occurrence. 21:06:10 --- quit: neceve (Quit: Konversation terminated!) 21:30:33 --- quit: APic (Ping timeout: 248 seconds) 21:35:18 --- join: dys (~dys@ip-109-44-1-147.web.vodafone.de) joined #forth 21:40:09 --- join: APic (apic@apic.name) joined #forth 21:48:06 --- quit: rgrinberg (Remote host closed the connection) 22:02:48 --- quit: vsg1990 (Quit: Leaving) 22:40:53 true-grue, Prolog is amazing, but first language? I don't know, it is too different, imho 22:49:54 The main issue with Prolog is that you need to understand how Prolog machine works if you want to have good understanding of what's going on. Learning it with all low-level imperative details may be too complex for the novice. 22:52:56 --- quit: ACE_Recliner (Remote host closed the connection) 22:57:17 true-grue, i say forth has that same requirement. good C has that same requirement too and an in depth understanding of how the c compiler works internally is beyond 99.9999999999999999999% of all c coders including me lol 22:57:25 which makes all of their code inherently bad 22:57:29 imho 22:57:43 learning the internals of forth is TRIVIAL 22:57:50 a complete and utter non issue 22:59:35 --- quit: wa5qjh (Remote host closed the connection) 23:04:15 It's interesting that C abstract machine is trivial one too. Yes, a nontrivial thing here is the translation process itself. 23:04:30 --- join: dual (~bonafide@subzeroup.core.rzwireless.net) joined #forth 23:05:44 the c programing languae is very minimal 23:06:05 but you also have the macros, the headers, the includes and the parsing which is a NIGHTMARE 23:51:17 --- quit: proteusguy (Ping timeout: 255 seconds) 23:59:59 --- log: ended forth/17.01.29