BASIC DERLEYİCİLERİ

İlk olarak Atari ST'lerde çıkan bir programlama dili olan GFA BASIC, kısa bir sürede tüm Atari programcıları arasında tutunmayı başardı. Oyun ya da iş programı yazan çoğu kişide GFA BASIC bulunuyordu. Kısa bir süre sonra aynı dili Amiga'ya da aktarmayı deneyen GFA firması, hayal kırıklığına uğradı. Zira, Amiga'daki ilk versiyonlar doğru dürüst çalışmıyordu. Fakat 1-2 senelik detaylı bir çalışmanın sonucunda, GFA firması GFA BASIC derleyicisinin 3.0 versiyonunu çıkartarak bunun Amiga piyasasında hak ettiği yeri almasını sağladı. Artık Amiga'da da birçok kişi bu derleyiciyi kullanarak oyunlar ve iş programları yazmaya başladı.

GFA BASIC'in bu kadar çok tutulmasını sağlayan etken nedir? GFA firması çok önemli bir konuya değinerek GFA BASIC'in C dili gibi structure oriented olmasına özen göstermiş. Bu, programlarınızın düzenli olması gerektiğini, aksi halde hatalı çalışacaklarını tanımlayan bir sözdür. C programlarını incelemiş olanlar bilirler; böyle bir program ne kadar uzun olursa olsun incelemesi gayet kolaydır. Nedeni de bütün döngülerin ve şartlı dallanmaların biraz içeriden yazılarak daha rahat görülebilmesini sağlaması. Ayrıca sistem rutinleri ve sisteme ait bilgi tabloları da kullanılarak program gayet hızlı ve güzel yazılabilir.

GFA BASIC'te neler vardır? Bu, çok kapsamlı bir soru olduğundan ilk olarak GFA BASIC'in nelerden oluştuğunu kısaca anlatmak istiyorum. GFA BASIC iki ana modülden oluşmakta; bunlardan ilki AmigaBASIC gibi interpreter olarak çalışmakta. İkinci modül ise interpreter'a hazırlanan programlarınızı compile ederek stand-alone-file haline getirmeye yarıyor. Bunun sonucunda, programın makine diline çevrilmiş olan versiyonu oluşur ve hiçbir library'e gerek duymadan çalıştırılabilir.

GFA BASIC 3.0 versiyonuna, bir de Run-only modülü eklenmiş. Bu modül sayesinde, programınızı compile etmeden çalıştırabilirsiniz. Run-only modülü, ilk bahsettiğim interpreter modülünün editörü çıkartılmış hali. Bu yüzden de programı dağıtsanız bile, programınız inceleyemeyecektir.

Gelelim editöre; bence gayet güzel hazırlanmış. Bazı ufak tefek eksiklikleri olmasına rağmen (CygnusEd ile karşılaştır-

GFA BASIC v3.0:

ınca!), gayet iyi ve hızlı çalışılabiliyor. Menü çubuğundaki fonksiyonlar yardımıyla listeniz üzerinde tüm gerekli global işlemleri yapabilirsiniz. Bu global işlemler Load, Save ve Search/Replace gibi temel işlemlerdir. Ayrıca isterseniz çalışma ekranını InterLace moduna geçirerek, ekrandaki satır sayısının iki katına çıkmasını sağlayabilirsiniz.

Program yazarken ilk gözüme çarpan ve iyi bir avantaj da sağlayan yardımcı fonksiyonlardan biri, şartlı ve şartsız döngülerle ilgili. GFA BASIC, yazdığınız her satırı anında kontrol etmekte. Eğer bu satır bir IF ... THEN, FOR ... NEXT ya da SELECT CASE ... CASE gibi bir döngünün ilk satırı ise, bu döngünün tüm satırları otomatik olarak birkaç karakter ileriye itilir. Bu sayede programın hem düzenli gözükmesi, hem de hata aramaların daha hızlı yapılabilmesini sağlamakta. Kullanıcının boşluk koyarak düzen sağlama çalışması kaldırılarak daha hızlı çalışmaya izin verilmiş. Bu yöntem otomatik olarak gerçekleştirildiğinden hafızadan boşluklar yüzünden fazla yer yemez. Oysa aralara boşluk koymanız, listenizin uzaması anlamına gelmekte. Zira her boşluk da bir ASCII kodu anlamına gelmekte ve yer kaplamakta.

Bu yöntemin bir ufak dezavantajı, her satıra sadece b bilmesi. Bu ir komut yazıla programın listesini bir hayli uzatabilir.;

fakat düzenli bir liste olacağını düşünürsek, bu hatayı da göz ardı edebiliriz.

