Welcome to the IBM Rational PL/I community. Here you will find the latest technical and business information, and educational information about PL/I and related z/OS and AIX topics including IMS, CICS, and Rational Developer for System z.
Under the old OS PL/I and PL/I for MVS compilers, all extents (i.e. bounds and string lengths) for STATIC variables
and for BASED variables (not using REFER) had to be optionally signed integers. This made it hard to parameterize your
code (unless you used the macro preprocessor and then your listing would look much different than your source).
With Enterprise PL/I however, extents are required only to be what are known as "restricted expressions", i.e. expressions
that the compiler can reduce to a constant at compile time, and... [More]
In the previous blog entry we showed how Character Large Objects (CLOBs)
can be manipulated with LOB locators. In this blog we will discuss
the use of LOB file references.
LOB file reference variables are also very useful when working with
LOBs. The are used to import or export data between a LOB column and
an external file outside the DB2 system.
The benefits of using LOB file reference variables are that they:
- use less CPU time than moving LOB data with a host variable
because the movement of the data would not be overlapped... [More]
There are many good things about the new PLI for AIX 3.1 release, but the biggest is that
PL/I for AIX is now fully up-to-date: it had been stuck at its last release in 2004, but
it now has all the language features added to Enterprise PL/I (and PL/I for Windows) in the
years since then.
Recent blog entries point to documents with all the details of what's in the 3.1 release,
but in brief, PL/I for AIX, Enterprise PL/I, and PL/I for Windows
support the same compiler options
including all the RULES suboptions to enforce code... [More]
Want to experience PL/I for AIX, productive and powerful development environment for building PL/I applications. Check out these features in PL/I for AIX, V3.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... [More]
There are three, perhaps overlooked, new features of Enterprise that let you "compile out" code either
unconditionally or conditionally:
To cause the compiler to skip some code unconditionally, you could try to enclose it in comments. But this works
only if that code itself contains no comments. However, as of the 3.9 release, you can enclose code
in %DO SKIP; ... %END; , and then the compiler will unconditionally skip over the enclosed code.
To cause the compiler to skip over some code conditionally, you can enclose it in a... [More]
ALLOCATE is a storage control built-in function, which allocates storage of the specified size in the heap. You can also use ALLOCATE to allocate the specified size in the specified area. When you specify ALLOCATE (n) , ALLOCATE allocates storage of size n in heap storage and returns the pointer to the allocated storage. If necessary, n is converted to REAL FIXED BINARY (31,0) . If the requested amount of storage is not available, the STORAGE condition is raised. The ALLOCATE built-in function now has the AREA reference as a new... [More]
One of the new options introduced in the new 4.2 release of Enterprise PL/I
is the UNROL L option. However, to understand it, you first need to understand
what the compiler does with loops.
Usually, the compiler turns a DO loop into a sequence of instructions which is
followed by a test and then a conditional branch back to repeat those instructions
with some updated values (and the sequence of instructions may be preceded by a
conditional test to see if the loop should be run at all).
In some situations, the optimizer can make this... [More]
Enterprise PL/I has always supported "named constants", i.e. scalars declared with the VALUE attribute, which make your
code more maintainable than using the constants as is, but which also allow the compiler to produce much better code
than scalars declared with the INITIAL attribute.
With Enterprise 4.1 (actually even with 3.9 although it was not documented then), you can now declare named constants in
structures (as long as all the leaf elements of such a structure have the VALUE attribute and as long as the structure... [More]
Code that uses elements of structures with multiple REFERs can be very expensive : each reference uses one or more
costly library call to remap the structure. Many PL/I users have long known that the of multiple REFERs created a
black hole for performance.
Now, with Enterprise for z/OS 4.1, for structures where all the elements are byte-aligned, those calls will be avoided and
straightforward inline code generated (because if all elements are byte-aligned, no padding is possible and thus the
address calculations are relatively... [More]
Do you want to prove the depth of your PL/I knowledge to a prospective employer? Or do you
want to verify the PL/I skills of a company to whom you might outsource your PL/I code?
The PL/I certification , developed jointly by IBM and representatives from PL/I
companies from Europe and the US, can help with these and similar tasks.
IBM PL/I professional certification site you will find that there are two certification levels for PL/I: one for the general PL/I programmer in your team and a harder test
for the leader of that PL/I... [More]
When you use INLIST rather than a long list of comparisons OR'ed together, your code is easier to read and understand, but it is also easier for the compiler to understand and hence to optimize. For example, for an invocation of INLIST such as inlist( x, 2, 3, 5, 7, 11, 13, 17, 19 ) if x is a FIXED BIN(31) variable, the compiler will generate a branch table to determine the result. And in general, if x is FIXED BIN(p,0) with p <= 31 or FIXED DEC(p,0) with p <= 9, if all the values to test are similarly nice constants,... [More]
Pl/I 4.5 added a new option to help you check the correctness of your code when it runs, and I will describe it in a future blog. But first I would like to write about some existing features (some new and some quite old) that can help you check the correctness of your code (and, yes, compile times checks of your code are even better, and I will also talk about them in a future blog). One of the newest features that can help you check the correctness of your code (and simultaneously document the code as well) is the ASSERT statement. We... [More]
Are you looking for PL/I documentation across different releases? Do you want to access PL/I documentation of both the HTML and PDF format? The PL/I library pages now provide the following types of PL/I documentation in one central location: Announcement letters PDF documentation HTML documentation URL Start visiting the following PL/I library pages: Enterprise PL/I documentation library PL/I for AIX documentation library PL/I for MVS & VM PL/I for VSE
There are many times when you may want to test if a value is equal (or not equal) to one of a set of values. You can do this easily with a SELECT statement or an IF statement as in the following code IF (EXPLAN.ACCESSTYPE = 'I ' | EXPLAN.ACCESSTYPE = 'N ' |... [More]
IBM has been quietly delivering a new release of the PL/I compiler every year since 1999 on System z. The recent announcement of Enterprise PL/I for z/OS continues to show IBM’s commitment to delivering a world class PL/I compiler on System z. Enterprise PL/I for z/OS V4.5 is enhanced to fully exploit the new z13 architecture. It uses the new Vector Facility to improve the performance of the code generated for the verify and search built-in functions and expands the use of the Decimal Floating Point Facility for fixed decimal... [More]