Features and benefits
With Enterprise PL/I for z/OS V3.9, you can leverage more than 30 years of IBM experience in application development to facilitate your new On Demand Business endeavors, helping integrate PL/I and Web-based business processes in Web services, XML, Java, and PL/I applications. This compiler’s interoperability lets you capitalize on existing IT investment while smoothly incorporating new, Web-based applications as part of your organizations infrastructure.
Enterprise PL/I is a leading-edge, z/OS-based compiler that helps you create and maintain mission-critical, line-of-business PL/I applications to execute on your z/OS systems. It gives you access to DB2, CICS, and IBM IMS systems, and other data and transaction systems.
Developers can use Enterprise PL/I for z/OS to:
Promote the communication and usage of standardized data formats including XML and Unicode.
Simplify componentization and interoperability of PL/I and Java components across distributed applications.
Facilitate reuse of existing applications in WebSphere® and traditional z/OS environments.
Enterprise PL/I for z/OS delivers the following functions:
Compatibility with prior IBM PL/I compilers
Integrated, high-speed XML parser
Debugging support
Integrated CICS and SQL preprocessors
Java interoperability
Performance, usability and serviceability enhancements in V3.9
Compatibility with prior IBM PL/I compilers
Enterprise PL/I contains features to make it more compatible to migrate from the OS PL/I V2 and PL/I for MVS and VM compilers.
XML parsing and generation
Enterprise PL/I for z/OS also provides an XML parser that can be invoked by calling PL/I built-in subroutines. This high-speed parser gives PL/I programs the ability to parse XML documents (in EBCDIC, ASCII, or UTF-16 Unicode) directly within their PL/I applications.
With V3R3 and later, Enterprise PL/I also supports the generation of XML. Through a built-in function, you can dump the contents of a structure as XML into a buffer.
The XML support can be used to enhance your existing high performance IMS transactions written in PL/I in a B2B environment by receiving and sending XML documents. IMS supports the transmission of XML documents in the data portion of the IMS message. The messages can be placed and retrieved from the IMS messages queue for all message regions including MPP, IFP, and BMP.
Debugging support
Enterprise PL/I debugger support includes the HOOK/NOHOOK suboption of the TEST option to control generation of debug hooks or just the information needed for overlay hooks. Support for the auto-monitor and the addition of user-specified options to the listing to help in problem analysis.
Debug Tool for z/OS, V9.1
The previous releases of Enterprise PL/I were available with Alternate Function or Full Function offerings. The Alternate Function offering included the PL/I compiler. The Full Function offering included both the PL/I compiler and the debug capability found in Debug Tool for z/OS. Enterprise PL/I Version 3.8 or later provides the PL/I compiler only. It is not available with a Full Function offering. The latest version of that debug capability can be obtained in Debug Tool for z/OS V9.1, which can be ordered separately. For more information on Debug Tool for z/OS V9.1, refer to Software Announcement 208-264, dated September 23, 2008.
Integrated CICS preprocessor
With the integrated CICS® preprocessor, it is not necessary to run a separate job step that precompiles EXEC CICS statements into PL/I code. Instead, the compile step will handle EXEC CICS statements in the same way that it handles any use of the MACRO facility. Also, since debugging is against the source code fed to the compiler, you can now debug against the source you wrote (rather than what the CICS precompiler produced).
Integrated SQL preprocessor
With the integrated SQL preprocessor, it is not necessary to run a separate job step that precompiles EXEC SQL statements into PL/I code. Instead, the compile step will handle EXEC SQL statements in the same way that it handles any use of the MACRO facility. Also, since debugging is against the source code fed to the compiler, you can now debug against the source you wrote (rather than what the SQL preprocessor produced).
Easier Java interoperabilty
For easier Java interoperability, Enterprise PL/I for z/OS provides:
A thread-safe PL/I library
Multithreading statements (ATTACH, WAIT, DETACH) as part of the PL/I language supported by the compiler
IEEE floating-point support
Since earlier versions of this compiler already supported ASCII and UTF-16 Unicode, the addition of IEEE floating-point support means that this compiler can accept, manipulate, and return Java data without any translation.
Performance enhancements
Additional exploitation of the hardware is implemented in the compiler in order to improve performance of the generated code:
UVALID is now inlined for strings of length 256 or less.
Under ARCH(7) and higher options, CU12, CU14, CU21, CU24, CU41 and CU42 instructions provide faster Unicode conversions between UTF-8, UTF16 and UTF-32. For example, CU12 converts a UTF-8 string to a UTF-16 string.
Under ARCH(7) and higher options, TRTT, TROT, TRTO, and TROO instructions provide fast, inline translations between one byte and two byte buffers. For example, TRTT may be used to "uppercase" a UTF-16 string in the absence of surrogate pairs.
Assignments of like arrays of scalars are now handled as storage copy operations.
All assignments of BIT VARYING to BIT VARYING and byte-aligned BIT NONVARYING to BIT VARYING are now inlined.
ROUND and ROUNDDEC built-in functions are now inlined when the argument to round is a Decimal Floating Point (DFP).
COMPACT option and TUNE option are dropped and the default setting for DEFAULT(REORDER/ORDER) is changed to DEFAULT(REORDER) to simplify the options that you select to improve performance.
Detection of the dereferencing of null pointers exploits the new compare-and-trap instruction under ARCH(8).
The PL/I compiler is now built with ARCH(6) to improve compiler performance.
BIN(31,31) compares are now improved.
Usability enhancements
The CICS preprocessor now supports block-scoping. This adds local CICS declarations to all non-nested procedures.
The SQL preprocessor now supports the PL/I rules for the scope of declarations when resolving host variable references through the new SCOPE option. NOSCOPE is the default for compatibility with previous releases.
The MACRO preprocessor:
Leaves %include, %xinclude, %inscan, and %xinscan statements in the compiler listing as comments making it easier for you to locate that code in the listings.
Provides an additional MACRO construct, %DO SKIP, which makes it possible to support meta-comments.
Supports the NAMEPREFIX option to allow you to force macro procedures and variables to start with a specified character. This options allows you to enforce naming conventions for macro procedures and variables.
The following changes are made to the compiler options:
The IGNORE option suppresses PUT FILE and/or DISPLAY statements. You can now use these statements for debug purposes, while easily compiling them out of the production version.
The NULLSTRPTR suboption of the DEFAULT compiler provides control over whether sysnull or null is assigned to a pointer when the source in assignment is a null string.
The new MAXGEN option specifies the maximum number of intermediate language statements that should be generated for any one user statement and will cause the compiler to flag any statement where this maximum is exceeded.
The new ONSNAP option allows you to request the compiler to insert an ON STRINGRANGE SNAP statement or an ON STRINGSIZE SNAP statement into the prologue of a MAIN or FROMALIEN procedure so that a calling chain trace will be generated if the condition occurs.
The new SHORT suboption of the INITAUTO option limits the INITAUTO option so that it does not duplicate all of the runtime STORAGE option, but does initialize variables that might be optimized to registers.
The new RTCHECK option generates code to test for the dereferencing of null pointers.
The compiler now flags:
Code where the result of a FIXED operation has a scale factor less than zero
ENTRYs used as functions but declared without the RETURNS attribute
Parameters declared as BYVALUE inappropriately, for example, declaring a FIXED DEC parameter BYVALUE
FIXED DECIMAL add and multiply operations that might raise the FIXEDOVERFLOW condition
The RULES option now provides more control over code and identifies where code can be improved:
NOPROCENDONLY flags END statements for PROCs that do not name the PROC they are closing
NOSTOP flags the use of STOP and EXIT
NOLAXQUAL(STRICT) flags variables not qualified with their level-1 name
NOLAXSCALE flags declares of FIXED DEC(p,q) and FIXED BIN(p,q) where q < 0 or q > p
NOGOTO(LOOSE) allows GOTO statements only if they are in the same block
The following date patterns with blank suppression are supported:
ZY-ZM-ZD
ZM/ZD/ZY
ZD.ZM.ZY
YY-ZM-ZD
ZM/ZD/YY
ZD.ZM.YY
The compiler no longer flags seemingly unneeded %INCLUDE.
Support for INONLY, INOUT, and OUTONLY attributes are enabled to improve the documentation of function prototypes and the flagging of uninitialized variables.
Serviceability enhancements
When the compiler cannot open a file, the compiler will now, if possible, also include the related C runtime message in the message in the listing.
If user code requires a DFP conversion at compile time but the compile is running on a machine without DFP hardware, this error will be trapped and a meaningful error issued.
If the SQL preprocessor is invoked more than once without INCONLY as its suboption, then the DBRM library created by the compiler will be empty, and now an E-level message will be issued to warn you about this problem.
