Journal Language naturel 2 python

Posté par  (site web personnel) .
Étiquettes : aucune
0
2
oct.
2007
En surfant par hasard, j'ai découvert qu'un chercheur du MIT (décidément, encore eux !), Hugo Liu, s'est amusé à ecrire un logiciel capable de produire du code python à partir d'un texte en langage naturel, l'anglais.

Ainsi écrire un pacman revient à écrire :
Pacman is a character who loves to run through a maze and eat dots. Whenever Pacman eat a dots, it disapears and he wins a point.

Qui génère :

def __main__() :
class Pacman(character) :
def run(maze) :
pass

def eat(dot):
dot.disappear()
Pacman.win(point)

def win(point)
pass

class dot:
def disappear() :
pass



Pas mal, non ?

Comment ça marche ?

En gros, le système cherche des structures verbe-sujet-objet-objet, ayant préalablement étiqueté chaque mot en fonction de sa morphologie, il réalise quelques transformation pour isoler ce genre de structure.
Il recherche ensuite des structures if-then, des listes, etc..
Grâce a une petite analyse sémantique, il détermine ce qui est animé ou ne l'est pas, de quel sorte d'objet a t-on affaire, quelle est la proximité linguistique (champ lexical).
A noter que l'auteur explique que les ambiguités peuvent être une aide, car elle permette parfois de préciser un concept en le comparant avec d'autres structures s'y rapportant.

