• [^] # Re: Le langage du futur ?

    Posté par (site web personnel) . En réponse au journal Le langage du futur ?. Évalué à 0.

    C'était un EXEMPLE ! L'exemple bête de ce qu'il ne faut pas faire justement, mais qui met bien en évidence le fait que ta « protection » n'en est pas une.
    Comme je le disais, tu as pris exemple sur un langage qui n'est pas 100% objet et qui justement te permet de faire ce genre de conneries. D'où l'intérêt d'un langage qui tend à utiliser au maximum les notions objets.
    Que ce soit le typage qui me permette de résoudre ce problème dans mon langage, Ok. Et alors ? Si ça me permet de mieux respecter un principe objet d'encapsulation ? Pourquoi s'en passer ?
    Pour le protected moi perso ça ne me dérange pas, il peut avoir une utilité. D'ailleur tu verras que d'autres langages utilisent encore d'autres mot supplémentaire : internal par exemple ;) (je te laisse trouver le langage puisque tu as une expérience bien plus élevée que moi en la matière)

    Ok, vu tes lectures, je commence à comprendre. Il n'y a pas que du mauvais chez Microsoft, mais si c'est là ta référence de base pour assimiler les autres langages, tu risques d'avoir une vision quelque peu déformée du fonctionnement d'un ordinateur.
    Tu crois franchement que j'ai commencé à code sur .NET alors que ca ne fait qu'à peine 2 ans que ca existe ?

    1) Je te file une VCS2600 avec une cartouche vierge de 4Ko et je te demande de réécrire Space Invader et de le faire tenir dans le médium fourni. Si tu ne peut pas le faire alors que tes prédécesseurs l'ont fait vingt ans avant toi et sans langage objet, c'est que ce n'est pas une évolution.
    Et ? tu cherches à montrer quoi là ?

    2) Si tu utilises une JVM comme garde-fou parce que tu estimes que ton programme ne pourra fonctionner de façon sûre que dans ce genre d'environnement, c'est toi qu'il faut remettre en cause. Pas ta machine. Comment feras-tu le jour où tu devras à ton tour écrire une machine virtuelle ?
    Je ne dis pas que j'utilise une VM (y'a pas que JVM ;) ) comme garde-fou mais comme machine capable d'exprimer et de respecter au mieux les informations introduite par les notions objets. J'utilise également une VM pour pouvoir utiliser le langage le plus adapté selon la partie de l'application que je rédige, sans avoir à me soucier de l'interopérabilité entre les composant de mon appli.
    Oui j'avoue je programme avec .NET, mais parcque ils ont introduit un CLR (Common Langage Runtime) dédié à faire tourner n'importe quel langage, pourvu qu'il soit OBJET (parcque justement la VM en tire partie) et parcqu'elle introduit des un ensemblre de types de bases autre que le simple mot mémoire.
    Pour le jour où j'aurai à rédiger une machine virtuelle, désolé je dois être con mais je vois pas ce que tu veux dire.

    3) Parlons-en de la portabilité: Un programme écrit dans un langage de haut-niveau fonctionnera sur toutes les machines ... sur lesquelles la librairie standard et la machine virtuelle du langage auront été portées ! Ce qui limite déjà les différents modèles. Ensuite, il fonctionneront exactement de la même façon: A quoi cela sert-il d'avoir des machines différentes alors ? Une machine peut très bien être en avance sur ses concurrentes parce qu'elle apporte une killer-feature, comme on dit. Le programmeur Java/.Net est-il condamné à ne jamais en profiter ?
    Au niveau de la machine physique, ces killer-features comme tu dis ne peuvent pas apporter grand chose directement au programmeur. Les optimisations peuvent se faire au niveau de la VM qui apportera tout de suite le gain à lappli qui tourne au dessus... Et puis franchement, une VM apporte beaucoup plus de "killer-features" qu'une simple architecture processeur... d'ailleur un des autres intérêt des machine virtuelles c'est aussi de favoriser la diversité des architectures processeurs, il n'y a pas besoin de recompiler tous les progs, juste la VM et les biblio qui vont avec.
    Encore une fois, je ne vois pas trop l'intérêt, en dehors de l'assembleur et parfois du C de programmer pour un processeur spécifique. A part peut être pour coder sur un proc très lent avec très peu de mémoire, mais c'est loin tout ça maintenant...

    Pourquoi « pseudo » ?
    - Sous GTK+ en C, c'est:
    window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    - En Java, ce sera
    window1 = new gtk_window (GTK_WINDOW_TOPLEVEL);

    nan t'as pas compris ma question. Je ne te parle pas des différence de syntaxe mais du passage de l'un à l'autre Je voulais justement te demander comment tu passes du C à Java sans perdre ton temps à réécrire un wrapper intermédiaire tout ça parcque ton langage de base simulait l'objet. Le langage C exprimerait des notions objets, elles auraient pu être directement wrapper automatiquement pour être utilisables en Java...

    Non, non, non et non. D'abord, c'est à se demander si tu as effectivement jamais écrit une ligne d'assembleur.
    Du 68k dans ma jeunesse et du x86 pendant mes études.
    http://c2team.fr.st/(...) (matte les screenshots pris sur une TI89) pour voir ce que j'ai fait. C'est modeste mais j'ai fait tout le moteur graphique en 3D iso, alors les optimisations, voilà quoi... mais bon c'est peut-être pas un niveau suffisant pour toi...
    Pour ce qui est du x86, j'avoue que je suis moins doué en la matière, je me contente de ce que j'apprends en cours. Enfin j'ai déjà rédigé quelques lignes de code (genre un noyau de syncrhonisation en asm avec une passerelle en C, et là d'ailleur on applaudit la manipulation des données en passant d'un langage à un autre, pourtant réputés comme très proche...)
    J'ai également à travers mes études eu l'occasion de rédiger 2 compilateurs, pour 2 machines virtuelles (question de pratique, on ne peut pas avoir pleins de machines sous la main) complètement différente, une à pile, une autre basé sur du code 3 adresses.
    Tu remarqueras que je ne remets nullement en doute tes compétences.

    connaître le fonctionnement d'un ordinateur, c'est précisément le métier du programmeur. Connaître le principe de fonctionnement général de la plupart des ordinateurs (surtout si tu te limites aux ordinateurs), oui, c'est le boulot du programmeur. Connaître les spécificités de chaque machine, non, ça n'est pas son taf. Sauf pour le programmeur système. Si la machine virtuelle (ou le compilateur) fait bien son taf, c'est à elle de tirer partie des différente architecture.

    En quoi le fait que ton langage soit « objet » apporte des informations supplémentaires au compilateur ? Au contraire, la plupart des langages objet, C++ en tête d'ailleurs, ont la fâcheuse réputation de consommer plus de mémoire pour un même résultat.
    Comme je l'ai expiqué plus haut, les informations apportés au compilateurs sont justement celles liées aux notions objets. J'ai pris exemple sur l'encapsulation. Effectivement si le compilateur transforme le code en natif, toutes ces informations seront perdues et tu pourras faire n'importe quoi comme en C++ dans l'exemple que tu m'as donné. Si c'est une VM qui tourne dessous, et qu'elle est conçu pour justement exploiter toutes ces informations, alors elle prend tous son sens : tu pourras t'arracher à essayer d'accéder à un membre private si tu n'y est pas autorisé depuis un autre langage que le langage dans lequel tu as écris ta classe de base.

    Lorsqu'un codeur écrit avec les pieds un programme utilisant un langage de trop haut niveau
    Si le programmeur code avec les pieds dans un langage de haut niveau, il est à peu près certain qu'il codera encore plus avec les peids dans un langage de bas-niveau, ou alors il y met de la mauvaise volonté.

    80% de la puissance de la machine est consommée dans les conversions successives entre ces couches
    T'as déjà utilisé une VM bien foutue ? Si je prend exemple sut la machine virtuelle .NET elle compile le programme en natif avant la première exécution sur l'architecture cible. Pour avoir fait des tests basique, je n'ai pas vu de différence de rapidité entre du C++ natif et du C# sur .NET. Aller, je prend exemple sur Quake2.NET (http://www.codeproject.com/managedcpp/Quake2.asp(...)) qui tourne à 90% de la vitesse en natif.
    Je crois qu'il va falloir abandonner ce mythe qui a la vie dur qu'une machine virtuelle ralenti considérablement une application... (évidemment, quand on parle VM, tout le monde penses Java, forcement...) :-p

    D'autre part, optimiser un programme ne se limite pas à « simplifier l'algorithme utilisé », mais aussi à parler le langage de ta machine. Tu oublies qu'un compilateur est avant tout un traducteur.
    On est bien d'accord, sauf sur les rôles. Simplifier l'algorithme utilisé c'est au programmeur de le faire. Opitmiser le code machine, c'est au compilateur ou à la machine virtuelle de le faire.
    Pour ton exemple foireux de traducteur, tu remarqueras qu'il y a une différence entre un langage naturelle (parlé) et un langage informatique : il y en as un que l'ont peut exprimer sur ordinateur, et pas l'autre, un qui est exprimable par une grammaire, pas l'autre. C'est pour celà que les traducteurs de langages naturelles ne sont pas parfaits.


    C'est bien la mentalité Microsoft, ça. On sort un produit tordu à la base, et on applique des patches successifs plutôt que de revoir le concept

    Y dit qu'il voit pas le rapport (???)

    Il suffit que tu intègres le code concerné au sein d'une boucle pour que le gain en question ne soit plus une durée fixe mais un pourcentage du temps consommé. Ainsi, si tu écris ton programme en assembleur, et que tu l'optimises pour passer de 10 cycles machines par boucle à 5 cycles (soit 2ns de gain sur une machine moyenne), tu doubles la vitesse de ton programme.
    Ton exemple demande à être rédigé noir sur blanc pour plus de compréhension, mais si je ne m'abuse, tu as utilisé une astuce d'algorithmie pour diminuer la complexité de ton problème... tu n'as pas du tout fait d'optimisation propre à la machine...


    Personnellement, je n'ai jamais eu de problème à manipuler un pointeur. Peut-être parce qu'à la base je savais ce qu'est une adresse mémoire.
    Merci moi aussi je sais ce que c'est. Mais pour moi les pointeurs doivent être utilisé avec prudence, et seulement par un programmeur expérimenté et qui effectivement connaît bien les mécanismes internes à la machine. Seulement on parlait de programmation objet qui le plus souvent se passe également de la notion de pointeur, donc ne changeont pas de sujet.

    - En C/C++ le programmeur se tape des segfaults;
    - En Java, le programmeur se tape des NullPointerException.

    Tu vois que le C++ a des inconvénients ;)
    Pour le Java, désolé, j'aime pas Java, donc je ne peut que aller dans ton sens et dire que c'est tout à fait crétin d'obtenir ce genre de messages...

    Un programmeur qui ne sait pas comment fonctionne un microprocesseur - et qui en plus le revendique - est pour moi un paradoxe.
    Si ça m'est adressé, mdr. Sinon je suis d'accord que certains programmeurs "pro" ferais mieux de regarder de plus près le ofnctionnement interne de la machine. Mais pas forcement de toutes les machines qu'il utilise, notamment s'il utilise un langage de haut niveau. Et puis s'il est futé et qu'il utilise une machine virtuelle, il n'aura besoin d'apprendre le fonctionnement que d'une seule machine qui elle regroupe la plupart des concepts des architectures processeurs ;)

    Ton post me laisse perplexe, pour le moins. J'ai l'impression que tu confonds plusieurs notions, notament typage, sécurité, et approche objet, de la même façon que Jayce the Crazychild confondait mode texte et langage interprété (là, 'faut quand même le faire, soi dit en passant) ou, plus sérieusement, comme beaucoup de monde assimilait programmation 32 bits et mode protégé lors des débuts de Win32.
    Je confond surement certaines notions, mais pour la bonne raison que pour moi elles sont complémentaire et le plus souvent liées quand toi tu préfères les dissocier entièrement. C'est sans doute là la grande différence...

    PS : ouh ca va commencer à faire long tous ces posts ;)