|
Page Précédente | |
Auteur | Sujet : [Langage D]C++ + Java + Python = D |
el muchacho Comfortably Numb |
I - Introduction Ce topic a pour but de faire découvrir le langage D, un langage qui a pour ambition de faire mieux que le C++ . Pour cela, il allie les atouts du C++ et du Java. Un langage orienté objet moderne
... la performances et la compatibilité En réalité, le titre de ce topic devrait plutôt être C++ + Java < D. En ce qui concerne les performances, voici un benchmark qui montre que les perfs sont comparables à celles du C++. Les superbes jeux shoot'em up de Kenta Cho, écrits en D avec la lib SDL et OpenGL donnent une bonne idée des possibilités du langage (le source est inclus, je recommande Gunroar et Torus Trooper). Ressources De nombreux éditeurs supportent le langage, mais à défaut, une coloration syntaxique pour Java ou C# peut faire l'affaire. Il existe divers IDE supportant plus ou moins bien le langage. Actuellement, le meilleur choix est l'extension pour Visual Studio et l'excellent Code::Blocks. Code::Blocks supporte la syntaxe de D, la complétion en cours de frappe, la recherche des déclarations/implémentations et l'accès instantané aux erreurs de compilation. Du point de vue des debogueurs, les débogueurs qui supportent l'ancien format de Microsoft (Visual C++ 6 et Windebug) sont supportés. Windebug 5.1 est inclus dans le download officiel. Mais aujourd'hui on aura avantage à utiliser un débogueur spécifique pour le langage qui s'interface correctement avec Code::Blocks ou emacs: Ddbg. Mise à jour (fin déc 2012): - la maintenance de D1 va être maintenant arrêtée. - D2 est un langage nettement plus complexe que D1, avec de nombreux concepts nouveaux, en particulier la sémantique immutable/const, les @properties et la librairie des ranges, qui sont des containers améliorés. La spec du langage est stable, les évolutions sont sur la stabilisation du compilateur de référence et les librairies. Le compilateur est enfin proche de pouvoir créer des DLL. - Phobos est maintenant la seule et unique librairie standard, et commence à être assez correcte grâce aux efforts soutenus de la communauté, malgré encore des lacunes importantes. - l'ouvrage de référence pour apprendre D2 est The D Programming Language d'Andrei Alexandrescu - la communauté s'agrandit et le langage gagne petit à petit de la reconnaissance, notamment du coté de la communauté C++, qui en a repris certaines idées pour C++11.
Cette petite introduction a pour but de donner envie d'en savoir plus sur ce langage, en aucun cas d'en fournir une description complète. Pour cela, je vous renvoie à la definition du langage, qui, contrairement à celle de C++, est claire et lisible. Une connaissance de C++ et/ou de Java est utile pour comprendre les concepts exposés. Ce topic est un "work in progress", vos remarques, erreurs relevées (il y en a), et autres commentaires sont les bienvenus.
1.Les types de base Les types de caractères sont char (UTF-8), wchar (UTF-16) et dchar (UTF-32), et peuvent être castés en int. A cela, D ajoute le type booléen bit ou bool et le type universel void. 2.Les pointeurs 3.Les déclarations La valeur d'initialisation par défaut est donnée par la valeur type.init. Elle est de 0 pour les types entiers, mais de type.nan (Not A Number) pour les flottants, et FF/FFFF/FFFFFFFF pour les types char/wchar/dchar, ceci pour des raisons évidentes de débogage et de mise au point : avec ces valeurs par défaut, le programme fonctionnera incorrectement dès le premier test (ce genre de valeurs par defaut est d'ailleurs souvent recommandé). Elle peut cependant être modifiée si le besoin se fait sentir. Exemples:
Enfin, le mot-clé auto permet de faire de ne pas spécifier le type d'une variable si son initialisation permet de le deviner sans ambiguité (inférence de type). Par exemple :
Pour la déclaration de types, D possède les deux mots-clefs typedef (déprécié depuis 2.057) et alias. Ils ressemblent en surface au typedef de C, mais il y a un piège.
4.Les tableaux Qu'ils soient statiques ou dynamiques, les tableaux 1D définissent les propriétés suivantes : Quelques exemples donneront rapidement une idée de ce que l'on peut faire avec :
La recopie dans un autre tableau se fait ainsi
Les tableaux, quelque soit le type contenu, peuvent être concaténés avec l'opérateur ~.
5.Les tableaux associatifs
Message édité par el muchacho le 01-05-2012 à 06:31:28 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
Publicité | Posté le 03-12-2005 à 12:27:56 |
el muchacho Comfortably Numb | III - Programmation OO et modules 1.Les classes
Attention : les objets, comme les tableaux, sont créés uniquement sur le tas et passés par référence.
Les fonctions peuvent être imbriquées, la portée de la fonction imbriquée se limitant a la fonction qui la contient. Par contre, les portées de deux variables locales ayant le même nom ne peuvent se superposer. Ex. :
La syntaxe des pointeurs de fonction est elle aussi rendue plus lisible.
Pour les fonctions non statiques, l'équivalent du pointeur de fonction est le pointeur de fonction déléguée, dont l'usage est similaire. Une fonction déléguée a accès aux variables de la pile dans le contexte à partir duquel elle est appelée.
Mais ce n'est pas fini. Comme en Java, une fonction peut être anonyme. Cela permet certaines fantaisies qui sont normalement du domaine réservé des langages de programmation fonctionnels (même si l'usage reste loin d'être aussi pratique qu'avec ces derniers).
Enfin, à partir de la v2.007, le langage intègre les fermetures.
Enfin, D les fonctions supportent aussi les nombres variables d'arguments. 3.Les attributs
On peut attribuer un attribut à plusieurs déclarations en les englobant dans un scope.
Les RTTI 5.Les modules La compilation se fait en 2 passes. La première applique les règles de compilation conditionnelle (équivalent d'un preprocessing) et vérifie la syntaxe, la deuxième vérifie le typage et effectue la compilation proprement dite. Message édité par el muchacho le 23-12-2011 à 09:41:03 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | IV - Programmation générique 1.La surcharge d'opérateurs Un template est déclaré ainsi : template nom(T, T1, T2) {...}, et instancié par : nom!(type). Alors qu'en C++, seules les fonctions et les classes peuvent être paramétrées, en D, le contenu des accolades est une portée dans laquelle on peut mettre à peu près n'importe quoi : classes, structs, types, enums, variables, fonctions, d'autres templates, voire même un programme entier.
Deux instantiations d'un même template avec la même liste de paramètres sont identiques, et ce, même si ces deux instances sont dans différents modules. Ceci est dû au fait que comme en C++, la résolution se fait à la phase d'édition des liens.
Les templates de D offrent une grande lattitude dans la déclaration des paramètres.
Les templates de classes bénéficient d'une simplification syntactique. Si un template ne définit rien d'autre qu'une (et une seule) classe :
Enfin, les paramètres peuvent avoir un type par défaut.
On voit avec les exemples ci-dessus que toutes sortes de spécialisations de templates sont possibles. 3.Les templates variadiques
4.Métaprogrammation par templates L'exemple qui suit utilise astucieusement le mot-clé static if qui permet d'effectuer de la compilation conditionnelle. L'usage de ce mot-clé et des templates permet des optimisations poussées. Notez les templates imbriqués et fortement récursifs.
5.Les mixins
Un exemple d'utilisation des mixins est l'application de design patterns, comme le singleton:
6.L'exécution de fonctions à la compilation (CTFE) Message édité par el muchacho le 20-12-2011 à 10:00:01 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb | V-Les ajouts de D2 La déclaration immutable D2 ajoute deux déclarations à la sémantique du langage: immutable et const. Elles s'inspirent du mot-clé const de C++, avec des différences sémantiques; se référer à la page en question pour les différences. Ce sujet a été l'un des plus difficiles à définir et à justifié à lui seul le développement d'une version 2 du langage. Globalement, si l'usage de immutable et const en D est un peu plus simple que celui de const en C++, il reste difficile à maîtriser et il n'est pas rare de tomber sur des bugs du compilateur. Il est donc conseillé d'utiliser ces qualificateurs avec modération et à bon escient. immutable indique qu'un symbole est inmodifiable durant toute l'exécution du programme. Aucune référence vers ce symbole ne pourra en changer la valeur. C'est pratique pour la sécurité comme pour le multithreading: une valeur déclarée immutable peut être partagée sans besoin de synchronisation. Ces propriétés permettent au compilateur d'appliquer des optimisations importantes.
Pour plus de souplesse, immutable peut être utilisé comme constructeur de type.
La déclaration immutable peut être rajoutée ou supprimée à tout moment à l'aide d'un cast(). Fonctions membres immutables
Message édité par el muchacho le 22-12-2011 à 14:34:15 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb |
verdoux And I'm still waiting | Topic mort né, comme ce langage |
Ace17 | drapeau |
chrisbk - | y'a malheureusement rien a dire sur ce langage |
Harkonnen ModérateurUn modo pour les bannir tous | intéressant --------------- J'ai un string dans l'array (Paris Hilton) |
Publicité | Posté le 04-12-2005 à 22:38:39 |
KangOl Profil : pointeur | en ce qui concerne les classes...
|
el muchacho Comfortably Numb | Kangol > bien vu, il y en a qui suit
Message édité par el muchacho le 04-12-2005 à 23:07:48 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
nraynaud lol | d'autre part, le mec qui se sent assez malin pour tenter d'optimiser un truc à la main a toutes les chances de foutre la mémoire en l'air.
Message édité par nraynaud le 04-12-2005 à 23:44:10 |
nraynaud lol | j'ai l'impression que ce truc n'innove pas, et ne transcende pas non plus les compromis de C# et java. Il n'apporte rien de nouveau.
Message cité 1 fois Message édité par nraynaud le 04-12-2005 à 23:43:04 |
chrisbk - | je trouve pas les param out debile
|
el muchacho Comfortably Numb |
Message édité par el muchacho le 04-12-2005 à 23:52:18 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
nraynaud lol |
|
chrisbk - |
Message cité 1 fois Message édité par chrisbk le 04-12-2005 à 23:56:43 |
chrisbk - | enfin jdis penible a faire, en fait non ?
Message édité par chrisbk le 05-12-2005 à 00:08:35 |
nraynaud lol | U teh ehll
Message édité par nraynaud le 05-12-2005 à 00:08:16 |
chrisbk - | its because ur too supid to understnad tehir tru power, mroon |
chrisbk - | de toute facon depuis que je fais de l'actionscript j'ai atteinds l'état Zen du programmeur. Plus rien ne peut m'atteindre, je prevois tout a l'avance et tout ce qu'il se passe fait partie de mon Plan |
masklinn í dag viðrar vel til loftárása |
--------------- Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody |
blackgoddess vive le troll ! |
--------------- -( BlackGoddess )- |
el muchacho Comfortably Numb |
++fab victime du syndrome IH | Bon, vu que le topic est en cat C++, je me permet de faire une petite comparaison (simpliste) avec le futur C++0x.
|
chrisbk - |
|
el muchacho Comfortably Numb | Merci pour ta participation, ++fab.
Message cité 1 fois Message édité par el muchacho le 11-12-2005 à 10:24:40 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
chrisbk - |
Dion Acceuil |
--------------- When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====> |
chrisbk - | (cela dit, personne n'est censé aller bidouiller dans la stl) |
chrisbk - |
|
Dion Acceuil | Mais euh ca fait koi export machin toussa ?
--------------- When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====> |
el muchacho Comfortably Numb | C'est un peu complique... en gros, ca instancie un template sans vraiment l'instancier.
Message édité par el muchacho le 10-12-2005 à 22:35:20 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
el muchacho Comfortably Numb |
Message édité par el muchacho le 10-12-2005 à 22:56:07 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
Tamahome ⭐⭐⭐⭐⭐ | quel est l'interet de ce truc ? O_o Qu'apporte t'il de nouveaux par rappot à ce qui existe deja sur le marché (C#, java, C etc...) |
el muchacho Comfortably Numb | Ben lis le topic.
Message édité par el muchacho le 11-12-2005 à 10:36:29 --------------- Les aéroports où il fait bon attendre, voila un topic qu'il est bien |
++fab victime du syndrome IH |
|
Publicité | Posté le |
Page Précédente |
Sujets relatifs | |
---|---|
Upload en JAVA | [Java] Architecture pipes-filters |
[java] Tracer un rectangle en temps réel | [Java] Aide sur projet avec interface graphique ( Pas des fenêtres) |
[JAVA] Empecher la saisie dans une jtable | impossible d'éxécuter un programme en java !!! |
programmation jeux java sur samsung Z300 | Envoyer des fichiers sur un FTP depuis un programme Java... |
[java] Agrandir le contenu d'une tab en même temps que la tab | [Java] Les hint |
Plus de sujets relatifs à : [Langage D]C++ + Java + Python = D |