[gull] langages et type systems

Daniel Cordey dc at mjt.ch
Tue Aug 5 13:52:45 CEST 2008


On Monday 04 August 2008 23:19:16 Philippe Strauss wrote:

> Daniel, je suis grosso-modo d'accord sur tout ce que tu ecrits, néanmoins
> cela vaut la peine d'essayer un dérivé de la famille ML histoire de toucher
> a un "vrai" type system, au moins en tant que culture générale
> informatique.

Je suis toujours favorable a examiner d'autres langages et cela fait longtemps 
que je veux jeter un coup d'oeil a OCAML. Malheureusement, je n'ai plus le temps 
de m'octroyer ce luxe depuis plusieurs annees. Je me contente d'investiguer des 
technologies immediatement utilisables ou ne necessitant que 15 a 30 minutes de 
lecture (et encore la je me montre asez selectif). Je deplore cet etat de fait 
et je ne reve que de pouvoir investiguer quelques langages qui me semblent 
interessants.

> ML a été conçu pour écrire des "theroem prover", et presque
> accessoirement fait office de bon langage "general purpose" (surtout dans
> son incarnation ocaml qui n'est pas "pure"-ment fonctionel et qui a un bon
> système objet).

Bon, c'est l'eternel compromis entre objets et procedures :-) J'en suis arriver 
a la conclusion que la verite ne se trouve ni dans l'un, ni dans l'autre, mais 
entre les deux. J'ai beaucoup "objectise" mes travaux en C et je continue 
maintenant a le faire en Python. Neanmoins, il y a des problemes qui necessitent 
une approche procedurale, d'autres qui s'accomodent bien d'une approche objet et 
d'autres qui melangent les deux... Tout compte fait, Python convient assez bien 
a ces deux usages et je ne suis pas oblige de "choisir" mon camp en permanence. 

> Je crois a cause de ceci:
> http://en.wikibooks.org/wiki/Haskell/The_Curry-Howard_isomorphism?
> la notion de typage est poussée le plus loin possible dans les langages
> ML.

Oui, mais cela reste des langages academiques. S'il est vrais que l'on peut 
conceptualiser une partie de chaque probleme, on en arrive tres vite a la partie 
"camboui" qui necessite une approche beaucoup plus technologie-informatique. On 
a beau isoler un maximum de ces besoins dans des librairies/modules confines, on 
en est toujours reduit a devoir manipuler des accents, acceder a une base de 
donnee, packer des donnees, lire des fichiers de configurations, etc. Bien sur, 
avec du temps on peut tres bien envisager de tout conceptualiser et d'avoir une 
magnifique architecture logicielle. Malheureusement, l'evolution des besoins et 
tel que l'on n'arrive jamais a stabiliser l'ensemble. Les technologies deboulent 
en permanence XML, AJAX, CSS, etc. et il est impossible de tout interconnecte 
avec de merveilleux APIs... :-( 

Un temps, je pronais la definition d'un langage par type de probleme (je rejoins 
ML dans un certain sens), mais j'ai abandonne car cela implique un (trop) lourd 
apprentissage pour tout nouveau collaborateur.

> Concrètement, dans de la programmation de tout les jours, je n'en ai cure
> des theorem prover, par contre le "side effect" d'avoir sous le capot un
> type system très poussé, c'est que le compilateur te trouve passablement
> plus d'erreurs.

Oui. On retrouve aussi cet avantage lorsque l'on arrive a bien formaliser son 
probleme et a le realiser de maniere propre en OO avec un langage comme Python. 
Les message d'erreurs sont logiques et comprehensibles. Ils permettent de tres 
vite mettre le doigt sur des problemes de conception ou des manquements de dans 
les methodes etc. C'est assez pratiques d'avoir autre chose que SIGSEFV ou 
BUSERROR :-)

> Bref, tout ceci pour dire que l'utilisation du typage entre c, c++, python,
> probablement java et c# d'une part, et ML, haskell, ocaml d'autre part,
> c'est pas vraiment comparable, ce sont des choix de design, des buts
> initiaux bien différents.

Le probleme, a mon avis, reside plus d'en l'interfacage entre ces langages et... 
le monde informatique. De plus, les parties "conceptuelles" ou "moteurs 
d'inferences" sont en general bien confines et donc relativement facile a mettre 
au point, par contre... 99% du code va concerner l'interface utilisateur et le 
brassage des donnees dans la base SQL...  J'ai aussi abandonne l'idee d'utiliser 
2 langages dans une meme infrastructure; ca aussi c'est trop lourd a 
supporte.Trouver un bon programmeur dans un langage est "relativement" facile 
(j'exclu VB, C#, Access...), mais bon dans 2 langages...  ca devient 
problematique ! Raison pour laquelle j'ai adopte une sorte de compromis; 
compromis qui peut tres bien etre remis en question a tout moment...

> C'est regrétable d'ailleurs que la programmation fonctionelle ne fasse pas
> ou en quantité négligeable partie des cursus d'école d'ingénieurs,
> lorsque j'ai commencé à m'intéresser à ocaml je me demandais a
> quoi mes cours d'informatique avait servit.

Oui, et le probleme est que des ecoles ont aussi tendance a se reposer sur des 
outils de conception qui empeche l'acquisition de certains reflexes. Du coup, 
ceux qui sortent de ces ecoles ont besoin d'un grand temps d'adaptation a des 
domaines comme la gestion de widgets, les acces concurents a des fichiers ou de 
la memoire, etc. Je trouve qu'un bon exercice serait la realisation d'un 
"widget" pour une librairie comme Qt ou GTK... mais naturellement, quand l'ecole 
est polluee par une kyrielle de PC W*... aucune chance :-(

dc





More information about the gull mailing list