Algol 68: verschil tussen versies

Uit Wikipedia, de vrije encyclopedie
Verwijderde inhoud Toegevoegde inhoud
Rudolphous (overleg | bijdragen)
taal
Regel 26: Regel 26:


==Orthogonaliteit==
==Orthogonaliteit==

Met orthogonaliteit wordt in dit verband bedoeld dat taalconstructies zo algemeen toepasbaar zijn als mogelijk. Voordeel hiervan is dat de programmeur alleen een paar algemene taalconstructies hoeft te leren, in plaats van een heleboel specifieke constructies voor specifieke situatie. Nadelen zijn dat dat allerlei weinig gebruikte combinaties wel geldig zijn, wat het voorkomen van niet-opgespoorde programmeerfouten in de hand werkt, en dat alle combinaties van alle constructies wel een ondubbelzinnige interpretatie moeten hebben, wat de specificatie ingewikkeld maakt.
Met orthogonaliteit wordt in dit verband bedoeld dat taalconstructies zo algemeen toepasbaar zijn als mogelijk. Voordeel hiervan is dat de programmeur alleen een paar algemene taalconstructies hoeft te leren, in plaats van een heleboel specifieke constructies voor specifieke situatie. Nadelen zijn dat dat allerlei weinig gebruikte combinaties wel geldig zijn, wat het voorkomen van niet-opgespoorde programmeerfouten in de hand werkt, en dat alle combinaties van alle constructies wel een ondubbelzinnige interpretatie moeten hebben, wat de specificatie ingewikkeld maakt.


Een voorbeeld is dat in Algol 68 [[statement]]s en [[expressie]]s grotendeels uitwisselbaar zijn: het is zondermeer geldig om dingen op te schrijven als
Een voorbeeld is dat in Algol 68 [[statement]]s en [[expressie]]s grotendeels uitwisselbaar zijn: het is zonder meer geldig om dingen op te schrijven als


<code>
<code>
Regel 37: Regel 36:


==Typering==
==Typering==

Algol 68 is sterk, statisch getypeerd: elke variabele, of om precies te zijn elke expressie die een geheugenlocatie aanduidt, heeft een specifiek type, en alle waarden die de locatie aan kan nemen moeten van dat type zijn.
Algol 68 is sterk, statisch getypeerd: elke variabele, of om precies te zijn elke expressie die een geheugenlocatie aanduidt, heeft een specifiek type, en alle waarden die de locatie aan kan nemen moeten van dat type zijn.


Regel 47: Regel 45:


==Voetnoten==
==Voetnoten==

<references/>
<references/>


==Externe links==
==Externe links==

