Ce langage est inhabituel car il ne possède qu'un seul type de données : le mot , un nombre fixe de bits, généralement choisi pour correspondre à la taille du mot machine de l'architecture de la plateforme et d'une capacité suffisante pour représenter toute adresse mémoire valide. Pour de nombreuses machines de l'époque, ce type de données était un mot de 16 bits. Ce choix s'est avéré par la suite problématique lorsque BCPL a été utilisé sur des machines dont la plus petite unité adressable était un octet et non un mot, ou sur des machines avec des mots de plus grande taille, comme des mots de 32 ou 64 bits.un entier ; !l'indirection via une valeur était traitée comme un pointeur.) Pour que cela fonctionne, l'implémentation ne prévoyait aucun contrôle de type .
L'inadéquation entre l'orientation mot de BCPL et le matériel orienté octet a été résolue de plusieurs manières. L'une d'elles consistait à fournir des routines de bibliothèque standard pour l'empilement et le déempilement de mots en chaînes d'octets. Plus tard, deux fonctionnalités du langage ont été ajoutées : l'opérateur de sélection de champ de bits et l'opérateur d'indirection d'octet infixe (noté %).
BCPL gère les liaisons entre unités de compilation distinctes d'une manière unique. Il n'y a pas de variables globales déclarables par l'utilisateur ; à la place, un vecteur global, similaire au « blank common » en Fortran , est utilisé. Toutes les données partagées entre les différentes unités de compilation sont constituées de scalaires et de pointeurs vers des vecteurs stockés à un emplacement prédéfini dans le vecteur global. Ainsi, les fichiers d'en-tête (inclus lors de la compilation via la directive « GET ») deviennent le principal moyen de synchronisation des données globales entre les unités de compilation. Ils contiennent des directives « GLOBAL » qui présentent des listes de noms symboliques, chacun associé à un numéro permettant d'identifier le mot correspondant dans le vecteur global. Outre les variables, le vecteur global contient également des liaisons pour les procédures externes. Ceci simplifie considérablement le chargement dynamique des unités de compilation. Au lieu de s'appuyer sur le chargeur de liens de l'implémentation sous-jacente, BCPL offre au programmeur le contrôle du processus de liaison.langage de programmation à utiliser des accolades. Ces dernières ont survécu aux évolutions syntaxiques et sont devenues un moyen courant de délimiter les instructions du code source. En pratique, sur les claviers limités de l'époque, les programmes utilisaient souvent les séquences ` $(&&` $)ou ` [&&` ]à la place des symboles ` {&&` et `&&`. Les commentaires} sur une seule ligne de BCPL, non adoptés par C , réapparurent en C++ puis en C99 .//
L'ouvrage BCPL : Le langage et son compilateur décrit la philosophie de BCPL comme suit :
La philosophie de BCPL n'est pas celle d'un tyran qui se croit tout-puissant et dicte ses règles ; BCPL agit plutôt comme un serviteur offrant ses services au mieux de ses capacités sans se plaindre, même face à des absurdités apparentes. On présume toujours que le programmeur sait ce qu'il fait et qu'il n'est pas entravé par des restrictions mesquines.
Histoire
Le langage BCPL a été implémenté pour la première fois par Martin Richards de l' Université de Cambridge en 1967. BCPL répondait aux difficultés rencontrées avec son prédécesseur, le Cambridge Programming Language, rebaptisé plus tard Combined Programming Language (CPL), conçu au début des années 1960. Richards a créé BCPL en « supprimant les aspects du langage complet qui rendaient la compilation difficile ». La première implémentation du compilateur, pour l' IBM 7094 sous Compatible Time-Sharing System , a été écrite pendant que Richards travaillait au projet MAC au Massachusetts Institute of Technology au printemps 1967. Le langage a été décrit pour la première fois dans un article présenté à la conférence conjointe informatique de printemps de 1969 .programme original « Hello, World! » a été écrit. Le premier MUD a également été écrit en BCPL ( MUD1 ).
Plusieurs systèmes d'exploitation ont été écrits partiellement ou entièrement en BCPL (par exemple, TRIPOS et les premières versions d' AmigaDOS ). Le BCPL était également le langage initial utilisé dans le projet Xerox PARC Alto . Parmi d'autres projets, le système de préparation de documents Bravo a été écrit en BCPL.
Un compilateur primitif, initialisé en 1969 à partir d'une bande de papier contenant le code O du compilateur Atlas 2 de Richards , visait la série ICT 1900. Les deux machines présentaient des longueurs de mots différentes (48 bits contre 24 bits), des encodages de caractères différents et des représentations de chaînes compressées différentes ; le succès de cette initialisation a renforcé la confiance dans la praticabilité de la méthode.
À la fin de 1970, des implémentations existaient pour les systèmes Honeywell 635 et Honeywell 645 , IBM 360 , PDP-10 , TX-2 , CDC 6400 , UNIVAC 1108 , PDP-9 , KDF 9 et Atlas 2. En 1974, un dialecte de BCPL fut implémenté au BBN sans utiliser le code O intermédiaire. L'implémentation initiale était un compilateur croisé hébergé sur les PDP-10 TENEX du BBN et ciblait directement les PDP-11 utilisés dans l'implémentation par le BBN des IMP de deuxième génération utilisés dans l' ARPANET .BBC Micro a également été développée au milieu des années 1980 par Richards Computer Products, une société fondée par John Richards, frère de Martin Richards. Le projet Domesday de la BBC a utilisé ce langage. Des versions de BCPL pour les ordinateurs Amstrad CPC et Amstrad PCW ont également été publiées en 1986 par l'éditeur de logiciels britannique Arnor Ltd. MacBCPL a été publié pour Apple Macintosh en 1985 par Topexpress Ltd, de Kensington, en Angleterre.
La conception et la philosophie de BCPL ont fortement influencé B , qui à son tour a influencé C. À l'époque , les programmeurs débattaient du nom que devrait porter le successeur éventuel de C : « D », la lettre suivante dans l'alphabet, ou « P », la lettre suivante dans le nom du langage parent. Le langage le plus souvent considéré comme le successeur de C est C++ (avec `\` comme opérateur d'incrémentation++ de C ), bien qu'un langage de programmation D existe également.
En 1979, des implémentations de BCPL existaient pour au moins 25 architectures ; le langage a progressivement perdu de son attrait à mesure que le C devenait populaire sur les systèmes non-Unix.
Martin Richards maintient une version moderne de BCPL sur son site web, mise à jour pour la dernière fois en 2023. Ce logiciel peut être configuré pour fonctionner sur différents systèmes, notamment Linux, FreeBSD et Mac OS X. La dernière version inclut des bibliothèques graphiques et sonores, ainsi qu'un manuel complet. Il continue de programmer avec ce logiciel, notamment pour ses recherches sur le suivi automatique de partitions musicales .
Un type MIME informel courant pour BCPL est text/x-bcpl .
Exemples
Bonjour le monde
Richards et Whitby-Strevens fournissent un exemple du programme « Hello, World ! » pour BCPL utilisant un en-tête système standard, « LIBHDR » :
Autres exemples
Compter les solutions au problème des N reines :