S-algol - S-algol

S-algol
ParadigmalarÇoklu paradigma: prosedürel, zorunlu, yapılandırılmış
AileAlgol
Tarafından tasarlandıRon Morrison Tony Davie
GeliştiriciSt Andrews Üniversitesi
İlk ortaya çıktı1979; 41 yıl önce (1979)
Uygulama diliS-algol
PlatformPDP-11 /40, IBM System / 360, VAX, Zilog Z80, Macintosh, Güneş-3
işletim sistemiUnix, BOS / 360, VMS, CP / M
Tarafından etkilenmiş
ALGOL 60
Etkilenen
PS-algol, Napier88

S-algol (St Andrews Algol)[1]:vii bir bilgisayar Programlama dili türevi ALGOL 60 geliştirildi St Andrews Üniversitesi 1979'da Ron Morrison ve Tony Davie. Dil, ortogonal içerecek şekilde ALGOL'un bir modifikasyonudur. veri tipleri Morrison doktora tezi için yarattı. Morrison olmaya devam edecekti profesör üniversitede ve bölüm başkanı bilgisayar Bilimi. S-algol dili bir üniversitede öğretim için kullanıldı. lisans Aynı zamanda, 1980'lerde St. Andrews'da yerel bir okulda birkaç yıl boyunca öğretilen dildi. Madras Koleji. Bilgisayar bilimi metni Yinelemeli İniş Derleme[2] bir yinelemeli iniş derleyici S-algol için S-algol'de uygulanmıştır.

PS-algol bir kalici S-algol türevi. 1981 civarında geliştirildi. Edinburgh Üniversitesi ve St Andrews. Destekler veri tabanı kalıcı bir biçimde veri uzun ömürlülüğü sağlayarak yeteneği yığın PS-algol programlarının sona ermesinden sonra hayatta kalır.

Tarih ve uygulamalar

Ron Morrison'un 1979 doktora tezi, Algol'un Gelişimi Üzerine, S-algol dilinin tasarımını ve uygulamasını açıklar.[3] Dili tanımlayan teknik rapor, S-algol Referans Kılavuzu (1979, 1988), yardımları için birkaç kişiye teşekkür eder. David Turner 1975 civarında dil tasarımı üzerine tartışmalar için.[4]:5 1981 bilgisayar bilimleri metni Yinelemeli İniş Derleme derleyici uygulamasını ve önyükleme sürecini açıklar,[2] ve 1982 kitabı S-algol ile Programlamaya Giriş dili bilgisayar programlamayı öğretmek için kullanır.[1]

İlk S-algol uygulaması bir PDP-11 / 40 bilgisayarı çalıştıran Unix işletim sistemi.[1]:vii Küçük 64 nedeniyle kilobayt adres alanı PDP-11'de mevcut, yorumlanmış bayt kodu uygulama seçildi.[3]:37–38 Bir tek geçiş, yinelemeli iniş derleyicisi S-algol ile yazılmış S-algol kaynağını S-koduna, bir bayt kodu için bir yığın tabanlı soyut makine S-algol için tasarlandı. S-kodu daha sonra bir çevirmen. S-algol uygulamasının önceki çalışmalarla birçok benzerliği vardı Pascal derleyiciler. Soyut bir makine için kod üretmek için yinelemeli bir iniş derleyicisi kullanma tekniği iyi biliniyordu. Pascal P derleyici 1970'lerin başından ünlü bir örnek.[2]:137 S-algol derleyici, Kademeli arıtma süreç[2]:71 Urs Amman tarafından bir Pascal derleyicisinin geliştirilmesi için tanımlanmıştır[5] ve Pascal'ın mucidi tarafından desteklenmiştir, Niklaus Wirth.[6]