Veel details over Algol 68, de motivatie erachter, invloeden van en op andere programmeertalen, persoonlijke anekdotes, en de broodnodige humor zijn te vinden in
Veel details over Algol 68, de motivatie erachter, invloeden van en op andere programmeertalen, persoonlijke anekdotes, en de broodnodige humor zijn te vinden in
*[http://portal.acm.org/citation.cfm?id=155365 ''A history of ALGOL 68'', door C.H. Lindsey in: ''The second ACM SIGPLAN Conference on the History of Programming Languages, Cambridge MA (1993), pp. 97-132]
*[http://portal.acm.org/citation.cfm?id=155365 ''A history of ALGOL 68'', door C.H. Lindsey in: ''The second ACM SIGPLAN Conference on the History of Programming Languages, Cambridge MA (1993), pp. 97-132]

Versie van 11 mei 2009 20:25

Algol 68
Paradigma procedureel; vnl. imperatief, met wat ondersteuning voor parallel en functioneel programmeren; multi-paradigma
Verschenen 1968
Ontworpen door Adriaan van Wijngaarden, Barry J. Mailloux, John E. L. Peck, Cornelis H. A. Koster en anderen
Huidige versie laatste revisie in 1975 [1]
Typesysteem statisch, sterk
Beïnvloed door Algol 60, Algol Y
Invloed op C, C++, Bourne-shell, Bash, Ada, Python en anderen
Website Algol 68 Genie [2]
Portaal  Portaalicoon   Informatica

Algol-68 is een procedurele programmeertaal, ontworpen in 1968 als beoogd opvolger van Algol 60, door een werkgroep onder leiding van Aad van Wijngaarden. Het doel was om met een algemeen bruikbare programmeertaal te komen die tegelijk veelzijdig en netjes opgezet en gespecificeerd moest zijn. De taal is omvangrijk, met allerlei innovatieve voorzieningen, maar tegelijk erg orthogonaal. De zeer gedetailleerde specificatie is sinds de herziening in 1975 niet veranderd. De syntaxis van de taal, inclusief het niet-contextvrije aspect, is helemaal gespecificeerd in de speciaal voor dit doel ontwikkelde Van Wijngaarden-grammatica.

De ingewikkeldheid en ambities van taal en specificatie zorgden al tijdens de ontwikkeling voor weerstand, ook binnen de werkgroep: Niklaus Wirth stapte er uit en kwam met het eenvoudigere Pascal. Ook de meeste Algol 68-compilers ondersteunen niet alle taalvoorzieningen, maar ze ondersteunen wel een taal die rijker en ingewikkelder is dan Pascal.

Het gebruik van Algol 68 is dan vooral tot het onderwijs beperkt gebleven, waar Pascal populairder was; dit terwijl ook Pascal lange tijd een puur academisch product is gebleven in vergelijking met talen als Fortran, PL/1 en C.

Het belang van Algol 68 ligt daarom vooral in de innovatieve taalconstructies en beschrijvingstechnieken, waarvan veel bij latere talen is overgenomen.

Orthogonaliteit

Met orthogonaliteit wordt in dit verband bedoeld dat taalconstructies zo algemeen toepasbaar zijn als mogelijk. Voordeel hiervan is dat de programmeur alleen een paar algemene taalconstructies hoeft te leren, in plaats van een heleboel specifieke constructies voor specifieke situatie. Nadelen zijn dat dat allerlei weinig gebruikte combinaties wel geldig zijn, wat het voorkomen van niet-opgespoorde programmeerfouten in de hand werkt, en dat alle combinaties van alle constructies wel een ondubbelzinnige interpretatie moeten hebben, wat de specificatie ingewikkeld maakt.

Een voorbeeld is dat in Algol 68 statements en expressies grotendeels uitwisselbaar zijn: het is zonder meer geldig om dingen op te schrijven als

 i := j +:= 5;   # tel 5 op bij j; wijs de waarde (5) van het resultaat (j) toe aan i #
 (i := j) +:= 5  # wijs de waarde van j toe aan i; tel bij het resultaat (i) 5 op #

Typering

Algol 68 is sterk, statisch getypeerd: elke variabele, of om precies te zijn elke expressie die een geheugenlocatie aanduidt, heeft een specifiek type, en alle waarden die de locatie aan kan nemen moeten van dat type zijn.

Tegelijk is er echter een ingewikkelde coercie (automatische typeconversie) afhankelijk van de context waarin een expressie voorkomt. Zelfs het nemen van de waarde van een variabele (zoals in i := j) is in Algol 68 een coercie.

Willekeurig complexe typen kunnen geconstrueerd worden met behulp van onder andere de constructoren PROC (om subroutines te maken met argumenten en resultaat van een gegeven type) en REF (om het type aan te duiden waar waarden van het gegeven type in gestopt kunnen worden). Dit is veel nagevolgd, bijvoorbeeld in C, terwijl andere talen hogere-ordefuncties en pointers van pointers gewoon met een vast pointer-type "pointer" aanduiden (wat in de praktijk, door casting, ook veel gebeurt in C), of zelfs helemaal niet toestaan.

Het REF-mechanisme bleek door de automatische typecoercie en andere syntactische afkortingen soms voor verwarring bij gebruikers te zorgen, zoals Tony Hoare al vreesde. Dit is beter in Pascal en C.

Voetnoten


Externe links

Veel details over Algol 68, de motivatie erachter, invloeden van en op andere programmeertalen, persoonlijke anekdotes, en de broodnodige humor zijn te vinden in

Andere verwijzingen: