Bu sayfadaki yazılar
Sayfanın metni
Sayfa 24
A miga'nin diğer dilleri (C, Assembler vs.) ile karşılaştırıldığında, BASIC bir hayli yavaş kalmakta. Bu sorunu ortadan kaldırmak için, bazı programcı firmalar BASIC programları en hızlı programlama dili olan makine diline çeviren derleyiciler (compiler) çıkarttılar. Şimdi bu derleyicilerin çalışma şekillerini ve örnek olarak seçtiğimiz iki-üç tanesini inceleyelim.
Cem GENCER Evet, Amiga'da BASIC dili ile çalışmış olanlar bilirler; program biraz uzamaya başladığında çalışması yavaşlar. Bunun sebebi, WorkBench ile birlikte verilen ABASIC'in compiler değil de, bir interpreter olması. Şimdi bilgisayara yabancı olanlar soracak: 'Interpreter ne demek?'. Interpreter, compiler programlama dilinin temel çalışma şeklini anlatır. Compiler'larla, program genellikle bir text editörüyle yazıldıktan sonra CLI'dan bazı komutlar kullanarak ya da ayrı bir program sayesinde makine diline çevrilirler. Bir programı compile etmek, programın uzunluğuna göre değişecektir; fakat genelde bu işlem 2-3 dakika sürer. Compiler'ların bir ufak dezavantajı varprogramı bir hayli uzatırlar ve genelde compile edilen bir programı herhangi cruncher yardımıyla sıkıştırmak mümkün değildir. Programın uzamasının sebecompiler'ın, kullanılan tüm komutların ne dili karşılıklarını programın sonualt-rutin olarak yerleştirmesidir. Fakat bazı compiler'larda bu sistem değiştirilmiştir. Örneğin HiSoft BASIC, programı compile edince diğer compiler'lara göre çok daha kısa bir dosya yaratır. Fakat bunu çalıştırabilmeniz için, HiSoft BASIC'in ana disketinde LIBS di rectory 'sinde yer alan HiSoft Basic.library dosyasını da compile edilmiş programın bulunduğu disketin LIBS directory 'sine aktarmalısınız. Bunun sebebi, bu gibi compiler'ların BASIC kontlarının makine dilinde karşılıklarının sistem library'si (sistem rutinlerinin -olunduğu alt-rutin paketi) gibi bir dosyada saklanmasıdır. Ayrıca compiler'ların pek büyük olma- Yan bir sorunu daha var: hazırladığınız dosyaları, ASCII dosya olarak compiler'a atarma gereği. Bunun anlamı, program dosyası içinde yazıcı kumanda karakterle Escape kodları) gibi, ASCII tablosunda yer almayan kodlan direkt olarak kullanamayışınızdır. Bunları, ancak DATA satırlarında sayısal karşılıkları ile tanımladıktan sonra program içinde READ komutunu kullanıp okutarak kullanırsınız. Fakat bu da bir bakıma avantajdır. PC gibi standart BASIC komutlarıyla çalışan bilgisayarda mevcut istediğiniz bir BASIC programı, Amiga'ya aktarıp doğrudan compile edebilirsiniz. Bu da, bir hayli hazır BASIC programa sahip olmanız anlamına gelmekte.
Amiga BASIC'in değişik bir huyu daha var; programlan kaydederken SAVE komutunda hiçbir takı kullanmazsanız, program dosyanız sıkıştırılarak kaydedilecektir. Bu sayede programlarınız diskette daha az yer kaplarlar; ancak bu da, compiler'lar için sorun çıkanr. Nedeni gayet açık; dosyalar sıkıştırıldığında, saf ASCII yazı dosyaları olmaktan çıkarlar. Böyle bir dosyayı yukarıda da belirttiğim gibi compiler yüklememekte ısrar edecektir. Bunun da çözümü gayet basit: Dosyayı AmigaBASIC'te yükledikten sonra diskete SAVE "<isim>",A komutu ile kaydedin.
Interpreter ise, AmigaBASIC gibi editörü de üzerinde olan ve hiçbir bekleme süreci olmadan programları yükledikten sonra doğrudan çalıştırabileceğiniz bir programdır. Burada program çalıştırıldığında, sadece programın işlenen satırı makine diline çevrilir. Bu, tabii ki büyük bir hız kaybı oluşturur. Hele bir de programda alt-rutinler ve dallanmalar (GOTO..., GOSUB..., CALL...) fazlaysa, program daha da yavaşlar. Interpreter'lara en güzel örnek, Amiga BASIC'tir. HiSoft BASIC, GFA-BASIC ve AC-BASIC ise compiler'lar arasında yer alır.
Compiler ve interpreter arasında bir bakıma büyük bir benzerlik vardır; ikisi de programın işlenmesi gereken satırını karakter karakter hafızadan okurlar ve bu karakterlerin doğruluğunu, sıralanışlarını ve özel işaretlerin yerlerini kontrol ederler. Ancak bu şartların hepsi yerine gelirse, o satır makine diline çevrilir. Interpreter, çevrilen bu satırı hemen çalıştırır; fakat compiler, makine diline çevrilen bu satın öncekilerin sonuna gelecek şekilde hafızaya atar ve bir sonraki satırın kontrollerine geçer.
Compiler ve interpreter'ların çalışma şeklini Şekil I ve Şekil II'den de anlayabilirsiniz. Ayrıca bir program satırı kontrol edilirken yapılan işlemleri, Şekil IH'teki akış diyagramında görebilirsiniz.
Gelelim inceleyeceğimiz üç compiler'a; bunlar AC-BASIC, HiSoft BASIC ve GFA-BASIC'dir. Niye bunları seçtiğimi soracak olanlara cevabım gayet basit; diğer compiler'lar ülkemize gelmediğinden, pek onlara değinmek istemiyorum. Ayrıca AMOS gibi standart BASIC dilindekilerin yanı sıra bir sürü kendi komutları olan derleyicileri de bu teste katmıyorum. Adı geçen üç programın da avantajları ve dezavantajları; bazılarının da kendi özel komutları var. Bütün bunları aşağıdaki satırlarda okuyabilirsiniz.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 25
ŞEKİL lib Compile edilerek makine diline çevrilmiş
* AC-BASIC COMPILER: Piyasaya ilk çıkan compiler sıfatını taşıyan AC-BASIC, Amiga çıktıktan çok kısa bir süre sonra piyasaya sürüldü. Şimdiye kadar değişik versiyonları olan bu compiler, editörü olmayan kendi başına bir program. Programı hazırlamak için ya bir text editör ya da Amiga BASIC'i kullanmanız gerekmekte. Amiga BASIC'i kullandığınız takdirde, programı yazarken çalışıp çalışmadığını her an kontrol edebilme imkanına sahipsiniz. Fakat Amiga BASIC'in kendisi de, editörü de bir hayli yavaş. Bu yüzden uzun bir programı bitirmeniz oldukça uzun sürebilir. Bu durumda, programı text editörde yazmanın daha uygun olduğu ortaya çıkar. Programı denemek istediğiniz zaman diskete kaydeder, AmigaBASIC'e geçerek bunu yükleyip çalıştırabilirsiniz. Bunun da dezavantajı, programı istediğiniz zaman test edemeyişinizdir. Buna bulduğum en uygun iki çözüm şunlar: Hafızaya kullandığınız text editörü ve AC_BASIC'i atar ve ikisini de RUN ile çalıştırırsınız. Bu yöntem 1MB'ta verimli olmakta. Diğer yöntem ise, deminkinin yanısıra hafızaya bir de AmigaBASIC derleyicisini atmaktır. Fakat bu yöntem 1MB'tan daha fazla belleği olanlar tarafından kullanılır.
Her iki durumda da, elimizde sonuçta saf ASCII karakterlerden oluşan bir progprogramın çalışma prensibi.
ram olacaktır. Artık bu programı rahatlıkla AC_BASIC'e vererek compile edebilirsiniz.
Şimdi gelelim programın dezavantajlarına; ilk olarak bazı komutları AC-BASIC'in kabul etmediğini belirtmem gerek. Bunlar; CONT, DELETE, LIST, LLIST, LOAD, MER-GE, NEW, SAVE, TRON, TROFF.
Şimdi bazılarınız hemen AC-BASIC'in olduğu disketi yok etmek isteyebilir. Fakat biraz düşünürseniz, bütün bu komutların compile edilen programın makine dili versiyonunda gerekli olmadığını görebilirsiniz. Bazı komutlar, da, AC-BASIC'te değişik sonuçlara yol açarlar. Bu komutlar da şunlar: END, STOP, SYSTEM, RUN, CHAIN, COMMON, CLEAR^RE.
END, STOP ve SYSTEM komutları, compiler için hiçbir anlam taşımazlar; her üçü de aynı görevi yaparlar. Programdan çıkıp tekrar CLI'a dönmenizi sağlarlar.
RUN ve CHAIN komutu hatasız olarak çalı ırlar. Fakat burada çalıştırı ş lan BASIC programlar değil de, yine compile edilmiş programlar olacaktır. Fakat AC-BASIC, compile edilen programların sonuna < prog* .run> takısını eklediğinden, ya ana ramı comp RUN ve ile etmeden önce CHAIN komutlarının kullandıkları dosya isimlerinin sonuna bu takıyı eklemeli ya da tüm programlan compile ettikten sonra isimlerini CLI'dan RENAME komutunu kullanarak değiştirmelisiniz (sonlarındaki takıları silerek). CHAIN komutuyla kullanılan COM-MON komutunda hem ana programda, hem de yüklenen alt-programda gerekli değişkenleri ve sabitleri programın ilk satırında tanımlamanız gerekir. Bu tanımlama sırasında tüm değişken ve sabitleri ana programdaki COMMON satırında nasıl sıralamışsanız, alt-programlarda da aynı sırayı kesinlikle takip etmeniz gerekli. Ayrıca matris değişkenleri de COMMON kullanılarak sadece aşağıdaki şekillerde tanımlanabilir: DIM STATIC B( 10,3,2) COMMON B ya da COMMON K(4) DIM K(8,12,2,6)
Bu akış diyagramı aynı şekilde istenildiği ka-
dar uzatılabileceğinden burada kesiyoruz
ŞEKİL III Bir satırın karakter karakter kontrol edilmesi ve uygulanması.