howard fosdick (c) 2006 fci
DESCRIPTION
Free Rexx !. Everything You Ever Wanted to Know About Rexx (but were afraid to ask). Howard Fosdick (C) 2006 FCI. Version. 2.0. Who Am I?. Presentation by Howard Fosdick, author of Rexx Programmer’s Reference Find the book at www. Amazon.com/rexx - PowerPoint PPT PresentationTRANSCRIPT
Howard Fosdick (C) 2006 FCI
Free Rexx ! Everything You Ever Wanted to Know About Rexx (but were afraid to ask)
Version 2.0
Who Am I?
• Presentation by Howard Fosdick, author of Rexx Programmer’s Reference
• Find the book at www. Amazon.com/rexx
• This presentation is published under the Open Publication License (OPL).
Viewpoint / Purpose
• All languages have their strengths & roles
• Not here to “put down” other languages
• Here to present Rexx’s strengths and discuss where it fits in your toolbox
(1) Know where Rexx fits (2) Teach you to script it in < 2 hours !
Goals:
Outline
3. Why Scripting ?4. Why Rexx ?5. Rexx Tutorial6. Further Info
I. Why Scripting ?
2 Big Software Trends Converge
Ka-Boom!
Free and Open Source
Scripting
Perl, Python,Rexx,Tcl/Tk, Bash,Korn,Ruby,others
Java,C/C++,COBOL
Visual Basic,VBScript,WSH
• Interpreted
• High-level
• Glue language
• General purpose
• Free / open source
• Universal
• Portable code• Transferable skills
• Standardized (8 of 9 free Rexxes meet stds)
• Dynamic• Sizing (variables & arrays)• Memory management• No “variable declarations”• No “data typing”• Integrated debugger
Rexx:
What’s a Scripting Language ?
Scripting Vs. Traditional Languages
-- High level-- Interpretive-- More productive-- Varying degrees of automatic variable management-- Shifts burden to the machine-- “Glue” languages-- Acceptable execution speed
-- Lower level-- Compiled-- More detail-oriented-- Manual variable management-- Pre-declared variables-- More programmer effort-- “Coding” languages-- Optimize execution speed
Rexx, Perl, Python, Tcl/Tk, Ruby, others
C/C++, COBOL, Java, Pascal, others
Scripting Traditional
When to Use Rexx
-- Productivity-- Reliability-- Quick development-- Glue language-- Prototyping-- Systems administration -- OS extensions-- Portable apps-- Mainframe migrations-- Embedded programming-- Handhelds-- Text processing-- Interactive development / debugging
-- Optimal execution speed is required
-- Systems -level programming
(No BIOS interrupts, direct addressing, etc.)
NoYes
Performance
Year-- 1981 1988 1993 1998 2005 Mhz-- 4.77 8 66 266 3 ghz CPU-- 8088 386 486 PII PIV
70 4k10k
200k
3M
Ratio of compiler to interpreterspeed remains constant whileprocessor speeds increaseexponentially
II. Why Rexx ?
Why Rexx Vs Other Scripting Languages ?
“Easy but Powerful”
• FAST coding !
• Reliable code
• Easy to code right out of memory
• Maintainable code
• 70%+ of IT does maintenance• This determines your code’s longevity• Saves your company $$$
Ease of use benefits experienced developers ...
“Easy but Powerful”
Rexx uses specific technologies to tie them together
Why Rexx Vs Other Scripting Languages ?
Power Simplicity
Conflict !
Power Through Simplicity by…
• Small instruction set, w/ power in the functions• Extensible• Call external functions just like internal• Glue language (uses OS commands, interfaces, DLLs, shared libraries, services, objects, etc.)
• Minimal syntax• Minimal special characters, variables, etc.
• Automated memory management• Automated variable management
• No data definitions• No data typing• Dynamic array sizes• Dynamic string or variable lengths
Power Through Simplicity…
Rexx presents a radically different philosophy on how to achieve power than the “Unix tradition” languages (Perl, Bash, Korn, Awk, etc.)
Rexx presents a unique scripting paradigm
The Language Structure Makes Rexx Easy
Operators Arithmetic Comparison Logical String
2 dozen Instructions
70 Built-inFunctions
Other Features
OS commands, external functions, DLLs, APIs, widgets, etc.
Learn fromthe inside out
Rexx Runs Everywhere…
Linux-- all versionsUnix-- all versionsBSD-- all versionsWindows-- all versionsMac OS-- all versionsDOS all versions (32- and 16- bit), IBM PC-DOS 2000 and 7
Handhelds-- Windows CE / Mobile / PPC / etc, Palm OS, Symbian/EPOC32, EPOC, DOS emulation
Embedded-- Embedded Linux, DOS, Windows variants
Mainframes-- z/OS, z/VM, z/VSE (all versions)IBM iSeries-- i5/OS, OS/400 (all versions)
Many others-- AmigaOS, AROS, MorphOS, OpenVMS, BeOS, OpenEdition, AtheOS/Syllable, SkyOS, QNX (QNX4/QNX6), OS/2, eCS, osFree, more…
Rexx predominates on systems in red
Rexx Has Critical Mass...
Open source, general purpose scripting languages with critical mass --
* Run everywhere (on all major OS’s and platforms) * Have strong standards * Enjoy wide use and offer good support * Internationally * In many spoken languages * Offer thousands of free tools and scripts * Interface to everything (databases, web programming, GUIs, etc, etc)NOTE-- The chart excludes non-open source (eg VB, VBScript) and non-general purpose (eg PHP) scripting languages
Critical mass
Do not have critical mass
Perl
Python
Rexx, Tcl/Tk, Ruby
Many other good languages (Korn, C-shell, bash, Bourne, Lua, Mumps, etc)
The Free Rexx Interpreters
Windows, DOS (32/16 bit),Windows CE, Linux, Unix,Mac OS, AmigaOS, others
All major operating systems
Windows
Unix, Linux, BSD
Windows Palm OS
WindowsLinux, Windows, Solaris, AIX
Any JavaEnvironment
Regina Rexx/imc
Reginald
roo!
Rexx forPalm OS
r4
BRexx
NetRexxOpen Object Rexx
OOPextensions
Rexx Free Tools and Interfaces
• Over 2000 free tools & scripts for Rexx. Examples:
• SQL database access• GUIs• XML• Web programming• Math libraries• Regular Expressions• Code managers• Communications functions• OS interface libraries• Graphics • Speech, MIDI, sound• . . . you name it . . .
III. Let’s Code !
/*******************************************************************//* Find Payments: *//* Reads accounts lines one by one, and displays overdue *//* payments (lines containing the phrase PAYMENT_OVERDUE). *//*******************************************************************/ arg filein /* Read the input file name*/ do while lines(filein) > 0 /* Do while a line to read */ input_line = linein(filein) /* Read an input line */ if pos('PAYMENT_OVERDUE',input_line) > 0 then say 'Found it:' input_line /* Write line if $ overdue */ end
Example Script # 1…
Simplicity in this script…
• Minimal syntax• Minimal special characters and variables• Free format• Use spaces & blank lines however desired• Case-insensitive (capitalize however you want)
• No explicit file definition• File is automatically OPEN’ed and CLOSE’d
• Automatic “declaration” of variables (see FILEIN and INPUT_LINE)• No “data typing” • All variables are strings
• Numbers are strings that look like numbers• Decimal arithmetic (portable, consistent results)• Automatic conversions where sensible
What is “Power” ?
Is it the number of Lines of Code (LOC) ?
• Can reduce LOC by nesting functions
• But why write a complex “fortune-cookie” script ?
Power is not solving the problem in the fewest LOC!
Power is a deft script that solves the problem in a reliable, readable, maintainable manner
Example Script # 2…
arg fileinfgrep PAYMENT_OVERDUE filein
This script does the same thing as Example #1
The Power of Glue Languages
• Rexx evaluates a statement, sends anything that is not Rexx to the “external environment” (by default this is the OS)
• Full power of a string-manipulation language to direct external interfaces
• Inspect return code, command output, messages, and respond
• Rexx is a glue language
Structured Control Instructions
Do EndIf If then else
Do While
(case)
Call
Subroutineor Function
Select
Un-Structured Control Instructions
Do UntilDo Forever
Iterate
LeaveSignal
(goto)
Rexx Functions…
• 70 Built-in Functions:
• String manipulation (character, bit, hex)• Word manipulation• I/O• Numeric• Environmental• Conversion• Other
• 2 statements access external function library• Those functions are then coded just like built-ins
Example Script # 3…
/*******************************************************************//* Code Lookup: *//* Looks up the area code for the town the user enters. *//*******************************************************************/ area. = '' /* Initialize array entries to null */ area.CHICAGO = 312 /* Define a table of area codes */ area.HOMEWOOD = 708 area.EVANSTON = 847 do while town <> '' /* Loop until user enters null line */ say 'For which town do you want the area code?' pull town if town <> '' then do if area.town = '' then say 'Town' town 'is not in my database' else say 'The area code for' town 'is' area.town end end
Simplicity in this script…
• Array recognized by the period (area.)• Do not have to declare arrays or predefine their size• Sets all possible elements to null string (area. = ‘’)
• Subscript array by any arbitrary string (content-addressable memory or associative memory)
• Arrays can be:• Dense or sparse• Contain homogenous or heterogeneous elements• Represent records or C structs• Expand to size of memory
• Automatic capitalization (pull & array element names)• Can always override Rexx’s automation
Example Script # 4…/* Find Books: *//* This program illustrates how arrays may be of any dimension *//* in retrieving book titles based on their keyword weightings. */ keyword. = '' /* Initialize both arrays to all null strings */title. = '' /* The array of keywords to search for among the book descriptors */ keyword.1 = 'earth' ; keyword.2 = 'computers'keyword.3 = 'life' ; keyword.4 = 'environment' /* The array of book titles, each having several descriptors */ title.1 = 'Saving Planet Earth' title.1.1 = 'earth' title.1.2 = 'environment' title.1.3 = 'life'title.2 = 'Computer Lifeforms' title.2.1 = 'life' title.2.2 = 'computers' title.2.3 = 'intelligence'title.3 = 'Algorithmic Insanity' title.3.1 = 'computers' title.3.2 = 'algorithms' title.3.3 = 'programming'
(part I)
Example Script # 4… (part II)
arg weight /* Get number keyword matches required for retrieval */ say 'For weight of' weight 'retrieved titles are:' /* Output header */ do j = 1 while title.j <> '' /* Look at each book */ count = 0 do k = 1 while keyword.k <> '' /* Inspect its keywords */ do l = 1 while title.j.l <> '' /* Compute its weight */ if keyword.k = title.j.l then count = count + 1 end end if count >= weight then /* Display titles matching the criteria */ say title.jend
Discussion
• Array keyword. is a lookup table or list• key/value pairs like Perl or Berkeley DB
• Array title. is a tree• Trees can be balanced or not
DO I = 1 TO n BY m WHILE condition FOR xDO UNTIL …DO FOREVERDO n
IF condition THEN DO . . . ENDELSE DO . . .END
Enclose multiple statementswithin a DO END pair
DO
IF
Create Any Data Structure With Rexx Arrays :
Element 1
Element 2
Element 3
A Simple Listor Look-up Table
Key-value Pairs
Key 1 Value 1
Key 2 Value 2
Key 3 Value 3
Key 4 Value 4
Balanced Tree Un-Balanced Tree
b.1 b.1.1 b.1.2b.2 b.2.1 b.2.2b.3 b.3.1 b.3.2
b.1 b.1.1b.2 b.2.1 b.2.2 b.2.3b.3b.4
b.1 b.1.1
b.1.1.1b.1.1.2
b.2 b.2.1 b.2.2 b.2.3b.3 b3.1
b.3.1.1b.3.1.1.1
A Multi-level Tree (unbalanced)
Also: linked list, doublylinked list, stack, queue,dequeue, etc...
Example-- Creating a Linked List
list.0 = HEAD ; list.0.next = 1 /* Define linked list. */ list.1 = 'a' ; list.1.next = 2 /* You could also */ list.2 = 'b' ; list.2.next = 3 /* create it */list.3 = TAIL ; list.3.next = TAIL /* dynamically. */
call display_linked_list /* Display the linked list */
list.99 = 'after a, before b' /* Add new item in list */list.99.next = 2 /* Point new item to next */list.1.next = 99 /* Point to the new item */
call display_linked_list /* Display the linked list */exit
display_linked_list: /* Displays the linked list*/ sub = 0 do while list.sub.next <> TAIL say 'Element:' list.sub sub = list.sub.next end return
For a language that “lacks data structures,” Rexx sure has a lot of them!
Power thru Simplicity!
Why Rexx Vs Other Scripting Languages ?
IV. More about Rexx
Rexx Standards
TRL-2
ANSI
• 8 of 9 free Rexx interpreters adhere to TRL-2• ANSI adds little beyond TRL-2• Most Rexxes offer extensions • Extensions offer OS-specific stuff and other niceties
Extensions
Rexx Standards
1990Early90s
TRL-2 SAA
1996
ANSI
4.00 5.00LanguageLevel
TRL-1
3.50
1985
The Evolution of Rexx
Standard or “Classic” Rexx
Object-oriented Rexx
NetRexx (for Java environments)
Mid 1990sEarly 1980s
Windows CE BRexxPalm OS Rexx for Palm OSSymbian / EPOC32 Regina
PocketDOSXTMothers
BRexx
+ Faster
+ Integrates with native services
+ Integrates with... + DOS Services + DOS Applications
+ Many DOS apps instantly available without any changes
Native DOS Emulation
Rexx on Handhelds
Interpreter: Interpreter:
How DOS Emulation Works
PC Hardware
Native operating system
Rexx Scripts
Rexx Interpreter
DOS Operating System
DOS Emulator
Each layer runs on topof the onebelow it
Classic Rexx
Object-Oriented Rexx Means…
Classes and MethodsPLUS
Inheritance & Derivation
Encapsulation
Abstraction
Polymorphism
Huge Class Library
Object Rexx
Object Rexx Adds to Classic Rexx . . .
Complete ObjectOrientation
New Instructions
More Functions New Operators
Built-in Objects,Special Variables,many other features
Classes and Methods
And Much More
NetRexx
• A “Rexx-like” language
• Brings Rexx ease of use to Java environment
• NetRexx scripts use Java classes
• Script:• Classes for use by Java• Applets• Applications• Servlets• Java Beans (EJBs)• Client & server sides both
Classic Rexx
NetRexx Goes Beyond Classic Rexx…
Changedand Extendedwith . . .
New instructions
Data typing (“types”)
Indexed strings
Special names
Object orientation
Special methods
… and much more …
Java environment integration
Translate NetRexx sourceinto a Java program
Developing and Running NetRexx Scripts
Run
Source scriptEg: hello.nrx
To translate, compile and run in one step enter: nrc -run hello
Java fileEg: hello.java
Compile Java into bytecode
Class fileEg: hello.class
NetRexx interprets and/or compiles. Can generate commented,formatted Java code. Runs under JVM or stand-alone.
V. More Rexx Features
-- Built-in Functions
-- Functions you develop
-- Subroutines
-- Extensions and Function Libraries
-- Operating System Commands
-- Commands to other environments
-- External Programs
-- API Interfaces to external features
-- API into Rexx
How Rexx Supports Modularity
InternalRoutines
Modularity
ExternalResources
String Processing Operations
abc + abc abcabc Concatenation
Joins two or more stringsabcabc
abc abc
Bifurcation
Splits a string
abcabc Parsing
Scans and analyzes a string, may split it into its constituent components
abcdef Pattern Matching
Identifies patterns in strings
Parse Count = 2
Find “def”
Parsing Operations
Separate by words By Words
abc abc abc
Separate , using , commasBy Pattern
By NumericPattern
Columns: 1 5 9
The Two I/O Modes
linein
lineout
lines
Character-oriented
Process one character at a time
charin
charout
chars
+ More portable + Reads “special” characters
Line-oriented
Process one line at a time
QUEUE
The Stack is both a Stack and a Queue
PULL,PARSE PULL
PUSH
Rexx’s Stack is a generalized communications mechanism
Rexx Supports Recursion
Call Script X
End TestFufilled ?
Script X
Yes
No
How Recursion Works
Tip – Steps to Good Programming Style
Spacing & indentation
Good variable names
Limit Nesting
Comments
Structured Code
Modularity
Error checking
Ect !
Capitalization
Debugging Options
SAY Instruction TRACE Instruction in batch mode
Interactive TRACE
+ Quick, informal+ Great for simple problems+ Requires changing code (adding SAY instructions)
+ Resolves challenging problems+ Allows real-time code tests+ Programmer-directed interaction resolves problems+ Quick & easy, but powerful
+ Batch script trace+ Can set trace level based on user input+ Many trace settings available+ Good for “paperanalysis” of a problem
signal on condition name label_name
Condition / Exception Trapping
label_name:
…code of the main routine...
…code of the error handling routine...
Conditions: error, failure, halt, novalue, notready, syntax, lostdigits
VI. Conclusions
Conclusions
• Free & open source languages have taken over
• Scripting is the “quiet revolution”
• Rexx offers “Power through Simplicity”
• Useful addition to your toolbox
Resources
Find everything at www.RexxInfo.org
-- download Rexx-- download tools-- tutorials, articles, how-to’s-- reference materials
Rexx Programmer’s Reference at Amazon www.amazon.com/rexx
??
? ?
?questions...
?
??
?