Bu sayfadaki yazılar
Sayfanın metni
Sayfa 19
Zirve: Ada
Modern, modüler bilgisayar dillerinin bugüne kadar erişilmiş olan en yüksek gelişme noktasını, şüphesiz Ada oluşturmaktadır. Bu bilgisayar dili, adını, geçen yüzyılda algoritmalar ve hesap makineleriyle ilgilenen ilk kadın olarak bilinen, Kontes Augusta Ada Lovelace'den almakta. Kontesin tanınmasını sağlayan olay, Charles Babbage'nin bulduğu mekanik hesap makinesi için bir “hesap kalkülü” geliştirmesiydi. Bu kalkül, en geniş anlamda bir makinenin ilk algoritması olarak tanımlanabilir. Ada dili, ilk olarak ABD Savunma Bakanlığı'nın isteği üzerine geliştirildi. Aynen C ve Modula'da da olduğu gibi, Ada da Pascal kökenliydi. Yani bu dil de Modula gibi son derece modüler ve yapılandırılmış bir biçimde oluşturulmuş, fakat yetenekleri bakımından Modula'dan çok daha üstün. Modula'da da olduğu gibi, tüm fonksiyonlar, özellikle de giriş-çıkış işlemleri, doğrudan dile dahil değildir. Bu tür fonksiyonlar, “Packages” olarak adlandırılan, özel modüllerde bulunurlar. Bunun en önemli yararı, kullanıcının, standart fonksiyonu beğenmemesi durumunda, hemen her fonksiyonu kendisinin yeniden yazabilmesidir. Tüm bu paketler, ister kullanıcı tarafından yazılmış olsun, ister sistem tarafından önceden hazır bulunsun, kendi açısından bir paket görünümü veren programa dışarıdan “ithal” edilmelidir. Bunu gerçekleştirmek için paket adının verilmesi yeterlidir. Örneğin, metinlerin giriş ve çıkış standart rutinlerin ithal edilmesi için şu rutin kullanılır:
TEXT IO IS PACKAGE STANDART TEXT 10
Bu girişle, STANDART TEXT IO modülünde içerilen fonksiyonlar, program modülüne TEXT IO adıyla tanıtılır. Standart modül, örneğin verilerin bilgiyazımı veya okunması için WRITE ve READ fonksiyonlarını içerir. USE TEXT IO komutuyla gerektiğinde (programda READ veya WRITE ile karşılaşıldığında), karşılık gelen fonksiyonlar (programın içinde TEXT IO adını almış olan) STANDART TEXT IO modülünden alınır ve programa eklenir. Eğer kullanıcı belirli bir noktada standart fonksiyonları değil de, kendi yazdıklarını kullanmak istiyorsa, kendi modülünü
BENİM TEXT IS PACKAGE OZEL TEXT 10
olarak bildirmek ve programda
USE BENİM TEXT
ile kendi tarafından yazılmış olan rutine geçirmek yeterlidir. Bu işlem sırasında, Ada'nın fonksiyonları “üste yükleme” yeteneğinden yararlanılır. Bu da aslında, bir ve aynı parolanın (ya da karakterin) amaç bakımından farklı fonksiyonları adlandırmasıdır. “USE” ile gerçekleştirilen değiştirmeden sonra, örneğimizdeki çıkış fonksiyonu gene “WRITE” adını taşır, ama çağrılan standart fonksiyon değil, kullanıcının kendi yazmış olduğu fonksiyondur.
1. $. Ersen 2. A. Ünverdi 3. H. Yıldız 4. C. Demirel 5. F. Yılmaz 6. K. Kaya 7. G. Gültoprak 8. E. Kilören 9. S. Demirsoy 10. Y. Yıldız.
20. M. Öztezel İzmir olduğu fonksiyondur. Doğaldır ki, bu teknik tüm olası alanlara yaygınlaştırılabilir. Böylece, Pascal veya Modula'daki gibi, kendine özgü veri tiplerini tanımlama olanağı ile birlikte, oldukça yüksek bir esneklik düzeyine erişilebilir. Örneğin, gerektiğinde, kompleks sayılar için COMPLEX veri tipi tanımlanabilir ve ELM, ve 6/9 işlem karakterleri “üste yükleme” aracılığıyla bu yeni veri tipinde kullanılabilir. Ada'nın iki kayda değer ek özelliği var: Bunların birincisi, kullanımda büyük kolaylık sağlayan bir olanak, programdaki olağandışı durumları (exceptions) işleyişi kesmeden kontrol altına alabilme. Bu olanak, kural olarak, bir programın içinde ortaya çıkabilecek hata koşullarını (Basic'teki “TRAP” ya da “ON ERROR” gibi) yakalamaya yarar. Derleyici dillerinde bu tür bir hata yakalama ve düzeltme işlemine pek rastlanmıyordu, fakat Amerikan Savunma Bakanlığı'nın gerekleri bu yöntemi zorunlu kıldı. Bu olmadığı takdirde, kritik bir durumda, radar istasyonları bir “DIVISION BY ZERO ERROR” nedeniyle mesaj göndermeyi kesebilirlerdi.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 18
Fakat modüle edilmiş program çalışmasının bazı koşulları vardır: Tek tek her modülün “dışarıya” yönelik iyi tanımlanmış “bağlantı yerleri” olması zorunludur. Bu sayede, modülleri gereklere göre seçmek ve yerleştirmek mümkün olabilecektir. Fakat diğer yandan, modüllerin “iç yaşantısı” herhangi bir şeyle “dışarıdan” etkilenmemelidir. Bu nedenle Basic, bu tür programlamaya hiç uygun değildir: Alt programların kendilerine özgü adları yoktur, satır numaralarıyla çağrılırlar (kötü dökümantasyon); parametre aktarımı olanaksızdır, dolayısıyla belirlenmiş bağlantı noktaları yoktur ve son olarak alt programda değiştirilen her değişken, hemen ardında ana programda da değişmektedir. Pascal'ın da yaratıcısı olan Profesör N.Wirth tarafından geliştirilen Modula, Pascal'da kısmen varolan modülasyon olayının tutarlı ve bütünsel bir hale gelmiş olduğu ilk dildi. Her Modula programının kendisi de bir modüldür ve dolayısıyla başka programları alt modüller olarak kullanabilir. Bu bağlamda, dilin kullanıcıya sunduğu standart modüllerle kullanıcının kendisi tarafından yazılan (program) modülleri arasında hiçbir fark yoktur. Her modül kendi içinde tümüyle kapalıdır. Yani, veri türleri, fonksiyonlar veya değişkenler hakkında yapılmış tanımlamalar yalnızca modül içinde geçerlidir. Herhangi bir modüldeki tanımlamaların diğer modüllerde de geçerli kılınması istendiğinde, bunların modülden “ihraç edilmesi” ve diğer modüllere “ithal edilmesi” gerekir. Böylece, Basic alt programlarında sık sık karşılaşılan, istenmeyen yan etkiler tümüyle engellenmiş olur. Tabii ki, her bir modül de kendi içinde tümüyle yapılandırılmış biçimde oluşturulmuştur. Bir Modula programcısı, GOTO komutunu kesin olarak ve çabucak unutmalıdır. Bunun yerine, Pascal'dan alışılmış olan (FOR...TO..., DO...END, REPEAT...UNTIL, WHILE...END) gibi döngü yapıları ve ek olarak, LOOP ve
END arasındaki tüm komutları EXIT'te belirtilmiş olan koşul yerine gelinceye kadar, yerine getiren LOOP...EXIT...END döngüsü vardır. Bu döngü yapıları, C64'ün Commodore 3.5-Basic'inde veya C128'in 7.0-Basic'inde bulunmaktadır. Bu da, yapılandırılmış programlamanın Basic ev bilgisayarları alanında giderek daha çok kullanılacağının bir göstergesi olarak kabul edilebilir. Fakat Modula henüz Commodore bilgisayarlarında kullanılamamaktadır.
(Basic'e göre yaklaşık 50 kat hızlı). C ile programlama, aslında, “yapılandırılmış programlama” ilkesine göre her biri sorunun bir bölümünü çözen fonksiyonların yazılmasından oluşuyor. Toplam sonuç, daha sonra bu fonksiyonların sistemli bir biçimde birleştirilmesiyle sağlanıyor. Bu bağlamda, C, bir yandan Pascal'da büyük bir yakınlık gösterirken, diğer yandan mevcut hardware'in (işlemcinin) daha iyi kullanılmasını yarayacak ek komutlar ve operatörler sağlar. Ör-
Kısaltmalı Pascal: C
C dilinin gelişmesi, kendisi de C ile yazılmış olan 16 bitlik işletim sistemi Unix'in gelişmesiyle çok yakından ilişkili. Bu dilin adının C olmasının nedeni, aslında son derece basit. Digital Equipment mikro bilgisayarları için programcı desteği olarak 1970 yılında özel diller geliştirilmişti. Bunlara alfabe sırasına uygun olarak A ve B adları verilmişti. B dili, 1971'de, o zamanlar Assembler ile yazılmış durumda olan Unix sistemini kolayca başka bir bilgisayara aktarabilmek için kullanıldı. O sıralarda Bell Laboratuvarları'nda programcı olarak çalışmakta olan Dennis Ritchie, bu dilin yeteneklerini keşfetti, onu daha da geliştirdi ve inceltti. Ortaya çıkan ürünü de C olarak adlandırdı. Unix, kısa süre sonra, 1973'te, C ile
yazıldı. Dolayısıyla, bir yüksek dille yazılmış bir işletim sistemi oldu. Bunun gerçekleşmesini sağlayan şey, C'nin, o dönemde erişilebilecek en inceltilmiş programları oluşturabilecek yapılandırılmış bir dil olmasıydı. C ile yazılmış programlar bir yandan son derece derli toplu (bellekte çok az yer kaplıyor) diğer yandan da çok hızlı. Örneğin, değişkenlerin değerlerinin yükseltilmesi ve indirilmesine yarayan Assembler programlamasına dayalı özel komutlar gibi. Ayrıca yüksek programlama dilleri arasında, değişkenleri sicil değişkeni olarak deklare edebilme yeteneğine sahip olan tek dildir. Bunun anlamı, bu tür değişkenlerin olanaklar elverdiği ölçüde, iç işlemci sicillerinde tutulabilmesidir. Bu da, normal olarak kullanılan bellek değişkenlerinde olduğundan çok daha hızlı bir erişim sağlar. Bu noktada, dilin gelişmesinde, yalnızca, mütevazi üç siciliyle (A,X,Y) pek büyük olanaklar sağlayamayan 6502 işlemcisine güvenilmediği anlaşılmaktadır. Aslında, biraz daha hızlı bir erişim sağlayabilen Zero-Page de ek bir sicil olarak kullanılabilir. Diğer yandan, C'nin, 64 bitlik süper işlemciler için tasarlanmamış olduğunu belirtelim. Büyük makinelerde kullanılan bu tür işlemciler kural olarak çok fazla sayıda sicil içeriyorlar ve böyle bir makine için yapılmış iyi bir Fortran derleyici, bu sicilleri doğal olarak programın optimize edilmesi için kullanıyor. Dolayısıyla, C, kural olarak 16 ve 32 bitlik makineler için uygun. 8 bitlik işlemcilerde ise C, pratikte yalnızca Z80 ile kullanılabiliyor (CP/M'de). Fakat C64 için de bir C versiyonu hazırlanıyor.