Howard Fosdick (C) 2006 FCI

62
Howard Fosdick (C) 2006 FCI Free Rexx ! Everything You Ever Wanted to Know About Rexx (but were afraid to ask) Version 2.0

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 Presentation

Transcript of Howard Fosdick (C) 2006 FCI

Page 1: Howard Fosdick (C) 2006 FCI

Howard Fosdick (C) 2006 FCI

Free Rexx ! Everything You Ever Wanted to Know About Rexx (but were afraid to ask)

Version 2.0

Page 2: Howard Fosdick (C) 2006 FCI

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).

Page 3: Howard Fosdick (C) 2006 FCI

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:

Page 4: Howard Fosdick (C) 2006 FCI

Outline

3. Why Scripting ?4. Why Rexx ?5. Rexx Tutorial6. Further Info

Page 5: Howard Fosdick (C) 2006 FCI

I. Why Scripting ?

Page 6: Howard Fosdick (C) 2006 FCI

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

Page 7: Howard Fosdick (C) 2006 FCI

• 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 ?

Page 8: Howard Fosdick (C) 2006 FCI

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

Page 9: Howard Fosdick (C) 2006 FCI

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

Page 10: Howard Fosdick (C) 2006 FCI

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

Page 11: Howard Fosdick (C) 2006 FCI

II. Why Rexx ?

Page 12: Howard Fosdick (C) 2006 FCI

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”

Page 13: Howard Fosdick (C) 2006 FCI

Rexx uses specific technologies to tie them together

Why Rexx Vs Other Scripting Languages ?

Power Simplicity

Conflict !

Page 14: Howard Fosdick (C) 2006 FCI

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

Page 15: Howard Fosdick (C) 2006 FCI

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

Page 16: Howard Fosdick (C) 2006 FCI

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

Page 17: Howard Fosdick (C) 2006 FCI

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

Page 18: Howard Fosdick (C) 2006 FCI

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)

Page 19: Howard Fosdick (C) 2006 FCI

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

Page 20: Howard Fosdick (C) 2006 FCI

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 . . .

Page 21: Howard Fosdick (C) 2006 FCI

III. Let’s Code !

Page 22: Howard Fosdick (C) 2006 FCI

/*******************************************************************//* 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…

Page 23: Howard Fosdick (C) 2006 FCI

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

Page 24: Howard Fosdick (C) 2006 FCI

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

Page 25: Howard Fosdick (C) 2006 FCI

Example Script # 2…

arg fileinfgrep PAYMENT_OVERDUE filein

This script does the same thing as Example #1

Page 26: Howard Fosdick (C) 2006 FCI

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

Page 27: Howard Fosdick (C) 2006 FCI

Structured Control Instructions

Do EndIf If then else

Do While

(case)

Call

Subroutineor Function

Select

Page 28: Howard Fosdick (C) 2006 FCI

Un-Structured Control Instructions

Do UntilDo Forever

Iterate

LeaveSignal

(goto)

Page 29: Howard Fosdick (C) 2006 FCI

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

Page 30: Howard Fosdick (C) 2006 FCI

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

Page 31: Howard Fosdick (C) 2006 FCI

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

Page 32: Howard Fosdick (C) 2006 FCI

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)

Page 33: Howard Fosdick (C) 2006 FCI

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

Page 34: Howard Fosdick (C) 2006 FCI

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

Page 35: Howard Fosdick (C) 2006 FCI

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...

Page 36: Howard Fosdick (C) 2006 FCI

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

Page 37: Howard Fosdick (C) 2006 FCI

For a language that “lacks data structures,” Rexx sure has a lot of them!

Power thru Simplicity!

Why Rexx Vs Other Scripting Languages ?

Page 38: Howard Fosdick (C) 2006 FCI

IV. More about Rexx

Page 39: Howard Fosdick (C) 2006 FCI

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

Page 40: Howard Fosdick (C) 2006 FCI

Rexx Standards

1990Early90s

TRL-2 SAA

1996

ANSI

4.00 5.00LanguageLevel

TRL-1

3.50

1985

Page 41: Howard Fosdick (C) 2006 FCI

The Evolution of Rexx

Standard or “Classic” Rexx

Object-oriented Rexx

NetRexx (for Java environments)

Mid 1990sEarly 1980s

Page 42: Howard Fosdick (C) 2006 FCI

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:

Page 43: Howard Fosdick (C) 2006 FCI

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

Page 44: Howard Fosdick (C) 2006 FCI

Classic Rexx

Object-Oriented Rexx Means…

Classes and MethodsPLUS

Inheritance & Derivation

Encapsulation

Abstraction

Polymorphism

Huge Class Library

Page 45: Howard Fosdick (C) 2006 FCI

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

Page 46: Howard Fosdick (C) 2006 FCI

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

Page 47: Howard Fosdick (C) 2006 FCI

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

Page 48: Howard Fosdick (C) 2006 FCI

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.

Page 49: Howard Fosdick (C) 2006 FCI

V. More Rexx Features

Page 50: Howard Fosdick (C) 2006 FCI

-- 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

Page 51: Howard Fosdick (C) 2006 FCI

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”

Page 52: Howard Fosdick (C) 2006 FCI

Parsing Operations

Separate by words By Words

abc abc abc

Separate , using , commasBy Pattern

By NumericPattern

Columns: 1 5 9

Page 53: Howard Fosdick (C) 2006 FCI

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

Page 54: Howard Fosdick (C) 2006 FCI

QUEUE

The Stack is both a Stack and a Queue

PULL,PARSE PULL

PUSH

Rexx’s Stack is a generalized communications mechanism

Page 55: Howard Fosdick (C) 2006 FCI

Rexx Supports Recursion

Call Script X

End TestFufilled ?

Script X

Yes

No

How Recursion Works

Page 56: Howard Fosdick (C) 2006 FCI

Tip – Steps to Good Programming Style

Spacing & indentation

Good variable names

Limit Nesting

Comments

Structured Code

Modularity

Error checking

Ect !

Capitalization

Page 57: Howard Fosdick (C) 2006 FCI

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

Page 58: Howard Fosdick (C) 2006 FCI

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

Page 59: Howard Fosdick (C) 2006 FCI

VI. Conclusions

Page 60: Howard Fosdick (C) 2006 FCI

Conclusions

• Free & open source languages have taken over

• Scripting is the “quiet revolution”

• Rexx offers “Power through Simplicity”

• Useful addition to your toolbox

Page 61: Howard Fosdick (C) 2006 FCI

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

     

Page 62: Howard Fosdick (C) 2006 FCI

??

? ?

?questions...

?

??

?