IBM® PL/I for AIX®, V3.1 delivers various performance, usability, quality and serviceability enhancements, which are briefly described below. You can get details on these features and all other aspects of the compiler in the relevant compiler documentation.
PL/I for AIX, V3.1
Enable the integration of business critical PL/I applications with modern web technology
To remain competitive, you need a complete business strategy to help you modernize, integrate, and manage existing applications, data, and skill sets to ease your organization’s transformation into a more flexible business. You need to be able to connect your business components end to end with your suppliers, partners, employees, and customers; and you need to position your organization to quickly take advantage of opportunities and respond to challenges in real time. PL/I for AIX helps you to meet these challenges and lets you use your existing PL/I code while upgrading your applications with the newest technologies.
Integrates, modernizes and manages assets with web services capabilities
With PL/I for AIX 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/1 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.
IBM PL/I for AIX is a leading-edge, AIX-based compiler that maximizes middleware by providing access to IBM DB2® and TXSeries systems.
This new version of PL/I for AIX V3.1, underscores the continuing IBM commitment to the PL/I programming language on the AIX platform.
This version includes back-end optimizer enhancements specific to AIX plus all the enhancements (other than hardware specific items) made to the Enterprise PL/I for z/OS compiler since the last PL/I for AIX release.
PL/I for AIX Version 3.1
- Provides improved performance via both front-end changes and back-end optimizer enhancements
- Provides an improved debugger that enables you to conveniently debug programs form your windows-based workstation
- Improves the MACRO preprocessor
- Provides improved support for SQL and CICS®
- Leverages productivity with new and improved built-in functions
- Increases quality control with new and improved compiler options
- Boosts serviceability with new diagnostics
Provides improved performance
The performance of PL/I for AIX applications has been improved via both front-end changes and back-end optimizer enhancements.
The back-end optimizer, a component common also to the IBM XL compilers, lets your applications leverage the latest industry-leading optimization technology. It will produce for PL/I code that is intended to perform well across all hardware levels, including POWER7®, of AIX.
Front-end changes that improve performance include, but are not limited to:
- The mapping of structures using REFER is done inline if either the REFER is simple or the REFER is complex but all its elements are byte-aligned. In these situations, the generated code will perform significantly faster than previously.
- Conversions between dates using any of the three supported DB2 date-time patterns or the corresponding date-time patterns without any punctuation are inlined.
- Code for REPATTERN is inlined if the target date has a DB2 date-time pattern and the source has either a DB2 date-time pattern or a date- time pattern that starts with YYYYMMDD.
- The CHAR built-in when applied to a CHAR expression is always inlined.
- The assignment of ' ' to WIDECHAR is improved.
- The ALLOCATION built-in function is inlined.
- Assignments to BIT variables with inherited dimensions are inlined if the variables have strides divisible by eight.
- Code generated for some array assignments is improved.
Compile-time performance improvements include:
- The generation of the XREF listing is now faster.
- The handling of duplicate INCLUDEs is also quicker. If the same file is used more than once as an INCLUDE file (for example, if it specifies part of a structure declaration that appears in more than DECLARE statement), then the file is opened and read only once. This leads to faster compilations of programs that contain many duplicate INCLUDEs.
Provides an improved source-level debugger
The IBM Debugger for AIX is an interactive source-level debugger. It works on a Windows®-based client that is connected remotely to a debugger engine running on AIX. The Debugger for AIX lets you conveniently debug applications that are written in C, C++, COBOL and PL/I from your workstation.
The debugger displays application source files and the elements in those source files. You can single-step, step through, or step over a specified line; and you can stop execution at a specified line or condition. While controlling execution, you can monitor variables, registers, memory, call stacks, and other elements.
Improves the MACRO preprocessor
In PL/I for AIX V3.1:
- The MACRO preprocessor now supports an INCOLY suboption, which allows you to specify whether the MACRO preprocessor should process only %INCLUDE statements or whether it should process all macro statements.
- The new MACRO construct %DO SKIP makes it possible to support meta-comments.
- The new NAMEPREFIX option allows you to force macro procedures and variables to start with a specified character. This option allows you to enforce naming conventions for macro procedures and variables.
- The preprocessor now leaves %include, %xinclude, %inscan, and %xinscan in the compiler listing as comments making it easier for you to locate that code in the listings.
Provides improved support for SQL and CICS
In PL/I for AIX V3.1:
- The new DIMACROSS attribute allows you to specify a DIMENSION attribute on a structure but which will effectively be removed from the structure and propagated to its children. This attribute is particularly useful with SQL multi-row fetch.
- The SQL preprocessor now also supports an INCONLY option. This option acts similar to the INCONLY option in the MACRO preprocessor: under PP(SSQL('INCONLY')) only EXEC SQL INCLUDE statements will be processed and all other EXEC SQL statements will be left as is.
- DBCS is now supported by the integrated SQL preprocessor (as it had already been supported by the MACRO and CICS preprocessors).
- The new INDICATORS built-in function makes it easy to declare an array to be used as a SQL indicator variable with a structure.
- The CICS preprocessor has been updated so that it is faster.
Leverages productivity with new and improved built-in functions
PL/I for AIX 3.1 includes a new set of powerful built-in functions to support the processing of UTF data:
|Provide fast Unicode conversions between UTF-8, UTF-16 and UTF-32|
|ULENGTH||Returns the number of UTF-8 or UTF-16 characters in a CHAR or WIDECHAR string, respectively.|
|ULENGTH8||Returns the CHAR length, if the UTF-16 characters in a WIDECHAR string were converted to UTF-8.|
|ULENGTH16||Returns the WIDECHAR length, if the UTF-8 characters in a CHAR string were converted to UTF-16.|
|UPOS||Returns the position of the nth UTF-8 or UTF-16 character in a CHAR or WIDECHAR string, respectively.|
|USUBSTR||Returns the UTF-sensitive substring of a CHAR or WIDECHAR string|
|USURROGATE||Tests if a CHAR or WIDECHAR string contains any surrogate pairs.|
|UVALID||Tests if a CHAR or WIDECHAR string contains valid UTF-8 or UTF-16 data, respectively.|
|UWIDTH||Returns the width of the nth UTF-8 or UTF-16 character in a CHAR or WIDECHAR string, respectively|
In addition, PL/I for AIX 3.1 supports the new built-in functions introduced by Enterprise PL/I such as
· FIXEDBIN, FIXEDDEC, FLOATBIN, and FLOATDEC
· PLITRAN11, PLITRAN12, PLITRAN21, and PLITRAN22
The support for date-time strings in the REPATTERN and other built-in functions has also been enhanced by date formats with zero-suppression (such as ZY-ZM-ZD) and DB2 date formats (such as YYYY-MM-DD).
Increases quality control with new and improved compiler options
With the 3.1 release, PL/I for AIX provides many new and improved options to boost productivity.
|Compiler option||Enables you to|
|CHECK(CONFORMANCE)||Check that structures and array parameters and arguments match.|
|CODEPAGE||Accept the entries 1026 (the Turkish code page) and 1155 (the 1026 code page plus the Euro symbol).|
|DEPRECATE||Request that the compiler flag the usage of specified built-in functions, user variables, or include files. With this option, you can more easily enforce internal quality and naming standards.|
|IGNORE||Suppress PUT FILE and/or DISPLAY statements. You can use these statements for debug purposes while more easily compiling them out of the production version.|
|MAXGEN||Flag statements generating lots of code. With this option, you have the knowledge to improve the efficiency of your programming.|
|MAXNEST||Flag excessive nesting of BEGIN, DO, IF, and PROC statements|
|ONSNAP||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 the calling module and module name can be identified.|
|PPCICS, PPINCLUDE, PPMACRO, and PPSQL||Specify the options to be passed to the corresponding preprocessor|
|QUOTE||Specify alternate code points for the quote (") symbol since this symbol is not code-page invariant|
|USAGE||Control the behavior of the HEX and SUBSTR built-in functions|
|XML||Specify that the tags in the output of the XMLCHAR built-in function be either in all upper case or in the case in which they were declared.|
The RULES suboption now gives you more ability to enforce your coding standards via these new suboptions:
- NOELSEIF flags any ELSE statement that is immediately followed by an IF statement and suggest that it be rewritten as a SELECT statement.
- NOGLOBALDO flags loops with a control variable declared in a parent block.
- NOLAXENTRY flags unprototyped entry declares.
- NOLAXSCALE flags declares of FIXED DEC(p,q) and FIXED BIN(p,q) where q < 0 or q > p
- NOPADDING flags structures with padding.
- NOPROCENDONLY flags END statements for PROCs that do not name the PROC they are closing
- NOSELFASIGN flags assignments of variables to themselves
- NOSTOP flags the use of STOP and EXIT
Also, to simplify compiler options, in PL/I for AIX 3.1,
- The COMPACT option has been dropped
- The default setting for DEFAULT(REORDER/ORDER) has been changed to DEFAULT(REORDER)
- The SAA/SAA2 suboption of the LANGLVL option has been removed since there are no IBM compilers in service that support the SAA language level
Boosts serviceability with new diagnostics
The PL/I for AIX V3.1 compiler provides many new and improved messages. The compiler uses some of these new messages to flag:
- CLOSE statements that occur in an ON ENDFILE block if they could close the file processed in that block (thus detecting a user error that is usually resolved only after a PMR is opened)
- ON ERROR blocks not starting with ON ERROR SYSTEM, thus making it less likely users will have ON ERROR blocks that go into "infinite" loops
- Operations producing FIXED(p,q) with q > p
- DEFINED and BASED variables that are larger than their base even if their base was not declared first
- Assignments of FIXED DEC variables to FIXED DEC if SIZE could be raised
- Assignments that can change a REFER object
- The use variables as tables in TRANSLATE and VERIFY (since this can lead to poor performance)
- The use of a function to set the initial value in a DO loop (since this can lead to unexpected results)
- Any %DECLARE that does specify any attributes, thus leading to easier detection of errors such as the extraneous comma in the statement "%DCL A, CHAR, B FIXED;"
- Any bit prefix operand that does not have the BIT attribute (as it already did for bit infix operands).
- LINESIZE - RECSIZE mismatches where an OPEN specifies a LINESIZE that is too large for the LRECL specified in the file's declare
- Code where the result of a FIXED operation has a negative scale factor
- ENTRYs used as functions but declared without the RETURNS attribute.
- Parameters declared inappropriately as BYVALUE, for example, declaring a FIXED DEC parameter BYVALUE
The PL/I for AIX V3.1 compiler also provides several listing improvements:
- The build date of the preprocessors will be identified. The first line of the output from each of the preprocessors will now include the build date for that preprocessor. These dates will make it easier to determine quickly the level of service customers have installed.
- For compilations that produce no messages, the compiler includes a line stating "no compiler messages" where the compiler messages would have been listed.
- More room at the right margin is provided to be used in the attributes, cross-reference and message listings.
08 August 2018