Cela ne génère pas tout le code, mais c'est un jeu intéressant :-)
  • # Liens

    Posté par  . Évalué à 4.

    Y'a aucun lien dans ton journal, c'est pas sympa...

    J'ai trouvé ça : http://www.trnmag.com/Stories/2005/032305/Tool_turns_English(...)
    • [^] # Re: Liens

      Posté par  . Évalué à 4.

      c'est vraiment intéressant !
      La programmation à la portée du plus grand nombre ?

      Je ne sais pas si cela facilite réellement la programmation de façon immédiate, en général si cela améliore un point c'est au détriment d'un autre, mais en tout cas cela permet d'avoir une nouvelle approche.

      N'étant pas programmeur à la base, j'aime bien ce genre de chose, pour avoir utilisé le langage Inform en vue de faire des aventures textuelles. La version 7 permet justement de créer tout un monde, ainsi que toute la mécanique d'interaction avec ce monde. Il y a un court exemple de "code" sur wikipedia :

      http://en.wikipedia.org/wiki/Inform#The_Inform_7_programming(...)

      ainsi que des jeux complets avec le code, par exemple celui-ci qui est particulièrement remarquable :
      http://www.inform-fiction.org/I7Downloads/Examples/bronze/so(...)

      Le parallèle avec ce qui se fait pour python n'est pas anodin, en effet le code en langage naturel Inform 7 est ensuite converti en code Inform 6 "similaire au C", et le jeu est compilé en langage machine (pour une machine virtuelle indépendante de la plateforme)

      Le bénéfice de cela, c'est que sur le forum dédié à la fiction interactive, on voit apparaître des personnes apparemment de talent qui se mettent à créer des jeux car ce système est abordable pour eux, et sans cela il ne l'aurait pas fait. Une bonne quantité de codeurs purs et durs semble ne pas trop apprécier ce nouveau système, ils préfèrent la programmation traditionnelle, bien qu'un pourcentage d'entre eux y soit passé quand même.

      On peut peut-être espérer voir à terme une nouvelle façon d'utiliser son ordinateur (peut-être qu'Apple était précurseur dans ce domaine avec apple script ? je dis peut être un bêtise car je n'ai jamais utilisé, mais il peut y avoir des similitures dans le langage naturel utilisé)

      Reste plus qu'à trouver un module pour sms et les jeunes pourront scripter msn messenger...

      Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

      • [^] # Re: Liens

        Posté par  . Évalué à 2.

        Comme tu le dis, Inform 7 est à la fois une bonne nouvelle pour les apprentis programmeurs doué, même si mélanger ainsi Français/Anglais peut déranger certains, qu'une sorte de monstruosité pour les programmeurs véritable.

        Je m'explique. Pour moi, la description d'un monde textuel suffisament grand doit-être non linéaire (orienté objet, si tu préfére), C-A-D utiliser un maximum les notions de classes dans la structure même du code. La notion de classe a toujours été un problème essentiel d'Inform 6. Vouloir factoriser le code demandait un véritable problème d'adaptation, notamment a cause de l'absence de fonctions avancés des L.O.B, un trop grande verbosité du code, pas de distinguo véritable entre objet et interaction, etc...

        A tel point que j'ai commencé a écrire un petit compilo qui transforme du XML en Inform 6 (mais ceci est une autre histoire). Le XML, étrangement, se prête beaucoup mieux a cette exercice que cette version batarde du langage C.

        Or, Inform 7 est encore pire que Inform 6 question factorisation et langage objet. Pour moi, il est impossible de faire ce que j'ai envis (un très grand monde a la sauce M.U.D solo) en Inform 7, ce serait trop compliqué. Ainsi, Inform 7 se limite a un petit langage pour de petit projet fait par des gens doué, et c'est un peu dommage.
        • [^] # Re: Liens

          Posté par  . Évalué à 2.

          je n'ai pas trop compris le début de ta réponse, mais j'ai l'impression qu'il manque avant la dernière virgule quelque chose genre "bien qu'il reste une sorte de monstruosité..."

          Inform 7 n'est pas fait à la base pour faire un MUD solo, ni même un JDR, bien qu'il doive être possible via des tables aléatoires de prévoir l'idée d'un jeu pas forcément linéaire, avec des notions d'événements changeants et variables suivant le contexte, qui se mémorisent en fonction des actions du jeu (c'est d'ailleurs ce que je m'applique à faire pour un prochain jeu, mais cela restera modeste).

          Pourrais tu donner un exemple précis de ce que tu n'arrives pas à faire à cause d'Inform 6 ou Inform 7 ? Là pour le coup je ne vois pas ce que le langage naturel a à voir avec cela, même si je reconnais que pour le français c'est un peu déroutant de mélanger les deux. Pour créer une classe, il suffit de dire "blabla is a kind of thing.", et de décrire simplement ce que fait cette classe, et on peut la réutiliser dans tout le jeu. Le fait de manipuler ainsi directement les objets les rends plus facile à conceptualiser.
          La finalité du langage naturel, ce n'est pas que de pouvoir utiliser un simili anglais pour parler, car la syntaxe est rigide malgré tout, et si ce projet en python abouti, cela ne sera pas pour "causer avec l'ordinateur", mais pour rendre plus proche du programmeur la modélisation du projet, avec des références "naturelles" pour lui.
          Je ne vois pas trop en quoi cela limite à "de petits projets", quelle est cette limite ? Parce que cela te semble trop fastidieux à générer ? (tu peux envisager de créer le code inform 7 via un autre programme, j'avais commencé à voir pour créer un semblant de monde virtuel dans inform 7 à partir d'inspiration pad : http://www.nbos.com/products/ipad/ipad.htm )
          Ou parce que tu penses que l'on peut être dépassé par la taille de la machine virtuelle ? Avant d'en voir le bout à mon avis on a le temps d'emplir pas mal de tavernes d'aventuriers, de forêts d'elfes ou de cavernes d'orcs.

          Je ne comprends pas trop ce que tu entends par "non linéaire", si tu as déjà joué à "Bronze", le jeu n'est pas spécialement linéaire, on est complètement immergé dedans, c'est un véritable roman interactif, ce qui est la première raison d'être d'inform. Après, il doit être possible de le modifier ou de s'en inspirer pour créer un système qui travaillerait autrement pour créer de nouveaux outils de programmation.
          J'imaginerais bien un arkanoid ou un shoot them up programmé avec : "the pad is the player. It is rectangular (ration 6:1). The limits of the game are the walls. etc."

          Pour en revenir au mélange anglais français d'inform 7, si on crée tous les objets avec des noms anglais cela passe, les descriptions en français, ce que lit le joueur, étant limitées à ce qui est entre guillemets, on le voit mieux avec un exemple si la syntaxe est colorée :
          http://anamnese.online.fr/site2/if/inform7/ScarabeeKatana/so(...)
          (dans cet exemple les noms des objets sont en français, ce qui peut faire effectivement un peu bizarre, mais ce n'est pas vraiment un problème pour la rédaction du jeu)

          Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

          • [^] # Re: Liens

            Posté par  . Évalué à 3.

            Cher Farvardin,

            Mon message ne parlait absolument pas des langages naturels généraux, mais du cas spécifique d'Inform 6/7 et je suis désolé si cela a pu paraître autrement. Inform est effectivement un langage crée pour le cas très particulier des romans interactifs. Or, les romans interactifs ne sont souvent que très peu interactif, justement, et empiètent beaucoup plus du coté roman. Les aventures textuelles ne se limitent absolument pas aux romans interactifs. Ces derniers ne couvrent, finalement, qu'une partie très petite de ces mêmes inventures.

            Or, Inform 6/7 est très mal conçu pour programmer quoi que ce soit de plus complexe qu'un gros romans interactifs. Ce n'est pas tant l'absence de certaine fonctionnalitées qu'une mauvaise conception qui grèvent ce langage de programmation. Ceci est dommage. Inform est l'un des seuls langages de programmations qui permet de créer facilement des aventures textuelles, et le fait est qu'il se limite a des romans d'aventures, plus subis que joué, par essence.

            Je sais pertinement qu'il est possible d'améliorer Inform. Je travaille actuellement sur un projet qui permettra, a partir d'un fichier XML, de créer du code inform 6 de base (les objets, les lieux, les personnages, certaines interactions). Je me suis rendu comptes que cette base XML permettait de s'affranchir de beaucoup des erreurs de conception latente d'Inform, contre une perte de liberté nette du récit. Mais on a rien sans rien...

            Amicalement,
            • [^] # Re: Liens

              Posté par  . Évalué à 3.

              je ne vois pas trop la différence que tu fais entre fictions / romans interactifs et aventures textuelles, pour moi c'est pareil (j'utilise indifféremment les 2 expressions). Je ne vois pas non plus en quoi les jeux inform sont des romans subits plus que joués, en tout cas pas plus que n'importe quel jeu d'aventure graphique, l'ordinateur pouvant difficilement improviser et l'auteur pouvant difficilement envisager tous les cas de figure. En tout cas même si beaucoup de jeux d'aventures (textuels ou graphiques) sont plutôt linéaires, c'est plus lié aux limitations des auteurs (temps limités, nb d'auteurs limité) qu'aux systèmes en eux-même, et ça cela serait pareil en python, c ou lua je pense ?

              Et je ne vois pas non plus en quoi Inform 6 ou 7 sont mal conçus, aurais-tu un exemple un peu précis d'une limitation du langage par exemple ?

              Sinon pour revenir au langage naturel en programmation, je viens de découvrir ce matin ce système en projet :

              http://langagelinotte.free.fr/

              cela tourne dans une machine java.

              Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

              • [^] # Re: Liens

                Posté par  . Évalué à 3.

                La différence entre fictions/romans interactifs et aventures textuelles que je fais n'est pas canonique, elle est propre a moi. Donc, un roman interactif, c'est 95% de ce qui sort d'un code Inform : Une aventure qui immerge le joueur, mais très limitatrice. Impossible de sortir des quelques actions que le programme a prévu, devellopement de l'intrigue très linéaire, avec un seul moyen de résoudre un problème qui aménera un nouveau problème, etc. Que cela soit clair : je ne porte aucun jugement de valeur. Ces romans peuvent être jusqu'à des oeuvres d'art et de litteratures, mais, fait important, ne couvrent qu'une petite partie des aventures textuelles, qui sont toute aventure se jouant par texte interposé (roman interactifs, mud, etc, et où un des extrême limites se trouvent dans les rogues-like - mais ceci est a prendre avec des pincettes)

                L'une des limitations du langage auquel on pense dès le départ est la limitation de déplacement du joueurs selon des vagues notions Nord/Sud/Est/Ouest et l'inutilisation, même comme système d'appoint, de coordonnée élémentaire. Cette limitation peut être contournée, bien sûr, et s'explique aisément par le fait que on a toujours fait comme ça pour les romans interactifs, mais bride de manière monstrueuse les possibilités d'aventure textuelle out-the-box. De même, il n'existe aucune relation d'ordre dans les lieux, alors qu'il aurait été aisé de spécifier si tel lieu en contient un autre ; l'impossibilité de produire simplement une I.A avancée pour les NPC, ou, au moins, un emploi du temps ; La difficulté d'introduire un système de discussion avec ces derniers ; La difficulté d'introduire des paramêtres plus ou moins réels (temps, physique de base - même si, bien heureusement, la lumière l'est) dans le récit ; etc. La liste s'allonge indéfiniment, et pour plus de précision sur les problèmes plus techniques que ces langages batards ont avec les Objets, je te renvois a mon poste précédent.

                Il y a quelques temps, pour prouver la viabilité du concept, j'ai imaginé de créer une aventure textuelle sur la base d'une chambre remplis d'objet, et d'imaginer toute les interactions possibles sur ces objets - pour pouvoir, si necessaire, factoriser tout cela à un niveau superieur. J'ai été désagréablement surpris par les limitations de langage d'Inform 6 et j'ai abandonné lorsqu'il s'est trouvé que je n'arrivais tout simplement pas a produire ce que je désirais, alors que c'était a priori très simple.

                Amicalement,
    • [^] # Re: Liens

      Posté par  (site web personnel) . Évalué à 5.

      Oula merci, je m'en suis souvenu ce matin, au saut (j'allais écrire "au sot"...) du lit," zut y ais-je pensé ?"

      Le pdf publiant la chose : http://web.media.mit.edu/%7Ehugo/publications/papers/IUI2005(...)

      Ya surtout la lib qui le permet : http://web.media.mit.edu/~hugo/montylingua/
      dans une espèce de licence libre.

      Voilà, désolé pour l'oubli, fatigué en ce moment...

      « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

      • [^] # Re: Liens

        Posté par  . Évalué à 2.

        mais ca c'est le parser monthylingua , on a pas le soft metafor avec , sinon j ai down le monthylingua il est aussi sous gpl 2 ...

        qqn sait ou trouver metafor ?
  • # On gagne en abstraction

    Posté par  (site web personnel) . Évalué à 8.

    Plus un ordinateur va vite, plus les langages de programmations peuvent gagner en abstractions. Les premiers ordinateurs étaient programmés en langage machine et on était limité aux spécficiations de la machine.

    Si on observe l'évolution du langage Python, on peut voir les objets de haut niveau naître petit à petit. Python 2 permet de manipuler des caractères plutôt que des octets ('unicode' vs 'str') et Python 2.4 permet enfin d'avoir des nombres entiers sans limite débile (et source de nombreux bugs) à quelques milliards ('long' vs 'int'). D'ailleurs, Python 3000 va utiliser les types de haut niveau par défaut : "abc" désigne un chaîne de vrais caractères (et non pas d'octets comme en C) et les types int & long fusionnent.

    C'est pas spécifique à Python, la programmation orientée objet est plus lente qu'un programme cablé en dur (du C par exemple), mais aujourd'hui on peut se permettre des perdre quelques pourcents de CPU et de mémoire à l'exécution pour accélérer le temps de développement.

    À mon avis, les langages de programmations doivent monter en abstraction. Le but ultime étant d'écrire un programme dans sa langue maternelle... comme ce qui est présenté dans ce journal... sauf que je doute que ce jeu pacman soit jouable (c'est pas encore au point) ;-)
    • [^] # Re: On gagne en abstraction

      Posté par  (Mastodon) . Évalué à 7.

      Personnellement, je ne rêve pas d'écrire mes programmes dans ma langue maternelle car sa grammaire est parfois ambigüe. J'imagine donc les galères de débuggage que ça peut générer.

      Programmer dans un sous-ensemble de ma langue maternelle qui soit non-ambigü au niveau de la grammaire, pourquoi pas, mais là encore il y a des problèmes: la langue parlée est volontairement floue ("par là", "loin", "lourd"), si on veut être précis elle est verbeuse... peut-être pas l'idéal pour la programmation finalement.
      • [^] # Re: On gagne en abstraction

        Posté par  (site web personnel) . Évalué à 3.

        Deux choses.

        Premièrement, on programmera effectivement avec un sous ensemble "moins ambigue du langage". On pourra difficilement enlever toute ambiguité comme le lobjan mais c'est surment possible d'en retirer pas mal. De plus, les logiciels que l'on décrira seront par nature assez précis. On parlera de traiter des fichiers, des BDD, de l'XML, de faire des interfaces graphiques, etc... On pourra difficlement se passer de langages comme SQL, ou CQL (ou un de ses descendants bitable) pour travailler des données sur un SGBD, ou de l'XML...

        Deuxièmement, un langage de dévelopement basé sur un sous ensemble de langage naturel sera amené à interagir avec l'utilisateur.
        On y est pas habitué, donc on y pense pas, mais le changement de paradigme implique un changement de méthode.
        Un langage de programmation classique comme ceux que nous connaissons possèdent intrinsèquement une structure non ambigüe du code : il n'est pas une représentation de ce que l'on veut faire, mais une représentation de ce que l'automate virtuelle doit faire.
        Or, programmer en langage naturel implique que l'on glisse vers une logique de description de spécification, l'ordinateur devant rédiger l'algo pour y arriver.

        Cela implique que dès que le moteur tombera sur une ambigüité, il entamera un dialogue afin de préciser cette ambigüité.

        « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

        • [^] # Re: On gagne en abstraction

          Posté par  (Mastodon) . Évalué à 6.

          Bien sûr, l'utilisateur pourra lever les ambiguités, ce que je voulais dire c'est que, pour parler simplement, ça sera grave relou tant que les ordinateurs seront aussi mauvais en sémantique.

          Et même s'ils commencent à comprendre ce qu'on dit, l'exercice est intéressant: faire un petit dessin à base de ronds, carrés et triangles, téléphoner à un ami, lui demander de refaire le dessin à partir de notre description. Il y a peu de chances que ça ressemble à quelque chose à moins d'utiliser un formalisme particulier (par exemple du papier quadrillé et des coordonnées). Le langage naturel pour être précis, c'est nul.
          • [^] # Le futur

            Posté par  (site web personnel) . Évalué à 1.

            Bientôt on donnera la description du programme et l'ordinateur ce chargera de faire lui même le programme.

            On donne juste le cahier des charges à l'ordinateur :
            « Je veux un programme qui fait ça et ça »

            Eh oui, plus besoin de programmeur.

            • [^] # Re: Le futur

              Posté par  (site web personnel) . Évalué à 10.

              Ah, j'ai déjà ce projet depuis longtemps, ça s'appelle le "C cool". J'ai déjà le code du compilateur, mais le problème c'est qu'il est écrit en lui-même (problème de bootstrapping comme disent les anglophones).

              Je vous livre le code que je laisse en GPL :

              Écrit un compilateur pour un langage dans lequel je dirais "je veux un logiciel qui fait ça".
              • [^] # Re: Le futur

                Posté par  . Évalué à 4.

                Toi, tu veux une… (euh, veux pas d’ambiguïté, moi, disons) un sucre d’orge :
                 When someone says, “I want a programming language in which I need only say what I wish done,” give him a lollipop. 

                — Alan Perlis, Epigrams on Programming in Sigplan Notices
                • [^] # Re: Le futur

                  Posté par  (site web personnel) . Évalué à 1.

                  Ca me fait penser au types qui disaient au début du XIXème que le train n'avait aucun avenir...

                  « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

    • [^] # Re: On gagne en abstraction

      Posté par  (site web personnel) . Évalué à 8.


      Les premiers ordinateurs étaient programmés en langage machine et on était limité aux spécficiations de la machine.

      C'est sûr que Lisp, c'était un langage machine, et Smalltalk en son temps aussi ;-)
    • [^] # Re: On gagne en abstraction

      Posté par  (site web personnel) . Évalué à 4.

      C'est pas spécifique à Python, la programmation orientée objet est plus lente qu'un programme cablé en dur (du C par exemple), mais aujourd'hui on peut se permettre des perdre quelques pourcents de CPU et de mémoire à l'exécution pour accélérer le temps de développement.
      Faux, le compilateur Lisaac en est la preuve. Ce n'est qu'un problème de compilateur, pas de paradigme de langage :-)

      À mon avis, les langages de programmations doivent monter en abstraction. Le but ultime étant d'écrire un programme dans sa langue maternelle... comme ce qui est présenté dans ce journal... sauf que je doute que ce jeu pacman soit jouable (c'est pas encore au point) ;-)
      C'est clair, le problème c'est qu'il y a peu de recherche dans le domaine...

      « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

      • [^] # Re: On gagne en abstraction

        Posté par  (Mastodon) . Évalué à 2.

        Faux, le compilateur Lisaac en est la preuve.

        Mouais... j'ai plutôt eu l'impression, à lire les news, que Lisaac se rapproche souvent de l'efficacité du C et la dépasse parfois. De là à affirmer que c'est généralement au moins aussi rapide que du C, il y a une petite marge :)

        Dans le concept de programmation objet, le fait qu'un objet puisse redéfinir une fonction définie dans une classe parente pose un problème pour l'inlining dont je ne suis pas convaincu qu'il puisse être résolu par le compilateur. On aurait donc sur ce point là une supériorité du C si on s'oblige à coder sans pointeurs de fonction. Et d'un autre côté un compilateur de langage de haut niveau possède des informations qui lui permettent certainement d'optimiser d'une autre manière. Pour l'instant... je n'ai pas d'opinion sur la rapidité relative de différents types de programmation, mais je doute qu'on ait des "preuves".
        • [^] # Re: On gagne en abstraction

          Posté par  (site web personnel) . Évalué à 2.

          Lisaac, avec son analyse de flot, traduit la plupart des appels polymorphique en appel monomorphique, quand ils le sont réèllement, on atteint des chiffres de plus de 97 %.

          de plus l'inlining se fait aisément, si tu résoud la liaison dynamique en utilisant une table dynamique.

          Tu trouveras des explications ici : http://isaacproject.u-strasbg.fr/download/workshop.pdf

          « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

          • [^] # Re: On gagne en abstraction

            Posté par  (Mastodon) . Évalué à 5.

            on atteint des chiffres de plus de 97 %.

            Quand on compile le compilateur, c'est ça ? (c'est ce qu'il m'a semblé comprendre dans la news précédente). Il y a des cas pas vraiment rares où le compilateur devrait être devin pour réussir à faire de l'inlining.

            Pour prendre un exemple vraiment con, admettons que j'ai deux structures de données: une liste chaînée et un tableau. Au début de mon programme, je demande à l'utilisateur laquelle de ces deux structures il veut utiliser, et puis je fais des calculs. Par quel miracle Lisaac serait-il capable d'inliner le code de la liste ou du tableau dans mes calculs alors qu'il n'y a aucun moyen de savoir quelle est la structure de données choisie par l'utilisateur avant le runtime ?

            de plus l'inlining se fait aisément, si tu résoud la liaison dynamique en utilisant une table dynamique.

            Là j'avoue que je ne comprend pas ce que tu veux dire. Ce n'est pas du tout mon domaine mais pour moi la liaison dynamique c'est le contraire de l'inlining...

            Tu trouveras des explications ici

            Non, j'ai trouvé des slides, et les slides ça ne sert à rien sans la présentation qui va avec...
            • [^] # Re: On gagne en abstraction

              Posté par  (site web personnel) . Évalué à 4.

              Par quel miracle Lisaac serait-il capable d'inliner le code de la liste ou du tableau dans mes calculs alors qu'il n'y a aucun moyen de savoir quelle est la structure de données choisie par l'utilisateur avant le runtime ?
              Simple : il inline les deux cas ;-)

              Là j'avoue que je ne comprend pas ce que tu veux dire. Ce n'est pas du tout mon domaine mais pour moi la liaison dynamique c'est le contraire de l'inlining...

              Justement, les compilateurs objets classiques utilisent une table de pointeurs en mémoire pour savoir sur quel fonction se brancher.
              Lisaac transforme cela en appels statiques, en utilisant une recherche dichotomique.

              Non, j'ai trouvé des slides, et les slides ça ne sert à rien sans la présentation qui va avec...
              Exact, je vais donc le faire.

              Slide 127 : Floppy et hard_disk hérite de drive et possède tout deux une fonction read. Liaison dynamique sur cette fonction.

              Slide129 : les compilo classiques utilisent une table de fonction

              Slide 130 : Lisac fait de l'analyse de flot. il analyse la géométrie du graphe du code pour prévoir les types.
              Dans cette exemple, r peut être de type A, B , C ou D.
              Avec une solution syntaxique type SmartEiffel, on supprime la liaison dynamique (la table de fonction), en faisant une recherche, pour savoir si, à l'exécution du code, r est de type A, B, C ou D.
              C'est un bête switch case, mais on a déjà supprimé la liaison dynamique, donc on peut inliner.
              Lisaac va plus loin :
              Dans la branche où on évalue r.method, on voit que r ne peut être que de type A ou B (les branches correspondent à un test).
              Donc, on fera un test sur A ou B seulement (Slide 131,132).

              Slide 133 : on associe le type d'un objet en nombre, ce qui permet de faire des recherches dichotomique ayant l'avantage d'être en nlog(n) (si je me souviens bien)

              Slide 134 : on inline... Et on réduit le résultat. ici on présente un cas extrême.
              Slide 135 : dans l'ancienne version du compilateur (la nouvelle a fait de nettes progrès), on avait 91% d'appels monomorphiques natifs (sur le compilateur), plus 4 % d'appels polymorphique transformés en monomorphiques.

              « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

  • # enfin l'an 2000

    Posté par  (site web personnel) . Évalué à 2.

    ca y est, on commence à penser sémantique ...
    ca faisiat longtemps qu'on en parlait mais que personne ne sortai quelque -chose à part les labos d'IBM qui... ne sortaient rien.

    Tout homme qui dirige, qui fait quelque chose, a contre lui ceux qui voudraient faire la même chose, ceux qui font précisément le contraire, et surtout la grande armée des gens d'autant plus sévères qu'ils ne font rien du tout. -- Jules Claretie

  • # intéressant mais...

    Posté par  . Évalué à 2.

    Je me demande ce que cela pourrait donner avec d'autres exemples, peut être plus tordus.
    En tout cas cela me fait penser à AliceBot (www.alicebot.org) un logiciel de conversation assez bluffant (surtout en anglais d'ailleurs). Le bot Alice a déjà réussi à tromper des observateurs au test de Turing.
    • [^] # Re: intéressant mais...

      Posté par  . Évalué à 2.

      J'ai discuté quelques minutes avec AliceBot, et il se trouve qu'il est encore très très loin de pouvoir tromper qui que ce soit. Dès qu'on se refére a un théme passé auparavant dans la discussion, qu'on ironise légérement, qu'on bafouille, ou qu'on pose une question, le logiciel se vautre assez lamentablement. Et je ne parle même pas d'essayer des thémes plus philosophiques, car alors la poudre saute aux yeux comme un camion dans un magasin de porcelaine.

      Exemple (parmis beaucoup d'autre) :
      Human: You're kidding me.
      ALICE: I have no reason to do that to you, unknown person.
      Human: I'm not a unknow person.
      ALICE: Oh I see you are NOT A unknow person.
      Human: What i am ?
      ALICE:" Oh I see you are NOT A unknow person." You are?
      Human: 0wned
      ALICE: That question has never crossed my mind before.
      • [^] # Re: intéressant mais...

        Posté par  (site web personnel) . Évalué à 3.

        Je lui ai demandé ce qu'elle pensait de Georges Bush, elle m'a répondu qu'elle cherchait, et... plus rien.

        Ahh, le politiquement correct !

        « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

      • [^] # Re: intéressant mais...

        Posté par  (Mastodon) . Évalué à 3.

        I'm not a unknow person.

        il manque un "n" après le "a". Avec la phrase correcte, Alice s'excuse, demande ton nom, et le mémorise pour continuer à t'appeler comme ça par la suite.
        • [^] # Re: intéressant mais...

          Posté par  . Évalué à 3.

          Il est a noter qu'une grande partie de ce qui fait un interlocuteur humain est sa tolérance aux fautes minuscules.
          • [^] # Re: intéressant mais...

            Posté par  (site web personnel) . Évalué à 2.

            Il leur faudrai rajouter un bête algorithme de soundex, et reposer la question "avez vous voulu dire ... ?"

            « Il n’y a pas de choix démocratiques contre les Traités européens » - Jean-Claude Junker

          • [^] # Re: intéressant mais...

            Posté par  (Mastodon) . Évalué à 2.

            Je pense que vu l'état de l'IA, on peut quand même lui concéder quelques avantages en lui laissant le temps de la réflexion et en lui donnant une entrée correcte... Quand des programmes commenceront à passer sérieusement le test de Turing comme ça, il sera temps de les rendre plus souples, mais en attendant je ne vois pas l'intérêt.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.