Accueil        Lexique        Unités        Algorithmes        Tutoriel   

Cette page compare les propriétés des différents langages avec le langage Pascal. Les langages comparés sont le langage C, C++ (extension du C), Java, PHP, JavaScript, Python.

En Pascal, les noms d'instructions, de champs, de variables et fonctions sont insensibles à la casse!


Types de données

Les définitions de types des langages C, C++ et Pascal sont ceux existant en standard pour les langages dans les années 1990. Depuis ça a pu évoluer (notamment our Pascal avec Delphi et Free Pascal). Pour Java, il s'agit des normes courants (2020).
En Pascal (et accessoirement JAVA) qui est un langage fortement typé, les types ont les propriétés de ce qu'ils sont et ne peuvent PAS être soumis à des opérations qui ne leur sont pas attribué, contrairement au C. Si vous voulez appliquer une opération à un type "pointeur" par exemple, vous devez d'aord le convertir en Longint par LongInt(ptr), alors que le C est plus permissif (plus souple).

Types numériques

types Pascal Langage C/C++ Java
Numériques Entiers
  1. Shortint (-128 à 127)
  2. Byte (0 à 256)
  3. Integer (-32767 à 32765)
  4. Word (0 à 65535)
  5. LongInt (-2147483648 à 2147483647)
Pour les compilateurs pascal depuis les années 1995, il a été intégré d'autres types tels smallint (2 octets), longword (4 octets) et surtout INT64 (8 octets).
Les limites des types d'entiers à partir de 16 bits varient suivant les compilateurs!
  1. char (-128 à 127
  2. unsigned char (0 à 256)
  3. int (16 ou 32 bits signés)
  4. unsigned int (16 ou 32 bits non signés)
  5. long (-2147483648 à 2147483647)
  6. unsigned long (32 bits : 0 à 4 294 967 295)
  1. byte (-128 à 127)
  2. short (-32767 à 32765)
  3. int (-2147483648 à 2147483647)
  4. long (64 bits)
Il y a une différence de limite entre Java (beaucoup plus étendu) et le langage C. Mais le Java n'a pas de type Unsigned. Le Java semble fait pour les énormes machines avec énormément de ressources.
Booléens Type Boolean (de taille 1 octet). En pascal, les types sont gérés strictement, et une variable booléenne ne peut renvoyer que "true" ou "false" par "write". Pour afficher la "valeur" d'une variable de type booléenne, faire "ord(varbooleenne)" : Ces valeurs sont 0 ou 1. Voir ici. Jusqu'à la norme C99, le langage C n'a PAS de type Booléen. Les compilateurs considéraient que les entiers non nuls étaient "vrais" et et les entiers nuls valaient "faux". Type boolean comme en Pascal, sauf qu'ici, la taille est de 4 octets (à quoi bon gaspiller 3 octets pour une variable qui ne peut prendre que 2 valeurs ???)
Numériques Réels
  1. single (4 octets, de 1.4e-45 à 3.4e38)
  2. double (8 octets : 4.9e-324 à 1.7e308)
  3. real (10 octets : 9.0e-4952 à 1.1e4931)
  4. extended (12 octets : 9.0e-4952 .. 1.1e4931)
Le type real est celui recommandé. Extended dépend des capacités du processeur et des directives de compilations : il ne peut fonctionner suivant les processeurs 16/32 bits que s'il y a présence d'un coprocesseur arithmétique ou que si les instructions sur flottants existent au sein dudit processeur. Le Pascal est le langage offrant la plus grande précision et la plus plus grande échelle sur les types réels de base de tous les langages à compilations.
  1. float (4 octets, de 1.4e-45 à 3.4e38)
  2. double (8 octets : 4.9e-324 à 1.7e308)
  1. float (4 octets, de 1.4e-45 à 3.4e38)
  2. double (8 octets : 4.9e-324 à 1.7e308)
Il n'y a PAS de déclaration de type en PHP, Python, JavaScript.
Python et PHP effectuent les typages dynamiquement suivant le contexte. Pour les nombres, PHP et Python gèrent 3 types:
  1. bool (booléens) géré de la même manière qu'en Pascal ou Java
  2. int (Entier 32/64 bits) géré de la même manière qu'en C
  3. float (32/64 bits) géré de la même manière qu'en C
... Auquel il faut ajouter le type Complex pour Python.
Concernant JavaScript, il gère tous les nombres en interne au format Réel Signé 64 bits (IEEEE754)

Types chaines

types Pascal Langage C/C++ Java
Caractère Type char (1 octet).
Traite un octet comme caractère et QUE comme un caractère. Pour le traiter en Byte, faire "Ord(moncaractere)" ou "Byte(moncaractere)"
Type char (1 octet).
Traite un type char comme caractère ou comme entier non signé. Le langage C est très permissif...
Type char (2 octets).
Traite un octet comme un caractère de type Unicode. Il n'y a pas de manipulation d'octets unique possible en Java.
Chaine de caractères
  1. String [N]. La norme Pascal définit String comme une suite de N (N varian de 1 à 255] caractères, mais la place RAM occupée par chaque variable String est de 256 caractères : le premier octet étant la taille de la chaine courante (exemple, pour "Toto", ce premier octet aura pour valeur 4, mais la chaine occupera 256 octets en RAM). Si on assigne un scalaire dépassant les N caractères, seuls les N premiers caractères seront copiés dans la chaîne. Afin de réduire cet espace de 256 octets par variabe de type String, il suffit de faire précéder par Packed : ex :
    Var
        toto : packed string[30];
    
    Lors de la compilation, Toto n'occupera que 31 octets (le premier étant la taille qui sera inférieur ou égal à 30). Même si chaque chaîne est limitée à 256 caractères, il est possible de contourner cela en Pascal.
  2. Pchar : Ce format est le même que le format char * ou char toto[30] du langage C. Il n'a été introduit en Pascal qu'avec Turbo Pascal 7+ (PC) et Pure Pascal 1.1.1 (Atari ST/Falcon en 1995).
Type char * toto ou char toto[taille]. En C, la déclaration d'une chaîne se fait de 2 manières. Soit un pointeur vers un espace contenant une chaine, soit une chaine de taille max fixée. Il n'existe pas de type Chaîne de base en Java, mais 3 classes:
  1. String sur chaine immuable
  2. StringBuffer sur chaine transformable
  3. StringBuilder sur chaine transformable : contient les mêmes méthodes que StringBuffer
A vérifier, ces String manipulent sans doute des chaines de Mots (2 octets), pour du format Unicode.
PHP, JavaScript et Python ne traite que de chaines de caractères composé d'octets (codes ASCI) au format langage C (Chaine jusqu'à le caractère "null").

Type Tableaux

Tous les langages de cette page peuvent manipuler des tableaux multidimensionnels (avec déclaration de Type pour le Pascal, C/C++ et Java). Cependant, le langage Pascal a un avantage que les autres n'ont pas. Le langage Pascal est le seul des langages dont les index de tableau peuvent être de différents types!! Ces types sont de type ordinal (Entiers, char, liste et même Booléen). Mais au final, on constate que tous ces types sont sous l'étiquette "entiers" en langage C (même si le type Booléen n'existe pas et que le type "char" est le même qu'un entier d'1 octet). Les langages de scripts, contraiement à Pascal, C, Java, permettent d'initialiser rapidement des tableaux en intégrant directement les valeurs entre crochets ou singleton suivant le contexte.

En Pascal, tout comme en C, il est possible de créer un type de tableau Dynamique, sous forme de variable de type "Enregistrement" dont un des champs contiendrait le nombre d'éléments du tableau, un autre le type et un pointeur vers une adresse de début des données. Voir les types "enregistrement", et "pointeur" plus bas.

Types spéciaux en Pascal

Le langage Pascal possède des types n'existant ni en C ni en Java:
  1. Le type Enuméré qui intègre des étiquettes aux valeurs d'un tableau ordinal (démarrant à 0 jusqu'à N-1 éléments). En C et Java, cela nécessiterait de déclarer des constantes à minima. Et cela ressemble fortement à une liste
  2. Le type Interval qui indique le début et la fin d'une liste d'éléments ordinaux. Ce type est très pratique pour écrire des instructions conditionnelles entre des bornes! (n'existe nulle part ailleurs)
  3. Le type Set (ensemble) qui permet de manipuler des ensembles indiquant la présence ou nom d'un élément dans cet ensemble!! Ce type est unique dans les langages de programmations de la liste! Bien que limité à 256 éléments max (mais là aussi on peut détourner cette limite), cela montre que,le Pascal est un langage dédié avant tout aux mathématiques!

Pointeurs de variables et fonctions

NB : ce qu'on appelle "référence" en POO est le synonyme de "Pointeur de" en langage (paradigme) imppératif, c'est exactement le même processus algorithmique! De même, une "méthode" est synonyme de "fonction", même si c'est "attaché" à un objet, au niveau langage machine c'est la même chose!

Type Enregistrement

En Pascal, l'équivalent du "stuct" du C est l'enregistrement,. De plus, le Pascal introduit une spécificité qui n'existe pas dans le langage C, les enregistrements VARIANTS!
Les enregistrements variants sont des types d'enregistrements dont, pour un même type, le nombre, le type et le nom de champs peut varier suivant les valeurs d'un (et un seul) de ces champs.

Type Objet

Le Pascal depuis la version 5.5 de Turbo Pascal, intègre également le type Object. Il permet tout ce que le C++ et Java peut faire. Héritage, Instanciation, Destruction, Polymorphisme, Encapsulation etc... bien que tout ceci soit aussi possible à utiliser sans la POO à coup d'enregistrements, de pointeurs de variables et de pointeurs de fonctions! Pour Delphi et free Pascal, remplacer Object par Class.

Opérateurs


Copyright © 2021 par Albatros Concept (Bruno Aubin)