Quel langage pour l’avenir : C#4 ou Oxygene (Delphi)

Suite au post de Romain sur l’avenir du langage C#, je voulais non seulement répondre, mais en profiter pour parler brièvement d’un autre langage .Net : Oxygene.

C#4 ?

Romain a trouvé une citation un peu abusive mais qui m’est pourtant tout de suite venu à l’esprit concernant C#4 :

The dynamic keyword is going be abused so much… C# is on its way to becoming PHP.

Pour la petite histoire, je viens de passer 2 jours à coder du Javascript… coder?? Débuguer surtout!
Je ne sais pas si suis allergique aux langages dynamiques, mais ça me frustre au plus au point de ne pas savoir quel sont les membres que possède un objet, et de devoir le vérifier au Runtime
J’ai passé 2h car j’ai fait une faute de frappe sur le nom d’un membre, ce qui ne plante pas, mais comme cela créer dynamiquement un nouveau membre avec ce nouveau nom, j’ai passé beaucoup de temps à comprendre pourquoi sa valeur était “null”.

C’est pour ça que les aspects “dynamiques” me font peur pour la maintenance des futures programmes C#4.
Ceci dit, le mot clé “var” existe déjà en C#3, et je n’ai pas vu quelqu’un en abuser (d’ailleurs, est-ce que la nouvelle version de Resharper suggère toujours de remplacer les types par des var ??!!).
Toujours pour diluer mes propos, il est vrai que dans la réalité on a besoin d’utiliser différents langages pour différents besoin, alors pourquoi ne pas tout réunir en un seul…
Mais j’aimerai éviter ça :

Pétage de cable

Parfois je me dit aussi que “C# is on its way to becoming C++“. Je n’ai pas beaucoup d’expérience en C++, et de ce fait j’ai parfois du mal à comprendre certains codes.
Mais j’ai surtout l’impression que les possibilités du langage sont tellement nombreuses, qu’on a pas 2 codes source C++ “dans la même prose”, ce qui devient vite difficile à lire. Pouvoir faire 1 chose de 10 manières différentes, n’est en mon sens pas un bon truc.

Mais en pratique, les nouvelles fonctionnalités de C# ne sont utilisées que par une “élite” qui a un besoin très précis. Dans mon travail actuel, les gens ne savent pas encore faire du Linq, et j’ai l’impression que je suis le seul a avoir VRAIMENT migrer sur C#3. Donc, avant que quelqu’un découvre les nouveautés de C#4 et en abuse….

Ah, si, il y en a 1… et c’est le genre de personne à faire une chose d’une certaine façon “juste parce que c’est possible”, si vous voyez ce que  je veux dire… et là, ça devient vraiment dangereux, et on fini par avoir du code incompréhensible car il a détourné une fonctionnalité de son but initial.

Je dois être vieux jeux, mais je préfère parfois la méthode “classique et lisible” même si elle est plus verbeuse. Pourtant, je me laisse séduire, et je deviens vite fan des méthodes d’extension et des expressions lambda. C’est comme si mes 2 personnalités entraient en conflit quand je me dit :


return toto??tata;
// ou
return toto!=null?toto:tata;
// ou
if(toto != null)
return toto;
else
return tata;

Il est clair que je préfère la première solution, mais on m’a défait fait la remarque :

euh, tu peux l’écrire avec le “if”, je trouve ça plus lisible.

Et oui, il faut aussi s’adapter au niveau de lecture de l’équipe.

Mais là, je ne parle que du langage C#, pas des possibilité de la VM ou du Framework. S’il est possible d’interagir entre .Net et Javascript, alors je suis aux anges, mais il existe sans doute d’autres moyens “peut être plus contraignant” que d’ajouter de la dynamicité dans le langage C#. (On génère bien des “stub” pour communiquer en COM !)

Mais au finale, je me laisse prendre au jeux, et finalement je suis fan des expressions lamdba, Linq, les méthodes d’extensions, juste parce que ça s’écrit plus rapidement et que je suis fainéant.

Oxygene ?

Parce que je suis bavard, je voulais en profiter pour parler non pas de C#, mais de Oxygene.

delphiprismscreenshot

Un peu d’histoire : le créateur de Delphi a aussi été le créateur de C# : Anders Hejlsberg
Petit lien car ça ne fait pas de mal : Anders qui parle du future de C# (je sais, tout le monde l’a déjà vu).

J’ai commencer à coder en Delphi au Lycée (je ne compte pas les années Basic sous AsmstradCPC6128 ;) ).
Delphi était magique à l’époque : langage Pascal Objet, IDE avec un puissant Designer pour application Windows, framework riche…

Puis le monde a évolué : Anders Hejlsberg a quitté Borland pour aller chez Microsoft.
A l’époque, Microsoft a voulu faire leur propre “Java” : J++.
Anders a commencer par travailler la dessus, mais Microsoft est entré en conflit avec Sun concernant ce J++, et c’est comme ça que .Net naquis.
Anders inventa alors C# pour l’occasion, et J++ fut porté sous .Net sous le nom de J#.

