ALGOL 68C est un langage de programmation informatique impératif , un dialecte d' ALGOL 68 , qui a été développé par Stephen R. Bourne et Michael Guy pour programmer le Cambridge Algebra System (CAMAL). Le compilateur initial a été écrit dans le Princeton Syntax Compiler (PSYCO, par Edgar T. Irons) qui a été implémenté par JH Mathewman à Cambridge.
ALGOL 68C a ensuite été utilisé pour le système d'exploitation CHAOS pour l' ordinateur de sécurité basé sur les capacités CAP de l'Université de Cambridge en 1971. Les autres premiers contributeurs étaient Andrew D. Birrell et Ian Walker.
Des travaux ultérieurs ont été effectués sur le compilateur après que Bourne ait quitté l'Université de Cambridge en 1975. Le ramasse-miettes a été ajouté et la base de code fonctionne toujours sur un OS/MVT émulé utilisant Hercules .
Le compilateur ALGOL 68C générait une sortie en ZCODE , un langage intermédiaire basé sur des registres, qui pouvait ensuite être interprété ou compilé en un exécutable natif. Cette capacité à interpréter ou à compiler ZCODE a encouragé le portage d'ALGOL 68C sur de nombreuses plates-formes informatiques différentes . Outre l' ordinateur CAP , le compilateur a été porté sur des systèmes tels que Conversational Monitor System (CMS), TOPS-10 et Zilog Z80 .
Culture populaire
Un prédécesseur très ancien de ce compilateur a été utilisé par Guy et Bourne pour écrire les premiers programmes Game of Life sur le PDP-7 avec un écran DEC 340.
Plusieurs numéros de la Liverpool Software Gazette détaillent l'implémentation du Z80. Le compilateur nécessitait environ 120 Ko de mémoire pour fonctionner ; par conséquent, les 64 Ko de mémoire du Z80 sont en fait trop petits pour exécuter le compilateur. Les programmes ALGOL 68C pour le Z80 devaient donc être compilés de manière croisée à partir du plus gros ordinateur CAP ou d'un ordinateur central IBM System/370 .
Algol 68C et Unix
Stephen Bourne a ensuite réutilisé les clauses , et d' ALGOL 68 dans le shell Bourne d'Unix commun , mais avec la syntaxe de modifiée, supprimée et remplacée par (pour éviter tout conflit avec l' utilitaire od ).
if ~ then ~ else ~ ficase ~ in ~ out ~ esacfor ~ while ~ do ~ od
inoutoddone
Après Cambridge, Bourne a passé neuf ans aux Bell Labs avec l' équipe Unix Version 7 (Unix Septième Édition). En plus de développer le shell Bourne, il a porté ALGOL 68C vers Unix sur le DEC PDP-11-45 et a inclus une option spéciale dans son débogueur Unix Advanced Debugger (adb) pour obtenir une trace de pile pour les programmes écrits en ALGOL 68C. Voici un extrait des pages du manuel Unix 7e édition :
NOM adb - débogueur SYNOPSIS adb [-w] [ objfil [ corfil ] ] [...] COMMANDES [...] $modificateur Commandes diverses. Les modificateurs disponibles sont: [...] une trace de pile ALGOL 68. Si l'adresse est étant donné qu'il est alors considéré comme l'adresse de la trame actuelle (au lieu de r4). Si count est alors donné uniquement le premier nombre de trames sont imprimés.
Extensions ALGOL 68C à ALGOL 68
Vous trouverez ci-dessous un échantillon de quelques extensions notables :
- Op := automatique pour tout opérateur, par exemple
*:=et+:= UPTO,DOWNTOetUNTILdans les clauses de boucle ;- opérateur de déplacement (
:=:=) ANDF,ORFetTHEFdes éléments syntaxiques .- compilation séparée -
ENVIRONclause etUSINGclause - portées non vérifiées
- limites dans les déclarants formels
CODE...EDOCclause - pour l'intégration de ZCODE
Les clauses ENVIRONetUSING
La compilation séparée dans ALGOL 68C est effectuée à l'aide des clauses ENVIRONet USING. ENVIRONL'environnement complet est sauvegardé au moment où il apparaît. Un module séparé écrit à partir d'une USINGclause est effectivement inséré dans le premier module au moment où la ENVIRONclause apparaît.
ENVIRONet USINGsont utiles pour un style de programmation descendant , contrairement au style ascendant impliqué par les mécanismes de bibliothèque traditionnels.
Ces clauses sont en quelque sorte l' inverse du #include trouvé dans le langage de programmation C , ou de l'import trouvé dans Python . Le but du ENVIRONmécanisme est de permettre à une source de programme d'être divisée en morceaux de taille gérable. Il n'est nécessaire d'analyser le fichier source partagé qu'une seule fois, contrairement à un #include trouvé dans le langage de programmation C où le fichier d'inclusion doit être analysé pour chaque fichier source qui l'inclut.
Exemple de ENVIRONclause
Un fichier nommé mylib.a68 :
COMMENCER INT dim = 3; # une constante # INT un nombre := 120; # une variable # EXEMPLE D'ENVIRONNEMENT 1; MODE MATRIX = [dim, dim]REAL; # une définition de type # MATRICE m1; un nombre := ENVIRON EXEMPLE2; imprimer((un nombre)) FIN
Exemple de USINGclause
Un fichier appelé usemylib.a68 :
UTILISER L'EXEMPLE 2 DE « mylib » COMMENCER MATRICE m2; # exemple seulement # print((un nombre)); # déclaré dans mylib.a68 # print((2 UPB m1)); # également déclaré dans mylib.a68 # EXEMPLE D'ENVIRONNEMENT 3 ; # Les ENVIRONNEMENTS peuvent être imbriqués # 666 FIN
Restrictions de langage de la norme ALGOL 68
- Pas d'ALGOL 68 FLEX ni de matrices à longueur variable
MODE STRINGmis en œuvre sans FLEX- La clause parallèle du PAR n'a pas été mise en œuvre
- Transport non standard
- autres...
Un traducteur-compilateur pour ALGOL 68C était disponible pour le PDP-10 , l'IBM System/360 et plusieurs autres ordinateurs.