Bir Kütüphane İçin Taslak
Beatrice H. Worsley
Computation Centre
McLennan Laboratory
University of Toronto
Toronto, Canada
Son on yıl, otomatik dijital bilgisayarların şaşırtıcı çeşitlilikte marka ve modellerinin geliştirilmesine tanıklık etmiştir. İlke olarak bunların tümü Turing makineleri olmasına rağmen, bu bilgisayarlar bileşen parçalarının, mantıksal tasarımların ve komut kodlarının sürekli değişen bileşimlerini içermektedir. Günümüzde, yorumlayıcı ve derleyici tekniklerin uygulanabilirliği iyice yerleşmişken, evrensel bir kod talebinin ortaya çıkması kaçınılmazdır. Sonuç olarak, evrensel kodlara yönelik öneriler neredeyse makinelerin kendisi kadar çok olmaya başlamıştır.
Sözde kodlar, ya bir makinenin bir başka makine üzerinde ya da hayali bir makinenin gerçek bir makine üzerinde benzetimini yapmak için kullanılır. Bu tür sözde kodların tasarımcıları, uygulanabilirliklerinin—verimliliklerinden söz etmeye bile gerek yok—birçok açıdan sınırlı olduğunun farkındadır. Programlama, akış diyagramı aşamasında bile, verilen bilgisayarın topolojisinden (yani çeşitli depolama birimlerinin göreli büyüklüğü ve erişilebilirliği), komut kodu yapısının birim sözcükle ilişkisiyle, ve giriş, depolama, hesaplama ve çıkış sırasında kullanılan sayısal sistemden etkilenir. Ayrıca, uygulama alanı—başlıca bilimsel, ticari ya da endüstriyel olup olmadığı—sözde kod tarafından sağlanacak olanaklar üzerinde etkilidir.
Son olarak, sözde kodun nihai amacı dikkate alınmalıdır. Amaç, iki ya da daha fazla farklı bilgisayar işleten büyük bir kuruluşta kodlamayı birleştirmek midir? Ayrıntılı bir makine için tek seferlik problemlerin kodlanmasını basitleştirmek midir? Gerçek bir makine üzerinde kodlama ilkelerini göstermek üzere eğitim amaçlı mıdır? Yerine geçeceği bir makineyi başka bir makine üzerinde benzeterek geçişi kolaylaştırmak mıdır? Ya da bir ya da daha fazla makinede tek bir problem sınıfını kodlamak için ayrı bir dil sağlamak mıdır; her sınıf için farklı bir sözde kodun gerekli olduğu durumlar gibi? Örneğin, cebirsel ifadelerin değerlendirilmesi, mekanik ya da elektrik ağlarının çözümü, yapıların analizi, enzim dinamiği çalışmasında ortaya çıkan denklemlerin çözümü vb. için kodlar mevcuttur.
Bir Üniversite Kurulumu İçin Felsefe
Tüm bu amaçlar deneyimle zaten doğrulanmıştır, ancak açıkça evrensel bir koda yönelmezler. Bu nedenle aşağıdaki tartışma, üniversite ortamında orta ila büyük ölçekli bir bilgisayar için uygun bir kütüphanenin tasarımıyla sınırlıdır. Böyle bir kuruluşun gereksinimleri iki yönlüdür: araştırma projelerinde çalışan personel için gelişmiş bir kodlama düzeni ve öğretim amaçları ile öğrenci uygulamaları için basitleştirilmiş bir kodlama düzeni. Dolayısıyla, şimdilik birincil ve ikincil olarak adlandırılacak iki kodlama sistemi mevcut olmalıdır.
Birincil sistem, veriler ve komutlar için doğal makine gösterimini kullanacaktır. Daha sonra ayrıntıları verilecek olan temel bir organizasyon şemasıyla uyumlu olacak ve yine de azami esnekliğe izin verecektir. İkincil düzen ise bir dizi yordam paketinden oluşacaktır. Her paket için, özel bir sayısal gösterimdeki veriler üzerinde ilgili bir işlem kümesinin gerçekleştirilmesine izin verecek bir sözde kod tanımlanacaktır. Böylece, örneğin, matrisleri ele alan bir paket, karmaşık aritmetik için bir başka paket, çok hassasiyetli kayan noktalı sayılar üzerinde işlem yapan bir başka paket vb. bulunacaktır.
Her paket için, veri ve sözde komutlar, giriş sırasında bir derleyicinin etkisiyle makine diline çevrilecektir. Çeviri, ortak organizasyon şemasının kurallarına uyularak makine koduna yapılmalıdır. Bu, ikincil düzen için yazılmış alt yordamların, uygun olduğunda uzman programcı tarafından birincil düzene de dâhil edilebileceği anlamına gelir. Tersine, ikincil düzende yer alan paketler, birincil düzene gömülü yordamları otomatik olarak kullanabilir.
Böyle bir karşılıklılık düzenlemesiyle, büyük ölçüde yineleme önlenebilir ve bireysel yordamların uygulanmasına ilişkin kurallar önemli ölçüde basitleştirilebilir.
İki şema tarafından normal olarak gerekli duyulan rutinler aşağıda listelenmiştir ve kütüphane rutinleri olarak anılacaktır. Tek adresli komutlara ve indeks yazmaçlarına sahip bilgisayarlar için bu rutinlerin yaklaşık 8.000 ila 10.000 komut içereceği tahmin edilmektedir. Kütüphane rutinlerinin bilgisayarın içinde kalıcı olarak ya da seçimlerin kolaylıkla yapılabildiği ve eklenebildiği bir birimde saklanması önerilmektedir.
Nesne programının girişi sırasında, kütüphane rutinleri ana programın çevrilmiş sürümüne dâhil edilir. Diğer kütüphane rutinleri ise bu çeviriyi ve nihai programın montajını gerçekleştirmek için kullanılır.
Ortak Organizasyon Şeması
Bu şema, giriş ve montaj sırasında ev idaresi olanaklarının nesne programının içine yerleştirilmesini düzenler. Bu olanaklar program çalıştırıldığında devreye girer. Genel organizasyon planıyla tutarlıdırlar ve nesne programının bilgisayar ayrıntılarına mümkün olduğunca az dikkat edilerek yazılmasına imkân verirler. Bu tür olanaklar genellikle şunları içerir:
- Belirli kütüphane rutinleri ve veriler için çalışma belleğinde konum bloklarının ayrılması. Bu konumların derleme veya nesne programının yürütülmesi sırasında üzerine yazılmaması için düzenlemeler yapılır.
- İç belleklerin çeşitli bölümleri arasında, denetimle birlikte, veri bloklarının aktarılması.
- Kapalı alt rutinleri çevirmek için bağlantı dizileri; yani denetimi nesne programında belirli bir noktaya geri döndüren rutinler.
- Açık alt rutinlerin dâhil edilmesi; yani nesne programının iki komutu arasına bütünüyle yerleştirilecek rutinler.
- Hem açık hem de kapalı alt rutinlerin yer değiştirilmesi; böylece çalışma belleğinin belirtilen herhangi bir bölümünde çalışabilmelerinin sağlanması.
- Belirli sayıda kez ya da belirli bir koşul sağlanıncaya kadar döngü oluşturulması.
- Gecikme hattı veya tambur tipi depolamaya erişim sağlamak için gerekli olduğunda en uygun programlama.
- Üretim çalışmalarının kesintiye uğraması ve kurtarılması için başlatma düzenlemeleri.
- Muhtemelen tek tek makine çalışmalarının otomatik olarak kaydedilmesi.
Ortak organizasyon şeması ayrıca giriş yordamlarını durdurmak ve denetimi belirtilmiş bir adrese göndererek hesabı başlatmak için bazı basit araçlar da sağlamalıdır.
Birincil Şema
Az önce listelenen olanaklara ek olarak, birincil şema daha ileri kaynaklardan yararlanabilmelidir. Bunlar şunları içerir:
- Sembolik adresleri tanıma ve ele alma sistemi. Gerçek bir adres yerine bir anımsatıcı kullanılması, kodun ilk yazımını ve daha sonra düzeltmelerin veya varyasyonların eklenmesini basitleştirir.
- Sayıların bir sayısal gösterimden diğerine dönüştürülmesi için bir dizi dönüşüm rutini. Bunların giriş, yürütme veya çıkış sırasında devreye girmesi gerekebilir.
- Bir komutun işlev basamaklarını bir anımsatıcı kodla göstermek çoğu zaman kullanışlıdır. Bu koddan makine koduna dönüşümü yapan olanaklar da birincil şemaya dâhil edilir.
Birincil şemanın tanımını tamamlayan tüm bireysel işlemler şimdi kümeler hâlinde listelenmiştir.
Küme A: Temel Aritmetik İşlemler
Bilgisayar, komut kodu aracılığıyla, genellikle hem sabit noktalı hem de kayan noktalı sayılar üzerinde aşağıdaki işlemlerin yürütülmesini sağlar:
- Toplama
- Çıkarma
- Çarpma
- Bölme
- İşaret değiştirme
- Standartlaştırma
- Modül ile karşılaştırma
Küme B: Ev İdaresi Komutları
Benzer şekilde, bilgisayar muhtemelen şu komutları sağlar:
- Akümülatör, indeks yazmaçları, çarpan yazmacı vb. gibi özel yazmaçlardan yararlanmak
- Denetim aktarımı yapmak (koşulsuz, akümülatöre bağlı koşullu veya indeks yazmacına bağlı koşullu)
- Mantık işlemleri yapmak (ve, veya, eşdeğer değil vb.)
- Durdurmak
- İşlem yapmamak
Turing Makineleri üzerine yapılan çalışmalarla bağlantılı olarak, evrensel bir bilgisayarın komut kodunda uygun şekilde seçilmiş yalnızca üç komutun gerekli olduğu belirtilmiştir. Donanım tarafından sağlanmıyorlarsa, az önce anılan işlemler bunlar cinsinden programlanabilir.
Gerekirse kütüphane programı tarafından sağlanması gereken diğer işlevler şunlardır:
Küme C: Matematiksel Fonksiyonlar
- Üstel fonksiyonlar
- Doğal ve 10 tabanlı logaritmalar
- İntegral kökler (karekök dâhil)
- Trigonometrik fonksiyonlar ve tersleri (özellikle sin, cos ve arctan)
- Daha yüksek matematiksel fonksiyonlar (Bessel, Lagrange, Tchebyscheff vb.)
hem sabit noktalı hem de kayan noktalı biçimdeki sayılar için.
Küme D: Karmaşık Matematiksel İşlemler
Birincil sistem ayrıca, muhtemelen yalnızca sabit noktalı sayılar üzerinde olmak üzere, aşağıdaki işlemleri gerçekleştiren rutinler de içerebilir:
- Enterpolasyon (değişken mertebeli)
- Ters enterpolasyon
- Türev alma
- Fourier analizi
- Bir polinomun gerçek ve sanal köklerinin aranması
- (f(x) = 0) denkleminin gerçek köklerinin aranması
- n değişkenli bir fonksiyonun minimizasyonu
- (f(x)) fonksiyonunun sabit bir aralıkta integrasyonu; burada (f(x)) ya tablolaştırılmıştır ya da adım adım üretilmiştir
- Doğrusal cebirsel denklemlerin çözümü
- Birinci mertebeden adi diferansiyel denklemlerden oluşan bir kümenin adımlı integrasyonu
- Monte Carlo süreçlerinde kullanılmak üzere çok büyük bir rastgele sayı kümesinin üretilmesi
Küme E: Denetim Rutinleri
Son olarak, birincil şema kapsamlı bir kod denetleme ya da hata ayıklama rutinleri kümesi sağlamalıdır. Denetlenecek kod ve eldeki özel uygulama için gerekli komutlar, giriş sırasında mümkün olduğunca otomatik olarak sağlanmalıdır. Bu nedenle denetim rutinlerinin çalışma biçimi temel organizasyon şemasıyla tutarlı olmalıdır. Aşağıdaki gibi çalışacak rutinler önerilmektedir:
1. Giriş sırasında
Hem veriye hem de komutlara eklenmiş toplamlar, girişin hatasız gerçekleştiğinden emin olmak için yeni hesaplanan toplamlarla karşılaştırılmalıdır. Toplamlar önceden elle hesaplanıp eklenebilir ya da yeniden giriş için çıkış sırasında makine tarafından hesaplanıp eklenebilir. Kullanımdaki tüm sayısal sistemler için ortak olacak şekilde, herhangi bir gösterim ölçeği kullanılabilir.
2. Bir programın yürütülmesi sırasında
(a) Denetimin izlediği yolu takip etmek için denetim olanakları mevcut olmalıdır. Bu, üç yoldan biriyle yapılabilir:
- Programda önceden belirlenmiş noktalar arasında yürütülen her komutun işlev basamaklarının çıktıya verilmesi.
- Önceden belirlenmiş bir dizi arama adresinde ilgili bilgilerin çıktıya verilmesi.
- Yalnızca atlama komutlarında ve hesabın belirli bir noktasından sonra ilgili bilgilerin çıktıya verilmesi.
Bu üç rutin kümesi için, tüm gösterim ölçekleri için ortak bir çıktı biçimi seçilebilmelidir.
(b) Denetim olanakları ayrıca makine hesabını bağımsız bir elle yapılan hesabın sonuçlarıyla karşılaştırmak için de mevcut olmalıdır. Programda önceden ayarlanmış denetim noktalarında ilgili verilerin çıktıya verilmesi için düzenlemeler yapılmalı ve döngüler içindeki belirli çevrimler sırasında bu tür çıktının bastırılmasına imkân tanınmalıdır.
Her denetim noktasında aşağıdakilerin çıktısı alınabilmelidir:
- Her biri standart bir gösterim ölçeğinde olmak üzere, sabit bir yazmaç kümesinin (akümülatör, indeks yazmaçları vb.) içerikleri.
- Yalnızca belirli yazmaçların içerikleri; her biri belirli bir sayısal ölçekte.
Yönlendirme verileri programdan sonra girilmelidir. İstenen sayısal ölçeği belirtmek üzere adres ve kod harflerinden oluşan çiftlerin listelerini içermelidir; her denetim noktasına karşılık bir liste olacak şekilde ve listeler, denetim noktalarının karşılaşıldığı sırayla girilmelidir.
3. Bir programın ölümcül biçimde sonlanması durumunda
Denetim rutinleri ölüm sonrası inceleme biçiminde çalışabilmelidir. Bunlar şunları içerebilir:
- Veri ya da komut bloklarında planlanmamış değişiklikleri denetlemek için bir sayım tipi rutin
- Bu tür değişiklikleri aramak ve çıktıya vermek için bir karşılaştırma tipi rutin
- 2(b)(ii)’nin özel bir durumu olarak çalışan bir rutin
4. Çıkış sırasında
Giriş sırasında kullanılanlarla tutarlı toplamlar üretilmeli, eklenmeli ve derhal yeniden giriş yoluyla denetlenmelidir.
İkincil Şema
Bu, yukarıda belirtildiği gibi, ortak organizasyon şemasından yararlanan rutin paketlerinden oluşur. Küme B komutları burada da kullanılabilir. Bu şemaya dâhil edilen paketler şimdi listelenecek ve bireysel bileşenler belirtilecektir.
1. Çift Uzunluklu Aritmetik
Bazı uygulamalar için, ölçekleme özel bir sorun oluşturmamakla birlikte, çok sayıda anlamlı basamağın korunması önemlidir. Bu durumda her sabit noktalı sayının saklanması için bitişik iki sözcük kullanılabilir. Birincil şemadakine benzer, ancak adres başına iki bitişik sözcük ayıran sembolik adresleri yorumlayan bir rutin sağlanmalıdır.
Bu sayıların giriş ve çıkışını ele alan dönüşüm rutinleri ve yukarıdaki Küme A altında listelenen işlemleri gerçekleştirmek için sözde kodları yorumlayan rutinler bulunmalıdır. Küme C fonksiyonlarını değerlendirmek ve muhtemelen Küme D işlemlerinden bazılarını gerçekleştirmek için de alt rutinler gereklidir. Küme E, tür 2(b)(ii) için çift uzunluklu işlemlerin denetlenmesine yönelik düzenleme kolaylıkla yapılabilir. Küme E’nin diğer tüm denetim rutinleri olduğu gibi uygulanabilir.
2. Yüksek Hassasiyetli Aritmetik
Çift uzunluklu aritmetik için geliştirilen fikirler çoklu uzunluklu sayıları ele alacak şekilde genişletilebilir. Bu durumda her sayıyı saklamak için üç ya da daha fazla bitişik sözcük kullanılır. Bu tür uygulamalar oldukça özeldir; örneğin (\pi) ve e gibi irrasyonel sayıların değerlendirilmesinde ortaya çıkar.
3. Kayan Noktalı Aritmetik
Kayan noktalı sayılar üzerinde işlem yapacak donanımı sağlamayan bilgisayarlar için, bunu gerçekleştiren bir paket sağlanmalıdır. Sayı başına bir ya da iki sözcük kullanılabilir. Böylece (\pm a \times 10^{\pm b}) ifadesi, bir bölümünde (\pm a)’yı, kalanında (\pm b)’yi saklayan tek bir sözcükle temsil edilebilir. Alternatif olarak, bu sayı bitişik iki sözcükle temsil edilebilir; biri (\pm a)’yı, diğeri (\pm b)’yi saklar.
Her iki durumda da, sembolik adresleri yorumlamak için daha önce yazılmış rutinlerden biri uygulanabilir. Giriş ve çıkış dönüşüm rutinleri gereklidir; elle işlenmesi gereken veriler için kullanımı uygun olan tek ölçeğin ondalık ölçek olduğu unutulmamalıdır. Küme A, C ve D işlemlerini gerçekleştiren rutinler sağlanmalıdır. Denetim rutinleriyle ilgili notlar, çift uzunluklu aritmetik için olanlarla aynıdır.
4. Yüksek Hassasiyetli Kayan Noktalı Aritmetik
Kayan noktalı işlemleri sağlayan bilgisayarlar için bile, yüksek doğruluğun yanı sıra geniş bir büyüklük aralığının korunması gerekebilir. Burada depolanan sayı başına iki, hatta üç sözcük gereklidir. Küme A, C ve D’de listelenen işlevler için olduğu kadar giriş ve çıkış için de özel rutinler yazılmalıdır.
5. Karmaşık Aritmetik
N = a + ib sayısının temsil edilmesi için çeşitli olanaklar vardır. Bunlar, sabit ya da kayan nokta, tek ya da çoklu hassasiyetli temsil seçimine bağlı olarak şekillenir. Bu nedenle bu başlık altında birden fazla paket gerekebilir. Kullanılacak sembolik adres yorumlama rutini, her karmaşık sayıyı saklamak için gereken sözcük sayısına bağlıdır.
Giriş-çıkış dönüşüm rutinleri de kesin temsile bağlıdır. Karmaşık sayılar üzerinde aşağıdaki işlemleri gerçekleştirmek üzere sözde kodları yorumlayan rutinler sağlanmalıdır:
- Toplama
- Çıkarma
- Çarpma
- Bölme
- Modülün karesi
- Karmaşık eşlenik
- Modülün asal değeri
- a + ib ile reθ arasında dönüşüm
Küme C ve D işlemleri uygulanmaz; ancak 2 b (ii) kapsamında uygun düzenleme yapıldığında Küme E’nin tüm denetim rutinleri uygulanabilir.
6. Matris Cebiri
Bir dizi matris işlemini yorumlayıp yerine getiren bir derleyicinin geliştirilmesi önerilir. Matrislerin adreslenmesinde kullanılan kural, mevcut iç depolamaya büyük ölçüde bağlı olacaktır.
Sözde kodlar şunları içermelidir:
- Toplamla birlikte matris A’nın girişi
- Toplamla birlikte matris B’nin çıkışı
- Toplama (A + B)
- Çıkarma (A − B)
- Çarpma (A × B)
- Ters alma (A⁻¹)
- Transpoz (Aᵀ)
- Transpoz ekleme (A + Bᵀ)
- Transpoz çarpımı (A Aᵀ)
- Transpoz çarpımı (A Bᵀ)
- Skalerle çarpma (aA)
- Skalerlerle doğrusal kombinasyon (aA + bB)
- Satır genişletme (A, B)
- Sütun genişletme (A / B)
- A = |A₁, A₂| biçiminde bölümlendirme; yani A kare iken A₁ ve A₂’nin ayrılması
- Simetrik bir matrisin özdeğerlerinin ve özvektörlerinin bulunması
7. İstatistik
Oldukça fazla sayıda rutin içeren bir paket burada yararlı olacaktır. Şunları içermelidir:
- En küçük kareler
- Otokorelasyon
- Ki-kare
- Çarpım-moment korelasyonları
- Varyanslar ve kovaryanslar
- Ortalamalar ve standart sapmalar
- Çoklu regresyon analizi
Toplumda Bilgisayarların Felsefesi ve Bilgisayar İnsanlarının Toplumdaki Sorumluluğu
Sayfa 9’dan devam
Toplumda Bilgisayarların Felsefesi ve Sorumluluğu
Başkan: R. W. Tyler, Center for Advanced Study in the Behavioral Sciences, Stanford University
Muhasebe ve matematik bilimleri dışındaki görevler için hesaplama sistemlerinin kullanımına yönelik eğilim, mühendislerimizin birçoğunu bilim insanları olarak sorumluluklarının daha geniş felsefi yönlerini düşünmeye yöneltmiştir. Bazı geleneksel sorunların, modern teknikler uygulanırsa daha etkili biçimde ele alınabileceği öne sürülmektedir.
Mühendislerin Toplumsal Sorumluluğu
Konuşmacı: F. Wood, IBM
Bilgisayar bilimcilerinin toplumsal sorumluluğu ve otomasyonun toplumsal sorunları üzerine yakın tarihli bazı makaleler gözden geçirilmektedir. Erken dönem sosyologların çalışmalarından türetilen bir bilimler sınıflandırması, mühendis için basit bir yol haritası geliştirmede kullanılmaktadır. Bu sınıflandırma tablosu, mühendislerin çalışmalarına ilişkin toplumsal sorunların ne ölçüde ele alındığını belirlemelerinde kullanılmak üzere bir “denetim çizelgesi”ne dönüştürülmektedir.
Bu durum, ortalama bir mühendisin yükümlülük olarak üstlenmesini daha kolay kıldığına inanılan sınırlı bir toplumsal sorumluluk kavramına götürür. Buna göre mühendisin toplumsal sorumluluğu, fiziksel mühendislik çalışmalarıyla ilişkili toplumsal sorunların incelendiğinden emin olmak ve toplumumuz tarafından demokrasimizdeki seçmenlere bilimin temel ilkeleri ve önemi hakkında açıklamalar yapılmasını koordine etmek ya da yönlendirmekten ibarettir.
Amerika Birleşik Devletleri Başkanının Acil Durum Simülasyonu
Konuşmacı: I. Sutro, Massachusetts Institute of Technology
Bu bildiri, ulusun varlığına yönelik bir tehdide Başkanın yanıt vermesi için zamanın kalmayabileceği günlerin gerçekten yaklaşmakta olduğunu ileri sürmektedir. Nitekim, bir saldırıya yanıt vermek üzere otomatik aygıtların kullanılmasına doğru bir eğilim olduğu görülmektedir. Bu çalışma, insanlığın başka bir kesimine karşı nükleer bir silahın ateşlenmesinin, ancak mümkün olan en büyük ölçüde dikkatli değerlendirmeden sonra alınması gereken bir eylem olduğunu savunmaktadır.
Sonuç
Bu iki düzeyli kodlama sistemi, genişletilebilir olacak şekilde düzenlenmiştir. Özellikle, her biri belirli bir problem sınıfıyla başa çıkmak üzere özel amaçlı paketler eklenebilir ve bu, kütüphanenin çerçevesini bozmadan yapılabilir. Lojistik, devre tasarımı, doğrusal programlama ve benzeri alanların özel gereksinimleri böylece karşılanabilir. Böyle iki düzeyli bir sistem, açık atölye esasına göre çalışan üniversite kurumlarının çoğuna uyarlanabilir.
Böyle bir kütüphaneyi hazırlamak için uzman programcılardan oluşan bir çekirdek kadro ile, çok sayıda öğrenci ve araştırmacı merkezi bilgisayardan tam anlamıyla yararlanabilir.
Eğer bu değerlendirme saniyeler hatta mikrosaniyeler içinde gerçekleşmek zorundaysa, o halde bu saniyeleri ya da mikrosaniyeleri en iyi biçimde kullanacak bilgisayarı ve programını planlamaya şimdi başlamalıyız.