ALGOL 68 - ALGOL 68

ALGOL 68
Algol68Revize RaporCover.jpg
Algoritmik Dil Üzerine Gözden Geçirilmiş Rapor – Algol 68 Düzenleyen: A. van Wijngaarden ve diğerleri, Eylül 1973
paradigmalar Çoklu paradigma : eşzamanlı , zorunlu
Aile Algol
Tarafından tasarlandı A. van Wijngaarden , BJ Mailloux , JEL Peck ve CHA Koster , et al.
İlk ortaya çıktı Nihai Rapor: 1968 ; 53 yıl önce r0 ( 1968 )
kararlı sürüm
Algol 68/RR / Revize Rapor: 1973 ; 48 yıl önce r1 ( 1973 )
Yazma disiplini statik , güçlü , güvenli , yapısal
Kapsam sözlüksel
Başlıca uygulamalar
Algol 68C Algol 68 Cin (son), Algol 68-R , Algol 68RS , Algol 68S , FLACC , Алгол 68 Ленинград / Leningrad Ünitesi , Odra Algol 68
lehçeler
ALGOL 68/FR (Nihai Rapor r0 )
Tarafından etkilenmiş
ALGOL 60 , ALGOL Y
Etkilenen
C , C++ , Bourne kabuğu , KornShell , Bash , Steelman , Ada , Python , Seed7 , Mary , S3

