Moonz a écrit 3542 commentaires

  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > C'est sur que toi, t'as prevu toutes les evolutiosn de l'informatique pour les 30 prochaines annees.
    Dans les faits, c’est le C qui a réussi à prouver qu’il pouvait tenir des décennies (presque 40 ans !) et toutes les évolutions qui se sont déroulées pendant ces décennies.
    Moi, je suis impatient de voir les développeurs Java dans 30 ans quand le programmeur lambda pourra se permettre des tableaux contenants des milliards d’éléments, avec la spec de leur langage où il est écrit en dur « l’index des tableaux, c’est 32 bits ».
    Si Java existe encore dans 30 ans, bien entendu.
    C’est sûr, le C aurait été plus « portable » (au sens assez restreint de mes contradicteurs où seule un langage garantissant à 100% la portabilité peut être qualifié de portable) si on avait mis en dur dans la spec « un entier, c’est 16 bits, un long 32, et un pointeur doit pouvoir tenir dans un long ». Pas sûr que le C aurait fêté ses 40 ans s’ils avaient fait ce choix (mais j’aurais été amusé de voir la tête de pBpG et des autres développeurs de Windows (Linux aussi du reste) si ce choix avait été fait. Comment ça on doit changer de langage de programmation et tout réécrire de A à Z pour faire du 64 bits ? Mais je croyais que le langage était plus portable quand on définissait explicitement tout !)
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > A l'epoque des procs 16 bits, ca avait peobablement plein de sens, comme pb pg l'a explique.
    Bien au contraire, parce qu’à l’époque des processeurs 16 bits, beaucoup étaient également à adressage 16 bits, et donc malloc(INT_MAX) c’était allouer la moitié de l’espace d’adressage.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 3.

    Je crois effectivement qu’on est juste pas d’accord sur une question de terminologie : pour toi, un langage pas portable, c’est un langage qui offre des garanties de portabilité, tandis que pour moi c’est un langage qui permet d’être portable (à l’inverse, au pif, de l’assembleur).
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > Java ne t'autorise qu'à faire des trucs portables là où le C te permet de faire des trucs non portables.
    Ce qui ne revient pas au même que de dire que le C n’est pas portable, nom d’une pipe en bois !
    Encore une fois, c’est pas parce que Java n’est pas un langage à preuve formelle qu’il ne permet pas de créer des programmes corrects… si tu fais gaffe.
    Si c’est juste pour dire que le C est un langage beaucoup, beaucoup moins neuneu-proof que Java, je suis d’accord.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 3.

    > Tu vois pas l'utilite de creer un tableau de 64Ko en C sur un systeme qui a 1Mo de RAM et qui peut en addresser 1Mo voire 16 ?
    Si je veux créer un tableau de 64 Ko, je fais un malloc(64*1024), pas un malloc(INT_MAX) parce qu’il se trouve que par le plus grand des hasards la constante matche.
    De même, si je devais créer un tableau de 3 éléments, il ne me viendrait pas l’idée un seul instant de faire un new byte[(int)java.math.PI], même si ça fait ce que je veux.
    Parce que bon, tu peux aussi faire un new byte[GetJVMName().getSize()] si par le plus grand des hasards la longueur du nom de ta JVM est pareil que la taille de ton tableau désiré.
    Tu peux.
    Ce sera juste pas portable et totalement crétin.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    Heu, calloc(INT_MAX, sizeof(void*)), ça a beau être super crétin, ça a le même sens partout : créer un tableau associant à chaque entier disponible un pointeur. C’est d’ailleurs le même sens que new Object[MAX_INT] en Java.
    Après, ça plantera si t’as pas assez de RAM oui (que tu sois sur un 16 bits avec 20ko de RAM et pas de swap ou un 32 bits avec moins de 4 Go de RAM + swap), mais c’est là une question de capacités de la machine.

    C’est pas parce la taille d’un entier varie que la sémantique derrière change.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 4.

  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 3.

    > Le code machine, ca tourne partout, par definition
    On a trouvé une fortune plus grosse que le malloc(INT_MAX) de pBpG là !
    Le code machine ne tourne pas partout, non (que ce soit l’assembleur ou le code binaire résultant), et c’est précisément pour cette raison que deux gus dans leur garage (Dennis Ritchie et Kenneth Thompson) ont inventé un langage portable qui puisse être traduit dans ces langages non-portables.

    > Ca devient du grand n'importe quoi la...
    Je confirme. Je ne sais pas d’où m’est venue cette idée saugrenue que la portabilité pouvait avoir un vague rapport lointain avec le fait de pouvoir faire fonctionner le même code source sans modification sur deux architectures aussi différentes que le x86-64 et le MSP430, vraiment.
    Désolé de t’avoir faire perdre ton temps avec une idée aussi stupide.
    Sur ce, excuse-moi, mais je dois aller modifier mon dictionnaire pour redéfinir « portable » comme « langage tournant sur une machine virtuelle, mais impossible à faire tourner sur une architecture sur laquelle ladite machine virtuelle n’existe pas ».
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > Ce n'est pas un problème d'API : on parle bien de la définition du langage
    Ben si, la preuve : tu as des APIs en dehors de la librairie standard pour te faire de la serialisation. Toujours pas aussi simple à utiliser qu’en Java, certes, mais ça a plus à voir avec l’absence d’introspection.

    > Ce n'est pas un comportement différent de l'API
    Ben si.
    Avec la librairie standard du C, tu peux écrire tout et n’importe quoi librement. Et si un programme essaie de lire au petit bonheur la chance un truc écrit au petit bonheur la chance par un autre programme, ça a effectivement de fortes chances de pas bien se passer. Pour que ça fonctionne, tu dois définir correctement le format d’échange (endianness, taille des entiers, format des string, format des flottants,…). C’est quelque chose que les ingénieurs de Sun ont fait quand ils ont défini l’API de sérialisation, c’est quelque chose que C s’est refusé à faire (parce que c’est pas son boulot de faire des trucs haut niveau, parce que C a besoin de communiquer avec du non-C, et surement d’autres raisons que j’ignore).
    C’est pareil en Java : si tu essaies de faire un dump mémoire dans un fichier et de reloader brutalement ce dump mémoire sur une autre architecture, il y a de fortes chances que ça marche pas. La différence entre C et Java, c’est que le premier t’autorise à faire ça (en cohérence avec sa philosophie : le langage est pas là pour penser à la place du programmeur, et il y a des situations où faire une telle chose est tout à fait correct) et que le second ne t’y autorisera jamais.
    Objective-C, en tant que langage, est exactement dans la même situation que le C à ce niveau (taille de l’entier qui varie, endianness, alignement, etc). Pourtant, OpenStep/Cococa a défini une API et un format d’échange, comme Java, et bizarrement, on ne voit personne pour pleurer sur la non-portabilité d’Objective-C et des plist.
    Non, franchement, dire que le C n’est pas portable sous le prétexte que je peux pas charger brutalement le contenu brut de la mémoire d’une architecture vers l’autre (ce que tu fais quand tu fais un write+read direct de tes structures, hein), c’est un peu pareil que dire que Java n’est pas portable parce que je peux pas faire un core dump d’un programme tournant sur la JVM sun et charger ce core dump dans une autre JVM et que le programme puisse continuer sans rien remarquer.
    tl;dr : quel que soit le langage, si tu veux être portable, tu dois définir un format d’échange, la seule différence entre Java et C étant qu’en Java tu as un format défini direct dans l’API standard.

    > Peut-on vraiment parler de communication avec l'extérieur ?
    Ben oui, quand tu communiques avec quelqu’un d’autre que toi (toi = fork(), en gros), tu dois faire gaffe : définir un format d’échange, et ne pas te contenter de lui balancer un dump mémoire à la gueule en le laissant se démerder. Si Java n’a pas ce problème, c’est parce qu’il n’autorise tout simplement pas à balancer un dump mémoire ([troll]c’est la résolution des problèmes selon Java : si une fonctionnalité peut potentiellement être mal utilisée, on la supprime[/troll])
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 3.

    C’est vrai que ça tombe un peu comme un cheveu sur la soupe, mais sa remarque est pertinente : combien d’architectures supportées par la JVM, par .Net ? Parce que c’est bien beau de dire : c’est portable, yaka coder une implémentation de CLR/Java bytecode, en pratique, ça donne quoi ?
    Personnellement, en C, je peux faire du code qui tourne sans modification sur mon PC et le MSP430 (je l’utilise pour faire des routines que je peux tester sur mon PC, c’est plus simple de débugger sur un PC que sur un MSP430). Java, il tourne sur un MSP430 ?
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 3.

    En étant un peu réaliste, dans un contexte d’utilisation normale, tu utilises des librairies pour te faciliter la vie, parce que le C n’est pas « battery included ».
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > - c'est relativement complique
    Si ton but c’est de faire un write((void*)&myStruct) parce qu’on peut le faire et que ça a l’air funton compilateur t’engueulera pas si tu le fais, oui.
    Si ton but c’est de faire un truc qui juste marche, non, même en ANSI C : tu spécifies ton format de fichier et tu mets noir sur blanc l’endianness et la taille. Pas de problème d’alignement si tu fais pas un read((void*)&myStruct) mais que tu fais champ par champ. Oui, on sait : Java l’a fait pour toi. Mais la question « battery included » ou pas est orthogonale à la question « portable ou pas »
    Et je te signale que tu entres ici dans la question de la portabilité des API, question que tu avais admis toi-même qu’elle était peu pertinente, tellement il est simple de faire non portable dans la communication avec l’extérieur.

    > cela necessite beaucoup plus de code
    Pas beaucoup non
    write32(int32): 2 lignes (1 ligne pour le write, 1 ligne pour le htonl).
    int32 read32(): 3 lignes (1 ligne pour le read, 1 ligne pour le ntohl, 1 ligne pour le return).
    Le truc vraiment chiant à gérer c’est la représentation des flottants par contre, là je t’accorde que ce sera un peu plus que 5 lignes. Mais ce sera pas 3000 lignes non plus.
    Bon, pour faire propre, double le nombre de lignes pour la gestion des erreurs.

    > ou de se trimballer un framework expres pour comme le font beaucoup de projets portables
    Parce que J2SE, c’est pas un framework peut-être ?
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 3.

    Heu, la fonction Write(Int32) de .Net (je suppose que c’est pareil en Java), c’est deux lignes à implémenter en C, je vois encore pas la différence.
    La difficulté est d’obtenir l’offset en fonction de l’alignement et tout. Tu fais comment en Java, sans les APIs de sérialisation ?
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    Différence d’API, donc, pas de langage.
    Si c’est pour dire que .Net/Java a une librairie standard plus fournie, j’étais au courant avant.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    Tu n’as pas compris ce que je voulais dire.
    Java ne te permet pas de stocker des classes directement dans un fichier (l’équivalent de write(fd, (void*)&myStruct, sizeof(myStruct)). Tu dois passer par une API de sérialisation.
    Ben en C, pareil : si tu veux pas te prendre la tête, tu passes par une API de sérialisation. Ce sera plus lourd en C à cause du manque d’introspection, je te l’accorde.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > le code ANSI C est toujours portable
    J’ai une mauvaise nouvelle à t’annoncer : depuis le début, tu te bats contre un homme de paille.
    Qui ici a dit que le C était toujours portable ?

    > si je trouve un exemple, tu vas dire que la fonctionnalité est mal codée.
    Ben voyons. Dire que caster les void* en int et vice-versa c’est mal coder (c’est un des premiers exemple de ton lien), c’est être de mauvaise foi ?
    J’en déduis donc que chez toi c’est une bonne pratique de caster les pointeurs en entier ?

    > car la norme en soit ne garantie pas un code portable
    Je crois que tu n’as pas compris un truc. C est un langage qui a comme principe d’être très laxiste, qui t’autorise à faire d’énorme conneries. Java est un langage au contraire beaucoup plus strict. Donc oui, tu peux faire d’énormes conneries qui t’empêcheront d’être portables en C et pas en Java. De là à dire qu’un programme écrit normalement en C n’est pas portable, il y a un gouffre que je ne peux voir franchi sans réagir.
    Je vais te faire une image : Java ne peut pas te garantir formellement que ton programme est conforme à sa spécification (le C ne peut te garantir la portabilité), contrairement à certains langages issus de la recherche. Quelle est la bonne chose à en déduire ?
    - Java ne permet pas de faire du code correct (le C n’est pas portable)
    - Si tu veux réussir à remplir ton cahier des charges, il faut suivre des bonnes pratiques (si tu veux être portable, il faut suive des bonnes pratiques)
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > Je veux lire un fichier dans une structure en memoire et ensuite acceder a une valeur val de taille t dans cette structure situee a offset du debut.
    Et en Java, tu fais comment ?
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > Vaguement drôle, mais y dit qu'il voit pas le rapport.
    Le rapport, c’est qu’à part la quantité de données que sera capable d’ingurgiter le programme, je vois pas ce que la taille des entiers change au niveau fonctionnel.

    > Si t'as pas d'imagination, google est ton ami, exemples :
    Ceci ne sont pas des exemples de fonctionnalités qui changent selon la taille d’un entier. Ce sont des listes de bonnes pratiques. Comme il y en a dans tous les langages — si tu les suis pas, vient pas pleurer si ton programme te pète dans les mains.
    Encore une fois, ce que je te demande, c’est une fonctionnalité bien codée dont le comportement dépend de la taille d’un entier. Parce que si c’est juste pour dire qu’on peut faire du code pas portable en C en faisant n’importe quoi (genre caster un int en pointeur et vice versa), on était au courant, merci.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > PowerShell, c'est par définition la même chose que la ligne de commande sous Linux mais en plus puissant
    Ben non. PowerShell, c’est une couche d’abstraction, comme on l’a souligné.
    vim, il travaille sur des fichiers, il utilise fopen & co.
    Donc, je doute que taper "vim HKEY_CURRENT_USER\ma_clef" soit possible. D’ailleurs pBpG semble le confirmer puisque pour lui, « c’est complètement crétin de vouloir faire ça ».

    Ergo : non, même avec PowerShell, tu ne peux pas faire tout ce que tu peux faire avec le shell Unix.

    > ça montre juste ta méconnaissance du sujet sur lequel tu trolls.
    Je ne nie pas. Juste que ce qui m’intéressait, c’était la comparaison entre le design « canonique » de Windows (tout est accessible par des handle avec les APIs qui vont bien) et de Unix (tout est accessible à l’aide de fichiers). Qu’on puisse faire des couches d’abstraction qui vont de l’un à l’autre, j’entends bien merci, j’avais pas besoin de troller pendant 3 jours pour le deviner. Que la couche d’abstraction « Unix-like » pour Windows soit maintenant fournie par défaut, je ne peux qu’applaudir des deux mains. Mais c’était pas ce qui m’intéressait.
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > tu vas dire à ton client "oui bah euh cette fonctionnalité dépend de la machine sur laquelle vous exécuter le logiciel...
    Ha, parce que évidemment, dans le monde .Net/Java, on entend jamais « votre machine là, elle est pas assez puissante pour faire tourner cette fonctionnalité ».

    > sa valeur diffère elle aussi d'une plateforme à l'autre.
    Ben oui, évidemment, si tu fais un srand(INT_MAX) et que ton logiciel dépend des nombres sortis par ton peudo-RNG, sûr que le comportement diffèrera d’une plateforme à l’autre.
    En dehors de ce cas, j’ai quelque difficultés à voir un code qui change ses fonctionnalités du tout au tout selon la valeur de INT_MAX (et sans erreur de programmation « mais non c’est du code tout à fait normal » à la malloc(INT_MAX)). Mais peut-être est-ce juste mon manque d’imagination ?
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 8.

    Ha, si malloc(INT_MAX) c’est quelque chose de parfaitement standard chez vous, ça explique certaines choses…
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > Genre ton soft qui faisait des allocations de 64Ko, maintenant risque d'en faire de 4Go
    En même temps, si tu t’amuses à faire des malloc(-1), je suis pas sûr qu’on puisse dire que ce soit la faute du langage si ça te pète à la gueule.
  • [^] # Re: Banques

    Posté par  . En réponse au journal Éloge du don. Évalué à 2.

    > Au niveau du gouvernement, oui, ça baisse
    Ha, oui, j’ai compris ce que tu voulais dire. Effectivement, de ce point de vue, tu as raison, ma remarque était totalement HS :)
  • [^] # Re: Bonne nouvelle

    Posté par  . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    > Et de tout de facon qu'est ce qu'une licence si ce n'est une promesse?
    Non, ce n’est pas la même chose. Une licence est une contrat entre deux parties, une promesse publique n’implique pas d’autre partie au moment de son énoncé.
    Après, je sais pas quelles sont les implications juridiques :)
  • [^] # Re: Banques

    Posté par  . En réponse au journal Éloge du don. Évalué à 2.

    > Les chiffres sont aussi peu objectifs que n'importe quoi,
    Les chiffres ne sont pas parfait certes, mais il y a des degrés dans l’imperfection, et c’est toujours mieux que « mon ressenti au doigt mouillé » (encore une fois, ça s’applique à moi aussi).

    > C'est fou cette envie de pointer du doigt ce que coûtent les fonctionnaires, mais pas les autres.
    C’est pas ce que j’ai dit.
    Ce que j’ai dit, c’est que je vois pas en quoi le fait qu’ils soient payés par les collectivités locales ou directement l’état entre en compte dans ce qui nous occupe.

    > mais on reste dans des valeurs raisonnables
    Et des valeurs raisonnables, c’est décidé par qui ? sur quelles bases ? On s’arrête où dans l’égalisation ? Quand le rapport est de 1 à 100 ? de 1 à 10 ? de 1 à 1.5 ? de 1 à 1 ?
    Question : ce que tu appelles "OK", un écart plus faible, pour toi, c’est une injustice acceptable ou de la justice ?

    > Si tu veux évaluer la pauvreté, il existe tout un tas d'indicateurs, aucun n'étant parfaits, mais autrement plus complexes que le nombre de SDF.
    Certes, c’est d’ailleurs pour ça que j’avais parlé de « miséreux » et non pas de « pauvres » initialement, du reste.