> If only I could remember CLIST, Tom!

If only I could forget CLIST! The paired apostrophes could replicate to an 
obscene degree, especially after the enhancements in OS/VS2 R3.6; REXX is much 
cleaner.

Do you mean that IBM's JS port is faster, or that you prefer JS to Python? If 
the latter, why?


--
Shmuel (Seymour J.) Metz
http://mason.gmu.edu/~smetz3

________________________________________
From: IBM Mainframe Discussion List [[email protected]] on behalf of 
David Crayford [[email protected]]
Sent: Wednesday, January 12, 2022 6:45 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 12/1/22 1:41 am, Tom Brennan wrote:
> Nice! Now do CLIST

If only I could remember CLIST, Tom! I did work on a project last year
where I had to convert 3 CLIST scripts to REXX and it quite was painful.
Variable substitution killed me, but I remembered it from the NetMaster
NCL language.

I did run a Javascript benchtest on z/OS using IBMs Node.js port. I was
pleasantly surprised to see that IBM have done an amazing job porting
the V8 JavaScript engine to z/OS. It nukes Python.

 > cat squares.js
let MAX = 10000000
let s = []
for (i = 1; i <= MAX; i++) {
     let square = i * i
     s.push(square)
}

function getMax(arr) {
     let len = arr.length;
     let max = -Infinity;
     while (len--) {
         max = arr[len] > max ? arr[len] : max;
     }
     return max;
}

console.log(getMax(s))

 > time node squares.js
100000000000000
real    0m0.384s
user    0m0.195s
sys     0m0.076s (edited)