PDP-11'in bellek organizasyonunu 32K 16-bit olarak yansıtıyor kelimeler S-kodu komut kodlaması, her bayt kodu bir kelimeden oluşacak şekilde tasarlandı.[3]:38 İlk önyükleme bir S-algol derleyicisi yazarak yapıldı Algol W üzerinde IBM / 360 S-kodu üretti ve onu S-algol ile yazılan derleyiciyi S-koduna derlemek için kullandı. Elde edilen S-kodu dosyası PDP-11'e kopyalandı ve PDP-11 için yazılmış bir S-kodu yorumlayıcısında yürütüldü. kendi kendine barındırma. Kendi kendine barındırılan S-algol derleyicisi, kendisini derlemek için yaklaşık 7,7 milyon S-kodu talimatı yürüttü ve yaklaşık on bin S-kodu talimatından (16 bit kelime) oluşan bir çıktı dosyası oluşturdu.[3]:45

İçin bir S-kodu yorumlayıcısı yazılmıştır. VAX bilgisayar çalışıyor VMS, VAX'i ilk S-algol yapıyor Liman. S-algol ayrıca Zilog Z80 mikroişlemci çalışıyor CP / M, dahil olmak üzere raster grafikler dile eklenen tesisler. 1983'te S-algol, PS-algol sisteminin temeli olarak kullanıldı ve araştırma için kullanıldı. sebat. PS-algol S-kodu yorumlayıcısı, C ve S-kod dili raster grafikleri içerecek şekilde genişletildi. PS-algol uygulaması, S-algol portlarının temelini oluşturdu. Macintosh ve Sun iş istasyonları, yeniden yazılmış bir derleyiciye sahip C ve genişletilmiş S kodunu hedeflemek.[4]:5

S-algol, 1983'te PS-algol araştırmasının temelini oluşturdu ve birkaç yıl sonra PS-algol, Napier88 dil ve uygulama. Tüm S-algol derleyicileri yorumlanacak S-kodu üretirken, daha sonraki bir Napier88 uygulaması C'de kod üretmeyi ve onu gcc derleyicisi sağlamak için yerel kod uygulama.[7]

Dile genel bakış

Bir S-algol programı, bir bildirimler ve cümlecikler dizisidir. Bildirilen dil öğeleri sabitleri, değişkenleri, prosedürleri ve yapıları içerir. Sabit ve değişken bildirimler bir başlangıç ​​değeri belirtmelidir. Derleyici, bildirilen sabitin veya değişkenin veri türünü başlangıç ​​değerinin türünden çıkarır, bu nedenle tür açıkça belirtilmez. Veri türleri arasında tamsayı, gerçek, boole, dize, işaretçi (bir yapıya) ve dosya ve bu türlerin vektörleri (diziler) bulunur. Prosedür bildirimleri, bağımsız değişkenlerinin veri türlerini ve dönüş değerini (void olmadıkça) belirtir. Yapılar ayrıca alanlarının veri türlerini de belirtir. Cümleler, ifadeleri ve kontrol yapılarını içerir (if, case, for, while ve again while). If ve case kontrol yapıları değerlere sahip olabilir ve tür uyumluluk kuralları karşılandığı sürece ifadelerde serbestçe kullanılabilir.[4][1]

