ALGOL 60 - ALGOL 60

ALGOL 60
paradigmalar prosedürel , zorunlu , yapılandırılmış
Aile Algol
Tarafından tasarlandı Backus , Bauer , Green , Katz , McCarthy , Naur , Perlis , Rutishauser , Samelson , van Wijngaarden , Vauquois , Wegstein , Woodger
İlk ortaya çıktı 1960 ; 61 yıl önce ( 1960 )
Yazma disiplini Statik , güçlü
Kapsam sözlüksel
Tarafından etkilenmiş
ALGOL 58
Etkilenen
Çoğu sonraki zorunlu diller ( ALGOL benzeri diller olarak adlandırılır ), örneğin Simula , CPL , Pascal , Ada , C

ALGOL 60 ( Algorithmic Language 1960'ın kısaltması ), ALGOL bilgisayar programlama dilleri ailesinin bir üyesidir . Yapılandırılmış programlamanın yükselişinde önemli bir ilerlemeyi temsil eden kod bloklarını ve bunları sınırlandırmak için ve çiftlerini tanıtan ALGOL 58'i takip etti . ALGOL 60, sözcüksel kapsamda iç içe işlev tanımlarını uygulayan ilk dildi . CPL , Simula , BCPL , B , Pascal ve C dahil olmak üzere birçok başka programlama diline yol açtı . Pratik olarak çağın her bilgisayarında ALGOL 60 kavramlarına dayalı bir sistem programlama dili vardı . beginend

Niklaus Wirth , Pascal'ı geliştirmeye geçmeden önce kendi ALGOL W'sini ALGOL 60'a dayandırdı . Algol-W'nin yeni nesil ALGOL olması amaçlanmıştı ancak ALGOL 68 komitesi, temizlenmiş basitleştirilmiş ALGOL 60 yerine daha karmaşık ve gelişmiş bir tasarıma karar verdi. Resmi ALGOL sürümleri, ilk yayınlandıkları yıldan sonra adlandırılır. Algol 68, Algol 60'tan önemli ölçüde farklıdır ve kısmen böyle olduğu için eleştirilmiştir, böylece genel olarak "Algol", Algol 60'ın lehçelerini ifade eder.

Standardizasyon

ALGOL 60 – COBOL ile – standardizasyon arayan ilk dillerdi.

  • ISO 1538:1984 Programlama dilleri – Algol 60 (stabilize edilmiş)
  • ISO/TR 1672:1977 ALGOL temel sembollerinin donanımsal gösterimi ... (şimdi geri çekilmiştir)

Tarih

ALGOL 60, çoğunlukla Amerika Birleşik Devletleri ve Avrupa'daki araştırma bilgisayar bilimcileri tarafından kullanılmıştır. Ticari uygulamalarda kullanımı, açıklamasında standart girdi/çıktı olanaklarının olmaması ve büyük bilgisayar satıcılarının dile ilgi duymaması nedeniyle engellendi. Ancak ALGOL 60, algoritmaların yayınlanması için standart haline geldi ve gelecekteki dil gelişimi üzerinde derin bir etkisi oldu.

John Backus , özellikle ALGOL 58 için programlama dillerini tanımlayan Backus normal form yöntemini geliştirdi. Bu, Peter Naur tarafından ALGOL 60 için revize edildi ve genişletildi ve Donald Knuth'un önerisiyle Backus–Naur formu olarak yeniden adlandırıldı .

Peter Naur: "ALGOL Bülteni'nin editörü olarak, dilin uluslararası tartışmalarının içine çekildim ve Kasım 1959'da Avrupa dil tasarım grubunun üyesi olarak seçildim. Bu sıfatla, ALGOL 60 raporunun editörüydüm. Ocak 1960'ta Paris'te ALGOL 60 toplantısının bir sonucu olarak."

Paris'teki toplantıya şu kişiler katıldı (11-16 Ocak):

Alan Perlis toplantının canlı bir tanımını yaptı: "Toplantılar yorucu, bitmez tükenmez ve canlandırıcıydı. İyi fikirlerin yanı sıra başkalarının kötü fikirleri de bir kenara atıldığında insan sinirleniyordu. Yine de tüm süreç boyunca titizlik devam etti. 13 mükemmeldi."

Dil başlangıçta özyineleme içermiyordu . Bazı komitelerin isteklerine karşı son dakikada şartnameye eklendi.

ALGOL 60, onu takip eden birçok dile ilham verdi. Tony Hoare , "Zamanının o kadar ilerisinde bir dil ki, sadece önceki dillerde değil, aynı zamanda neredeyse tüm ardıllarında da bir gelişme" dedi.

ALGOL 60 uygulama zaman çizelgesi

Bugüne kadar Algol 60'ın en az 70 büyütmesi, uzantısı, türevi ve alt dili olmuştur.

İsim Yıl Yazar Durum Açıklama Hedef CPU
X1 ALGOL 60 Ağustos 1960 Edsger W. Dijkstra ve Jaap A. Zonneveld Hollanda ALGOL 60'ın ilk uygulaması Elektrolojik X1
Algol 1960 Edgar T. Ütüler Amerika Birleşik Devletleri Algol 60 CDC 1604
Burroughs Algol
(Çeşitli varyantlar)
1961 Burroughs Corporation (Hoare, Dijkstra ve diğerlerinin katılımıyla ) Amerika Birleşik Devletleri Temeli Burroughs (ve şimdi Unisys MCP bilgisayarlar tabanlı) Burroughs büyük sistemleri
ve orta kademeleri de.
Vaka ALGOL 1961 Amerika Birleşik Devletleri Simula , başlangıçta Case ALGOL'un bir simülasyon uzantısı olarak sözleşmeliydi. UNIVAC 1107
GOGOL 1961 William M. McKeeman Amerika Birleşik Devletleri ODIN zaman paylaşım sistemi için PDP-1
DASK ALGOL 1961 Peter Naur , Jørn Jensen Danimarka Algol 60 DASK, Regnecentralen'de çalışıyor
SMIL ALGOL 1962 Torgil Ekman , Carl-Erik Fröberg İsveç Algol 60 SMIL at Lund Üniversitesi
GİER ALGOL 1962 Peter Naur , Jørn Jensen Danimarka Algol 60 GIER, Regnecentralen'de çalışıyor
Dartmouth ALGOL 30 1962 Thomas Eugene Kurtz ve ark. Amerika Birleşik Devletleri LGP-30
Alcor Mainz 2002 1962 Ursula Hill-Samelson, Hans Langmaack Almanya Siemens 2002
ALCOR-ILLINOIS 7090 1962
Manfred Paul, Hans Rüdiger Wiehle, David Gries ve Rudolf Bayer ABD, Batı Almanya Algol 60 Illinois ve TH München'de
Uygulandı , 1962-1964
IBM 7090
USS 90 Algol 1962 L. Petrone İtalya
Elliott ALGOL 1962 ARABA Birleşik Krallık 1980 Turing Ödülü dersinde tartışıldı Elliott 803 ve Elliott 503
Algol 60 1962 Roland Strobel Doğu Almanya Uygulamalı Matematik Enstitüsü, Berlin'deki Alman Bilimler Akademisi tarafından uygulanmaktadır. Zeiss-Rechenautomat ZRA 1
Algol Çevirmen 1962 G. van der Mey ve WL van der Poel Hollanda Staatsbedrijf der Posterijen, Telegrafie ve Telefonie ZEBRA
Kidsgrove Algol 1963 FG Duncan Birleşik Krallık İngiliz Elektrik Şirketi KDF9
VALGOL 1963 Val Schorre Amerika Birleşik Devletleri META II derleyici derleyicisinin testi
FP6000 Algol 1963 Roger Moore Kanada Saskatchewan Power Corp için yazılmış FP6000
bileme taşı 1964 Brian Randell ve Lawford John Russell Birleşik Krallık İngiliz Elektrik Şirketi Atom Enerjisi Bölümü. İçin Öncül Ferranti Pegasus , Ulusal Fiziksel Laboratuvarları ACE ve İngiliz Elektrikli DEUCE uygulamaları. İngiliz Elektrik Şirketi KDF9
ALGOL 60 1964 Jean-Claude Boussard Fransa Institut d'informatique et Mathématiques aplikleri de Grenoble  [ fr ] IBM 7090
ALGOL 60 1965 Claude Çifti  [ fr ] Fransa Nancy'deki Faculté des Sciences de hesap merkezi IBM 1620
NU ALGOL 1965 Norveç UNIVAC
Algol 60 1965 FEJ Kruseman Aretz Hollanda EL-X8 için MC derleyicisi Elektrolojik X8
ALGEK 1965 SSCB Minsk-22 АЛГЭК, ekonomik görevler için ALGOL-60 ve COBOL desteğine dayalı
MALGOL 1966 yayın A. Viil, M Kotli ve M. Rakhendi, Estonya SSC Minsk-22
ALGAMLAR 1967 GAMS grubu (ГАМС, группа автоматизации программирования для машин среднего класса), Comecon Bilim Akademileri işbirliği Comecon Minsk-22 , daha sonra ES EVM , BESM
ALGOL/ZAM 1967 Polonya Polonya ZAM bilgisayarı
Çin Algolü 1972 Çin Sembol sistemi aracılığıyla ifade edilen Çince karakterler
DG/L 1972 Amerika Birleşik Devletleri DG Eclipse Bilgisayar ailesi
burun 1990 Erik Schoenfelder Almanya Tercüman Linux ve MS Windows
MARST 2000 Andrew Makhorin Rusya Algol-60 - C çevirmen GNU Derleyici Koleksiyonu tarafından desteklenen tüm CPU'lar; MARST, GNU projesinin bir parçasıdır

Burroughs lehçeleri, ESPOL ve NEWP gibi özel sistem programlama lehçelerini içeriyordu .

Özellikler

ALGOL 60, resmi olarak tanımlandığı şekliyle hiçbir I/O tesisine sahip değildi; uygulamalar, birbirleriyle nadiren uyumlu olacak şekilde kendilerini tanımladılar. Buna karşılık, ALGOL 68, kapsamlı bir aktarım kütüphanesi (Giriş/Çıkış için ALGOL 68 tabiri) olanakları sundu .

ALGOL 60 , parametre geçişi için iki değerlendirme stratejisi sağladı : ortak değere göre arama ve ada göre arama . Kullanılacak olan her resmi parametre için belirtilen prosedür bildirimi: değere göre çağrı için belirtilen değer ve ada göre çağrı için ihmal edilen değer. Ada göre arama, referansa göre aramanın aksine belirli etkilere sahiptir . Örneğin, parametreleri value veya referans olarak belirtmeden, iletilen gerçek parametreler bir tamsayı değişkeni ve aynı tamsayı değişkeni tarafından indekslenen bir dizi ise, iki parametrenin değerlerini değiştirecek bir prosedür geliştirmek mümkün değildir. . Bir işleve takas(i, A[i]) için bir işaretçi geçirmeyi düşünün. Artık her takas referans alındığında yeniden değerlendirilir. i := 1 ve A[i] := 2 deyin, bu nedenle her takas başvurusu yapıldığında, değerlerin diğer kombinasyonunu döndürür ([1,2], [2,1], [1,2] vb.) üzerinde). Gerçek argüman olarak geçirilen rastgele bir işlev ile benzer bir durum ortaya çıkar.

