COMAL, PASCAL, C-BÜYÜK TURNUVA
Retro bilgisayarcomal, Paskal, C-GN | dd
Modern ve verimli diller BASIC'i liderlik koltuğundan etmeye çalışıyorlar. Bu yeni lider adayları, amaçlarına erişecek yeteneğe sahipler mi?
Kullanıcı kendisi için en doğru programlama dilini ararken, zorunlu olarak program oluşturmanın farklı yöntemleriyle karşı karşıya gelir. Burada kullanıcının karşısına çıkan, “Top-Down”, “yapılandırılmış” ve hatta “modüler” gibi kavramlardır. Özellikle bu bu kavrarnların son ikisi, Commodore 64'ün BASIC'inden başka bir dile geçmek isteyen kullanıcı açısından, oldukça yabancıdır. İlk kavramın adlandırdığı yöntemi o zaten kendi C-64'ünde kullanmaktadır: Program, tek bir parça (dolayısıyla bir bütün) olarak yazılır, önceden katı kurallarla belirlenmiş bir yapıya sıkı sıkıya uygun olmak zoründadır. Bu yapı satır numaralarından başlar, kılı kırk yararcasına sıkı dikkat isteyen syntax (yazım) denetimine kadar uzanır. yapılmak zorunda kalınan bir sürü atlama, programın okunabilirliğini giderek ortadan kaldırır. İki haftalık bir uğraşın sonunda kullanıcı, bir sürü ufak değişiklik sonucunda ortaya çıkan asla okunamayacak haldeki bilmecelerle karşı karşıya kalır. bu durumun çözümünü belki Assembler (Makine dili) sağlayabilir. Dergimizin eski sayılarında Baytan Bitirmez arkadaşımızın makine dilini öğreten bir dizisi yayınlan- Makine diline geçmeyi arzu etmeyen kullanıcılar ise bunun alternatiflerini aradıklarında, C-64 ve C-128 için favori diller olarak PASCAL, COMAL ve C'ile karşılaşacaklardır.
Bu diller arasında doğrudan bir karşılaştırma denemesi pek başarılı olamaz, çünkü aralarındaki büyük farklar bu türden bir denemeyi boşa çıkarır. Yalnız bu üç dilin ortak bir özelliği olduğu söylenebilir (bir istisna dışında): Bu diller hem C-64 hem de C-128 için kullanılabilmektedir.
Yalnız C dili henüz sadece C-128'de kullanılabiliyor. Haydi bu dil karmaşasının içine doğru' bir geziye çıkalım. İlk hedefimiz COMAL.
BASIC 4 PASCAL - COMAL
COMAL (COMmon Algorithmic Language), 1973 yılında doğdu. Amaçlanan, programcı olmayan kişilerin kolayca öğrenebileceği ve aynı zamanda üstün bir programlama dilinin gereklerini yerine getirebilecek bir dil oluşturmaktı. Dili geliştirenler, BASIC'in basitliğiyle PASCAL'ın verimliliğini tek bir dilde kaynaştırmak istiyorlardı. Bu dildeki bazı komutları BASIC'ten tanıyorsunuz. Aslında bunların hepsi, yapı komutları. Döngüler yalnızca FOR...NEXT ile oluşturulmuyor. Bu dilde daha çok REPEAT...UNTIL, WHILE...ENDWHILE, CASE...ENDCASE ve IF...THEN...ELSE...ENDIF gibi yapılar kullanılıyor. Bu döngü komutlarının yardımıyla, GOTO komutunda ortaya çıkabilen açık olmayan atlamalar engellenebiliyor. Belki buna inanmayacaksınız, ama GOTO'yu tümüyle unutabilirsiniz; bu dil “yapı katili” olmadan iş beceremeyenler, COMAL içinde de GOTO'yu kullanabilirler. Commodore 64 için farklı iki COMAL versiyonu var. Versiyonlardan biri olan 0.14, Public Domain disket olarak alınabiliyor. Diğer versiyon ise PC'lerdeki öncellerinden daha verimli olduğu iddia edilen bir kartuş. COMAL geliştirilirken PASCAL'ın örnek alınmış olduğu olgusu, yalnızca yapı komutlarından kaynaklanmıyor. Programcının işini son derece kolaylaştıran bir olanak, prosedürleri programının içine eklemleyebilmesi. Burada açıklayıcı bir söze gerek var. C-64 BASIC, prosedür tanımaz, bu dilde prensip olarak yalnızca altprogramlar söz konusudur. COMAL'da bu altprogramlar BASIC'te olduğu gibi GOSUB ile çağrılmazlar, her birinin kendine özgü adları vardır. Böylece satır numaralarını içeren atlamalara gerek kalmaz. Prosedür, kendi adıyla çağrılır. PROC ile ENDPROC arasındaki tüm komutlar yerine getirilir. Bu sayede programın yapısı 63
Assembler:
WHİLE yapısı
(WHİLE koşulu DO
ENDWHİLE )
Komut listesi
REPEAT Yapısı
REPEAT
UNTİL koşulu
Komut listesi LOOP yapısı LOOP —( ENDLOOP Komut listesi
EXİT WHEN koşulu ram açıkça görülebilen modüllere ayrılmış olur. Bunlar ileride ana programda hiçbir değişiklik gerektirmeksizin kendi içlerinde değişiklikler yapılmasına olanak sağlarlar. Prosedürlere değerler aktarılabilir: Bu da BASIC programcısının hiç tanımadığı bir olgudur. İyi, BASIC'te programcı ana programda kullanılmış olan değişkenlerle çalışır. Peki, değişkenin değiştirilmemesi gerektiğinde ne yapar? Bu durumda COMAL, değişkenlerin kalize edilmesi olanağını verir. Programcı, bir değişkenin bir prosedür içinde, ana programın içinde ya da yalnızca tek bir alt programın içinde erişilir olup olmadığını belirleyebilir. Böylece doğabilecek bir isim karmaşası baştan engellenmiş ve programın tüm kısımlarına bakabilme olanağı da korunmuş olur. COMAL, bu prosedürleri diskette depolayabilir, böylece programın uzunluğu yalnızca disket kapasitesiyle sınırlı hale gelir. Fonksiyonlar, prosedürlerle akraba sayılabilirler. Bunlar ek olarak değerleri geri verme olanağı da sağlarlar. Bir fonksiyonu çağırıp buna bir değer aktarabilir, bunu işleyebilir ve bir sonuç elde edebilirsiniz. Böylece bir fonksiyon bir değişkene bağlanabilir. Açımlamalar biraz karmaşık olan bu konuyu daha kolay anlaşılır hale getirebilir. COMAL dili, C-64'ün verimlilik düzeyini çok aşmayı sağlayan bazı başka komutlar da içerir. Grafik ve ses, COMAL'ın kendine özgü komutlarının yardımıyla sorunsuz bir biçimde yazmakta olduğunuz programa sokulabilir. Grafik alanında COMAL'ın yeteneklerini ölçebilmek için Resim 2 bir fikir verebilmektedir. Burada makine dilinin herhangi bir katkısı yoktur. Ama COMAL, hemen tüm diğer dillerde olduğu gibi makine rutinlerine eklenme olanağı da sağlamaktadır. Tüm bu olanakların yanı sıra dosya yönetimi ve Floppy erişimi için kapsamlı komutlar içeriyor olması, COMAL'da yazılmış kapsamlı programların herhangi bir engelle karşılaşmamasını sağlıyor. COMAL hakkında anlatılanlardan etkilendiyseniz, kısa sürede bir COMAL disketi ya da kartuşu edinmeye çalışın.
Resim 1: Önemli Comal yapılarının yazım diyagramları
PASCAL
Gezimize devam edip PASCAL'a geliyoruz. Bu dil COMAL'a örnek olmuş. Aralarındaki en önemli fark ise, dilin türünden kaynaklanıyor. Gerek COMAL gerekse BASIC'in tümüyle çevirici diller olmalarına karşın, PASCAL yalnızca karşılık gelen bir derleyiciyle birlikte kullanılabiliyor. Bunu zorunlu kılan, tüm derleyici dillerde ortak olan bir özellik: Değişkenlerin programın başında tanımlanmaları zorunlu. Hepiniz bunu C-64 BASIC'inden tanıyorsunuz. Bu durumda programın içinde bir yerde ortaya çıkan bir değişkeni çevirici önceden tanıyor olacaktır. Ayrıca hemen bu değişkenin türünü de (sayısal ya da harfsayısal) belirleyecektir. Çevirici program olarak daima “birlikte işlediğinden”', bir değişken için gerekli bellek alanı onun ilk ortaya çıkışında ayrılmaktadır. Derleyici, bir PASCAL programından tümüyle kendi başına işleyebilen bir makine dili programı üretir. Bu sırada değişkenler için gerekli yeri sağlayan bir çevirici sözkonusu değildir. Dolayısıyla derleyicinin baştan hangi değişkenlerin kullanılacağını, bunların uzunluklarını bilmesi ve derleme sırasında gerekli alanı buna göre ayarlaması gerekir. Bu nedenle PAS-CAL'de değişkenler programın başlangıcında deklare edilir. Zorunlu olarak gereken komutlar bu sırada koyu olarak yazılırlar. BASIC'ten tanıdığımız üç farklı değişken türü vardır: Integer (tamsayı), Floating Point (kayar nokta) ve String (yazısal dizi). Bugün piyasada bulunabilen PASCAL versiyonları, beşer tamsayı ve kayar noktalı sayı türleri içeriyorlar. Bunlara bir de yalnızca “doğru” ve “yanlış” olarak denetlenen Boole değişkenleri ekleniyor. Bunlar genellikle döngü koşullarında sık kullanılıyor. Herhalde en zor kullanılan tür, göstergeyle sunuluyor. Bu gösterge değişkeni, örneğin sizin verdiğiniz bir değeri içermez. Çoğu zaman burada değerin bellekte bulunduğu yerin başlangıç adresi gizlidir. Resim 3, bu soyut süreci açıklamayı amaçlamaktadır. Bir başka ilginç veri türü ise RECORD (kayıt) olarak adlandırılır. Bu tür, özellikle dosya yönetiminde kullanılır. Buna ufak bir örneği Resim 4'te görebilirsiniz. Tüm RECORD kendine özgü bir ada sahiptir. Bunun içindeki ögeler, yine, RECORD'la ayrılamaz biçimde bağlı olan bağımsız değişkenler oluştururlar. Bunlar yalnızca RECORD'un adıyla birlikte anılabilirler. “isim” değişkenini ““ad- RECORD'unda işlemek isterseniz, programda şu tanımlamayı yapmanın gerekir: Adres-isim Bu karmaşık yazı biçiminden kurtulunabilmesi için, PASCAL'da DO-WITH komutu vardır. Bu yolla RE-CORD adının verilmesi gereksiz hale gelir. Bu veri türü en çok dosya yönetimi alanında kullanılır. Çünkü komple veri cümlelerinin işlenmesini çok kolaylaştırır. Tabii ki PASCAL, dosyaların işlenmesi için gerekli tüm komutlara sahiptir. Henüz var olmayan, hızlı bir biçimde kendine özgü prosedür ya da fonksiyon olarak programlanmasıdır. Prensipte bunlar da aynen COMAL'daki gibi çalışır. Ama parametre aktarımı sırasında prosedür ya da fonksiyon için değişkenlerin yeniden deklare edilmesi zorunludur. Bir prosedür içindeki değişkenler daima yerel olarak geçerlidir. Derleyicinin verimiyle bağlantılı olarak, tüm program için kullanılabilecek daha global değişkenlerin deklare edilmesi olanağı bulunabilir. Böylece PASCAL'in önemli fonksiyonlarını sıralamış olduk. Derleyiciyi satın alırken dikkat etmeniz gereken konu, verimliliğin derleyiciden derleyiciye değişebilirliğidir. Bu durum özellikle C-64/C 128 için grafik ve ses yeteneklerinin kullanılabilmesi açısından önemlidir.
Resim 2. Comal, C-64'ün tüm grafik özelliklerini kullanır.
Modern: C
Genç bir dil son zamanlarda PASCAL'i geçmeye çalışıyor: C. Bu dil, aslında işletim sistemi Unix olan büyük makineler için geliştirildi. Ama ev bilgisayarları ve kişisel bilgisayarlarda da yaygın bir ilgi gördü. AMIGA ya da Atari ST gibi bilgisayarlarda işletim sistemleri zaten C ile yazılmış durumda. C'nin komut sayısının düşük olması, işletmek için küçük bir makine dili gövdenin yeterli olmasına olanak veriyor. Aslında tüm C derleyicileri 28 ana komutun dışında da komutlar içerirler. Ama bu ek komutlar aslında C komut seti yardımıyla oluşturulmuş fonksiyonlardan başka bir şey değildirler. Bilgisayar basınında C, daima “makineye yakın” bir dil olması nedeniyle övgü almaktadır. Tabii bu durum işletim sistemi C ile yazılmış makineler için söz konusudur. Burada tüm rutinler önceden kullanıma hazır vaziyettedir. Program-
“a” değişkeni, “München” metnine ilişkin bir göstergedir.
0300H
$ 0300H'nın içeriği
Bİ ü
KA
2
im
& c
h
0305H
Resim 3. Göstergeler, yalnızca adresleri içeren değişkenlerdir.
ramcı her fonksiyonla işletim sistemine erişebilmektedir. Buna ek olarak tüm C derleyicilerinde tüm önemli fonksiyonları içeren kapsamlı kütüphaneler yer almaktadır. Artık yalnızca PASCAL konusunda anlattığımız gösterge tekniğini kullanır hale gelmeniz yeterlidir. Aksi takdirde C ile uğraşırken çok kısa sürede pes edebilirsiniz. C'de bir derleyici dil olduğundan, değişkenlerin daima, programların ya da fonksiyonların başında tanımlanmaları gerekmektedir. Tabii C'de de, COMAL'de ve PASCAL'de olduğu gibi, tüm yapı komutları mevcuttur. C'de bir prensip daha var: Programcı istediği her şeyi yapabilir. Ama bu durum, olağanüstü disipline edilmiş bir programlama stilini zorlar, derleyici yalnızca syntax (yazım) hatalarını fark eder. Hatalı harf bileşimleri, döngülerde hatalı üst sayılar ya da alan taşmaları çoğu derleyiciyi pek ilgilendirmez. Bu durumlarda hatanın aranması bir işkenceye dönüşebilir. C-128 kullanılırken -C-64 için henüz bir C derleyicisi yoktur- C derleyicisi yalnızca dilin öğrenilmesine yarar. Daha büyük program paketlerinin oluşturulmasında C dili C-128'e pek uygun değildir. Ayrıca C-128'de C'nin hızı BASIC'inkinden pek fazla değildir. Ama mutlaka C diline girmek isteyen bir kullanıcı, biraz daha paradan çıkmayı göze alıp farklı bir bilgisayar satın almayı tercih etmelidir.
BASIC'in işi bitti mi?
Buraya kadar anlattıklarımıza göre BASIC çoktan unutulmuş olmalıydı. Yapılandırılmış programlama olgusu, C-64 BASIC'e tümüyle yabancıdır. C-128'de prosedürleri ve fonksiyonları tanımaz. Bütün bunların BASIC'i turnuvadan elemeye yeterli kusurlar olduğu zannına kapılabilirsiniz. Fakat bir şeyi kesinlikle unutmamak gerekiyor: BASIC eskiden olduğu gibi şimdi de en çok kullanılan dil. Bir defa BASIC, makinenin içinde yer almış durumda. Yani makineyi açtığınız anda BASIC'e erişiyorsunuz. BASIC'le çok kapsamlı programlar yapmayı başarmış olan her kullanıcı, bu iş sırasında mutlaka sık sık sınırlara çarpmıştır. İşte bu noktada PASCAL ve COMAL gerçek birer alternatif oluşturmaktadırlar. Son derece kapsamlı görevler kolayca ve makine diline gerek duyulmaksızın yerine getirilebilmektedir. Geriye kalan tek sorun mali konudadır, bu da her kullanıcının kendisinin çözmesi gereken bir sorundur.
Resim 4. Pascal'da RECORD'lar, dosya işlemesini kolaylaştırırlar.