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 |
kararlı sürüm | IBM Enterprise PL/I for z/OS 5.3 / Eylül 2019 |
İnternet sitesi | www |
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 iː ɛ 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
DATE
veTIME
bu 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ğilIF, THEN, ELSE
veDO
rezerve 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. %INCLUDE
Yapı 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
Tipi bu özellikleri içerir:
|
Baz, ölçek, hassasiyet ve ölçek faktörü bir Picture-for-arithmetic
türü içinde kodlanır picture-specification
. Mod, picture specification
hem 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ı ( ENTRY
ve PROCEDURE
ifadeleri) 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 .
DO
END
IF
THEN
ELSE
BEGIN; stmt-list END;
PROCEDURE
END
EXTERNAL
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 ,
|
|
|
veya bir Giriş/Çıkış koşulu,
|
|
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. NORMAL
ve 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
,ORDINAL
veDEFINE STRUCTURE
kullanıcı tanımlı türleri, tanıtmak açıklamadaHANDLE
bulucu veri türü,TYPE
veri türü kendisiUNION
yeni 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
ORDINAL
yeni 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 TYPE
ler PL dan oluşan beyan edilecek / I yerleşik oluyor nitelikler.
HANDLE(data structure)
Bulucu veri türü benzer POINTER
veri 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 CELL
erken 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
, veGRAPHIC
. - İsteğe bağlı aritmetik öznitelikler
UNSIGNED
veSIGNED
,BIGENDIAN
veLITTLEENDIAN
. limit değeri aşmadan sayaç kontrollü bir döngünün yürütülmesini sağlayan yinelemeli gruplarda ve seçeneğiniUNSIGNED
gerekli kıldı (ayrıca s için gereklidir ve döngüleri belgelemek için iyidir).UPTHRU
DOWNTHRU
ORDINAL
- 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 -DAYS
veDAYSTODATE
tarihler ve gün sayısı arasında dönüştürme veDATETIME
tarih 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, VERIFYR
için VERIFY
sağdan. ve SEARCH
ve TALLY
işlevleri.
Bileşik atama operatörleri a la C örneğin +=
, &=
, -=
, ||=
eklendi. A+=1
eş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.
ASSIGNABLE
Ve NONASSIGNABLE
nitelikleri istenmeyen atamaları engellemek.
DO FOREVER;
yapmacık yapıya olan ihtiyacı ortadan kaldırır DO WHILE ( '1'B );
.
DEFINE-statement
Tanı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 .
TYPE
INTEGER
DEFINE STRUCTURE
TYPE
LIKE
Yapılandırılmış programlama eklemeleri
Bir LEAVE
döngüden çıkmak için bir ifade ve bir döngünün ITERATE
sonraki yinelemesi ile devam etmek için bir ifade.
UPTHRU
ve DOWNTHRU
yinelemeli 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
, BASED
veya CONTROLLED
depolamayı kullanabilir . Ayrıca paket içinde kullanılan Prosedür isimleri yerel olmakla vasıtasıyla dış yapılabilir EXPORTS
seçeneği PACKAGE-statement
.
kesinti işleme
RESIGNAL-statement
Bir 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.
INVALIDOP
Durumu 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.
ANYCONDITION
Koşulu ON-ünitesinin belirli cari prosedür temin edildiği için kesişme koşulları sağlanmaktadır.
STORAGE
Bir zaman durum yükseltilir ALLOCATE
açı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
REFER
seç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 EVENT
ve TASK
, TASK-option
üzerinde CALL-statement
( Fork ), WAIT-statement
( Join ), DELAY(delay-time)
, EVENT-option
s on kayıt I/O deyimlerini ve dosyalardaki UNLOCK
kilitli 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ı DECLARE
d, ACTIVATE
d 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 PI
kullanılarak bildirilebilir, etkinleştirilebilir ve atanabilir %PI='3.14159265'
. Daha sonraki oluşumlar PI
ile değiştirilir 3.14159265
.
Desteklenen veri türü, maksimum uzunluğu olmayan değişken uzunluktaki FIXED DECIMAL
tamsayılar ve CHARACTER
dizelerdir. 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-statement
iteratif çıkmak için DO
, UNTIL-option
ve REPEAT-option
ilave DO
ve 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, CHECK
koşullu ve SNAP
seçenek. IBM Optimizing and Checkout derleyicileri, karşılıklı konuşma anabilgisayar programlama ortamına (örneğin bir ATTENTION
koş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 CELL
baş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
, TYPE
vb 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, CONTROLLED
ve 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, EXTERNAL
değişkenler için varsayılandır . PL/I'nin INTERNAL
değ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 .
AUTOMATIC
BEGIN-block
INITIAL-attribute
AUTOMATIC
STATIC, CONTROLLED
BASED
CONTROLLED
ALLOCATE
FREE
BASED
ALLOCATE/FREE
OFFSET
POINTER
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. DEFINED
Nitelik (ö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 REFERed
alanlar 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 BASED
bildirim, 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. ADDR
Fonksiyonu 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, BEGIN
bir 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-statement
kı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 ERROR
koşulu yükseltmek içindir ). Sistem eylemi, SYSTEM
seç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 FILE
koşullar) geri dönmek ve normal yürütmeye devam etmek mümkündür. Gibi diğer koşullarla (SUBSCRIPTRANGE)
, ERROR
bu 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 RECORD
I/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. AREA
Alt tahsis ve AREA
koş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.)
- 1860'I IGOTTAGO'YA ATAN IGOTTAGO'YA
-
- 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ı
- Burroughs Corporation, "B 6700 / B 7700 PL/I Dil Referansı", 5001530. Detroit, 1977.
- HKM. RA Ünlüler, "CDC Siber için PL/I". CDC Cyber 70 serisi için derleyici optimize ediliyor.
- Digital Equipment Corporation, "decsystem10 Konuşma Programlama Dili Kullanıcı Kılavuzu" , DEC-10-LCPUA-AD. Maynard, 1975.
- Fujitsu Ltd, "Facom OS IV PL/I Referans Kılavuzu", 70SP5402E-1,1974. 579 sayfa. PL/IF alt kümesi.
- Honeywell, Inc., "Multics PL/I Dil Belirtimi" , AG94-02. 1981.
- IBM, IBM İşletim Sistemi/360 PL/I: Dil Spesifikasyonları , C28-6571. 1965.
- IBM, OS PL/I Checkout ve Optimize Derleyiciler: Dil Referans Kılavuzu , GC33-0009. 1976.
- IBM, IBM, "NPL Teknik Raporu" , Aralık 1964.
- IBM, Enterprise PL/I for z/OS Sürüm 4 Sürüm 1 Dil Başvuru Kılavuzu , SC14-7285-00. 2010.
- IBM, OS/2 PL/I Sürüm 2: Programlama: Dil Referansı, 3. Baskı, Form SC26-4308, San Jose. 1994.
- OpenVMS Sistemleri için Kednos PL/I. Referans Kılavuzu , AA-H952E-TM. Kasım 2003.
- Liant Software Corporation (1994), Open PL/I Language Reference Manual, Rev. Ed., Framingham (Mass.).
- Nixdorf Computer, "Terminalsystem 8820 Systemtechnischer Teil PL/I-Subset",05001.17.8.93-01, 1976.
- NS. C. Olivetti, "Mini PL/I Referans Kılavuzu", 1975, No. 3970530 V
- Q1 Corporation, "Q1/LMC Sistemleri Yazılım Kılavuzu", Farmingdale, 1978.
Dış bağlantılar
- z/OS , AIX , MVS , VM ve VSE için IBM PL/I Derleyicileri
- Iron Spring Yazılımı , Linux ve OS/2 için PL/I
- Micro Focus' Mainframe PL/I Geçiş Çözümü
- OS PL/I V2R3 dilbilgisi Sürüm 0.1
- Pliedit , Eclipse için PL/I editörü
- Macera vs Güç - PL / I ve C , PL / I ve bir yan-yana karşılaştırma C .
- Softpanorama PL/1 sayfa
- PL/I Dili
- SourceForge'da PL1GCC projesi
- İşaretleri yazdırmak için PL/1 programı