00:00:00 --- log: started forth/16.12.30 00:20:53 --- join: mtsd (~mtsd@customer-46-39-122-235.stosn.net) joined #forth 00:28:08 --- quit: mnemnia (Remote host closed the connection) 00:32:41 Ok so this is javascript code 00:33:10 run_stack([1, 1, plus, console_log_pop]) 00:34:06 I've gotten it doesn to where the syntax works nearly exactly like forth except for the commas, and of course prepending the run_stack([ appending the )] 00:34:19 though no extra syntax is added 00:34:39 run_stack([ 00:35:17 [1, 1, plus, console_log_pop], runStack]) 00:35:58 I can quote a word or a series of words by putting it in array 00:36:09 [[[this_is_quoted_three_times]]] 00:37:27 run_stack([ 99, 99, [ console_log_peek, " bottles of beer on the wall!", 00:37:45 console_log_peek, " bottles of beer!", 00:37:58 oops I meant to reverse those let me type this in a file 00:41:38 https://hastebin.com/ihujavusak.sm 00:41:48 That's ordinary javascript with no syntax added 00:42:16 my do_loop takes one positive number and counts down from that number to zero 00:42:50 and my if statements work like factor ifs in that they take a number and two quoted set of words from the stack 00:44:49 https://hastebin.com/isobokutob.scala 00:45:01 here you can see the if statements are postfix and not infix and this is done through quoting 00:45:58 You could argue that using quotes creates an infix notation and that is certainly true, but once you parse those brackets then you are left with a set of postfix words 00:46:09 and any postfix language has some postfix notations 00:46:14 *infix notations 00:46:45 To allow for quoting of series of words in this way has good advantages which I like factor for 00:55:00 --- join: mat4 (~Claude@ip5b40a3c3.dynamic.kabel-deutschland.de) joined #forth 00:56:57 --- quit: mat4 (Client Quit) 02:09:36 --- join: true-grue (~true-grue@176.14.222.10) joined #forth 02:34:23 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 02:38:47 --- quit: mnemnion (Ping timeout: 260 seconds) 04:12:27 --- quit: pointfree (Ping timeout: 258 seconds) 04:38:20 --- quit: ricky_ricardo (Ping timeout: 245 seconds) 04:53:39 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 04:57:56 --- quit: mnemnion (Ping timeout: 256 seconds) 05:12:17 --- quit: mtsd (Quit: leaving) 06:41:15 --- join: pointfree (uid204397@gateway/web/irccloud.com/x-zaycyqcgpidmaiia) joined #forth 06:43:33 --- quit: beretta (Quit: Leaving) 07:10:10 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 07:14:35 --- quit: mnemnion (Ping timeout: 248 seconds) 07:24:36 --- join: ricky_ricardo (~rickyrica@2601:240:4203:ecb0:fce5:a791:6d6a:bbd5) joined #forth 07:44:15 --- join: rgrinberg (~rgrinberg@24-246-56-85.cable.teksavvy.com) joined #forth 08:30:09 --- join: Zarutian (~zarutian@168-110-22-46.fiber.hringdu.is) joined #forth 09:04:55 --- join: mark4 (~mark4@138-229-170-157.dhcp.ftwo.tx.charter.com) joined #forth 09:05:07 found that PDF of the old 6502 Fig Forth :) 09:21:02 mark4: got an url to it you are willing to share? 09:23:43 --- quit: true-grue (Quit: Leaving) 09:24:10 --- join: true-grue (~true-grue@176.14.222.10) joined #forth 09:39:35 --- quit: ricky_ricardo (Ping timeout: 245 seconds) 09:48:11 --- quit: mark4 (Read error: Connection reset by peer) 09:51:46 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 09:55:32 --- join: Mat4 (~claude4@ip5b410184.dynamic.kabel-deutschland.de) joined #forth 09:55:58 --- quit: mnemnion (Ping timeout: 246 seconds) 09:56:20 hello 10:05:57 --- join: mnemnion (~mnemnion@71.198.73.193) joined #forth 10:14:47 --- quit: true-grue (Read error: Connection reset by peer) 10:18:51 --- join: true-grue (~true-grue@176.14.222.10) joined #forth 10:23:28 FIG Forth documentation: 10:23:36 http://www.forth.org/fig-forth/fig-forth_6502.pdf 10:23:56 http://www.dwheeler.com/6502/FIG6502.ASM 10:24:10 http://www.dwheeler.com/6502/fig-forth-glossary.txt 10:25:30 Forth implementation (the classic threading approach): 10:25:31 http://www.bradrodriguez.com/papers/moving1.htm 10:27:00 Modern Forth: 10:27:03 http://forthworks.com/retro/12/ 10:27:38 http://www.oforth.com/ 10:27:56 http://dev.ronware.org/p/reva/home 10:28:41 I just found those brad rodriguez articles myself a few days ago. I feel like they've helped me more than any other single resource so far 10:30:30 yes, very introductive and influentive 10:35:41 --- join: vsg1990 (~vsg1990@static-72-88-80-103.bflony.fios.verizon.net) joined #forth 10:36:21 Yes, he's one of the few real Forthers. 10:37:16 ... whatever a real Forther may be 10:38:49 He understands programming far beyond Forth. He does practical things. He even was able to use Forth in his paid job. Heck, he has a job! 10:39:19 I see 10:39:54 so if I have a job am I a real forther? 10:40:20 in addition you must be able to use Forth at work 10:40:56 I can use it in the sense that I ocassionally ssh home and work on my forth without telling anyone 10:42:50 --- quit: rgrinberg (Ping timeout: 252 seconds) 10:44:29 I've used Forth for satellite image generation at work 10:45:22 cool 10:46:33 I work at a telecom equipment vendor. fiber optic switches and stuff; it's all c++, unfortunately 10:50:13 --- join: rgrinberg (~rgrinberg@24-246-56-85.cable.teksavvy.com) joined #forth 10:53:52 --- quit: gravicappa (Ping timeout: 265 seconds) 10:56:43 thanks god, it's not a vendor of flight or ABS motor control systems...... 10:59:08 anyhow, I've heard some companies now use Rust 11:02:25 Yes, Mozilla. It's always good to use your own instruments for your needs, in case, of course, if you qualified enough to write your own compilers and stuff. 11:02:47 then there seem to be an increasing usage of Lua for embedded programming (which was foreseeable) 11:03:08 Fixed a CNC machine whose realtime control computer ran forth. Damn nice to use to diagnostic what was wrong. (Turned out an input pin got fried, was rather easily fixed by adding an shift register and changing the word that read that pin) 11:03:54 Lua has some issues. Why array indexes are starting from 1? Why big ugly word "local"?... 11:05:02 true-grue: first is because it started its life as an data entry format. 11:05:15 I don't think that these are really obstacles for it usage 11:05:35 true-grue: the 'local' thing is because it wasnt until later that they got lexical scoping and stopped using globals 11:05:43 https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html 11:06:48 --- quit: proteusguy (Ping timeout: 258 seconds) 11:07:00 really, how much script language conditioned programmes care about such details ? I doubt many 11:08:02 aside from the Algol-68 syntax Lua is okayish 11:09:09 In fact, Lua can do more. Thanks to LuaJIT is one of the fastest dynamical languages around. It would be possible to replace Python with Lua. But in reality Python is better designed PL despite its complexity. 11:10:10 syntax preferences are higly subjective and depend on habituation and conditioning according to my personal, subjective observation 11:10:36 Python is missing any real way of object encapsulation while Lua has at least one 11:12:14 < Zarutian> true-grue: the 'local' thing is because it wasnt until later that they got lexical scoping and stopped using globals 11:12:26 I don't think that's purely for historical reasons 11:12:43 lexical scoping without global-by-default is ugly 11:13:01 Zarutian, Is it so bad if you can't write you favorite "public static ..." in Python? :) 11:13:14 for example, assuming local-by-default: x = 7 do x = 3 end print(x) -- what prints, 7 or 3? 11:13:46 did "x = 3" reassign to the x in the higher scope, or did it create a new x that shadows the other one? 11:14:03 zy]x[yz, The language design goals of Lua are somewhat comparable to Forth in that a minimalistic but extensible language was prefered 11:14:27 yes 11:15:23 If you take a look to the Lua codebase then you'll find that its internals are not minimalistic at all. 11:16:00 but I've had the "why is it global by default?!?!?!?" discussion a million times in #lua, and I found that usually the person criticizing it didn't think it all the way through. lua uses global by default because for lexical scoping it makes the most sense 11:16:01 compared to common Algol oriented languages it is for sure 11:16:23 Mat4, Like Oberon? :) 11:16:54 true-grue: "public static ..." isnt object encapsulation. It is a requirement for me that nothing but the objects own code can access its member variables 11:17:31 lua really isn't "global by default," it's "find the nearest-scoped matching reference," which ends at the globals table 11:18:09 true-grue: and python objects are pretty much just dicts than anything anywhere in the codebase can access and change. 11:18:20 true-grue, compare it parser with that one of Pascal or more recent with languages like Julia 11:19:27 --- join: proteusguy (~proteus-g@180.183.137.14) joined #forth 11:19:27 --- mode: ChanServ set +v proteusguy 11:20:01 or even C: https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm 11:20:37 that's the one for Lua: http://lua.coders-online.net/8 11:21:04 Zarutian, What's the point of using such "protection" in a dynamic language? 11:22:20 ^above notation also shows that Lua must share some inspirations from early, functional languages 11:24:28 true-grue: reliabilty, testability, information hiding and enforced looser coupling. Though that a language uses dynamic strong typing doesnt mean that this kind of protection is pointless 11:24:35 Mat4, Yes, I'm must admit that Lua has nice BNF. But still the codebase is big :) 11:26:19 in the eyes of a Forth programmer probably 11:27:16 (for me it's a large source base for example) 11:27:36 Zarutian, Or maybe you just trying to emulate Java/C++ here? In a dynamic language with the full access to the interpreter (reflection etc) you can break any rule. 11:39:54 Mat4, In fact, they've cheated with Lua BNF. For example, there is no operators precedence. Oberon BNF may look bigger, but it's ready for implementation: http://www.ethoberon.ethz.ch/EBNF.html 11:45:35 true-grue: not trying to emulate crappy Java/C++ here. Smalltalk and Self is much better to emulate but I am also using patterns from E 11:47:22 and btw Java has widely accessible reflection that can break any of its rules. 11:47:35 Zarutian, Ok, I really like Smalltak. But in my experience the problem with the "unauthorized access" to the some field is a least common one in Python. 11:47:44 --- quit: rgrinberg (Ping timeout: 252 seconds) 11:48:59 --- join: ricky_ricardo (~rickyrica@2601:240:4203:ecb0:fce5:a791:6d6a:bbd5) joined #forth 11:51:05 true-grue: even though it doesnt happen much it is still prevents Python from being used for running untrusted code with limited access 11:52:17 limted or virtualized access 11:53:00 Just use a special interpreter for you untrusted code then. Right inside Python. 11:54:29 and if that code wants to run code that it doesnt trust with subset of its access permissions? 11:55:48 if your way was used then the software would be so slow that it wouldnt be usable 11:56:10 --- join: rgrinberg (~rgrinberg@24-246-56-85.cable.teksavvy.com) joined #forth 11:57:46 true-grue, Oberon seem to be an exception in required code size :) 11:57:57 Zarutian, Well, Python is a slow language. If you want to run untrusted 3d game then.. well, compile it to C with embedded asserts (something like NaCL). 11:59:51 true-grue: you do not seem to get the point, that the untrusted code A might want to use untrusted code B. Using Matrioska embedded interpreters compounds the overhead 12:02:14 Zarutian, I agree that I see no point here :) I suggested the solutions which are working in real word (vm/interpreters, transpling with asserts). How's your "public static final" is better that it? :) 12:02:49 true-grue: why oh why do you insist that I am describing something like "public static final"? 12:03:42 Remember, we talked about one of 3 pillars of modern OOP: "encapsulation". 12:04:14 true-grue: yes. Those three words have nothing to do with that 12:04:39 --- quit: rgrinberg (Remote host closed the connection) 12:05:41 static pretty much only means, in this context, that the member variable is part of the class instance and not the object instance 12:06:06 final means that the member cannot be overwridden in a subclass. 12:06:32 You are making the assumption that oop is class based which it isnt though. 12:07:05 Real encapsulation is about combining data and code in one "virtual computer". And it's also about the interface (messaging) between these "virtual computers". 12:07:14 that is correct 12:07:14 And that's all. 12:08:12 and the real encapsulation is preventing other code but the code inside the 'virtual computer' from accessing the data inside aforesaid 'virtual computer' 12:08:25 this inability is what Python lacks 12:09:22 (inability of outside code accessing object internal data without going through the code of said object) 12:10:42 So, it's a sin, for example, to make a public field, and you absolutely should use getter/setter functions, even if it will clutter the code? 12:10:43 if you got this kind of real encapsulation and there is no 'ambient' way of accessing say networking, files or such then you got a pretty nifty foundation 12:12:18 It's really easy this kind of encapsulation not only Python, but also in Scheme and in Oberon too. 12:12:43 If you've read SICP you should already know what I mean :) 12:13:14 true-grue: here is what meta programming comes in. To you the field is declared public but in reality there are getter and setter methods 12:13:53 true-grue: yebb, you use closures as poor man objects (basically dispatching on the first argument which is the verb/selector) 12:15:00 look what TC39 has done with javascript. You can declare a field public and later if you wish replace it with getter and setter methods without the invokers of the object being anywiser. 12:15:31 Again, complication on things. Like operator overloading. Now you can't trust to a single field. You just want to read it, but in fact everything could happen in a process :) 12:15:42 and yes I have read SICP, good book. 12:16:35 "Dont Ask, Tell" principle is violated by "just want to read it" 12:19:46 So, it's easy to implement a tiny eDSL inside Python or other dynamic language with pattern matching of arguments etc for dispatching. Or you may just use Erlang. One of the best OOP languages around :) 12:19:51 and it is turtles all the way down if you 'just want to read it' when it is an address which there is not a memory register backing it but an IO mapped device 12:20:53 true-grue: if you are intrested you should look a bit into the E programming language at erights.org or Monte its decendant. 12:20:58 BTW with pattern matching you will get multimethods too :) 12:21:52 "capability-secure distributed programming" Aha :) 12:22:20 Zarutian, I've once programmed in Amiga E (which I guess is the same language) 12:24:01 Mat4: nope not the same language unless Amiga E is from electronic communities. 12:25:01 no 12:28:11 true-grue, probably an humorous statement 12:29:16 no, it is quite serious one 12:30:00 it is just the word "capability" as the name for it has the same unluck as computer science had 12:30:07 in naming that is 12:31:16 so capability=resource ? 12:32:37 a translation from Italian ? 12:32:45 nope 12:35:30 the naming was rather accidental 12:48:19 --- quit: ricky_ricardo (Ping timeout: 240 seconds) 12:51:33 Capability-based computing is not a new thing. 12:52:10 http://homes.cs.washington.edu/~levy/capabook/Chapter2.pdf 12:56:48 ah, these kinds of capabilities are meant 12:57:50 I don't think so. This book is about hardware systems. 12:58:25 I'm not sure if the authors of E aware of the forgotten technologies :) 13:06:47 of course not. However I think there mean with capability ressource related access priorities which would explain why the langauge allow '..-secure distributed programming' 13:07:03 only a guess of course 13:07:27 ^langauge=language 13:08:39 true-grue: oh, they are well aware of forgotten technologies. 13:13:37 the whole capability secure stuff arose from descriptor architectures when a few people realized that you dont need specialized hardware beyond problem/priviledged modes and MMU 13:14:12 --- join: ricky_ricardo (~rickyrica@2601:240:4203:ecb0:fce5:a791:6d6a:bbd5) joined #forth 13:18:44 as operating systems like Singularity demonstrate, any kind of security related special hardware functionality is not necessary in terms of performance as well as efficiency 13:29:14 --- quit: Mat4 (Quit: Leaving) 14:08:54 --- join: Mat4 (~claude4@ip5b410184.dynamic.kabel-deutschland.de) joined #forth 14:09:25 --- quit: Mat4 (Client Quit) 14:54:06 --- quit: true-grue (Read error: Connection reset by peer) 15:12:41 A capability system such as EROS or my IoT oriented capability Forth needs to be transparently persistent. This answers the question of "how are the first capabilities granted?" The answer is: they aren't. They were there since the system was flashed onto the mcu. 15:40:22 --- quit: proteus-guy (Ping timeout: 246 seconds) 15:40:55 --- quit: proteusguy (Ping timeout: 258 seconds) 17:25:22 --- quit: dys (Ping timeout: 246 seconds) 17:43:31 pointfree: „my IoT oriented capability Forth“ have you put that on the web somewhere? I would love to take a look 17:45:39 pointfree: it also depends if you are using c-list or cryptographically protected caps. In the latter you can get away with process-spore pattern. (Each process gets its own spore file. In that file there is a cap to the executable of the process and then anything that the process wants to keep) 17:46:45 pointfree: basically, the act of composition of the initial condition in such a system is generally called big banging it. 20:05:32 --- quit: Zarutian (Quit: Zarutian) 20:42:30 --- quit: ricky_ricardo (Ping timeout: 245 seconds) 20:45:40 --- join: gravicappa (~gravicapp@h62-133-162-208.static.bashtel.ru) joined #forth 22:00:35 --- join: proteus-guy (~proteusgu@180.183.13.253) joined #forth 23:03:48 --- quit: vsg1990 (Quit: Leaving) 23:16:39 --- join: dys (~dys@ip-109-44-0-222.web.vodafone.de) joined #forth 23:22:12 --- quit: lisbeth (Ping timeout: 252 seconds) 23:59:59 --- log: ended forth/16.12.30