ALGOL 68 ( Algorithmic Language 1968'in kısaltması ), ALGOL 60 programlama dilinin halefi olarak tasarlanmış, çok daha geniş bir uygulama kapsamı ve daha titiz bir şekilde tanımlanmış sözdizimi ve anlambilim hedefi ile tasarlanmış zorunlu bir programlama dilidir .

Standart olmayan terminolojiyle dolu birkaç yüz sayfaya ulaşan dilin tanımının karmaşıklığı, derleyici uygulamasını zorlaştırdı ve "uygulama ve kullanıcı olmadığı" söylendi. Bu sadece kısmen doğruydu; ALGOL 68, özellikle International Computers Limited (ICL) makinelerinde popüler olduğu Birleşik Krallık'ta ve öğretim rollerinde olmak üzere çeşitli niş pazarlarda kullanım bulmuştur. Bu alanların dışında kullanım nispeten sınırlıydı.

Yine de, ALGOL 68'in bilgisayar bilimi alanına katkıları derin, geniş kapsamlı ve kalıcı olmuştur, ancak bu katkıların çoğu ancak daha sonra geliştirilen programlama dillerinde yeniden ortaya çıktıklarında kamuya açık olarak tanımlanmıştır. Pek çok dil, özellikle dilin algılanan karmaşıklığına bir yanıt olarak geliştirildi, en dikkate değer olanı Pascal'dı veya Ada gibi belirli roller için yeniden uygulamalardı .

1970'lerin birçok dili, tasarımlarını özel olarak ALGOL 68'e kadar takip ediyor, bazı özellikleri seçerken çok karmaşık veya belirli roller için kapsam dışı olarak kabul edilen diğerlerini terk ediyor. Bunlar arasında , özellikle güçlü yazım ve yapıları ile ALGOL 68'den doğrudan etkilenen C dili bulunmaktadır . Çoğu modern dil, sözdizimlerinin en azından bir kısmını C veya Pascal'a ve dolayısıyla doğrudan veya dolaylı olarak ALGOL 68'e kadar izler.

genel bakış

ALGOL 68 özellikleri arasında ifade tabanlı sözdizimi, kullanıcı tarafından bildirilen türler ve yapılar/etiketli birlikler, bir değişkenler ve referans parametreleri referans modeli, dize, dizi ve matris dilimleme ve eşzamanlılık bulunur.

ALGOL 68, Uluslararası Bilgi İşlem Federasyonu (IFIP) IFIP Algoritmik Diller ve Matematik Çalışma Grubu 2.1 tarafından tasarlanmıştır. 20 Aralık 1968'de, dil grup tarafından resmen kabul edildi ve ardından IFIP Genel Kurulu tarafından yayınlanmak üzere onaylandı.

ALGOL 68, Adriaan van Wijngaarden tarafından icat edilen iki seviyeli bir biçimsel dilbilgisi olan bir biçimcilik kullanılarak tanımlandı . Van Wijngaarden Dilbilgileri bir kullanımı bağlam serbest dilbilgisi belirli ALGOL 68 programı tanıyacak yapımları sonsuz kümesini üretmek üzere; özellikle, diğer birçok programlama dilinde teknik standartların semantik olarak etiketlendiği ve belirsizliğe eğilimli doğal dil düzyazısında ifade edilmesi ve daha sonra derleyicilerde resmi dil ayrıştırıcısına eklenmiş geçici kod olarak uygulanması gereken gereksinimleri ifade edebilirler. .

ALGOL 68, uygulanmadan önce tam bir resmi tanımı yapılan ilk (ve muhtemelen sonuncusu) ana dildi.

CHA Koster

ALGOL 68'in tasarımının ana amaçları ve ilkeleri:

  1. Açıklamanın eksiksizliği ve netliği
  2. Tasarımın dikliği
  3. Güvenlik
  4. Yeterlik:
    • Statik mod kontrolü
    • Moddan bağımsız ayrıştırma
    • Bağımsız derleme
    • Döngü optimizasyonu
    • Gösterimler – minimal ve daha büyük karakter kümelerinde

ALGOL 68, en belirgin olarak CAR Hoare ve Edsger Dijkstra gibi tasarım komitesinin bazı üyeleri tarafından ALGOL 60'ın sadeliğini terk ettiği , karmaşık veya aşırı genel fikirlerin bir aracı haline geldiği ve derleyici yazarın görevini yerine getirmek için çok az şey yaptığı için eleştirildi. C , S-algol ve Pascal gibi kasıtlı olarak basit çağdaşların (ve rakiplerin) aksine daha kolay .

1970 yılında ALGOL 68-R , ALGOL 68 için çalışan ilk derleyici oldu.

1973 revizyonunda, prosedür , gommalar ve resmi sınırlar gibi belirli özellikler atlandı. Cf gözden geçirilmemiş raporun dili. r0

Avrupa savunma ajansları (İngiltere'de Kraliyet Sinyalleri ve Radar Kuruluşu (RSRE)) beklenen güvenlik avantajları için ALGOL 68'in kullanımını teşvik etse de, NATO ittifakının Amerikan tarafı farklı bir proje geliştirmeye karar verdi, Ada dili kullanımını zorunlu hale getirdi. ABD savunma sözleşmeleri için.

ALGOL 68'in Sovyetler Birliği'nde de kayda değer bir etkisi oldu ve ayrıntıları Andrey Ershov'un 2014 tarihli makalesinde bulunabilir: "ALGOL 68 ve SSCB ve Rus Programlaması Üzerindeki Etkisi" ve "Алгол 68 и его влияние на программирование в" СССР ve России".

ALGOL 68 revizyon komitesinde yer alan Steve Bourne , fikirlerinin bir kısmını Bourne kabuğuna (ve dolayısıyla Bash gibi alt Unix kabuklarına ) ve C'ye (ve dolayısıyla C++ gibi nesillere ) aldı.

Projenin tam tarih bulunabilir CH Lindsey 'in ALGOL 68 A History .

Dilin kapsamlı bir incelemesi için, bkz. Dr. Sian Mountbatten'in "ALGOL 68'i Programlama Kolaylaştı" veya Gözden Geçirilmiş Raporu içeren Marcel van der Veer'in "ALGOL 68 Genie'yi Öğrenmek".

Tarih

kökenler

ALGOL 68, adından da anlaşılacağı gibi , ilk kez 1960 yılında resmileştirilen ALGOL dilinin devamı niteliğindedir. Aynı yıl Uluslararası Bilgi İşlem Federasyonu (IFIP), ALGOL veya WG2.1 üzerinde Çalışma Grubunu oluşturmuş ve başlatmıştır. Bu grup, Nisan 1962'de Roma'da güncellenmiş bir ALGOL 60 spesifikasyonunu yayınladı. Mart 1964'teki bir takip toplantısında, grubun , dilin yeniden tanımlanması olacak olan ALGOL X olmak üzere iki takip standardı üzerinde çalışmaya başlaması gerektiğine karar verildi. bazı eklemeler ve kendi programlarını LISP dili tarzında değiştirme yeteneğine sahip olacak bir ALGOL Y .

tanım süreci

ALGOL X grubunun ilk toplantısı Mayıs 1965'te Princeton Üniversitesi'nde yapıldı. Toplantının bir raporu, geniş çapta desteklenen iki temaya dikkat çekti: güçlü tiplemenin tanıtılması ve Euler'in koleksiyonları işlemek için 'ağaç' veya 'liste' kavramlarına ilgi .

Fransa'da Ekim ayında ikinci toplantıda, üç resmi teklifler, sunuldu Niklaus Wirth 'in ALGOL W tarafından kayıt yapıları hakkında yorumlarla beraber ARAÇ (Tony) Hoare Gerhard SEEGMULLER tarafından benzer bir dil ve bir kağıt Adriaan van Wijngaarden "konulu Resmi bir dilin ortogonal tasarımı ve açıklaması". Neredeyse anlaşılmaz "W-Grammar" ile yazılan ikincisi, dilin evriminde belirleyici bir değişim olduğunu kanıtladı. Toplantı, van Wijngaarden'ın Wirth/Hoare sunumunu W-Grammar'ını kullanarak yeniden yazacağı konusunda bir anlaşmayla sona erdi.

Bu görünüşte basit olan görev nihayetinde beklenenden daha zor oldu ve takip toplantısı altı ay ertelenmek zorunda kaldı. Nisan 1966'da Kootwijk'te buluştuğunda , van Wijngaarden'ın taslağı eksik kaldı ve Wirth ve Hoare daha geleneksel tanımları kullanan bir versiyon sundu. Genel olarak makalelerinin "yanlış biçimcilikte doğru dil" olduğu konusunda hemfikirdi. Bu yaklaşımlar araştırıldıkça, gerçek dünyada etkileri olacak parametrelerin tanımlanma biçiminde bir fark olduğu ortaya çıktı ve Wirth ve Hoare daha fazla gecikmenin sonsuz olabileceğini protesto ederken, komite van Wijngaarden'ın versiyonunu beklemeye karar verdi. Wirth daha sonra mevcut tanımını ALGOL W olarak uyguladı.

Ekim 1966'da Varşova'daki bir sonraki toplantıda , Oak Ridge Ulusal Laboratuvarı ve Illinois Üniversitesi'nde bir araya gelen ancak henüz fazla ilerleme kaydetmemiş olan I/O Alt Komitesi'nden bir ilk rapor vardı. Önceki toplantıdaki iki öneri yeniden araştırıldı ve bu sefer işaretçilerin kullanımı hakkında yeni bir tartışma ortaya çıktı ; ALGOL W bunları yalnızca kayıtlara atıfta bulunmak için kullanırken, van Wijngaarden'ın sürümü herhangi bir nesneye işaret edebilir. Karışıklık eklemek için John McCarthy , operatör aşırı yüklemesi ve birlikte dizileme ve/ veya yapılar oluşturma yeteneği için yeni bir teklif sundu ve Klaus Samelson anonim işlevlere izin vermek istedi . Ortaya çıkan karışıklıkta, tüm çabayı bırakma konusunda bazı tartışmalar vardı. Karışıklık , Mayıs 1967'de Zandvoort'ta olması beklenen ALGOL Y toplantısı boyunca devam etti .

yayın

Nihayet Şubat 1968'de bir taslak rapor yayınlandı. Bu, çoğunlukla yüzlerce sayfa okunamayan dilbilgisi ve garip terminoloji nedeniyle "şok, korku ve muhalefet" ile karşılandı. Charles H. Lindsey , altı adam-haftalık bir çaba gerektiren bir süreç olan "içinde hangi dilin saklı olduğunu" bulmaya çalıştı. Ortaya çıkan "ALGOL 68 ile daha az yırtık" makalesi geniş çapta dağıtıldı. Mayıs 1968'de Zürih'te daha geniş bir bilgi işleme toplantısında katılımcılar, dilin kendilerine zorlandığından ve toplantılar çoğunlukla kapalı olduğundan ve resmi bir geri bildirim mekanizması olmadığından IFIP'nin "bu mantıksız durumun gerçek kötü adamı" olduğundan şikayet ettiler. Wirth ve Peter Naur , o sırada WG2.1'deki yazarlık pozisyonlarından resmen istifa ettiler.

Bir sonraki WG2.1 toplantısı Haziran 1968'de Tirrenia'da gerçekleşti. Derleyicilerin serbest bırakılması ve diğer konuların tartışılması gerekiyordu, ancak bunun yerine dil üzerine bir tartışmaya dönüştü. van Wijngaarden, raporun yalnızca bir versiyonunu daha yayınlayacağını söyleyerek (veya tehdit ederek) yanıt verdi. Bu noktada Naur, Hoare ve Wirth çabayı bırakmıştı ve birkaç kişi daha bunu yapmakla tehdit ediyordu. Bunu, Ağustos 1968'de North Berwick , Aralık'ta Münih, Ocak 1969'da resmi Raporun yayınlanmasını sağlayan ancak aynı zamanda tartışmalı bir Azınlık Raporu'nun yazılmasıyla sonuçlanan birkaç toplantı daha izledi . Son olarak, Eylül 1969'da Banff, Alberta'da , proje genel olarak tamamlanmış olarak kabul edildi ve tartışma, esas olarak errata ve büyük ölçüde genişletilmiş Rapora Giriş bölümü üzerindeydi.

Bu çaba beş yıl sürdü, bilgisayar bilimlerindeki en büyük isimlerin çoğunu yok etti ve birçok durumda hem tanım hem de bir bütün olarak grup konularında çıkmaza girdi. Hoare, pek çok eserde yaygın olarak atıfta bulunulan "ALGOL 68'in Eleştirisi"ni neredeyse anında yayınladı. Wirth, ALGOL W konseptini daha da geliştirmeye devam etti ve bunu 1970 yılında Pascal olarak piyasaya sürdü.

Uygulamalar

ALGOL 68-R

Standardın 1968 sonlarındaki taslak Rapora dayanan ilk uygulaması , Birleşik Krallık'taki Kraliyet Radar Kuruluşu tarafından Temmuz 1970'de ALGOL 68-R olarak tanıtıldı. Ancak bu, tam dilin bir alt kümesiydi ve Barry Mailloux Raporun son editörü, "Bu bir ahlak meselesidir. Bizim İncil'imiz var ve siz günah işliyorsunuz!" diye şaka yaptı. Bu sürüm yine de ICL makinelerinde çok popüler oldu ve askeri kodlamada, özellikle İngiltere'de yaygın olarak kullanılan bir dil haline geldi.

68-R'deki değişiklikler arasında, tüm değişkenlerin ilk kullanımlarından önce bildirilmesi gerekliliği vardı. Bu , kullanılmadan önce etkinleştirme kaydındaki değişkenler için alan ayrıldığından, derleyicinin tek geçişli olmasına izin vermesi gibi önemli bir avantaja sahipti . Ancak, bu değişiklik aynı zamanda zorlu yan etkisi vardı Proc s işlemi kodunun organı olarak daha sonra bir kez daha türlerinin bir beyanı olarak, iki kez ilan etti ve. Başka bir değişiklik, varsayılan void modunu ortadan kaldırmaktı; bu, hiçbir değer döndürmeyen ( diğer dillerde bir ifade olarak adlandırılır ) ve void kelimesinin varsayıldığı yere eklenmesini talep eden bir ifadedir . Bundan başka, 68-R, açık elendiği paralel işleme göre komutları par .

Diğerleri

Dilin ilk tam uygulaması, 1974'te CDC Hollanda tarafından Control Data ana bilgisayar serisi için tanıtıldı . Bu sınırlı kullanım gördü, çoğunlukla Almanya ve Hollanda'da öğretildi.

68-R'ye benzer bir sürüm 1976'da Carnegie Mellon Üniversitesi'nden 68S olarak tanıtıldı ve yine orijinalin çeşitli basitleştirmelerine dayanan ve DEC PDP-11 gibi daha küçük makinelerde kullanılması amaçlanan tek geçişli bir derleyiciydi . O da daha çok öğretim amaçlı kullanılmıştır.

IBM ana bilgisayarları için bir sürüm , Cambridge Üniversitesi'nden bir sürüm piyasaya sürüldüğünde 1978'e kadar mevcut değildi . Bu "neredeyse tamamlandı" idi. Lindsey , 1984'te IBM PC de dahil olmak üzere küçük makineler için bir sürüm yayınladı .

Üç açık kaynak Algol 68 uygulaması bilinmektedir:

Zaman çizelgesi

Yıl Etkinlik Katkıda Bulunan
Mart 1959 ALGOL Bülteni 1. Sayı (İlk) Peter Naur / ACM
Şubat 1968 Taslak Rapor (DR) Yayınlandı IFIP Çalışma Grubu 2.1
Mart 1968 Algol 68 Nihai Rapor r0 Münih Toplantısında Sunuldu IFIP Çalışma Grubu 2.1
Haziran 1968 İtalya, Tirrenia'da Toplantı IFIP Çalışma Grubu 2.1
Ağustos 1968 Kuzey Berwick, İskoçya'da Toplantı IFIP Çalışma Grubu 2.1
Aralık 1968 ALGOL 68 Nihai Rapor r0 Münih Toplantısında Sunuldu IFIP Çalışma Grubu 2.1
Nisan 1970 Bir ICL 1907F üzerinde GEORGE 3 altında ALGOL 68-R (R) Kraliyet Sinyalleri ve Radar Tahmini
Eylül 1973 Algol 68 Revize Rapor r1 Yayınlandı IFIP Çalışma Grubu 2.1
1975 ALGOL 68C (C) – taşınabilir derleyici (zcode VM ) S. Bourne , Andrew Birrell ve Michael Guy
Haziran 1975 GE Hedrick ve Alan Robertson. Oklahoma Eyaleti ALGOL 68 Alt Küme Derleyicisi. 1975 Uluslararası ALGOL 68 Konferansı.
Haziran 1977 Strathclyde ALGOL 68 konferansı, İskoçya ACM
Mayıs 1978 ALGOL H için Öneriler – ALGOL 68'in Süper Dili AP Siyah, VJ Rayward-Smith
1984 Sun, SPARC ve PC'ler için tam ALGOL 68S (S) derleyicisi CH Lindsey ve diğerleri, Manchester
Ağustos 1988 ALGOL Bülteni Sayı 52 (son) Ed. CH Lindsey / ACM
Mayıs 1997 Algol68 S (S) internette yayınlandı Charles H. Lindsey
Kasım 2001 İnternette yayınlanan Algol 68 Genie (G) (GNU GPL açık kaynak lisanslama) Marcel van der Veer

Algoritmik Dil ALGOL 68 Raporları ve Çalışma Grubu üyeleri

": Koster: Van Wijngaarden kez olarak biraz dil-yanak dört yazarlar, özelliği transputter , Peck: syntaxer, MAILLOUX: uygulayıcı, Van Wijngaarden: taraf ideologist." - Koster.

Standardizasyon zaman çizelgesi

1968: Aralık 1968 20 günü, "Nihai Rapor" (MR 101) daha sonra daha sonra Genel Kurulu tarafından onaylanan Çalışma Grubu tarafından kabul edildi UNESCO 'ın IFIP yayın için. Standardın çevirileri Rusça , Almanca , Fransızca ve Bulgarca , daha sonra Japonca ve Çince için yapılmıştır . Standart ayrıca Braille'de kullanıma sunuldu .

1984: TC97 , standardizasyon için ALGOL 68'i "Yeni İş Öğesi" TC97/N1642 [2] [3] olarak değerlendirdi . Batı Almanya, Belçika, Hollanda, SSCB ve Çekoslovakya standardın hazırlanmasına katılmaya istekliydi, ancak SSCB ve Çekoslovakya "doğru ISO komitelerinin doğru türde üyeleri değildi" [4] ve Algol 68'in ISO standardizasyonu durdu. [5]

1988: Daha sonra ALGOL 68 , Rusya'da GOST standartlarından biri haline geldi .

  • GOST 27974-88 Programlama dili ALGOL 68 – Язык программирования АЛГОЛ 68
  • GOST 27975-88 Programlama dili ALGOL 68 genişletilmiş – Язык программирования АЛГОЛ 68 расширенный

Önemli dil öğeleri

Kalın semboller ve ayrılmış kelimeler

Standart dil, tipik olarak kalın harflerle yazılmış yaklaşık altmış kelime içerir ve bazılarında "kısa sembol" eşdeğerleri bulunur:

mode, op, prio, proc,
flex, heap, loc, long, ref, short,
bits, bool, bytes, char, compl, int, real, sema, string, void,
channel, file, format, struct, union,
at "@", eitherr0, is ":=:", isnt  is notr0 ":/=:" ":≠:", of "→"r0, true, false, empty, nil "○", skip "~",
co "¢", comment "¢", pr, pragmat,
case ~ in ~ ouse ~ in ~ out ~ esac "( ~ | ~ |: ~ | ~ | ~ )",
for ~ from ~ to ~ by ~ while ~ do ~ od,
if ~ then ~ elif ~ then ~ else ~ fi "( ~ | ~ |: ~ | ~ | ~ )",
par begin ~ end "( ~ )", go to, goto, exit "."r0.

Birimler: İfadeler

Temel dil yapısı birimdir . Bir birim, bir formül , ekteki bir yan tümce , rutin bir metin veya teknik olarak ihtiyaç duyulan birkaç yapıdan biri (atama, atlama, atlama, nihil) olabilir. Ekteki yan tümce teknik terimi , diğer çağdaş dillerde blok , do deyimi , switch deyimi olarak bilinen doğal olarak parantez içine alınan yapılardan bazılarını birleştirir . Anahtar kelimeler kullanıldığında, tanıtan anahtar kelimenin genel ters karakter dizisi muhafaza, örneğin sonlandırmak için kullanılır ( eğer ~ sonra ~ başka ~ fi , dava ~ içinde ~ dışarı ~ esac , için ~ iken ~ do ~ od ). Bu Korumalı Komut sözdizimi, Stephen Bourne tarafından ortak Unix Bourne kabuğunda yeniden kullanıldı . Bir ifade aynı zamanda bir yan madde ile diğer değerlerden oluşturulan çoklu bir değer de verebilir . Bu yapı, bir prosedür çağrısının parametre paketine benziyor.

mod: Bildirimler

Temel veri türleri ( modeAlgol 68 dilinde s olarak adlandırılır ) real, int, compl( karmaşık sayı ) bool, char, bitsve bytes. Örneğin:

int n = 2;
co n is fixed as a constant of 2. co
int m := 3;
co m is a newly created local variable whose value is initially set to 3. co
co    This is short for ref int m = loc int := 3; co
real avogadro = 6.0221415⏨23; co Avogadro's number co
long long real long long pi = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510;
compl square root of minus one = 0 ⊥ 1;

Ancak, bildirim real x;yalnızca sözdizimsel şeker için . Olduğunu, gerçekten sabit tanımlayıcı bir için referans bir yeni oluşturulan yerel gerçek değişken. ref real x = loc real;x

Ayrıca, hem floatand double, veya intand longand short, vb.'yi tanımlamak yerine , ALGOL 68 değiştiriciler sağlar , böylece örneğin şu anda yaygın doubleolan long real veya long long real olarak yazılır . Prelude sabitleri max real ve min long intfarklı uygulamalar için programlar adapte sağlanmaktadır.

Tüm değişkenlerin bildirilmesi gerekir, ancak bildirimin ilk kullanımdan önce gelmesi gerekmez.

ilkel bildirici: int , real , compl , karmaşık G , bool , char , string , bits , bytes , format , file , pipe G , channel , sema

  • bit - bool öğesinin "paketlenmiş vektörü" .
  • baytchar öğesinin "paketlenmiş vektörü" .
  • stringesnek bir char dizisi .
  • sema - Bir sema Phore başlangıç durumuna edilebilir op landırıcısı seviyesinde .

Çeşitli tür oluşturucular kullanılarak daha basit olanlardan karmaşık türler oluşturulabilir:

  • ref modu – C/C++'daki & 'ye ve Pascal'daki ref'e benzer şekilde mode türünde bir değere başvuru
  • struct – C/C++'daki struct ve Pascal'daki kayıt gibi yapılar oluşturmak için kullanılır
  • union – C/C++ ve Pascal'da olduğu gibi birlikler oluşturmak için kullanılır
  • proc – C/C++'daki fonksiyonlar ve Pascal'daki prosedürler/fonksiyonlar gibi prosedürleri belirtmek için kullanılır

Bazı örnekler için bkz . ALGOL 68 ve C++ Karşılaştırması .

Diğer bildirim sembolleri şunları içerir: flex , heap , loc , ref , long , short , event S

  • flex – dizinin esnek olduğunu beyan edin, yani istek üzerine uzunluğu artabilir.
  • yığın – değişkene genel yığından bir miktar boş alan ayırın.
  • loc - değişkene yerel yığının bir miktar boş alanını ayırın.
  • longint , real veya compl öğesini daha uzun bir boyutta ilan edin.
  • shortint , real veya compl öğesini daha kısa bir boyutta ilan edin.

Bir mod (tip) için bir ad ile bildirilebilir modu benzer beyanı, typedef C / C ++ ve yazın Pascal:

 int max=99;
 mode newmode = [0:9][0:max]struct (
     long real a, b, c, short int i, j, k, ref real r
 );

Bu, aşağıdaki C koduna benzer:

  const int max=99;
  typedef struct {
      double a, b, c; short i, j, k; float *r;
  } newmode[9+1][max+1];

ALGOL 68 için sadece yenimod sembolü eşittir ve en önemlisi inşaat yapılır ve öncelikler dikkate alınmaksızın soldan sağa, okunabilir modu-gösterge sola görünmektedir. Ayrıca, Algol 68 dizilerinin alt sınırı varsayılan olarak birdir, ancak - max int ile max int arasında herhangi bir tam sayı olabilir .

Mod bildirimleri, türlerin özyinelemeli olmasına izin verir : doğrudan veya dolaylı olarak kendileri açısından tanımlanır. Bu, bazı kısıtlamalara tabidir – örneğin, bu beyanlar yasa dışıdır:

 mode A = ref A
 mode A = struct (A a, B b)
 mode A = proc (A a) A

bunlar geçerliyken:

 mode A = struct (ref A a, B b)
 mode A = proc (ref A a) ref A

zorlamalar: döküm

Zorlaması üç kritere göre bir coercend bir coercee üretmek: coercend bir önsel modu bir baskı uygulanmasından önce, bu baskılara sonra gerekli coercee ve coercee sözdizimsel konumunda ya da "tür" a posteriori modu . Zorlamalar kademeli olabilir.

Altı olası zorlama, prosedürden çıkarma , referanstan çıkarma , birleştirme , genişletme , kürek çekme ve işeme olarak adlandırılır . Her bir baskı hariç birleştirici ilişkili değerlere karşılık gelen bir dinamik etkisi öngörmektedir. Bu nedenle, birçok ilkel eylem, zorlamalarla örtük olarak programlanabilir.

Bağlam gücü – izin verilen zorlamalar:

  • yumuşak – prosedürden çıkarma
  • zayıf - referanstan çıkarma veya prosedürden çıkarma, bir isim verme
  • meek - referanstan çıkarma veya prosedürden çıkarma
  • firma - uysal, ardından birleştirme
  • güçlü - sağlam, ardından genişleme, kürek çekme veya boşaltma

Örneklerle zorlama hiyerarşisi

ALGOL 68, programın belirli bir noktasında mevcut olan zorlamaların türünü belirleyen bir bağlamlar hiyerarşisine sahiptir. Bu bağlamlar şunlardır:

Bağlam
bağlam konumu Mevcut zorlamalar Bağlamda zorlama örnekleri
Yumuşak
Zayıf
uysal
Firma
Güçlü
Güçlü
Sağ taraf:
  • Kimlik bildirimleri, "~" olarak: REAL x = ~
  • Başlangıçlar, "~" olarak: REAL x := ~

Ayrıca:

  • Çağrıların gerçek parametreleri, "~" olarak:PROC: sin(~)
  • Yayınların ekteki maddeleri, şurada "~" olarak: REAL(~)
  • Rutin metinlerin birimleri
  • VOID sonucunu veren ifadeler
  • Dengeli bir tümcenin tüm parçaları (biri hariç)
  • Bir kimlik ilişkisinin bir tarafı, şurada "~" olarak: ~ IS ~
iptal etmek
Tümü yumuşak, sonra zayıf referans kaldırma (referans kaldırma veya işlemden çıkarma, bir isim verme)
Tümü zayıf, sonra referanstan çıkarma (referanslama veya iptal etme)
Tüm uysal sonra birim
Tüm firma daha sonra genişleme, kürek çekme veya boşaltma

Hassasiyet kaybı yoksa genişletme gerçekleşir. Örneğin: Bir INT bir GERÇEK'e zorlanacak ve bir GERÇEK UZUN GERÇEK'e zorlanacak. Ama tersi değil. Örnekler:

INT to LONG INT
INT to REAL
REAL to COMPL
BITS to []BOOL
BYTES to STRING

Bir değişken ayrıca 1 uzunluğunda bir diziye zorlanabilir (sıralanabilir).

Örneğin:

INT to [1]INT
REAL to [1]REAL
vesaire.
Firma
  • Formüllerin "~" olarak işlenenleri:OP: ~ * ~
  • Aktarım çağrılarının parametreleri
Örnek:

UNION(INT,REAL) var := 1

uysal
  • Trimscriptler (INT veren)
  • Sorular: örneğin aşağıda "~" olarak

IF ~ THEN ... FI ve FROM ~ BY ~ TO ~ WHILE ~ DO ... OD etc

  • Çağrıların birincilleri (örneğin sin in sin(x))
Örnekler:
REF REF BOOL to BOOL
REF REF REF INT to INT
Zayıf
  • Dilimlerin birincil öğeleri, "~" içinde olduğu gibi: ~[1:99]
  • Seçimlerin ikincilleri, şurada "~" olarak: value OF ~
Örnekler:
REF BOOL to REF BOOL
REF REF INT to REF INT
REF REF REF REAL to REF REAL
REF REF REF REF STRUCT to REF STRUCT
Yumuşak
"~" olarak atamaların LHS'si: ~ := ... Örnek:
  • prosedürden çıkarılması: PROC REAL random: e.g. random

Birinciller, İkinciller, Üçüncül ve Kuaternerler hakkında daha fazla ayrıntı için Operatör önceliğine bakın .

pr & co: Pragmatlar ve Yorumlar

Pragmatlar , programdaki yönergelerdir , genellikle derleyiciye ipuçları verir; daha yeni dillerde bunlara "pragmalar" denir ('t' yok). Örneğin

pragmat heap=32 pragmat
pr heap=32 pr

Yorumlar çeşitli şekillerde eklenebilir:

¢ The original way of adding your 2 cents worth to a program ¢
comment "bold" comment comment
co Style i comment co
# Style ii comment #
£ This is a hash/pound comment for a UK keyboard £

Normalde, yorumlar ALGOL 68'de yuvalanamaz. Bu kısıtlama, farklı yorum sınırlayıcıları kullanılarak aşılabilir (örneğin, yalnızca geçici kod silme işlemleri için karma kullanın).

İfadeler ve bileşik ifadeler

ALGOL 68, ifade yönelimli bir programlama dili olduğundan , bir atama ifadesi tarafından döndürülen değer , hedefe bir referanstır. Bu nedenle, aşağıdaki geçerli ALGOL 68 kodudur:

 real half pi, one pi; one pi := 2 * ( half pi := 2 * arc tan(1) )

Bu kavram, diğerleri arasında C ve Perl'de mevcuttur . Gibi daha önceki dilde olduğu gibi o Not Algol 60 ve FORTRAN böylece boşluk, tanımlayıcılar izin verilir half pibir olan tek (böylece kaçınarak tanımlayıcı çizgi karşı deve durumda karşı tüm küçük harf konularında).

Başka bir örnek olarak, bir matematiksel fikri ifade etmek için toplam bir f(i)i, n, aşağıdaki ALGOL 68 1 = den tam sayılı ifadesi yeterli olacaktır:

 (int sum := 0; for i to n do sum +:= f(i) od; sum)

Bir tamsayı ifadesi olduğundan, önceki kod bloğunun bir tamsayı değerinin kullanılabileceği herhangi bir bağlamda kullanılabileceğini unutmayın . Bir kod bloğu, değerlendirdiği son ifadenin değerini döndürür; bu fikir, diğer dillerin yanı sıra Lisp'te mevcuttur .

Bileşik ifadelerin tümü, ayırt edici kapatma parantezleri ile sonlandırılır:

  • eğer seçim maddeleri:
 if condition then statements [ else statements ] fi
 "brief" form:  ( condition | statements | statements )
 if condition1 then statements elif condition2 then statements [ else statements ] fi
 "brief" form:  ( condition1 | statements |: condition2 | statements | statements )

Bu şema yalnızca sarkan başka sorunu ortadan kaldırmakla kalmaz, aynı zamanda gömülü ifade dizilerinde beginve kullanmak zorunda kalmaktan da kaçınır . end

  • vaka seçimi maddeleri:
 case switch in statements, statements,... [ out statements ] esac
 "brief" form:  ( switch | statements,statements,... | statements )
 case switch1 in statements, statements,... ouse switch2 in statements, statements,... [ out statements ] esac
 "brief" form of case statement:  ( switch1 | statements,statements,... |: switch2 | statements,statements,... | statements )

Kısa sembollerle seçim cümlesi örneği :

proc days in month = (int year, month)int:
  (month|
    31,
    (year÷×4=0 ∧ year÷×100≠0  ∨  year÷×400=0 | 29 | 28 ),
    31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  );

Kalın sembollerle seçim cümlesi örneği :

proc days in month = (int year, month)int:
  case month in
    31,
    if year mod 4 eq 0 and year mod 100 ne 0  or  year mod 400 eq 0 then 29 else 28 fi,
    31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  esac;

Kalın ve Kısa sembolleri karıştıran seçim yan tümcesi örneği :

proc days in month = (int year, month)int:
  case month in
¢Jan¢ 31,
¢Feb¢ ( year mod 4 = 0 and year mod 100 ≠ 0  or  year mod 400 = 0 | 29 | 28 ),
¢Mar¢ 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ¢ to Dec. ¢
  esac;

Algol68, anahtarın int veya (benzersiz) union türünde olmasına izin verdi . İkincisi, birleşim değişkenleri üzerinde güçlü yazmanın zorlanmasına izin verir . cf birlik örneği için aşağıdaki.

  • do döngü maddesi:
 [ for index ] [ from first ] [ by increment ] [ to last ] [ while condition ] do statements od
 The minimum form of a "loop clause" is thus: do statements od

Bu kabul edildi "evrensel" döngü, tam sözdizimi:

for i from 1 by -22 to -333 while i×i≠4444 do ~ od

Yapının birkaç sıra dışı yönü var:

  • sadece do ~ od kısmı zorunluydu, bu durumda döngü süresiz olarak yinelenecektir.
  • Böylece fıkra için 100 do ~ od , sadece 100 kez yineleme olacak.
  • ise "sözdizimsel eleman" bir programcının kırmak için izin için erken döngü. Örneğin
int sum sq:=0;
for i
while
  print(("So far:",i,newline));
  sum sq≠70↑2
do
  sum sq+:=i↑2
od

Standart Algol68 müteakiben "uzantıları" izin için sözdizimsel eleman ile değiştirilmesi kadar ve downto küçük optimizasyonu elde etmek. Aynı derleyiciler ayrıca şunları da içeriyordu:

  • kadar (C) – geç döngü sonlandırma için.
  • foreach (S)paralel diziler üzerinde çalışmak için .

Daha fazla örnek, aşağıdaki kod örneklerinde bulunabilir.

struct, union & [:]: Yapılar, birlikler ve diziler

ALGOL 68, herhangi bir sayıda boyuta sahip dizileri destekler ve tam veya kısmi satır veya sütunların dilimlenmesine izin verir .

 mode vector = [1:3]    real;   # vector mode declaration (typedef)  #
 mode matrix = [1:3,1:3]real;   # matrix mode declaration (typedef)  #
 vector v1  := (1,2,3);         # array variable initially (1,2,3)   #
 []real v2   = (4,5,6);         # constant array, type equivalent to vector, bounds are implied  #
 op + = (vector a,b) vector:    # binary operator definition         #
   (vector out; for i from ⌊a to ⌈a do out[i] := a[i]+b[i] od; out);
 matrix m := (v1, v2, v1+v2);
 print ((m[,2:]));              # a slice of the 2nd and 3rd columns #

Matrisler her iki şekilde de dilimlenebilir, örneğin:

 ref vector row = m[2,];  # define a ref (pointer) to the 2nd row #
 ref vector col = m[,2];  # define a ref (pointer) to the 2nd column #

ALGOL 68, çoklu alan yapılarını ( struct ) ve birleşik modları destekler . Referans değişkenleri, dizi dilimleri ve yapı alanları dahil olmak üzere herhangi bir moda işaret edebilir .

Tüm bunlara bir örnek olarak, işte geleneksel bağlantılı liste bildirimi:

 mode node = union (void, real, int, compl, string),
      list = struct (node val, ref list next);

İçin kullanım örneği birlik halinde bir düğüm :

Algol68 r0 1968 Nihai Raporunda olduğu gibi
 node n := "1234";
 real r; int i; compl c; string s
 case r,i,c,s::=n in
   print(("real:", r)),
   print(("int:", i)),
   print(("compl:", c)),
   print(("string:", s))
   out print(("?:", n))
 esac
Algol68 r1 1973 Revize Raporundaki gibi
 node n := "1234";
 # or n := EMPTY; #
  case n in
   (void):     print(("void:", "EMPTY")),
   (real r):   print(("real:", r)),
   (int i):    print(("int:", i)),
   (compl c):  print(("compl:", c)),
   (string s): print(("string:", s))
   out         print(("?:", n))
 esac

proc: Prosedürler

Prosedür ( proc ) bildirimleri, hem parametreler hem de sonuç için tip spesifikasyonları gerektirir ( yoksa geçersizdir ):

 proc max of real = (real a, b) real:
    if a > b then a else b fi;

veya koşullu ifadenin "kısa" biçimini kullanarak:

 proc max of real = (real a, b) real: (a>b | a | b);

a'nın dönüş değeri proc, prosedürde değerlendirilen son ifadenin değeridir. Prosedürlere ( ref proc ) atıfta bulunulmasına da izin verilir. Referansla arama parametreleri ref real, resmi bağımsız değişken listesinde referanslar (örneğin ) belirtilerek sağlanır. Aşağıdaki örnek, bir dizinin her bir öğesine bir işlev (parametre olarak belirtilen) uygulayan bir prosedürü tanımlar:

 proc apply = (ref [] real a, proc (real) real f):
  
    for i from lwb a to upb a do a[i] := f(a[i]) od

Bu basit kod, ALGOL 68'in öncülü ALGOL 60'ta elde edilemezdi .

işlem: Operatörler

Programcı yeni operatörler tanımlayabilir ve hem bunlar hem de önceden tanımlanmış olanlar aşırı yüklenebilir ve öncelikleri kodlayıcı tarafından değiştirilebilir. Aşağıdaki örnek, maxhem ikili hem de monadik sürümleri olan operatörü tanımlar (bir dizinin öğelerini tarama).

 prio max = 9;
  
 op max = (int a,b) int: ( a>b | a | b );
 op max = (real a,b) real: ( a>b | a | b );
 op max = (compl a,b) compl: ( abs a > abs b | a | b );
  
 op max = ([]real a) real:
    (real out := a[lwb a];
     for i from lwb a + 1 to upb a do ( a[i]>out | out:=a[i] ) od;
     out)

Dizi, Prosedür, Dereferans ve zorlama işlemleri

prio rity Operasyon r0 & r1 +Algol68 r0 +Algol68 G
Etkili 12
(Birincil)
referans kaldırma, prosedürden çıkarma(~,~), indisleme[~], kürek çekme[~,], dilimleme[~:~], boyut ifadeleri uzun ve kısa prosedür currying(~,,,), diag , trnsp , row , col
Etkili 11
(İkincil)
of (seçim), loc & heap (jeneratörler) → (seçim) yeni (jeneratörler)

Bunlar, teknik olarak bunun yerine kabul edilir "değil operatörleri isimlerle bağlantılı birimler "

Monadik operatörler

prio rity
(Tersiyer)
Algol68 "Değerli karakterler" r0 & r1 +Algol68 r0 & r1 +Algol68 C,G +Algol68 r0
10 değil ~, yukarı , aşağı , LWB , UPB ,

-, abs , arg , bin , entier , uzunluk , seviye , tek , repr , yuvarlak , kısalt

¬, ↑, ↓, ⌊, ⌈ norm , iz , t , det , inv lws , ups , ⎩, ⎧, btb , ctb

İlişkili önceliklere sahip ikili operatörler

prio rity
(Tersiyer)
Algol68 "Değerli karakterler" r0 & r1 +Algol68 r0 & r1 +Algol68 C,G +Algol68 r0
9 +*, ben +×, ⊥ !
8 SHL , shr , **, yukarı , aşağı , LWB , UPB ↑, ↓, ⌊, ⌈ ××, ^, lws , ups , ⎩, ⎧
7 *, /, %, üzerinde , %*, mod , elem ×, ÷, ÷×, ÷*, %×, □ ÷:
6 -, +
5 <, lt , <=, le , >=, ge , >, gt ≤, ≥
4 eq =, ne ~= /= ≠, ¬=
3 &, ve /\
2 veya \/
1 eksi , artı , zaman sınırı , divab , overab , modab , artı ,

-:=, +:=, *:=, /:=, %:=, %*:=, +=:

×:=, ÷:=, ÷×:=, ÷*:=, %×:= eksi , artı , div , overb , MOBD , ÷ :: =, Prus

Özel ayrıntılar:

  • Üçüncüller, nil ve ○ adlarını içerir .
  • LWS : In Algol68 r0 operatörleri Lws ve ⎩ ... de dönüp gerçek ise alt devlet bir dizinin boyutunun sabittir.
  • İnişler ve ⎧ operatörleri üzerinde benzer üst devlet .
  • LWB ve UPB operatörleri otomatik olarak kullanılabilir sendika ler farklı siparişlerin (ve mod lar) Dizilerin. Örneğin. upb of union([]int, [,]real, flex[,,,]char)

Atama ve kimlik ilişkileri vb.

Bunlar, teknik olarak bunun yerine kabul edilir "değil operatörleri isimlerle bağlantılı birimler "

prio rity
(kuaternerler)
Algol68 "Değerli karakterler" r0 & r1 +Algol68 r0 & r1 +Algol68 C,G,R +Algol68 r0
Etkili 0 : =, Olduğu  : = :, isnt  : / =: ~ = :, de @, ":" ";" :≠: :¬=: :=:= C , =:= R ..=, .=, ct , ::, ctab , ::=, .., is not , "..", ".,"

Not: Kuaternerler, atlama ve ~ adlarını içerir .

":=:" (alternatif olarak " " dır ) iki işaretçinin eşit olup olmadığını test eder; ":/=:" (alternatif olarak " isnt ") eşit olup olmadıklarını test eder.

Neden :=: ve :/=: gereklidir: İşaretçiler-tamsayı olarak bildirilen aşağıdaki değişkenler gibi iki işaretçi değerini karşılaştırmayı deneyin:

ref int ip, jp

Şimdi bu ikisinin aynı yeri mi gösterdiğine yoksa birinin nil mi gösterdiğine nasıl karar vereceğinizi düşünün . Aşağıdaki ifade

ip = jp

"=" operatörü int için tanımlandığından , ancak ref int için tanımlanmadığından, her iki işaretçiyi de int türündeki değerlere indirir ve bunları karşılaştırır . Öyle yasal olmayan tip işlenenler için "=" tanımlamak için ref int ve int ardından çağrılar nedeniyle uygulanabilir örtük baskılara karşı, belirsiz hale geldiğinden, aynı zamanda: işlenenler olarak bırakılmalıdır ref int ve bu sürümüyle operatör aradı? Ya da daha ileri indirgenmedikleri edilmelidir int ve bu sürüm yerine kullanılır? Bu nedenle aşağıdaki ifade asla yasal hale getirilemez:

ip = nil

Bu nedenle, operatörlere işlenenler için normal zorlama kurallarına tabi olmayan ayrı yapılara duyulan ihtiyaç. Ama bir yakalama var. Aşağıdaki ifadeler:

ip :=: jp
ip :=: nil

yasal olsa da, muhtemelen bekleneni yapmayacaktır. Her zaman false döndürürler , çünkü değişkenlerin gerçek adreslerini ipve jpişaret ettiklerinden ziyade karşılaştırırlar . Doğru etkiyi elde etmek için yazmak zorunda kalacaktı

ip :=: ref int(jp)
ip :=: ref int(nil)

Özel karakterler

APL sembollü IBM 2741 klavye

Algol'ün "özel" karakterlerinin çoğu (⊂, ≡, ␣, ×, ÷, ≤, ≥, ≠, ¬, ⊃, ≡, ∨, ∧, →, ↓, ↑, ⌊, ⌈, ⎩, ⎧, ⊥, ⏨, ¢, ○ ve □) APL "golf-ball" yazıcı kafası takılıyken IBM 2741 klavyesinde bulunabilir ; bunlar 1960'ların ortalarında ALGOL 68'in taslağı hazırlanırken kullanıma sunuldu. Bu karakterler aynı zamanda Unicode standardının bir parçasıdır ve çoğu birkaç popüler yazı tipinde mevcuttur .

aktarım: Giriş ve çıkış

Aktarım , ALGOL 68'in giriş ve çıkış olanaklarını belirtmek için kullanılan terimdir. Biçimlendirilmemiş, biçimlendirilmiş ve ikili aktarım için önceden tanımlanmış prosedürleri içerir. Dosyalar ve diğer aktarım aygıtları, tutarlı ve makineden bağımsız bir şekilde işlenir. Aşağıdaki örnek, standart çıktı aygıtına bazı biçimlendirilmemiş çıktıları yazdırır :

  print ((newpage, "Title", newline, "Value of i is ",
    i, "and x[i] is ", x[i], newline))

Önceden tanımlanmış prosedürleri not edin newpageve newlineargüman olarak iletin.

Kitaplar, kanallar ve dosyalar

Transput ait olduğu kabul edilir kitaplar , kanalların ve dosyalar :

  • Kitaplar sayfalardan, satırlardan ve karakterlerden oluşur ve dosyalarla yedeklenebilir.
    • Belirli bir kitap, adına yapılan bir aramayla adıyla bulunabilir match.
  • kanal s fiziksel cihazlara karşılık gelir. örneğin kart delgeçleri ve yazıcılar.
    • Üç standart kanal ayırt edilir: hazır kanal, öne çıkan kanal, arka kanal.
  • Bir dosya bir program ve bir kanalın üzerinden açılmış bir kitap arasında iletişim için bir yöntemdir.
    • Ruh hali , bir dosyanın yazma, karakter, bin, okuma ve açılabilir.
    • aktarım prosedürleri şunları içerir: establish, create, open, associate, lock, close, scratch.
    • pozisyon sorgular: char number, line number, page number.
    • düzen rutinleri şunları içerir:
      • space, backspace, newline, newpage.
      • get good line, get good page, get good book, ve proc set=(ref file f, int page,line,char)void:
    • Bir dosyanın olay rutinleri vardır . ör on logical file end, on physical file end, on page end, on line end, on format end, on value error, on char error.

biçimlendirilmiş aktarım

ALGOL 68'in aktarımındaki "biçimlendirilmiş aktarım" kendi sözdizimine ve kalıplara (işlevlere) sahiptir, format s iki $ karakteri arasında gömülüdür.

Örnekler:

 printf (($2l"The sum is:"x, g(0)$, m + n)); ¢ prints the same as: ¢
 print ((new line, new line, "The sum is:", space, whole (m + n, 0))

par: Paralel işleme

ALGOL 68 , paralel işlemenin programlanmasını destekler. Par anahtar sözcüğü kullanılarak , bir yan tümce , eylemlerin senkronizasyonunun semaforlar kullanılarak kontrol edildiği paralel bir yan tümceye dönüştürülür . A68G'de paralel eylemler, barındırma işletim sisteminde mevcut olduğunda iş parçacıklarına eşlenir . A68S'de farklı bir paralel işleme paradigması uygulandı (aşağıya bakın).

int initial foot width = 5;
mode foot = struct(
   string name,
   sema width,
   bits toe ¢ packed vector of BOOL ¢
);
 
foot left foot:= foot("Left", level initial foot width, 2r11111),
     right foot:= foot("Right", level initial foot width, 2r11111);
 
¢ 10 round clip in a 1968 Colt Python .357 Magnum ¢
sema rounds = level 10;
 
¢ the Magnum needs more barrels to take full advantage of parallelism ¢
sema acquire target = level 1;
 
prio ∧:= = 1;
op ∧:= = (ref bits lhs, bits rhs)ref bits: lhs := lhs ∧ rhs;
 
proc shoot = (ref foot foot)void: (
  ↓acquire target;
  ↓rounds;
  print("BANG! ");
  ↓width → foot;
  toe → foot ∧:= ¬(bin 1 shl level width → foot);
  printf(($g": Ouch!! – "5(g)l$, name → foot, []bool(toe → foot)[bits width – initial foot width + 1:]));
  ↑acquire target
);
 
¢ do shooting in parallel to cater for someone hoping to stand on just one foot ¢
par (
  for toe to initial foot width do
    shoot (left foot)
  od, ¢ <= a comma is required ¢
  for toe to initial foot width do
    shoot(right foot)
  od
)

kullanım örnekleri

Kod örneği

Bu örnek program, 100'den küçük tüm asal sayıları bulmak için Eratosthenes Kalburunu uygular. nil , boş göstericinin diğer dillerdeki ALGOL 68 analogudur . Gösterimde X ve y üyesi kere x a yapı y .

begin # Algol-68 prime number sieve, functional style #
  
  proc error = (string s) void:
     (print(( newline, " error: ", s, newline)); goto stop);
  proc one to = (int n) list:
     (proc f = (int m,n) list: (m>n | nil | cons(m, f(m+1,n))); f(1,n));
  
  mode list = ref node;
  mode node = struct (int h, list t);
  proc cons = (int n, list l) list: heap node := (n,l);
  proc hd   = (list l) int: ( l is nil | error("hd nil"); skip | h of l );
  proc tl   = (list l) list: ( l is nil | error("tl nil"); skip | t of l );
  proc show = (list l) void: ( l isnt nil | print((" ",whole(hd(l),0))); show(tl(l)));
  
  proc filter = (proc (int) bool p, list l) list:
     if l is nil then nil
     elif p(hd(l)) then cons(hd(l), filter(p,tl(l)))
     else filter(p, tl(l))
     fi;
  
  proc sieve = (list l) list:
     if l is nil then nil
     else
        proc not multiple = (int n) bool: n mod hd(l) ≠ 0;
        cons(hd(l), sieve( filter( not multiple, tl(l) )))
     fi;
  
  proc primes = (int n) list: sieve( tl( one to(n) ));
  
  show( primes(100) )
end

ALGOL 68 ile yazılmış işletim sistemleri

Not: Sovyet Dönemi bilgisayarları Эльбрус-1 (Elbrus-1) ve Эльбрус-2, geleneksel derleme yerine üst düzey dil Эль-76 (AL-76) kullanılarak oluşturulmuştur. Эль-76, Algol-68'e benzer, Ana fark, donanım düzeyinde desteklenen Эль-76'daki dinamik bağlama türleridir. Эль-76, uygulama, iş kontrolü, sistem programlama için kullanılır.

Uygulamalar

Hem ALGOL 68C hem de ALGOL 68-R , ALGOL 68'de yazılmıştır ve ALGOL 68'i kendi başına bir uygulama haline getirir. Diğer uygulamalar şunları içerir:

Kitaplıklar ve API'ler

  • NAG Numerical Librariessayısal analiz rutinlerinden oluşan bir yazılım kütüphanesi . 1980'lerde ALGOL 68'de tedarik edildi.
  • TORRIX – SG van der Meulen ve M. Veldhorst tarafından isteğe bağlı alanlar ve değişken büyüklükteki vektörler ve matrisler üzerinde işlemler için bir programlama sistemi.

Program temsili

ALGOL 68'in ALGOL geleneğinden miras kalan bir özelliği de farklı temsilleridir. Basılı çalışmadaki algoritmaları tanımlamak için kullanılan bir temsil dili , katı bir dil (Raporda titizlikle tanımlanmıştır) ve derleyici girişinde kullanılması amaçlanan resmi bir referans dili vardır . Örnekler kalın yazı tipi kelimeler içeriyor , bu katı dildir. ALGOL 68'in ayrılmış sözcükleri, tanımlayıcılardan farklı bir ad alanında etkin bir şekilde bulunur ve tanımlayıcılarda boşluklara izin verilir, bu nedenle bir sonraki parça yasaldır:

 int a real int = 3 ;

Yürütülebilir kod yazan programcı , donanım ve kültürel sorunlara bağlı olabileceğinden, her zaman kalın yazı tipi veya kodda altını çizme seçeneğine sahip değildir . Bu tanımlayıcıları belirtmek için farklı yöntemler geliştirilmiştir. Buna stroping rejimi denir . Örneğin, aşağıdakilerin tümü veya bir kısmı mevcut programlama temsilleri olabilir :

 int a real int = 3; # the strict language #
'INT'A REAL INT = 3; # QUOTE stropping style #
.INT A REAL INT = 3; # POINT stropping style #
 INT a real int = 3; # UPPER stropping style #
 int a_real_int = 3; # RES stropping style, there are 61 accepted reserved words #

Tüm uygulamalar, PRAGMAT bölümleri içinde en az POINT, UPPER ve RES'i tanımalıdır. Bunlardan POINT ve UPPER strok oldukça yaygındır, RES stroping ise spesifikasyona aykırıdır (rezerve edilmiş kelimeler olmadığı için). QUOTE (tek kesme işareti alıntı) orijinal öneriydi, ancak ALGOL 60'ta yaygın olan eşleşen kesme işareti alıntısı ALGOL 68'de pek kullanılmaz.

Aşağıdaki karakterler taşınabilirlik için önerildi ve 2014-01-02'de Wayback Machine'de Arşivlenen Algol 68'in Standart Donanım Temsili Raporunda "değerli karakterler" olarak adlandırıldı :

  • ^ Değerli Karakterler: ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "#$%'()*+,-./:;<=>@[ ]_|

Bu, 1960'larda bazı donanımların küçük harfleri veya diğer bazı ASCII olmayan karakterleri desteklemediği bir sorunu yansıtıyordu , aslında 1973 raporunda şöyle yazıyordu: "Dört değerli karakter - "|", "_", "[ " ve "]" — nominal olarak aynı karakter setini kullanan kurulumlarda bile genellikle farklı şekilde kodlanır."

  • Temel karakterler: "Değerli karakterler", "temel karakterlerin" bir alt kümesidir.

Farklı program temsillerine örnek

temsil kod
Algol68 "katı"
tipik olarak yayınlanmıştır
¢ altı çizili veya
   kalın yazı tipi ¢
 kip  xint = int ;
 xint toplamı sq:=0;
 için i süre
   toplam sq≠70×70
 yapmak
   toplam sq+:=i↑2
 od
Alıntı çekme düzeltme
(gibi viki )
'pr' quote 'pr'
'mode' 'xint' = 'int';
'xint' sum sq:=0;
'for' i 'while'
  sum sq≠70×70
'do'
  sum sq+:=i↑2
'od'
Bir İçin 7 bit karakter kodu derleyici
.PR UPPER .PR
MODE XINT = INT;
XINT sum sq:=0;
FOR i WHILE
  sum sq/=70*70
DO
  sum sq+:=i**2
OD
Bir İçin 6 bitlik karakter kodu derleyici
.PR POINT .PR
.MODE .XINT = .INT;
.XINT SUM SQ:=0;
.FOR I .WHILE
  SUM SQ .NE 70*70
.DO
  SUM SQ .PLUSAB I .UP 2
.OD
Kullanılarak Algol68 res çekme düzeltme
(anahtar sözcük)
.PR RES .PR
mode .xint = int;
.xint sum sq:=0;
for i while
  sum sq≠70×70
do
  sum sq+:=i↑2
od

ALGOL 68, her doğal dilin kendi Algol-68 anahtar kelime grubunu tanımlamasına izin verir. Sonuç olarak, programcılar kendi ana dillerindeki anahtar kelimeleri kullanarak programlar yazabilirler. Aşağıda "ertesi gün"ü hesaplayan basit bir prosedür örneği verilmiştir, kod iki dildedir: İngilizce ve Almanca.

 # Next day date - English variant #
 mode date = struct(int day, string month, int year);
 proc the day following = (date x) date:
      if day of  x < length of month (month of x, year of x)
      then (day of x + 1, month of x, year of x)
      elif month of x = "December"
      then (1, "January", year of x + 1)
      else (1, successor of month (month of x), year of x)
      fi;
 # Nachfolgetag - Deutsche Variante #
 menge datum = tupel(ganz tag, wort monat, ganz jahr);
 funktion naechster tag nach = (datum x) datum:
          wenn tag von x < monatslaenge(monat von x, jahr von x)
          dann (tag von x + 1, monat von x, jahr von x)
          wennaber monat von x = "Dezember"
          dann (1, "Januar", jahr von x + 1)
          ansonsten (1, nachfolgemonat(monat von x), jahr von x)
          endewenn;

Rusça / Sovyet örnek: In İngilizce Algol68 davası açıklaması ise şöyledir davayı ~ içinde ~ dışarı ~ esac , içinde Kiril bu okur выб ~ в ~ либо ~ быв .

Bazı Vanitalar

Teknik incelikleri nedeniyle ALGOL 68, bir şeyin varlığını inkar etmek için çok sayıda yönteme ihtiyaç duyar:

skip, "~" or "?"C – an undefined value always syntactically valid,
empty – the only value admissible to void, needed for selecting void in a union,
void – syntactically like a mode, but not one,
nil or "○" – a name not denoting anything, of an unspecified reference mode,
() or specifically [1:0]int – a vacuum is an empty array (here specifically of mode []int).
undefined – a standards reports procedure raising an exception in the runtime system.
ℵ – Used in the standards report to inhibit introspection of certain types. e.g. sema

ℵ'nin diğer örnekleri için aşağıya bakınız.

Terimi, sıfır olduğu var her zaman değerlendirir doğru her değişken için (ancak doğru kullanımı için yukarı bakınız olan  bir karşılaştırma değeri / = :), bilinmemektedir ise, buna göre: X < atlatma herhangi bir tamsayı için değerlendirir x .

ALGOL 68, tamsayı taşması, tamsayı bit gösterimi ve kayan nokta için sayısal doğruluk derecesi durumunda ne olacağını kasıtlı olarak tanımsız bırakır. Buna karşılık, Java dili , ikincisini aşırı belirttiği için eleştirilmiştir.

Her iki resmi rapor da standart dilin parçası olmayan bazı gelişmiş özellikler içeriyordu. Bunlar bir ℵ ile belirtildi ve etkin bir şekilde özel olarak kabul edildi. Örnek olarak "≮" ve "≯" içerir şablonları için outtype / INTYPE ham için ördek yazmak ve straightout ve straightin iç içe diziler ve yapıları "düzleştirme" için kullanım.

1973 raporundan alıntı:

§10.3.2.2. Transput modes
a) modesimplout = union (≮ℒ int≯, ≮ℒ real≯, ≮ℒ compl≯, bool, ≮ℒ bits≯,
           char, [ ] char);
b) modeouttype = ¢ an actual – declarer specifying a mode united
   from a sufficient set of modes none of which is 'void' or contains 'flexible',
   'reference to', 'procedure' or 'union of' ¢;
c) modesimplin = union (≮ref ℒ int≯, ≮ref ℒ real≯, ≮refcompl≯, ref bool,
           ≮ref ℒ bits≯, ref char, ref [ ] char, ref string);
