|
Publicité ' | ||||||||||||||||||||||||
|
|
#81 | |
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 552 ![]() |
Citation:
|
|
|
00
|
|
|
#82 | |
|
Membre chevronné
![]() Inscription : juin 2009 Messages : 632 ![]() |
Citation:
http://www.developpez.net/forums/d78...d/#post4838794 Dans le cas de D, avoir un container d'Objects n'est probablement pas une hérésie. |
|
|
00
|
|
|
#83 |
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 552 ![]() |
Tout comme en Java et en C#. (il n'y a quasiment pas de différence a ce que je vois, niveau fonctionalité rapport a Object)
Mais ce que dis koala01 c'est que c'est dommage de permettre "facilement" de manipuler directement des Object. Cela peut pas mal détourner des développeur dans des pratiques "abstraites" qui mèneront a du code difficile à comprenre/modifier. Normalement dans ce type de language, un développeur experimenter n'utilisera quasimment jamais Object directement. Object "simpliefie" une pensée de manière trop radicale, qui dit que "tout" à une origine commune et qui au départ peut sembler comme un soulagement dans les contraintes a maintenir en codant (je pense notemment aux débutants qui ont apris du C ou du C++ et qui viennent a ces languages). Un developpeur experiementé en Java et C# utilisera toujours des types de bases dans ses conteneurs qui indiquent la vrai nature commune de ses elements contenus, qui ne "devrait" jamais être Object, parceque Object est l'équivalent de "n'importe quoi", ce qui est pour le moins obfuscateur. Un wrapper autour de void* (Boost::Any?) a tout autant de sens : on en a besoin que dans des cas bien spécifiques et assez "extremes" conceptuellement. Je ne suis personellement pas non plus fan d'une base commune Object (que j'ai aussi tendance a manipuler comme du void* dans les languages qui l'imposent) mais je me contente juste d'ignorer son existance jusqu'a ce que j'en ai besoin (ce qui est très rare, mais arrive, notemment en AS3...) |
|
00
|
|
|
#84 | |
|
Membre chevronné
![]() Inscription : juin 2009 Messages : 632 ![]() |
Citation:
Mais dans ces cas bien spécifiques, il est intéressant d'être en mesure de manipuler une collection "d'Objets". Les langages sus-cités ne sont pas c++, il faut bien qu'ils se démarquent un peu (déjà qu'ils partent perdant à la base |
|
|
00
|
|
|
#85 |
|
Membre émérite
![]() Inscription : juin 2006 Messages : 1 204 ![]() |
ca serait bete de repartir dans un language comme D lorsqu'on est avancé dans le C++... moi je ne suis pas prêt d'abandonner tous mes outils et libs que j'ai fait ... il y a toujours un passé qu'il faut assumer, et plus un language est utilisé plus il devient difficile de le changer.
|
|
|
00
|
|
|
#86 | ||||||||
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
Toutefois, la fonction imbriquée peut-elle accéder aux variables locales de la fonction englobante ? En d'autre termes, y'a t'il un lien statique ? Code :
J'aborde juste ce point parce qu'il me fait gagner du temps en D. Je suis d'accord que le problème disparaitra avec C++1x. Citation:
![]() Citation:
Citation:
Mais j'ai du mal à voir pourquoi ca n'aurait aucune raison d'être. Gagner du temps, ca me suffit comme raison ; c'est juste une autre syntaxe pour écrire/appeler les getters/setters. (Pour moi Delphi est le langage qui a su le mieux exploiter les propriétés : celles-ci peuvent être mappées directement sur un champ, ce qui ne crée aucun overhead même sans inlining) Citation:
![]() Citation:
|
||||||||
|
00
|
|
|
#87 | ||
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 562 ![]() |
Citation:
Tu as par exemples des méthodes comme toString(), hashCode() que l'on t'invite éventuellement à redéfinir et ces méthodes sont utilisées par les collections, par les interfaces graphiques et tout un tas de trucs. Bref, je pense qu'il faut vraiment le voir comme une interface, un contrat minimum pour une classe et non comme une façon de permettre des trucs pas nets comme mélanger des objets de nature hétérogènes dans une collection ou *éviter* le recours aux génériques. Citation:
De plus, il suffit pour l'examiner de cliquer sur le fichier de projet pour l'ouvrir dans l'IDE et le compiler en 2 clics. Ce que je récupère du net en C++, comme un exemple d'utilisation d'une librairie ou quelque chose comme ça, d'ici que j'ait cela ouvert dans mon IDE et dans un état compilable, il me faudra sans doute plus de temps. Ca s'explique surement par la foule de compilateurs existants et de librairies (hors STL) qui peuvent avoir été employées. Pour ma part, j'ai l'impression que ce qui fait le succès d'un toolkit tel que Qt en C++, c'est justement cette homogénéité qu'il est capable d'offrir à travers ses librairies qui justement se rapproche des frameworks de base de technos tels que java et C#. |
||
|
|
00
|
|
|
#88 |
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
Bien sur ! C++ est un vieux langage et il y a des erreurs de jeunesse dedans. Il est pour moi totalement clair que D n'aurait pas pu voir le jour sans le recul qu'a permis les erreurs de jeunesse de C++.
|
|
|
00
|
|
|
#89 | |||
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#90 |
![]() ![]() Inscription : juin 2005 Messages : 8 586 ![]() |
Tu dois confondre avec C, ou encore le légendaire "C/C++"
Oui oui, j'ai un médicament pour lutter contre la mauvaise foi... Mais dans le fond je ne pense pas avoir tort. On a rarement recommandé l'utilisation de void* en C++
__________________
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++ Le guide pour bien débuter en C++ |
|
00
|
|
|
#91 |
|
Membre confirmé
![]() Inscription : juin 2008 Messages : 241 ![]() |
Il y as quelque temps j'ai du remplacer des listes de void* par des conteneur STL dans du code professionnelle, et il y en avais beaucoup de ces ******!!
Alors j'aurais tendance a penser que void* ou Object*, quand on est c**, on est c**. A la limite, les Object* permettront de détecter les erreurs de cast au runtime. |
|
|
00
|
|
|
#92 |
![]() ![]() Inscription : juin 2005 Messages : 8 586 ![]() |
Oui, on n'aura jamais fini de blâmer ceux qui ont répandu le "C/C++"
__________________
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++ Le guide pour bien débuter en C++ |
|
00
|
|
|
#93 | |
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
Citation:
Voila le point que je voulais montrer : on peut faire le même genre de truc horrible que dans l'exemple en C++. Sauf que, dans un cas comme dans l'autre, il est vivement conseillé de ne pas le faire. |
|
|
|
00
|
|
|
#94 | |
|
Membre éprouvé
![]() Inscription : mai 2005 Messages : 223 ![]() |
Citation:
Le principal avantage que je trouve à D par rapport à C++, c'est que sa grammaire est simple et non ambigüe, ce qui permettrait (si le langage décolle), la création d'un écosystème d'outils d'analyse de code et d'IDE aussi puissants que ce que proposent Java et C# (qui sont plus faciles à parser que C++). Par exemple, comme ce plugin Eclipse qui permet de débugger les templates à l'écriture : |
|
|
|
00
|
|
|
#95 |
|
Nouveau Membre du Club
![]() Inscription : mai 2002 Messages : 47 ![]() |
Personne n'a parlé de l'Objective-C ?
Sans être un spécialiste, il me semble qu'il réponds a la plupart des attentes d'un langage "moderne", tout en dérivant lui aussi naturellement du C, ce qui lui permet d'hériter d'un masse considérable de lib. Bien sur, même s'il peut être compilé sur n'importe quelle plateforme (avec GCC), il est surtout utilisé sur Mac, qui fournit un framework complet de qualité. Je suis curieux de savoir ce que vous pensez de ce langage, et pourquoi il est resté si marginal (il n'a même pas sa place dans le menu de developpez.com
__________________
we are the knights who said nee ! |
|
|
00
|
|
|
#96 |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Objective-C, remplaçant de C++ ?
Comment on écrit des templates en Objective-C ? |
|
00
|
|
|
#97 | |||||||
|
Expert Confirmé Sénior
![]() ![]() Emmanuel DelogetDéveloppeur informatique Inscription : septembre 2007 Messages : 1 826 ![]() |
Citation:
HelloWorld.h Code :
Code :
Code :
La compatibilité entre Objective-C et C n'est pas suffisante pour avoir permis que le langage s'impose face à C++, puis Objective-C s'est retrouvé en concurrence avec des langages au moins aussi évolué (Java, puis C#) mais ayant des objectifs de portabilité nettement plus élevé. De plus, Objective-C n'est pas, à ma connaissance, standardisé - ce qui est un frein pour son utilisation.
__________________
[FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...] Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi. Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça. Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas. Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas. |
|||||||
|
00
|
|
|
#98 | |
|
Membre éprouvé
![]() Inscription : mai 2005 Messages : 223 ![]() |
Citation:
Objective-C ne rajoute que l'orienté objet à C, alors que C++ apporte beaucoup plus (surcharge de fonctions et d'opérateurs, templates, un typage plus fort...). En gros, un compilateur Objective-C peut s'implémenter avec un simple préprocesseur et un compilateur C. La particularité d'Objective-C est qu'il a hérité son modèle objet de Smalltalk, alors que celui de C++ vient plutôt de Simula. En gros, plutôt qu'un simple vtable, Objective-C utilise un runtime qui charge les classes et dispatche les messages aux objets. Presque tout est retardé au runtime en Objective-C, alors qu'en C++ on en fait le plus possible au moment de la compilation. Objective-C est un langage dynamique : on peut charger des classes en mémoire et rajouter des méthodes à des classes existantes alors qu'un programme s'exécute. Par contre, un simple appel de méthode (pardon, un envoi de message Qui plus est, Objective-C n'est pas standardisé. C'est Apple qui, étant son principal utilisateur, fait un peu ce qu'il veut avec le langage. Il en résulte des incompatibilités entre les runtimes GNU et Apple. |
|
|
|
00
|
|
|
#99 | |
![]() ![]() |
Citation:
Regarde le code de Gcc, et tu remarquera que l'ensemble de la collection est écrit en C (que ce soit pour les compilateurs fortran, C++, java ou objective-c). D'ailleurs, c'est cela qui est bien, avec les langages dits de troisième génération: il est, virtuellement, possible d'écrire un compilateur pour un langage donné dans n'importe quel autre langage, le plus difficile (mais qui est passé depuis belle lurettes
__________________
en bas de page
|
|
|
|
00
|
|
|
#100 | |||||||
|
Membre éprouvé
![]() Inscription : mai 2005 Messages : 223 ![]() |
Citation:
Tu as parfaitement raison et je me suis mal fait comprendre. Ce que j'ai voulu dire, c'est que le module Objective-C de GCC va transformer le code Code :
Code :
De même, le code Code :
La validité du code Objective-C est directement dépendante de la version de C utilisée derrière. C'est pour ça que je faisais la différence entre un compilateur complet et un préprocesseur/module de GCC. Mais on s'éloigne du sujet, qui est le langage D, là. |
|||||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com