KOBOL -COBOL

COBOL
COBOL Raporu Apr60.djvu
CODASYL'e COBOL 60 raporu (Nisan 1960)
paradigma Prosedürel , zorunlu , nesne yönelimli , genel
Tarafından dizayn edilmiştir Howard Bromberg , Norman İndirim , Vernon Reeves , Jean E. Sammet , William Selden , Gertrude Tierney , Grace Hopper'ın dolaylı etkisiyle
Geliştiriciler CODASİL , ANSI , ISO / IEC
İlk ortaya çıktı 1959 ; 64 yıl önce ( 1959 )
Kararlı sürüm
ISO/IEC 1989:2023 / 2023
Yazma disiplini zayıf , statik
Dosya adı uzantıları .cbl, .cob,.cpy
Başlıca uygulamalar
GnuCOBOL , IBM COBOL , Mikro Odaklı Görsel COBOL
lehçeler
COBOL/2, DEC COBOL-10, DEC PDP-11 COBOL, DEC PDP-11 COBOL-85, DEC VAX COBOL, DOSVS COBOL, Envyr ICOBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL/II, IBM COBOL SAA, IBM COBOL /400, IBM COBOL/II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS/VS COBOL, ICL COBOL (VME), Mikro Odak ACUCOBOL-GT, Mikro Odak COBOL-IT, Mikro Odak RM/COBOL, Mikro Odak Görsel COBOL , Microsoft COBOL, Raincode COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, Unix COBOL X /Açık, Veryant isCOBOL, Wang VS COBOL
Tarafından etkilenmiş
Başlangıç: AIMACO , COMTRAN , FACT , FLOW-MATIC
COBOL 2002: C++ , Eiffel , Smalltalk
etkilenmiş
CobolScript , EGL , PL/I , PL/B

COBOL ( / ˈ koʊ b ɒ l , - b ɔː l / ; "ortak iş odaklı dil"in kısaltması ) , iş amaçlı kullanım için tasarlanmış, derlenmiş İngilizce benzeri bir bilgisayar programlama dilidir . Zorunlu , prosedürel ve 2002'den beri nesne yönelimli bir dildir . COBOL öncelikle şirketler ve hükümetler için iş, finans ve idari sistemlerde kullanılır. COBOL, büyük ölçekli toplu iş ve işlem işleme işleri gibi ana bilgisayarlara dağıtılan uygulamalarda hala yaygın olarak kullanılmaktadır . Ancak popülaritesinin azalması ve deneyimli COBOL programcılarının emekli olması nedeniyle programlar yeni platformlara taşınmakta, modern dillerde yeniden yazılmakta veya yazılım paketleri ile değiştirilmektedir. COBOL'deki çoğu programlama artık yalnızca mevcut uygulamaları sürdürmek içindir; ancak, birçok büyük finans kurumu 2006'nın sonlarına kadar COBOL'de yeni sistemler geliştirmeye devam ediyordu.

COBOL, 1959 yılında CODASYL tarafından tasarlandı ve kısmen Grace Hopper tarafından tasarlanan FLOW-MATIC programlama diline dayanıyordu . ABD Savunma Bakanlığı'nın veri işleme için taşınabilir bir programlama dili oluşturma çabasının bir parçası olarak oluşturulmuştur . Başlangıçta bir geçici önlem olarak görüldü, ancak Savunma Bakanlığı derhal bilgisayar üreticilerini bunu sağlamaya zorladı ve bu da yaygın olarak benimsenmesine neden oldu. 1968'de standardize edildi ve o zamandan beri dört kez revize edildi. Genişletmeler, yapılandırılmış ve nesne yönelimli programlama desteği içerir . Mevcut standart ISO / IEC 1989:2014'tür .

COBOL ifadeleri, kendi kendini belgeleyecek ve yüksek oranda okunabilir olacak şekilde tasarlanmış İngilizce benzeri bir sözdizimine sahiptir. Ancak, ayrıntılıdır ve 300'den fazla ayrılmış kelime kullanır . Gibi modern, özlü sözdiziminin aksine , COBOL daha çok İngilizceye benzer bir sözdizimine sahiptir (bu durumda, ). y = x;MOVE x TO y

COBOL kodu , bölümler, paragraflar ve cümlelerden oluşan katı bir hiyerarşi içeren dört bölüme (tanımlama, ortam, veri ve prosedür) ayrılmıştır . Geniş bir standart kitaplıktan yoksun olan standart, 43 deyim, 87 işlev ve yalnızca bir sınıf belirtir.

Akademik bilgisayar bilimcileri, COBOL oluşturulduğunda genellikle iş uygulamalarıyla ilgilenmediler ve tasarımına dahil olmadılar; yalnızca veri türleri sayılar ve metin dizileri olan girdiler ve çıktılar üzerinde durularak, sıfırdan iş için bir bilgisayar dili olarak (etkin bir şekilde) tasarlandı.

COBOL , ömrü boyunca ayrıntıları, tasarım süreci ve yapılandırılmış programlama için zayıf desteği nedeniyle eleştirildi . Bu zayıflıklar, kolayca anlaşılamayan yekpare, ayrıntılı (İngilizce benzeri olması amaçlanan) programlarla sonuçlanır.

Yıllardır COBOL, anabilgisayarlardaki iş operasyonları için bir programlama dili olarak kabul edildi, ancak son yıllarda COBOL operasyonlarının bulut bilişime taşınmasına yönelik artan bir ilgi arttı .

Tarihçe ve özellikler

Arka plan

1950'lerin sonlarında, bilgisayar kullanıcıları ve üreticileri artan programlama maliyeti konusunda endişelenmeye başladılar. 1959'da yapılan bir anket, herhangi bir veri işleme kurulumunda programlamanın ortalama 800.000 ABD Dolarına mal olduğunu ve programları yeni donanım üzerinde çalışacak şekilde çevirmenin 600.000 ABD Dolarına mal olacağını bulmuştu. Yeni programlama dillerinin giderek artan bir hızla çoğaldığı bir zamanda , aynı anket, ortak bir iş odaklı dil kullanılırsa, dönüştürmenin çok daha ucuz ve daha hızlı olacağını öne sürdü.

8 Nisan 1959'da Burroughs Corporation'da bir bilgisayar bilimcisi olan Mary K. Hawes , ortak iş dilleri üzerine resmi bir toplantı düzenlemek için Pennsylvania Üniversitesi'ndeki akademi, bilgisayar kullanıcıları ve üreticilerin temsilcilerini bir toplantıya çağırdı . Temsilciler arasında Grace Hopper (İngiliz benzeri veri işleme dili FLOW-MATIC'in mucidi ), Jean Sammet ve Saul Gorn vardı .

Nisan toplantısında grup, Savunma Bakanlığı'ndan (DoD) ortak bir iş dili oluşturmaya yönelik bir çabaya sponsor olmasını istedi. Delegasyon, Savunma Bakanlığı'nın sorunlarını "tamamen anladıklarını" düşünen Savunma Bakanlığı Veri Sistemi Araştırma Ekibi yöneticisi Charles A. Phillips'i etkiledi. Savunma Bakanlığı 225 bilgisayar işletiyordu, 175 bilgisayar daha sipariş etmişti ve bunlar üzerinde çalışacak programları uygulamak için 200 milyon doların üzerinde para harcamıştı. Taşınabilir programlar zamandan tasarruf sağlar, maliyetleri düşürür ve modernizasyonu kolaylaştırır.

Charles Phillips toplantıya sponsor olmayı kabul etti ve delegasyonu gündemi hazırlamakla görevlendirdi.

KOBOL 60

28 ve 29 Mayıs 1959'da (Zürih ALGOL 58 toplantısından tam bir yıl sonra), iş dünyası için ortak bir programlama dilinin oluşturulmasını tartışmak üzere Pentagon'da bir toplantı düzenlendi. 41 kişinin katıldığı toplantıya Phillips başkanlık etti. Savunma Bakanlığı, aynı veri işleme programlarını farklı bilgisayarlarda çalıştırıp çalıştıramayacağı konusunda endişeliydi. O zamanlar tek ana dil olan FORTRAN , bu tür programları yazmak için gereken özelliklerden yoksundu.

Temsilciler, bankacılık ve sigortacılıktan kamu hizmetleri ve envanter kontrolüne kadar çok çeşitli ortamlarda çalışabilecek bir dili heyecanla açıkladılar. Daha fazla insanın programlayabilmesi ve yeni dilin çağdaş teknolojinin sınırlamaları ile kısıtlanmaması gerektiği konusunda oybirliğiyle anlaştılar. Çoğunluk, dilin İngilizce'den maksimum düzeyde yararlanması, değiştirilebilmesi, makineden bağımsız olması ve güç pahasına bile kullanımı kolay olması gerektiği konusunda hemfikirdi.

Toplantı, bir yönlendirme komitesi ile kısa, orta ve uzun vadeli komitelerin oluşturulmasıyla sonuçlandı . Kısa menzilli komiteye, daha sonra diğer komiteler tarafından geliştirilecek olan geçici bir dil için şartnameler üretmesi için Eylül'e (üç ay) verildi. Ancak resmi görevleri, mevcut programlama dillerinin güçlü ve zayıf yönlerini belirlemekti ve onları açıkça yeni bir dil oluşturmaya yönlendirmedi.

Son tarih, kısa vadeli komite tarafından inançsızlıkla karşılandı. Bir üye, Betty Holberton , üç aylık süreyi "iğrenç bir iyimserlik" olarak nitelendirdi ve dilin gerçekten geçici bir boşluk olacağından şüphe etti.

Yönlendirme komitesi 4 Haziran'da toplandı ve tüm faaliyeti Veri Sistemleri Dilleri Komitesi veya CODASYL olarak adlandırmayı ve bir yürütme komitesi oluşturmayı kabul etti.

Kısa vadeli komite üyeleri, altı bilgisayar üreticisini ve üç devlet kurumunu temsil ediyordu. Bilgisayar üreticileri Burroughs Corporation , IBM , Minneapolis-Honeywell (Honeywell Labs), RCA , Sperry Rand ve Sylvania Electric Products idi . Devlet kurumları ABD Hava Kuvvetleri , Donanmanın David Taylor Model Havzası ve Ulusal Standartlar Bürosu (şimdi Ulusal Standartlar ve Teknoloji Enstitüsü) idi. Komiteye ABD Ulusal Standartlar Bürosu'ndan Joseph Wegstein başkanlık etti. Çalışmaya veri açıklamaları, ifadeler, mevcut uygulamalar ve kullanıcı deneyimleri araştırılarak başlandı.

Komite ağırlıklı olarak FLOW-MATIC , AIMACO ve COMTRAN programlama dillerini inceledi. FLOW-MATIC dili, uygulanmış olması ve AIMACO'nun yalnızca küçük değişikliklerle onun bir türevi olması nedeniyle özellikle etkiliydi. FLOW-MATIC'in mucidi Grace Hopper da komiteye teknik danışman olarak hizmet etti. FLOW-MATIC'in COBOL'a yaptığı başlıca katkılar, uzun değişken adları, komutlar için İngilizce sözcükler ve veri tanımları ile yönergelerin ayrılmasıydı.

