Module-2 - Modula-2

Module-2
Paradigmes impératif , structuré , modulaire , masquage de données et de procédures , concurrent
Famille Wirth Modula
Conçu par Niklaus Wirth
Première apparition 1978 ; il y a 43 ans ( 1978 )
Discipline de frappe Statique , fort , sûr
Portée Lexical (statique)
Plate-forme Lilith ( AMD 2901 )
Système d'exploitation Multiplateforme
Extensions de nom de fichier .mod, .m2, .def, .MOD, .DEF, .mi, .md
Site Internet www .modula2 .org
Les principales mises en œuvre
Compilateur ETH écrit par Niklaus Wirth
GNU Modula-2
ADW Modula-2
Dialectes
PIM2, PIM3, PIM4, ISO
Influencé par
Modula , Mesa , Pascal , ALGOL W , Euclide
Influencé
Modula-3 , Oberon , Ada , Fortran 90 , Lua , Seed7 , Zonnon , Modula-GM

Modula-2 est un langage de programmation structuré et procédural développé entre 1977 et 1985 par Niklaus Wirth à l' ETH Zurich . Il a été créé comme langage pour le système d'exploitation et le logiciel d'application du poste de travail personnel Lilith . Il a ensuite été utilisé pour la programmation en dehors du contexte de la Lilith.

Wirth considérait Modula-2 comme le successeur de ses langages de programmation antérieurs Pascal et Modula . Les notions principales sont :

  1. Le module en tant qu'unité de compilation pour une compilation séparée
  2. La coroutine comme élément de base des processus simultanés
  3. Types et procédures permettant d'accéder aux données spécifiques à la machine

La conception du langage a été influencée par le langage Mesa et le Xerox Alto , tous deux de Xerox PARC , que Wirth a vus pendant son année sabbatique 1976 là-bas. Le magazine informatique Byte a consacré le numéro d'août 1984 à la langue et à son environnement.

Modula-2 a été suivi par Modula-3 , et plus tard par la série de langues Oberon .

La description

Modula-2 est un langage procédural à usage général , suffisamment flexible pour faire de la programmation système , mais avec une application beaucoup plus large. En particulier, il a été conçu pour prendre en charge la compilation séparée et l'abstraction des données de manière simple. Une grande partie de la syntaxe est basée sur le langage plus ancien et mieux connu de Wirth, Pascal . Modula-2 a été conçu pour être globalement similaire à Pascal, avec certains éléments et ambiguïtés syntaxiques supprimés et l'ajout important d'un concept de module et la prise en charge directe du langage pour la multiprogrammation .

Le langage permet l'utilisation de compilateurs en un seul passage . Un tel compilateur de Gutknecht et Wirth était environ quatre fois plus rapide que les précédents compilateurs multi-passes .

Voici un exemple du code source du programme "Hello world" :

MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
  WriteString("Hello World!")
END Hello.

Un module Modula-2 peut être utilisé pour encapsuler un ensemble de sous-programmes et de structures de données connexes, et restreindre leur visibilité à partir d'autres parties du programme. La conception du module a implémenté la fonctionnalité d'abstraction de données de Modula-2 de manière très propre. Les programmes Modula-2 sont composés de modules, dont chacun est composé de deux parties : un module de définition , la partie interface, qui ne contient que les parties du sous-système qui sont exportées (visibles aux autres modules), et un module d'implémentation , qui contient le code de travail interne au module.

Le langage a un contrôle de portée strict . La portée d'un module peut être considérée comme un mur impénétrable : à l'exception des identifiants standards, aucun objet de l'extérieur n'est visible à l'intérieur d'un module à moins qu'il ne soit explicitement importé ; aucun objet module interne n'est visible de l'extérieur à moins d'être explicitement exporté.

Supposons que le module M1 exporte les objets a, b, c et P en énumérant ses identifiants dans une liste d'export explicite

  DEFINITION MODULE M1;
    EXPORT QUALIFIED a, b, c, P;
    ...