Ada göre arama, birçok derleyici tasarımcısı tarafından, onu uygulamak için kullanılan ilginç " thunks " için bilinir . Donald Knuth , " özyineleme ve yerel olmayan referansları " doğru şekilde uygulayan derleyicileri ayırmak için " erkek ya da erkek testi " tasarladı . Bu test, bir isme göre arama örneği içerir.

ALGOL 60 Ayrılmış kelimeler ve kısıtlı tanımlayıcılar

Standart Burroughs büyük sistemler alt dilinde bu tür 35 ayrılmış kelime vardır :

  • ALPHA
  • ARRAY
  • BEGIN
  • BOOLEAN
  • COMMENT
  • CONTINUE
  • DIRECT
  • DO
  • DOUBLE
  • ELSE
  • END
  • EVENT
  • FALSE
  • FILE
  • FOR
  • FORMAT
  • GO
  • IF
  • INTEGER
  • LABEL
  • LIST
  • LONG
  • OWN
  • POINTER
  • PROCEDURE
  • REAL
  • STEP
  • SWITCH
  • TASK
  • THEN
  • TRUE
  • UNTIL
  • VALUE
  • WHILE
  • ZIP

Standart Burroughs büyük sistemler alt dilinde bu tür 71 kısıtlanmış tanımlayıcı vardır:

  • ACCEPT
  • AND
  • ATTACH
  • BY
  • CALL
  • CASE
  • CAUSE
  • CLOSE
  • DEALLOCATE
  • DEFINE
  • DETACH
  • DISABLE
  • DISPLAY
  • DIV
  • DUMP
  • ENABLE
  • EQL
  • EQV
  • EXCHANGE
  • EXTERNAL
  • FILL
  • FORWARD
  • GEQ
  • GTR
  • IMP
  • IN
  • INTERRUPT
  • IS
  • LB
  • LEQ
  • LIBERATE
  • LINE
  • LOCK
  • LSS
  • MERGE
  • MOD
  • MONITOR
  • MUX
  • NEQ
  • NO
  • NOT
  • ON
  • OPEN
  • OR
  • OUT
  • PICTURE
  • PROCESS
  • PROCURE
  • PROGRAMDUMP
  • RB
  • READ
  • RELEASE
  • REPLACE
  • RESET
  • RESIZE
  • REWIND
  • RUN
  • SCAN
  • SEEK
  • SET
  • SKIP
  • SORT
  • SPACE
  • SWAP
  • THRU
  • TIMES
  • TO
  • WAIT
  • WHEN
  • WITH
  • WRITE

