Free
Download
1 / 61

Howard Fosdick C 2005 FCI - PowerPoint PPT Presentation


  • 152 Views
  • Uploaded on

Free Rexx ! . Everything You Ever Wanted to Know About Rexx (but were afraid to ask) . Howard Fosdick (C) 2005 FCI. Independent consultant DBA / SA for: Oracle, DB2, SQL Server Linux, Unix, Windows Founder IDUG, MWDUG, CAMP Author: Rexx Programmer’s Reference.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Howard Fosdick C 2005 FCI' - bairn


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Slide1 l.jpg

FreeRexx !

Everything You Ever Wanted to Know

About Rexx (but were afraid to ask)

Howard Fosdick

(C) 2005 FCI


Slide2 l.jpg

Who Am I?

Contact: hfosdick@compuserve.com


Slide3 l.jpg

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:


Slide4 l.jpg

Outline

Why Scripting ?

Why Rexx ?

Rexx Tutorial

Further Info



Slide6 l.jpg

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


Slide7 l.jpg

What’s a Scripting Language ?

Rexx:

  • 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

  • Interpreted

  • High-level

  • Glue language


Slide8 l.jpg

Scripting Vs. Traditional Languages

Scripting

Traditional

-- Lower level

-- Compiled

-- More detail-oriented

-- Manual variable management

-- Pre-declared variables

-- More programmer effort

-- “Coding” languages

-- Optimize execution speed

-- High level

-- Interpretive

-- More productive

-- Varying degrees of

automatic variable management

-- Shifts burden to the machine

-- “Glue” languages

-- Acceptable execution speed

Rexx, Perl, Python,

Tcl/Tk, Ruby, others

C/C++, COBOL,

Java, Pascal, others


Slide9 l.jpg

When to Use Rexx

Yes

No

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


Slide10 l.jpg

Performance

3M

Ratio of compiler to interpreter

speed remains constant while

processor speeds increase

exponentially

200k

10k

4k

70

Year-- 1981 1988 1993 1998 2005

Mhz-- 4.77 8 66 266 3 ghz

CPU-- 8088 386 486 PII PIV



Slide12 l.jpg

Easy but Powerful”

“Easy but Powerful”

Why Rexx Vs Other Scripting Languages ?

Ease of use benefits experienced developers ...

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


Slide13 l.jpg

Why Rexx Vs Other Scripting Languages ?

Power

Simplicity

Conflict !

Rexx uses specific technologies to tie them together


Slide14 l.jpg

  • 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

PowerThroughSimplicity by…


Slide15 l.jpg

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.


Slide16 l.jpg

The Language Structure Makes Rexx Easy

Operators

Arithmetic

Comparison

Logical

String

2 dozen Instructions

Learn from

the inside out

70 Built-in

Functions

Other Features

OS commands, external functions, DLLs, APIs, widgets, etc.


Slide17 l.jpg

Linux-- all versions

Unix-- all versions

BSD-- all versions

Windows-- all versions

Mac OS-- all versions

DOS 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 Runs Everywhere…

Rexx predominates on systems in red


Slide18 l.jpg

The Free Rexx Interpreters

BRexx

Regina

Rexx/imc

All major

operating systems

Windows, DOS (32/16 bit),

Windows CE, Linux, Unix,

Mac OS, others

Unix, Linux, BSD

Rexx for

Palm OS

Reginald

r4

Windows

Palm OS

Windows

Open Object

Rexx

OOP

extensions

roo!

NetRexx

Any Java

Environment

Linux, Windows,

Solaris, AIX

Windows


Slide19 l.jpg

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



Slide21 l.jpg

Example Script # 1…

/*******************************************************************/

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


Slide22 l.jpg

  • Minimal syntax

  • Minimal special characters and variables

  • Free format

  • Use spaces & blank lines however desired

  • Case-insensitive (capitalize however you want)

  • No explicit filedefinition

  • 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

Simplicity in this script…


Slide23 l.jpg

What is “Power” ?

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


Slide24 l.jpg

Example Script # 2…

arg filein

fgrep PAYMENT_OVERDUE filein

This script does the same thing as Example #1


Slide25 l.jpg

  • 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

The Power of Glue Languages


Slide26 l.jpg

Structured Control Instructions

If

If then else

Do End

Do While

Select

Call

(case)

Subroutine

or Function


Slide27 l.jpg

Un-Structured Control Instructions

Do Until

Do Forever

Iterate

Leave

Signal

(goto)


Slide28 l.jpg

  • 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

Rexx Functions…


Slide29 l.jpg

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


Slide30 l.jpg

  • 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

Simplicity in this script…


Slide31 l.jpg

Example Script # 4…

(part I)

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


Slide32 l.jpg

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

end


Slide33 l.jpg

  • 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

Discussion

DO I = 1 TO n BY m WHILE condition FOR x

DO UNTIL …

DO FOREVER

DO n

IF condition THEN DO

. . .

END

ELSE DO

. . .

END

DO

IF

Enclose multiple statements

within a DO END pair


Slide34 l.jpg

Create Any Data Structure With Rexx Arrays :

b.1

b.1.1

b.1.1.1

b.1.1.2

b.2

b.2.1

b.2.2

b.2.3

b.3

b3.1

b.3.1.1