Programınızın başında değişken tanımlamak istiyorsanız, her bir değişken için ayrı bir satır yazmanız lazım. Bu da çok can sıkıcı bir olay. Listeleri yazmanıza yarayan editör bir hayli hızlı; bu sayede çok uzun listelerde istediğiniz yere gelmek çok kısa bir işlem. Editörün diğer iyi bir yanı ise markalamalara izin vermesi. Klavye tuşlarını kullanarak liste içinde istediğiniz yere görünmeyen markalar koyabilirsiniz. Daha sonra yine tuşları kullanarak, istediğiniz zaman bu markaladığınız yere anında gelmeniz mümkün. Bu klavyeyi hızlı ve verimli bir biçimde kullanabilen profesyonel programcılar için, çok yararlı bir fonksiyon. GFA BASIC editörünün, gayet kullanışlı olduğunu belirtmiştim; bunu destekleyen bazı fonksiyonlar daha var. Bunlardan ilki, folding tekniği adı verilen bir yöntem. GFA BASIC'te alt rutinler (CALL ... SUB ... END SUB) prosedür olarak tanımlanmalı. Bunun için, alt rutinin başına SUB yerine PROCEDURE sonuna da END SUB yerine RETURN gelmelidir. Bu prosedüre ait tüm rutinleri yazdıktan sonra, tekrar prosedürün ilk satırına (PROCEDURE ...) gelirseniz, o prosedüre ait RETURN dahil hiçbir satır gözükmez. Bu sayede, programın genelini incelemek gayet basit. Prosedürlerden birini editlemek ya da incelemek isterseniz, tekrar PROCEDURE ... satırının üzerine gelerek bir tuşa basmanız yeterli.

GFA BASIC'in önemli bir fonksiyonu daha var; Hata arama. GFA BASIC'in editöründe yazdığınız her satır, tek tek kontrol edilir ve hata varsa uyarı mesajı verilir.