Ensuite, les objets a, b,c et P du module M1 deviennent maintenant connus à l'extérieur du module M1 sous le nom de M1.a, M1.b, M1.c et M1.P. Ils sont exportés de manière qualifiée vers l'extérieur (en supposant que le module M1 est global). Le nom du module d'exportation, c'est-à-dire M1, est utilisé comme qualificatif suivi du nom de l'objet.

Supposons que le module M2 contienne la déclaration IMPORT suivante

  MODULE M2;
    IMPORT M1;
    ...

Cela signifie alors que les objets exportés par le module M1 vers l'extérieur de son programme englobant peuvent maintenant être utilisés à l'intérieur du module M2. Ils sont référencés de manière qualifiée , donc : M1.a, M1.b, M1.c, et M1.P. Exemple:

    ...
    M1.a := 0;
    M1.c := M1.P(M1.a + M1.b);
    ...

L'exportation qualifiée évite les conflits de noms : par exemple, si un autre module M3 exportait également un objet appelé P, alors nous pouvons toujours distinguer les deux objets, puisque M1.P diffère de M3.P. Grâce à l'export qualifié, peu importe que les deux objets soient appelés P à l'intérieur de leurs modules d'export M1 et M3.

Une méthode alternative existe, qui est largement utilisée par les programmeurs Modula-2. Supposons que le module M4 soit formulé comme ceci :

  MODULE M4;
    FROM M1 IMPORT a, b, c, P;

Cela signifie alors que les objets exportés par le module M1 vers l'extérieur peuvent à nouveau être utilisés à l'intérieur du module M4, mais maintenant par de simples références aux identifiants exportés de manière non qualifiée , donc : a, b, c, et P. Exemple :

    ...
    a := 0;
    c := P(a + b);
    ...

Cette méthode d'importation non qualifiée permet d'utiliser des variables et d'autres objets en dehors de leur module d'exportation exactement de la même manière simple, c'est-à-dire non qualifiée , qu'à l'intérieur du module d'exportation. Les murs entourant tous les modules sont désormais devenus inutiles pour tous les objets pour lesquels cela a été explicitement autorisé. Bien entendu, l'importation non qualifiée n'est utilisable que s'il n'y a pas de conflit de noms.

Ces règles d'exportation et d'importation peuvent sembler inutilement restrictives et verbeuses. Mais ils ne protègent pas seulement les objets contre les accès indésirables, mais ont aussi l'agréable effet secondaire de permettre un recoupement automatique de la définition de chaque identifiant d'un programme : si l'identifiant est qualifié par un nom de module, alors la définition vient de ce module. Sinon, s'il se produit sans qualification, effectuez simplement une recherche en arrière et vous rencontrerez soit une déclaration de cet identifiant, soit son occurrence dans une instruction IMPORT qui nomme le module dont il provient. Cette propriété devient très utile lorsque l'on essaie de comprendre de gros programmes contenant de nombreux modules.

Le langage fournit une concurrence (limitée) à un seul processeur ( moniteurs , coroutines et transfert explicite de contrôle) et un accès matériel (adresses absolues, manipulation de bits et interruptions ). Il utilise un système de type nominal .

Dialectes

