Comment passer du sudoku à configurer l’auto-complétion de D dans Eclipse

Rocky meets the town musicians of Bremen
Hacker News a publié aujourd’hui un bout de code de Donald Knuth qui exposait une méthode de résolution automatique de grilles de sudoku.

Le code arbore une étrange extension .w et sa syntaxe, quoique très proche du C, présente de singulières singularités:

  • Les commentaires semblent être délimités par @<…@>=
  • Le code inclue une déclaration @c, semblant indiquer le langage utilisé
  • Des morceaux sont étrangement fourrés de @:
    @d panic(m) {@+fprintf(stderr,"%s!\n%s",m,buf);@+exit(-1);@+}

De tous ces éléments, j’ai supposé que le code était écrit en D.

Et si Donald Knuth utilise D, alors il faut que je m’y essaye. En fait, je cherchais justement un langage compilé et performant et D semble être un excellent candidat.

J’adore python, j’apprécie PHP et je serai certainement demain amoureux de Ruby, mais il est des temps où la performance a son importance.
Les applications .Net et Mono tournent (maintenant) relativement rapidement mais on a parfois juste besoin d’un binaire, par exemple pour un script cgi à faire tourner chez son hébergeur, qui n’a pas installé et n’installera certainement pas les librairies mono sur son serveur RedHat parce qu’il soupçonne Novell de conspiration anti-Linux avec Microsoft.

Pour quoi pas C/C++ alors ?

Bien sûr. Je suis un peu rouillé en C et encore plus en C++, mais tout programmeur décent se doit de connaître ces langages. Point-barre. Pas d’exception.

Le seule chose, c’est que nous sommes maintenant en 2010. Connaître un langage, c’est bien. Avoir à travailler quotidiennement avec un langage qui n’inclut pas de garbage collector et qui nécessite des malloc de chaque structure est un peu moin bien.

Et si C est sympa et propre, il n’est pas orienté objet. Et je suis d’accord avec Steve Yegge pour dire que « C++ is the dumbest language on earth« .

Donc, D paraît intéressant. De bonnes performances, orienté objet, avec un garbage collector, un support natif des strings et même un support des tests unitaires. Un « vrai » langage en somme. De plus, sa proximité avec C/C++ me donne à penser que le coût d’apprentissage peut être plus faible que pour d’autres langages.

J’ai donc sauté sur le site de Digital Mars pour en savoir plus.

Il s’avère que les commentaires en D utilisent exactement la même syntaxe qu’en C: Nos bons viex // et /* .. */.

On ne peut en conclure qu’une chose: Le code Donald Knuth n’est pas écrit D.

Il s’avère que les programmes téléchargeables sur le site de Donald Knuth sont en fait écrits en CWEB, un langage inventé par… Knuth. En gros, il s’agit d’un mix entre du TeX et du C, dont le but est de permettre d’écrire du code pour les machines mais aussi et surtout, pour les humains.

Les sources CWEB peuvent être parsées pour produire soit de la documentation TeX, soit du code C.

Enfin, toujours est-il que même si Knuth ne l’utilise pas (mais peut-être l’utilise-t-il), j’ai toujours envie d’essayer D.

J’utilise Eclipse comme IDE principal, pour PHP et python. J’ai aussi configuré dessus CDT, que, même si je ne l’utilise pas souvent, je trouve très bon.
Mon choix d’IDE pour D s’est donc naturellement porté vers Eclipse.

Il existe un plugin Eclipse pour D. Son som est Descent.

Je dois vous prévenir que Descent n’est pas aussi about que JDT, CDT, PDT ou même Pydev. Par example, par défaut, Descent ne propose pas d’auto-complétion ni ne configure de profil de compilation ou de debug.

Des docs sont disponibles sur le site de descent et sur le web concernant son installation et sa configuration mais elles sont pour la plupart conçues pour Jaunty ou Windows.
J’ai rencontré de petites différences lors de l’installation et la configuration sur ma distribution Karmic.

Voici les étapes que j’ai suivies pour configurer la complétion de code:

Je n’ai pas encore configuré le compilateur ni le débuggeur mais je suis à peu près sûr que cela ne devrait pas poser de problème si je m’en tiens à LDC.

A noter que j’ai aussi installé gdc, qui a le gros avantage de figurer dans les dépôts Ubuntu mais je n’ai pas encore réussi à le faire tourner avec tango, bien que cela paraisse possible.

  1. Aucun commentaire pour l'instant

  1. Aucun trackback pour l'instant