S-algol - S-algol

S-algol
Paradigmalar Çok paradigma : prosedürel , zorunlu , yapılandırılmış
Aile Algol
Tarafından tasarlandı Ron Morrison , Tony Davie
Geliştirici St Andrews Üniversitesi
İlk ortaya çıktı 1979 ; 42 yıl önce  ( 1979 )
Uygulama dili S-algol
Platform PDP-11 /40, IBM System / 360 , VAX , Zilog Z80 , Macintosh , Sun-3
işletim sistemi Unix , BOS / 360 , VMS , CP / M
Tarafından etkilenmiş
ALGOL 60
Etkilenen
PS-algol , Napier88

S-algol (St Andrews Algol), 1979'da St Andrews Üniversitesi'nde Ron Morrison ve Tony Davie tarafından geliştirilen ALGOL 60'ın bir bilgisayar programlama dili türevidir . Dil, ALGOL'un Morrison'un doktora tezi için oluşturduğu ortogonal veri türlerini içerecek bir modifikasyonudur . Morrison üniversitede profesör ve bilgisayar bilimi bölümü başkanı olmaya devam edecekti . S-algol dili, 1999 yılına kadar üniversitede lisans düzeyinde öğretim için kullanıldı . Aynı zamanda, 1980'lerde St. Andrews, Madras Koleji'ndeki yerel bir okulda birkaç yıl öğretilen dildi . Bilgisayar bilimleri metin Recursive İniş Derleme bir anlatır özyinelemeli iniş derleyici S-ALGOL uygulanan S-ALGOL için.

PS-algol , S-algol'ün kalıcı bir türevidir. 1981 civarında Edinburgh Üniversitesi ve St Andrews'da geliştirildi. PS-algol programlarının sonlandırılmasından sonra ayakta kalan kalıcı bir yığın biçiminde verilerin uzun ömürlü olmasını sağlayarak veritabanı yeteneğini destekler .

Tarih ve uygulamalar

Ron Morrison'un 1979 tarihli Algol Geliştirme üzerine doktora tezi, S-algol dilinin tasarımını ve uygulamasını açıklar. Dili tanımlayan teknik rapor, The S-algol Reference Manual (1979, 1988), 1975 civarında dil tasarımı üzerine tartışmalar için David Turner da dahil olmak üzere birçok kişiye yardımları için teşekkür eder . 1981 bilgisayar bilimleri metni Recursive Descent Compiling , derleyicinin uygulamasını ve önyükleme süreci ve S-algol ile Programlamaya Giriş 1982 kitabı , bilgisayar programlamayı öğretmek için dili kullanır.

İlk S-algol uygulaması, Unix işletim sistemini çalıştıran bir PDP-11 /40 bilgisayarda yapıldı . PDP-11'de bulunan 64 kilobaytlık küçük adres alanı nedeniyle , yorumlanan bir bayt kodu uygulaması seçildi. Bir tek geçişli , yinelemeli iniş derleyici S ALGOL yazılmış S-kodu, bir bayt s-algol kaynağı tercüme yığın tabanlı arka makinesi S-ALGOL için uyarlanmış. S-kodu daha sonra bir yorumlayıcı tarafından çalıştırıldı . S-algol uygulaması, önceki Pascal derleyicilerinde yapılan çalışmalarla pek çok benzerliğe sahipti . Soyut bir makine için kod üretmek için özyinelemeli bir iniş derleyicisi kullanma tekniği iyi biliniyordu, Pascal P derleyicisi 1970'lerin başlarından ünlü bir örnekti. S-algol derleyici, bir Pascal derleyicisinin geliştirilmesi için Urs Amman tarafından açıklanan ve Pascal'ın mucidi Niklaus Wirth tarafından savunulan aşamalı iyileştirme süreci kullanılarak yazılmıştır .