Il existe deux dialectes majeurs de Modula-2. Le premier est PIM , du nom du livre Programming in Modula-2 de Niklaus Wirth. Il y a eu trois éditions majeures de PIM : la deuxième, la troisième (corrigée) et la quatrième. Chacun décrit de légères variantes de la langue. Le deuxième dialecte majeur est l' ISO , du nom de l'effort de normalisation de l' Organisation internationale de normalisation . Voici quelques-unes des différences entre eux.

  • PIM2 (1983)
    • EXPORTClause explicite requise dans les modules de définition.
    • La fonction SIZEdoit être importée du moduleSYSTEM
  • PIM3 (1985)
    • Suppression de la EXPORTclause des modules de définition suite à l'observation que tout dans un module de définition définit l'interface avec ce module, donc la EXPORTclause était redondante.
    • La fonction SIZEest omniprésente (visible dans n'importe quelle étendue sans importation)
  • PIM4 (1988)
    • Spécifie le comportement de l' MODopérateur lorsque les opérandes sont négatifs.
    • Exigé que toutes les ARRAY OF CHARchaînes se terminent par ASCII NUL, même si la chaîne rentre exactement dans son tableau.
  • ISO (1996, 1998)
    • ISO Modula-2 a résolu la plupart des ambiguïtés du PIM Modula-2. Il a ajouté les types de données COMPLEXet LONGCOMPLEX, les exceptions, la terminaison de module ( FINALLYclause) et une bibliothèque complète d' entrées/sorties (E/S) standard . Il y a beaucoup de différences mineures et de clarifications.

Surensembles

Il existe plusieurs sur-ensembles de Modula-2 avec des extensions de langage pour des domaines d'application spécifiques :

Dérivés

Il existe plusieurs langages dérivés qui ressemblent de très près à Modula-2 mais sont de nouveaux langages à part entière. La plupart sont des langages différents avec des objectifs différents et avec leurs propres forces et faiblesses :

  • Modula-3 , développé par une équipe d'anciens employés de Xerox qui avait déménagé à DEC et Olivetti
  • Oberon , développé à l' ETH Zürich pour System Oberon disponible en ligne .
  • Oberon-2 , Oberon avec extensions OO
  • Active Oberon , encore une autre extension orientée objet d' Oberon , développée également à l' ETH avec pour objectif principal de prendre en charge la programmation parallèle sur des systèmes multiprocesseurs et multicœurs.
  • Parallaxis, un langage pour la programmation parallèle de données indépendante de la machine
  • Umbriel, développé par Pat Terry comme langue d'enseignement
  • YAFL, un langage de recherche par Darius Blasband

De nombreux autres langages de programmation actuels ont adopté les fonctionnalités de Modula-2.

Éléments de langue

Mots réservés

PIM [2,3,4] définit 40 mots réservés :

AND         ELSIF           LOOP       REPEAT
ARRAY       END             MOD        RETURN
BEGIN       EXIT            MODULE     SET
BY          EXPORT          NOT        THEN
CASE        FOR             OF         TO
CONST       FROM            OR         TYPE
DEFINITION  IF              POINTER    UNTIL
DIV         IMPLEMENTATION  PROCEDURE  VAR
DO          IMPORT          QUALIFIED  WHILE
ELSE        IN              RECORD     WITH

Identifiants intégrés

PIM [3,4] définit 29 identifiants intégrés :

ABS         EXCL            LONGINT    REAL
BITSET      FALSE           LONGREAL   SIZE
BOOLEAN     FLOAT           MAX        TRUE
CAP         HALT            MIN        TRUNC
CARDINAL    HIGH            NIL        VAL
CHAR        INC             ODD
CHR         INCL            ORD
DEC         INTEGER         PROC

Utilisation du système embarqué

Modula-2 est utilisé pour programmer de nombreux systèmes embarqués .

Cambridge Modula-2

Cambridge Modula-2 de Cambridge Microprocessor Systems est basé sur un sous-ensemble de PIM4 avec des extensions de langage pour le développement embarqué. Le compilateur fonctionne sous DOS et génère du code pour les microcontrôleurs embarqués Motorola série 68000 (M68k) exécutant un système d'exploitation MINOS.

Mod51

Mod51 de Mandeno Granville Electronics est basé sur ISO Modula-2 avec des extensions de langage pour le développement embarqué suivant IEC1131, une norme industrielle pour les contrôleurs logiques programmables (PLC) étroitement liée à Modula-2. Le compilateur Mod51 génère du code autonome pour les microcontrôleurs basés sur 80C51.

Modula-GM

Delco Electronics , alors filiale de GM Hughes Electronics , a développé une version de Modula-2 pour les systèmes de contrôle embarqués à partir de 1985. Delco l'a nommé Modula-GM. C'était le premier langage de programmation de haut niveau utilisé pour remplacer le code machine (langage) pour les systèmes embarqués dans les unités de commande du moteur (ECU) de Delco . C'était important parce que Delco produisait plus de 28 000 ECU par jour en 1988 pour GM. C'était alors le plus grand producteur mondial d'ECU. La première utilisation expérimentale de Modula-GM dans un contrôleur embarqué a eu lieu dans le contrôleur de système de freinage antiblocage de 1985, basé sur le microprocesseur Motorola 68xxx, et en 1993, l'ECU Gen-4 utilisé par les équipes de course automobile du championnat Champ Car World Series (CART) et les équipes de l' Indy Racing League (IRL). La première utilisation en production de Modula-GM a été son utilisation dans les camions GM à partir du module de commande de véhicule (VCM) de l' année modèle 1990 utilisé pour gérer les moteurs Vortec de GM Powertrain . Modula-GM a également été utilisé sur tous les calculateurs de la famille de moteurs Buick V6 à 90° de GM 3800 série II utilisés dans l'année modèle 1997-2005 Buick Park Avenue . Les compilateurs Modula-GM et les outils de gestion de logiciels associés ont été fournis par Delco auprès d' Intermetrics .

Modula-2 a été choisi comme base du langage de haut niveau de Delco en raison de ses nombreux atouts par rapport à d'autres choix de langages alternatifs en 1986. Après que Delco Electronics a été séparé de GM (avec d'autres divisions de composants) pour former Delphi Automotive Systems en 1995, l'approvisionnement mondial nécessitait l'utilisation d'un langage logiciel de haut niveau non propriétaire. Le logiciel embarqué d'ECU maintenant développé chez Delphi est compilé avec des compilateurs commerciaux pour le langage C .