Les années noirs pour Borland ont commencé, les entreprises se tournant vers Microsoft et .Net.
Mais je suis resté à coder en Delphi 7 dans mon ancienne société, alors que .Net en était déjà à sa V2. Période de ma vie (en tant que codeur) très frustrante: pas de “foreach”, pas de “generics”, programmation par interface difficile, etc.

Pour Borland, ce fut de pire en pire : ils ont fini par migrer Delphi en .Net, et ont alors inclue le SDK de Microsoft .Net dans leur IDE… comme si Delphi en tant que langage était mort, et que “Delphi 2008″ ne servait surtout qu’à développer en C#. Sans compter les frameworks tel que VCL.Net en conflit avec ceux de .Net comme Winforms.

Je n’ai pas travaillé avec Delphi 2008, mais je l’ai un peu testé. Malgré de gros problème de performance, cet IDE était déjà 1000 fois mieux que VisualStudio : refactoring poussé, historique “à la svn” à chaque sauvegarde/innactivité d’un source, Designer plus sympa, etc.

Mais finalement, Borland a laissé son IDE à Codegear et la mort de Delphi semblait proche. C’est pour cela que mon ancienne société a choisi de passer de Delphi7 à VisualStudio/C#.

Puis, récemment en surfant, j’ai découvert Oxygene.

Et je me suis dit : “haha, la résurrection de Delphi?”
Ce langage est dérivé de Delphi (comme une nouvelle version en quelque sorte), possède toutes (?) les fonctionnalités du langage C#3 comme Linq, etc.
Mais il ajoute aussi son lot de nouveauté que j’adore :

  • éviter les tests de nullité inutile :

if(truc.parent != null && truc.parent.parent != null)
toto = truc.parent.parent;
// devient
toto = truc:parent:parent;
  • ne pas choisir entre un “for” et un “foreach” car on a besoin d’un compteur

Combien de fois ais-je du ajouter un compteur dans un foreach (et risqué d’oublier le ++) et au final me résigner à utiliser le bon vieux “for”. En Oxygene, le foreach peut gérer l’index :


for each u in Users index i do begin
// et on se sert de i

Maintenant, Oxygene fait du buzz sur le net… enfin surtout “Delphi Prism“.

Finalement, l’IDE de Codegear est abandonné, et Delphi Prism s’intègre à VisualStudio (utilisé comme une application Eclipse RCP).
On retrouve le langage Oxygene, mais aussi un certains nombre de framework pour pouvoir faire des applications multi-plateform à l’aide de Mono.
Et pour faire plaisir aux ex-Delphi-istes, le package inclue une API d’interoperabilité entre .Net et les applications pure Delphi Win32.
Pour plus d’infos : http://www.delphi.org/2008/10/delphi-prism/

Il ne me reste plus qu’à tester tout ça :) Est-ce que ça veut dire que je vais abandonné C# pour revenir flirter avec Delphi?

Publié dans Blabla, Développement. Mots-clefs : , , , . 2 Commentaires »

Google-chrome rocks!!!

Cela fait du buzz en ce moment, Google sort son navigateur Google-Chrome, et pour l’illustrer l’annonce est faire sous forme de BD!!

Premièrement, j’adore la style “BD”, car comme on le dit : “un schéma vaut parfois mieux qu’un long discours”. Et on comprend tout de suite ce qu’ils veulent dire quand on voit la représentation “imagé”.

J’aime bien donner mon point de vue, et je vais surtout m’attarder sur l’aspect “interface utilisateur” et “Web vs Desktop”.
Lisez la suite de cette entrée »

Publié dans Blabla. Mots-clefs : , , . 1 commentaire »

un iMac illumine mon salon

Enfin, après une longue attente, de nombreuses hésitations, l’iMac illumine mon salon!

A chaud voici mes premières impressions: Lisez la suite de cette entrée »

Publié dans Blabla. Mots-clefs : , , , . 4 Commentaires »

Intelligence Artificiel

Étant un véritable Geek fanatique de science, je m’intéresse bien sûr à l’Intelligence Artificielle. L’idée de programmer mon “animal de compagnie virtuel” me trotte dans la tête depuis un moment. Le plus simple étant de faire un “bot” qui essaye de répondre “intelligemment” à ce que je lui demande; avec une approche “déterministe”.

L’étape supérieur serait qu’il puisse me répondre avec une approche “euristique” à l’aide d’une éducation. Cette étape nécessite donc de maitriser les Réseaux de neurones.

Lisez la suite de cette entrée »

Publié dans Blabla. Mots-clefs : , , . 3 Commentaires »

Winforms sous Linux

Après 4 ans de développement, la communauté Mono est enfin parvenu à l’implémentation complète des Winforms : http://tirania.org/blog/archive/2008/May-13.html

