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.
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]
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]
PL/I has complex rules for how structures are mapped and for when padding is inserted.
However, it can be important to know when there is padding in a structure (for example,
if you pass that structure to a program compiled by a language, such as C or COBOL,
that may map the structure differently).
With Enterprise PL/I 4.1, if you specify the new NOPADDING suboption to the compiler's
RULES option, the compiler will issue an E-level message for any structure that contains
RULES(NOPADDING) is also useful in detecting... [More]
For many years, the only floating point representation on z/OS was hexadecimal float. This is a base 16 representation, but most of us have 10 fingers and most business applications want to perform decimal calculations.
The difference between these 2 bases leads to problems as exemplified by this code:
dcl f1 float dec(6);
dcl f2 fixed dec(5,3);
dcl f3 float dec(6);
f1 = 4;
f2 = f1 / 100e0;
put skip data( f2 );
f3 = 100 * f2;
put skip data( f3 );
This rather disconcerting... [More]
In PL/I conversions, BINARY rules over DECIMAL, and FLOAT, over FIXED.
This means, for example, that when an expression contains a BINARY and a DECIMAL operand, then
the result will be BINARY.
Hence, for the assignment in this code
dcl a fixed bin;
dcl b float dec;
b = b + a ;
there will be these conversions
a will be converted to FLOAT BIN
b will be converted to FLOAT BIN
the sum will be converted to FLOAT DEC
PL/I has always had a series of built-in functions (BINARY, DECIMAL, FIXED, and FLOAT) to help
control such... [More]
If you use the TEST option and DebugTool, Enterprise PL/I will show you the source as you coded it.
So, for example, if you have code that contains an EXEC SQL statement, you will see in the
debugger just that EXEC SQL statement as you coded it and not the many, many statements generated by the
preprocessor and visible in the listing. This is a big plus since those generated
statements will be largely meaningless to you and would certainly not be ones
you should be debugging and fixing.
The same would be true if you were using the CICS... [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]
The history of PL/I stretches back to the 1970s when IBM, at the prompting of the SHARE user group, delivered the first PL/I compiler so that users would have a language with the combined strengths of Fortran and COBOL. IBM then delivered three releases of OS PL/I Version 2 in the 1980s and PL/I for MVS and VM in the early 1990s. All of these releases were based on a common code base that gradually became old, plus both hard and expensive to enhance and maintain.
However, with the advent of the PC, IBM built a completely new PL/I compiler... [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]
Check out all the information about the latest release of PL/I for AIX. You can get a summary of the release as well as all the announcement details. See what's new with PL/I for AIX V3.1 including enhancements to leverage the latest POWER7 hardware and interoperability with the latest middleware. For all the details about the PL/I for AIX, V3.1 announcement, see IBM PL/I for AIX , V3.1 delivers support for the latest IBM POWER7 Systems architecture as well as many functional improvements and usability enhancements .
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]
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]
Code reviews were once common practice, but at some companies they have been reduced or even eliminated entirely. Often this
has been done in the name of cost savings even though the earlier a bug is found in the application life cycle, the less it costs.
Also, if you are still conducting code reviews, your coworkers are probably not perfect: they can miss
some errors and can overlook violations of your coding standards .
Fortunately, the Enterprise PL/I compiler can help you with the latter:
You can change the defaults for the RULES... [More]
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]
Check out all the information about the latest release of Enterprise PL/I for z/OS. You can
get a summary of the release as well as all the announcement details.
See what's new with Enterprise PL/I for z/OS, V4.2 including enhancements to leverage the latest z/OS. For all the details about the Enterprise PL/I for z/OS, V4.2 announcement, see I BM Enterprise PL/I for z/OS V4.2 delivers performance improvements and usability enhancements.
FREE newsletter - get IBM Software news, special #PowerSystems features - subscribe: http ://b it.l y/rs 1rZn #POWER7 We just published a special Power Systems Edition of the newsletter, which you can see here - http ://w ww-1 48.i bm.c om/t ela/ webm ail/ NlDy nami cPag e/95 40/3 2113 /cos meti c?we b_pa ge_i d=54 6427 & pre=0 - and we're also including Power Systems-related content in each monthly issue.
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]
Webcast Join our experts, Ray Jones, Vice President, IBM System z® Software, and Kevin Stoodley, IBM Fellow and CTO for Enterprise Modernization Tools, Compilers and Security, to learn how IBM’s latest compilers, middleware and tools can help you stay on the technology curve. In this complimentary webcast, Ray and Kevin will discuss best practices and approaches to plan and execute a successful compiler migration, alongside CICS®, IMS™ and DB2® upgrades. They will also go over IBM’s strategy for compilers and tools on System z to help you... [More]
This blog entry is the first of two articles that will provide some guidance on how to work
with DB2 large objects (LOBs) in PL/I. They both refer to the 'pliclob.pli' file in the PL/I Cafe 'Files'
section for samples of actual code.
One way to use LOB data from a DB2 table is to declare a host variable
large enough to hold all of the LOB data. This requires your program to
allocate large amounts of storage and requires DB2 to move large amounts
of data. This can be inefficient or impractical.
Or you can use LOB locators and LOB... [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]
Check out this demo showing how to code PL/I to interface with AIX. Using the Power systems sandbox, you can try PL/I for AIX and create a network application in PL/I. Optimize server performance and programmer productivity with IBM
compilers Network application in PL/I: networking, system APIs
PL/I Compilers are now live on the Request for Enhancement (RFE)
Community. It is a great place where you can collaborate with
development teams and other product users. Our development team will
review your RFE and provide status updates throughout its lifecycle. Here is links to the Community : PL/I RFE Looking forward to hearing from you.
Check out all
the information about the latest release of Enterprise PL/I for z/OS.
You can get a summary of the release as well as all the announcement
details. See what's new with Enterprise PL/I for z/OS, V4.3 including enhancements to
leverage the latest z/OS. For all the details about the Enterprise
PL/I for z/OS, V4.3 announcement, see IBM Enterprise PL/I for z/OS V4.3 delivers performance improvements and usability enhancements . ... [More]
At times, it is useful to be able to tailor the compiler to meet the needs of your organization. For example, you might want to suppress certain messages or alter the severity of others. You might want to perform a specific function with each compilation, such as logging statistical information about the compilation into a file. A compiler user exit handles this type of functions. With PL/I, you can write your own user exit or use the exit provided with the product, either 'as is' or slightly modified depending on what you want to do... [More]
Enterprise PL/I for z/OS has consistently delivered innovations to help developers maintain and create applications optimized for deployment on IBM System z servers. Like COBOL, PL/I also focuses on delivering new features to improve performance, productivity, and modernization of proven, business critical applications. IBM has delivered a new release of the PL/I compiler every year since 1999 on System z. The announcement of Enterprise PL/I for z/OS V4.4 has kept this streak alive and reaffirms IBM's commitment to PL/I on... [More]
Today, IBM announced Enterprise PL/I for z/OS V4.4 and z/OS XL C/C++ 2.1. At SHARE in Boston , being held August 11-16, Visda Vokshoori , from the IBM compiler development team, will present the following sessions about these latest PL/I and C/C++ compilers for z/OS. Session 13789: What's New in Enterprise PL/I and C/C++ will discuss all of the new features of the new compiler versions. Enterprise PL/I for z/OS 4.4 features discussed will include: Improved performance of PL/I applications Improved exploitation of zEC12 and zBC12... [More]
The PL/I workstation compiler supports the following interfaces to other products: 1. Using the sort program The compiler provides an interface called PLISRTx (x = A, B, C, or D) that allows you to make use of the IBM-supplied Sort programs. To use the Sort program you must include the correct PL/I statements in your source program and specify the correct data sets in your JCL. 2. Interlanguage Communication between PL/I and C The Interlanguage Communication (ILC) between PL/I and C is supported. You can write PL/I code that either calls or is... [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]
Check out all the information about the latest release of Enterprise PL/I for z/OS. You can get a summary of the release as well as all the announcement details. See what's new with Enterprise PL/I for z/OS, V4.4 including enhancements to leverage the latest z/OS. For all the details about the Enterprise PL/I for z/OS, V4.4 announcement, see here .