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.
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]
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]
Peter Elderon from the IBM compiler development team will be presenting on what's new in Enterprise PL/I for z/OS at SHARE in Anaheim, March 9 to 14. 15284: PL/I - What's New Register for SHARE in Anaheim today!
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]
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]
IBM PL/I compiler team dedicates to offer a better support to you. As several new PTFs have been delivered, IBM PL/I compiler has released a new edition of Enterprise PL/I for AIX V3.1 technical docs. Specifically, new updates including: Language Reference As the AIX compiler essentially matches the PL/I V4.4 z/OS compiler, this updated Language Reference book is identical to the PL/I for z/OS V4.4 book. Several new attributes, statements, built-in functions and built-in subroutines have been included, such as the ASSERT statement... [More]
IBM PL/I compiler has released a new version on System z. The recent announcement of Enterprise PL/I V5.1 reinforces the continuing IBM commitment to the PL/I programming language on the z/OS platform. Specifically, V5.1 offers: Enablement of PL/I applications to handle big data requirements with 64-bit support Increase in programmer productivity and application modernization with XML enhancements Over 20 additional customer-requested enhancements, which include: Built-in function enhancements to improve programmer productivity Support for... [More]
While the ASSERT statement discussed in the previous post is relatively new to PL/I (since it was introduced only with the 4.3 release), there is another, much older statement than can be used in a similar fashion: the SELECT statement. In particular, if you code a SELECT statement without an OTHERWISE clause, if none of the WHEN clauses are true, then the ERROR condition will be raised with an ONCODE and error message indicating that no WHEN clause in the SELECT is true. For example, if you code... [More]
This will be the second half of the break from writing about checking program correctness and writing instead about some new things we made available recently via PTFs. Thing 1: SQL allows the use of a null data: a date with a year, month, and day all equal to 1. PL/I now supports this via a new compiler option: Under the new NULLDATE compiler option, the VALIDDATE and REPATTERN built-in functions will accept the SQL null date as a valid date. For compatibility, NONULLDATE is the default. To use this null date in... [More]
I want to take a break from writing about checking program correctness and to write instead about some new things we made available recently via PTFs. Thing 1: we have added a new built-in function to provide an "unhex" capability. It is modeled after the base64decode8 etc. built-in functions, and in the Language Reference Manual, it would be described as HEXDECODE decodes a source buffer from hex into a target buffer. It returns a FIXED BIN(31) value that indicates the number of bytes that are written into the target buffer.... [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]
There is another new built-in function that also makes it easy to simplify your code: NULLENTRY. Previously to assign a null value to an entry variable, you had to use the UNSPEC pseudovariable, and to test if an entry variable was null, you had to use the UNSPEC built-in function. Moreover, you had no nice way to use INIT with an ENTRY variable. But now instead of writing UNSPEC( funcptr ) = ''B;... [More]
The new INLIST built-in function has made it easy for you to simplify code that tests if a expression is in one of a list of values. But sometimes you may want to test if an expression is in a range of values, as in IF BIRTHYEAR >= 1980 & BIRTHYEAR <= 1999 THEN The new BETWEEN built-in function makes it easy for you to simplify such code. This function returns a bit(1) value indicating if the value of an expression is within the... [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]
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]
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
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 .
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]
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]
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]
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]
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]
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 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
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]
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]
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]
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]