PL/I - PL/I

PL/I
paradigma Prosedürel , zorunlu , yapılandırılmış
Tarafından tasarlandı IBM ve SHARE Dil Geliştirme Komitesi
geliştirici IBM
İlk ortaya çıktı 1964 ; 57 yıl önce ( 1964 )
kararlı sürüm
IBM Enterprise PL/I for z/OS 5.3 / Eylül 2019
İnternet sitesi www .ibm .com /products /pli-compiler-zos
lehçeler
lehçelere bakın
Tarafından etkilenmiş
COBOL , Fortran , ALGOL 60
Etkilenen
Kontrol Dili , PL/M , PL/S , PL-6 , PL/8 , REXX

PL/I ( Programlama Dili Bir , telaffuz edilir / p ɛ l w ʌ n / ve bazen PL/1 yazılır ), IBM tarafından geliştirilen ve yayınlanan prosedürel , zorunlu bir bilgisayar programlama dilidir . Bilimsel, mühendislik, iş ve sistem programlama için tasarlanmıştır. 1960'lı yıllarda tanıtıldığından beri akademik, ticari ve endüstriyel kuruluşlar tarafından kullanılmış ve halen kullanılmaktadır.

PL/I'nin ana alanları veri işleme , sayısal hesaplama , bilimsel hesaplama ve sistem programlamadır . Bu destekler tekrarlama , yapılandırılmış programlama , bağlantılı veri yapısı işleme, sabit nokta , kayan nokta , kompleks , karakter dizesi elleçleme ve biraz dize işleme. Dil sözdizimi İngilizceye benzer ve bunları doğrulamak ve işlemek için geniş bir işlevler kümesiyle karmaşık veri biçimlerini tanımlamak için uygundur.

Erken tarih

1950'lerde ve 1960'ların başında, iş dünyası ve bilimsel kullanıcılar, farklı programlama dillerini kullanarak farklı bilgisayar donanımları için programladılar. İş kullanıcıları hareket edildi Autocoders aracılığıyla COMTRAN'ı için COBOL bilimsel kullanıcılar programlanmış ise, Fortran , ALGOL , GEORGE , ve diğerleri. IBM System / 360 (1964 ilan ve 1966 yılında teslim) tüm mevcut IBM mimarileri yerine geçer kullanıcıların her iki grupta, ortak makine mimarisi olarak tasarlandı. Benzer şekilde IBM, tüm kullanıcılar için tek bir programlama dili istedi. Fortran'ın ticari programcıların ihtiyaç duyduğu özellikleri içerecek şekilde genişletilebileceğini umuyordu. Ekim 1963'te , bu uzantıları Fortran'a önermek için , New York'tan üç IBM'ci ve IBM bilimsel kullanıcılar grubu olan SHARE'in üç üyesinden oluşan bir komite kuruldu . Fortran'ın kısıtlamaları göz önüne alındığında, onlar bunu koyamadık ve gevşek dayalı yeni bir programlama dili tasarımı girişti ALGOL etiketli NPL . Bu kısaltma, Birleşik Krallık Ulusal Fizik Laboratuvarı ile çelişiyordu ve kısaca MPPL (Çok Amaçlı Programlama Dili) ve 1965'te PL/I ( Roma rakamı "I" ile) ile değiştirildi. İlk tanım Nisan 1964'te ortaya çıktı.

IBM, NPL'yi başlangıç ​​noktası olarak aldı ve tasarımı ilk derleyicinin yazılabileceği bir düzeye kadar tamamladı: NPL tanımı kapsam ve ayrıntı olarak eksikti. PL/I dilinin kontrolü, başlangıçta New York Programlama Merkezi'nde ve daha sonra Hursley'deki IBM UK Laboratuvarı'nda verildi . SHARE ve GUIDE kullanıcı grupları, dilin genişletilmesinde yer aldı ve IBM'in PL/I Projeleri aracılığıyla dili kontrol etme sürecinde rol aldı. Bu kadar büyük bir dili tanımlama deneyimi, PL/I'nin resmi bir tanımına olan ihtiyacı gösterdi. 1967'de IBM Laboratuvarı Viyana'da açık ve eksiksiz bir spesifikasyon oluşturmak için bir proje kuruldu . Bu, ilk büyük ölçekli birine sırayla açtı Biçimsel Yöntemler geliştirilmesi için VDM .

Fred Brooks , PL/I'nin CHARACTER veri türüne sahip olmasını sağlama konusunda kredilendirildi.

Dil ilk olarak 1965'te New York'ta yazılan "PL/I Dil Spesifikasyonları. C28-6571" kılavuzunda ayrıntılı olarak belirtilmiş ve yerini 1967'den itibaren Hursley'de yazılan "PL/I Dil Spesifikasyonları. GY33-6003" almıştır. PL/I'yi altmışların sonlarında ve yetmişlerin başlarında geliştirerek GY33-6003 kılavuzunda yayınlayın. Bu kılavuzlar Multics grubu ve diğer ilk uygulayıcılar tarafından kullanılmıştır .

İlk derleyici 1966'da teslim edildi. PL/I Standardı 1976'da onaylandı.

Hedefler ve ilkeler

PL/I için hedefler, dilin erken gelişimi sırasında gelişti. COBOL'un kayıt işleme ve rapor yazma süreçlerinde rekabet gerekliydi. Dilin kullanışlılık kapsamı, sistem programlamayı ve olaya dayalı programlamayı içerecek şekilde büyüdü . PL/I için ek hedefler şunlardı:

  • Fortran ile rekabet eden derlenmiş kodun performansı (ancak bu elde edilmedi)
  • Yeni donanım ve yeni uygulama alanları için genişletilebilirlik
  • Programlama sürecinin geliştirilmiş üretkenliği, çabayı programcıdan derleyiciye aktarır
  • Ana bilgisayar donanımı ve işletim sistemlerinde etkin bir şekilde çalışmak için makine bağımsızlığı

Bu hedeflere ulaşmak için, PL/I çağdaş dillerden fikirler ödünç alırken, önemli ölçüde yeni yetenekler ekledi ve onu ayırt edici, özlü ve okunabilir bir sözdizimi ile yayınladı. Dile karakterini vermek için birçok ilke ve yetenek bir araya geldi ve dilin hedeflerini karşılamada önemliydi:

  • Algol 60'a benzer, altta yatan semantik ( özyineleme dahil ) ile blok yapısı . Argümanlar, gerektiğinde değerler için ( değere göre çağrı ) kukla değişkenler kullanılarak, başvuruya göre çağrı kullanılarak geçirilir .
  • Çok çeşitli hesaplama veri türleri, program kontrol veri türleri ve veri yapısı biçimleri ( güçlü yazma ).
  • Diziler ve diziler için uzantıların yordam parametreleriyle devralındığı dinamik uzantılar.
  • İzin verilen kısaltmalara sahip ifadeler, bildirimler ve ifadeler için kısa sözdizimi. 60 gliflik bir karakter seti için uygundur ve 48'e alt-ayarlanabilir.
  • Bazı karmaşıklıkları gizlemek ve tuş vuruşlarını en aza indirirken dili genişletmeyi kolaylaştırmak için ifadelerde, seçeneklerde ve bildirimlerde kapsamlı bir varsayılanlar yapısı.
  • Yapılandırılmış programlama için iyi bir desteğe sahip güçlü yinelemeli işleme .
  • Ayrılmış kelimeler olmayacaktı (işlev isimleri DATEve TIMEbu amaca ulaşmanın imkansız olduğu kanıtlanmasına rağmen ). Mevcut programları geçersiz kılmadan PL/I'ye yeni öznitelikler, ifadeler ve ifade seçenekleri eklenebilir. Hatta değil IF, THEN, ELSEve DOrezerve edildi.
  • Ortogonallik : Diğer yeteneklerden bağımsız olma ve anlamlı olan her yerde diğer yeteneklerle özgürce birleştirme yeteneği. Her bir yeteneğin anlamlı olduğu tüm bağlamlarda mevcut olması, mümkün olduğu kadar geniş çapta kullanılması ve "keyfi kısıtlamalardan" kaçınması. Ortogonallik, dili "geniş" hale getirmeye yardımcı olur.
  • Çalışma zamanında istisnai koşulları kontrol etmek ve engellemek için istisna işleme yetenekleri.
  • Kaynak kodu bölümlerini tam programlara uyarlamak ve birleştirmek için standardın bir parçası olmayan kapsamlı derleme zamanı olanaklarıyla (aka makrolar ) ayrı olarak derlenebilir bölümlere ayrılmış programlar. Ayrı olarak derlenmiş prosedürleri tek bir programa bağlamak için harici adlar.
  • Dile entegre edilmiş hata ayıklama tesisleri.

Dil özeti

Dil, tüm programcılar için her şey olacak şekilde tasarlanmıştır. Özet, ANSI PL/I Standardından ve ANSI PL/I Genel Amaçlı Alt Küme Standardından alınmıştır.

Bir PL/I programı, her biri bir dizi ifade olarak yazılan bir dizi prosedürden oluşur. %INCLUDEYapı programı çeviri sırasında diğer kaynaklardan metin dahil etmek için kullanılır. Tüm ifade türleri, dile genel bir bakış sağlayan gruplar halinde burada özetlenmiştir (Standart bu organizasyonu kullanır).

Kategori Beyan
Yapısal PROCEDURE(veya PROC)
ENTRY
BEGIN
DO
END
bildirimsel DECLARE(veya DCL)
DEFAULT(veya DFT)
FORMAT
Kontrol akışı CALL
IF
SELECT
GO TO
RETURN
STOP
boş ifade
Kategori Beyan
kesinti işleme ON
SIGNAL
REVERT
Depolamak ALLOCATE(veya ALLOC)
FREE
Atama beyanı
Giriş çıkış OPEN
CLOSE
Akış girişi/çıkışı GET
PUT
Giriş/çıkış kaydı READ
WRITE
REWRITE
LOCATE
DELETE

( Çoklu görev ve PL/I ön işlemcisi gibi özellikler Standartta değildir ancak PL/IF derleyicisinde desteklenir ve diğer bazı uygulamalar Dil evrimi bölümünde tartışılır.)