On peux se demander “oui, mais pourquoi faire?” et je ne trouve pas de réponse à la question. En effet, il arrive souvent qu’une application .Net possède du Legacy et donc des dépendances COM ou P/Invoke. Dans ce cas, on ne peut pas la migrer (pour tester si une migration est possible: http://www.mono-project.com/Moma)

Mais comme je suis exigent en terme d’interface, je n’aime pas avoir une application “alien” qui ne ressemble pas à mon environnement Linux (GTK/QT). Certes, il est prévu d’avoir un meilleur support du moteur de thème lors du prochain GSoC, donc wait and see.

Rappelons que les Winforms sont une sur-couche .Net de l’API WIN32. Cette dernière n’existant pas sous Linux et MacOS, j’en profite alors pour féliciter les équipes de Mono pour leur implémentation “from scratch”.

D’un autre coté, l’implémentation WPF chez Mono avance plutôt vite. D’ailleurs, la première release de Moonlight vient de sortir. Il n’y a pas de dépendance WIN32 dans ce cas, et je vois plus l’avenir des applications .Net dans ce sens. Mais l’approche WPF est d’avoir un thème propre à l’application, comme c’est le cas pour les sites Web, on obtient la même interface sous Linux et Windows (et MacOS). Mais finalement je trouve que ces interfaces ne s’intègrent à aucun des 3 environnements.

Lisez la suite de cette entrée »

Publié dans Blabla, linux. Mots-clefs : , , , , , , . 3 Commentaires »

Un iMac en vue?

Hier j’ai eu un petit coup de stress: je suis allé à tout hasard sur le site d’Apple et “oh joie” l’iMac a bénéficié d’une mise-à-jour… mais ce qui m’a le plus emballé c’est l’adoption d’un Nvidia 8800GS! Oui, ce n’est plus un ATI spécialisé dans le multimédia, mais bien une Geforce!
Lisez la suite de cette entrée »

Publié dans Blabla. Mots-clefs : , , , . 8 Commentaires »

Test Flock

Je viens de découvrir Flock, qui est un navigateur Web basé sur Firefox avec un skin et des plugins par défaut.

Ce navigateur est bien sympathique et sera sans doute adopté par de nombreux jeunes pas forcement pro en informatique. En effet, pas besoin d’aller chercher LE plugin parmi l’océan de plugins existantsde base, Flock permet de rédiger des billets de son blog, de consulter et insérer ses images de Flickr, de lire les news RSS etc.

Blogged with Flock

Publié dans Blabla. Mots-clefs : . Leave a Comment »

Eclipse Vista

Juste parceque les gens adorent les screenshots :
Eclipse sous Vista Beta 2.

EclipseVista2

Publié dans Blabla. Mots-clefs : , . Leave a Comment »

Firefox vs Opera

Comme vous le savez, Opera n’est plus payant (ni même sans pub) depuis longtemps, et dans sa version 9 sera compatible “Acid test“. De plus, Opera contient vraiment des fonctionnalités qui me plaise :

  • precurseur de la navigation par onglet
  • peut desactiver le chargement des images en un seul click
  • gestionaire de téléchargement (depuis la version 9 prend peut aussi télécharger des Torrents)
  • gestion des RSS
  • panneau lateral (avec la possibilité de l’ouvrir en cliquant sur le bord de l’écran… mieux qu’un racourcie à la con)
  • corbeille qui permet d’ouvrir des onglets récement fermés
  • permet de charger les onglets depuis la dernière fermeture, même si Opera a planté
  • skins
  • navigation à l’aide de geste avec la souris
  • le “click droit > copier et aller” (combien de fois je copie une URL pour la coller dans la barre d’adresse…)

Bref, Opera m’a forgé une expérience de navigation, et m’a habitué à des fonctionnalités dont je ne peux plus m’en passer. C’est pour cela que j’ai fait un peu de recherche pour avoir les même fonctionnalités dans Firefox (que j’apprecie aussi beaucoup pour son caractère libre).

Alors voici quelques extensions que je vous conseil :

Firefox

Publié dans Blabla. Mots-clefs : , . Leave a Comment »

Duke comes back !

Enfin une bonne nouvelle dans ce "monde de merde" : Duke Nukem HRP (High Resolution Pack) !
C'est un Duke Nukem, toujours le même avec les mêmes armes, les même monstres et les même maps…
mais avec des textures en Haute résolution (je joue perso en 1280 et j'en bave) mais aussi avec des modèles 3D, et non plus les sprits 2D comme sur l'original!

Bref, que du bon, à voir absolument.

Néanmoins, il vous faut une vrai copie de Duke Nukem car l'install va executer un script afin de copier le fichier "DUKE3D.GRP" qui contient toutes les données du jeux (marche aussi avec la version Démo téléchargeable depuis le site).

A ne pas oublier aussi, le "mod" officiel pour les 10ans de Duke : sd_duke. Ce dernier permet, entre autre, d'avoir du sang qui gicle et des "gibs" en 3D.

"Your face, your ass, what's the difference ?"

Publié dans Blabla. Mots-clefs : . Leave a Comment »