Component Pascal est un langage de programmation dans la tradition de Pascal de Niklaus Wirth , Modula-2 , Oberon et Oberon-2 . Il porte le nom du langage Pascal et préserve son héritage, mais est incompatible avec Pascal. Il s'agit plutôt d'une variante mineure et d'un raffinement d'Oberon-2 avec un système de types plus expressif et un support de chaîne intégré . Component Pascal s'appelait à l'origine Oberon/L et a été conçu et soutenu par une petite société dérivée de l'ETH Zürich appelée Oberon microsystems. Ils ont développé un environnement de développement intégré (IDE) appelé BlackBox Component Builder . Depuis 2014, le développement et le support sont pris en charge par un petit groupe de bénévoles. La première version de l'IDE est sortie en 1994, sous le nom d' Oberon/F . À l'époque, elle présentait une nouvelle approche de la construction d'interfaces utilisateur graphiques (GUI) basée sur des formulaires modifiables, où les champs et les boutons de commande sont liés à des variables exportées et à des procédures exécutables. Cette approche présente certaines similitudes avec la méthode code-behind utilisée dans .NET 3.0 de Microsoft pour accéder au code dans Extensible Application Markup Language (XAML), publié en 2008.
Une implémentation logicielle open source de Component Pascal existe pour les plates-formes de machines virtuelles .NET et Java (JVM), de l'équipe Gardens Point autour de John Gough de l'Université de technologie du Queensland en Australie.
Le 23 juin 2004, Oberon microsystems a annoncé que le BlackBox Component Builder était disponible en téléchargement gratuit et qu'une version open source était prévue. La version bêta open source a été initialement publiée en décembre 2004 et mise à jour vers une version finale v1.5 en décembre 2005. Elle comprend le code source complet de l'IDE, du compilateur, du débogueur, de l'analyseur de source, du profileur et des bibliothèques d'interface, et peut également être téléchargée à partir de leur site Web. Plusieurs versions candidates pour la version v1.6 sont apparues dans les années 2009-2011, la dernière (1.6rc6) est apparue sur les pages Web d'Oberon microsystems en 2011. Fin 2013, Oberon microsystems a publié la version finale 1.6. C'est probablement la dernière version fournie par eux. Une petite communauté a pris en charge le développement en cours.
BlackBox Component Pascal utilise les extensions .odc ( Oberon document ) pour les fichiers de documents , tels que les fichiers sources, et .osf ( Oberon symbole fichier ) pour les fichiers de symboles tandis que Gardens Point Component Pascal utilise .cp pour la source et .cps pour les fichiers de symboles. BlackBox Component Pascal possède son propre format d'objet exécutable et chargeable .ocf ( Oberon code fichier ) ; il inclut un chargeur de liens d'exécution pour ce format. Le format de document (.odc) est un format binaire de texte enrichi , qui permet le formatage, prend en charge le pliage conditionnel et permet d'intégrer du contenu actif dans le texte source. Il gère également les éléments d'interface utilisateur sous des formes modifiables. Cela s'inscrit dans la tradition du format de texte Oberon.
Syntaxe
La syntaxe complète de CP, telle que donnée par le Language Report, est présentée ci-dessous. Dans la forme Backus–Naur étendue , seules 34 productions grammaticales sont nécessaires, soit une de plus que pour Oberon-2 , bien qu'il s'agisse d'un langage plus avancé.
Module = MODULE ident ";" [ ImportList ] DeclSeq [ BEGIN StatementSeq ] [ CLOSE StatementSeq ] FIN ident "." . ImportList = IMPORT [ ident ":=" ] ident { "," [ ident ":=" ] ident } ";" . DeclSeq = { CONST { ConstDecl ";" } | TYPE { TypeDecl ";" } | VAR { VarDecl ";" }} { ProcDecl ";" | ForwardDecl ";" }. ConstDecl = IdentDef "=" ConstExpr . TypeDecl = IdentDef "=" Type . VarDecl = IdentList ":" Type . ProcDecl = PROCEDURE [ Receiver ] IdentDef [ FormalPars ] MethAttributes [ ";" DeclSeq [ BEGIN StatementSeq ] FIN ident ]. MethAttributes = [ "," NOUVEAU ] [ "," ( ABSTRAIT | VIDE | EXTENSIBLE )]. ForwardDecl = PROCEDURE "^" [ Récepteur ] IdentDef [ FormalPars ] MethAttributes . FormalPars = "(" [ FPSection { ";" FPSection }] ")" [ ":" Type ]. FPSection = [ VAR | IN | OUT ] ident { "," ident } ":" Type . Récepteur = "(" [ VAR | IN ] ident ":" ident ")" . Type = Qualident | TABLEAU [ ConstExpr { "," ConstExpr }] DE Type | [ ABSTRAIT | EXTENSIBLE | LIMITÉ ] ENREGISTREMENT [ "(" Qualident ")" ] FieldList { ";" FieldList } FIN | POINTEUR VERS Type | PROCÉDURE [ FormalPars ]. Liste de champs = [ Liste d'identificateurs ":" Type ]. StatementSeq = Instruction { ";" Instruction }. Instruction = [ Désignateur ":=" Expr | Désignateur [ "(" [ ExprList ] ")" ] | IF Expr THEN StatementSeq { ELSIF Expr THEN StatementSeq } [ ELSE StatementSeq ] FIN | CASE Expr OF Case { "|" Case } [ ELSE StatementSeq ] FIN | WHILE Expr DO StatementSeq FIN | REPEAT StatementSeq UNTIL Expr | FOR ident ":=" Expr TO Expr [ BY ConstExpr ] DO StatementSeq FIN | LOOP StatementSeq FIN | WITH [ Guard DO StatementSeq ] { "|" [ Guard DO StatementSeq ] } [ ELSE StatementSeq ] FIN | EXIT | RETURN [ Expr ] ]. Cas = [ CaseLabels { "," CaseLabels } ":" StatementSeq ]. CaseLabels = ConstExpr [ ".." ConstExpr ]. Garde = Qualident ":" Qualident . ConstExpr = Expr . Expr = SimpleExpr [ Relation SimpleExpr ]. SimpleExpr = [ "+" | "-" ] Terme { Terme AddOp }. Terme = Facteur { MulOp Factor }. Facteur = Désignateur | nombre | caractère | chaîne | NIL | Ensemble | "(" Expr ")" | " ~ " Facteur . Ensemble = "{" [ Élément { "," Élément }] "}" . Élément = Expr [ ".." Expr ]. Relation = "=" | "#" | "<" | "<=" | ">" | ">=" | DANS | EST . AddOp = "+" | "-" | OU . MulOp = "*" | "/" | DIV | MODÈLE | "&" . Désignateur = Qualident { "." identifier | "[" ListeExpr "]" | "^" | "(" Qualificateur ")" | "(" [ ListeExpr ] ")" } [ "$" ]. ExprList = Expr { "," Expr }. IdentList = IdentDef { "," IdentDef }. Qualident = [ ident "." ] identifier . IdentDef = ident [ "*" | "-" ].