Ileri Ne lDi ir? Bilgisayar De Ne
SİNİR © < İZ Dn ke 9 Fa, 80 9 > Ss S Şi Pad 50 ke a Ba) Si KS) Z
TS < Bo 2 KS) Ss S İSİ “Bo BS > “Bo <
3 9 A 3 Ks “80 3 8 Si Be) "2 Di 5 2 8 Bs © 8 S O
Bir stereo müzik seti veya bir video kayıt cihazı kullanmak isterseniz, kural olarak önemli birkaç tuşun fonksiyonlarını öğrenmeniz yeterlidir. Bir bilgisayarda ise durum oldukça farklıdır. Müstakbel bir programcı her ne kadar öncelikle bilgisayarın tuşlarının işlevlerini öğrenmek zorundaysa da, bu aşamayı binbir zorluk, çabayla ve ilk defa karşılaştığı el kitabını adım adım çözerek ardında bıraktıktan sonra, kendine ait ilk programların yazılması gündeme gelir: Bir programlama dilini, Basic'i öğrenmesi gerekmektedir. Fakat birçok örnekte sorun bu kadarla çözülmüş olmaz. Her şeyi Basic'le programlayacağına inandığı gelişme aşamasının sonuna geldiğinde, bu dilin bazı zayıf noktalarının da farkına varmaya başlar: Basic programları yavaştır; alt programların adlar yerine satır numaralarıyla çağrılması ve yapı komutlarının olmaması okunabilirliğini zorlaştırmaktadır ve son olarak da farklı Basic versiyonlarının çokluğu başka bilgisayar sistemlerinin programlarının fazla bir değişiklik gerektirmeden aktarılmasını hemen hemen olanaksız kılmaktadır. Bu zayıf noktalar programcıyı ister istemez bir başka programlama diline geçmeye zorlamaktadır. İşte tam bu noktada programcılar cemaati bölünmeye uğruyor: Bir grup, “makine dili” kavramında büyüleyici bir cazibe görüyor ve bu dil sayesinde kendini Basic'in byte-byte uğraşma gerektiren zayıflığından kurtarıyor. Diğer bir grup ise Basic'in gerçek alternatiflerini arıyor ve bu arama sırasında “Pascal”, “Forth” veya “LOGO” gibi kavramlarla karşılaşıyor.
Bir Programlama Dili Ne İçin Kullanılır?
Diğer insanlarla sohbet etmek istediğimizde, bir dil kullanırız. Aynı şekilde insanoğlu -belli bir anlamda- “akıllı” makinelerle iletişim kurabilmek için ortak bir temel-bir dil kullanır. Bu dil ilk planda sohbet etmeye değil, bilgisayara onu programlayabilmek için komutlar vermeye yarar. Bu dilleri kabaca iki ana gruba ayırmak istersek, bir grubu “makineye yakın” programlama dilleri (Assembler), diğerini ise Basic, Pascal, Fortran gibi “yüksek” programlama dilleri oluşturur. Assembler dillerinin belirli bir MİB'le (Merkezi İşlem Birimi, CPU - Central Processing Unit) yakın bağımlılık içinde olmalarına karşın, yüksek programlama dilleri kolay okunabilirlikleri ve özellikle işlemciden bağımsızlıkları nedeniyle öne çıkarlar. Bu bağlamdaki en ideal durum, örneğin bir Apple bilgisayarında yazılmış bir Basic programının, üzerinde hiçbir değişikliğe gerek duymadan bir Commodore 64'te çalışması olurdu. Tabii ki bu, pratikte -özellikle Basic'te- geçerli olamamakta. Bunun iki nedeni var. Nedenlerden biri, Basic versiyonlarının yeni standarttan farklı versiyonların çokluğu. Diğer neden ise, makine düzeyinden kaynaklanıyor. Basic'te PEEK, POKE ve SYS ile doğrudan makine düzeyine erişme olanağı var. Fakat bilgisayarlar arasındaki hardware farklılıkları nedeniyle, bu olanağın farklı makinelerde kullanılması farklı sonuçlar doğuruyor. Makine düzeyine erişim olanağından, dar anlamda “yüksek” programlama dillerinde mümkün olabildiğince kaçınılmış ve böylece programların “portatif” olması, yani diğer bilgisayarlara aktarılabilir olması engellenmiş durumda. Bu bağlamda Basic makine düzeyine, diğer dillerin çoğundan daha yakın.
Derleyici ve Yorumlayıcı
Kk
Her bilgisayar, bir makine diline sahiptir. Bu, merkezi işlemcisinin doğrudan anlayabildiği dildir. Bu “dil”, ne yazık ki yalnızca “1” ve “0”ların bulunduğu dizilerden oluşmaktadır. Yani insanlar açısından zor anlaşılabilir bir dildir. Bunun bir üst düzeyinde zaten, makine dilinin her komutu için bir açıklama metni kısaltmasının bulunduğu, Assembler dilleri yer almaktadır. Kendileri ve “Assembler” olarak adlandırılan özel programlar, bu kısaltmaları makine diline çevirirler. Bu şekilde programlama, çok yorucu ve neredeyse bıktırıcı bir çalışma. Ayrıca bu tür Assembler programları da, başka bilgisayar sistemlerine ya hiç aktarılamıyor ya da çok zor aktarılıyor. Ellili yılların başlarında ilk kez “yüksek programlama dilleri”nin tutarlı bir şema taslağı oluşturuldu (bakınız şema). Bir yüksek dil, Assembler dilinden bazı temel noktalarda ayrılmakta. Bu programlar makineden bağımsızlar, yani herhangi bir sorun çıkmadan en farklı bilgisayarlarda bile kullanılabiliyorlar. Ayrıca bu programlar, bir insanın kullanması ve okuması açısından oldukça basit; bu da hata olasılığını hissedilir derecede azaltıyor. Fakat bu yararlar, bir handikapı da beraberinde getirmekte: Böyle bir yüksek dili doğrudan yerine getirebilecek hiçbir işlemci yok; çünkü bu diller, makine için fazla “yüksek”. Bu problemin çözümü de kolay. Gerek duyulan şey, yüksek dili makine diline çeviren ve böylece bilgisayarın komutları yerine getirebilmesini sağlayan bir çevirmen. Bu çeviri süreci katı kurallara uygun olarak gerçekleşiyor. Aslında bu kurallara uyulması, bir algoritmanın varlığından başka bir anlam taşımıyor. Tabii bir algoritma programlanabilir ve böylece çeviri süreci otomatikleştirilebilir. Bu çeviri programları, “Compiler” (derleyici) olarak adlandırılıyorlar. Tabii ki, (farklı makine dillerine sahip) farklı bilgisayar sistemleri için farklı derleyiciler gerekiyor. Derleyici programın kendisi ve üretilen makine kodu, MİB'in türüne göre farklı olabiliyor. Fakat çevrilmiş olan program, bilgisayar sisteminden tamamen bağımsız olarak her zaman aynı şeyi, yani yüksek dil programı tarafından öngörülmüş olanı yapar. Bunun yanısıra, özellikle mikro-bilgisayarlarda yaygın olmak üzere, bir yüksek programlama dilini işlemenin ikinci bir yolu var. Örneğin Commodore 64, MİB olarak 6510 işlemcisini kullanır; 6510 ise birkaç Basic parçasını birarada kullanabilmeyi beceremiyor. Buna rağmen bu bilgisayarla çok rahat Basic'te çalışabiliyor. Programın önce çevrilmesi gerekmiyor, aksine program olduğu gibi yorumlanıyor. Bunun anlamı şu: C-64'ün Basic işlem
Sayı Eğitim dilleri işlenmesi
Ticari veri
Programlama dillerinin şeceresi
Listeleme & | Süper diller Döküman : tasyon
60
ALGOL 68
İşletim sistemli | Matris işleme | .Assembler dilleri benzeri yorumlayıcısı, makine dili Basic olan bir süper işlemci gibi davranıyor. Bu yanıtmaca sırasında aynen hayali bir Basic işlemcisinin yapacağı gibi, tek tek karakterler yorumlanır. Tabii ki bu yöntem pek rantabl değil. Programın her işletilişinde, yorumlayıcı, tek tek karakterleri yeniden taramak zorunda. Buna karşılık derleyici yalnızca bir defa çevirir ve bir daha kullanmaz, çünkü artık program makine kodundadır. Bilgisayar çağının başlarında, işlem zamanı çok pahalıya maloluyordu. Bu nedenle ellili yıllarda nihayet derleyicinin ortaya çıkması, bir mucize olarak algılanmadı.
<———E— fikir alıntısı
Dİ ayaloğa yönelik
güçlü etki daimi gelişme
resmi dil
Dillerin bağlantıları böyle. Sayı işleme dili olan Fortran'dan Algol'un da etkisiyle BASIC üretildi. Dillerin hangi alana yönelik oldukları üst satırda kısaca veriliyor.
İlk Adım - Fortran YEAR
Basit programlamacılığa ve programların aktarılabilirliğine duyulan gereksinim, 1952 yılında dünyanın ilk yüksek programlama dili olan Fortran'ın doğmasına yol açtı. 1954 yılında ise, onun temel bazı noktalarında düzeltmeler yapılmış ve geliştirilmiş bir versiyonu olan Fortran II çıktı. Bu ikinci versiyon uzun yıllar boyunca büyük makine sistemlerinde dil standardını oluşturdu ve günümüzde de -Fortran V bile çıkmış olmasına rağmen- hâlâ büyük rağbet görmekte. Fortran adı, FORmula TRANslator (formül çevirici) sözcüklerinin birleşmesiyle oluşturulmuş ve zaten dil de tam bu iş için geliştirilmiş. Gücü, matematiksel ve doğa bilimsel formüllerin bu dille programlanabilmesinden kaynaklanıyor. Yaygın olarak bilinen tamsayılar (Integer) ve gerçek sayılar (Real)'ın yanısıra Fortran'da çift hassasiyetle hesap yapabilmek için Double Precision ve özellikle elektroteknik alanında son derece önemli olan kompleks sayı türleri de kullanılıyor. Fakat bu son veri türü, makinenin içinde yerine getirilmesi gereken karmaşık hesapların varlığı nedeniyle, çoğu mikro-bilgisayarda öngörülmemiş durumda.
Özellikle dünya çapında yaygın kullanıma sahip olan Fortran IV'te, 1985 yılında Fortran'dan türetilmiş olan Basic'teki gibi, sık sık GOTO komutuyla ileriye veya geriye atlamalar yapmak gerekiyor. En son versiyon olan Fortran V, IF...THEN...ELSE...ENDIF... gibi yapıları dilin dışında bıraktı.
Z80 MİB'iyle çalışan hemen tüm mikro-bilgisayarlar için CP/M'de Fortran geçerli. Fakat C-64 için bu dil henüz uyarlanmamış durumda. Fortran'ın geliştirilmesinden birkaç yıl sonra, iki önemli programlama dili ortaya çıktı: Algol ve Cobol.
Algol (ALGOrythmic Language), öncelikle matematiksel-teorik problemlerin çözümüne yönelikti. Bu dil hiçbir zaman Fortran'ın erişmiş olduğu yaygınlığa erişemedi. Ama başka bir önemli yarar sağladı: Gelişkin, öbeğe dayalı dillerin oluşturduğu “neslin” “atası” oldu. Bu neslin en son temsilcisi, Ada olarak adlandırılan dil.
Cobol (COmmon Business Oriented Language) 1959 yılında ticari kullanımlar için geliştirildi. Geliştirme hedeflerinden biri, elektronik bilgi işlem uzmanı olmayan kişilerin de programları okuyabilmelerini sağlamak arzusu (daha doğru bir ifadeyle söylemek gerekirse, hayali) idi.
Böyle bir hedef belirlemeden, dünyada şimdiye kadar yaratılmış dillerin belki de en kötüsü ortaya çıktı. Üstüne üstlük bir de ticari kullanımın en yaygın dili haline geldi ve ancak Basic kullanan ev bilgisayarlarının yayılmasıyla bu egemenliği sarsıntıya uğrayabildi. Cobol programlarında doğal dil (İngilizce) kullanılır. “IF X > 0 THEN A=B/X” şeklindeki bir Basic ifadesi, Cobol'da “IF X GREATER 0 THEN DIVIDE B BY X GIVING A” şekline dönüşür.
Tabii ki, böyle bir dilde her matematiksel formül, bir bakışta tümüyle görülemeyecek bir yığın oluşturuyor. Bunun üzerine bir de, Cobol'un programcıyı bir ön derleyici olarak kullanmak şeklindeki garip özelliği ekleniyor. “Procedure” olarak adlandırılan asıl programa ek olarak, programcı (!) tarafından bir değişken için ne kadar bellek alanı harcanması gerektiğinin belirlendiği, “Data Division” adlı bir bölüm var. Ayrıca bir değişkenin iç gösteriminin ekrana veya bilgiyazara verilmesi için dekode edilmesi de burada belirlenmek zorunda. Cobol, bütün bunlara karşın böylesine bir yaygınlık kazanmış olmasını, öncelikle, büyük veri miktarının kütükler halinde organize edilmesi ve yönetilmesi yeteneğine borçlu. Bu yetenek ticari alanda büyük yarar sağlayabiliyor. Fakat diğer tüm kullanım alanları için, Cobol, rahatça uygunsuz olarak nitelenebilir. Bütün bu uyarılara rağmen Cobol'la uğraşmak isteyen biri, küçük bilgisayarlar alanında bugün ancak CP/M modunda bu olanağa sahip olabilir. O sırada önde gelen diller olan Fortran, Algol ve Cobol'un olumlu yönlerini kapsayan tek bir dil oluşturma güdüsü, altmışlı yılların ortalarında PL/1 (Programming Language 1) dilinin doğmasına yol açtı. Fakat amaçlanan hedefe ulaşılamadı. Aslında PL/1 bu üç dilin çeşitli özelliklerini kendi içinde topladı, ama bunlar en iyi özellikler değildi. PL/1 programları mükemmel gibi gözükmelerine karşın, şaşılacak derecede bağlantısız ve yapısızdı. Bir PL/1 programı, programcının kişisel stiline bağlı olarak, Fortran'da, Algol'da ya da Cobol'da yazılmış görünümüne sahip olabilir; daha da kötüsü, bunların her üçünün bir karmaşası olabilir. Toplu olarak hakim olunamayacak sayıda anahtar kelimenin varlığı, her programcıyı kolayca hata yapmaya itebilir. PL/1 dili, CP/M işletim sistemi bulunan ev bilgisayarlarına uygulanabiliyor.
Pascal EL RR a
Bu eski, ama hâlâ yaygın olarak kullanılan dillerden sonra, programlama dilleri arasında modern bir klasik sayılabilecek olan bir dile geldik. Bu dil, 1971'de Niklaus Wirth tarafından Algol'a dayanılarak geliştirilmiş olan Pascal. Pascal adı, diğer bilgisayar dillerinde olduğu gibi bir kısaltma değil. Bu ad, 19. yüzyılda yaşamış olan Fransız matematikçisi ve filozofu Blaise Pascal'in onuruna verilmiş. Selefi Algol gibi, Pascal de katı biçimde standartlaştırılmış bir dil. Hâlâ çoğu Pascal versiyonunda temel alınan, hangi dil ögelerinin kullanılabileceğini ve bunların etkilerini katı bir şekilde belirliyor. Son zamanda Kaliforniya'da geliştirilen bir alternatif versiyon -USCD- Pascal-, Wirth-Standardı'nda yeri olmayan “string” veri türünü ve buna karşılık gelen fonksiyonları da öngörüyor. Aralarında fark, bunun dışında çok az. Pascal programlarının aktarılabilirliğinden bahsetmek gereksiz, çünkü Pascal'de gerekli olan her yeni veri türü kolayca tanımlanabiliyor. Eğer kullanabileceğiniz “string” veri türü elinizde yoksa,
TYPESTRING - ARRAYII..80)
OFCHAR;
yazmanız yeterli.
Pascal'de “char”, önceden tanımlanmıştır ve her defasında bir tek karakteri temsil etmektedir. Yukarıdaki Pascal satırı (yeni) veri türü olan “string”de en çok 80 “char” ögesinden oluşan bir alan olarak tanımlanacaktı. Bu bağlamda devam edilebilir ve zincir (string) değişkenleriyle çalışılabilir. Bu, Pascal'de daima zorunlu olan, değişken birleşmesiyle gerçekleşir: VAR ALPHA: STRING; Böylece, string türünde olması gereken bir Alpha değişkeni birleştirilmiş olur. Bu yolla veri türü yedekleri istendiği kadar artırılabilir. Bu, ilk defa Pascal'de tutarlı bir şekilde gerçekleştirilebilen ve o zamandan beri de modern programlama dillerinde olmaması düşünülemeyen bir yenilik. Pascal, verimliliği ve mantıksal ve sağlıklı yapısı nedeniyle, eğitim dili olarak acemi programcılar ve enformatikçiler arasında çok seviliyor. Bu dil, yapılandırılmış programlamayı ve hatta sorunu çözerken yapılandırılmış biçimde düşünmeyi öğretiyor. Böyle bir katkı, tabii ki daha büyük programların geliştirilmesinde küçümsenemeyecek bir avantaj. Pascal'in C64 ve CP/M için uygun birçok versiyonu var.
(Devam Edecek)