> ooRexx will never be high speed because it's implementation is > fundamentally ineffecient.
That seems to be begging the question. Certainly the current implementation is inefficient, but what fundamental issue prevents a more efficient implementation? For that matter, what fundamental issue prevents compiling into Java bytecode with a large runtime similar to the CREXX runtime? -- Shmuel (Seymour J.) Metz http://mason.gmu.edu/~smetz3 ________________________________________ From: IBM Mainframe Discussion List [[email protected]] on behalf of David Crayford [[email protected]] Sent: Monday, January 10, 2022 8:13 AM To: [email protected] Subject: Re: Ad message paradigm (Re: Ad NetRexx (Re: Ad programming features (Re: ... Re: Top 8 Reasons for using Python instead of REXX for z/OS On 10/1/22 8:34 pm, Rony G. Flatscher wrote: > On 09.01.2022 16:29, Seymour J Metz wrote: >>> Well all of your languages miss the support for the message paradigm. >> What do you mean by "the message paradigm"? How does it differ from sending >> method invocation and response messages to objects? > The message paradigm as set forth by Smalltalk explicitly defines a class for > messages, allows for > intercepting messages, rerouting messages at the will of the programmer and > much more, as messages > themselves become objects that the programmer can interact with, if needed. > > ooRexx implements the message paradigm in full, something that is easily > overlooked as usually it is > not necessary to be aware of it. If it's not necessary then why did you make such a big deal about it? > As you can see, if there should be need for adding external functions and/or > methods to ooRexx, this > can be done with the powerful and easy to use C++ API of ooRexx. As a matter > of fact BSF4ooRexx and > dbusoorexx are using those native C++ APIs allowing high speed and using all > that is available in > and via the C++ world. ooRexx will never be high speed because it's implementation is fundamentally ineffecient. Most scripting languages compile to bytecode which is then processed by a VM. For example, the Lua VM is less tha 2K lines of code and can fit into L2 cache which is why it's blistering fast https://secure-web.cisco.com/1toUKHC4qJ1L65nxMUHlKxOYU0nCw63de1WYnrGbKff1yrwqYGas-OyWjVfJCDmHbQ8-AEVUh6XufmmTHQpXuiui1Oz3dT6hK9s0lRpekgPRdl4akdM0MwK100qVFGPYGqGt81W8-MPFrje4gSpXNazzn4fMSiHGgSWDamtQAH5tueZ_8T8aa5iE1pL9UvLLcIjjfsFGUK-P4tUucjxCM8HO0LyO8nmOWh_0CeNAdWcuWTrN5Em2BLnvFL5WapeGIHJvU2D9PJmk3_BsvxgPJfOMtt2RV2r4gqg7t_Xgjannaba2uFqkrW9h4s00If0apuc23VCaI-qz9jjywnRdKULdBrJcCqDYBtHL27rlQwQ3tbdu4b4XEqaAk6QlYej9JA7eII2tBWpYbOg_-qjjJhbabjho8C4tTZgJ8jb5GWs9S2bP9ztKJFOjoVG-toKSS/https%3A%2F%2Fwww.lua.org%2Fsource%2F5.1%2Flvm.c.html. ooRexx chose to use a graph of C++ classes with abstract base classes for every instruction and clause. OMG, dynamic dispatch for every instruction! https://secure-web.cisco.com/1x1EEYRKnnOq4ErWK3XEX2TNTsQD0UuiUNjaIlV74LtBLh321aBDX8DuBmGkeEwlVa2nEDe_0WiZceoWQpQpAlJAptvu2Pgsg3VfvzAc19VMyrkgP6hFgWGpmex9xKNvxIu8OjmtH2TCcgPcTS0QhVf7T-8hfM-Ajwx_i-XiuIwhPspCAux-kzFz7ipM7H6Q8Fr-i2xzGtLJC4YOPthkFUUz7q-t-QNpKAT7Ueqfl3gLB-TNHYgYvg5Mo36B2KhDB4Q36sHe5f2XVg3KnPmIRV3q_AxuZAhQYGyJozZbO9cMrzV6UaF942P531jtLuMYxf1UtWbXlw89wSf8QVdMN5E6F0p9eylZcPucm5blJUIF9Ws0BIe4nj4OSooCHL1QoVyAw2_-Hw9nsWU6t-c0mjjDw4ou64vahrdNYommLhznZK49gubwnaoT9tKaLVwbc/https%3A%2F%2Fgithub.com%2FooRexx%2FooRexx%2Ftree%2Fmaster%2Finterpreter%2Finstructions It's gigantic clump of inefficient code based upon inheritance. The GoF Design Patterns book which dates back to the 90s was a groundbreaking, seminal work which had a central theme of introducing patterns to avoid inheritance. Modern languages like Rust don't even support Inheritance. If you want high speed then use a JIT compiler. The Lua Functional library used with LuaJIT can boil a chain of method calls down to a dozen instructions with no linkage overhead https://secure-web.cisco.com/1VGsux3zwLoFPlfRJthZWOyRRuMwoUesawXiAoOEGNBSpwc8MJTo_mTKwvCEMkjgvHvlY-YaKdYzPaVz1dG1h6YFTiRsgrq0TwNPjdMt2oUIMlwjqLKvM7q_jCe7R8HwQLHyRZ2uQZS6Vt4fHDBgmNbTBc_0cjIKlJ7JyekEm2GEDauJ5o8jonSS747C4tVgfM6MLLcz6ctR9YUeUKvqE0r45xSXwYFz0tC4jg3dus4FrE9VmJPakzfNzH-Uzr0mJJwtpBqkiF6E4WvuMsxJwF6pKRHyrJvM9f4iGcBHa9-m5OcGOaaLxIc_johKMK7lU4fpLGKg5Q9bVczgMOrGrRAFOGkfVJJ8dc_UPTacOUKlWFmWnLWPrssX62RX0gtKqr0RyYegQ_TD8Irzb9oX_9SE4ZY8b1vdh5HnsxNpeTEsECVs9J7PBcRh9l_YcuM5XllzvcAi9NeVF_L_pRcEaWg/https%3A%2F%2Fluafun.github.io%2Fintro.html. The Julia programming language can do the same with similar syntax. If I wanted to use REXX I would use NetRexx to take advantage of the JVM JIT. > > Again it is fairly straight-forward and easy to add external routines and > external methods to ooRexx > if need be. > > ---rony > > > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
