On 9/1/22 2:15 am, Rony G. Flatscher wrote:
On 08.01.2022 01:52, David Crayford wrote:
On 7/1/22 7:53 pm, Rony G. Flatscher wrote:
Here is my list of must haves for a scripting language. Does REXX or ooRexx 
meet the requirements?

1. Short circuit evaluation
2. Functions as first class objects
3. Mutli-threading
4. Dynamically typed, preferably with type hints
5. co-routintes
6. A module system
7. Support for object oriented programming
8. Regular expressions
9. Libraries for web programming, pegs, JSON/YAML parsing etc
You also mentioned in your follow up: "Forgot to mention. Support for 
functional programming map,
reduce, filter etc."

This list reads a little bit like a wish list for concepts found in different 
programming languages.
Sometimes such features are specific for a particular language (e.g. functional 
programming) and
then sometimes made available in other languages.
Umm, nope. Here is a list of programming languages that I use that support all 
of my requirements.

  * Javascript
  * Typescript
  * Lua
  * Python
  * Ruby
  * Kotlin
  * Groovy

I could go on. Even Java supports functional programming since Java 1.8 and 
which introduced the
streams API. It's unusual to see and old school loop in modern Java code. Even 
C++ has lambda's.

I missed "closures" on my list which code hand in hand with "functions as first 
class objects".
Very powerful, for example in Kotlin you can easily create type safe builders 
(DSLs)
https://kotlinlang.org/docs/type-safe-builders.html.
Well all of your languages miss the support for the message paradigm.

What on earth are you talking about? Number 7 on my list is support for OO which implies message passing.


  So, does this invalidate all
of your languages? Probably not, as each may serve and prove useful for the one 
or other
purpose/problem. However it means that e.g. in situations where the message 
paradigm becomes
helpful, none of your programming languages/skills qualify. (The same pattern 
you use in your
argument, just turned around a little bit. :) )

None of the above programming languages are human centric by design, such that 
it is not possible to
teach them as quickly as REXX or ooRexx and become productive quickly and 
relevant for as long as a
professional life lasts...

You must not overlook the fact, that IBM was very lucky in having a gentleman 
hired by the name of
Mike F. Cowlishaw who has turned out to be an ingenious language designer, and 
much more. The
history of how REXX got developed and how it became so successful also explains 
why it still is in
professional use and still serves as a beautiful language to teach and to use.

(And as you may know, Mike F. Cowlishaw has been very seminal in quite 
different IT related areas.)


That's why I have absolutely no interest in NetRexx. I have far better options 
on the JVM.
Well, you mention in another post that you were/are an expert REXX programmer, 
love Lua, use Python
in your shop because of your teams coming with that knowledge from the 
colleges, but nowadays you
would mainly code in Java/Kotlin. Kudos!

What appears to be a little bit strange with such a background is that you have 
obviously never
really assessed NetRexx, as otherwise you could not possibly have come to such 
wrong conclusions.

Why would I invest time into NetRexx. How many NetRexx jobs are there out there? Kotlin is not only a first class language for server side it is also the language of choice for building Android applications. Who uses NetRexx? Are there any example applications that you can cite? REXX has fallen off a cliff https://trends.google.com/trends/explore?date=all&q=%2Fm%2F06g3m. It's niche is the mainframe where it is an important and useful language. The reason IBM are porting languages like Python to z/OS is to keep the platform relevant. A lot of new products coming online in the future have a dependency on Python. Ansible etc are written in Python. Ansible playbooks are basically built using Jinja2 templates. Python skills will be in demand on z/OS.



To explain:

   * Mike F. Cowlishaw's (see above) Java expertise has been impressive from 
the early days of Java
     which many do not know

   * NetRexx got designed by Mike F. Cowlishaw, and as a matter of fact it is 
the first JVM language,
     believe it or not, many years before others have appeared (and many years 
before .Net/clr
     languages came into existence too)

   * NetRexx allows REXX programmers to take advantage of their Rexx skills as 
NetRexx follows the
     Rexx philosophy, or with other words REXX programmers can quite easily 
create real Java programs
     using NetRexx without a need in coding in Java itself, interestingly REXX 
programmers do not
     know and realize that (including yourself it seems)

   * NetRexx programmers, if need be, can create Java classes and Java methods 
that other programs
     can exploit and use, hence it becomes possible to create Java class 
libraries not in Java, but
     in NetRexx only which can be programmed by REXX programmers (whereas the 
learning curve for Java
     is probably too steep)

