Bu sayfadaki yazılar
Sayfanın metni
Sayfa 63
00100 input — 190110100 İNE ATLAMA ne 1001 WHLE 1010... İNTERPRETER
PRİNT “BAŞLANGIÇ” - savı VİRGÜLDEN SONRASIZ SAYI PRİNT “SON”
LE
PRİNT VİRGÜLDEN.
END PROC
BASIC Programı
ona 151080032 COMPİLER Makine Programı
Çevrilmiş bir programın çalışmasında artık program metni kullanılmaz.
LİNE (x1,y1)-(x2,y2),1 ifadesi (x1,y1)'den (x2,y2)'ye 1 renginde bir çizgi çeker. Bu ifadenin ardından bir de “,bf” eklenecek olursa, diyagonalini bu çizginin oluşturduğu dikdörtgen | rengiyle doldurulur. (BASIC'te kullanıma hazır tüm renkler numaralanmıştır). Program O ile | arasındaki bir raslansal sayıyı üreten RND fonksiyonunu kullanır ve böylece Hollandalı sanatçı Mondrian'ın yapıtlarını andıran resimler üretir. BASIC resimleri raslansal olarak üretilmiş ve kullanıcı herhangi bir tuşa basana kadar değişen dikdörtgenler içerirler. Bu programda da gördüğünüz gibi, program kitaplıklarının prosedürlerinin tam olarak kullanılabilmesi durumunda, çok basit araçlarla şaşırtıcı efektler elde edilebilmektedir. Ama BASIC komutları yardımıyla AMIGA sistem yazılımından kitaplık prosedürlerinin yalnızca bir kısmı kullanılabilir (bunlar bu iş için oldukça kolay). Ama tecrübeli bir programcı olarak her programlama dilinden işletim sisteminin tüm prosedrürlerini kullanabilirsiniz. Bunun için yalnızca programınıza prosedürün nerede ve hangi kitaplıkta bulunacağını ve hangi parametrelere gereksinimi olduğunu bildirmiş olmanız yeterli. Bu bağlantıların daha derinlemesine açıklanması, bu yazının konusunu aşar. Eğer bu konuda daha çok bilgi edinmek istiyorsanız, programlama kitabınızdan Libraries (Kütüphaneler) bölümünü okuyun.
Yüksek olarak adlandırılan tüm programlama dillerinde temel fikir, bir programı önce harflerin biraraya getirilmesiyle oluşan “doğru” kelimelerinin oluşturduğu belirli ölçülerde okunabilir bir dilde formüle etmektir. Bu yolla oluşturulan bir programlama dilinin insan diline ne denli yakınlaştığı ise dilden dile değişmektedir. Ancak uzmanlar tarafından anlaşılabilen çok karmaşık dillerin yanısıra, gündelik yaşamda bir kullanım kılavuzu okur gibi kolayca anlaşılabilen programlar da vardır.
Eğer bugüne kadar herhangi bir programlamadilini öğrenmemiş du- Tumdaysanız, bu eksikliği telafi etmeye kalkıştığınızda, programcıların kasılmaları sizi ürkütmesin. Programlama dillerinin herbiri en basit insan dilinden çok daha basittir ve çok daha kolay öğrenilebilir. Programlama dillerinin kendi aralarındaki tüm farklılıklara rağmen ortak olan bir noktaları vardır: Programcının komutları için eşanlamlı bit dizileri makine dilinde yerine getirilmek durumundadır. Burada eşanlamlının anlamı, bit dizisinin programının düşündüğünü sanki yüksek dilde yazılmış gibi yapmasıdır. Bir pro: ramın makine koduna çevrilmesi yöntemi oldukça basittir. En azından
© kadar basittir ki, bu iş de bir bilgisayar programına bırakılabilmektedir. Kullanılacak iki yöntem vardır: Interpreter (çevirici) ve Compiler (derleyici). Interpreter, yüksek programlama dillerinin makine koduna çevrilmesinde yararlanılan en basit ve en çok tercih edilen metoddur. AMIGA BA-SIC bir çeviricidir. Bunun nasıl çalıştığını daha önce açıklamıştık. Çevirici bir programı çalıştırabilmek için satır satır okur, komutlara karşılık gelen makine dili parçalarını arar ve yerine getirmesi için bunları bilgisayara aktarır. Bu sürece programin çevrilmesi adı verilir. Buna karşılık derleyici, yüksek programlama dilindeki program metnini alır ve bundan makine dilinde aynı işi yapacak eşanlamlı bir program üretir. Tüm bu sürece, derlemek (compile etmek) adı verilir. Bu sırada makine kodunu olabildiğince derli toplu ve çabuk oluşturabilmek için mükemmelleşmiş teknikler kullanılır. İnsan dilleriyle bir karşılaştırma yapacak olursak, bir çeviriciyi (Interpreter) yabancı dildeki bir kitabı okurken simultane tercüme yapan bir çevirmene benzetebiliriz. Buna karşın bir derleyici, bir kitabın bir dahaki okunmasında çevirmeni gerektirmeyecek şekilde yazılı çevirisini yapan bir çevirmene benzer. Derleyici prensibinin avantajları çok açıktır: Elde edilen makine kodu kendi başına bir olgudur ve çalışmak için çeviriciyle ek bir programa
63 gerek duymaz. Ayrıca derlenmiş programlar çoğu zaman daha da hızlıdırlar, çünkü çeviricinin program satır satır taraması, analiz etmesi ve çevirmesi gerekmemektedir. Diğer yandan derleyicilerin tüm dillerde genel olarak kullanılmalarını engelleyen ağırlaştırıcı dezavantajları da vardır. Derleme işlemi küçük bellek yapılarında çoğunlukla çok uzun süre almaktadır. Aslında bu sırada elde edilen programın çok hızlı olmasına rağmen, oluşturulması ve denenmesi sırasında uzun bekleme süreleri göze alınmak durumundadır. Yapılan her yeni ufak değişiklikten sonra program yeniden çevrilmek zorundadır Ve insanın çalışmakta olan programda yapılan değişiklikleri denemesi için dakikalar boyu beklemesi gerekebilir. Bir çeviricinin kullanılması durumunda ise program, yapılan her değişiklikten sonra anında işlemeye hazır durumdadır. Çoğu derleyicilerin kullanımları çeviricilerinkinden çok daha zordur. Çeviricilerde kural olarak bir programın çalışmaya başlaması için bir başlama komutunun (örneğin RUN) verilmesi yeterliyken, derleyiciler bu noktaya erişene kadar birden fazla çalışma adımı gerektirirler (tabii bunların herbirinde hata yapılması olasılığı da vardır). Bu nedenle günümüzde bir programlama dilini öğrenmek veya bir programı gerçekten öğrenerek oluşturmak ve denemek için çeviriciler vazgeçilmez unsurlardır. Programlamanın her iki türü de (çevirici ve derleyici) kendi açılarından haklı varlık nedenlerine sahipler ve mutlaka birinden biri de herhangi bir programlama dili için ideal olma özelliğine sahiptir. Bu nedenle şimdi size birkaç önemli programlama dilini tanıtmak istiyoruz: Makine koduna en yakın olan programlama dili Assembler'dir. Assembler'de programın her satırı makine kodundaki bir yönergeye tümüyle karşılık gelir. Assembler olarak da adlandırılabilen derleyicinin bu dille işi oldukça kolaydır. Programcının burada programlamanın oldukça alçak bir düzeyinden işe başlaması gerekecektir. Çünkü ufacık bir metnin ekranda görüntülenmesi gibi son derece basit bir şey bile Assembler dilinde oldukça büyük programları gerektirir.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 62
VIRGULDENSONRASIZ 123,4567 ya da DEGER — 123,4567 VIRGULDENSONRASIZ komutları yeterlidir. Ekranda 123 değeri görünecektir. Eğer BASIC bir komutu tanımıyorsa, bu isimde bir prosedürü arayacaktır. Bu, prosedü Tün ilk satırında PROC sözcü; hemen ardında yer alıyor. Eğer bu tanınmayan komutun ardında bazı veriler de varsa, bunlar prosedür adının ardından gelen parantez içindeki değişkende saklanır. Verilerin bu şekilde bir prosedüre aktyarılması işlemi, “parametrelerin aktarımı” olarak da adlandırılır. Prosedürün yerine getirilmesinden sonra daha önceki bilinmeyen komuttan hemen sonra gelen komut yerine getirilir. Son verilen komutla program akışı içine prosedürlerin alınması da “prosedürlerin çağrılması” olarak adlandırılır.
Ama kural olarak programcı vi gülden önceki haneleri basmak deği daha ileride kullanılmak üzere bir değişkene atamak ister. Bu işlem fonksiyonlarla yapılabilir, ama AMIGA BASIC'te buna olanak yoktur. Bu bağlamda AMIGA BASIC biraz zayıf kalmaktadır. Şimdi vereceğimiz örneği denemeye kalkışmayın, çünkü zaten çalışmayacaktır.
Bu örneğin farklı olduğu noktalar, FUNC tanımlaması ve sondan bir evvelki satırdır. Fonksiyona da bir de-
“ğer aktarılmaktadır. Prosedürden farklı olarak bir fonksiyon RETURN ile bir değeri geri verir. Ama çağıran komut bu değerin ne yapılması gerektiğini belirtmek zorunda olduğundan, bir fonksiyon çağrısı bir prosedür çağrısından farklı bir görünümdedir.
Örnek: YALNIZVIRGULDENONCE — VIRGULDENSONRASIZ(123,4567) ya da PRINT VIRGULDENSONRASIZ (123,4567)
Bir fonksiyona aktyarılacak olan değerler (parametreler) kural olarak parantez içinde yazılır. Son komut ayrıca prosedürle aynı sahiptir. Fonksiyonlar ve prosedürler, çok pratik olmaları nedeniyle, tüm programlama dilleri bunlardan bir sürü oluşturmuş durumdadır. Örneğin BASIC dilinde INT fonksiyonu vardır. Bu fonksiyon bir sayının virgülden sonraki hanelerini keser:
PRINT INT (765,4321)
Prensip olarak BASIC'te her oluşturulmuş komut bir prosedürdür. Bu cümle biraz kaba olabilir, ama AMImutu teşhis eder ve tanıdıktan sonra gerekli adımları yerine getirecek olan bir iç prosedürü çağırır. Bu iç prosedürler ve fonksiyonlar ve hatta BA-SIC'in kendisi, bellekte makine dili komutları halinde bulunurlar. Mikroişlemci bunları anlayabilir ve yet ne getirebilir. Bu iş bu kadar basit. BASIC'te her komut için karşılık gelen bir iç prosedür yoktur. Prosedürlerin birçoğu AMIGA'nın ROM'- unda (Read Only Memory- Salt Okunur Bellek) bulunur. Bunlar fonksiyonlarına göre kitaplıklarda (İngilizce: Library) biraraya toplanmış durumdadırlar. Örneğin çizgiler, dikdörtgenler ve çemberler çizmek için grafik komutlar “graphics.library”'de bulunur. Ekran ve pencere yönetimini ise “intuition.library”'nin prosedürleri üstlenmiştir.
Mondrian
BASIC programını terketmeden önce, yeteneklerinden son bir örnek verelim. Aşağıdaki döküm, “az emek harcayarak, çok verim elde etmek” sloganına oldukça uygundur:
WHILE INKEY$- “ ”
xl - RND * 630 x2 — RND * 630 yl — RND * 200 y2 — RND * 200
f #RND*3 4 0.4 LİNE (x1,y1)-(x2,y2),f,bf
FUNC VIRGULDENSONRASIZ GA'da BASIC'i anlayabilmenin WEND (SAYI) anahtarı da bu cümlededir. S — SAYI BASIC'in kendisi de bir — AMIGA BASIC'in en basit ve ay- WHILES <- 1 dır. BASIC'in bir kısmı (büyükçe bir — nı zamanda en çokyönlü grafik ko- S - prosedür), kullanıcıya BASIC dö- — mutlarından biri LINE'dır. LINE ile WEND kümleri alma olanağı verir. Bu kıs- — hem çizgiler hem de dikdörtgenler çi- SAYI — SAYI—S ma editör adı verilir. Kullanıcı prog- zilebilir. Bu iş için LINE'ın 1. köşe, RETURN S ramının başlangıcında BASIC prog- — 2. köşe ve renk parametrelerine ihti- END FÜNC ramı, tek tek her satırı “görür”, ko- — yacı vardır. Örneğin; 001100141 11111001 (MOVE) 00000000 00000000 (707) MOVE 707,4711 ÇEVİRMEN 00000010 11000011 00000000. 00000000 (4711) 00010010 01100111 Assembler ASSEMBLER Makine dili
Assembler komutları işlemci komutları için kolayca anlaşılabilecek ifadelerdir.