b.3.1.1.1

Element 1

Key 1 Value 1

Key 2 Value 2

Element 2

Key 3 Value 3

Element 3

Key 4 Value 4

A Simple List

or Look-up Table

Key-value Pairs

b.1

b.1.1

b.1.2

b.2

b.2.1

b.2.2

b.3

b.3.1

b.3.2

b.1

b.1.1

b.2

b.2.1

b.2.2

b.2.3

b.3

b.4

A Multi-level Tree

(unbalanced)

Also: linked list, doubly

linked list, stack, queue,

dequeue, etc...

Balanced Tree

Un-Balanced Tree


Slide35 l.jpg

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


Slide36 l.jpg

Why Rexx Vs Other Scripting Languages ?

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

Power thru Simplicity



Slide38 l.jpg

Rexx Standards

Extensions

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


Slide39 l.jpg

Rexx Standards

Early

90s

1990

1996

1985

TRL-1

TRL-2

SAA

ANSI

Language

Level

4.00

5.00

3.50


Slide40 l.jpg

The Evolution of Rexx

Object-oriented Rexx

Early 1980s

Mid 1990s

Standard or “Classic” Rexx

NetRexx

(for Java

environments)


Slide41 l.jpg

Rexx on Handhelds

Native

DOS Emulation

Interpreter:

Interpreter:

Windows CE BRexx

Palm OS Rexx for Palm OS

Symbian / EPOC32 Regina

PocketDOS

XTM

others

BRexx

+ Integrates with...

+ DOS Services

+ DOS Applications

+ Many DOS apps

instantly available

without any changes

+ Faster

+ Integrates with native services


Slide42 l.jpg

How DOS Emulation Works

Rexx Scripts

Rexx Interpreter

DOS Operating System

DOS Emulator

Native operating system

Each layer

runs on top

of the one

below it

PC Hardware


Slide43 l.jpg

Object-Oriented Rexx Means…

Classic Rexx

Classes and Methods

PLUS

Inheritance & Derivation

Encapsulation

Abstraction

Polymorphism

Huge Class Library


Slide44 l.jpg

Object Rexx Adds to Classic Rexx . . .

Classes and

Methods

Complete Object

Orientation

Built-in Objects,

Special Variables,

many other features

Object

Rexx

New Instructions

And Much More

More Functions

New Operators


Slide45 l.jpg

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


Slide46 l.jpg

NetRexx Goes Beyond Classic Rexx…

Java environment integration

Classic Rexx

Object orientation

New instructions

Changed

and Extended

with . . .

Data typing (“types”)

Indexed strings

Special names

Special methods

… and much more …


Slide47 l.jpg

Developing and Running NetRexx Scripts

To translate, compile and run in one step enter: nrc -run hello

Translate NetRexx source

into a Java program

Class file

Eg: hello.class

Source script

Eg: hello.nrx

Java file

Eg: hello.java

Compile Java into bytecode

Run

NetRexx interprets and/or compiles. Can generate commented,

formatted Java code. Runs under JVM or stand-alone.



Slide49 l.jpg

How Rexx

Supports Modularity

Modularity

Internal

Routines

External

Resources

-- Extensions and

Function Libraries

-- Operating System Commands

-- Commands to other environments

-- External Programs

-- API Interfaces to external features

-- API into Rexx

-- Built-in Functions

-- Functions you develop

-- Subroutines


Slide50 l.jpg

String Processing Operations

abc + abc

abcabc

Concatenation

Joins two or more strings

abcabc

Bifurcation

Splits a string

abc abc

abcabc

Parsing

Scans and analyzes a string, may split it into

its constituent components

Parse Count = 2

abcdef

Pattern Matching

Identifies patterns in strings

Find “def”


Slide51 l.jpg

Parsing Operations

By Words

Separate by words

By Pattern

Separate , using , commas

By Numeric

Pattern

abc abc abc

Columns: 1 5 9


Slide52 l.jpg

The Two I/O Modes

Line-oriented

Process one line at a time

Character-oriented

Process one character at a time

linein

charin

charout

lineout

lines

chars

+ More portable

+ Reads “special” characters


Slide53 l.jpg

The Stack is both a Stack and a Queue

PULL,

PARSE PULL

PUSH

QUEUE

Rexx’s Stack is a generalized communications mechanism


Slide54 l.jpg

Rexx Supports Recursion

Script X

How

Recursion

Works

Yes

End Test

Fufilled ?

No

Call

Script X


Slide55 l.jpg

Tip – Steps to Good Programming Style

Ect !

Error checking

Structured Code

Modularity

Comments

Limit Nesting

Spacing & indentation

Good variable names

Capitalization


Slide56 l.jpg

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


Slide57 l.jpg

Condition / Exception Trapping

signal on condition name label_name

…code of the main routine...

label_name:

…code of the error handling routine...

Conditions: error, failure, halt, novalue, notready, syntax, lostdigits



Slide59 l.jpg

Trends !

Conclusions

  • Free & open source languages have taken over

  • Scripting is the “quiet revolution”

  • Rexx offers “Power through Simplicity”

  • Useful addition to your toolbox


Slide60 l.jpg

Next...

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


Slide61 l.jpg

?

?

?

?

?

questions...

?

?

?

?


ad