To demonstrate the "difficulty" of creating and understanding NetRexx programs, 
here a simple
example which probably everyone on this list can understand without any further 
explanation, so here
is a NetRex program:

     parse version v         /* get the NetRexx version    */
     say "parse version:" v
     parse source s          /* get the source information */
     say "parse source: " s

     say "1/3:" 1/3          /* demo Rexx arithmetics      */
     numeric digits 100
     say "numeric digits now:" digits
     say "1/3:" 1/3
     say

     numeric digits 1000
     say "numeric digits now:" digits
     sum=0
     loop i=1 to 10000
        sum=sum+1
        sum=sum*i
     end
     say "sum:" sum
     say
     say "sum/123456789:" sum/123456789
     say

     say "using a Java class from NetRexx:"
     dim=java.awt.Dimension(123,456)  /* create a value of type Dimension */
     say "dim:" dim
     say "dim.width :" dim.width   /* access field 'width' */
     say "dim.height:" dim.height  /* access field 'height'*/

If you were to download NetRexx (https://www.netrexx.org, you may check out the 
documents directory
which includes the language specifications/explanations) and follow the 
"read.me.first" directions
you can save the above NetRexx program e.g. as "hi.nrx" and then compile it to 
a Java class and
immediately run it with:

     NetRexxC.bat -run hi.nrx

which will yield the following output:

     parse version: NetRexx 4.01 20 Mar 2021
     parse source:  Java method hi.nrx
     1/3: 0.333333333
     numeric digits now: 100
     1/3: 
0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333

     numeric digits now: 1000
     sum: 
7.736935969712469619151651477554396939520513287393986175334653566730869651801086564369479958064722713899396967001861352624682
     
5891215847753257250320279897104393906617152735839319941764550748080956718722289678378323298784610059217677757356954522140036192390
     
4049839280690087786339692749299935124528137143751837005231585673849980611344761437273477853592569030307359999423627042239749545273
     
8059487993597949354821431475341953508042319805901872835603980197669360500030780444598140230671120626545538783721813724171382805898
     
8423516525739103184616117008128739522056723495424699379091271191253364564688512189708532851094054189954846455906865383944900886686
     
6224631061105811823775753971217861822189285256508005847845137009771398810859276041023023362369536193745800774766641369366806880385
     
4879692745959247996051540379695463003040977756884207224780403921976688227227785961342888241576864775282480683471864660600729635815
     
115929309041531964123184013000863936300931250923209567131854636472009507870027938546253097930789E+35659

     sum/123456789: 
6.26691819249605594322694678018427722068853847105482888862001227549411612495533685423284413955130706817540586366770
     
1055002072497707343397150662190013697594580554546672417977703918880034272402869373082616759000456694105709331158586811889053304483
     
7280023855476254066569809116478778072650175206203373485094597511784595796821670180596124319843883016720333543609931406803689592334
     
9950034156328129350067410983353975898023878906168725950413457848446388816873356434050036765867783928081194516289058739711901443036
     
1851389070909945383865370351128775672930286524952201980194438669475784858721164744102368658697945955089926580704674447340993566902
     
5784306350801382908242155222729448598506629054007656497246822598621541745247513185431971346753804147811550176778516471440597841028
     
1517106674050925846286124288883905799598875279596084242631987393158297995420623504733124555940207406623613447072763303723367101391
     
2997231618518710468843906157419325083046558044127432514807435634124466526074973088656977737000962416032697E+35651

     using a Java class from NetRexx:
     dim: java.awt.Dimension[width=123,height=456]
     dim.width : 123
     dim.height: 456

Now one of the cool things is, that the compilation of the NetRexx program 
"hi.nrx" yields a Java
(!) class file named "hi.class", which is a plain Java class file. It can from 
now on be directly
executed via Java in this way (note that one must not supply ".class" to 
java[.exe]):

     java hi

The output will be identical to the above.

---

So in a nutshell: NetRexx allows REXX programmers to easily create Java (!) 
programs, but not with
the Java syntax, but with the NetRexx syntax which is easy, and especially easy 
for REXX
programmers, no matter on which platform.

One needs to know that NetRexx exists in the first place and what it can do in 
order to be able to
take advantage of it. So now you know! ;)

It is worthwhile to download NetRexx and try it out. The documentation is great 
and also the wealth
of samples in the "examples" directory which demonstrate what can be done how 
the Java world can be
easily exploited (and enriched with one own's Java classes created with NetRexx 
programs at any time).

---rony



----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to