Ayrıca GFA BASIC, eksik olan yere gereğinde ünlem ya da noktalı virgülü kendisi koyar. Bir döngüyü kapamadan (FOR...NEXT'teki NEXT gibi) programı çalıştırmaya kalkışırsanız, programınız kesinlikle çalışmaz.

Editörün diğer iyi huylarından biri de, hemen hemen her komut için kısaltmalar olması. Bu sayede, amatörler programlarını normalden daha hızlı yazabilirler. Ayrıca girilen tüm değişkenler, istenirse kontrol ettirilebilir (New Names fonksiyonunu kullanarak). Bu durumda programda her yeni değişken ismi kullandığınız anda bir pencere çıkacak ve değişken isminin doğruluğunu onaylamanız istenecektir. Bu yine amatörler için oldukça faydalı bir fonksiyon.

GFA BASIC, galiba en başarılı yarışmacılarımızdan biri; çünkü normal BASIC komutlarının yanı sıra, fazladan 350 komutu daha var! Bu komutlarla bit kaydırma, matematiksel işlemler (ADD, SUB, MUL, DIV ve MOD) sıraya koyma işlemlerini (QSORT ve SSORT komutlarıyla quicksort ve shellsort) rahatlıkla yapabilirsiniz. Ayrıca ses ve grafik olarak Amiga'nın tüm gücünü kullanabileceğiniz bazı komutlar da var. Grafik komutları arasında Amiga'nın 4096 renklik HAM modunu ya da 64 renklik ExtraHalfBrite modunu açan komutlar da var. SGET komutu yardımıyla komple bir grafik ekranını bir matris değişkenine kopyalayabilirsiniz. FILL komutuyla kullanmak üzere 36 hazır temel brush var. Bunlarla bir bölgeyi ister noktalı, ister çizgili, isterseniz de karma şekilde doldurabilirsiniz. Ayrıca bir string değişkeni kullanarak kendi temel brush'larınızı da tanımlayabilirsiniz.

LOGO dilini kullananlar bilirler; bu dil yardımıyla, ekranda grafikleri son noktaya göre relatif olarak çizmek mümkündü. GFA BASIC'teki DRAW komutuyla aynı işlemi yapabilirsiniz. Bu arada x ve y eksenlerini skalalayarak oranlı çizimler de yapmanız mümkün.

Programlarında animasyon kullanmak isteyenler için sprite ve bob'ların kullanımına izin verilmiş. Fakat bunların ikisi de AmigaBASIC'te olduğundan çok daha hızlı ve akıcı bir şekilde hareket edebilmekte. Ayrıca bunları tanımlamak için string değişkenleri kullanıldığından bir günde bile basit oyunlar yazabilirsiniz. DEFMOUSE komutuyla özel bir sprite da değiştirilebilmekte: Mouse işaretçisi. İsterseniz hazır 7 işaretçiden birini kullanın, isterseniz kendi işaretçinizi kendiniz tanımlayın. Bu arada tanımlanan mouse işaretçisinin gereğinde sadece bir pencereye ait olmasını sağlayabilirsiniz. Bu şekilde 7 ayrı pencerede 7 ayrı mouse işaretçisi kullanabilirsiniz. Pencerelerden birini seçtiğiniz anda mouse işaretçisinin görünümü değişecektir.

Biraz da sistem rutinlerinin kullanımına bakalım; pencereler, GFA BASIC'te istenildiği gibi dizayn edilerek kullanılabilir. Bu arada normalde AmigaBASIC'ten mümkün olmayan intuition flag'larını kullanmak da mümkün. Ayrıca her pencereye ayrı bir message port (pencereyle ilgili sistem mesajlarının gönderilip alınabileceği data tablosu) açarak, o pencerede yapılan girdi/çıktıları otomatik olarak kontrol edebilir ve belirlediğiniz alt-rutine ya da prosedüre dallanabilirsiniz (ON MESSAGE GOSUB).

Hazır şartlı dallanma komutlarını inceliyoruz, diğer basit şartlı dallanmalara da bakabiliriz. ON MENU KEY ve ON MENU BUTTON ile sağ tuşa basılıp basılmadığını kontrol edebilirsiniz.

Menü çubuğundaki pull-down menülerin hepsini string değişkenleriyle tanımlayabilir ve ayrıca menülerdeki checkmark fonksiyonunu da kullanabilirsiniz. İstediğiniz her menü fonksiyonuna ayrı bir tuş tanımlayıp fonksiyonlara daha hızlı erişmeyi sağlayabilirsiniz.

GFA BASIC'e eklenen iki özel pencere yardımıyla belli bir işlemin sonucunu doğrulamak için sistem requester'ını kullanabilirsiniz. Fakat burada, üç seçenek hakkına sahipsiniz. Yapılan seçim, bir değişkene saklanır.

Dosyalama/kartoteks programı hazırlayanlar için gayet güzel bir komut da hazır olan Load/Save penceresini kullanmanızı sağlıyor.

INLINE komutu, yararlı komutlar arasında. Bu komutla, program içinde hafıza ayarlamayı otomatik olarak yapabilirsiniz. Bu sayede grafik ya da sesi yüklemek için ayrı bir tampon bölge (buffer) açmanıza gerek kalmaz. Bu komutu kullanan programlarınıza Assembler ya da C dilinde hazırlanmış ufak rutinleri de sorunsuz olarak ekleyebilirsiniz.

Sistem rutinlerini kullanmak isteyen profesyonel programcılar için EXIT Dos, Graphics, intuition, DiskFont, layers ve WorkBench library'lerin rutinleri komut gibi çağrılabilmekte. Bunlar için AmigaBASIC ya da HiSoft BASIC'de olduğu gibi daha önceden dosyaları yardımıyla BMP dosyalarını oluşturmanız gerekmemekte!

GFA BASIC'in compiler'ına gelince; compiler iki şekilde de çalışabiliyor: Dilerseniz doğrudan çalışır dosya yaratabilirsiniz, dilerseniz de link edip dosya yaratırsınız. İkincisini seçtiğinizde daha sonra ALINK ya da BLINK programlarını (C disketlerinde bulabilirsiniz) kullanarak hazırladığınız programa, istediğinizi ya da Assembler modüller eklemeniz gayet basit. Bu sayede programın hız gerektiren kısımlarını makine dilinde hazırlayarak verimi maksimuma çıkarabilirsiniz.

Son olarak da vereceğim iki saf test sonucu yardımıyla karşılaştırma yapabilirsiniz:

Floating point sayı kullanılarak yapılan 10000 bölme işi- GFA Interpreter'da 3.4 saniye sürerken, aynı işlem Compiler'dan geçirilince 1.5 saniye sürmekte. Oysa Amiga BASIC bu işlem için 26.0 saniye harcamakta.

10000 işlemli bölmeyi integer sayıya uyguladığımızda Interpreter 2.6, Compiler 0.5 saniye harcamakta. AmigaBASIC hız değişmeyip yine aynı kalıyor.

Gelelim ikinci testimize; burada da FOR ... NEXT döngüsü kullanıp 1'den 100000'e kadar saydırılıyor. İlk rakam floating point sayılarla: Interpreter 6 saniye, Compiler 4.4 saniye, AmigaBASIC ise 40.0 saniye.

Aynı işlemi integer sayılara uyguladığımızda, interpreter iki kat hızlanarak 3 saniyeye düşmekte, compiler ise bu durumda 1.4 saniye harcamakta. Amiga BASIC maksimum hızına ulaşarak 20.0 saniyede döngüyü bitirmekte.

Eh, bu kadar tanıtım yeter, artık karar sizin. İster AC-BASIC Compiler'ı, isterseniz HiSoft BASIC'i ya da GFA BASIC kullanın. Her üç durumda da sonunda memnun kalacağınıza eminim. Ne olsa programlarınızın normalden hızlı çalışması sizi ve programlarınızı kullananları sevindirecektir.

Bu üç program arasında benim favorim GFA BASIC oldu. Nedeni de bu kadar yeni komut, düzen ve modülerlik olması. Umarım bu yazı doğru seçimi yapmanıza yardımcı olur. Hepinize başarılı günler.