satellites de radionavigation russes

Les satellites du cadre du service de radionavigation par satellite russe GLONASS , similaires au Global Positioning System (GPS) américain, sont programmés en Modula-2.

Compilateurs

  • Kit de compilation Amsterdam (ACK) Modula-2 – pour MINIX ; logiciel gratuit
  • ADW Modula-2 – pour Windows, conforme ISO, ISO/IEC 10514-1, ISO/IEC 10514-2 (extension OO), ISO/IEC 10514-3 (extension générique) ; logiciel gratuit
  • Aglet Modula-2 – pour AmigaOS 4.0 pour PowerPC ; logiciel gratuit
  • Outils logiciels intégrés (FST) Modula-2 – pour DOS ; logiciel gratuit
  • Gardens Point Modula-2 (GPM) – pour BSD, Linux, OS/2, Solaris ; Conforme à l'ISO ; logiciel gratuit, au 30 juillet 2014
  • Gardens Point Modula-2 (GPM/CLR) – pour .NET Framework ; logiciel gratuit
  • GNU Modula-2 – pour les plates-formes GCC, version 1.0 publiée le 11 décembre 2010 ; conformité : PIM2, PIM3, PIM4, ISO ; logiciel libre , licence publique générale GNU (GPL)
  • M2Amiga – pour Amiga ; logiciel gratuit
  • M2M – par N. Wirth et ses collaborateurs de l'ETH Zurich, multiplateforme, génère du M-code pour la machine virtuelle ; logiciel gratuit
  • MacMETH – par N. Wirth et ses collaborateurs de l'ETH Zurich pour Macintosh, Classic uniquement ; logiciel gratuit
  • Mod51 - pour la famille de microcontrôleurs Intel 80x51, conforme ISO, extensions IEC1132 ; logiciel propriétaire
  • Megamax Modula-2 – pour Atari ST avec documentation en allemand uniquement ; logiciel gratuit
  • Modula-2 R10 – compilateur de référence pour ce Modula ; open source, examen par les pairs
  • ModulaWare – pour OpenVMS ( VAX et Alpha ), conforme ISO ; logiciel propriétaire
  • ORCA/Modula-2 - pour Apple IIGS par The Byte Works pour l'atelier du programmeur Apple
  • p1 Modula-2 – pour Macintosh , Classic et macOS ( PowerPC et Carbon (API) uniquement), conforme ISO ; logiciel propriétaire
  • MOCKA – pour diverses plates-formes, conforme PIM ; versions commerciales et gratuites de Linux/BSD
  • TDI Modula-2 – pour Atari ST , par TDI Software
  • Terra M2VMS – pour OpenVMS ( VAX et Alpha ), conforme PIM ; logiciel propriétaire
  • m2c, Ulm Modula-2 System – pour Solaris (Sun SPARC et Motorola 68k ) ; logiciel libre, licence publique générale GNU (GPL)
  • XDS – conforme ISO, bibliothèque compatible TopSpeed ​​: Native XDS-x86 pour x86 (Windows et Linux) ; XDS-C pour Windows et Linux (versions 16 et 32 ​​bits), cibles C ( K&R & ANSI ) ; logiciel gratuit