PDP-11'in bellek organizasyonunu 32K 16-bit kelime olarak yansıtan S-kodu komut kodlaması, her bayt kodu bir kelimeden oluşacak şekilde tasarlandı. İlk önyükleme , S-kodu üreten IBM / 360 üzerinde Algol W'de bir S-algol derleyicisi yazarak ve S-algol ile yazılan derleyiciyi S-koduna derlemek için kullanılarak gerçekleştirildi. 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ü, bu da onu kendi kendine barındırdı . Kendi kendine barındırılan S-algol derleyici, 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.

VMS çalıştıran VAX bilgisayarı için bir S-kodu yorumlayıcı yazıldı ve bu , VAX'i ilk S-algol bağlantı noktası yaptı . S-algol ayrıca , dile eklenen raster grafik olanakları da dahil olmak üzere CP / M çalıştıran Zilog Z80 mikroişlemciye taşındı . 1983'te S-algol, kalıcılık araştırması için kullanılan PS-algol sisteminin temeli olarak kullanıldı . PS-algol S-kodu yorumlayıcısı C'de uygulandı ve S-kod dili raster grafikleri içerecek şekilde genişletildi. PS-algol uygulama S-algol portlar için temel oluşturduğunu Macintosh ve güneş iş istasyonları içinde yeniden yazılmış bir derleyici içeren, C ve genişletilmiş S-kodu hedeflemesi.

S-algol, 1983'teki PS-algol araştırmasının temelini oluşturdu ve birkaç yıl sonra PS-algol, Napier88 dili ve uygulaması için başlangıç ​​noktası oldu . Tüm S-algol derleyicileri yorumlanacak S-kodu üretirken, daha sonraki bir Napier88 uygulaması C'de kod üretmeyi ve yerel bir kod uygulaması sağlamak için bunu gcc derleyicisiyle derlemeyi denedi .

Dile genel bakış

Bir S-algol programı, bir bildirimler ve cümlecikler dizisidir. Bildirilen dil unsurları 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, mantıksal, dize, işaretçi (bir yapıya) ve dosya ve bu türlerin vektörleri (dizileri) 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.

! Comments are introduced by an exclamation point and continue until end of line.

! The let keyword introduces declarations of constants and variables
! Identifiers start with an alphabetic character followed by alphanumeric characters or the full stop (.)
! An initial value must be given, and this determines the data type of declaration

let width := 10                   ! := sets the value of a variable, this is an int
let animal := "dog"               ! type string

let x := -7 ; let y := x + x      ! ; separates clauses, needed only if there are two or more clauses on a line

let n.a = 6.022e+23               ! = is used to set the value of a constant, this is a cfloat (constant float)

! if and case can have values and be used in expressions
let no.of.lives := if animal = "cat" then 9 else 1

! Sieve of Eratosthenes
write "Find primes up to n = ?"
let n = readi                     ! constant values can be set during the program run
let p = vector 2::n of true       ! vector of bool with bounds 2 to n
for i = 2 to truncate(sqrt(n)) do ! for indexes are constants so they use = rather than :=
    if p(i) do                    ! vector dereference uses parens like a procedure call
        for j = 2 * i to n by i do
            p(j) := false
for i = 2 to n do
    if p(i) do write i, "'n"      ! 'n in a literal string is a newline

! structure (record) type for a binary tree of cstrings
! the pntr data type can point to a structure of any type, type checking is done at runtime
structure tree.node(cstring name ; pntr left, right)

! inserts a new string into the binary tree head
procedure insert.tree(cpntr head ; cstring new -> pntr)
! the case clause ends with a mandatory default option, use default : {} if it is not needed
case true of
    head = nil       : tree.node(new, nil, nil)
    new < head(name) : { head(left) := insert.tree(head(left), new) ; head }
    new > head(name) : { head(right) := insert.tree(head(right), new) ; head }
    default          : head

procedure print.tree(cpntr head)
if head ~= nil do                 ! ~= is the not equals operator
begin
    print.tree(head(left))
    write head(name), "'n"
    print.tree(head(right))