Adlar, aşağıdaki türlerdeki verileri temsil edecek şekilde, tekli değerler olarak veya boyut başına bir alt sınır ve üst sınır ile diziler biçiminde kümeler veya yapılar (iç içe yapı, dizi ve skaler değişkenler içeren) olarak bildirilebilir. :

  • Arithmetic (aşağıda genişletilmiş)
  • CHARACTER
  • PICTURE for Arithmetic data
  • PICTURE for Character data
  • AREA
  • BIT
  • ENTRY
  • FILE
  • FORMAT
  • LABEL
  • OFFSET
  • POINTER

arithmeticTipi bu özellikleri içerir:

  • bir taban ( BINARYveya DECIMAL) ve
  • bir ölçek ( FIXEDveya FLOAT) ve
  • bir mod ( REALveya COMPLEX) ve
  • a PRECISION( number of digitsve sabit nokta sayıları için a scale factor)

Baz, ölçek, hassasiyet ve ölçek faktörü bir Picture-for-arithmetictürü içinde kodlanır picture-specification. Mod, picture specificationhem gerçek hem de hayali kısımlara uygulanarak ayrı ayrı belirtilir .

Değerler, belirli bir dizi işlem ve yerleşik işlevler kullanılarak yazılan ifadelerle hesaplanır; bunların çoğu, tekli değerler kadar kümelere de uygulanabilen, aynı şekilde, aynı şekilde, küme üzerinde çalışabilen ve aynı şekilde küme üzerinde çalışabilen ve bunları döndürebilen kullanıcı tanımlı prosedürlerle birlikte. tek değerler. Atama ifadesi, bir veya daha fazla değişkene değerler atar.

PL/I'de ayrılmış kelime yoktur. Bir ifade noktalı virgülle sonlandırılır. Bir ifadenin maksimum uzunluğu, uygulama tanımlıdır. Bir yorum, bir boşluğa izin verilen ve önünde eğik çizgi, yıldız işaretinin bulunduğu ve yıldız işareti, eğik çizgi (yani /* This is a comment. */) karakterleriyle sonlandırıldığı bir programda herhangi bir yerde görünebilir . İfadeler, bir giriş adını ( ENTRYve PROCEDUREifadeleri) veya etiket adını tanıtan bir etiket önekine ve bir hesaplama koşulunu etkinleştiren veya devre dışı bırakan bir koşul önekine sahip olabilir – örn (NOSIZE). Giriş ve etiket adları, tekli tanımlayıcılar veya tanımlayıcılar ve ardından sabitlerin bir alt simge listesi olabilir ( 'de olduğu gibi L(12,2):A=0;).

Bir ifade dizisi, öncesinde bir ifade ve ardından bir ifade geldiğinde bir grup haline gelir . Gruplar, iç içe gruplar ve başlangıç ​​blokları içerebilir. İfadesi bir grup ya da tek bir deyimi belirten parçası ve parçanın (örnek program bakınız). Grup yineleme birimidir. Başlangıç bloğu ( ), bloğa yerel adlar ve dahili prosedürler için bildirimler içerebilir. Bir prosedür bir deyimle başlar ve bir deyimle sözdizimsel olarak sonlandırılır . Bir prosedürün gövdesi, bir dizi blok, grup ve ifadedir ve prosedüre veya prosedüre yerel adlar ve prosedürler için bildirimler içerir . DOENDIFTHENELSEBEGIN; stmt-list END;PROCEDUREENDEXTERNAL

Bir ON-ünitesi bir veya daha fazla bunlardan çalıştırılacak tek deyimi veya yazılı ifadelerin bloktur koşulları oluşur:

Bir hesaplama koşulu ,

  • CONVERSION (CONV)
  • FIXEDOVERFLOW (FOFL)
  • OVERFLOW (OFL)
  • SIZE
  • STRINGRANGE (STRG)
  • STRINGSIZE (STRZ)
  • SUBSCRIPTRANGE (SUBRG)
  • UNDERFLOW (UFL)
  • ZERODIVIDE (ZDIV)

veya bir Giriş/Çıkış koşulu,

  • ENDFILE(file)
  • ENDPAGE(file)
  • KEY(file)
  • NAME(file)
  • RECORD(file)
  • TRANSMIT(file)
  • UNDEFINEDFILE(file) (UNDF)

veya koşullardan biri:

  • AREA, CONDITION (identifier), ERROR,FINISH

Bir tanımlayıcının beyanı, aşağıdaki niteliklerden bir veya daha fazlasını içerebilir (ancak bunların karşılıklı olarak tutarlı olmaları gerekir):

Veri Özellikleri Giriş/Çıkış Özellikleri Diğer Nitelikler
ALIGNED DIRECT AUTOMATIC or AUTO
AREA[(area-size)] ENVIRONMENT(options) or ENV... BASED[(reference)]
BINARY [(precision)] or BIN... INPUT BUILTIN
BIT [(maximum-length)] KEYED CONDITION or COND
CHARACTER[(maximum-length)] or CHAR... OUTPUT CONSTANT
COMPLEX [(precision)] or CPLX... PRINT CONTROLLED or CTL
DECIMAL [(precision)] or DEC... SEQUENTIAL or SEQL DEFINED[(reference)] or DEF...
(dimension-attribute) STREAM EXTERNAL or EXT
ENTRY[(parameter descriptor list] UPDATE GENERIC(criteria list)
FILE RECORD INITIAL(value-list) or INIT...
FIXED [(precision)] INTERNAL or INT
FLOAT [(number of digits)] LIKE unsubscripted reference
FORMAT LOCAL
LABEL OPTIONS(options)
MEMBER PARAMETER or PARM
NONVARYING or NONVAR POSITION [(expression)] or POS...
OFFSET[(reference)] STATIC
PICTURE picture-specification or PIC... VARIABLE
POINTER or PTR
STRUCTURE
UNALIGNED or UNAL
VARYING or VAR

Micro Focus'tan ve özellikle IBM'den gelen mevcut derleyiciler , dilin standartlaştırılmış sürümü üzerinde birçok uzantı uygular. IBM uzantıları, daha sonra derleyici için Uygulama alt bölümünde özetlenmiştir. Bu derleyicilerde ortak olan bazı uzantılar olmasına rağmen, geçerli bir standardın olmaması, uyumluluğun garanti edilmediği anlamına gelir.

Standardizasyon

Dil standardizasyonu, Nisan 1966'da Avrupa'da ECMA TC10 ile başladı. 1969'da ANSI , "Kludge" lakaplı ve daha sonra X3J1 PL/I olarak yeniden adlandırılan bir "Bileşik Dil Geliştirme Komitesi" kurdu. Standardizasyon, ECMA TC/10 ve ANSI X3J1'in ortak çabası haline geldi. GY33-6003 belgesinin bir alt kümesi, IBM tarafından ortak çabaya sunuldu ve standardizasyon için temel belge haline geldi. Temel belgeden çıkarılan başlıca özellikler, çoklu görev ve program optimizasyonu için niteliklerdir (örn. NORMALve ABNORMAL).

Temel belgeyi değiştirme önerileri her iki komite tarafından da oylandı. Komiteler aynı fikirde olması halinde, sandalyeler, başlangıçta Michael Marcotty General Motors ve ARAÇ Hoare temsilen ICL anlaşmazlıkları çözmek zorunda kaldı. IBM'e ek olarak Honeywell , CDC , Data General , Digital Equipment Corporation , Prime Computer , Burroughs , RCA ve Univac , Eastman Kodak , MITRE , Union Carbide , Bell Laboratories ve çeşitli hükümet ve üniversite temsilcileri ile birlikte X3J1'de görev yaptı . Dilin daha da geliştirilmesi, standart organlarında, yapılandırılmış programlamada ve iç tutarlılıkta sürekli iyileştirmelerle ve daha belirsiz veya tartışmalı özelliklerin çıkarılmasıyla gerçekleşti.

Dil gelişimi sona yaklaşırken, X3J1/TC10 İngilizce metinle yazılmış bir belgeyle ilgili bir takım sorunlar olduğunu fark etti. Tek bir öğenin tartışılması, aynı fikirde olabilecek veya olmayabilecek birden fazla yerde görünebilir. Eksikler ve tutarsızlıklar olup olmadığını belirlemek zordu. Sonuç olarak, David Beech (IBM), Robert Freiburghouse (Honeywell), Milton Barber (CDC), M. Donald MacLaren ( Argonne National Laboratory ), Craig Franklin (Data General), Lois Frampton (Digital Equipment Corporation) ve editör, DJ Andrews IBM, her biri bir veya daha fazla tam bölüm üreterek tüm belgeyi yeniden yazmayı üstlendi. Standart, anlambilimi belirtmek için bir "PL/I Makinesi" kullanılarak resmi bir tanım olarak ifade edilir. Yarı resmi bir tanım olarak yazılan ilk ve muhtemelen tek programlama dili standardıydı.

1981'de ANSI tarafından bir "PL/I Genel Amaçlı Alt Küme" ("Alt Küme-G") standardı yayınlandı ve bir revizyon 1987'de yayınlandı. Genel Amaçlı alt küme, PL/I uygulamaları için çekirdek olarak geniş çapta benimsendi.

Uygulamalar

IBM PL/IF ve D derleyicileri

PL/I ilk olarak IBM tarafından Birleşik Krallık'taki Hursley Laboratuarlarında System/360'ın geliştirilmesinin bir parçası olarak uygulandı . İlk üretim PL/I derleyicisi , John Nash'in İngiltere'deki Hursley'deki ekibi tarafından oluşturulan OS/360 İşletim Sistemi için PL/IF derleyicisiydi : çalışma zamanı kitaplığı ekibi IM (Nobby) Clarke tarafından yönetiliyordu. PL/IF derleyicisi tamamen System/360 Assembly dilinde yazılmıştır. Sürüm 1, 1966'da gönderildi. OS/360 bir gerçek bellek ortamıdır ve derleyici, 64 kilobayt kadar az gerçek depolamaya sahip sistemler için tasarlanmıştır – S/360 dilinde F 64 kB'dir. 64 kilobaytlık bir makinede bulunan 44 kilobaytlık belleğe büyük bir derleyici sığdırmak için, derleyici bir kontrol aşamasından ve çok sayıda derleyici aşamasından oluşur (100'e yaklaşır). Fazlar, belirli dil özelliklerini ve derlemenin yönlerini ele almak için diskten birer birer belleğe getirilir. Her aşama, genellikle bellekte tutulan, kısmen derlenmiş program üzerinden tek bir geçiş yapar.