! Yorumlar ünlem işaretiyle verilir ve satırın sonuna kadar devam eder.! Let anahtar sözcüğü sabitlerin ve değişkenlerin bildirimlerini sunar! Tanımlayıcılar alfabetik bir karakterle başlar ve ardından alfanümerik karakterler veya nokta (.) Gelir! Bir başlangıç ​​değeri verilmelidir ve bu, bildirim genişliği veri tipini belirler: = 10! : = bir değişkenin değerini belirler, bu bir intlet hayvanıdır: = "köpek"! stringlet x: = -7 yazın; hadi y: = x + x! ; cümlecikleri ayırır, yalnızca bir çizgi üzerinde iki veya daha fazla cümle varsa gerekli n.a = 6.022e + 23! = bir sabitin değerini ayarlamak için kullanılır, bu bir cfloattır (sabit kayan nokta)! if ve case değerlere sahip olabilir ve ifade no.of.lives ifadesinde kullanılabilir: = eğer hayvan = "kedi" ise 9 else 1! Eratostheneswrite eleği "n =? 'Ye kadar asal sayıları bulun." N = readi! sabit değerler program akışı sırasında ayarlanabilir p = vektör 2 :: n doğru! 2'den n'ye kadar olan bool vektörü için i = 2 için kısaltma (sqrt (n)) do! için dizinler sabittir, bu nedenle bunlar yerine = kullanırlar: = if p (i) do! vektör dereference, j = 2 * i'den n'ye bir prosedür çağrısı gibi parens kullanır, i do p (j): = falsefor i = 2'den n do eğer p (i) i yazarsa, "'n"! Bir dizgede 'n bir satırsonu! cstrings ikili ağacı için yapı (kayıt) türü! pntr veri türü herhangi bir yapıyı işaret edebilir, tür denetimi runtimestructure tree.node'da yapılır (cstring adı; pntr sol, sağ)! ikili ağaç baş prosedürüne yeni bir dizi ekler insert.tree (cpntr head; cstring new -> pntr)! case cümlesi zorunlu bir varsayılan seçenekle biter, varsayılanı kullanın: {} gerekli değilse, true of head = nil: tree.node (new, nil, nil) new  baş (ad): {baş (sağ): = ekle. ağaç (baş (sağ), yeni); head} varsayılan: headprocedure print.tree (cpntr head) eğer head ~ = nil do! ~ = şuna eşit değildir operatörbegin print.tree (head (sol)) write head (name), "'n" print.tree (head (right)) endlet fruit: = nilfruit: = insert.tree (meyve, "muz ") meyve: = insert.tree (meyve," kivi ") meyve: = insert.tree (meyve," elma ") meyve: = insert.tree (meyve," şeftali ") print.tree (meyve)! sıralı olarak yazdırın! S-algol programının sonu ?? ile gösterilir.

Anlamsal ilkeler

Adından da anlaşılacağı gibi, S-algol, Algol programlama dilleri ailesi. Morrison, ALGOL ailesinin beş özelliğini tanımlar:[3]:5

  1. Kapsam kuralları ve blok yapısı - İsimler dışında tanımsız olan yerel miktarları tanımlamak için girilebilir. yerel Çevre ancak farklı ortamlar, farklı nesneleri temsil etmek için aynı adı açık bir şekilde kullanabilir.[3]:5
  2. Soyutlama tesisi - Programları kısaltmak ve açıklığa kavuşturmak için güçlü bir soyutlama olanağının sağlanması. ALGOL ailesinde bunu sunan prosedürler ile parametreleri.[3]:5
  3. Derleme zamanı tür denetimiTürler tarafından kontrol edilebilir statik analiz programın.[3]:5
  4. Sonsuz mağaza - Programcı, depolama tahsisinden sorumlu değildir ve gerektiği kadar çok veri nesnesi oluşturabilir.[3]:5
  5. Seçici mağaza güncelleme - Program seçime bağlı olarak mağazayı değiştirebilir. ALGOL ailesinde bu, atama deyimi.[3]:6