end

let fruit := nil
fruit := insert.tree(fruit, "banana")
fruit := insert.tree(fruit, "kiwi")
fruit := insert.tree(fruit, "apple")
fruit := insert.tree(fruit, "peach")
print.tree(fruit)                 ! print in sorted order

! The end of the S-algol program is indicated by ?
?

Anlamsal ilkeler

Adından da anlaşılacağı gibi S-algol, ALGOL programlama dilleri ailesinin bir üyesidir . Morrison, ALGOL ailesinin beş özelliğini tanımlar:

  1. Kapsam kuralları ve blok yapısı - Adlar, yerel ortamın dışında tanımlanmamış yerel miktarları tanımlamak için tanıtılabilir , ancak farklı ortamlar, farklı nesneleri temsil etmek için aynı adı açık bir şekilde kullanabilir.
  2. Soyutlama olanağı - Programları kısaltmak ve açıklığa kavuşturmak için güçlü bir soyutlama olanağının sağlanması. ALGOL ailesinde bu tarafından sunulan prosedürler ile parametreler .
  3. Derleme zamanı tür denetimi - Türler , programın statik analizi ile kontrol edilebilir .
  4. Sonsuz depo - Programcı, depolama tahsisinden sorumlu değildir ve gerektiği kadar çok veri nesnesi oluşturabilir.
  5. Seçici mağaza güncellemesi - Program, mağazayı seçmeli olarak değiştirebilir. ALGOL ailesinde bu, atama ifadesinden etkilenir .

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. (Bkz. Ortogonal .) Morrison, S-algol 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 RD Tennent tarafından Pascal ile birlikte incelenmiştir ve kökleri Peter Landin ve Christopher Strachey tarafından çalışmaktadır .
  2. Soyutlama ilkesi - Dildeki tüm anlamlı anlamsal kategoriler üzerinde soyutlama yapmak mümkün olmalıdır . Örnekler üzerinde sanalıdır fonksiyonu içerir ifadeler ve prosedür, üzerinde bir soyutlama tablolar . Tennent ve Morrison, bunun uygulanması zor bir ilke olduğunu çünkü soyutlanması gereken anlamsal olarak anlamlı yapıları belirlemenin zor olduğunu belirtiyorlar.
  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. ( Birinci sınıf vatandaşa bakın .)

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

  1. Kavramsal depo - Depo ( bellek yönetimi ) ile ilgili temel tasarım kararları, deponun nasıl kullanıldığını, veri türleriyle ilişkisini, işaretçilerin uygulanmasını ve korumayı ( güncellenemeyen sabit konumlar) içerir.

Tasarım (değiştir | kaynağı değiştir)

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

Veri tipleri

S-algol'daki temel veya ilkel veri türleri tamsayı, gerçek, boole, dosya ve dizedir. (Daha sonra piksel ve resim türleri, raster grafikleri desteklemek için eklendi .) Tam sayı , gerçek ve boole , çoğu programlama dilinde ortak olan türlerdir. Dosya türü, veri nesnelerinin yazılmasına veya okunmasına izin veren bir giriş / çıkış (G / Ç) akışıdır . Dize türü o zaman çok dilde bir kabul edildi bileşik tipi , ancak yerel bir türü olarak da dahil olmak üzere seçimi, uzunluğu alt dize, birleştirmek temel işlemleri yapar ve karşılaştırmalar (eşittir, daha az vb yerine) kullanılması daha kolay. Pascal'da kullanılan karakter dizilerinden çok daha hoş.

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 ancak dinamik olarak belirlenir ve çok boyutlu diziler, vektörlerin vektörleri olarak uygulanır .

Yapı veri türü alanları sabit bir tip her bir sabit sayıda içerir. Bir yapının sınıfı, türün bir parçası değildir, ancak dinamik olarak belirlenebilir.

Kapatma vektörleri ve yapıları temel tip veri türleri sonsuz sayıda içerir. Dil tanımı, herhangi bir türün kabul edilebilir olduğu her yerde kullanılmasına izin verir. Bu, ortak işlevler için sözdizimsel şeker olduklarından ve anlamsal modelin parçası olmadıklarından, infix operatörleri için geçerli değildir.

Mağaza

Vektörler ve yapılar tam haklara sahiptir ve parametreler olarak atanabilir, ancak atamada ve geçirildiğ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 olarak genel nesneler kendilerini ALGOL 68 ve C için endişelerini S-ALGOL reddedilen ARAÇ Hoare ilgili boş gösterici ile ilgili sorunlar sarkan işaretçiler .

S-algol, değeri güncellenemeyen nesneler olan gerçek sabit değerleri sağlar . 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.

Kontrol Yapıları

S-algol, ifade odaklı bir dildir ve ifadeler , boşluk türünün ifadeleridir . Sonuç olarak, bazı kontrol yapıları değer veren ifadelerdir .

Birkaç koşullu yapı vardır . Koşulun iki alternatifli versiyonu if <condition> then <clause> else <clause> , cümleciklerin ifadeler veya ifadeler olabileceği durumdur . İfadeler ise, aynı türe sahip olmaları gerekir. Tek kollu koşullu if <condition> do <statement> , tip geçersizdir. Kullanımı do yerine else koşullu açıklamada önler sarkan başka sözdizimsel belirsizliği.

case Fıkra seçilen maddesini bulmak için aynı türde ifadeler karşı bir eşitlik testi kullanılarak eşleştirilir herhangi türde bir seçici vardır. Case cümlesi bir ifade veya ifade olabilir, bu nedenle sonuç cümlelerinin tümü ifadeler (tip void) veya aynı türden ifadeler olmalıdır. Bu benzer yüzden Maçlar, sırayla test edilir korunan komutları arasında Edsgar Dijkstra'nın olmadan olmayan determinizm .

Döngü ifadeleri çoğunlukla gelenekseldir. for Döngü Hoare 'dekine benzer. Kontrol tanımlayıcı sabittir ve döngü içinde değiştirilemez. Ayrıca geleneksel olan while <condition> do <statement> ve repeat <statement> while <condition> döngüleridir. repeat <statement> while <condition> do <statement> Yapı, erken bir çıkış veya "N-ve-bir buçuk" döngü içerir.

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 kullanılır netice , bunlardan genellemeler olacağını sıralayıcıları üzerinde soyutlama için Goto ve aradan . Bu kategorideki en iyi bilinen soyutlama güncel devamla çağrıdır , ancak birkaç yıl sonrasına kadar tam olarak anlaşılmayacaktır. S-algol, goto veya break içermez ve sıralayıcılar üzerinden soyutlamayı içermez.

Beyanlar ve parametreler

S-algol'daki her veri nesnesine, bildirildiğinde bir değer verilmelidir. Bu , değer parametresi geçişine göre çağrıya karşılık gelir 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'un l-değerlerini geçirme yasağıyla tutarlıdır . Yapılar ve vektörler nesnelere işaretçiler 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.

Her bildirimin parametrik bir eşdeğeri vardır. Tüm prosedür parametresi türleri belirtilmelidir. Parametre olarak geçirilen herhangi bir prosedürün tam tipi belirtilmiştir (Pascal'ın tersine) ve aynı şey bir yapı sınıfı için de geçerlidir.

Girdi çıktı modeli

S-Algol sağlar file I / O akımları ve çeşitli varyasyonlar için veri tipi read ve write temel tipleri üzerinde çalışmaları gereken tanımlanır. Bireysel uygulamaların gerektiğinde bu basit olanakları genişletmesi beklenmektedir.

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. 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 belirtilmesi gerekmez.

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.

Ç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.

Ayrıca bakınız

Referanslar

Dış bağlantılar