PL/IF uygulandıkça dilin özellikleri hala tasarlanıyordu, bu nedenle bazıları daha sonraki sürümlere kadar çıkarıldı. PL/I RECORD I/O, PL/IF Sürüm 2 ile birlikte gönderildi. Liste işleme işlevleri – Tabanlı Değişkenler, İşaretçiler, Alanlar ve Ofsetler ve LOCATE modu I/O  – ilk olarak Sürüm 4'te gönderildi. PL/I kodunu Fortran nesne koduyla rekabet etmek için yükseltirken , PL/IF Sürüm 5 , prosedürlerde REORDER seçeneği tarafından kolaylaştırılan DO döngülerinin önemli ölçüde program optimizasyonunu yapar .

IBM Mohansic Lab'de uyarlanan System/360 Model 67 için TSS/360 zaman paylaşımlı işletim sisteminde PL/IF'nin bir sürümü yayınlandı . Fransa'daki IBM La Gaude Lab, Fortran, Cobol ve Algol programlarını PL/I'nin PL/IF düzeyine dönüştürmek için "Dil Dönüştürme Programları" geliştirdi.

16 kilobayt bellek kullanan PL/ID derleyicisi, DOS/360 alt uç işletim sistemi için IBM Almanya tarafından geliştirilmiştir . Tüm dizelerin ve dizilerin sabit uzantılara sahip olmasını gerektiren PL/I dilinin bir alt kümesini uygular, böylece çalışma zamanı ortamını basitleştirir. Temel işletim sistemini yansıtan dinamik depolama tahsisinden ve kontrollü depolama sınıfından yoksundur . PL/I F bir yıl içinde sevk edildi.

Multics PL/I ve türevleri

Derleyiciler, 1960'ların başında birkaç grup tarafından uygulandı. Üst düzey bir dilde bir işletim sistemi geliştiren ilklerden biri olan MIT'deki Multics projesi, 1964'te uygulama dili olarak PL/I'nin bir alt kümesi olan Early PL/I'yi (EPL) kullandı. Bell Labs ve MIT, Douglas McIlroy , Robert Morris ve diğerleri. Etkili Multics PL/I derleyicisi, bir dizi üretici ve yazılım grubu tarafından kullanılan derleyici teknolojisinin kaynağıydı. EPL, bir sistem programlama dili ve orijinal PL/I'de (değişen uzunluktaki diziler gibi) bazı yeteneklere sahip olmayan bir PL/I lehçesiydi.

Honeywell PL/I derleyicisi (60 Serisi için), tam ANSI X3J1 standardının bir uygulamasıdır.

IBM PL/I'yi optimize etme ve derleyicileri kullanıma alma

Hursley'de üretilen PL/I Optimizer ve Checkout derleyicileri, ortak bir PL/I dili seviyesini destekler ve PL/IF derleyicisinin yerini almayı amaçlar. Ödeme derleyicisi, IBM'in PL/I benzeri tescilli uygulama dili (daha sonra PL/S ) olan BSL'de PL/IF'nin yeniden yazılmasıdır . Derleyiciler için belirlenen performans hedefleri, BCS'ye yönelik bir IBM sunumunda gösterilir. Derleyicilerin aynı sonuçları vermesi gerekiyordu - Checkout Compiler, daha sonra Optimize Edici'ye gönderilecek olan programların hatalarını ayıklamak için kullanılıyor. Derleyicilerin tamamen farklı tasarımları olduğu ve tam PL/I dilini işledikleri göz önüne alındığında, bu hedef zorluydu: başarıldı.

