business

thomasgil.com

open source

gt docs archives

cv

fr en

clients

firmfunding dcns rff syntax tree


Langage de programmation GT

This document is also available in English

Présentation

GT est un langage de programmation impératif fortement basé sur le langage C. Il ajoute à ce dernier les notions de :

Il garde néanmoins l'esprit du C. En particulier, un grand soin a été apporté à ne pas nuire aux performances d'exécution du C (en utilisant des astuces basées sur les pointeurs de structures et de fonctions par exemple).

GT est donc un langage de programmation système au même titre que C, C++, D et ObjectiveC.

GT est un langage. Il ne fournit pour l'instant aucune bibliothèque de classes prédéfinies ni "runtime": pas de garbage collector, de gestionnaire de sécurité...

Compilation

La compilation d'un programme GT produit un code source C plutôt qu'un exécutable. Les motivations de ce choix sont les suivantes:

Le choix du langage C (plutôt que Java, C#...) comme cible vient du souci de produire des logiciels rapides et légers, sur de nombreuses plateformes. Il a également été guidé par la disponibilité d'un compilateur C extrêmement rapide et facile à intégrer: TCC. Grâce à lui, le compilateur GT peut même exécuter le code généré en mémoire sans passer par l'intermédiaire d'un fichier sur disque.

Implémentation du compilateur

GT a été réécrit plusieurs fois. Sa dernière implémentation repose sur un générateur d'automates à états finis basé sur les expressions rationnelles: Ragel. Elle est plus rapide et plus maintenable que son implémentation précédente (un "recursive descent parser").

Plus précisément, GT utilise 5 machines à état principales qui déclenchent chacune plusieurs sous-machines en pile:

Avantages comparés

GT apporte au C

GT diffère du C++ par

GT n'est pas un nouveau D, Vala, Genie...

Le compilateur GT a une architecture originale. Son code est assez technique car basé sur Ragel, mais assez concis pour rester maintenable et permettre corrections et évolutions rapides.

GT ne cherche pas à réinventer ce que le C sait très bien faire; dans certains cas, il se comporte quasiment comme un "passe plat": les expressions arithmétiques et opérations sur pointeurs sont identiques en C et en GT par exemple.

GT suit simplement l'esprit du C++ originel, lorsqu'il s'appelait encore "C with Classes"

GT n'est pas un concurrent de Java, C#, VB.NET...

GT, comme le C et le C++, permet de développer des logiciels de tous types sans restriction, sans lourdeur ni besoin de machines surpuissantes pour s'exécuter correctement. Il ne repose pas sur un runtime, n'a pas besoin de "finir de compiler son code" au chargement des classes. Il n'a pas de dépendance avec des bibliothèques pesant plusieurs Mo. GT est aussi léger que le C.

Exemple

La syntaxe d'un programme GT semblera assez classique aux développeurs C, C++, D, C# et Java. Voici une illustration des principales facettes du langage:

programme.gt
#include <stdio.h>
#include <string.h>

class int{
	void autoincrement(){
		*this = *this+1; // this est un int*
	}
}
class Compte{
	int numero;
	
	void ouvrir(){
		puts("Compte.ouvrir");
		numero.autoincrement();
	}
}
class CompteCheque: Compte{
	int numChequier;
	
	void ouvrir(){
		puts("CompteCheque.ouvrir");
		super.ouvrir();
	}
}
class Compte{ // toutes les classes sont "partielles" 
	void fermer(){
		puts("Compte.fermer");
	}
}

template Vector<T,size,format>{
	${T}* start;
	${Vector}* add(${T} t){
		printf("${T}.add.${size}(${format})\n", t);
		return this;
	}
}<>

using VectorInt4 = Vector<int, 4, %d>

class VectorTest{
	static void test(){
		VectorInt4 ints;
		ints.add(3);
	}
}

class Test{
	void main(int argc, char** argv){
		VectorTest.test();
		
		Compte cpt;
		cpt.ouvrir();
		
		CompteCheque cc;
		cc.ouvrir();
		cc.fermer();
	}
}

Licence

GT 3.5 est Open Source. Son code appartient au Domaine Public Il est téléchargeable au même endroit que les exécutables.

Téléchargement

L'archive de toutes les versions de GT est disponible ici. Téléchargez toujours la dernière version, et éventuellement tcc.dll (à copier sous c:/tcc/tcc.dll après avoir installé TCC dans c:/tcc)

Exécution

gt.exe exemple.gt exemple.gt.c analyse exemple.gt et si aucune erreur n'est détectée, produit exemple.gt.c.

gt.exe exemple.gt -run exécute en mémoire le code compilé à partir de exemple.gt. Ce mode nécessite d'avoir installé TCC dans le répertoire c:\tcc et d'y avoir ajouté la bibliothèque partagée c:\tcc\tcc.dll (qui peut être téléchargée ici en version Windows 32 bits)

Bugs, critiques, suggestions, demandes de nouvelles fonctionnalités, customisation

GT n'a pas de forum dédié. Les demandes et autres réactions peuvent être adressées à thomas.gil@gmail.com.

thomasgil.com est à votre disposition pour réaliser des adaptations, customisations, intégration ou développements sur mesure autour de GT aux prix indiqués ici.