COBOL'un baş tasarımcısı Jean Sammet , Hopper'ın "Cobol'un annesi, yaratıcısı veya geliştiricisi olmadığını" belirtmesine rağmen, Hopper bazen "COBOL'un annesi" veya "COBOL'un büyükannesi" olarak anılır .

IBM'in Bob Bemer tarafından icat edilen COMTRAN dili , Grace Hopper'ın meslektaşlarından oluşan kısa vadeli bir komite tarafından FLOW-MATIC'e rakip olarak görüldü. IBM'in tasarım sürecine hakim olduğu gibi görünmemesi için bazı özellikleri COBOL'a dahil edilmedi ve Jean Sammet 1981'de bazı komite üyelerinden (kendisi dahil) "IBM karşıtı güçlü bir önyargı" olduğunu söyledi. Bir vakada, COMTRAN el kitabının yazarı ve orta seviye komite üyesi Roy Goldfinger'ın dilini desteklemek ve cebirsel ifadelerin kullanımını teşvik etmek için bir alt komite toplantısına katılmasının ardından, Grace Hopper kısa vadeli komiteye Sperry Rand'ın sözlerini yineleyen bir not gönderdi. İngilizceye dayalı bir dil yaratma çabaları.

1980'de Grace Hopper, "COBOL 60'ın %95 FLOW-MATIC olduğu" ve COMTRAN'ın "son derece küçük" bir etkiye sahip olduğu yorumunu yaptı. Dahası, çalışmanın hem FLOW-MATIC hem de COMTRAN'dan yalnızca "diğer insanları mutlu etmek [böylece] bizi bayıltmaya çalışmasınlar" için etkilendiğini iddia edeceğini söyledi.

COMTRAN'ın COBOL'a dahil ettiği özellikler arasında formüller, PICTUREmadde , GO TO'laraIF olan ihtiyacı ortadan kaldıran geliştirilmiş bir ifade ve daha sağlam bir dosya yönetim sistemi yer alır.

Komitenin çalışmalarının yararlılığı büyük tartışma konusu oldu. Bazı üyeler dilin çok fazla ödün verdiğini ve komite tasarımının sonucu olduğunu düşünürken , diğerleri incelenen üç dilden daha iyi olduğunu düşündü. Bazıları dilin çok karmaşık olduğunu düşündü; diğerleri, çok basit.

Tartışmalı özellikler, bazılarının veri işleme kullanıcıları için yararsız veya çok gelişmiş olduğunu düşündüğü özellikleri içeriyordu. Bu tür özellikler arasında boole ifadeleri , formüller ve tablo alt simgeleri (endeksler) yer alır. Bir başka tartışma noktası da, anahtar kelimelerin içeriğe duyarlı hale getirilip getirilmeyeceği ve bunun okunabilirlik üzerindeki etkisiydi. Bağlama duyarlı anahtar kelimeler reddedilmiş olsa da, yaklaşım daha sonra PL/I'de ve kısmen 2002'den itibaren COBOL'da kullanıldı. Etkileşime , işletim sistemleriyle etkileşime (o zamanlar birkaç tane vardı) ve işlevlere (tamamen matematiksel olarak düşünülen) çok az önem verildi. ve veri işlemede kullanılmaz).

Spesifikasyonlar 4 Eylül'de yürütme kuruluna sunuldu. Beklentilerin gerisinde kaldılar: Joseph Wegstein, "pürüzlü noktalar içerdiğini ve bazı eklemeler gerektirdiğini" kaydetti ve Bob Bemer daha sonra bunları bir "hodgepodge" olarak tanımladı. Alt komisyona iyileştirilmesi için Aralık ayına kadar süre verildi.

Eylül ortasındaki bir toplantıda komite yeni dilin adını tartıştı. Öneriler arasında "BUSY" (İş Sistemi), "INFOSYL" (Bilgi Sistemi Dili) ve "COCOSYL" (Ortak Bilgisayar Sistemleri Dili) yer almaktadır. Bob Bemer daha sonra bunun kendi önerisi olduğunu iddia etse de, "COBOL" adını kimin icat ettiği belli değil.

Ekim ayında orta sınıf komitesi, Roy Nutt tarafından oluşturulan FACT dil spesifikasyonunun kopyalarını aldı . Özellikleri komiteyi o kadar etkiledi ki, COBOL'u buna dayandırmak için bir karar aldılar.

Bu, şartnamede iyi ilerleme kaydeden kısa menzilli komiteye bir darbe oldu. Teknik olarak üstün olmasına rağmen, FACT taşınabilirlik göz önünde bulundurularak veya üretici ve kullanıcı fikir birliği ile oluşturulmamıştı. Ayrıca, FLOW-MATIC tabanlı bir COBOL'un destekçilerinin kararı bozmalarına izin veren kanıtlanabilir bir uygulamadan da yoksundu. RCA temsilcisi Howard Bromberg de FACT'i bloke etti, böylece RCA'nın bir COBOL uygulaması üzerindeki çalışması boşa gitmesin.

Kısa süre sonra, komitenin daha fazla ilerleme kaydedilemeyecek kadar büyük olduğu anlaşıldı. Hayal kırıklığına uğramış Howard Bromberg, üzerinde "COBOL" yazan 15 dolarlık bir mezar taşı satın aldı ve memnuniyetsizliğini göstermek için Charles Phillips'e gönderdi.

Mevcut dilleri analiz etmek için altı kişiden oluşan bir alt komite oluşturuldu:

  • IBM'den William Selden ve Gertrude Tierney,
  • Howard Bromberg ve RCA'dan Howard İndirimi,
  • Sylvania Electric Products'tan Vernon Reeves ve Jean E. Sammet .

Alt komite, spesifikasyonu oluşturma işinin çoğunu yaptı ve kısa vadeli komiteye, bitmiş spesifikasyonu üretmeden önce çalışmalarını gözden geçirme ve değiştirme yetkisi verdi.

Spesifikasyonlar, 8 Ocak 1960 tarihinde yürütme kurulu tarafından onaylandı ve bunları COBOL 60 olarak basan devlet matbaasına gönderildi . Dilin belirtilen hedefleri, verimli, taşınabilir programların kolayca yazılmasına izin vermek, kullanıcıların minimum çaba ve maliyetle yeni sistemlere geçmesine izin vermek ve deneyimsiz programcılar için uygun olmaktı.

CODASYL İcra Komitesi daha sonra kullanıcılardan ve satıcılardan gelen soruları yanıtlamak ve özellikleri iyileştirmek ve genişletmek için COBOL Bakım Komitesini oluşturdu.

1960 yılında, COBOL derleyicileri oluşturmayı planlayan üreticilerin listesi büyüdü. Eylül ayına kadar beş üretici daha CODASYL'e katıldı ( Bendix , Control Data Corporation , General Electric (GE), National Cash Register ve Philco ) ve temsil edilen tüm üreticiler COBOL derleyicilerini duyurdu. GE ve IBM, COBOL'u sırasıyla kendi dilleri olan GECOM ve COMTRAN'a entegre etmeyi planladı. Buna karşılık, International Computers and Tabulators kendi dilleri olan CODEL'i COBOL ile değiştirmeyi planladı.

Bu sırada RCA ve Sperry Rand, COBOL derleyicileri oluşturmak için çalıştı. İlk COBOL programı 17 Ağustos'ta bir RCA 501 üzerinde çalıştırıldı. 6 ve 7 Aralık tarihlerinde, aynı COBOL programı (küçük değişikliklerle de olsa) bir RCA bilgisayarı ve bir Remington-Rand Univac bilgisayarı üzerinde çalışarak uyumluluğun sağlanabileceğini gösterdi .

Hangi dillerin kullanıldığına ilişkin etkiler, tüm COBOL referans kılavuzlarında basılan önerilen tavsiyelerde bugüne kadar devam etmektedir:

COBOL bir endüstri dilidir ve herhangi bir şirket veya şirketler grubunun veya herhangi bir kuruluş veya kuruluşlar grubunun mülkü değildir.

Programlama sisteminin ve dilinin doğruluğu ve işleyişine ilişkin olarak herhangi bir katılımcı veya CODASYL COBOL Komitesi tarafından açık veya zımni hiçbir garanti verilmemektedir. Ayrıca, herhangi bir katkıda bulunan veya bununla bağlantılı olarak komite tarafından herhangi bir sorumluluk kabul edilmez. Burada kullanılan telif hakkıyla korunan materyalin yazarları ve telif hakkı sahipleri aşağıdaki gibidir:

FLOW-MATIC ( Unisys Corporation'ın ticari markası ), UNIVAC (R) I ve II için Programlama, Veri Otomasyon Sistemleri, telif hakkı 1958, 1959, Unisys Corporation; IBM Ticari Tercüman Formu No. F28-8013, telif hakkı 1959'da IBM'e aittir; GERÇEK, DSİ 27A5260-2760, telif hakkı 1960 yılında Minneapolis-Honeywell'e aittir.

COBOL spesifikasyonlarında bu malzemenin tamamen veya kısmen kullanılmasına özel olarak izin vermişlerdir. Bu yetkilendirme, COBOL spesifikasyonlarının programlama kılavuzlarında veya benzer yayınlarda çoğaltılması ve kullanılmasına kadar uzanır.

COBOL-61'den COBOL-65'e

Cobol'un on yılın sonunda ortalıkta olması pek olası değil.

İsimsiz, Haziran 1960

COBOL 60'ta birçok mantıksal kusur bulundu ve General Electric'ten Charles Katz'ın bunun açık bir şekilde yorumlanamayacağı konusunda uyarmasına yol açtı. İsteksiz kısa dönemli bir komite, tam bir temizlik yasasını çıkardı ve Mart 1963'te, semantik belirsizlikler devam etse de, COBOL'un sözdiziminin ALGOL'unki kadar tanımlanabilir olduğu bildirildi .

COBOL, büyük sözdizimi ve sözdizimsel yapılar içindeki birçok isteğe bağlı öğenin yanı sıra birçok olası veri gösterimi, örtük tip dönüştürmeleri ve gerekli ayarlara sahip bir dil için verimli kod üretme ihtiyacı nedeniyle derleyici yazmak için zor bir dildir. G/Ç işlemleri için ups. İlk COBOL derleyicileri ilkel ve yavaştı. 1962 ABD Donanması değerlendirmesi, dakikada 3-11 ifadelik derleme hızları buldu. 1964'ün ortalarında, dakikada 11–1000 ifadeye yükseldiler. Artan belleğin hızı büyük ölçüde artıracağı ve derleme maliyetlerinin çılgınca değiştiği gözlemlendi: ifade başına maliyetler 0,23 ABD Doları ile 18,91 ABD Doları arasındaydı.

1962'nin sonlarında IBM, COBOL'un birincil geliştirme dili olacağını ve COMTRAN'ın geliştirilmesinin durdurulacağını duyurdu.

COBOL spesifikasyonu, yayınlanmasından sonraki beş yıl içinde üç kez revize edildi. COBOL-60, 1961'de COBOL-61 ile değiştirildi. Bunun yerini 1963'te COBOL-61 Extended spesifikasyonu aldı ve sıralama ve rapor yazma olanaklarını tanıttı. Eklenen tesisler, Honeywell tarafından 1959'un sonlarında kısa menzilli komiteye yazdığı bir mektupta tanımlanan kusurları düzeltti. COBOL Sürümü 1965, spesifikasyonlara daha fazla açıklama getirdi ve yığın depolama dosyalarını ve tablolarını işlemek için kolaylıklar getirdi .

COBOL-68

Sürümler arasındaki uyumsuzlukların üstesinden gelmek için COBOL'u standardize etme çabaları başladı. 1962'nin sonlarında, hem ISO hem de Amerika Birleşik Devletleri Standartlar Enstitüsü (şimdi ANSI ) standartları oluşturmak için gruplar oluşturdu. ANSI , Ağustos 1968'de ABD Standardı COBOL X3.23'ü üretti ve bu, sonraki sürümlerin mihenk taşı oldu. Bu sürüm Amerikan Ulusal Standardı (ANS) COBOL olarak biliniyordu ve 1972'de ISO tarafından kabul edildi.

COBOL-74

1970 yılına gelindiğinde COBOL, dünyada en yaygın kullanılan programlama dili haline geldi.

ANSI komitesinden bağımsız olarak, CODASYL Programlama Dili Komitesi dili geliştirmek için çalışıyordu. 1968, 1969, 1970 ve 1973'te, yeni programlar arası iletişim, hata ayıklama ve dosya birleştirme tesislerinin yanı sıra iyileştirilmiş dize işleme ve kitaplık dahil etme özellikleri gibi değişiklikler dahil olmak üzere yeni sürümleri açıkladılar .

CODASYL, ANSI komitesinden bağımsız olmasına rağmen, CODASYL Journal of Development, ANSI tarafından uygulanmasını gerektirecek kadar popüler olan özellikleri belirlemek için kullanıldı. Programlama Dili Komitesi ayrıca ECMA ve Japon COBOL Standardı komitesi ile işbirliği yaptı.

Bununla birlikte, Programlama Dili Komitesi iyi bilinmiyordu. Başkan yardımcısı William Rinehuls, COBOL topluluğunun üçte ikisinin komitenin varlığından haberdar olmadığından şikayet etti. Ayrıca, toplantı tutanakları ve değişiklik önerileri gibi kamuya açık belgeleri ücretsiz olarak kullanıma sunacak fonlardan da yoksundu.

1974'te ANSI, (ANS) COBOL'un dosya organizasyonları , DELETEdeyim ve segmentasyon modülü gibi yeni özellikler içeren gözden geçirilmiş bir sürümünü yayınladı. Silinen özellikler arasında NOTEifade, EXAMINEifade ( ile değiştirilen INSPECT) ve uygulayıcı tanımlı rasgele erişim modülü (yeni sıralı ve göreli G/Ç modülleri tarafından değiştirilen) yer alır. Bunlar, mevcut ifadeleri yeni standartla uyumsuz hale getiren 44 değişiklikten oluşuyordu. Rapor yazarının COBOL'dan çıkarılması planlandı, ancak standart yayınlanmadan önce eski durumuna getirildi. ISO daha sonra güncellenen standardı 1978'de kabul etti.

COBOL-85

Haziran 1978'de COBOL-74'ün revize edilmesi için çalışmalar başladı. Önerilen standart (genellikle COBOL-80 olarak adlandırılır) öncekinden önemli ölçüde farklıydı ve uyumsuzluk ve dönüştürme maliyetleri konusunda endişelere neden oldu. Ocak 1981'de, Travellers Insurance'ın Kıdemli Başkan Yardımcısı Joseph T. Brophy, COBOL-74 ile yukarı doğru uyumlu olmadığı için standart komiteyi dava etmekle tehdit etti . Bay Brophy, 40 milyon satırlık kod tabanlarının önceki dönüşümlerini "verimsiz" ve "programcı kaynaklarımızın tamamen israfı" olarak tanımladı. O yılın ilerleyen saatlerinde, Veri İşleme Yönetimi Derneği (DPMA), "engelleyici" dönüştürme maliyetlerini ve "kullanıcıyı zorlayan" geliştirmeleri gerekçe göstererek yeni standarda "şiddetle karşı çıktığını" söyledi.

Kamuya açık ilk inceleme döneminde komite, 1.700'ü olumsuz mektup olmak üzere 2.200 yanıt aldı. Diğer yanıtlar, COBOL-80'in sistemleri üzerindeki etkisinin ayrıntılı analizleriydi; dönüştürme maliyetlerinin kod satırı başına en az 50 sent olacağı tahmin ediliyordu. Yanıtların bir düzineden azı önerilen standardın lehindeydi.

ISO TC97-SC5, Wim Ebbinkhuijsen'in girişimiyle 1979'da uluslararası COBOL Uzmanlar Grubu'nu kurdu . Grup, Amerika Birleşik Devletleri de dahil olmak üzere birçok ülkeden COBOL uzmanlarından oluşuyordu. Amacı, yeni COBOL özelliklerine duyulan ihtiyaç konusunda ANSI ile dünyanın geri kalanı arasında karşılıklı anlayış ve saygı sağlamaktı. Üç yıl sonra ISO, grubun statüsünü resmi bir Çalışma Grubu olarak değiştirdi: WG 4 COBOL . Grup, tekliflerin çoğunu ANSI'nin yaptığı COBOL standardının birincil sahipliğini ve geliştirmesini üstlendi.

1983'te DPMA, komitenin halkın endişelerine duyarlılığını gerekçe göstererek standarda olan muhalefetini geri çekti. Aynı yıl, bir Ulusal Standartlar Bürosu çalışması, önerilen standardın birkaç sorun çıkaracağı sonucuna vardı. Bir yıl sonra DEC , bir VAX/VMS COBOL-80 yayınladı ve COBOL-74 programlarının dönüştürülmesinin birkaç sorun oluşturduğunu kaydetti. Yeni EVALUATEifade ve satır içi özellikle iyi karşılandı ve basitleştirilmiş kontrol akışı ve hata ayıklamaPERFORM sayesinde üretkenlik iyileştirildi .

İkinci kamu incelemesi 1.000 (çoğunlukla olumsuz) yanıt alırken, sonuncusu yalnızca 25 yanıt aldı ve bu sırada birçok endişe giderildi.

1985'te ISO Çalışma Grubu 4, ANSI standardının önerilen versiyonunu kabul etti, birkaç değişiklik yaptı ve onu yeni ISO standardı COBOL 85 olarak belirledi. 1985'in sonlarında yayınlandı.

Altmış özellik değiştirildi veya kullanımdan kaldırıldı ve 115 özellik eklendi, örneğin:

  • Kapsam sonlandırıcılar ( END-IF, END-PERFORM, END-READ, vb.)
  • İç içe alt programlar
  • CONTINUE, işlem yok bildirimi
  • EVALUATE, bir anahtar ifadesi
  • INITIALIZE, veri gruplarını varsayılan değerlerine ayarlayabilen bir ifade
  • Satır içi PERFORMdöngü gövdeleri – daha önce döngü gövdelerinin ayrı bir prosedürde belirtilmesi gerekiyordu
  • Alt dizilere erişime izin veren referans değişikliği
  • G/Ç durum kodları.

Yeni standart, ANSI dahil tüm ulusal standart kuruluşları tarafından kabul edildi.

Bunu 1989 ve 1993'te iki değişiklik izledi, ilki içsel işlevleri tanıttı ve diğeri düzeltmeler sağladı.

COBOL 2002 ve nesne yönelimli COBOL

1997'de Gartner Group , tüm iş programlarının %80'ini çalıştıran toplam 200 milyar COBOL hattı olduğunu tahmin ediyordu.

1990'ların başında, COBOL'un bir sonraki tam revizyonunda nesne yönelimini ekleme çalışmaları başladı. Nesne yönelimli özellikler C++ ve Smalltalk'tan alınmıştır .

İlk tahmin, bu revizyonun 1997'de tamamlanmasıydı ve bir ISO Komite Taslağı (CD) 1997'de mevcuttu. Bazı sağlayıcılar ( Micro Focus , Fujitsu ve IBM dahil ), tam revizyonun taslaklarına dayalı olarak nesne yönelimli sözdizimini tanıttı. Nihai onaylanmış ISO standardı 2002 sonlarında onaylandı ve yayınlandı.

Fujitsu/GTSoftware, Micro Focus ve RainCode, .NET Framework'ü hedefleyen nesne yönelimli COBOL derleyicilerini tanıttı .

Birçoğu 1978'den beri CODASYL COBOL Journal of Development'ta yer alan ve COBOL-85'e dahil olma fırsatını kaçıran birçok yeni özellik vardı . Bu diğer özellikler şunları içeriyordu:

Standart için üç düzeltme yayınlandı: ikisi 2006'da ve biri 2009'da.

KOBOL 2014

2003 ve 2009 yılları arasında, COBOL için nesne sonlandırma , XML işleme ve toplama sınıflarını açıklayan üç teknik rapor üretildi .

COBOL 2002, zayıf destekten muzdaripti: hiçbir derleyici standardı tam olarak desteklemedi. Micro Focus, bunun nedeninin yeni özellikler için kullanıcı talebinin olmaması ve derleyici uyumluluğunu test etmek için kullanılmış olan NIST test paketinin kaldırılmasından kaynaklandığını tespit etti . Standardizasyon sürecinin de yavaş olduğu ve yetersiz kaynaklara sahip olduğu bulundu.

COBOL 2014 aşağıdaki değişiklikleri içerir:

  • Taşınabilir aritmetik sonuçların yerini IEEE 754 veri türleri aldı
  • VALIDATETesis, rapor yazarı ve ekran işleme kolaylığı gibi ana özellikler isteğe bağlı hale getirildi.
  • Yöntem aşırı yükleme
  • Dinamik kapasite tabloları (COBOL 2002 taslağından çıkarılan bir özellik)

Miras

COBOL programları dünya çapında hükümetlerde ve işletmelerde kullanılmaktadır ve z/OS , z/VSE , VME , Unix , NonStop OS, OpenVMS ve Windows gibi çeşitli işletim sistemlerinde çalışmaktadır . 1997'de Gartner Group , dünyadaki işlerin %80'inin COBOL üzerinde çalıştığını ve yılda 200 milyardan fazla kod satırı ve 5 milyar satır daha yazıldığını bildirdi.

20. yüzyılın sonlarına doğru, 2000 yılı sorunu (Y2K), bazen sistemleri onlarca yıl önce tasarlamış olan aynı programcılar tarafından, önemli COBOL programlama çabalarının odak noktasıydı. COBOL kodunu düzeltmek için gereken özel çaba düzeyi, iş uygulamaları tarihleri ​​yoğun bir şekilde kullandığından ve sabit uzunlukta veri alanlarına sahip olduğundan, büyük miktarda iş odaklı COBOL'a atfedilmiştir. Bazı araştırmalar "Y2K yazılım onarım maliyetlerinin %24'ünü Cobol'a atfediyor". Y2K için bu programlara yapılan temizlik çalışmalarının ardından, 2003 yılında yapılan bir anket, çoğunun kullanımda kaldığını ortaya çıkardı. Yazarlar, anket verilerinin "diğer diller ve teknolojilerle entegrasyon benimsenmedikçe [takip eden] 10 yıl içinde uygulama geliştirmede COBOL'un öneminde kademeli bir düşüş olduğunu" öne sürdüğünü söylediler.

2006 ve 2012'de Computerworld anketleri (352 okuyucuyla), kuruluşların %60'ından fazlasının COBOL kullandığını ( C++ ve Visual Basic .NET'ten daha fazla ) ve bunların yarısının dahili yazılımlarının çoğunluğu için COBOL kullandığını ortaya çıkardı. Yöneticilerin %36'sı COBOL'dan geçiş yapmayı planladıklarını ve %25'i daha ucuz olsaydı bunu yapmak istediklerini söyledi. Bunun yerine, bazı işletmeler COBOL programlarını sürdürürken sistemlerini pahalı ana bilgisayarlardan daha ucuz, daha modern sistemlere geçirdi.

2016'da Temsilciler Meclisi önündeki tanıklık, COBOL'un hala birçok federal kurum tarafından kullanıldığını gösterdi. Reuters, 2017'de bankacılık sistemlerinin %43'ünün hala COBOL kullandığını ve 220 milyar satırdan fazla COBOL kodunun kullanımda olduğunu bildirdi.

2019'a gelindiğinde, emekliye ayrılmalar nedeniyle COBOL programcılarının sayısı hızla azalıyordu ve bu da, yüksek hacimli işlem işleme için hâlâ anabilgisayar sistemlerini kullanan iş ve devlet kuruluşlarında yaklaşan bir beceri boşluğuna yol açtı. Sistemleri daha yeni dillerde yeniden yazma çabaları, kod bakımının dış kaynak kullanımı gibi pahalı ve sorunlu olduğu kanıtlanmıştır, bu nedenle COBOL'da daha fazla insanı eğitme önerileri savunulmaktadır.

COVID-19 salgını ve ardından gelen işsizlik artışı sırasında , birkaç ABD eyaleti, işsizlik yardımı yönetimi için kullanılan eski sistemleri desteklemek için vasıflı COBOL programcılarının eksikliğini bildirdi. Bu sistemlerin birçoğu pandemiden önce daha modern programlama dillerine geçiş sürecindeydi ancak süreç beklemeye alındı. Benzer şekilde, ABD Milli Gelir İdaresi, Coronavirüs Yardımı, Yardımı ve Ekonomik Güvenlik Yasası tarafından zorunlu kılınan on milyonlarca ödemeyi ödemek için COBOL tabanlı Bireysel Ana Dosyasını yamalamak için acele etti .

Özellikler

Sözdizimi

COBOL, bir programdaki hemen hemen her şeyi tanımlamak için kullanılan İngilizce benzeri bir sözdizimine sahiptir. Örneğin, bir koşul olarak   veya daha kısa olarak     veya olarak   ifade edilebilir . Daha karmaşık koşullar, tekrarlanan koşullar ve değişkenler çıkarılarak "kısaltılabilir". Örneğin     kısaltılabilir . Bu İngilizce benzeri sözdizimini desteklemek için COBOL'da 300'den fazla anahtar kelime vardır . Anahtar kelimelerden bazıları, aynı kelimenin basit alternatif veya çoğul yazımlarıdır, bu da daha fazla İngilizce benzeri ifadeler ve yan tümceler sağlar; örneğin, ve anahtar sözcükleri can ve , ve ve gibi birbirinin yerine kullanılabilir . x IS GREATER THAN yx GREATER yx > ya > b AND a > c OR a = da > b AND c OR = dINOFTIMETIMESVALUEVALUES

Her bir COBOL programı dört temel sözcüksel öğeden oluşur : sözcükler, sabit değerler, resim karakter dizileri (bkz. § PICTURE yan tümcesi ) ve ayırıcılar. Sözcükler, ayrılmış sözcükleri ve kullanıcı tanımlı tanımlayıcıları içerir. En fazla 31 karakter uzunluğundadırlar ve harf, rakam, kısa çizgi ve alt çizgi içerebilirler. Sabit değerler, sayıları (örn. 12) ve dizeleri (örn. 'Hello!') içerir. Ayırıcılar arasında boşluk karakteri ve virgüller ile noktalı virgüller ve ardından bir boşluk bulunur.

Bir COBOL programı dört bölüme ayrılmıştır: tanımlama bölümü, ortam bölümü, veri bölümü ve prosedür bölümü. Tanımlama bölümü, kaynak öğenin adını ve türünü belirtir ve sınıfların ve arayüzlerin belirtildiği yerdir. Ortam bölümü, onu çalıştıran sisteme bağlı olan, dosyalar ve karakter kümeleri gibi tüm program özelliklerini belirtir . Veri bölümü, değişkenleri ve parametreleri bildirmek için kullanılır . Prosedür bölümü, programın deyimlerini içerir . Her bölüm, paragraflardan oluşan bölümlere ayrılmıştır.

üstdil

COBOL'un sözdizimi genellikle ayraçlar, köşeli ayraçlar, çubuklar ve alt çizgi kullanılarak benzersiz bir üst dil ile tanımlanır . Üst dil, orijinal COBOL spesifikasyonları için geliştirilmiştir. O sırada Backus-Naur formu mevcut olmasına rağmen , komite bunu duymamıştı.

COBOL'un üst dilinin unsurları
eleman Dış görünüş İşlev
Tüm büyük harfler ÖRNEK Ayrılmış kelime
altı çizili ÖRNEK Ayrılmış kelime zorunludur
diş telleri { } Yalnızca bir seçenek seçilebilir
Parantez [] Sıfır veya bir seçenek seçilebilir
üç nokta ... Önceki öğe tekrar edilebilir
Barlar {| |} Bir veya daha fazla seçenek seçilebilir. Herhangi bir seçenek yalnızca bir kez seçilebilir.
[| |] Sıfır veya daha fazla seçenek seçilebilir. Herhangi bir seçenek yalnızca bir kez seçilebilir.

Örnek olarak, bir ADDifadenin aşağıdaki açıklamasını ele alalım:

Bu açıklama aşağıdaki varyantlara izin verir:

ADD 1 TO x
ADD 1, a, b TO x ROUNDED, y, z ROUNDED

ADD a, b TO c
    ON SIZE ERROR
        DISPLAY "Error"
END-ADD

ADD a TO b
    NOT SIZE ERROR
        DISPLAY "No error"
    ON SIZE ERROR
        DISPLAY "Error"

kod formatı

1970'lerden kalma delikli kartlardan oluşan COBOL programı destesi

COBOL'un popülaritesinin yüksekliği , tuş vuruşlu makinelerin ve delikli kartların çağına denk geldi . Programın kendisi delikli kartlara yazılır, ardından okunur ve derlenir ve programa beslenen veriler bazen kartlarda da bulunurdu.

COBOL iki biçimde yazılabilir: sabit (varsayılan) veya ücretsiz. Sabit formatta, kod belirli alanlara sığacak şekilde hizalanmalıdır (delikli kartları kullanmaktan kaynaklanan bir engel). COBOL 2002'ye kadar bunlar:

İsim sütun(lar) kullanım
Sıra numarası alanı 1–6 Başlangıçta kart/hat numaraları için kullanılır (manuel düzenleme/işlemden sonra amaçlanan program kodu sırasını sağlamak için mekanik delikli kart sıralamayı kolaylaştırır), bu alan derleyici tarafından dikkate alınmaz
Gösterge alanı 7 Burada aşağıdaki karakterlere izin verilir:
  • *– Yorum satırı
  • /– Kaynak listelemenin yeni bir sayfasına yazdırılacak olan yorum satırı
  • -– Önceki satırdaki kelimelerin veya değişmezlerin devam ettiği devam satırı
  • D– Hata ayıklama modunda hat etkinleştirildi, aksi halde göz ardı edilir
A alanı 8–11 Bu şunları içerir: DIVISION, SECTIONve prosedür başlıkları; 01 ve 77 seviye numaraları ve dosya/rapor tanımlayıcıları
B alanı 12–72 Alan A'da izin verilmeyen diğer kodlar
Program adı alanı 73– Tarihsel olarak delikli kartlar için sütun 80'e kadar, kartın ait olduğu programı veya sırayı tanımlamak için kullanılır.

COBOL 2002'de, A ve B Alanları, artık uygulayıcı tanımlı bir sütunda sona eren program metni alanını oluşturmak için birleştirildi.

COBOL 2002 ayrıca serbest biçimli kodu da tanıttı. Serbest biçimli kod, daha yeni programlama dillerinde olduğu gibi dosyanın herhangi bir sütununa yerleştirilebilir. *>Yorumlar , herhangi bir yere yerleştirilebilen ve sabit biçimli kaynak kodunda da kullanılabilen kullanılarak belirtilir . Devam çizgileri mevcut değildir ve >>PAGEdirektif göstergenin yerini alır /.

Kimlik bölümü

Tanımlama bölümü, aşağıdaki kod varlığını tanımlar ve bir sınıf veya arayüzün tanımını içerir.

Nesne yönelimli programlama

Sınıflar ve arabirimler, 2002'den beri COBOL'da bulunmaktadır. Sınıfların, sınıf yöntemleri ve değişkenleri içeren fabrika nesneleri ve örnek yöntemleri ve değişkenleri içeren örnek nesneleri vardır. Kalıtım ve arabirimler çok biçimlilik sağlar . Genel programlama desteği , herhangi bir sınıf veya arabirimi kullanmak için örneklenebilen parametreleştirilmiş sınıflar aracılığıyla sağlanır. Nesneler, belirli bir türle sınırlandırılabilen referanslar olarak saklanır. Bir yöntemi çağırmanın iki yolu vardır: INVOKEdeyimine benzer şekilde davranan deyim CALLveya işlevleri kullanmaya benzer satır içi yöntem çağırma yoluyla.

*> These are equivalent.
INVOKE my-class "foo" RETURNING var
MOVE my-class::"foo" TO var *> Inline method invocation

COBOL, yöntemleri gizlemek için bir yol sağlamaz . Bununla birlikte, sınıf verileri, bir yan tümce olmadan bildirilerek gizlenebilir PROPERTY, bu da kullanıcının ona erişmesinin hiçbir yolunu bırakmaz. Yöntem aşırı yüklemesi COBOL 2014'te eklendi.

Çevre bölümü

Ortam bölümü, yapılandırma bölümünü ve giriş-çıkış bölümünü içerir. Yapılandırma bölümü, para birimi işaretleri, yerel ayarlar ve karakter kümeleri gibi değişken özelliklerini belirtmek için kullanılır. Giriş-çıkış bölümü dosya ile ilgili bilgileri içerir.

Dosyalar

COBOL üç dosya biçimini veya organizasyonu destekler : sıralı, dizine alınmış ve göreli. Sıralı dosyalarda, kayıtlar bitişiktir ve bağlantılı bir listeye benzer şekilde sıralı olarak geçilmelidir . İndeksli dosyalar, kayıtlara rastgele erişime izin veren ve bunlar üzerinde sıralanabilen bir veya daha fazla indekse sahiptir. Her kaydın benzersiz bir anahtarı olmalıdır , ancak diğer alternatif kayıt anahtarlarının benzersiz olması gerekmez. C-ISAM ve VSAM gibi yaygın uygulamalar IBM'in ISAM'ını temel alsa da, dizinlenmiş dosyaların uygulamaları satıcı firmalar arasında değişiklik gösterir . diğer uygulamalar, OpenVMS üzerinde Kayıt Yönetimi Hizmetleri ve HPE NonStop (Tandem) üzerinde Enscribe'dir . Dizine alınmış dosyalar gibi göreli dosyaların benzersiz bir kayıt anahtarı vardır, ancak alternatif anahtarları yoktur. Göreceli bir kaydın anahtarı, onun sıralı konumudur; örneğin, 10. kaydın anahtarı 10'dur. Bu, 5 anahtarıyla bir kayıt oluşturmak için önceki (boş) kayıtların oluşturulmasını gerektirebileceği anlamına gelir. Göreceli dosyalar ayrıca hem sıralı hem de rasgele erişime izin verir.

Standart olmayan yaygın bir uzantı, metin dosyalarını işlemek için kullanılan satır sıralı organizasyonudur. Bir dosyadaki kayıtlar yeni bir satırla sonlandırılır ve değişen uzunluklarda olabilir.

Veri bölümü

Veri bölümü, farklı öğeleri bildiren altı bölüme ayrılmıştır: dosya kayıtları için dosya bölümü; statik değişkenler için çalışan depolama bölümü ; otomatik değişkenler için yerel depolama bölümü ; parametreler ve dönüş değeri için bağlantı bölümü; metin tabanlı kullanıcı arayüzleri için rapor bölümü ve ekran bölümü .

Toplu veriler

COBOL'deki veri öğeleri, bir veri öğesinin diğerinin parçası olup olmadığını gösteren düzey sayıları kullanılarak hiyerarşik olarak bildirilir. Daha yüksek seviye numarasına sahip bir öğe, daha düşük olan bir öğeye tabidir. Düzey numarası 1 olan üst düzey veri öğeleri, kayıtlar olarak adlandırılır . Alt kümelenmiş verilere sahip öğelere grup öğeleri denir ; olmayanlara temel öğeler denir . Standart veri öğelerini tanımlamak için kullanılan düzey numaraları 1 ile 49 arasındadır.

       01  some-record.                   *> Aggregate group record item
           05  num            PIC 9(10).  *> Elementary item
           05  the-date.                  *> Aggregate (sub)group record item
               10  the-year   PIC 9(4).   *> Elementary item
               10  the-month  PIC 99.     *> Elementary item
               10  the-day    PIC 99.     *> Elementary item

Yukarıdaki örnekte, temel öğe numve grup öğesi the-datekayda tabiyken some-record, temel öğeler the-year, the-monthve the-daygrup öğesinin parçasıdır the-date.

INAlt öğeler (veya ) anahtar sözcüğü ile netleştirilebilir OF. Örneğin, yukarıdaki örnek kodu aşağıdaki örnekle birlikte göz önünde bulundurun:

       01  sale-date.
           05  the-year       PIC 9(4).
           05  the-month      PIC 99.
           05  the-day        PIC 99.

the-year, the-monthve adları the-day, bu adlarla birden fazla veri öğesi tanımlandığından, kendi başlarına belirsizdir. Belirli bir veri öğesini belirtmek için, örneğin grup içinde yer alan öğelerden biri sale-date, programcı the-year IN sale-date(veya eşdeğerini the-year OF sale-date) kullanır. Bu sözdizimi, çoğu çağdaş dil tarafından desteklenen "nokta gösterimine" benzer.

Diğer veri seviyeleri

66 seviye numarası, bu öğelerin nasıl yapılandırıldığına bakılmaksızın, önceden tanımlanmış öğelerin yeniden gruplandırılmasını bildirmek için kullanılır. İlişkili RENAMESmadde tarafından da atıfta bulunulan bu veri düzeyi nadiren kullanılır ve 1988 dolaylarında genellikle eski programlarda bulunurdu. Hiyerarşik ve mantıksal yapı verilerini göz ardı etme yeteneği, kullanımının tavsiye edilmediği ve birçok kurulumun kullanımını yasakladığı anlamına geliyordu.

       01  customer-record.
           05  cust-key            PIC X(10).
           05  cust-name.
               10  cust-first-name PIC X(30).
               10  cust-last-name  PIC X(30).
           05  cust-dob            PIC 9(8).
           05  cust-balance        PIC 9(7)V99.
           
       66  cust-personal-details   RENAMES cust-name THRU cust-dob.
       66  cust-all-details        RENAMES cust-name THRU cust-balance.

77 düzey numarası, öğenin tek başına olduğunu gösterir ve bu gibi durumlarda düzey numarası 01'e eşdeğerdir. Örneğin, aşağıdaki kod, grup dışı veri öğeleri olan iki adet 77 düzey veri öğesini property-nameve sales-regiondiğer herhangi bir veri öğesinden bağımsızdır (onlara tabi değildir):

       77  property-name      PIC X(80).
       77  sales-region       PIC 9(5).

88 düzeyli bir sayı, üst veri öğesi yan tümcesinde belirtilen değerlerden birini içerdiğinde doğru olan bir koşul adını (sözde 88 düzeyli) bildirir VALUE. Örneğin, aşağıdaki kod, veri öğesinin geçerli karakter veri değerine bağlı olarak doğru veya yanlış olan 88 düzeyli iki koşul adı öğesini tanımlar wage-type. Veri öğesi bir değer içerdiğinde 'H', koşul-adı doğrudur, oysa bir veya wage-is-hourlydeğeri içerdiğinde , koşul-adı doğrudur. Veri öğesi başka bir değer içeriyorsa, koşul adlarının her ikisi de yanlıştır. 'S''Y'wage-is-yearly

       01  wage-type          PIC X.
           88  wage-is-hourly VALUE "H".
           88  wage-is-yearly VALUE "S", "Y".

Veri tipleri

Standart COBOL aşağıdaki veri türlerini sağlar:

Veri tipi Örnek beyan notlar
Alfabetik PIC A(30) Yalnızca harf veya boşluk içerebilir.
alfasayısal PIC X(30) Herhangi bir karakter içerebilir.
boole PIC 1 USAGE BIT 0'lar ve 1'ler şeklinde ikili sayı olarak depolanan veriler.
dizin USAGE INDEX Tablo öğelerine başvurmak için kullanılır.
Ulusal PIC N(30) Alfanümeriğe benzer, ancak genişletilmiş bir karakter kümesi kullanır, örneğin UTF-8 .
sayısal PIC 9(5)V9(2) Tam olarak 7 rakam içerir (7=5+2). 'V', örtük ondalık sayıyı sabit bir nokta sayısında bulur.
Nesne USAGE OBJECT REFERENCE Bir nesneye veya NULL.
Işaretçi USAGE POINTER

COBOL'da tip güvenliği değişkendir. Sayısal veriler, farklı temsiller ve boyutlar arasında sessizce dönüştürülür ve alfanümerik veriler, sayısal ve grup verileri dahil olmak üzere bir dizi olarak saklanabilen herhangi bir veri öğesine yerleştirilebilir. Buna karşılık, nesne referansları ve işaretçiler yalnızca aynı türdeki öğelerden atanabilir ve değerleri belirli bir türle sınırlandırılabilir.

PICTURE yan tümcesi

Bir PICTURE(veya PIC) yan tümcesi, her biri veri öğesinin bir bölümünü ve içerebileceklerini temsil eden bir karakter dizisidir. Bazı resim karakterleri, öğenin türünü ve bellekte kaç karakter veya basamak kapladığını belirtir. Örneğin a, 9ondalık basamağı, a da Söğenin imzalandığını gösterir . Diğer resim karakterleri ( ekleme ve düzenleme karakterleri olarak adlandırılır) bir öğenin nasıl biçimlendirilmesi gerektiğini belirtir. Örneğin, bir dizi +karakter, karakter konumlarının yanı sıra son karakter verileri içinde bir öncü işaret karakterinin nasıl konumlandırılacağını tanımlar; en sağdaki sayısal olmayan karakter, öğenin işaretini içerirken, +bu konumun solundaki a'ya karşılık gelen diğer karakter konumları bir boşluk içerecektir. Yinelenen karakterler, bir resim karakterinden sonra parantez içinde bir sayı belirtilerek daha kısa ve öz olarak belirtilebilir; örneğin, 9(7)eşdeğerdir 9999999. 9Yalnızca rakam ( ) ve işaret ( ) karakterlerini içeren resim özellikleri Stamamen sayısal veri öğelerini tanımlarken, alfabetik ( A) veya alfanümerik ( X) karakterleri içeren resim özellikleri alfanümerik veri öğelerini tanımlar. Diğer biçimlendirme karakterlerinin varlığı, düzenlenmiş sayısal veya düzenlenmiş alfasayısal veri öğelerini tanımlar.

örnekler
PICTUREmadde değer değer dışarı
PIC 9(5) 100 00100
"Hello" "Hello"(bu yasaldır, ancak tanımsız davranışa neden olur )
PIC +++++ -10 "  -10"(baştaki boşluklara dikkat edin)
PIC 99/99/9(4) 30042003 "30/04/2003"
PIC *(4)9.99 100.50 "**100.50"
0 "****0.00"
PIC X(3)BX(3)BX(3) "ABCDEFGHI" "ABC DEF GHI"
KULLANIM maddesi

Yan USAGEtümce, verilerin depolandığı biçimi bildirir. PICTUREVeri türüne bağlı olarak, bir tümce yerine tamamlayıcı veya kullanılabilir . İşaretçileri ve nesne referanslarını bildirmek için kullanılabilse de, çoğunlukla sayısal türleri belirtmeye yöneliktir. Bu sayısal biçimler şunlardır:

  • Minimum boyutun yan tümce veya aşağıdaki gibi PICTUREbir yan tümce tarafından belirtildiği ikili dosyaUSAGEBINARY-LONG
  • USAGE COMPUTATIONALverilerin, uygulamanın sağladığı format ne olursa olsun saklanabileceği; genellikle eşdeğer  USAGE BINARY
  • USAGE DISPLAY, verilerin bir dize olarak depolandığı varsayılan biçim
  • Kayan nokta, uygulamaya bağlı bir biçimde veya IEEE 754'e göre
  • USAGE NATIONAL, burada veriler, genişletilmiş bir karakter kümesi kullanılarak bir dizi olarak depolanır
  • USAGE PACKED-DECIMAL, verilerin mümkün olan en küçük ondalık biçimde depolandığı yer (tipik olarak paketlenmiş ikili kodlu ondalık )

Rapor yazarı

Rapor yazarı, raporların oluşturulması için bildirimsel bir araçtır . Programcının yalnızca rapor düzenini ve onu oluşturmak için gereken verileri belirtmesi yeterlidir; bu, onları sayfa sonları, veri biçimlendirme ve başlıklar ve dipnotlar gibi şeyleri işlemek için kod yazma zorunluluğundan kurtarır.

Raporlar, yalnızca rapor yazarı ifadeleri aracılığıyla yazılabilen dosyalar olan rapor dosyalarıyla ilişkilendirilir.

       FD  report-out REPORT sales-report.

Her rapor, veri bölümünün rapor bölümünde tanımlanır. Bir rapor, raporun başlıklarını, temellerini ve ayrıntılarını tanımlayan rapor gruplarına ayrılır. Raporlar, hiyerarşik kontrol sonları etrafında çalışır . Kontrol kesintileri, bir anahtar değişken değerini değiştirdiğinde meydana gelir; örneğin, müşteri siparişlerini detaylandıran bir rapor oluştururken, program farklı bir müşterinin siparişlerine ulaştığında kontrol kırılması meydana gelebilir. Aşağıda, bir satış görevlisinin satışlarını veren ve geçersiz kayıtlar konusunda uyarı veren bir rapor için örnek bir rapor açıklaması verilmiştir:

       RD  sales-report
           PAGE LIMITS 60 LINES
           FIRST DETAIL 3
           CONTROLS seller-name.

       01  TYPE PAGE HEADING.
           03  COL 1                    VALUE "Sales Report".
           03  COL 74                   VALUE "Page".
           03  COL 79                   PIC Z9 SOURCE PAGE-COUNTER.

       01  sales-on-day TYPE DETAIL, LINE + 1.
           03  COL 3                    VALUE "Sales on".
           03  COL 12                   PIC 99/99/9999 SOURCE sales-date.
           03  COL 21                   VALUE "were".
           03  COL 26                   PIC $$$$9.99 SOURCE sales-amount.

       01  invalid-sales TYPE DETAIL, LINE + 1.
           03  COL 3                    VALUE "INVALID RECORD:".
           03  COL 19                   PIC X(34) SOURCE sales-record.

       01  TYPE CONTROL HEADING seller-name, LINE + 2.
           03  COL 1                    VALUE "Seller:".
           03  COL 9                    PIC X(30) SOURCE seller-name.

Yukarıdaki rapor açıklaması aşağıdaki düzeni açıklamaktadır:

Sales Report                                                             Page  1

Seller: Howard Bromberg
  Sales on 10/12/2008 were $1000.00
  Sales on 12/12/2008 were    $0.00
  Sales on 13/12/2008 were   $31.47
  INVALID RECORD: Howard Bromberg             XXXXYY

Seller: Howard Discount
...
Sales Report                                                            Page 12

  Sales on 08/05/2014 were  $543.98
  INVALID RECORD: William Selden      12O52014FOOFOO
  Sales on 30/05/2014 were    $0.00

Rapor yazarını dört ifade kontrol eder: INITIATE, rapor yazarını yazdırmaya hazırlar; GENERATE, bir rapor grubu yazdıran; SUPPRESS, bir rapor grubunun yazdırılmasını engelleyen; ve TERMINATE, rapor işlemeyi sonlandırır. Yukarıdaki satış raporu örneği için prosedür bölümü şöyle görünebilir:

           OPEN INPUT sales, OUTPUT report-out
           INITIATE sales-report
 
           PERFORM UNTIL 1 <> 1
               READ sales
                   AT END
                       EXIT PERFORM
               END-READ
 
               VALIDATE sales-record
               IF valid-record
                   GENERATE sales-on-day
               ELSE
                   GENERATE invalid-sales
               END-IF
           END-PERFORM
 
           TERMINATE sales-report
           CLOSE sales, report-out
           .

Rapor Yazarı özelliğinin kullanımı önemli ölçüde değişiklik gösterir; bazı kuruluşlar bunu yoğun bir şekilde kullanır ve bazıları hiç kullanmaz. Ek olarak, Rapor Yazıcısı uygulamalarının kalitesi, alt uçtakilerin bazen çalışma zamanında aşırı miktarda bellek kullanması ile değişiyordu.

Prosedür bölümü

prosedürler

Prosedür bölümündeki bölümler ve paragraflar (toplu olarak prosedürler olarak adlandırılır) etiketler ve basit alt programlar olarak kullanılabilir . Diğer bölümlerden farklı olarak, paragrafların bölümler halinde olması gerekmez.

Yürütme, sonlandırılana kadar bir programın prosedürlerinden geçer. Prosedürleri alt program olarak kullanmak için PERFORMfiil kullanılır.

Bir ifade, yürütmenin çağrılan kodun sonundaki ifadeyi PERFORMizleyen koda geri dönmesi anlamında, daha yeni dillerdeki bir prosedür çağrısına benzer ; ancak, parametre geçirmek veya bir sonuç değeri döndürmek için PERFORMbir mekanizma sağlamaz . Bir alt program, gibi basit bir ifade kullanılarak çağrılırsa , çağrılan prosedürün sonunda kontrol geri döner. Bununla birlikte, birkaç bitişik prosedür dizisini kapsayan bir aralığı çağırmak için kullanılabilmesi alışılmadık bir durumdur. Bu yapı ile yapılır : PERFORM subroutinePERFORMPERFORM sub-1 THRU sub-n

PROCEDURE so-and-so.
    PERFORM ALPHA
    PERFORM ALPHA THRU GAMMA
    STOP RUN.
ALPHA.
    DISPLAY 'A'.
BETA.
    DISPLAY 'B'.
GAMMA.
    DISPLAY 'C'.

Bu programın çıktısı şöyle olacaktır: "AAB C".

PERFORMayrıca, en azından geleneksel olarak, bir çağrı yığını kavramının olmaması bakımından geleneksel prosedür çağrılarından farklıdır. Sonuç olarak, iç içe çağrılar mümkündür ( PERFORM'edilen bir kod dizisi, bir ifadeyi kendisi yürütebilir PERFORM), ancak aynı kodun bölümleri her iki çağrı tarafından yürütülürse ekstra dikkat gerektirir. Sorun, iç çağrıdaki kod dış çağrının çıkış noktasına ulaştığında ortaya çıkar. PERFORMDaha resmi olarak, kontrol daha önce çağrılan ancak henüz tamamlanmamış bir çağrının çıkış noktasından geçerse , COBOL 2002 standardı davranışın tanımsız olduğunu şart koşar .

Bunun nedeni, COBOL'un bir "dönüş adresi" yerine devam adresi olarak adlandırılabilecek bir adresle çalışmasıdır. Kontrol akışı herhangi bir prosedürün sonuna geldiğinde devam adresine bakılır ve kontrol bu adrese aktarılır. Program çalıştırılmadan önce, her yordamın devam adresi, program metninde sonraki yordamın başlangıç ​​adresine atanır, böylece hiçbir PERFORMifade olmazsa, kontrol program boyunca yukarıdan aşağıya doğru akar. Ancak bir PERFORMifade yürütüldüğünde, çağrılan prosedürün (veya kullanılmışsa çağrılan aralığın son prosedürünün) devam adresini değiştirir PERFORM THRU, böylece kontrol sonunda çağrı sitesine geri döner. Orijinal değer kaydedilir ve daha sonra geri yüklenir, ancak yalnızca bir kayıt konumu vardır. İki iç içe çağrı, çakışan kod üzerinde çalışıyorsa, birbirlerinin devam adresini yönetmesine çeşitli şekillerde müdahale edebilirler.

Aşağıdaki örnek ( Veerman & Verhoeven 2006'dan alınmıştır ) sorunu göstermektedir:

LABEL1.
    DISPLAY '1'
    PERFORM LABEL2 THRU LABEL3
    STOP RUN.
LABEL2.
    DISPLAY '2'
    PERFORM LABEL3 THRU LABEL4.
LABEL3.
    DISPLAY '3'.
LABEL4.
    DISPLAY '4'.

Bu programın çıktısının "1 2 3 4 3" olması beklenebilir: "2" görüntülendikten sonra ikincisi PERFORM"3" ve "4" görüntülenmesine neden olur ve ardından ilk çağrı "3" ile devam eder. . Geleneksel COBOL uygulamalarında durum böyle değildir. Bunun yerine, ilk ifade , içindeki arama sitesine geri atlayacak şekilde PERFORMdevam adresini sonunda ayarlar . İkinci ifade, dönüşü sonunda ayarlar, ancak varsayılan devam olmasını bekleyerek devam adresini değiştirmez . Böylece, iç çağrı sonuna geldiğinde , dış ifadeye geri atlar ve program sadece "1 2 3" yazdırmayı durdurur. Öte yandan, açık kaynaklı TinyCOBOL derleyicisi gibi bazı COBOL uygulamalarında, iki ifade birbiriyle karışmaz ve çıktı gerçekten "1 2 3 4 3" olur. Bu nedenle, bu tür durumlarda davranış sadece (belki) şaşırtıcı olmakla kalmaz, aynı zamanda taşınabilir de değildir. LABEL3LABEL1PERFORMLABEL4LABEL3LABEL3PERFORMPERFORM

Bu sınırlamanın özel bir sonucu, PERFORMözyinelemeli kod yazmak için kullanılamamasıdır. Bunu göstermek için başka bir basit örnek ( Veerman & Verhoeven 2006'dan biraz basitleştirilmiş ):

    MOVE 1 TO A
    PERFORM LABEL
    STOP RUN.
LABEL.
    DISPLAY A
    IF A < 3
        ADD 1 TO A
        PERFORM LABEL
    END-IF
    DISPLAY 'END'.

Çıktının "1 2 3 END END END" olması beklenebilir ve aslında bazı COBOL derleyicileri bunu üretecektir. Ancak IBM COBOL gibi diğer derleyiciler, "1 2 3 END END END END ..." vb. yazdıran kod üretecek ve sonsuz bir döngüde "END" yazısını tekrar tekrar yazdıracaktır. Yedek devam adreslerini depolamak için sınırlı alan olduğundan, yinelemeli çağrılar sırasında yedeklerin üzerine yazılır ve geri yüklenebilecek tek şey DISPLAY 'END'.

İfadeler

COBOL 2014 , aşağıdaki geniş kategorilerde gruplandırılabilen 47 deyime ( fiil olarak da adlandırılır) sahiptir: kontrol akışı, G/Ç, veri işleme ve rapor yazarı. Rapor yazarı açıklamaları, rapor yazarı bölümünde ele alınmaktadır .

Kontrol akışı

COBOL'un koşullu ifadeleri ve IF. birden çok değeri ve koşulu değerlendirme yeteneği eklenmiş, anahtar benzeri bir ifadedir. Bu, karar tablolarını uygulamak için kullanılabilir . Örneğin, bir CNC torna tezgahını kontrol etmek için aşağıdakiler kullanılabilir : EVALUATEEVALUATE

EVALUATE TRUE ALSO desired-speed ALSO current-speed
    WHEN lid-closed ALSO min-speed THRU max-speed ALSO LESS THAN desired-speed
        PERFORM speed-up-machine
    WHEN lid-closed ALSO min-speed THRU max-speed ALSO GREATER THAN desired-speed
        PERFORM slow-down-machine
    WHEN lid-open ALSO ANY ALSO NOT ZERO
        PERFORM emergency-stop
    WHEN OTHER
        CONTINUE
END-EVALUATE

İfade , bir koşul doğru olana kadarPERFORM yürütülen döngüleri tanımlamak için kullanılır ( diğer dillerde daha yaygın olan doğru iken değil) . Prosedürleri veya prosedür aralıklarını çağırmak için de kullanılır ( daha fazla ayrıntı için prosedürler bölümüne bakın ). ve sırasıyla alt programları ve yöntemleri çağırın. Alt programın/yöntemin adı, değişmez bilgi veya veri öğesi olabilen bir dizgede bulunur. Parametreler referansa göre , içeriğe göre (burada bir kopya referans olarak iletilir) veya değere göre (ancak yalnızca bir prototip mevcutsa) iletilebilir . alt programları bellekten kaldırır. programın belirli bir prosedüre atlamasına neden olur. CALLINVOKECANCELGO TO

İfade GOBACKbir dönüş ifadesidir ve STOPifade programı durdurur. İfadenin altı farklı biçimi vardır: bir dönüş ifadesi, bir ara ifadesi , bir devam ifadesi , bir bitiş işareti veya bir prosedürden çıkmak için EXITkullanılabilir .

İstisnalar bir ifade tarafından ortaya çıkarılır ve prosedür bölümünün bölümünde tanımlanan RAISEbir işleyici veya bildirim ile yakalanır. Bildirimler , işlenecek hataları belirten DECLARATIVESbir ifadeyle başlayan bölümlerdir . USEİstisnalar adlar veya nesneler olabilir. RESUMEbir bildirimde, istisnayı oluşturan ifadeden sonraki ifadeye veya dışındaki bir prosedüre atlamak için kullanılır DECLARATIVES. Diğer dillerin aksine, yakalanmayan istisnalar programı sonlandırmaz ve program etkilenmeden devam edebilir.

G/Ç

OPENDosya G/Ç, kendi kendini açıklayan , CLOSE, READve WRITEdeyimler ile birlikte üç tane daha tarafından işlenir : REWRITE, bir kaydı günceller; STARTbelirli bir anahtara sahip bir kayıt bularak erişilecek sonraki kayıtları seçen; ve , erişilen son kayıtta bir kilidiUNLOCK serbest bırakan .

ACCEPTKullanıcı etkileşimi ve kullanılarak yapılır DISPLAY.

Veri manipülasyonu

Aşağıdaki fiiller verileri işler:

  • INITIALIZEveri öğelerini varsayılan değerlerine ayarlayan.
  • MOVEveri öğelerine değer atayan ; MOVE CORRESPONDING, karşılık gelen benzer adlı alanları atar .
  • SET15 biçimi vardır: diğer işlevlerin yanı sıra dizinleri değiştirebilir, nesne referansları atayabilir ve tablo kapasitelerini değiştirebilir.
  • ADD, SUBTRACT, , ve aritmetiği işleyen (bir formülün sonucunu bir değişkene atamayla MULTIPLY) .DIVIDECOMPUTECOMPUTE
  • ALLOCATEve dinamik belleğiFREE işleyen .
  • VALIDATE, veri bölümündeki bir öğenin açıklamasında belirtildiği gibi verileri doğrular ve dağıtır.
  • STRINGve sırasıyla dizeleriUNSTRING birleştiren ve bölen .
  • INSPECT, bir dize içindeki belirtilen alt dizelerin örneklerini sayar veya değiştirir .
  • SEARCH, bir koşulu karşılayan ilk girdi için bir tablo arar.

Dosyalar ve tablolar kullanılarak sıralanır SORTve MERGEfiil dosyaları birleştirir ve sıralar. Fiil RELEASE, sıralamak için kayıtlar sağlar ve RETURNsıralanmış kayıtları sırayla alır.

Kapsam sonlandırma

IFve gibi bazı ifadelerin READkendileri de ifadeler içerebilir. Bu tür bildirimler iki şekilde sonlandırılabilir: içerilen tüm sonlandırılmamış ifadeleri sonlandıran bir nokta ( örtülü sonlandırma ) veya en yakın eşleşen açık ifadeyi sonlandıran bir kapsam sonlandırıcı tarafından.

*> Terminator period ("implicit termination")
IF invalid-record
    IF no-more-records
        NEXT SENTENCE
    ELSE
        READ record-file
            AT END SET no-more-records TO TRUE.

*> Scope terminators ("explicit termination")
IF invalid-record
    IF no-more-records
        CONTINUE
    ELSE
        READ record-file
            AT END SET no-more-records TO TRUE
        END-READ
    END-IF
END-IF

Bir nokta ile sonlandırılan iç içe ifadeler, yaygın bir hata kaynağıdır. Örneğin, aşağıdaki kodu inceleyin:

IF x
    DISPLAY y.
    DISPLAY z.

Burada amaç, koşulun doğru olup olmadığını ygöstermektir . Ancak, değeri ne olursa olsun görüntülenecektir çünkü deyim sonrasında hatalı bir nokta ile sonlandırılmıştır . zxzxIFDISPLAY y

Başka bir hata , iki IFifadenin bir ELSE.

IF x
    IF y
        DISPLAY a
ELSE
    DISPLAY b.

Yukarıdaki parçada,   ifade yerine ifade   ELSEile ilişkilendirilerek     bir hataya neden oluyor. Açık kapsam sonlandırıcıların tanıtılmasından önce, bunun önlenmesi için     inner 'den sonra yerleştirilmesi gerekir . IF yIF xELSE NEXT SENTENCEIF

Kendi kendini değiştiren kod

Orijinal (1959) COBOL spesifikasyonu   , birçok derleyicinin kendi kendini değiştiren kod   ürettiği kötü şöhretli ifadeyi destekledi . ve prosedür etiketleridir ve   böyle bir ifadeden   sonra yürütülen   prosedürdeki tek ifade   bunun yerine anlamına gelir. Pek çok derleyici hala onu desteklemektedir, ancak COBOL 1985 standardında geçersiz kabul edilmiş ve 2002'de silinmiştir.ALTER X TO PROCEED TO YXYGO TOXALTERGO TO Y

Açıklama ALTER, "bağlamın yerelliğini" baltaladığı ve bir programın genel mantığını kavranmasını zorlaştırdığı için pek dikkate alınmadı. Ders kitabı yazarı Daniel D. McCracken'in 1976'da yazdığı gibi, "programı daha önce hiç görmemiş biri, bazen program başarısız olduğu için kritik zaman baskısı altında ... bir GO TO görüşü program boyunca bilinmeyen konumlarda bilinmeyen sayıda ALTER ifadesinin varlığına işaret ederek, tek başına bir paragraftaki ifade, en cesur programcının kalbine korku salıyor.

Selam Dünya

COBOL'da bir " Merhaba dünya " programı:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. hello-world.
       PROCEDURE DIVISION.
           DISPLAY "Hello, world!"
           .

Ne zaman - şimdi ünlü - "Merhaba Dünya!" C Programlama Dili'ndeki program örneği ilk olarak 1978'de yayınlandı, benzer bir ana çerçeve COBOL program örneği, büyük olasılıkla bir delikli kart okuyucu ve 80 sütunlu delikli kartlar kullanılarak JCL aracılığıyla gönderilebilirdi . Boş bir DATA DIVISION içeren aşağıdaki liste, Linux ve MVS 3.8J çalıştıran System/370 Hercules emülatörü kullanılarak test edilmiştir . Temmuz 2015'te yazılan JCL, Jay Moseley tarafından sunulan Herkül eğitimlerinden ve örneklerinden türetilmiştir. O dönemin COBOL programlamasına uygun olarak, HELLO, WORLD tamamı büyük harflerle görüntülenir.

//COBUCLG  JOB (001),'COBOL BASE TEST',                                 00010000
//             CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1)                        00020000
//BASETEST EXEC COBUCLG                                                 00030000
//COB.SYSIN DD *                                                        00040000
 00000* VALIDATION OF BASE COBOL INSTALL                                00050000
 01000 IDENTIFICATION DIVISION.                                         00060000
 01100 PROGRAM-ID. 'HELLO'.                                             00070000
 02000 ENVIRONMENT DIVISION.                                            00080000
 02100 CONFIGURATION SECTION.                                           00090000
 02110 SOURCE-COMPUTER.  GNULINUX.                                      00100000
 02120 OBJECT-COMPUTER.  HERCULES.                                      00110000
 02200 SPECIAL-NAMES.                                                   00120000
 02210     CONSOLE IS CONSL.                                            00130000
 03000 DATA DIVISION.                                                   00140000
 04000 PROCEDURE DIVISION.                                              00150000
 04100 00-MAIN.                                                         00160000
 04110     DISPLAY 'HELLO, WORLD' UPON CONSL.                           00170000
 04900     STOP RUN.                                                    00180000
//LKED.SYSLIB DD DSNAME=SYS1.COBLIB,DISP=SHR                            00190000
//            DD DSNAME=SYS1.LINKLIB,DISP=SHR                           00200000
//GO.SYSPRINT DD SYSOUT=A                                               00210000
//                                                                      00220000

JCL'yi gönderdikten sonra, MVS konsolu şunu gösterdi:

    19.52.48 JOB    3  $HASP100 COBUCLG  ON READER1     COBOL BASE TEST
    19.52.48 JOB    3  IEF677I WARNING MESSAGE(S) FOR JOB COBUCLG  ISSUED
    19.52.48 JOB    3  $HASP373 COBUCLG  STARTED - INIT 1 - CLASS A - SYS BSP1
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSLIB   DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEFACTRT - Stepname  Procstep  Program   Retcode
    19.52.48 JOB    3  COBUCLG    BASETEST  COB       IKFCBL00  RC= 0000
    19.52.48 JOB    3  COBUCLG    BASETEST  LKED      IEWL      RC= 0000
    19.52.48 JOB    3  +HELLO, WORLD
    19.52.48 JOB    3  COBUCLG    BASETEST  GO        PGM=*.DD  RC= 0000
    19.52.48 JOB    3  $HASP395 COBUCLG  ENDED

Yukarıdaki konsol listesinin 10. satırı etkili olması için vurgulanmıştır, vurgulama gerçek konsol çıktısının bir parçası değildir .

İlişkili derleyici listesi, COBOL'un 14 satırından tek bir çıktı satırı için dört sayfadan fazla teknik ayrıntı ve iş çalıştırma bilgisi üretti.

Resepsiyon

yapı eksikliği

1970'lerde, yapılandırılmış programlama paradigmasının benimsenmesi giderek yaygınlaşıyordu. Önde gelen bir bilgisayar bilimcisi olan Edsger Dijkstra , 1975'te yayınlanan Communications of the ACM'nin editörüne , COBOL'u ve diğer birkaç çağdaş dili eleştirdiği "Canını yakabilecek gerçekleri nasıl söyleriz?" Başlıklı bir mektup yazdı; "COBOL kullanımının zihni sakatladığını" belirterek.

Bilgisayar bilimcisi Howard E. Tompkins, Dijkstra'nın sözlerine karşı yayınlanmış bir muhalefette, sorunun öncelikle eğitimden biri olduğunu savunarak, yapılandırılmamış COBOL'un "yapılandırılmış COBOL'un iyi öğrettiği faydaya hiçbir zaman sahip olmayan programcılar tarafından yazıldığını" iddia etti .

Spagetti kodunun bir nedeni ifadeydi GO TO. GO TOBununla birlikte, COBOL kodundan e-postaları kaldırma girişimleri , karmaşık programlara ve düşük kod kalitesine neden oldu. modüler programlamayı destekleyen ve güçlü döngü tesislerine kolay erişim sağlayan ifade ve prosedürler GO TObüyük ölçüde değiştirildi . Ancak, yalnızca prosedürlerle kullanılabilirdi, bu nedenle döngü gövdeleri kullanıldıkları yerde bulunmaz, bu da programların anlaşılmasını zorlaştırır. PERFORMPERFORM

COBOL programları, yekpare olmaları ve modülerleştirmeden yoksun olmaları nedeniyle kötü bir şöhrete sahipti. COBOL kodu, ancak büyük sistemler için yetersiz olduğu tespit edilen prosedürler aracılığıyla modüler hale getirilebilir. Verilere erişimi kısıtlamak imkansızdı, yani bir prosedür herhangi bir veri öğesine erişebilir ve bunları değiştirebilir. Dahası, parametreleri bir prosedüre aktarmanın bir yolu yoktu , Jean Sammet'in ihmal etmesi komitenin en büyük hatası olarak görülüyordu.

PERFORM THRUBaşka bir komplikasyon , belirli bir prosedür dizisinin uygulanabilmesinden kaynaklanıyordu . Bu, kontrolün herhangi bir prosedüre atlayıp prosedürden geri dönebileceği, dolambaçlı kontrol akışı yaratabileceği ve bir programcının tek giriş tek çıkış kuralını çiğnemesine izin verebileceği anlamına geliyordu .

COBOL daha fazla özelliği benimsedikçe bu durum düzeldi. COBOL-74, programcılara programın her bölümünün erişebileceği verileri kontrol etme yeteneği veren alt programlar ekledi. COBOL-85 daha sonra iç içe geçmiş alt programlar ekleyerek programcıların alt programları gizlemesine izin verdi. Veri ve kod üzerinde daha fazla kontrol, nesne yönelimli programlama, kullanıcı tanımlı işlevler ve kullanıcı tanımlı veri türleri dahil edildiğinde 2002'de geldi.

Bununla birlikte, çok önemli eski COBOL yazılımı, pratik olarak sürdürülemez hale gelen yapılandırılmamış kod kullanır. Bilinmeyen yerlerden bilinmeyen şekillerde kullanılabileceğinden, basit bir kod bölümünü bile değiştirmek çok riskli ve maliyetli olabilir.

Uyumluluk sorunları

COBOL'un oldukça taşınabilir, "ortak" bir dil olması amaçlandı. Ancak 2001 yılına kadar yaklaşık 300 lehçe yaratılmıştı. Bir lehçe kaynağı standardın kendisiydi: 1974 standardı, her biri iki veya üç destek düzeyi içeren bir zorunlu çekirdek ve on bir işlevsel modülden oluşuyordu. Bu, 104.976 olası değişkene izin verdi.

COBOL-85, önceki sürümlerle tam olarak uyumlu değildi ve geliştirilmesi tartışmalıydı. Travellers Insurance'ın CIO'su Joseph T. Brophy , COBOL kullanıcılarını yeni standardı uygulamanın ağır yeniden programlama maliyetleri konusunda bilgilendirme çabalarına öncülük etti. Sonuç olarak, ANSI COBOL Komitesi halktan çoğunluğu olumsuz olan ve komitenin değişiklik yapmasını gerektiren 2.200'den fazla mektup aldı. Öte yandan, COBOL-85'e dönüşümün gelecek yıllarda verimliliği artıracağı ve dolayısıyla dönüşüm maliyetlerini haklı çıkaracağı düşünülüyordu.

ayrıntılı sözdizimi

COBOL: /koh'bol/, n.

Kod öğütücüler tarafından dinozor anabilgisayarlarında sıkıcı akılsızca şeyler yapmak için kullanılan zayıf, ayrıntılı ve gevşek bir dil. [...] Adı, tiksinti veya dehşet ritüel ifadeleri olmadan nadiren söylenir.

Jargon Dosyası 4.4.8.

COBOL sözdizimi, genellikle ayrıntılı olması nedeniyle eleştirilmiştir. Taraftarlar, bunun kodu kendi kendini belgeleyen hale getirmeyi ve program bakımını kolaylaştırmayı amaçladığını söylüyorlar . COBOL'un ayrıca, yöneticiler gibi teknik olmayan personel tarafından okunabilirken, programcılar için öğrenmesi ve kullanması kolay olması amaçlandı.

Okunabilirlik arzusu, İngilizce benzeri sözdiziminin ve isimler, fiiller, yan tümceler, cümleler, bölümler ve bölümler gibi yapısal öğelerin kullanılmasına yol açtı. Yine de 1984'e gelindiğinde, COBOL programlarının koruyucuları "anlaşılmaz" kodlarla başa çıkmakta zorlanıyorlardı ve COBOL-85'teki ana değişiklikler, bakımı kolaylaştırmaya yardımcı olmak için oradaydı.

Kısa vadeli bir komite üyesi olan Jean Sammet, COBOL'un ayrıntılı sözdizimine atfettiği "profesyonel programcıya hitap etmek için çok az girişimde bulunulduğunu, aslında asıl ilgi alanları programlama olan kişilerin COBOL'den çok mutsuz olma eğiliminde olduklarını" belirtti.

Bilgisayar bilimi topluluğundan izolasyon

COBOL topluluğu her zaman bilgisayar bilimi topluluğundan izole edilmiştir. COBOL'un tasarımına hiçbir akademik bilgisayar bilimcisi katılmadı: komitedekilerin tümü ticaretten veya devletten geldi. O zamanlar bilgisayar bilimcileri, COBOL geliştirmesinin üstesinden geldiği ticari dosya işleme sorunlarından çok sayısal analiz, fizik ve sistem programlama gibi alanlarla ilgileniyorlardı. Jean Sammet, COBOL'un popülaritesini, zarafetsizliği, tasarım sürecine katılan etkili bilgisayar bilimcilerinin olmaması ve iş verilerini işlemeyi küçümseme nedeniyle başlangıçtaki bir "züppe tepkisine" bağladı. COBOL spesifikasyonu , komitenin bilmediği yeni Backus-Naur formu yerine sözdizimini tanımlamak için benzersiz bir "notasyon" veya üst dil kullandı. Bu, "ağır" eleştirilere neden oldu.

Dünyada muhtemelen FORTRAN, ALGOL ve PL/I'nin toplamından daha fazla COBOL programı ve programcısı olmasına rağmen, akademik dünya COBOL'u laf kalabalığı, beceriksiz ve kaba olarak görme eğiliminde ve onu görmezden gelmeye çalışıyor. Çoğunlukla, yalnızca acil mesleki hedefi olan okullar COBOL'da eğitim vermektedir.

Richard Conway ve David Gries , 1973

Daha sonra COBOL, onu kaplayan malzeme sıkıntısı yaşadı; giriş kitaplarının ortaya çıkması 1963'e kadar sürdü (Richard D. Irwin 1966'da COBOL üzerine bir üniversite ders kitabı yayınladı). 1985'e gelindiğinde, Kongre Kütüphanesi'nde COBOL'a göre FORTRAN üzerine iki kat ve BASIC üzerine dört kat daha fazla kitap vardı . Üniversite profesörleri, "ticaret okulu" niteliğinde olduğu söylenen COBOL yerine daha modern, en yeni dilleri ve teknikleri öğrettiler. CODASYL COBOL komitesinin başkanı Donald Nelson, 1984'te "akademisyenlerin ... COBOL'den nefret ettiğini" ve bilgisayar bilimi mezunlarının "COBOL'den nefret ettiğini" söyledi.

1980'lerin ortalarına gelindiğinde, iş dünyasında, örneğin FORTRAN veya birleştirici gibi diğer dilleri kullanan kullanıcılardan da COBOL'a karşı önemli bir küçümseme vardı , bu da COBOL'un yalnızca zorlu olmayan sorunlar için kullanılabileceğini ima ediyordu.

2003'te COBOL, Amerika Birleşik Devletleri'ndeki bilgi sistemleri müfredatının %80'inde , C++ ve Java ile aynı oranda yer aldı . On yıl sonra, Micro Focus tarafından yapılan bir anket, üniversite akademisyenlerinin %20'sinin COBOL'un miadını doldurmuş veya ölmüş olduğunu düşündüğünü ve %55'inin öğrencilerinin COBOL'un miadını doldurmuş veya ölmüş olduğunu düşündüğüne inandığını ortaya çıkardı. Aynı anket ayrıca, akademisyenlerin yalnızca %25'inin müfredatlarında COBOL programlaması olduğunu, ancak %60'ı öğretmeleri gerektiğini düşündüklerini buldu.

Tasarım süreciyle ilgili endişeler

Standartlar komitesinin yeterliliği hakkında şüpheler ortaya çıkmıştır. Kısa vadeli komite üyesi Howard Bromberg, geliştirme süreci üzerinde "çok az kontrol" olduğunu ve "personelin süreksizliği ve ... yetenek eksikliğinden rahatsız olduğunu" söyledi. Jean Sammet ve Jerome Garfunkel ayrıca standardın bir revizyonunda getirilen değişikliklerin, objektif kanıtlar kadar standart komitede kimlerin yer aldığındaki değişiklikler nedeniyle bir sonraki revizyonda geri alınacağını belirtti.

COBOL standartları defalarca gecikmelerden zarar gördü: COBOL-85 umulduğundan beş yıl sonra geldi, COBOL 2002 beş yıl gecikti ve COBOL 2014 altı yıl gecikti. Gecikmelerle mücadele etmek için standart komite, bir sonraki standart revizyonu beklemekten daha hızlı özellikler ekleyecek isteğe bağlı eklerin oluşturulmasına izin verdi. Bununla birlikte, bazı komite üyeleri, uygulamalar arasındaki uyumsuzluklar ve standardın sık sık değiştirilmesi konusunda endişelerini dile getirdi.

Diğer diller üzerindeki etkiler

COBOL'un veri yapıları sonraki programlama dillerini etkiledi. Kayıt ve dosya yapısı, PL/I ve Pascal'ı etkiledi ve bu REDEFINESmadde, Pascal'ın değişken kayıtlarının öncülüydü. Açık dosya yapısı tanımları , veritabanı yönetim sistemlerinin geliştirilmesinden önce geliyordu ve birleştirilmiş veriler, Fortran'ın dizilerine göre önemli bir ilerlemeydi.

PICTUREveri bildirimleri, küçük değişikliklerle PL/I'ye dahil edildi.

COBOL'un tesisi, "ilkel" olarak kabul edilmesine rağmen, içerme direktiflerininCOPY gelişimini etkiledi .

Taşınabilirlik ve standardizasyona odaklanma, COBOL'da yazılan programların taşınabilir olabileceği ve dilin çok çeşitli donanım platformlarına ve işletim sistemlerine yayılmasını kolaylaştırabileceği anlamına geliyordu. Ek olarak, iyi tanımlanmış bölüm yapısı, özellikle platform değişikliklerini basitleştiren Ortam Bölümüne harici referansların tanımını kısıtlar.

Ayrıca bakınız

notlar

Referanslar

alıntılar

kaynaklar

Dış bağlantılar