PL/I optimize edici derleyici, PL/IF derleyicisinden devraldı ve 1970'lerden 1990'lara kadar IBM'in beygir gücü derleyicisiydi. PL/IF gibi, 44 kilobayt tasarım noktasına sahip çok geçişli bir derleyicidir, ancak tamamen yeni bir tasarımdır. F derleyicisinden farklı olarak, çalışma zamanı kitaplığını kullanarak sabit ifadelerin derleme zamanı değerlendirmesini gerçekleştirerek derleyici aşaması için maksimum belleği 28 kilobayta indirmelidir. Tasarımda ikinci kez, basamaklı tanılama gibi PL/IF'nin sıkıntılarını ortadan kaldırmayı başardı. Çoğu PL/I F üzerinde çalışmış olan Tony Burbridge liderliğindeki bir ekip tarafından S/360 Macro Assembler'da yazılmıştır. Makrolar, ortak derleyici hizmetlerini otomatikleştirmek ve derleyici yazarlarını gerçekleri yönetme görevinden korumak için tanımlanmıştır. mod depolama, derleyicinin diğer bellek modellerine kolayca taşınmasını sağlar. Çağdaş IBM Fortran H derleyicisi için geliştirilen program optimizasyon teknikleri gamı ​​devreye alındı: Optimizer, iyi programcıların elinde Fortran yürütme hızlarına eşitti. 1970 yılında IBM S/370 ile duyurulan ilk olarak Ağustos 1971'de DOS/360 işletim sistemi için ve kısa bir süre sonra OS/360 ve ilk sanal bellek IBM işletim sistemleri OS/VS1 , MVS ve VM/CMS için sevk edildi . (Geliştiriciler, kodu 28 kb bölümlere ayırırken, IBM Poughkeepsie'nin nihayet OS/360'ta sanal bellek desteği sunmaya hazır olduğunun farkında değillerdi). Toplu programlama ortamlarını destekledi ve TSO ve CMS altında etkileşimli olarak çalıştırılabilir. Bu derleyici, Japon fiş uyumlu makinelerin (PCM'ler) işletim sistemleri de dahil olmak üzere tüm ana bilgisayar işletim sistemlerini kapsayan birçok sürümden geçti .

Derleyicinin yerini aşağıdaki "IBM PL/I for OS/2, AIX, Linux, z/OS" almıştır.

Ağustos 1970'de duyurulan PL/I kontrol derleyicisi (halk dilinde "The Checker"), PL/I programlarının hata ayıklamasını hızlandırmak ve iyileştirmek için tasarlanmıştır. Takım Brian Marks tarafından yönetildi. Üç geçişli tasarım, bir programı derleme süresini F Derleyicisi tarafından alınan sürenin %25'ine indirdi. Etkileşimli bir terminalden çalıştırılabilir ve PL/I programlarını dahili bir biçim olan "H-metin"e dönüştürebilir. Bu biçim, çalışma zamanında Checkout derleyicisi tarafından yorumlanır ve hemen hemen her tür hatayı algılar. İşaretçiler, hedef adresi ve başvurulan öğenin bir tanımını içeren 16 bayt olarak temsil edilir, böylece "kötü" işaretçi kullanımının teşhis edilmesine izin verir. Bir konuşma ortamında, bir hata algılandığında, kontrol, herhangi bir değişkeni inceleyebilen, hata ayıklama ifadeleri sunabilen ve kaynak programı düzenleyebilen kullanıcıya iletilir. Zamanla, anabilgisayar programlama ortamlarının hata ayıklama yeteneği, bu derleyici tarafından sunulan işlevlerin çoğunu geliştirdi ve geri çekildi (1990'larda?)

Aralık PL/I

Belki de IBM'inki dışında ticari olarak en başarılı uygulama, daha sonra DEC PL/I olarak bilinen Digital Equipment Corporation'ın VAX PL/I'siydi. Uygulama "ANSI X3.4-1981 PL/I Genel Amaçlı Alt Kümenin katı bir üst kümesidir ve yeni ANSI X3.74-1987 PL/I Genel Amaçlı Alt Kümeninin özelliklerinin çoğunu sağlar" ve ilk olarak 1988'de piyasaya sürüldü Başlangıçta Dave Cutler tarafından yönetilen bir ekip tarafından oluşturulan VAX Code Generator (VCG) adlı bir derleyici arka ucu kullandı . Ön uç Robert Freiburghouse tarafından tasarlanmıştır ve ortamına aktarılan VAX / VMS dan Multics . VAX ve Alpha üzerinde VMS ve Tru64 üzerinde çalışır . 1990'larda Digital, derleyiciyi daha sonra Kednos adlı bir şirkete satan UniPrise Systems'a sattı. Kednos, derleyiciyi, şirketin ticareti durdurduğu Ekim 2016'ya kadar Kednos PL/I olarak pazarladı.

Alt küme derleyicilerini öğretmek

1960'ların sonlarında ve 1970'lerin başında, birçok ABD ve Kanada üniversitesi kampüste zaman paylaşımlı hizmetler kuruyordu ve fen, matematik, mühendislik ve bilgisayar bilimi öğretiminde kullanılmak üzere konuşma derleyicilerine/tercümanlarına ihtiyaç duyuyordu. Dartmouth geliştiriyordu BASIC , ancak özlü ve öğretme kolay olduğu gibi PL / I, popüler bir seçim oldu. IBM olanakları uygun olmadığından, bazı okullar kendi PL/I alt kümelerini ve kendi etkileşimli desteklerini oluşturdu. Örnekler:

1960 ve 1970'lerin başında, Allen-Babcock bir Paylaşılan Donanım (Rush) zaman paylaşımı sisteminin uzak kullanıcıları uygulanan Model 50 IBM System / 360 özel ile mikrokodunun ve sonradan IBM'in hayata CPS , için interaktif zaman paylaşımlı sistem OS / 360 bilgisayar bilimi temellerini öğretmeyi amaçlayan, BASIC'e ek olarak PL/I dilinin sınırlı bir alt kümesini ve bir uzaktan işe giriş olanağı sundu.

Bir öğretim lehçesi olan PL/C , Cornell Üniversitesi'nde geliştirilen bir derleyici, pek çok sözdizimi hatasının kapsamlı otomatik düzeltmesini kullanarak ve kalan sözdizimi hatalarını çıktı ifadelerine dönüştürerek hiçbir programı derlemede asla başarısız olmama gibi olağandışı bir yeteneğe sahipti. Dil, IBM tarafından uygulandığı şekliyle neredeyse tüm PL/I'ydi. PL/C çok hızlı bir derleyiciydi.

SL/1 (Öğrenci Dili/1, Öğrenci Dili/Bir veya Alt Küme Dili/1), ilk olarak 1960'ların sonlarında mevcut olan veIBM 1130'dayorumsal olarak çalışan bir PL/I alt kümesiydi; öğretimsel kullanım onun güçlü noktasıydı.

Brooklyn Politeknik Enstitüsü'nde oluşturulan PLAGO , PL/I dilinin basitleştirilmiş bir alt kümesini kullandı ve iyi tanısal hata mesajlarına ve hızlı derleme sürelerine odaklandı.

Toronto Üniversitesi Bilgisayar Sistemleri Araştırma Grubu, programlama öğretmek için SP/1, SP/2, SP/3, ..., SP/8 olarak adlandırılan bir dizi PL/I alt kümesini destekleyen SP/k derleyicilerini üretti . SP/k derleyicileri altında hatasız çalışan programlar, IBM'in PL/IF derleyicisi, IBM'in ödeme derleyicisi veya Cornell Üniversitesi'nin PL/C derleyicisi gibi diğer çağdaş PL/I derleyicileri altında aynı sonuçları verdi.

Diğer örnekler şunlardır PL0 New South Wales, University of P. Grouse tarafından ERİK Maryland. Üniversitesi'nde Marvin Zelkowitz tarafından ve PLUTO Toronto Üniversitesi'nden.

OS/2, AIX, Linux, z/OS için IBM PL/I

PL/I'nin büyük bir yenilenmesiyle, California'daki IBM Santa Teresa, 1992'de tamamen yeni bir derleyici başlattı. İlk sevkiyat OS/2 içindi ve çoğu ANSI-G özelliğini ve birçok yeni PL/I özelliğini içeriyordu. Sonraki sürümler ek platformlar sağladı ( MVS , VM , OS/390 , AIX ve Windows ), ancak 2021 itibariyle desteklenen platformlar yalnızca z/OS ve AIX'tir. IBM, PL/I'yi geçildiği alanlarda diğer dillerle (özellikle C ve C++) tam olarak rekabet edebilecek hale getirmek için işlevler eklemeye devam etti. Karşılık gelen "IBM Dil Ortamı", PL/I programlarının Veritabanı ve İşlem sistemleriyle ve C, C++ ve COBOL'da yazılmış programlarla birlikte çalışmasını destekler; derleyici, bu dillerle iletişim için gereken tüm veri türlerini destekler.

PL/I tasarım ilkeleri korundu ve birkaç yeni veri türü, yeni ifadeler ve ifade seçenekleri, yeni istisna koşulları ve yeni program kaynağı organizasyonlarını içeren bu büyük genişlemeye direndi. Ortaya çıkan dil, PL/I Standardının ve önceki IBM derleyicilerinin uyumlu bir üst kümesidir. PL/I'ye eklenen başlıca konular şunlardı:

  • - Kullanıcı tanımlı veri türleri daha iyi destek için yeni özellikler DEFINE ALIAS, ORDINALve DEFINE STRUCTUREkullanıcı tanımlı türleri, tanıtmak açıklamada HANDLEbulucu veri türü, TYPEveri türü kendisi UNIONyeni tip işlemek için veri türünü ve fonksiyonları yerleşik.
  • Ortak PC veri türlerine (örn. UNSIGNED, VARYINGZ) karşılık gelen ek veri türleri ve öznitelikler .
  • Programların okunabilirliğinde iyileştirmeler – genellikle ima edilen kullanımları açık hale getirir (örn BYVALUE. parametreler için öznitelik)
  • Ek yapılandırılmış programlama yapıları.
  • İşleme eklemelerini kesintiye uğratın.
  • Derleme süresi ön işlemcisi, hemen hemen tüm PL/I dizi işleme özelliklerini sunmak ve Uygulama Geliştirme Ortamı ile arabirim oluşturmak için genişletildi

Enterprise PL/I for z/OS olarak adlandırılan z/OS için en yeni PL/I derleyicileri serisi, en son z/Architecture işlemcileri (z14, z13, zEC12, zBC12, z196, z114) için kod oluşturmadan yararlanır. ARCHLVL parm denetimi derleme sırasında geçti ve bunu yapmak için z/OS Language Environment tarafından desteklenen ikinci Yüksek düzey dildi (ilk dil XL C/C++ ve sonuncusu Enterprise COBOL v5.)

Veri tipleri

ORDINALyeni bir hesaplamalı veri türüdür. Sıralı özellikler Pascal'daki gibidir , örn., DEFINE ORDINAL Colour (red, yellow, green, blue, violet); ancak buna ek olarak, yerleşik işlevler aracılığıyla ad ve dahili değerlere erişilebilir. Yerleşik işlevler, sıralı bir değerin öncülüne ve ardılına erişim sağlar.

DEFINE-statement(Aşağıya bakınız) verir ek TYPEler PL dan oluşan beyan edilecek / I yerleşik oluyor nitelikler.

HANDLE(data structure)Bulucu veri türü benzer POINTERveri türü, ama şiddetle belirli bir veri yapısına sadece bağlamak için yazdınız. =>Operatör, bir sap kullanarak bir veri yapısı seçmek için kullanılır.

UNION(Eşdeğer nitelik CELLerken PL / I şartnamelerinde) büyük alternatif için gerekli depolama miktarını kaplar bir birimde aynı depolama paylaşmak için çeşitli skaler değişkenler, diziler veya yapıları izin verir.

PC'de ve C ile rekabet gücü

Bu nitelikler eklendi:

  • Dize öznitelikleri VARYINGZ(sıfır sonlu karakter dizileri için) HEXADEC, WIDECHAR, ve GRAPHIC.
  • İsteğe bağlı aritmetik öznitelikler UNSIGNEDve SIGNED, BIGENDIANve LITTLEENDIAN. limit değeri aşmadan sayaç kontrollü bir döngünün yürütülmesini sağlayan yinelemeli gruplarda ve seçeneğini UNSIGNEDgerekli kıldı (ayrıca s için gereklidir ve döngüleri belgelemek için iyidir).UPTHRUDOWNTHRUORDINAL
  • En DATE(pattern)iyi güncel uygulamaya zaman ve tarih getirmek için tarih gösterimlerini ve eklemeleri kontrol etme özelliği. Tarihleri ​​işlemek için yeni işlevler arasında - DAYSve DAYSTODATEtarihler ve gün sayısı arasında dönüştürme ve DATETIMEtarih biçimlerini değiştirmek için genel bir işlev bulunur.

Yeni dize işleme fonksiyonları eklendi - merkezi metne, bir resim biçimini kullanarak düzenlemeye ve başın veya metin kuyruğundan Döşeme boşlukları veya seçilen karakterlere, VERIFYRiçin VERIFYsağdan. ve SEARCHve TALLYişlevleri.

Bileşik atama operatörleri a la C örneğin +=, &=, -=, ||=eklendi. A+=1eşdeğerdir A=A+1.

Atlanan argümanlar ve değişken uzunluklu argüman listeleri için ek parametre tanımlayıcıları ve öznitelikler eklendi.

Program okunabilirliği – niyetleri açık hale getirmek

VALUEÖzelliği, (a spesifik hazır bir değer veya sınırlı ifade elde edilir) sabit olarak bir tanımlayıcı bildirir.

Parametreler BYADDR(adrese göre geçiş) veya BYVALUE(değere göre geçiş) özelliklerine sahip olabilir.

ASSIGNABLEVe NONASSIGNABLEnitelikleri istenmeyen atamaları engellemek.

DO FOREVER;yapmacık yapıya olan ihtiyacı ortadan kaldırır DO WHILE ( '1'B );.

DEFINE-statementTanıtır kullanıcının belirlediği isimler (örneğin INTEGERözniteliklerde yerleşik kombinasyonları için) (örn FIXED BINARY(31,0)). Böylece adı , yerleşik öznitelikler kümesi için bir takma ad olarak DEFINE ALIAS INTEGER FIXED BINARY(31.0)oluşturur FIXED BINARY(31.0). yapılar ve üyeleri için geçerlidir; bir yapı bildiriminde ( özniteliğin bir genellemesi ) kullanım için bir dizi yapı özniteliği ve karşılık gelen alt yapı üyesi bildirimi için bir ad sağlar . TYPEINTEGERDEFINE STRUCTURETYPELIKE

Yapılandırılmış programlama eklemeleri

Bir LEAVEdöngüden çıkmak için bir ifade ve bir döngünün ITERATEsonraki yinelemesi ile devam etmek için bir ifade.

UPTHRUve DOWNTHRUyinelemeli gruplardaki seçenekler.

Bir birim olarak kullanım için bir dizi prosedür ve bildirimden oluşan paket yapısı. Prosedürlerin dışında bildirilen değişkenler pakette yereldir ve STATIC, BASEDveya CONTROLLEDdepolamayı kullanabilir . Ayrıca paket içinde kullanılan Prosedür isimleri yerel olmakla vasıtasıyla dış yapılabilir EXPORTSseçeneği PACKAGE-statement.

kesinti işleme

RESIGNAL-statementBir ON-birimde gerçekleştirilir ON-biriminin yürütülmesini durdurur ve mevcut bir (bu işlem için karşılık gelen ON-birimine böylece geçiş kontrolü) olarak adlandırılan bu prosedür tekrar durum ortaya çıkarmaktadır.

INVALIDOPDurumu sapları geçersiz işlem kodları, iki sonsuz değerler çıkarılmak olarak bilgisayarda, hem de kaçak aritmetik işlemler ile tespit edilmiştir.

ANYCONDITIONKoşulu ON-ünitesinin belirli cari prosedür temin edildiği için kesişme koşulları sağlanmaktadır.

STORAGEBir zaman durum yükseltilir ALLOCATEaçıklamada yeterli depolama alamazsa.

Diğer ana bilgisayar ve mini bilgisayar derleyicileri

Bir dizi satıcı, 1970'lerde ana bilgisayarlar ve mini bilgisayarlar üzerinde IBM PL/IF veya Optimize derleyici ile rekabet etmek için derleyiciler üretti. 1980'lerde hedef genellikle ortaya çıkan ANSI-G alt kümesiydi.

  • 1974'te Burroughs Corporation , B6700 ve B7700 için PL/I'yi duyurdu.
  • UNIVAC bir UNIVAC PL/I yayınladı ve 1970'lerde sistem programlaması için PL/I, PL/I PLUS'ın bir çeşidini de kullandı.
  • 1978'den itibaren Data General , AOS , AOS/VS ve AOS/VS II işletim sistemlerini çalıştıran Eclipse ve Eclipse MV platformlarında PL/I sağladı . Bu dilde bir dizi işletim sistemi yardımcı programı yazılmıştır.
  • NYU'nun Courant Matematik Bilimleri Enstitüsü'nden Paul Abrahams, 1972'de PL/I'de CIMS PL/I'yi yazdı, PL/I F aracılığıyla önyükleme yaptı. CDC 6600'e derlenen PL/I'nin "yaklaşık %70'ini" destekledi.
  • CDC , Cyber ​​70, 170 ve 6000 serisi için optimize edici bir alt küme PL/I derleyicisi sağladı.
  • Fujitsu, PL/I Optimizer'a eşdeğer bir PL/I derleyici sağladı.
  • Stratus Technologies PL/I, VOS işletim sistemi için bir ANSI G uygulamasıdır .
  • IBM Series/1 PL/I, IBM Series/1 Realtime Programming System için ANSI Programlama Dili PL/I'nin (ANSI X3.53-1976) genişletilmiş bir alt kümesidir.

Microsoft .NET için PL/I derleyicileri

  • 2011'de Raincode, Microsoft .NET ve .NET Core platformları için Raincode PL/I derleyicisi adlı tam bir eski derleyici tasarladı .

Kişisel bilgisayarlar ve Unix için PL/I derleyicileri

  • 1970 ve 1980'ler yılında Dijital Research için PL / I derleyici satılan CP / M (PL / I-80), CP / M-86 (PL / I-86) ile Kişisel Bilgisayarlar DOS . PL/I'nin Alt Kümesi G'ye dayanıyordu ve PL/M ile yazılmıştı .
  • Micro Focus , Liant'tan aldıkları Windows ve UNIX/Linux sistemleri için Open PL/I'yi uyguladı.
  • IBM , 1994'te OS/2 için PL/I ve 1995'te AIX için PL/I sağladı.
  • OS/2 ve sonraki Linux için Iron Spring PL/I 2007'de tanıtıldı.

PL/I lehçeleri

  • PL/ I'nin bir lehçesi olan PL/S , başlangıçta BSL olarak adlandırıldı ve 1960'ların sonlarında geliştirildi ve IBM ana bilgisayarları için sistem programlama dili oldu. 1970'lerde ve 1980'lerde neredeyse tüm IBM ana bilgisayar sistemi yazılımları PL/S ile yazılmıştır. PL/I'den farkı, veri türü dönüştürmeleri olmaması, çalışma zamanı ortamı olmaması, yapıların farklı şekilde eşlenmesi ve atamanın bayt bayt kopya olmasıdır. Tüm dizeler ve diziler sabit uzantılara sahipti veya REFERseçeneği kullandı . PL/S'nin yerini PL/AS ve ardından şu anda mevcut işletim sistemlerinde dahili çalışma için kullanılan dil olan PL/X, OS/390 ve şimdi z/OS aldı . Ayrıca bazı z/VSE ve z/VM bileşenleri için de kullanılır . Db2 for z/OS ayrıca PL/X ile yazılmıştır.
  • PL/C , 1970'lerde Cornell Üniversitesi'nde geliştirilen PL/I bilgisayar programlama dilinin bir öğretim lehçesidir.
  • IBM tarafından System/38 ve AS/400 platformlarının sistem yazılımlarında PL/MP (Machine Product) ve PL/MI (Machine Interface) adlı iki PL/I lehçesi kullanılmıştır . PL/MP, bu işletim sistemlerinin sözde Dikey Mikrokodunu uygulamak için kullanıldı ve IMPI komut setini hedef aldı. OS/400, IBM RS64 işlemci ailesine taşındığında C++ ile değiştirildi . PL/MI , bu platformların Makine Arayüzünü hedefler ve Kontrol Programı Tesisinde ve OS/400'ün donanımdan bağımsız bileşenlerinde kullanılır . IBM i'de kullanımda kalır.
  • PL/ I'nin yaklaşık %80'i olduğu için sözde PL/8 (veya PL.8), ilk olarak 1970'lerde IBM 801 mimarisi için IBM Research tarafından geliştirilmiştir . Daha sonra Motorola 68000 ve System/370 mimarileri için destek kazandı . Birkaç IBM dahili sistem geliştirme görevi için kullanılmaya devam ediyor (örneğin , z/Architecture sistemleri için millicode ve bellenim ) ve 64-bit gcc tabanlı bir arka uç kullanmak üzere yeniden tasarlandı .
  • Honeywell, Inc. , CP-6 işletim sisteminin oluşturulmasında kullanılmak üzere PL-6'yı geliştirdi .
  • Prime Computer , PRIMOS işletim sisteminin sistem programlama dili olarak iki farklı PL/I lehçesi kullandı : PL/P , sürüm 18'den itibaren ve ardından SPL, sürüm 19'dan başlayarak.
  • XPL , XPL derleyici tekniklerini kullanarak diğer derleyicileri yazmak için kullanılan bir PL/I lehçesidir. XPL, küçük PL/I alt kümesine bir yığın dize veri türü ekledi.
  • HAL/S , en iyi Uzay Mekiği programında kullanımıyla bilinen gerçek zamanlı bir havacılık programlama dilidir. 1970'lerde Intermetrics tarafından NASA için tasarlandı. HAL/S, XPL'de uygulandı.
  • IBM ve çeşitli taşeronlar, 1970'lerin başında, Donanma için SPL/I adı verilen sinyal işlemeyi desteklemek için başka bir PL/I varyantı geliştirdiler.
  • Sabre havayolu rezervasyon sistemini programlamak için kullanılan PL/ I'nin gerçek zamanlı bir lehçesi olan SabreTalk .

kullanım

PL/I uygulamaları 1960'ların sonundan itibaren ana bilgisayarlar, 1970'lerde mini bilgisayarlar ve 1980'ler ve 1990'larda kişisel bilgisayarlar için geliştirildi. Başlıca kullanımı ana bilgisayarlarda olmasına rağmen, DOS , Microsoft Windows , OS/2 , AIX , OpenVMS ve Unix için PL/I sürümleri vardır .

İş verilerinin işlenmesinde ve belirli platformlarda işletim sistemleri yazmak için sistem kullanımında yaygın olarak kullanılmaktadır. PL/I ile çok karmaşık ve güçlü sistemler oluşturulmuştur:

  • SAS Sistemi başlangıçta PL / I yazılmış; SAS veri adımı hala PL/I sözdiziminde modellenmiştir.
  • Öncü çevrimiçi havayolu rezervasyon sistemi Sabre , orijinal olarak IBM 7090 için birleştiricide yazılmıştır. S/360 sürümü büyük ölçüde , özel bir kontrol programı için amaca yönelik oluşturulmuş bir PL/I alt kümesi olan SabreTalk kullanılarak yazılmıştır .
  • Multics işletim sistemi büyük ölçüde PL / I yazılmış.
  • PL/I, IBM'in Sistem Ağı Mimarisini yorumlamak için yürütülebilir bir resmi tanım yazmak için kullanıldı .

PL/I, destekçilerinin Fortran ve COBOL'un yerini alacağı ve ana bilgisayarlarda ana oyuncu olacağına dair umutlarını yerine getirmedi. Azınlık ama önemli bir oyuncu olarak kaldı. Bunun kesin bir açıklaması olamaz, ancak 1970'lerde ve 1980'lerdeki bazı eğilimler, PL/I'nin rekabet avantajına sahip olduğu bölgeyi giderek azaltarak başarısına engel oldu.

İlk olarak, anabilgisayar yazılım ortamının doğası değişti. Veritabanı ve işlem işleme için uygulama alt sistemleri ( CICS ve IMS ve System 370 üzerinde Oracle ) ve uygulama oluşturucular, anabilgisayar kullanıcılarının uygulama geliştirmesinin odak noktası haline geldi. Dilin önemli kısımları, alt sistemlerin karşılık gelen yerel özelliklerini (görevlendirme ve girdi/çıktıların çoğu gibi) kullanma ihtiyacı nedeniyle alakasız hale geldi. Fortran bu uygulama alanlarında kullanılmadı, PL/I'yi COBOL'un alanıyla sınırladı; çoğu kullanıcı COBOL ile kaldı. Ancak PC, program geliştirme için baskın ortam haline geldiğinden, Fortran, COBOL ve PL/I'nin tümü, C++ , Java ve benzerleri tarafından devralınan azınlık dilleri haline geldi .

İkincisi, sistem programlama alanında PL/I geçildi. IBM sistem programlama topluluğu, PL/I'yi kullanmaya hazır değildi; bunun yerine IBM, sistem programlaması için özel bir PL/I lehçesi geliştirdi ve benimsedi. – PL/S . IBM içinde PL/S'nin ve IBM dışında C'nin başarısıyla, sistem programlama için benzersiz PL/I güçleri daha az değerli hale geldi.

Üçüncüsü, geliştirme ortamları, yine benzersiz PL/I etkileşimli ve hata ayıklama güçlerini daha az değerli kılan etkileşimli yazılım geliştirme yeteneklerini artırdı.

Dördüncüsü, COBOL ve Fortran'a yapılandırılmış programlama, karakter dizisi işlemleri ve nesne yönelimi gibi özellikler eklendi, bu da PL/I'nin göreceli avantajlarını daha da azalttı.

Ana bilgisayarlarda da önemli ticari sorunlar söz konusuydu. IBM'in donanım rakiplerinin PL/I başarısından kazanacakları çok az ve kaybedecekleri çok şey vardı. Derleyici geliştirme pahalıydı ve IBM derleyici grupları, yerleşik bir rekabet avantajına sahipti. Birçok IBM kullanıcısı, tescilli çözümlere kilitlenmekten kaçınmak istedi. Diğer satıcılar tarafından PL/I için erken destek sağlanmadığı için PL/I'den kaçınmak en iyisiydi.

PL/I dilinin evrimi

Bu makale, dil özellikleri için referans noktası olarak PL/I standardını kullanır. Ancak ilk uygulamalarda önemli olan bazı özellikler Standartta yoktu; ve bazıları IBM dışı derleyiciler tarafından sunuldu. Ve fiili dil, standarttan sonra, nihayetinde Kişisel Bilgisayardaki gelişmeler tarafından yönlendirilerek büyümeye devam etti.

Standarttan çıkarılmış önemli özellikler

Çoklu görev

Çoklu görev , PL/IF, Optimizer ve daha yeni AIX ve Z/OS derleyicileri tarafından uygulandı. Veri türlerini EVENTve TASK, TASK-optionüzerinde CALL-statement( Fork ), WAIT-statement( Join ), DELAY(delay-time), EVENT-options on kayıt I/O deyimlerini ve dosyalardaki UNLOCKkilitli kayıtların kilidini açmak için deyimi içeriyordu EXCLUSIVE. Olay verileri belirli bir olayı tanımlar ve tamamlanmış ('1'B) veya eksik ('0'B) olup olmadığını belirtir: görev veri öğeleri belirli bir görevi (veya süreci ) tanımlar ve diğer görevlere göre önceliğini belirtir.

önişlemci

İlk IBM Derleme zaman önişlemcisi , Cambridge, Mass'ta bulunan IBM Boston Gelişmiş Programlama Merkezi tarafından oluşturuldu ve PL/IF derleyicisiyle birlikte gönderildi. %INCLUDEİfadesi Standart, ama özellikleri dinlenme değildi. DEC ve Kednos PL/I derleyicileri, kendilerine ait bazı eklemelerle birlikte, IBM ile hemen hemen aynı özellikler grubunu uyguladılar. IBM, derleyicilerine önişlemci özellikleri eklemeye devam etmiştir. Önişlemci, yazılı kaynak programı, bir çıktı kaynak dosyasına kopyalayarak veya üzerlerinde hareket ederek bir dizi belirteç olarak ele alır. % simgesiyle karşılaşıldığında, aşağıdaki derleme zamanı ifadesi yürütülür: bir tanımlayıcı simgesiyle karşılaşıldığında ve tanımlayıcı DECLAREd, ACTIVATEd olduğunda ve bir derleme zamanı değeri atandığında, tanımlayıcı bu değerle değiştirilir. +ACTIVATEd derleme zamanı ifadelerinin değerleri gibi, eylem gerektirmiyorlarsa (örneğin ) belirteçler çıktı akışına eklenir . Böylece bir derleme zamanı değişkeni PIkullanılarak bildirilebilir, etkinleştirilebilir ve atanabilir %PI='3.14159265'. Daha sonraki oluşumlar PIile değiştirilir 3.14159265.

Desteklenen veri türü, maksimum uzunluğu olmayan değişken uzunluktaki FIXED DECIMALtamsayılar ve CHARACTERdizelerdir. Yapı ifadeleri şunlardır:

  • %[label-list:]DO iteration: statements; %[label-list:]END;
  • %procedure-name: PROCEDURE (parameter list) RETURNS (type); statements...;
  • %[label-list:]END;
  • %[label-list:]IF...%THEN...%ELSE..

ve ayrıca bir [label-list:] içerebilen basit ifadeler

  • %ACTIVATE(identifier-list) and %DEACTIVATE
  • assignment Beyan
  • %DECLARE identifier-attribute-list
  • %GO TO label
  • %INCLUDE
  • null Beyan

Bu özellik, programcıların sabitler için tanımlayıcıları – örneğin ürün parça numaraları veya matematiksel sabitler – kullanmasına izin verdi ve standartta, hesaplama verileri için adlandırılmış sabitler tarafından değiştirildi. Derleme zamanı olanaklarıyla mümkün olan koşullu derleme ve yinelemeli kaynak kodu oluşturma, standart tarafından desteklenmiyordu. Birkaç üretici bu tesisleri hayata geçirdi.

Yapılandırılmış programlama eklemeleri

Standardizasyon sırasında PL/I'ye yapılandırılmış programlama eklemeleri yapıldı ancak standarda kabul edilmedi. Bu özellikler vardı LEAVE-statementiteratif çıkmak için DO, UNTIL-optionve REPEAT-optionilave DOve vaka bildirimi genel formunun: SELECT (expression) {WHEN (expression) group}... OTHERWISE group
Bu özellikler tüm IBM'in PL / I Checkout dahildir ve derleyiciler optimize edilmiş ve Aralık PL / I.

Hata ayıklama olanakları

PL/IF, standart için öne sürülmemiş ancak başkaları tarafından uygulanan bazı hata ayıklama olanakları sunmuştu - özellikle CHECK(değişken listesi) koşul öneki, CHECKkoşullu ve SNAPseçenek. IBM Optimizing and Checkout derleyicileri, karşılıklı konuşma anabilgisayar programlama ortamına (örneğin bir ATTENTIONkoşul) uygun ek özellikler ekledi .

Standarttan bu yana geliştirilen önemli özellikler

Birkaç veri türünden birine sahip olabilecek bir yapı elemanı türü tasarlamak için birkaç girişimde bulunulmuştu (IBM'nin CELLbaşlarında). Büyüme ile sınıfları - teoriyi programlama içinde, bu PL / I tabanında mümkün hale yaklaşımları UNION, TYPEvb birçok derleyici tarafından eklenmiştir.

PL/I, tek baytlık bir karakter dünyasında tasarlanmıştı. Japonca ve Çince dil desteğinin zorunlu hale gelmesi ve Uluslararası Kod Sayfalarındaki gelişmelerle, karakter dizisi konsepti, ASCII/EBCDIC olmayan geniş dizileri barındıracak şekilde genişletildi.

Tarih ve saati yaklaşık 35 farklı biçimden birinde döndüren DATETIME işlevinin tanıtılmasıyla , milenyum sorunuyla başa çıkmak için saat ve tarih işleme elden geçirildi . Diğer birçok tarih işlevi, günler ve saniyeler arasındaki dönüşümlerle ilgilenir.

eleştiriler

Uygulama sorunları

Dilin öğrenilmesi ve kullanılması kolay olsa da, bir PL/I derleyicisini uygulamak zor ve zaman alıcıdır. PL/I kadar büyük bir dil, çoğu satıcının üretebileceği ve çoğu kullanıcının ustalaşabileceği alt kümelere ihtiyaç duyuyordu. "ANSI G" yayınlanana kadar bu çözülmedi. PL/I'ye özgü derleme zamanı tesisleri, ek uygulama çabası ve ek derleyici geçişleri aldı. Bir PL/I derleyicisi, karşılaştırılabilir Fortran veya COBOL derleyicilerinden iki ila dört kat daha büyüktü ve aynı zamanda çok daha yavaştı - sözde programcı üretkenliğindeki kazançlarla dengeleniyordu. Bu, ilk derleyiciler yazılmadan önce IBM'de bekleniyordu.

Bazıları PL/I'nin ayrıştırılmasının alışılmadık derecede zor olduğunu iddia ediyor. PL/I anahtar sözcükleri ayrılmamıştır, böylece programcılar bunları programlarda değişken veya prosedür adları olarak kullanabilirler. Orijinal PL/I(F) derleyicisi , yanlış bir bağlamda kullanılan bir anahtar sözcükle karşılaştığında otomatik düzeltmeyi denediğinden , genellikle bunun bir değişken adı olduğunu varsayar. Bu, daha sonraki derleyiciler tarafından çözülen bir sorun olan "basamaklı tanılamaya" yol açar.

İyi bir nesne kodu üretmek için gereken çaba, dilin ilk tasarımı sırasında belki de hafife alındı. Program optimizasyonu (mükemmel bir program optimizasyonu ile rekabet ettiğini gerekiyordu mevcut Fortran derleyici tarafından gerçekleştirilen) nedeniyle alışılmadık karmaşıktır yan etkileri ile yaygın sorunlardan aliasing değişkenlerin. (Görünmeyen) arayanlarda "ON deyimleri" tarafından sağlanabilen istisna işleyicilerinde öngörülemeyen değişiklik eşzamansız olarak gerçekleşebilir . Bunlar birlikte, bir programın değişkenlerinin çalışma zamanında ne zaman değiştirilebileceğini güvenilir bir şekilde tahmin etmeyi zorlaştırır. Ancak tipik kullanımda, kullanıcı tarafından yazılan hata işleyicileri ( ON-unit) genellikle değişkenlere atama yapmaz. Yukarıda bahsedilen zorluklara rağmen IBM, 1971 yılında PL/I Optimizasyon Derleyicisini üretti.

PL/I , derleyiciye maliyet ve karmaşıklık katan çoklu görev desteği (dilin bir IBM uzantısı) gibi nadiren kullanılan birçok özelliği içerir ve birlikte işleme tesisleri, birden çok iş parçacığını engellemeyen bir çoklu programlama ortamı gerektirir. işletim sistemi tarafından işlemler için . Derleyici yazarları bu özelliklerin uygulanıp uygulanmayacağını seçmekte özgürdü.

Bildirilmemiş bir değişken, varsayılan olarak, ilk oluşumu tarafından bildirilir; bu nedenle, yanlış yazım, öngörülemeyen sonuçlara yol açabilir. Bu "örtük beyan", FORTRAN programlarından farklı değildir. Ancak PL/I(F) için bir öznitelik listesi, programcının herhangi bir yanlış yazılmış veya bildirilmemiş değişkeni algılamasını sağlar.

Programcı sorunları

Pek çok programcı , dilin algılanan karmaşıklığı ve PL/IF derleyicisinin olgunlaşmamışlığı nedeniyle COBOL veya Fortran'dan geçmekte yavaştı . Programcılar keskin bir şekilde bilimsel programcılar (Fortran'ı kullananlar) ve iş programcıları (COBOL kullananlar) olarak ikiye ayrıldı ve gruplar arasında önemli bir gerilim ve hatta hoşnutsuzluk vardı. PL/I sözdizimi hem COBOL hem de Fortran sözdiziminden ödünç alınmıştır. Bu nedenle, zamanın Fortran programcıları işlerini kolaylaştıracak özellikleri fark etmek yerine, COBOL sözdizimini fark ettiler ve bunun bir iş dili olduğu görüşüne sahipken, COBOL programcıları Fortran sözdizimini fark ettiler ve ona bilimsel bir dil olarak baktılar.

Hem COBOL hem de Fortran programcıları onu kendi dillerinin "daha büyük" bir versiyonu olarak gördüler ve her ikisi de dilden biraz korktu ve onu benimsemeye isteksizdi. Diğer bir faktör ise COBOL, Fortran ve ALGOL'a sahte benzerliklerdi. Bunlar, bu dillerden birine benzeyen ancak PL/I'de farklı çalışan PL/I öğeleriydi. Bu tür hayal kırıklıkları, birçok deneyimli programcıyı PL/I hakkında sarılıklı bir bakış açısıyla ve genellikle dil için aktif bir hoşnutsuzlukla bıraktı. Erken bir UNIX servet dosyası, dilin aşağıdaki açık sözlü açıklamasını içeriyordu:

PL/I'nin inceliklerine dalmış biri olarak konuşursak, yalnızca Real Men'in bu kadar makine-dolandırıcı, döngüleri yakalayan, her şeyi kapsayan bir canavar yazabileceğinden eminim. Bir dizi ayırın ve ortadaki üçte birini serbest bırakın? Emin olmak! Neden olmasın? Bir karakter dizesini bir bit dizesiyle çarpın ve sonucu bir kayan noktalı ondalık sayıya atayın mı? Devam etmek! Kontrollü bir değişken prosedür parametresini serbest bırakın ve geri iletmeden önce yeniden tahsis edin? Aynı bellek konumuna üç farklı değişken türü bindirilsin mi? Söylediğin herhangi bir şey! Özyinelemeli bir makro yaz? Hayır, ama Gerçek Adamlar yeniden taramayı kullanır. Real Men tarafından bu kadar açık bir şekilde tasarlanmış ve yazılmış bir dil, Real Man'in kullanımına yönelik olamaz mı?

Olumlu tarafı, tüm veri türlerine (yapılara işaretçiler dahil), özyineleme , çoklu görev , dize işleme ve kapsamlı yerleşik işlevlere yönelik işaretçiler için tam destek , PL/I'nin gerçekten de programlama dillerine kıyasla oldukça ileri bir adım olduğu anlamına geliyordu. zaman. Ancak bunlar, programcıların veya mağazaların çoğunluğunu PL/I'ye geçmeye ikna etmeye yetmedi.

PL/IF derleyicisinin derleme zamanı önişlemcisi , hedef dilin sözdizimini ve anlambilimini kullanırken ( örneğin , C önişlemcisinin "#" yönergeleriyle karşılaştırıldığında ) olağandışıydı ( Lisp dünyasının dışında ).

PL/I'deki özel konular

Depolama sınıfları

PL/I, değişkenlerin depolama ömrünün nasıl yönetileceğini belirtmek için birkaç 'depolama sınıfı' sağlar – STATIC, AUTOMATIC, CONTROLLEDve BASED. Uygulanması en basit olanı STATIC, COBOL "çalışma-depolama" ve erken Fortran'da yapıldığı gibi, belleğin yükleme zamanında ayrıldığını ve başlatıldığını gösterir . Bu, EXTERNALdeğişkenler için varsayılandır . PL/I'nin INTERNALdeğişkenler için varsayılan depolama sınıfı , C dilindeki "auto" depolama sınıfı ve Pascal'daki varsayılan depolama ayırma ve IBM COBOL'daki "yerel depolama" gibi ALGOLAUTOMATIC tarafından etkilenen diğer blok yapılı dillerinkine benzerdir. . Değişkenler için depolama , içinde bildirildikleri , yordam veya ON birimine girildiğinde tahsis edilir . Derleyici ve çalışma zamanı sistemi , bunları ve diğer temizlik bilgilerini içerecek bir yığın çerçevesi için bellek ayırır . Bir değişken bir ile bildirilirse , onu bir başlangıç ​​değerine ayarlamak için kod şu anda yürütülür. Başlatma kullanımını düzgün şekilde yönetmek için özen gösterilmesi gerekir. Özellikle değişken bir dizi veya yapıysa, bir kapsam her girildiğinde değişkenleri başlatmak için büyük miktarlarda kod yürütülebilir. Değişkenler için depolama , blok çıkışında serbest bırakılır: veya değişkenler, bir prosedürün veya bloğun çağrıları arasında değişkenlerin içeriğini tutmak için kullanılır. depolama ayrıca bir yığın kullanılarak yönetilir, ancak yığındaki tahsislerin itilmesi ve açılması, and ifadeleri kullanılarak programcı tarafından yönetilir . Değişkenler için depolama , kullanılarak yönetilir , ancak bir yığın yerine bu ayırmaların bağımsız yaşam süreleri vardır ve veya değişkenleri aracılığıyla adreslenir . AUTOMATICBEGIN-blockINITIAL-attributeAUTOMATICSTATIC, CONTROLLEDBASEDCONTROLLEDALLOCATEFREEBASEDALLOCATE/FREEOFFSETPOINTER

AREAÖzelliği, programcı tanımlanmış bildirmek için kullanılır yığınlar . Veriler belirli bir alan içinde tahsis edilebilir ve serbest bırakılabilir ve alan bir birim olarak silinebilir, okunabilir ve yazılabilir.

Depolama türü paylaşımı

Farklı veri bildirimleri aracılığıyla tahsis edilen depolamaya erişmenin birkaç yolu vardır. Bunlardan bazıları iyi tanımlanmış ve güvenlidir, bazıları dikkatli programlama ile güvenle kullanılabilir ve bazıları doğal olarak güvenli değildir ve/veya makineye bağlıdır.

Bir değişkeni bir parametreye başvuruya göre argüman olarak iletmek, argümanın tahsis edilen depolamasına parametre kullanılarak başvurulmasına izin verir. DEFINEDNitelik (örn DCL A(10,10), B(2:9,2:9) DEFINED A) bölümünü izin verir veya bir değişkenin depolama her bir farklı, ancak tutarlı, beyanname ile kullanılacak. Dil tanımı, farklı veri tanımlarının aynı depolamayı paylaşmasına izin vermek için bir CELLöznitelik (daha sonra yeniden adlandırılmıştır UNION) içerir. Bu, birçok erken IBM derleyicisi tarafından desteklenmedi. Bu kullanımlar güvenli ve makineden bağımsızdır.

Kayıt G/Ç ve liste işleme, programcının, ne tür bir veri yapısına sahip olduğunu bilmeden önce, bir sonraki kaydın veya öğenin depolanmasına bir bildirim sığdırması gereken durumlar üretir. Tabanlı değişkenler ve işaretçiler bu tür programların anahtarıdır. Veri yapıları, türü ve boyutu hakkındaki bilgileri kodlamak için tipik olarak bir veri yapısındaki alanlar kullanılarak uygun şekilde tasarlanmalıdır. Alanlar önceki yapıda veya bazı kısıtlamalarla mevcut yapıda tutulabilir. Kodlamanın önceki yapıda olduğu durumlarda, programın geçerli öğeyle eşleşen bir bildirimle (gerektiğinde kapsamlar için ifadeler kullanarak) tabanlı bir değişken tahsis etmesi gerekir. Tip ve boyut bilgilerinin mevcut yapıda ("kendini tanımlayan yapılar") tutulacağı durumlarda, tip tanımlayıcı alanlar, tipe bağlı öğelerin önünde ve veri yapısının her versiyonunda aynı yerde olmalıdır. REFER-Seçenek olduğu gibi (kendi kendine tanımlayan kapsamları için örneğin dize uzunlukları kullanılır DCL 1 A BASED, 2 N BINARY, 2 B CHAR(LENGTH REFER A.N.), etc  - nerede LENGTH. Veri yapısının örneklerini ayırmak için kullanılır kendini tanımlayan yapılar için, herhangi yazarak ve REFERedalanlar ileride "gerçek" veri yerleştirilir edin. bir veri kümesindeki kayıtlar veya bir veri yapıları listesindeki öğeler, makineden bağımsız bir şekilde güvenli bir şekilde işlenebilecekleri şekilde düzenlenir.

PL/I uygulamaları (PL/I Checkout derleyicisi hariç), depolama ilk tahsis edildiğinde kullanılan veri yapısını takip etmez. Herhangi bir BASEDbildirim, depolamaya erişmek için bir işaretçi ile kullanılabilir - doğası gereği güvenli değildir ve makineye bağlıdır. Ancak, bu kullanım "işaretçi aritmetiği" (tipik olarak bilinen bir adrese belirli bir miktar eklenmesi) için önemli hale geldi. Bu, bilgisayar bilimlerinde tartışmalı bir konu olmuştur. Vahşi referanslar ve arabellek taşmaları sorununa ek olarak, belirli makineler ve derleyicilerle kullanılan veri türlerinin hizalanması ve uzunluğu nedeniyle sorunlar ortaya çıkar. İşaretçi aritmetiğinin gerekli olabileceği birçok durum, daha büyük bir veri yapısı içindeki bir öğeye işaretçi bulmayı içerir. ADDRFonksiyonu olarak bağımsız bir şekilde güvenli bir şekilde işaretçiler ve makine hesaplar.

İşaretçi aritmetiği
DCL P POINTER, N FIXED BINARY(31) BASED(ADDR(P)); N=N+255;
, işaretçilerin FIXED BINARY(31)tamsayılarla aynı uzunlukta olmasına ve aynı sınırlarda hizalanmasına dayanır .

C'nin yaygınlığı ve işaretçi aritmetiğine karşı serbest ve kolay tutumuyla, en son IBM PL/I derleyicileri, işaretçilerin toplama ve çıkarma operatörleriyle birlikte kullanılmasına ve en basit sözdizimini vermesine olanak tanır (ancak derleyici seçenekleri, güvenlik ve makine bağımsızlığının söz konusu olduğu durumlarda bu uygulamalara izin vermeyebilir. her şeyden önemlidir).

ON birimleri ve istisna işleme

PL/I tasarlandığında, programlar yalnızca toplu modda çalışırdı ve programcının bir terminalde olası bir müdahalesi olmazdı. Sıfıra bölme gibi istisnai bir koşul, programı durdurarak yalnızca onaltılık bir çekirdek dökümü verir. ON üniteleri aracılığıyla PL/I istisna işleme, programın donanım veya işletim sistemi istisnaları karşısında kontrolü elinde tutmasına ve daha zarif bir şekilde kapanmadan önce hata ayıklama bilgilerini kurtarmasına izin verdi. Bir program düzgün bir şekilde hata ayıklandığında, istisna işlemenin çoğu kaldırılabilir veya devre dışı bırakılabilir: konuşma yürütme yaygınlaştığında bu kontrol düzeyi daha az önemli hale geldi.

Hesaplamalı istisna işleme, ifadeler, bloklar (ON birimleri dahil) ve prosedürler üzerindeki koşul önekleri tarafından etkinleştirilir ve devre dışı bırakılır. – örn (SIZE, NOSUBSCRIPTRANGE): A(I)=B(I)*C; . Giriş/Çıkış ve depolama yönetimi için işletim sistemi istisnaları her zaman etkindir.

ON birimi, BEGINbir ON-statement. ON deyiminin yürütülmesi, belirtilen koşulu etkinleştirir, örn ON ZERODIVIDE ON-unit. Bu koşul için istisna oluştuğunda ve koşul etkinleştirildiğinde, koşul için ON-ünitesi yürütülür. ON birimleri, çağrı zinciri boyunca devralınır. Bir blok, prosedür veya AÇIK-birimi etkinleştirildiğinde, etkinleştirme çağırma tarafından oluşturulan AÇIK birimleri yeni etkinleştirme tarafından devralınır. Bir başkası tarafından geçersiz ON-statementkılınabilirler ve REVERT-statement. İstisna, SIGNAL-statementörneğin istisna işleyicilerinde hata ayıklamaya yardımcı olmak için – kullanılarak simüle edilebilir . ON-units için dinamik kalıtım ilkesi, bir rutinin kullandığı alt rutinler içinde meydana gelen istisnaları işlemesine izin verir.

Bir koşul yükseltildiğinde hiçbir ON-ünitesi etkin değilse, standart bir sistem eylemi gerçekleştirilir (genellikle bu ERRORkoşulu yükseltmek içindir ). Sistem eylemi, SYSTEMseçeneği kullanılarak yeniden oluşturulabilir ON-statement. Bazı koşullarla, bir ON-ünitesinin yürütülmesini tamamlamak ve kesme noktasına (örn., STRINGRANGE, UNDERFLOW, CONVERSION, OVERFLOW, AREA and FILEkoşullar) geri dönmek ve normal yürütmeye devam etmek mümkündür. Gibi diğer koşullarla (SUBSCRIPTRANGE), ERRORbu denendiğinde koşul yükseltilir. Bir ON-ünitesi GO TO, kesme noktasına geri dönüşü engelleyerek, ancak programın, programcı tarafından belirlenen başka bir yerde yürütmeye devam etmesine izin vererek sonlandırılabilir .

ON ünitesinin kendisinde meydana gelen istisnalarla başa çıkmak için bir ON ünitesinin tasarlanması gerekir. ON ERROR SYSTEM;İfadesi yuvalanmış hata tuzak sağlar; ON-ünitesinde bir hata meydana gelirse, kontrol bir sistem dökümünün üretilebileceği işletim sistemine geçebilir veya bazı hesaplama koşulları için yürütmeye devam edebilir (yukarıda belirtildiği gibi).

PL/I RECORDI/O deyimleri, bir kayıt okunurken veya yazılırken oluşabilecek dosya sonundan kayıt iletim hatalarına kadar pek çok durum için seçenekler sunmadığından nispeten basit sözdizimine sahiptir. Bunun yerine, bu karmaşıklıklar, çeşitli dosya koşulları için ON-ünitelerinde ele alınır. AREAAlt tahsis ve AREAkoşul için de aynı yaklaşım benimsendi .

AÇIK birimlerinde istisna işlemenin varlığı optimizasyon üzerinde bir etkiye sahip olabilir, çünkü değişkenler AÇIK birimlerde incelenebilir veya değiştirilebilir. Aksi takdirde, deyimler arasında kayıtlarda tutulabilecek değişkenlerin değerlerinin, deyimler arasında depolamaya döndürülmesi gerekebilir. Bu, yukarıdaki Uygulama Sorunları bölümünde tartışılmaktadır.

Sabit olmayan bir hedefle GİT

PL/I, COBOL ve FORTRAN'ın özel GO TO ifadeleri için karşılıklara sahiptir.

Hem COBOL hem de FORTRAN için sözdizimi, her birinin her zaman aynı olmayan bir hedefi olan iki özel GO TO tipini kodlamak için mevcuttur.

  • ALTER (COBOL), ASSIGN (FORTRAN):
  • para_name_zzz'E DEVAM ETMEK İÇİN paragraf_adı_xxx'i DEĞİŞTİRİN.
Bunlarla ilgili başka/yardımcı kısıtlamalar vardır, özellikle "programlarda ... RECURSIVE özniteliği, yöntemlerde veya .. THREAD seçeneğinde."
  • 1860'I IGOTTAGO'YA ATAN IGOTTAGO'YA
    GİT

Yerleşik belgeler ekleyen bir geliştirme, GO TO IGOTTAGO'dur (1860, 1914, 1939)
(bu, değişkenin değerini "listedeki etiketlerden biri" ile sınırlar.)
  • GO TO ... bir değişkenin indis benzeri değerine dayalıdır.
  • GİT (1914, 1939, 2140), MYCHOICE
  • IDECIDE'E BAĞLI OLARAK para_One para_Two para_Three'YE GİDİN.

PL/I, bir deyim etiketinin değerini depolayabilen ve daha sonra bir GOTO deyiminde kullanılabilecek deyim etiketi değişkenlerine (LABEL özniteliği ile) sahiptir.

LABL1: ....
.
.
LABL2: ...
.
.
.
MY_DEST = LABL1;
.
GO TO MY_DEST;
GO TO HERE(LUCKY_NUMBER); /* minus 1, zero, or ... */

HERE(-1): PUT LIST ("I O U"); GO TO Lottery;
HERE(0): PUT LIST ("No Cash"); GO TO Lottery;
HERE(1): PUT LIST ("Dollar Bill"); GO TO Lottery;
HERE(2): PUT LIST ("TWO DOLLARS"); GO TO Lottery;

İfade etiketi değişkenleri, çağrılan prosedürlere geçirilebilir ve çağrı rutininde farklı bir ifadeye geri dönmek için kullanılabilir.

Örnek programlar

Merhaba dünya programı

Hello2: proc options(main);
     put list ('Hello, World!');
end Hello2;

Bir dize ara

/* Read in a line, which contains a string,
/* and then print every subsequent line that contains that string. */

find_strings: procedure options (main);
   declare pattern character (100) varying;
   declare line character (100) varying;
   declare line_no fixed binary;

   on endfile (sysin) stop;

   get edit (pattern) (L);
   line_no = 1;
   do forever;
      get edit (line) (L);
      if index(line, pattern) > 0 then
         put skip list (line_no, line);
      line_no = line_no + 1;
   end;

end find_strings;

Ayrıca bakınız

Notlar

Referanslar

ders kitapları

  • Neuhold, EJ & Lawson, HW (1971). PL/I Makinesi: Programlamaya Giriş . Addison-wesley. ISBN'si 978-0-2010-5275-6.
  • Barnes, RA (1979). Programcılar için PL/I . Kuzey Hollanda.
  • Hughes, Joan K. (1973). PL/I Programlama (1. baskı). Wiley. ISBN'si 0-471-42032-8.
  • Hughes, Joan K. (1986). PL/I Yapılandırılmış Programlama (3. baskı). Wiley. ISBN'si 0-471-83746-6.
  • Groner, GF (1971). Teknolojik Uygulamalarda PL/I Programlama . Talep Üzerine Kitaplar, Ann Arbor, MI.
  • Anderson, ME (1973). Programcılar için PL/I . Prentice-Hall.
  • Stoutemyer, DR (1971). Mühendislik ve Bilim için PL/I Programlama . Prentice-Hall.
  • Ziegler, RR & C. (1986). PL/I: Yapılandırılmış Programlama ve Problem Çözme (1. baskı). Batı. ISBN'si 978-0-314-93915-9.
  • Sturm, E. (2009). Yeni PL / I ... PC, Workstation ve Mainframe için . Vieweg-Teubner, Wiesbaden, Almanya. ISBN'si 978-3-8348-0726-7.
  • Ünlüler, RA (1997). PL/I, Algoritmalar ve Yapılandırılmış Programlamaya Giriş (3. baskı). ISBN'si 978-0-9596384-9-3.
  • Abrahams, Paul (1979). PL/I Programlama Dili (PDF) . Courant Matematik ve Hesaplama Laboratuvarı, New York Üniversitesi.

standartlar

  • ANSI ANSI X3.53-1976 (R1998) Bilgi Sistemleri - Programlama Dili - PL/I
  • ANSI ANSI X3.74-1981 (R1998) Bilgi Sistemleri - Programlama Dili - PL/I Genel Amaçlı Alt Küme
  • ANSI ANSI X3.74-1987 (R1998) Bilgi Sistemleri - Programlama Dili - PL/I Genel Amaçlı Alt Küme
  • ECMA 50 Programlama Dili PL/I , 1. baskı, Aralık 1976
  • ISO 6160:1979 Programlama dilleri—PL/I
  • ISO/IEC 6522:1992 Bilgi teknolojisi—Programlama dilleri—PL/I genel amaçlı alt küme

Referans kılavuzları

Dış bağlantılar