ALGOL 68 - ALGOL 68
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 r0 |
kararlı sürüm | Algol 68/RR / Revize Rapor: 1973 r1
|
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.
ALGOL 68'in tasarımının ana amaçları ve ilkeleri:
- Açıklamanın eksiksizliği ve netliği
- Tasarımın dikliği
- Güvenlik
- 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:
- a68g , GPLv3 , Marcel van der Veer tarafından yazılmıştır.
- algol68toc , ALGOL 68RS'nin açık kaynaklı bir yazılım portu .
- GCC için deneysel Algol68 ön ucu, Jose E. Marchesi tarafından yazılmıştır.
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
- Mart 1968: Algoritmik Dil ALGOL 68 Üzerine Taslak Rapor – Düzenleyen: Adriaan van Wijngaarden , Barry J. Mailloux , John Peck ve Cornelis HA Koster .
": Koster: Van Wijngaarden kez olarak biraz dil-yanak dört yazarlar, özelliği transputter , Peck: syntaxer, MAILLOUX: uygulayıcı, Van Wijngaarden: taraf ideologist." - Koster.
- Ekim 1968: Algoritmik Dil ALGOL 68 Üzerine Son Taslak Raporu – Bölüm 1-9 Bölüm 10-12 – Düzenleyen: A. van Wijngaarden, BJ Mailloux, JEL Peck ve CHA Koster.
- Aralık 1968: Algoritmik Dil Üzerine Rapor ALGOL 68 – Numerische Mathematik'ten Offprint, 14, 79-218 (1969); Springer-Verlag. – Düzenleyen: A. van Wijngaarden, BJ Mailloux, JEL Peck ve CHA Koster.
- Mart 1970: Azınlık raporu, ALGOL Bülteni AB31.1.1 - Edsger Dijkstra , Fraser Duncan , Jan Garwick , Tony Hoare , Brian Randell , Gerhard Seegmüller , Wlad Turski ve Mike Woodger tarafından imzalandı .
- Eylül 1973: Algoritmik Dil Üzerine Gözden Geçirilmiş Rapor Algol 68 – Springer-Verlag 1976 – Düzenleyen: A. van Wijngaarden, B. Mailloux, J. Peck, K. Koster, M. Sintzoff, CH Lindsey, Lambert Meertens ve Richard G. Fisker .
- ALGOL 68 tasarımında aktif olan diğer WG 2.1 üyeleri: Friedrich L. Bauer • Hans Bekic • Gerhard Goos • Peter Zilahy Ingerman • Peter Landin • Charles H. Lindsey • John McCarthy • Jack Merner • Peter Naur • Manfred Paul • Willem van der Poel • Doug Ross • Klaus Samelson • Michel Sintzoff • Niklaus Wirth • Nobuo Yoneda .
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 ( mode
Algol 68 dilinde s olarak adlandırılır ) real
, int
, compl
( karmaşık sayı ) bool
, char
, bits
ve 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 float
and double
, veya int
and long
and short
, vb.'yi tanımlamak yerine , ALGOL 68 değiştiriciler sağlar , böylece örneğin şu anda yaygın double
olan long real veya long long real olarak yazılır . Prelude sabitleri max real
ve min long int
farklı 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ü" .
- bayt – char öğesinin "paketlenmiş vektörü" .
- string – esnek 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.
- long – int , real veya compl öğesini daha uzun bir boyutta ilan edin.
- short – int , 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 konumu | Mevcut zorlamalar | Bağlamda zorlama örnekleri | ||||
---|---|---|---|---|---|---|
Sağ taraf:
Ayrıca:
|
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]REALvesaire. |
|||||
|
Örnek:
|
|||||
|
Örnekler:
REF REF BOOL to BOOL REF REF REF INT to INT |
|||||
|
Ö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 |
|||||
"~" olarak atamaların LHS'si: ~ := ...
|
Örnek:
|
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 pi
bir 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 begin
ve 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, max
hem 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 ip
ve jp
iş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
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 newpage
ve newline
argü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
.
- Belirli bir kitap, adına yapılan bir aramayla adıyla bulunabilir
-
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
, veproc 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
- Cambridge CAP bilgisayarı – Sayfalandırma gibi yakından ilişkili birkaç korumalı prosedür BCPL ile yazılmış olmasına rağmen , işletim sistemini oluşturan tüm prosedürler ALGOL 68C'de yazılmıştır .
- Eldon 3 – ICL 1900 için Leeds Üniversitesi'nde geliştirildi ALGOL 68-R'de yazılmıştır .
- Flex makinesi – Donanım, tümü ALGOL 68RS'de yazılmış bir işletim sistemi, (modüler) derleyici, düzenleyici, çöp toplayıcı ve dosyalama sistemi ile özel ve mikro programlanabilirdi . Komut kabuğu Curt, Algol-68 modlarına benzer şekilde yazılan verilere erişmek için tasarlanmıştır.
- VME – S3 , VME işletim sisteminin uygulama diliydi. S3, ALGOL 68'e dayanıyordu, ancak veri türleri ve operatörleri ICL 2900 Serisi tarafından sunulanlara uygundu .
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:
- ELLA – bir donanım tanımlama dili ve destek araç seti. 1980'lerde ve 1990'larda Kraliyet Sinyalleri ve Radar Kuruluşu tarafından geliştirildi .
- RAF Vuruş Komuta Sistemi – "... Üç adam-yıllık bir çalışma ile 400K hatasız ALGOL 68-RT kodu üretildi. ..."
Kitaplıklar ve API'ler
- NAG Numerical Libraries – sayı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) mode ℵ simplout = union (≮ℒ int≯, ≮ℒ real≯, ≮ℒ compl≯, bool, ≮ℒ bits≯, char, [ ] char); b) mode ℵ outtype = ¢ 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) mode ℵ simplin = union (≮ref ℒ int≯, ≮ref ℒ real≯, ≮ref ℒ compl≯, ref bool, ≮ref ℒ bits≯, ref char, ref [ ] char, ref string); d) mode ℵ intype = ¢ ... ¢; §10.3.2.3. Straightening a) op ℵ straightout = (outtype x) [ ] simplout: ¢ the result of "straightening" 'x' ¢; b) op ℵ straightin = (intype x) [ ] simplin: ¢ the result of straightening 'x' ¢;
Diğer dillerle karşılaştırmalar
- 1973 – Algol 68 ve PL/I – SH Valentine Üzerine Karşılaştırmalı Notlar – Şubat 1973
- 1973 - BR Alexander ve GE Hedrick. PL/1 ve ALGOL 68 Karşılaştırması. Uluslararası Bilgisayarlar ve Çin Giriş/Çıkış Sistemleri Sempozyumu. s. 359-368.
- 1976 – ALGOL 68, JOVIAL J3B, Pascal , Simula 67 ve TACPOL Versus TINMAN'in Değerlendirilmesi – Ortak Yüksek Dereceli Programlama Dili için Gereksinimler.
- 1976 - Bir Dil Karşılaştırma - Programlama Dilleri ALGOL 68 Özelliklerinin Karşılaştırılması, CAMAC-IML , Mercan 66 , PAS 1 , İNCİ , PL / 1 , Procol , RTL / 2 İlgili Olarak Gerçek Zamanlı Programlama - R. Roessler'e; K. Schenk – Ekim 1976 [7]
- 1976 – Ortak Yüksek Dereceli Programlama Dili için ALGOL 68, JOVIAL J3B, PASCAL, SIMULA 67 ve TACPOL Versus [Steelman dil gereksinimleri|TINMAN] Gereksinimlerinin Değerlendirilmesi. Ekim 1976 [8]
- 1977 – Yüksek Düzen-Dil Çalışma Grubuna Rapor (HOLWG) – Yönetici Özeti – Dil Değerlendirme Koordinasyon Komitesi – PL/I , Pascal , ALGOL 68, HAL/S , PEARL , SPL/I , PDL/2 , LTR, CS-4 , LIS , Euclid , ECL , Moral, RTL/2 , Fortran , COBOL , ALGOL 60 , TACPOL , CMS-2 , Simula 67, JOVIAL J3B, JOVIAL J73 & Coral 66 .
- 1977 – PASCAL ve ALGOL karşılaştırması 68 – Andrew S. Tanenbaum – Haziran 1977.
- 1980 – Çeşitli Programlama Dili Uygulamalarının Eleştirel Bir Karşılaştırması – Algol 60, FORTRAN, Pascal ve Algol 68.
- 1993 – Beş Küçük Dil ve Nasıl Büyüdükleri – BLISS , Pascal , Algol 68, BCPL & C – Dennis M. Ritchie – Nisan 1993.
- 1999 – Ortogonallik Üzerine : Algol68, Pascal ve C
- 2000 – ALGOL 68 ve BLISS'deki Dizilerin Karşılaştırılması – Virginia Üniversitesi – Michael Walker – Bahar 2000
- 2009 - Go On - Ah, devam et - Ne kadar iyi Google'ın edecek Git Brand X programlama dili karşısında ayağa? – David Given – Kasım 2009
- 2010 – Algol ve Pascal , “Programlama Dillerinde Kavramlar – Blok yapılı prosedürel diller”den – Marcelo Fiore tarafından
- ALGOL 68 ve C++ Karşılaştırması
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 delikler
ENVIRON
USING
- 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öylendi – Guido 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
- Algoritmik Dil Üzerine Gözden Geçirilmiş Rapor ALGOL 68 Dilin kullanıcıları ve uygulayıcıları için resmi referans (büyük pdf dosyası, Algol Bülteninden taranmıştır)
- Algoritmik Dil Hakkında Gözden Geçirilmiş Rapor ALGOL 68 Gözden Geçirilmiş Raporun Köprü Bağlantılı HTML versiyonu
- Algol 68 A Öğretici tarafından, Andrew S. Tanenbaum içinde, Bilgi İşlem Araştırmaları , Cilt. 8, No. 2, Haziran 1976, Corrigenda ile birlikte(Cilt 9, No. 3, Eylül 1977)
- Algol 68 Genie – bir GNU GPL Algol 68 derleyici-yorumlayıcısı
- SourceForge'da açık kaynak ALGOL 68 uygulamaları
- Algol68 Standard Hardware gösterimi (.pdf) 2014-01-02 tarihinde Wayback Machine'de arşivlendi
- Из истории создания компилятора с Алгол 68
- Algol 68 – SSCB'de 25 Yıl
- Система программ динамической поддержки для транслятора с Алгол 68
- Algol68 mirasına sahip C geçmişi
- McJones, Paul, "Algol 68 uygulamaları ve lehçeleri" , Yazılım Koruma Grubu , Bilgisayar Tarihi Müzesi , 2011-07-05
- Küçük deneyler için Web özellikli ALGOL 68 derleyici