Turbo Modula-2

Turbo Modula-2 était un compilateur et un environnement de développement intégré pour MS-DOS développé, mais non publié, par Borland . Jensen and Partners, qui comprenait le cofondateur de Borland, Niels Jensen, a acheté la base de code inédite et l'a transformée en TopSpeed ​​Modula-2. Il a finalement été vendu à Clarion, désormais propriété de SoftVelocity, qui propose toujours le compilateur Modula-2 dans le cadre de sa gamme de produits Clarion .

Une version Zilog Z80 CP/M de Turbo Modula-2 a été brièvement commercialisée par Echelon sous licence de Borland. Une version complémentaire pour Hitachi HD64180 a été vendue par Micromint comme outil de développement pour leur ordinateur monocarte SB-180.

IBM Module-2

IBM avait un compilateur Modula-2 à usage interne qui fonctionnait à la fois sur OS/2 et AIX , et avait un support de première classe dans l' éditeur E2 d'IBM . IBM Modula-2 a été utilisé pour des parties du code interne sous licence vertical OS/400 (en fait le noyau d'OS/400). Ce code a été remplacé par C++ lorsque OS/400 a été porté sur la famille de processeurs IBM RS64 . Un backend Motorola 68000 existait également, qui peut avoir été utilisé dans des produits de systèmes embarqués.

Systèmes d'exploitation

Modula-2 est utilisé pour programmer certains systèmes d'exploitation (OS). La structure et la prise en charge du module Modula-2 sont utilisées directement dans deux systèmes d'exploitation connexes.

L'OS nommé Medos-2 , pour le poste de travail Lilith, a été développé à l'ETH Zurich, par Svend Erik Knudsen avec les conseils de Wirth. Il s'agit d'un système d'exploitation orienté objet à utilisateur unique construit à partir de modules Modula-2.

Le système d'exploitation nommé Excelsior , pour le poste de travail Kronos , a été développé par l' Académie des sciences de l'Union soviétique , branche sibérienne, Novosibirsk Computing Center, projet de systèmes modulaires asynchrones développables (MARS), Kronos Research Group (KRG). Il s'agit d'un système mono-utilisateur basé sur des modules Modula-2.

Livres

  • Wirth, Niklaus (1988). Programmation en Modula-2 (4e éd.). Berlin Heidelberg : Springer-Verlag . doi : 10.1007/978-3-642-83565-0 . ISBN 978-0-387-96051-7.
  • King, KN (1er janvier 1988). Modula-2 : un guide complet . Burlington, Massachusetts : Jones et Bartlett Publishers. ISBN 978-0669110913.
  • Sutcliffe, Richard J. (2004-2005). Modula-2 : abstractions pour les structures de données et de programmation . Livres d'Arjay. ISBN 978-0-669-11091-3. Utilise la norme ISO Modula-2.
  • Gleaves, Richard (1984). Modula-2 pour les programmeurs Pascal . Livres Springer sur l'informatique professionnelle (1ère éd.). Suisse : Springer Nature. doi : 10.1007/978-1-4613-8531-8 . ISBN 978-0-387-96051-7.
  • Cooper, Doug (1er septembre 1990). Oh mon! Modula-2 : Une introduction à la programmation . New York City , New York : WW Norton & Company . ISBN 978-0393960099.

Les références

Liens externes

Cet article est basé sur du matériel extrait du Dictionnaire gratuit en ligne de l'informatique avant le 1er novembre 2008 et incorporé sous les termes de "relicensing" de la GFDL , version 1.3 ou ultérieure.