d) modeintype = ¢ ... ¢;
 
§10.3.2.3. Straightening
a) opstraightout = (outtype x) [ ] simplout: ¢ the result of "straightening" 'x' ¢;
b) opstraightin = (intype x) [ ] simplin: ¢ the result of straightening 'x' ¢;

Diğer dillerle karşılaştırmalar

Revizyonlar

Belirtildiği durumlar dışında (bir üst simge ile ), yukarıda açıklanan dil "Gözden Geçirilmiş Rapor (r1) " dilidir .

Revize edilmemiş raporun dili

Orijinal dil ("Nihai Rapor" r0'a göre ) modun sözdiziminde farklılık gösterir ve işlem yapma , yani bir terimin değerini, terimi değerlendiren bir prosedüre zorlama özelliğine sahiptir . Prosedür, değerlendirmeleri tembelleştirmeye yönelik olacaktır . En faydalı uygulama, boole operatörlerinin kısa devreli değerlendirmesi olabilirdi. İçinde:

op andf = (bool a,proc bool b)bool:(a | b | false);
op orf = (bool a,proc bool b)bool:(a | true | b);

b yalnızca a doğruysa değerlendirilir .

ALGOL 68'de tanımlandığı gibi, beklendiği gibi çalışmadı, örneğin kodda:

if false andf co proc bool: co ( print ("Should not be executed"); true)
then ...

programcılar naif beklentilere karşı baskı olurdu sadece olduğu gibi çalıştırılır değeri sonra özenli kapalı-fıkra andf prosedürde olduğu. Yorumlanan proc bool : öğesinin metinsel olarak eklenmesi, çalışmasını sağlar.

Bazı uygulamalar, dilin genişletilmesiyle bu özel durum için beklenen davranışı taklit eder.

Revizyondan önce, programcı virgül ( gomma s ) yerine noktalı virgül kullanarak bir prosedürün argümanlarının teminat yerine seri olarak değerlendirilmesine karar verebilir .

Örneğin:

proc test = (real a; real b) :...
...
test (x plus 1, x);

Test edilecek ilk argümanın ikincisinden önce değerlendirilmesi garanti edilir, ancak her zamanki gibi:

proc test = (real a, b) :...
...
test (x plus 1, x);

daha sonra derleyici argümanları istediği sırayla değerlendirebilir.

IFIP ÇG 2.1'den uzatma önerileri

Raporun gözden geçirilmesinden sonra, uygulanabilirliği genişletmek için dile bazı uzantılar önerilmiştir:

  • kısmi parametreleştirme (diğer adıyla Currying ): bir çağrı için tüm parametrelerin değil, bazılarının belirtilmesiyle işlevlerin oluşturulması (daha az parametreyle), örneğin iki parametrenin, taban ve bağımsız değişkenin bir işlev logaritması, doğal, ikili veya on yıllık günlüğe özelleştirilebilir ,
  • modül uzantısı : harici bağlantının desteklenmesi için iki mekanizma önerilmiştir, aşağıdan yukarıya tanımlama modülleri , ALGOL 68-R'den tesislerin daha güçlü bir versiyonu ve ALGOL 68C'deki ve maddelerine benzer yukarıdan aşağıya deliklerENVIRONUSING
  • mod parametreleri : sınırlı parametrik polimorfizmin uygulanması için (listeler, ağaçlar veya diğer veri kapsayıcıları gibi veri yapıları üzerindeki çoğu işlem, ödeme yüküne dokunmadan belirtilebilir).

Şimdiye kadar, Algol 68 Genie'de yalnızca kısmi parametrelendirme uygulandı.

Gerçek ALGOL 68s spesifikasyonu ve uygulama zaman çizelgesi

İsim Yıl Amaç Durum Açıklama Hedef CPU lisanslama uygulama dili
Genelleştirilmiş ALGOL 1962 İlmi NL Genelleştirilmiş gramerler için ALGOL
ALGOL Y Y 1966 Teklif taslağı uluslararası Algol 68'in ilk versiyonu Şartname ACM
ALGOL 68 DR 1968 Teklif taslağı uluslararası IFIP ÇG 2.1 Taslak Rapor Şartname – Mart ACM
ALGOL 68 r0 1968 Standart uluslararası IFIP ÇG 2.1 Nihai Rapor Şartname – Ağustos ACM
ALGOL 68-R R 1970 Askeri Birleşik Krallık ICL 1900 ALGOL 60
EPOS ALGOL E 1971 İlmi
ALGOL 68RS RS 1972 Askeri Birleşik Krallık Taşınabilir derleyici sistemi ICL 2900/Serisi 39, Multics, VMS & C üreteci (1993) Kraliyet Telif Hakkı ALGOL 68RS
Algol 68 alanları ile 1972 Deneysel ve diğer Birleşik Krallık Algol 68'e alanların eklenmesi
Mini ALGOL 68 1973 Araştırma NL "Basit Algol 68 Programları için bir tercüman" Taşınabilir tercüman Matematik Merkezi ALGOL 60
KEKİK 1973 Araştırma Biz "Uygulama modellerinin önemi." UCLA
ALGOL 68C C 1975 İlmi Birleşik Krallık Cambridge Algol 68 ICL , IBM 360, PDP 10 ve Unix, Telefunken , Tesla ve Z80 (1980) Cambridge ALGOL 68C
ALGOL 68 Revize Rapor r1 1975 Standart uluslararası IFIP WG 2.1 Gözden Geçirilmiş Rapor Şartname ACM
Algol H H 1975 Deneysel ve diğer Birleşik Krallık Algol 68'in mod sistemine önerilen uzantılar Şartname ALGOL W
Odra Algol 68 1976 pratik kullanımlar SSCB/Polonya Odra 1204/IL Sovyet ALGOL 60
Oklahoma ALGOL 68 1976 programlama talimatı Amerika Birleşik Devletleri Oklahoma Eyalet Üniversitesi uygulaması IBM 1130 ve Sistem/370 /158 Bilinmeyen ANSI Fortran 66 .
Berlin ALGOL 68 1977 Araştırma DE "Berlin ALGOL 68 uygulaması" & Soyut bir ALGOL 68 Makinesi – makineden bağımsız Derleyici Berlin Teknik Üniversitesi CDL 2
FLACC F 1977 Çok amaçlı CA Gözden geçirilmiş Rapor, hata ayıklama özellikleriyle eksiksiz uygulama Sistem/370 kiralama, Chion Şirketi montajcı
ALGOL 68-RT RT 1979 İlmi Birleşik Krallık Paralel ALGOL 68-R
RS Algol rs 1979 İlmi Birleşik Krallık
ALGOL 68+ 1980 İlmi NL ALGOL 68'in önerilen süper dili
M-220 ALGOL 68 SSCB M-220 Sovyet EPSİLON
Leningrad ALGOL 68 L 1980 Telekomünikasyon SSCB Tam dil + modüller IBM, Aralık, CAMCOH, PS 1001 ve PC Sovyet
Etkileşimli ALGOL 68 I 1983 Birleşik Krallık artımlı derleme bilgisayar Ticari olmayan shareware
ALGOL 68S S 1985 İlmi uluslararası ALGOL 68'in güneş versiyonu Sun-3 , Sun SPARC ( SunOS 4.1 ve Solaris 2 altında ), Atari ST ( GEMDOS altında ), Acorn Archimedes ( RISC OS altında ), VAX-11 , Ultrix-32 altında
Algol68toC (ctrans) 1985 Elektronik Birleşik Krallık dan CTRANS ELLA ALGOL 68RS Taşınabilir C jeneratörü  Açık kaynaklı yazılım 1995 ALGOL 68RS
MK2 Etkileşimli ALGOL 68 1992 Birleşik Krallık artımlı derleme bilgisayar ticari olmayan shareware
Algol 68 Genie G 2001 Tam dil NL Standart teminat maddesi içerir Taşınabilir tercüman GPL C
Algol 68 Genie sürüm 2.0.0 2010 Tam dil NL Taşınabilir tercüman; seçilen birimlerin isteğe bağlı derlemesi GPL C

S3 dili yazmak için kullanılmıştır ICL VME işletim sistemini ve çok diğer sistem yazılımını ICL 2900 Serisi daha karmaşık özelliklerinin çoğunu ihmal, Ancak Algol 68. doğrudan türevi oldu ve seti ile temel modları değiştirilir doğrudan 2900 Serisi donanım mimarisiyle eşlenen veri türleri.

Uygulamaya özel uzantılar

Algol 68R (R) ile ilgili RRE görüntülenmesi için, ALGOL 68 alt-kümesi uygulama idi ICL'in 1900 . Orijinal dile dayalı olarak, ana alt küme kısıtlamaları, kullanımdan önce tanımlama ve paralel işleme olmamasıydı. Bu derleyici, 1970'lerde birçok bilgisayar bilimi öğrencisinin ALGOL 68'i ilk programlama dili olarak öğrendiği İngiltere üniversitelerinde popülerdi ; derleyici iyi hata mesajlarıyla ünlüydü.

ALGOL 68RS (RS) den RSRE (ALGOL 68R den önyükleyicisini) ALGOL 68RS yazılmış bir taşınabilir derleyici sistemi idi ve dahil çeşitli sistemler üzerinde uygulanan ICL 2900 / Seri 39 , Multics ve DEC VAX / VMS . Dil, Gözden Geçirilmiş Rapora dayanıyordu, ancak ALGOL 68R'ye benzer alt küme kısıtlamaları vardı. Bu derleyici, bir Algol68-to-C derleyicisi biçiminde hayatta kalır.

Algol 68S ise , (S) gelen Carnegie Mellon University paralel işleme gücü, bir dikey uzantısı eklenmesi ile geliştirilmiştir Eventing . Anahtar kelime olayı içeren herhangi bir değişken bildirimi , bu değişkene paralel değerlendirme için uygun atamalar yaptı, yani sağ taraf, C.mmp çok işlemcili sistemin işlemcilerinden birine taşınan bir prosedür haline getirildi . Bu tür değişkenlere erişim, atamanın sona ermesinden sonra ertelendi.

Cambridge ALGOL 68C (C) , ALGOL 68'in bir alt kümesini uygulayan, operatör tanımlarını kısıtlayan ve çöp toplamayı, esnek satırları ve biçimlendirilmiş aktarımı ihmal eden taşınabilir bir derleyiciydi.

M. van der Veer'den Algol 68 Genie (G) , günümüz bilgisayarları ve işletim sistemleri için bir ALGOL 68 uygulamasıdır.

"İyi niyetlere rağmen, bir programcı yanlışlıkla yerel bir uzantı kullanarak taşınabilirliği ihlal edebilir. Buna karşı korunmak için her uygulama bir PORTCHECK pragmat seçeneği sağlamalıdır. Bu seçenek yürürlükteyken, derleyici olarak tanıdığı her yapı için bir mesaj yazdırır. bazı taşınabilirlik kısıtlamalarını ihlal ediyor."

alıntılar

  • ... C'nin benimsediği tip kompozisyon şeması, belki de Algol'ün yandaşlarının onaylayacağı bir biçimde ortaya çıkmasa da, Algol 68'e önemli ölçüde borçludur. Algol'den aldığım temel kavram, diziler, işaretçiler (referanslar) ve işlevler (prosedürler) halinde oluşan atomik tiplere (yapılar dahil) dayanan bir tip yapısıydı. Algol 68'in sendikalar ve kadrolar kavramı da daha sonra ortaya çıkan bir etkiye sahipti. Dennis Ritchie Nisan 1993.
  • ... C'nin Algol 68'den inmediği doğrudur, ancak etkisi vardı, çoğu o kadar inceydi ki, çok düşündüğümde bile iyileşmesi zor. Özellikle, birleşim tipi (C'ye geç eklenmiş) A68'e herhangi bir ayrıntıda değil, böyle bir tipe sahip olma fikrinde borçludur. Daha derinde, genel olarak tip yapısı ve hatta, garip bir şekilde, bildirim sözdizimi (tip-kurucu kısmı) A68'den esinlenmiştir. Ve evet, elbette, "uzun". Dennis Ritchie , 18 Haziran 1988
  • "Tebrikler, efendiniz yaptı " – Niklaus Wirth
  • Onu ne kadar çok görürsem, o kadar mutsuz oluyorum – EW Dijkstra, 1968
  • [...] A68'in popülaritesinin, Amsterdam'dan [...] uzaklığı ile ters orantılı olduğu söylendiGuido van Rossum
  • [...] Yapabileceğimiz en iyi şey, "... karmaşık programların güvenilir bir şekilde oluşturulması için bir araç olarak, dil bir başarısızlıktı" şeklindeki düşüncemizi belirten bir azınlık raporu göndermekti. [...]CAR Hoare Ekim 1980 Turing Ödülü Dersinde
  • "[...] Yeterli bir programlama aracından, yapısı gereği programcıya işinin en zor yönlerinde, yani karmaşık programların güvenilir şekilde oluşturulmasında yardımcı olması her zamankinden daha fazla gerekli olacaktır. Burada önerilen dilin nasıl ileriye doğru önemli bir adım olduğunu göremiyoruz: tam tersine, programcının görevine ilişkin örtük görüşünün, diyelim ki on yıl öncekiyle çok aynı olduğunu düşünüyoruz. bir programlama aracı olarak, dil eskimiş olarak kabul edilmelidir. [...]" 23 Aralık 1968 tarihli 1968 Çalışma Grubu azınlık raporu.

Ayrıca bakınız

Referanslar

alıntılar

Atıfta bulunulan eserler

  • Brailsford, DF ve Walker, AN, ALGOL 68 Programlamaya Giriş , Ellis Horwood/Wiley, 1979
  • Lindsey, CH ve van der Meulen, SG, ALGOL 68'e Resmi Olmayan Giriş , Kuzey Hollanda, 1971
  • Lindsey, CH (1993-03-02). "ALGOL 68'in Tarihi". ACM SIGPLAN Bildirimleri . 28 (3): 97–132. doi : 10.1145/155360.155365 .
  • McGettrick, AD, ALGOL 68, Birinci ve İkinci Kurs , Cambridge Üniv. Basın, 1978
  • Peck, JEL, An ALGOL 68 Companion , Üniv. Britanya Kolumbiyası, Ekim 1971
  • Tanenbaum, AS, ALGOL 68 Üzerine Bir Eğitim , Bilgisayar Anketleri 8 , 155-190, Haziran 1976 ve 9 , 255-256, Eylül 1977, [9]
  • Woodward, PM ve Bond, SG, ALGOL 68-R Kullanıcılar sic Kılavuzu , Londra, Majestelerinin Kırtasiye Ofisi, 1972

Dış bağlantılar