ve ayrıca tüm içsel işlevlerin adları.

Standart operatörler

Öncelik Şebeke
ilk
aritmetik
ilk ↑ (güç)
ikinci ×, / (gerçek), ÷ (tamsayı)
üçüncü +, -
ikinci <, ≤, =, ≥, >, ≠
üçüncü ¬ (değil)
dördüncü ∧ (ve)
beşinci ∨ (veya)
altıncı ⊃ (ima)
yedinci ≡ (denklik)

Örnekler ve taşınabilirlik sorunları

Kod örneği karşılaştırmaları

ALGOL 60

procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
    value n, m; array a; integer n, m, i, k; real y;
comment The absolute greatest element of the matrix a, of size n by m,
    is transferred to y, and the subscripts of this element to i and k;
begin
    integer p, q;
    y := 0; i := k := 1;
    for p := 1 step 1 until n do
        for q := 1 step 1 until m do
            if abs(a[p, q]) > y then
                begin y := abs(a[p, q]);
                    i := p; k := q
                end
end Absmax

Uygulamalar, kalın yazılan metnin nasıl yazılması gerektiğine göre farklılık gösterir. Kelime tırnak işaretleri dahil 'INTEGER', yerine bazı uygulamalarda kullanılması gerekir tamsayı suretle, yukarıda, tayin özel anahtar kelime olarak.

