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