>
> Ok, just joking.  I was probably the last person on my block to switch
> from CLIST to Rexx when it became available on MVS.  A simple thing
> finally pushed me over:  I ran a small performance test and Rexx beat
> CLIST by about 1000 times if I remember correctly.  So I pulled out
> the Rexx manuals.
>
> On 1/10/2022 8:46 PM, David Crayford wrote:
>> On 10/1/22 11:15 pm, Seymour J Metz wrote:
>>>> 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?
>>
>> A more effecient implementation requires a rewrite.
>>
>>> For that matter, what fundamental issue prevents compiling into Java
>>> bytecode with a large runtime similar to the CREXX runtime?
>>
>> None. TBH, I hadn't had much of a look at NetRexx but it's promising.
>> It's strongly typed and the JVM is going to JIT compile it so it will
>> be fast. As Rene mentioned you can use Java classes so there is a
>> massive eco-system available.
>>
>>
>> I knocked up some simple benchtests which create an array of squares
>> and then find the maximum value. The maximum value is the end
>> element. The results are just what I expected. ooRexx performs poorly.
>> Stem variables are particularly bad which is to be expected because
>> they are essentially associative arrays. Using the Array class was
>> much better but the result was still many orders of magnitude worse
>> then the
>> other languages I tested. What's interesting is that LuaJIT is as
>> fast as C++ and interpreted Lua is almost as fast as Julia which has
>> JIT.
>>
>> ❯ rexx -v
>> Open Object Rexx Version 4.2.0
>> Build date: Dec 29 2013
>> Addressing Mode: 64
>> Copyright (c) IBM Corporation 1995, 2004.
>> Copyright (c) RexxLA 2005-2013.
>> All Rights Reserved.
>> This program and the accompanying materials are made available under
>> the terms of the Common Public License v1.0 which accompanies this
>> distribution or at
>> http://secure-web.cisco.com/1r_GTvH-Plr8ga-NNHsh2cO1nRoevr5kRKDrdZ1jHQ7CGKP_SGwZRBiTJXQQbF1MOTARH8uTbgZcumlkPqn3ERVJ0BfUPOhaQEM-sEs_oZWm0f5hdit6_QGQyshydNDBVG8y0pNMEuUSkjLu6HmKb7K3dIX40NKRDtrl0xEvRhzPxaOpK16EuT76LOHpNHEArCotpR_L9qX7LQcipUur57l9wPu9xgAXNddwW5YyT_dOS_E5ZAJcleFzwBnH1Slg_5o_fu-shk06cOzlukGKoy8QNsB878WuJ8c0G91_uphoQ3GPNT8Vnk0SA7qZ2dNPugmiuzGffPegh8dcKtogqgQveDXHWkUaZ8kiylT--uprM23EgppVvySkWNy9v4baI_5TWIPuvhQ2VVJR1Nu7tSjgAxH19m9MXPWEnaN1V3vrvjQMt-v9Pd79ORJHUjnff/http%3A%2F%2Fwww.oorexx.org%2Flicense.html
>>
>> ❯ cat squares.rexx
>> /* REXX */
>> numeric digits 30
>> MAX = 10000000
>> s. = 0
>> do n = 1 to MAX
>>    s.n = n * n
>> end
>> m = 0
>> do i = 1 to MAX
>>    m = max(m, s.i)
>> end
>> say max
>>
>> ❯ time rexx squares.rexx
>> 10000000rexx squares.rexx  43.04s user 3.25s system 99% cpu 46.296 total
>>
>> ❯ cat squares2.rexx
>> numeric digits 30
>> s = .Array~new()
>> do n = 1 to 10000000
>>    s~append(n * n)
>> end
>> m = 0
>> do n = 1 to s~items
>>    m = max(m, s[n])
>> end
>> say m
>>
>> ❯ time rexx squares2.rexx
>> 100000000000000
>> rexx squares2.rexx  17.25s user 1.32s system 99% cpu 18.568 total
>>
>> ❯ lua -v
>> Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio
>>
>> local s = {}
>> for n = 1, 10000000 do
>>     s[n] = n * n
>> end
>> local max = 0
>> for _, n in ipairs(s) do
>>    max = math.max(max, n)
>> end
>> print(max)
>>
>> ❯ time lua squares.lua
>> 100000000000000
>> lua squares.lua  0.79s user 0.07s system 99% cpu 0.862 total
>>
>> ❯ luajit -v
>> LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall.
>> http://secure-web.cisco.com/1vzfrPXicpyFUEHmH3YkAglHyNNrmqKTLui3Lr-ANKgk2_kF6pI7t0UXDr34ugTQYH_yhnoOCuVxrtawOrx5uTp9QmQttxr8l9iOOUp-BNNXQNfxXIh_9Uj-kjRyWu-21C-K2yU_R05Ktft4Y0VDVgSpdjC3wLB0AQ1s1YQV4XuwVYt0emzZB7k_YY9bm0Jsfkogghj9ln9wORBvq_qDZIZ2-zgH5_JS8KYu5xnXQkTLbw2hTQlAjRN3LOUzyqrXHpRPwxFMiTZrSHY-NSAPzxWBtBEAGVWE0UjFCPzcUId2JJbQaKs4c5k0VJBINZYM6V1JJkfvipLlq_iI5T9tGMJaGqgBL7Nl23lLcyjXReHQrbHqy_FWUDNt-QRzFRXGh_fgES9VKhNZ5Q_fsyQR-FsgPMp_flQ0pgKJ3_jXILuxKYmFi-RnCXflq-FSTWiX4/http%3A%2F%2Fluajit.org%2F
>>
>> ❯ time luajit squares.lua
>> 1e+14
>> luajit squares.lua  0.08s user 0.05s system 99% cpu 0.137 total
>>
>> ❯ python3 --version
>> Python 3.8.10
>>
>> ❯ cat squares.py
>> s = []
>> for n in range(1, 10000000+1):
>>      s.append(n * n)
>> print(max(s))
>>
>> ❯ time python3 squares.py
>> 100000000000000
>> python3 squares.py  1.13s user 0.16s system 99% cpu 1.288 total
>>
>> ❯ julia --version
>> julia version 1.4.1
>>
>> ❯ cat squares.jl
>> s = Int[]
>> for n = 1:10000000
>>    push!(s, n * n)
>> end
>> println(maximum(s))
>>
>> ❯ time julia squares.jl
>> 100000000000000
>> julia squares.jl  0.56s user 0.74s system 214% cpu 0.608 total
>>
>> ❯ clang++ --version
>> clang version 10.0.0-4ubuntu1
>> Target: x86_64-pc-linux-gnu
>> Thread model: posix
>> InstalledDir: /usr/bin
>>
>> ❯ cat squares.cpp
>> #include <vector>
>> #include <cstdint>
>> #include <iostream>
>> #include <algorithm>
>> int main() {
>>      constexpr int MAX = 10000000;
>>      std::vector<uint64_t> s(MAX);
>>      for (uint64_t n = 1; n <= MAX; n++) s.push_back(n * n);
>>      std::cout << *std::max_element(s.begin(), s.end()) << "\n";
>>
>> ❯ time ./squares
>> 100000000000000
>> ./squares  0.05s user 0.05s system 99% cpu 0.107 total
>>
>>
>>>
>>>
>>> --
>>> 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
>>
>> ----------------------------------------------------------------------
>> 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


----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to