S-algol, basitlik yoluyla güç ve daha büyük genellik yoluyla basitlik sağlamak için anlamsal ilkelere göre tasarlanarak ALGOL ailesinin önceki üyelerinden farklı olacak şekilde tasarlanmıştır. (Görmek Dikey Morrison, S-algol'un tasarımına rehberlik eden üç anlamsal ilkeyi açıklar:

  1. Yazışma ilkesi - İsimlere ilişkin kurallar tek tip olmalı ve her yerde geçerli olmalıdır. Bu çoğunlukla, tüm parametre geçiş modlarının dikkate alınması dahil olmak üzere, bildirimler ve prosedür parametreleri arasındaki yazışmalar için geçerlidir. Bu ilke, R.D.Tennent tarafından Pascal ile birlikte incelenmiştir.[8] ve kökleri Peter Landin[9] ve Christopher Strachey.[3]:9–10[10]
  2. Soyutlama ilkesi - Mümkün olmalı Öz dildeki tüm anlamlı anlamsal kategoriler üzerinde. Örnekler, bir soyutlama olan işlevi içerir. ifade ve prosedür, üzerinde bir soyutlama ifadeler. Tennent ve Morrison, soyutlanması gereken anlamsal olarak anlamlı yapıları belirlemenin zor olduğu için bunun uygulanması zor bir ilke olduğunu belirtiyorlar.[3]:10
  3. Veri türü tamlığı ilkesi - Tüm veri türleri dilde aynı haklara sahip olmalı ve atama veya parametre olarak geçirilme gibi genel işlemlerde izin verilmelidir.[3]:10 (Görmek birinci sınıf vatandaş.)

Morrison ayrıca bir temel tasarım düşüncesini daha tanımlar:

  1. Kavramsal mağaza - Mağazayla ilgili temel tasarım kararları (hafıza yönetimi ) mağazanın nasıl kullanıldığını, veri türleriyle ilişkisini, işaretçiler ve koruma (sabit güncellenemeyen konumlar).[3]:10–11

Tasarım

Morrison'un tezi, tasarım ilkelerinin S-algol'da nasıl uygulandığını açıklar.

Veri tipleri

Temel veya ilkel veri türleri S-algol'da tamsayı, gerçek, boole, dosya ve dizedir. (Sonra piksel ve resim türleri eklendi raster grafikler.) Tamsayı, gerçek, ve Boole çoğu programlama dilinde ortak olan türlerdir. Dosya türü bir giriş çıkış (G / Ç) Akış veri nesnelerinin yazılmasına veya okunmasına izin veren. dize türü o zamanlar birçok dilde bir bileşik tip, ancak bunu yerel bir tür olarak dahil etmek, birleştirme, alt dize seçimi, uzunluk ve karşılaştırmaların (eşittir, küçüktür vb.) temel işlemlerinin kullanımını kolaylaştırır. Pascal'da kullanılan karakter dizilerinden çok daha hoş.[3]:12

Vektörler her türden bileşen ile sağlanır. Herhangi bir veri türü için T, * T T tipi bileşenlere sahip bir vektörün türüdür. Vektörün sınırları, türünün bir parçası değildir, dinamik olarak belirlenir ve çok boyutlu diziler şu şekilde uygulanır: vektörlerin vektörleri.[3]:12

yapı veri türü her biri sabit türde herhangi bir sabit sayıda alan içerir. Bir yapının sınıfı, türün bir parçası değildir, ancak dinamik olarak belirlenebilir.[3]:12

kapatma vektörler ve yapılar üzerindeki temel türlerin sayısı sonsuz sayıda veri türü sağlar. Dil tanımı, herhangi bir türün kabul edilebilir olduğu her yerde kullanılmasına izin verir. Bu geçerli değildir infix operatörleri ortak işlevler için sözdizimsel şeker olduklarından ve anlamsal modelin parçası olmadıklarından.[3]:12–13

Mağaza

Vektörler ve yapılar tam haklara sahiptir ve parametreler olarak atanabilir, ancak atamada ve geçildiğinde kopyalama büyük nesneler için verimsiz olabilir. Vektörler ve yapılar nesnelere işaretçi olarak kabul edilir ve işaretçiler parametre olarak atanır ve aktarılır. İşaretçiler genel olarak kendileri gibi nesneler ALGOL 68 ve C endişeleri nedeniyle S-algol için reddedildi C.A.R. Hoare hakkında boş işaretçisi[11] ve ile ilgili sorunlar sarkan işaretçiler.[3]:13

S-algol doğru sağlar sabit değerler, değeri güncellenemeyen nesneler. Bu fikir Strachey'den kaynaklanmaktadır, ancak Pascal gibi birçok dildeki sabitler, derleme zamanında işlenen ve korumalı konumlar olarak uygulanmayan açık sabitlerdir. Ayrıca, yalnızca skaler türleri değil, herhangi bir veri türünün sabitini bildirmek mümkün olmalıdır.[3]:13

Kontrol Yapıları

S-algol, ifade odaklı bir dildir ve ifadeler vardır ifade tip geçersiz. Sonuç olarak, bazıları Kontrol Yapıları veren ifadelerdir değerler.

Bir kaç tane var koşullu yapılar. Koşullu ifadenin iki alternatifli versiyonu ise , değilse , cümleciklerin ifadeler veya ifadeler olabileceği durumlarda. İfadeler ise, aynı türe sahip olmaları gerekir. Tek kollu koşullu yaparsa void tipine sahiptir.[3]:13 Kullanımı yapmak onun yerine Başka koşullu ifadede, sarkan başka sözdizimsel belirsizlik.[2]:20

durum cümlesi, seçilen tümceciği bulmak için aynı türdeki ifadelere karşı bir eşitlik testi kullanılarak eşleşen herhangi bir türden bir seçiciye sahiptir. Case cümlesi bir ifade veya ifade olabilir, bu nedenle sonuç cümlelerinin tümü ifadeler (void tipi) veya aynı türden ifadeler olmalıdır. Maçlar sırayla test edilir, bu nedenle bu, korunan komutlar nın-nin Edsgar Dijkstra olmadan belirlenimsizlik.[3]:14

döngü ifadeleri çoğunlukla gelenekseldir. için döngü Hoare'ninkine benzer.[12] Kontrol tanımlayıcı sabittir ve döngü içinde değiştirilemez. Ayrıca geleneksel olanlar yaparken ve ise 'i tekrarlayın döngüler. yaparken 'i tekrarlayın yapı erken çıkış veya "bir buçuk" u sağlar[13] döngü.[3]:14

Soyutlamalar

S-algol, ifadeleri işlevler olarak ve ifadeleri (boşluk ifadeleri) prosedür olarak özetler. Modüller bildirimlerin soyutlamasını sağlar, ancak S-algol, blok yapılı kapsamda ortaya çıkardıkları zorluklar nedeniyle modülleri içermez. Son sözdizimsel kategori sıralayıcı veya kontrol yapısıdır. Tennent terimi kullandı devamı sıralayıcılar üzerindeki soyutlama için bunlar aşağıdaki genellemeler olacaktır: git ve kırmak. Bu kategorideki en iyi bilinen soyutlama devam eden-çağrı ama birkaç yıl sonrasına kadar iyi anlaşılmayacaktı. S-algol, goto veya break içermez ve sıralayıcılar üzerinden soyutlamayı içermez.[3]:14

Beyanlar ve parametreler

S-algol'daki her veri nesnesine, bildirildiğinde bir değer verilmelidir. Bu karşılık gelir değere göre arama parametre geçişi ve başlatılmamış bir değer kullanma olasılığını ortadan kaldırır. Aslında S-algol'da değere göre çağrı, tek parametre geçirme yöntemidir. Referans ve sonuç parametreleri reddedilir, bu da S-algol yasağıyla tutarlıdır. l değerleri. Yapılar ve vektörler nesnelere işaretçi olarak aktarılır, ancak davranış, atamaların sağ tarafında kullanılan değerle aynı olduğundan, bu yine de değere göre çağrılır.[3]:15

Her bildirimin parametrik bir karşılığı vardır. Tüm prosedür parametresi türleri belirtilmelidir. Parametre olarak iletilen herhangi bir prosedürün tam tipi belirtilmiştir (Pascal'ın aksine) ve aynı şey bir yapı sınıfı için de geçerlidir.[3]:15

Girdi çıktı modeli

S-algol, dosya G / Ç akışları için veri türü ve çeşitli okumak ve yazmak temel tipler üzerinde çalışmak üzere tanımlanmıştır. Bireysel uygulamaların bu basit kolaylıkları gerektiği gibi genişletmesi beklenmektedir.[3]:15

Somut sözdizimi

ALGOL dilleri ayrıntılı olduğu için eleştirildi. S-algol, daha az kısıtlayıcı sözdizimi sağlayarak bunu geliştirmeye çalışır.[1]:159 Bu, çoğunlukla bildirim sözdiziminde gösterilir. Değişken bildirimlerinin her zaman bir başlangıç ​​değeri içermesi gerektiğinden, türün açıkça belirtilmesine gerek yoktur.[3]:17

Prosedürün çağrıldığı yeri inceleyerek prosedür parametresini ve dönüş türlerini çıkarmak mümkün olsa da, S-algol parametre ve dönüş türlerinin belirtilmesini gerektirir. Bu pratik bir karardır, çünkü bir prosedürü, çağrılarını incelemeden anlamak mümkün olmalıdır.[3]:17

Çoğu ALGOL, tüm bildirimlerin bir bloktaki ifadelerden önce gelmesini gerektirir. S-algol'da, bildirimler ifadelerle karıştırılabilir çünkü her şey kullanılmadan önce bildirilmelidir ve bir bildirimi atlamaya izin verecek bir yol yoktur.[3]:17

Ayrıca bakınız

Referanslar

  1. ^ a b c d e Cole, A.J .; Morrison, R. (1982), S-algol ile programlamaya giriş, Cambridge University Press, ISBN  978-0-521-25001-6
  2. ^ a b c d e Davie, Antony J. T .; Ronald Morrison (1981), Brian Meek (ed.), Yinelemeli İniş Derleme, Ellis Horwood serileri bilgisayarlarda ve uygulamaları, Chichester, West Sussex: Ellis Horwood, ISBN  978-0-470-27270-1
  3. ^ a b c d e f g h ben j k l m n Ö p q r s t sen v w x y z aa ab AC reklam Morrison, R. (1979). Algol'un Gelişimi Üzerine (Doktora). St. Andrews Üniversitesi. s. 1–70.
  4. ^ a b c Morrison, Ron (1988) [1979], S-algol Dil Referans Kılavuzu (teknoloji raporu CS / 79/1), Fife: University of St Andrews, s. 1–53
  5. ^ Amman, Urs (1972), "Bir derleyicinin gelişimi", Proc. Int. Bilgisayar Sempozyumu, North Holland, s. 93–99
  6. ^ Wirth, Niklaus (Nisan 1971), "Adım adım iyileştirme yoluyla program geliştirme", ACM'nin iletişimi, 14 (4): 221–227, doi:10.1145/362575.362577, hdl:20.500.11850/80846
  7. ^ Bushell, SJ; Dearle, A; Brown, AL; Vaughan, FA (1994), "Kalıcı Sistemlerde Yerel Kod Oluşturma için Derleyici Hedef Dili olarak C'yi Kullanma" (pdf)Atkinson, MP; Maier, D; Benzaken, V (editörler), Proc. 6th International Workshop on Persistent Object Systems (POS6), Tarascon, Fransa, Hesaplamada Atölyeler, Springer-Verlag, s. 164–183
  8. ^ Tennent, R.D. (1977), "Anlamsal ilkelere dayalı dil tasarım yöntemleri", Acta Informatica, 8 (2): 97–112, doi:10.1007 / bf00289243
  9. ^ Landin, P.J. (Mart 1966), "Sonraki 700 programlama dili", ACM'nin iletişimi, 9 (3): 157–164, doi:10.1145/365230.365257
  10. ^ Strachey, C. (1966), "Biçimsel bir semantiğe doğru", Biçimsel dil açıklama dilleri, North-Holland, s. 198–220
  11. ^ Hoare, C.A.R. (1975), "Özyinelemeli veri yapıları", Uluslararası Bilgisayar ve Sistem Bilimleri Dergisi, 4 (2): 105–132, doi:10.1007 / bf00976239
  12. ^ Hoare, C.A.R. (1972), "For ifadesine bir not", BİT, 12 (3): 334–341, doi:10.1007 / bf01932305
  13. ^ Edsgar Dijkstra (1973). İle kişisel iletişim Donald Knuth, Atıf Knuth, D. (1974), "Go İfadeleri ile Yapısal Programlama" (PDF), Bilgi İşlem Anketleri, 6 (4): 261–301, CiteSeerX  10.1.1.103.6084, doi:10.1145/356635.356640, dan arşivlendi orijinal (PDF) 2013-10-23 tarihinde

Dış bağlantılar