Upload
dominique-clarkin
View
214
Download
0
Tags:
Embed Size (px)
Citation preview
Howard Fosdick (C) 2005 FCI
Free Rexx ! Everything You Ever Wanted to Know About Rexx (but were afraid to ask)
Who Am I?
• Independent consultant DBA / SA for:
• Oracle, DB2, SQL Server• Linux, Unix, Windows
• Founder IDUG, MWDUG, CAMP
• Author: Rexx Programmer’s Reference
Contact: [email protected]
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:
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
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)
Handhelds-- Windows CE, Palm OS, Symbian/EPOC32
Embedded-- Embedded Linux, DOS, Windows variants
Mainframes-- OS, VM, VSE (all versions)IBM mid-range-- i5/OS, OS/400 (all versions)
Many others-- Amiga OS, AROS, OpenVMS, BeOS, OpenEdition, AtheOS/Syllable, SkyOS, QNX (QNX4/QNX6), OS/2, eCS, osFree, more…
Rexx predominates on systems in red
The Free Rexx Interpreters
Windows, DOS (32/16 bit),Windows CE, Linux, Unix, Mac OS, 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 100 free tools 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 . . .
/*******************************************************************//* 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
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 ?
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
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 side 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.
-- 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
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
Conclusions
• Free & open source languages have taken over
• Scripting is the “quiet revolution”
• Rexx offers “Power through Simplicity”
• Useful addition to your toolbox
Resources
INTERPRETER: DOWNLOAD:Regina http://regina-rexx.sourceforge.net
BRexx http://bnv.home.cern.ch/bnv/
Reginald http://www.borg.com/~jglatt/rexx/rexxuser.htm
Rexx/imc http://users.comlab.ox.ac.uk/ian.collier/Rexx/rexximc.html
Rexx for Palm OS http://www.jaxo.com/rexx/
r4 http://www.kilowattsoftware.com/
roo! http://www.kilowattsoftware.com/
Open Object Rexx http://www.rexxla.org
NetRexx http://www-306.ibm.com/software/awdtools/netrexx/
Rexx Programmer’s Reference at Amazon www.amazon.com/rexx