Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations

Presentation on theme: "Howard Fosdick (C) 2005 FCI Free Rexx ! Everything You Ever Wanted to Know About Rexx (but were afraid to ask)"— Presentation transcript:

1 Howard Fosdick (C) 2005 FCI Free Rexx ! Everything You Ever Wanted to Know About Rexx (but were afraid to ask)

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

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

4 Outline 1. Why Scripting ? 2. Why Rexx ? 3. Rexx Tutorial 4. Further Info

5 I. Why Scripting ?

6 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

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

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

9 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

10 Performance Year Mhz ghz CPU PII PIV 70 4k 10k 200k 3M Ratio of compiler to interpreter speed remains constant while processor speeds increase exponentially

11 II. Why Rexx ?

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

13 Rexx uses specific technologies to tie them together Why Rexx Vs Other Scripting Languages ? Power Simplicity Conflict !

14 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

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

16 The Language Structure Makes Rexx Easy Operators Arithmetic Comparison Logical String 2 dozen Instructions 70 Built-in Functions Other Features OS commands, external functions, DLLs, APIs, widgets, etc. Learn from the inside out

17 Rexx Runs Everywhere… Linux--all versions Unix--all versions BSD--all versions Windows--all versions Mac OS--all versions DOSall 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

18 The Free Rexx Interpreters Windows, DOS (32/16 bit), Windows CE, Linux, Unix, Mac OS, others All major operating systems Windows Unix, Linux, BSD WindowsPalm OS Windows Linux, Windows, Solaris, AIX Any Java Environment ReginaRexx/imc Reginald roo! Rexx for Palm OS r4 BRexx NetRexx Open Object Rexx OOP extensions

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

20 III. Let’s Code !

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

22 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

23 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

24 Example Script # 2… arg filein fgrep PAYMENT_OVERDUE filein This script does the same thing as Example #1

25 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

26 Structured Control Instructions Do End IfIf then else Do While (case) Call Subroutine or Function Select

27 Un-Structured Control Instructions Do Until Do Forever Iterate Leave Signal (goto)

28 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

29 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 = '' then say 'Town' town 'is not in my database' else say 'The area code for' town 'is' end end

30 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

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

32 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

33 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 x DO UNTIL … DO FOREVER DO n IF condition THEN DO... END ELSE DO... END Enclose multiple statements within a DO END pair DO IF

34 Create Any Data Structure With Rexx Arrays : Element 1 Element 2 Element 3 A Simple List or Look-up Table Key-value Pairs Key 1 Value 1 Key 2 Value 2 Key 3 Value 3 Key 4 Value 4 Balanced TreeUn-Balanced Tree 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 b.1 b.1.1 b b b.2 b.2.1 b.2.2 b.2.3 b.3 b3.1 b b A Multi-level Tree (unbalanced) Also: linked list, doubly linked list, stack, queue, dequeue, etc...

35 Example-- Creating a Linked List list.0 = HEAD ; = 1 /* Define linked list. */ list.1 = 'a' ; = 2 /* You could also */ list.2 = 'b' ; = 3 /* create it */ list.3 = TAIL ; = TAIL /* dynamically. */ call display_linked_list /* Display the linked list */ list.99 = 'after a, before b' /* Add new item in list */ = 2 /* Point new item to 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 <> TAIL say 'Element:' list.sub sub = end return

36 For a language that “lacks data structures,” Rexx sure has a lot of them! Power thru Simplicity Why Rexx Vs Other Scripting Languages ?

37 IV. More about Rexx

38 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

39 Rexx Standards 1990 Early 90s TRL-2SAA 1996 ANSI Language Level TRL

40 The Evolution of Rexx Standard or “Classic” Rexx Object-oriented Rexx NetRexx (for Java environments) Mid 1990s Early 1980s

41 Windows CE BRexx Palm OS Rexx for Palm OS Symbian / EPOC32 Regina PocketDOS XTM others BRexx + Faster + Integrates with native services + Integrates with... + DOS Services + DOS Applications + Many DOS apps instantly available without any changes NativeDOS Emulation Rexx on Handhelds Interpreter:

42 How DOS Emulation Works PC Hardware Native operating system Rexx Scripts Rexx Interpreter DOS Operating System DOS Emulator Each layer runs on top of the one below it

43 Classic Rexx Object-Oriented Rexx Means… Classes and Methods PLUS Inheritance & Derivation Encapsulation Abstraction Polymorphism Huge Class Library

44 Object Rexx Object Rexx Adds to Classic Rexx... Complete Object Orientation New Instructions More FunctionsNew Operators Built-in Objects, Special Variables, many other features Classes and Methods And Much More

45 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

46 Classic Rexx NetRexx Goes Beyond Classic Rexx… Changed and Extended with... New instructions Data typing (“types”) Indexed strings Special names Object orientation Special methods … and much more … Java environment integration

47 Translate NetRexx source into a Java program Developing and Running NetRexx Scripts Run Source script Eg: hello.nrx To translate, compile and run in one step enter: nrc -run hello Java file Eg: Compile Java into bytecode Class file Eg: hello.class NetRexx interprets and/or compiles. Can generate commented, formatted Java code. Runs under JVM or stand-alone.

48 V. More Rexx Features

49 -- 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 Internal Routines Modularity External Resources

50 String Processing Operations abc + abcabcabcConcatenation Joins two or more strings abcabc abc Bifurcation Splits a string abcabcParsing Scans and analyzes a string, may split it into its constituent components abcdefPattern Matching Identifies patterns in strings Parse Count = 2 Find “def”

51 Parsing Operations Separate by wordsBy Words abc abc abc Separate, using, commas By Pattern By Numeric Pattern Columns: 1 5 9

52 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

53 QUEUE The Stack is both a Stack and a Queue PULL, PARSE PULL PUSH Rexx’s Stack is a generalized communications mechanism

54 Rexx Supports Recursion Call Script X End Test Fufilled ? Script X Yes No How Recursion Works

55 Tip – Steps to Good Programming Style Spacing & indentation Good variable names Limit Nesting Comments Structured Code Modularity Error checking Ect ! Capitalization

56 Debugging Options SAY InstructionTRACE 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

57 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

58 VI. Conclusions

59 Conclusions Free & open source languages have taken over Scripting is the “quiet revolution” Rexx offers “Power through Simplicity” Useful addition to your toolbox

60 Resources INTERPRETER:DOWNLOAD: Regina BRexx Reginald Rexx/imc Rexx for Palm OS r4 roo! Open Object Rexx NetRexx Rexx Programmer’s Reference at Amazon

61 ? ? ? ? ? questions... ? ? ? ?

Download ppt "Howard Fosdick (C) 2005 FCI Free Rexx ! Everything You Ever Wanted to Know About Rexx (but were afraid to ask)"

Similar presentations

Ads by Google