Object REXX

[2] In 1988, the "Oryx" project at IBM, under the technical direction of Simon C. Nash, experimented with merging classic Rexx with the object model of Smalltalk.[14][15] These are included in OS/2's initial follow-on product, eComStation, and also in its current descendant, ArcaOS, for which IBM's original Object REXX interpreter continues to be available.[16] In 2005, the RexxLA released ooRexx as a new incarnation of Object REXX as free and open-source software under the Common Public License.[17] This first version of ooRexx 3.0.0 has been heavily refactored compared to the original IBM source code in order to increase readability.Later, the ooRexx kernel was rewritten in pure C++, and a new architecture and native interface were designed and implemented under the technical direction of Rick McGuire.[22] ooRexx follows the design philosophy of classic Rexx to create a "human-centered" programming language that is easy to learn, code, remember and maintain.Directives can be used to define routines, classes, methods, attributes or execution options like the number of digits to use in arithmetics.[31] To facilitate the reusability of code, the ::REQUIRES directive allows the integration of another Rexx program (also known as a package) or an external (native) library.Before execution, the interpreter merges multiple unquoted blanks into one, while a character string enclosed in quotation marks (single or double) is not changed.[31] Since a free-form language provides flexibility and requires fewer syntactic rules to be considered, it is assumed that it eases the learning effort by reducing the intrinsic cognitive load.Accordingly, the ooRexx interpreter capitalizes all characters outside quotation marks (single or double) and ignores case for instructions, variable names and all other aspects of the language.Like Smalltallk, ooRexx messages can be cascaded if two tildes (~~) are used instead of one, returning the object that received the method rather than the result produced.[1] Classic Rexx scripts usually run without changes under ooRexx, making it easy to migrate to OOP features at the desired rate while preserving the time invested in the original code.Above all, ooRexx offers OOP features such as subclassing, polymorphism, data encapsulation and multiple inheritance via mixin classes.[2] Subsequent instruction is used to specify the source of the string, for example ARG for arguments that are listed when the program or function is called, VAR for variables, PULL for data queues or standard input (typically the keyboard), VALUE for any expression.After the class name, options such as METACLASS, SUBCLASS, MIXINCLASS, ABSTRACT and INHERIT can be set in order to use OOP features.[31]Conceptually, ooRexx provides object-based concurrency, according to which objects have independent resources to execute methods and can communicate with each other using the messaging paradigm.[31] Concurrency can be achieved with the REPLY keyword instruction, which causes an early return from a method while its remainder continues to execute in a new thread.[31] ooRexx 5.1.0 introduces the TraceObject class, which provides additional information such as timestamps, interpreter instances, thread IDs on which messages are dispatched, and the state of the guard locks for tracing multi-threaded programs.[36] The ooRexx debugger, which is also included in the "net-oo-rexx" bundle, is based on Trace and offers a graphical user interface (GUI) that uses the Java bridge to facilitate debugging on all platforms.In addition, the built-in dynamic link library RexxUtil offers 29 cross-platform, 25 Windows-specific and four Unix-specific functions for manipulating system files, directories, classes and objects.[35] A MapCollection is a mixin class that defines the basic set of methods implemented by all collections that map from an index to a value.To increase the readability of patterns in the code, the RegularExpression class allows the use of symbolic names encapsulated with colons (:) for common sets.The Buffer and Pointer classes are specifically designed to support writing methods and function in native code using the C/C++ APIs.The Rexx extension library offers classes for reading and writing comma-separated values (CSV) files, as well as for creating and processing JavaScript Object Notation (JSON) data.[21] While ooRexx compared to Object REXX no longer contains classes for SOM and WPS support, it offers application programming interfaces (APIs) for interacting with code written in C or C++.[50] The ooSQLite class provides an interface to SQLite, an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine.[55] OLE Automation is an inter-process communication mechanism developed by Microsoft that is based on a subset of the Component Object Model (COM).This mechanism enables, among other things, the invocation of program functions, the querying and setting of attributes and the interception of component events.The ooRexx interpreter comes with examples that demonstrate OLE interaction with Access, Word, Excel, OpenOffice/LibreOffice, ActiveDirectory, WMI and other programs.
IBM Object REXX Logo
Object REXX (until 2004)
ooRexx logo
ooRexx (since 2005)
Java Swing via BSF4ooRexx
Multi-platform GUIs via BSF4ooRexx
ParadigmMulti-paradigmobject-orientedclass-basedproceduralimperativestructuredDesigned byStable releaseTyping disciplineMemory managementGarbage collectionPlatformx86-64Cross-platformMicrosoft WindowsSolarisOpenIndianaFreeBSDLicenseFilename extensionsimplementationsSmalltalkNetRexxhigh-levelgeneral-purposeinterpretedprogramming languageobject modelencapsulationmessage passingconcurrencyclassesinheritanceOS/2 Warp 4Windows 95Windows NTzLinuxSun/SolarisWindows 2000Windows MeWindows 98Windows NT 4.0source codeSpecial Interest GroupIBM System Object ModelWorkplace ShelleComStationArcaOSfree and open-source softwareCommon Public Licenserefactoredarchitectureinterface64-bitSourceforgeArch LinuxIntellij IDEAsyntax highlightingcode completionJavadocannotationsTCP/IP socketstokeniserfile transfer protocolObject Linking and EmbeddingActiveXWindows Script HostUnicoderegular expressionsWindowsOpen Officeapplication programming interfaceTCP/IPcomma-separated valuesmultipurpose internet mail extensionssimple mail transfer protocolSystemdLinux Standard Baseunit testingncursesbuild environmentprinciple of least astonishmentdynamic programming languagereserved wordsBourne ShellZ-ShellCommand Promptdirectivefree-form syntaxstringstrictly typed languagesAlan Kaystatementsubclassingpolymorphismdata encapsulationmultiple inheritancebase64accessor methodsynchronizationgraphical user interfacedynamic link libraryclass hierarchyinstanceserial interfacesgarbage collectorregular expressionJavaScript Object NotationTCP/IP protocolsWindows dialogsgraphical user interfacestext-based user interfacesfile systemsapplication programming interfaceshandlersmacrosdynamic link librariesshared librariesBean Scripting FrameworkJavaFXJava 2DUniversal Network ObjectsOpenOfficeLibreOffice.NET frameworkmiddlewareSQLiteOpen Database Connectivitythread-safeOLE Automationinter-process communicationMicrosoftComponent Object ModelAccessActiveDirectorysystem event logclipboardregistrySystem Object Model (SOM)Workplace Shell (WPS)Comparison of programming languagesTimeline of programming languagesProgramming languagesComparisonTimelineHistorySimulaAssemblyVisual BasicclassicErlangFortranHaskellJavaScriptKotlinMATLABPascalObject PascalPrologPythonScratchmore...AlphabeticalCategoricalGenerationalNon-English-basedfree and open-source software (FOSS)Carbon Design SystemCGIDEV2EclipseEclipse CheKituraNode-REDOpenAFSOpenJ9PostfixQiskitRed Hat Enterprise LinuxIBM Public LicenseEclipse FoundationFedora ProjectFedora LinuxLinux on IBM ZLinux Technology CenterOpen Invention NetworkOpen Mainframe ProjectOpenPOWER FoundationOpen Source Security FoundationPowerLinux