Aşağıda Elliott 803 ALGOL kullanılarak bir tablonun nasıl oluşturulacağına dair bir örnek verilmiştir :

 FLOATING POINT ALGOL TEST'
 BEGIN REAL A,B,C,D'

 READ D'

 FOR A:= 0.0 STEP D UNTIL 6.3 DO
 BEGIN
   PRINT PUNCH(3),££L??'
   B := SIN(A)'
   C := COS(A)'
   PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C'
 END'
 END'

ALGOL 60 ailesi

ALGOL 60'ın I/O tesisleri olmadığı için ALGOL'de taşınabilir bir merhaba dünya programı yoktur . Aşağıdaki program, bir Unisys A-Serisi anabilgisayar için bir ALGOL uygulamasını derleyebilir ve üzerinde çalışabilir (ve yine de çalışacak) ve Michigan Üniversitesi'ndeki Dil Kılavuzundan alınan kodun basit bir basitleştirmesidir - Dearborn Bilgisayar ve Bilgi Bilimleri Bölümü Merhaba dünya ! ALGOL Örnek Program sayfası.

BEGIN
  FILE F(KIND=REMOTE);
  EBCDIC ARRAY E[0:11];
  REPLACE E BY "HELLO WORLD!";
  WRITE(F, *, E);
END.

Satır içi biçimi kullanan daha basit bir program:

 BEGIN
   FILE F(KIND=REMOTE);
   WRITE(F, <"HELLO WORLD!">);
 END.

Display ifadesini kullanan daha da basit bir program:

BEGIN DISPLAY("HELLO WORLD!") END.

Elliott Algol I/O'nun kullanıldığı alternatif bir örnek aşağıdaki gibidir. Elliott Algol, burada "open-string-quote" ve "close-string-quote" için farklı karakterler kullandı; '  ve  ' .

 program HiFolks;
 begin
    print Hello world
 end;

İşte Elliott 803 Algol'ün bir versiyonu (A104) Standart Elliott 803, 5 delikli kağıt bant kullanıyordu ve bu nedenle sadece büyük harf kullanıyordu. Kodda herhangi bir alıntı karakteri yoktu, bu nedenle açık alıntı için £ (pound işareti) kullanıldı ve ? (soru işareti) yakın alıntı için. Özel diziler çift tırnak içine alındı ​​(örneğin ££L?? teleprinter'da yeni bir satır oluşturdu).

  HIFOLKS'
  BEGIN
     PRINT £HELLO WORLD£L??'
  END'

BİT 1900 dizisi Algol I / O versiyonu kağıt şerit ya da zımbalanmış karttan giriş izin verdi. Kağıt bant 'dolu' modu küçük harf kullanımına izin verdi. Çıktı bir satır yazıcıya verildi. '(',')' ve % kullanımına dikkat edin.

  'PROGRAM' (HELLO)
  'BEGIN'
     'COMMENT' OPEN QUOTE IS '(', CLOSE IS ')', PRINTABLE SPACE HAS TO
               BE WRITTEN AS % BECAUSE SPACES ARE IGNORED;
     WRITE TEXT('('HELLO%WORLD')');
  'END'
  'FINISH'

Ayrıca bakınız

Referanslar

daha fazla okuma

Dış bağlantılar