IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #101
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Je voulais dire par là qu'aucun code tiers n'est appelé.
    Je voulais te faire arriver à ce constat car c'était suite à ta remarque initiale :
    Citation Envoyé par DonQuiche Voir le message
    Non seulement ta solution s'appuie sur une vaste et complexe bibliothèque pour en arriver à ce résultat...
    La personne qui a fait l'unité que j'ai mentionnée pour "simuler le yield return" n'a fait qu'utiliser l'unité windows.pas autrement dit pas de code tiers non plus mais seulement l'api Windows

    Citation Envoyé par DonQuiche Voir le message
    Et encore une fois on s'en fiche du c# : c'est pas parce que j'ai filé des exemples dans ce langage à quelqu'un qui disait le connaître
    Je ne connais pas le C# (et d'ailleurs je ne connais pas particulièrement le framework .NET dans ma boite c'est plutôt J2EE) et je n'ai jamais dit que je le connaissais...

    Citation Envoyé par DonQuiche Voir le message
    qu'il faut tourner ça en une guerre c#/pascal, ce n'est pas le propos.
    Exact, ce n'est pas le propos mais je ne pense pas qu'on puisse m'accuser de faire tourner la discussion en guerre c#/pascal. J'essaye de répondre à tes remarques (qui a annoncé en début de discussion que telle ou telle instruction n'existe pas en Pascal ?). J'ai parlé un peu de Java, de Groovy et de Cobol dans mes propos. D'ailleurs, merci à Paul TOTH pour ses posts et en particulier le dernier.

    Citation Envoyé par DonQuiche Voir le message
    Qui ici a déjà fait de la programmation procédurale, impérative, objet, logique, par contrainte, fonctionnelle, par acteurs, et manipulé des grammaires ?
    programmation procédurale : j'ai pratiqué et je pratique encore
    programmation impérative : j'ai pratiqué et je pratique encore
    programmation objet : j'ai pratiqué et je pratique encore
    programmation logique : j'ai vu le Prolog pendant mes études mais je n'ai jamais utilisé depuis
    programmation fonctionnelle : comme pour Prolog, j'ai vu Caml pendant mes études, jamais pratiqué depuis
    manipulé des grammaires : oui
    Je ne connais pas les autres.

    Citation Envoyé par DonQuiche Voir le message
    Qui ici a au moins étrenné un nouveau langage depuis le début de l'année ?
    Je ne sais pas si tu considères le Python comme un nouveau langage, en tout cas, pour moi c'en est un car je m'y suis mis depuis quelques mois et je dois dire qu'il me plait bien (mais je suis débutant). A l'avenir, je regarderai certainement du côté du Swift également.
    Citation Envoyé par DonQuiche Voir le message
    Davantage ?
    Non : j'ai une vie à côté et d'autres centres d'intérêts que la programmation

    Pour info, sur l'utilisation de Cobol, j'ai retrouvé une actualité qui date de l'an dernier (ce n'est pas si vieux que ça pour un langage créé en 1959) : http://www.techwell.com/2014/06/cobo...ed-more-google
    Les compétences Cobol sont et vont devenir de plus en plus recherchées (des écoles et des organismes de formation le remettent au programme) et donc mieux rémunérées Par contre, je tiens à préciser tout de suite pour ceux qui seraient intéressés, il n'y a pas de "yield return"
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #102
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    elle est dans le développement mobile avec l'ARC qui sera généralisé dans les prochaines versions...même si je n'en suis pas fan.
    Oui, on en a parlé. Si j'ai bien compris c'est seulement avec certains compilateurs, sur certaines plateformes, et c'est incompatible avec les bibliothèques existantes ?

    Depuis Delphi 1 (il y a 20 ans) dans les RTTI qui ont été grandement simplifiés et étendus depuis.
    Au temps pour moi. Tu peux donc, par exemple, utiliser ces informations pour générer à la volée un code pour dé-sérialiser un code JSON fourni par l'utilisateur ? Le tout avec un code raisonnable ?

    C'est sans doute le point dans Delphi qui perturbe le plus les développeurs habitués a des langages qui proposent des tas de raccourcis pour créer la quantité pharaonique de code nécessaire pour afficher une liste de 3 éléments à l'écran.
    Sous Delphi il n'est pas tout simplement pas nécessaire de passer par là.
    Formidable, tu peux donc me montrer le code nécessaire pour sélectionner les trois étudiants mâles ayant obtenu les meilleures notes en mathématiques cette année ? Je parle d'objets en mémoire, pas dans la base de données. Ça tient en une ligne très compréhensible dans certains langages.

    Et je ne parle pas seulement de les afficher, je parle de pouvoir faire des traitements sur eux. Et si tu trouves l'exemple absurde, je t'invite à faire une recherche de toutes tes boucles pour te demander combien consistent à cherche le(s) meilleur, calculer une moyenne, concaténer, transformer, etc. Autant d'opérations répétitives qui s'expriment bien mieux de façon fonctionnelle.

    Voilà un exemple de pseudo-code dans un langage moderne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let students = from s in allStudents where s.isMale order by s.GetScore(Courses.maths, Year.current) take 3

    Aucune ligne, il suffit d'utiliser un composant et de cocher quelques propriétés. C'est la philosophie de Delphi, c'est ce qui a fait son succès avant dotNet et qui continue de plaire à ses développeurs. Même si le langage permet aussi de triturer les choses dans le code si c'est ton désir.
    Formidable, donc tu peux me montrer un tutoriel pour, par exemple, ajouter à ton modèle une méthode asynchrone renvoyant un futur que tu pourras attendre et auquel accrocher une continuation éventuelle ? Méthode qui contactera un service web à partir d'éléments passés en argument et, simultanément, cherchera dans un cache local si une copie existe ?

    Voilà un exemple de pseudo-code dans un langage moderne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    async Task<string> GetAnswerAsync(int id)
       let result1 = await HttpHelper.DownloadString("http://someWeb.com/" + id)
       let result2 = await File.ReadAsync("localCache/" + id + ".txt")
       return await Task.Any(result1, result2)
    Je ne pense pas, mais je ne vois pas bien de quel cas tu parles. As-tu un exemple dans un autre langage ?
    Clojure et Go mettent en oeuvre les CSP, Clojure, JRuby et Haskell offrent de la mémoire transactionelle, Rust et Go peuvent t'empêcher de partager des données par inadvertance, Erlang offre des acteurs isolés depuis quelques décennies, etc.

    en fait là c'est toi qui dénigre un langage qui loin d'être vieux, continue à évoluer régulièrement depuis 20 ans.
    Il fête quand-même ses 55 ans cette année et beaucoup de ses fonctionnalités découlent du fait qu'on n'avait à l'époque que quelques kilooctets de mémoire. A commencer par ces immondes forward déclarations.

    PHP n'est-il pas un des langages les plus populaire ?
    Oui, parce qu'il a toujours eu le meilleur écosystème pour le web : c'était vrai à l'époque, c'est encore vrai aujourd'hui. Je déteste le php mais son succès n'est pas le fruit du hasard, quels que soient les torts du langage lui-même.


    Citation Envoyé par gbegreg Voir le message
    La personne qui a fait l'unité que j'ai mentionnée pour "simuler le yield return" n'a fait qu'utiliser l'unité windows.pas autrement dit pas de code tiers non plus mais seulement l'api Windows
    Il y a aussi un YieldEnumerable. Et ça reste une API non-portable.

    Par contre, je tiens à préciser tout de suite pour ceux qui seraient intéressés, il n'y a pas de "yield return"
    En effet.
    C'est très bien si c'est mieux payé, ça permettra de s'acheter les anti-dépresseurs qui vont de pair avec le Cobol.

  3. #103
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Oui, on en a parlé. Si j'ai bien compris c'est seulement avec certains compilateurs, sur certaines plateformes, et c'est incompatible avec les bibliothèques existantes ?
    Comme déjà dit, c'est actuellement pour Mobile (iOS/Android) et demain sur toutes les plateformes. Et non ce n'est pas incompatible, même s'il peut évidemment avoir des effets de bords de part le changement de cycle de vie des objets, Embarcadero - comme à l'époque de Delphi.Net - a fait en sorte que dans un cas classique le passage soit transparent.

    Citation Envoyé par DonQuiche Voir le message
    Au temps pour moi. Tu peux donc, par exemple, utiliser ces informations pour générer à la volée un code pour dé-sérialiser un code JSON fourni par l'utilisateur ? Le tout avec un code raisonnable ?
    Oui tu peux utiliser les RTTI pour cela, mais ce serait dommage de le faire toi même alors que c'est livré en standard.

    Citation Envoyé par DonQuiche Voir le message
    Formidable, tu peux donc me montrer le code nécessaire pour sélectionner les trois étudiants mâles ayant obtenu les meilleures notes en mathématiques cette année ? Je parle d'objets en mémoire, pas dans la base de données. Ça tient en une ligne très compréhensible dans certains langages.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let students = from s in allStudents where s.isMale order by s.GetScore(Courses.maths, Year.current) take 3
    Je n'ai aucun moyen d'écrire en une seule ligne de code Delphi ce que tu donnes là. Mais j'imagine que tu peux rendre cela paramétrable (et donc encore plus illisible) vu que j'ai rarement besoin d'extraire des données selon des critères fixes. Je voudrais la même chose avec le choix du sexe, de la matière et du nombre d'élément retournés...tu sais comme dans un cas réel en fait.

    Citation Envoyé par DonQuiche Voir le message
    Et je ne parle pas seulement de les afficher, je parle de pouvoir faire des traitements sur eux. Et si tu trouves l'exemple absurde, je t'invite à faire une recherche de toutes tes boucles pour te demander combien consistent à cherche le(s) meilleur, calculer une moyenne, concaténer, transformer, etc. Autant d'opérations répétitives qui s'expriment bien mieux de façon fonctionnelle.
    je suis totalement convaincu que ce n'est pas en réduisant la syntaxe à une seule ligne qu'on rend les choses plus robuste et facilement maintenable...mais j'attends l'exemple paramétré, ça m'intéresse.

    Citation Envoyé par DonQuiche Voir le message
    Formidable, donc tu peux me montrer un tutoriel pour, par exemple, ajouter à ton modèle une méthode asynchrone renvoyant un futur que tu pourras attendre et auquel accrocher une continuation éventuelle ? Méthode qui contactera un service web à partir d'éléments passés en argument et, simultanément, cherchera dans un cache local si une copie existe ?

    Voilà un exemple de pseudo-code dans un langage moderne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    async Task<string> GetAnswerAsync(int id)
       let result1 = await HttpHelper.DownloadString("http://someWeb.com/" + id)
       let result2 = await File.ReadAsync("localCache/" + id + ".txt")
       return await Task.Any(result1, result2)
    ça c'est totalement génial, c'est vrai que ça manque un "await" qui permet de rendre un code asynchrone synchrone, j'aime beaucoup le concept

    Citation Envoyé par DonQuiche Voir le message
    Clojure et Go mettent en oeuvre les CSP, Clojure, JRuby et Haskell offrent de la mémoire transactionelle, Rust et Go peuvent t'empêcher de partager des données par inadvertance, Erlang offre des acteurs isolés depuis quelques décennies, etc.
    ça avec des concepts comme "await", on a besoin de garde fou

    Citation Envoyé par DonQuiche Voir le message
    Il fête quand-même ses 55 ans cette année et beaucoup de ses fonctionnalités découlent du fait qu'on n'avait à l'époque que quelques kilooctets de mémoire. A commencer par ces immondes forward déclarations.
    Tu n'as peut-être pas remarqué mais j'ai toujours utilisé "Delphi" quand tu parles du Pascal antique, Delphi n'a lui que 20 ans et son ancêtre directe c'est Turbo Pascal (Objet) qui n'a pas grand chose à voir avec le Pascal de Niklaus. Et je trouve ça très bien les forward.

    Citation Envoyé par DonQuiche Voir le message
    Oui, parce qu'il a toujours eu le meilleur écosystème pour le web : c'était vrai à l'époque, c'est encore vrai aujourd'hui. Je déteste le php mais son succès n'est pas le fruit du hasard, quels que soient les torts du langage lui-même.
    il est le fruit de quoi alors son succès ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #104
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Clojure et Go mettent en oeuvre les CSP, Clojure, JRuby et Haskell offrent de la mémoire transactionelle, Rust et Go peuvent t'empêcher de partager des données par inadvertance, Erlang offre des acteurs isolés depuis quelques décennies, etc.
    Comme je ne vais ni me fatiguer à apprendre tous les langages qui traînent ni perdre mon temps dans des discussions oiseuses, je t'invite à nous/me recontacter quand tu auras proposé au moins un article sérieux ou un code intéressant, par exemple sur ce site (je ne donne pas pour contrainte le forum Delphi ). Donner une tournure pédagogique à tes connaissances serait bénéfique à la fois pour les lecteurs (dont je ferai partie) mais aussi pour l'auteur qui se trouverait vite soumis à une certaine forme d'humilité.
    Il y a un mot en français, vieilli mais très juste, pour désigner une attitude qui se contente d'étaler des savoirs sans jamais les mettre en action autrement que par la polémique : la cuistrerie. Troll à côté, c'est de la rigolade
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  5. #105
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Ceci dit, pour répondre à la question initiale "Le Pascal peut booster votre carrière", je n'irais pas jusque là. Je pense que c'est un très bon langage et que Delphi est un produit qui gagne à être connu, mais de là à booster sa carrière, j'ai des doutes ^^
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #106
    Inactif  

    Homme Profil pro
    Écrivain public, Économiste et Programmeur Free Pascal
    Inscrit en
    Août 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Écrivain public, Économiste et Programmeur Free Pascal
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 350
    Points : 948
    Points
    948
    Billets dans le blog
    40
    Par défaut Offres sur DELPHI
    Cette semaine les nouvelles offres de travail sur DELPHI en France deviennent sûres pour 5 sur 7.

  7. #107
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Mais j'imagine que tu peux rendre cela paramétrable (et donc encore plus illisible) vu que j'ai rarement besoin d'extraire des données selon des critères fixes.
    Je savais qu'en prenant des objets métiers pour exemple je courais le risque d'être mal compris. Voilà pourquoi je t'avais en plus invité à prendre conscience du fait que presque chaque boucle que tu écris est un moyen de filtrer, sélectionner les meilleurs, concaténer, etc. Autant de motifs qui peuvent être exprimés de façon plus conçise et expressive par le genre de syntaxe que j'ai donné.

    J'insiste donc : le parallèle est à faire avec les boucles. Ce n'est pas un remplaçant de SQL (*) et ce n'est pas un gadget pour un scénario utilisateur particulier (système de recherche multi-critères / à facettes). C'est une façon de remplacer certaines constructions impératives fastidieuses et difficiles à lire par des constructions déclaratives rapides à écrire et surtout à lire.

    (*) Même si cette syntaxe est en plus utilisée pour intégrer les requêtes SQL au langage, ce qui est assez pratique.

    ça c'est totalement génial, c'est vrai que ça manque un "await" qui permet de rendre un code asynchrone synchrone, j'aime beaucoup le concept
    A nouveau il y a quiproquo : await n'est pas synchrone. La méthode retourne une tâche à l'appelant avant l'attente et le thread appelant reprend son cours. Tout ce qui vient après un await sera en fait exécuté plus tard sous forme d'une continuation.

    Cela permet donc d'écrire des séquences d'événements asynchrones comme on écrirait des séquences d'événements synchrones, avec un style impératif. Le compilateur se charge de transformer le bloc d'instructions en blocs asynchrones disjoints qu'il enchaînera les uns aux autres à l'exécution, sous forme de continuations.

    Et je trouve ça très bien les forward.
    Ça n'a aucun intérêt, tu t'y es simplement habitué. Va donc travailler sous un langage qui te laisse libre de l'ordre d'écriture, notamment pour écrire ton code du plus haut niveau vers le plus petit (l'idéal pour lire et écrire un code) plutôt que l'inverse, et qui ne te force pas à écrire les choses deux fois. Tu verras par toi-même.

    il est le fruit de quoi alors son succès ?
    Son écosystème : il a été fait pour ça, avec des fonctionnalités spécifiques à ce besoin (php est un processeur de texte) et des bibliothèques ad hoc. Et s'il gagne aujourd'hui c'est grâce à son écosystème qui permet à n'importe quel dév débrouillard ne connaissant pas php de mettre en place un magasin en ligne en deux jours (sans compter le design). Ni Java ni C# ne peuvent en dire autant, à mon grand regret.

    Par ailleurs à l'époque où php est arrivé, on programmait le web en perl parce que c'était toujours mieux que le C pour un site web (interprété signifiait sécurité et distributabilité sans le surcoût de CGI). Or il y a pire que le php : il y a perl ! A l'époque on avait moins de choix de langages qu'aujourd'hui et encore moins de langages interprétés avec des biblios adaptées au web. Php apparaissait vraiment comme une bonne solution en tant que langage même.



    Citation Envoyé par gvasseur58 Voir le message
    Comme je ne vais ni me fatiguer à apprendre tous les langages qui traînent ni perdre mon temps dans des discussions oiseuses, je t'invite à nous/me recontacter quand tu auras proposé au moins un article sérieux ou un code intéressant, par exemple sur ce site (je ne donne pas pour contrainte le forum Delphi ). Donner une tournure pédagogique à tes connaissances serait bénéfique à la fois pour les lecteurs (dont je ferai partie) mais aussi pour l'auteur qui se trouverait vite soumis à une certaine forme d'humilité.
    Il y a un mot en français, vieilli mais très juste, pour désigner une attitude qui se contente d'étaler des savoirs sans jamais les mettre en action autrement que par la polémique : la cuistrerie. Troll à côté, c'est de la rigolade
    La prochaine fois que tu demanderas un service à quelqu'un, mets-y les formes ("s'il te plaît") et évite de l'insulter au passage.

    Tu te complais à te conduire comme un rustre grossier et à te vautrer dans ton ignorance ? Grand bien t'en fasse !

  8. #108
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    Citation Envoyé par gvasseur58 Voir le message
    Comme je ne vais ni me fatiguer à apprendre tous les langages qui traînent ni perdre mon temps dans des discussions oiseuses, je t'invite à nous/me recontacter quand tu auras proposé au moins un article sérieux ou un code intéressant, par exemple sur ce site (je ne donne pas pour contrainte le forum Delphi ). Donner une tournure pédagogique à tes connaissances serait bénéfique à la fois pour les lecteurs (dont je ferai partie) mais aussi pour l'auteur qui se trouverait vite soumis à une certaine forme d'humilité.
    Il y a un mot en français, vieilli mais très juste, pour désigner une attitude qui se contente d'étaler des savoirs sans jamais les mettre en action autrement que par la polémique : la cuistrerie. Troll à côté, c'est de la rigolade
    Je suis d'accord !

    Depuis le début de cette discussion DonQuiche passe son temps à étaler sa "culture" informatique de façon "parfois" grossière et se plain de réactions pas toujours aimables à ses posts !

    En bref :
    Pascal Objet c'est un vieux langage, plus personne s'en sert, y'a pas d'expressions lambda, c'est chiant les déclaration forward, y'a plus d'évolutions, ...
    Bon retour en 2015 et merci d'être venu nous rendre visite en 1970

  9. #109
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Je savais qu'en prenant des objets métiers pour exemple je courais le risque d'être mal compris. Voilà pourquoi je t'avais en plus invité à prendre conscience du fait que presque chaque boucle que tu écris est un moyen de filtrer, sélectionner les meilleurs, concaténer, etc. Autant de motifs qui peuvent être exprimés de façon plus conçise et expressive par le genre de syntaxe que j'ai donné.
    je suis d'accord, c'est concis. Mais j'ai répondu à cela déjà.

    Citation Envoyé par DonQuiche Voir le message
    [...]Cela permet donc d'écrire des séquences d'événements asynchrones comme on écrirait des séquences d'événements synchrones[...]
    ce qui est en effet fondamentalement différent de ma formulation : "await" qui permet de rendre un code asynchrone synchrone...

    Citation Envoyé par DonQuiche Voir le message
    Ça [forward] n'a aucun intérêt, tu t'y es simplement habitué. Va donc travailler sous un langage qui te laisse libre de l'ordre d'écriture, notamment pour écrire ton code du plus haut niveau vers le plus petit (l'idéal pour lire et écrire un code) plutôt que l'inverse, et qui ne te force pas à écrire les choses deux fois. Tu verras par toi-même.
    alors j'ai plusieurs langage à mon actif, et je reste complètement attaché à la façon dont le code Delphi est organisé, peut-être est-ce une question d'habitude, tu en as d'autres, est-ce que cela l'en l'une meilleurs que l'autre ? ça reste à démontrer.


    Citation Envoyé par DonQuiche Voir le message
    Son [PHP] écosystème : il a été fait pour ça, avec des fonctionnalités spécifiques à ce besoin (php est un processeur de texte) et des bibliothèques ad hoc. Et s'il gagne aujourd'hui c'est grâce à son écosystème qui permet à n'importe quel dév débrouillard ne connaissant pas php de mettre en place un magasin en ligne en deux jours (sans compter le design). Ni Java ni C# ne peuvent en dire autant, à mon grand regret.
    il doit y avoir une raison plus profonde pour que C# et Java ne ce soient pas imposés. Moi j'ai mon idée, c'est qu'aucune solution est universelle. J'aime la diversité et la pluralité des langes et technologies.... tes arguments semble démontrer que tu penses le contraire, nous devrions tous passer à de nouveaux concepts, mieux que des plus anciens qui ont pourtant fait leurs preuves. Je ne pense pas que tout le monde devrait utiliser Delphi...bien que ça donnerait sans doute à Embarcadero les moyens (financiers) de faire évoluer le produit plus rapidement...mais il c'est cependant un très bon produit pour un tas de situations courantes, tout comme PHP est une option pratique pour certains cas.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #110
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    je suis totalement convaincu que ce n'est pas en réduisant la syntaxe à une seule ligne qu'on rend les choses plus robuste et facilement maintenable
    Reprends l'exemple que j'ai donné : une ligne qu'un non-informaticien pourrait immédiatement comprendre. Pour écrire la même chose en Pascal il te faudrait au moins une quinzaine de lignes qu'un développeur junior mettra une à deux minutes à comprendre, et dans lesquelles il aura tôt fait d'introduire un bogue.

    ce qui est en effet fondamentalement différent de ma formulation : "await" qui permet de rendre un code asynchrone synchrone...
    Bien sûr que c'est totalement différent : le code reste asynchrone, le thread appelant n'est pas bloqué durant l'attente, il reprend ses activités.

    L'asynchronicité n'est pas supprimée, on ne conserve que l'écriture séquentielle. Ce qui tombe bien puisque si je t'explique un code asynchrone je vais utiliser une narration séquentielle (d'abord on envoie au serveur le message X, puis il nous renvoie Y, et...).

    Essaie d'écrire le code équivalent en Pascal, tu m'en diras des nouvelles.

    il doit y avoir une raison plus profonde pour que C# et Java ne ce soient pas imposés. Moi j'ai mon idée, c'est qu'aucune solution est universelle.
    Vraiment, tu penses que si php s'est maintenu c'est pour ses mérites propres plutôt que grâce à Wordpress, Drupal & co, et son bassin de développeurs ?

    Je ne dis pas que les frameworks de Java/C# sont idéaux et universels, ils ne le sont pas. Mais le succès de php tient à son écosystème, pas à autre chose.

  11. #111
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Reprends l'exemple que j'ai donné : une ligne qu'un non-informaticien pourrait immédiatement comprendre. Pour écrire la même chose en Pascal il te faudrait au moins une quinzaine de lignes qu'un développeur junior mettra une à deux minutes à comprendre, et dans lesquelles il aura tôt fait d'introduire un bogue.
    je demanderais à ma femme ce qu'elle pense de : "let students = from s in allStudents where s.isMale order by s.GetScore(Courses.maths, Year.current) take 3"

    Sous Delphi je conderais cela comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    begin
      Studends := allStudents.Get3MaleWithBestScoreOfMath();
    end;
    évidemment ça demande un peu de codage, mais en une ligne j'ai compris de quoi il est question de façon CERTAINE, en plus je peux facilement lui appliquer un test unitaire, identifier et corriger un bug qui sera effectif partout là ou j'utilise cette extraction. Je pourrais même en faire une méthode virtuelle qui je surchargerais au besoin.

    alors, oui on pourrait souhaiter écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function TStudentList.Get3MaleWithBestScoreOfMath();
    begin
      Result := from s in Students where s.isMale order by s.GetScore(Courses.maths, Year.current) take 3;
    end;
    alors qu'on pourra au mieux écrire (et coder)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function TStudentList.Get3MaleWithBestScoreOfMath();
    begin
      Result := Students.Where(IsMale).OrderBy(CurrentMathsCore).Take(3);
    end;
    Mais comme je garde l'intime conviction qu'il faut coder proprement, je préfère une boucle qui pourra ne prendre que 3 enregistrements, des hommes, ayant le meilleurs score en math, pour ne trier que ces trois là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    function TStudentList.Get3MaleWithBestScoreOfMath();
    var
      Student: TStudent;
      Score   : TStudent;
    begin
    // Résultat triés par note en Math
      Result := StudentList.Create;
      Result.Sorted := True;
      Result.OnSort := function (S1, S2: TStudent): Integer;
      begin
        Result := S2.Math(Now) - S1.Math(Now);
      end;
    // Pour chaque étudiant
      for Student in Students do
      begin
       // ne concerver que les 3 meilleurs hommes
        if Student.IsMale then
          if Result.Add(Student) = 3 then
           Result.Remove(Student);    
      end;
    end;
    Citation Envoyé par DonQuiche Voir le message
    Essaie d'écrire le code équivalent en Pascal, tu m'en diras des nouvelles.
    Mais en Pascal j'utilise un code synchrone dans un thread, ça me parait tout de même beaucoup plus simple.


    Citation Envoyé par DonQuiche Voir le message
    Vraiment, tu penses que si php s'est maintenu c'est pour ses mérites propres plutôt que grâce à Wordpress, Drupal & co, et son bassin de développeurs ?
    Oui mais pourquoi ce bassin de développeurs n'utilisent-ils pas autre chose ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  12. #112
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    évidemment ça demande un peu de codage, mais en une ligne j'ai compris de quoi il est question de façon CERTAINE
    Mais il t'a quand même fallu écrire tes quinze lignes, si un junior l'a fait pour toi il y a de bonnes chances qu'il y ait un bogue, et d'ailleurs tu éprouves le besoin de la tester. Et si scinder son code en petites méthodes est une bonne pratique, à en abuser tu finis par rendre illisible la surface de ta classe avec une méthode publique noyée au sein de dix méthodes privées.

    Je vois bien que tu veux mordicus défendre le fait que tes quinze lignes seraient plus lisibles, plus maintenables, etc, mais je trouve l'idée ridicule. Et si tous les langages de prog s'y mettent, je ne dois pas être le seul à le penser.

    Mais en Pascal j'utilise un code synchrone dans un thread, ça me parait tout de même beaucoup plus simple.
    Si tu fais ça depuis le thread UI tu bloques ce dernier et donne à l'utilisateur l'impression d'un plantage.
    Si tu fais ça depuis un autre thread, il te faut d'abord le lancer, puis une fois le traitement terminé exécuter une continuation pour revenir sur le thread UI afin de mettre à jour cette dernière.

    Donc il te faut créer toute une plomberie et fragmenter le code de la séquence en plusieurs morceaux épars.

    Await met en oeuvre la seconde solution pour toi et ce mot-clé est la seule plomberie dont tu auras besoin. Rien ne viendra obscurcir la lisibilité de la séquence. Et c'est extrêmement utile dans les scénarios fortement asynchrones. Là encore il y a une raison si tant de langages adoptent ou ont adopté cette syntaxe.

    Oui mais pourquoi ce bassin de développeurs n'utilisent-ils pas autre chose ?
    Et qui de l'oeuf ou de la poule est venu en premier ?

  13. #113
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Mais il t'a quand même fallu écrire tes quinze lignes, si un junior l'a fait pour toi il y a de bonnes chances qu'il y ait un bogue, et d'ailleurs tu éprouves le besoin de la tester. Et si scinder son code en petites méthodes est une bonne pratique, à en abuser tu finis par rendre illisible la surface de ta classe avec une méthode publique noyée au sein de dix méthodes privées.
    avec des mais et des si on peux durer longtemps comme ça...mais j'arrête là, merci pour l'échange.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  14. #114
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Formidable, donc tu peux me montrer un tutoriel pour, par exemple, ajouter à ton modèle une méthode asynchrone renvoyant un futur que tu pourras attendre et auquel accrocher une continuation éventuelle ? Méthode qui contactera un service web à partir d'éléments passés en argument et, simultanément, cherchera dans un cache local si une copie existe ?
    Paul t'a montré que c'était faisable simplement avec certes quelques lignes de plus. Donc, finalement, l'instruction await n'est pas une nouveauté fonctionnelle du pseudo langage moderne puisque c'était déjà réalisable avant. Certes, ça raccourcit la syntaxe. Le code proposé par Paul est tout aussi lisible.
    En revanche, je te remercie d'avoir détaillé "await", c'est toujours instructif.

    Citation Envoyé par DonQuiche Voir le message
    (*) Même si cette syntaxe est en plus utilisée pour intégrer les requêtes SQL au langage, ce qui est assez pratique.
    Pour la partie "intégrer les requêtes SQL au langage", c'est vrai que c'est pratique. Par contre, deux points :
    • cette fantastique syntaxe "moderne" me fait beaucoup penser à du Pro*C ou du Pro*Cobol du coup... (note : j'ai bien compris que ça ne servait pas que pour intégrer des requêtes SQL)
    • les préconisations des nouveaux langages vont nous remettre du code SQL dans le code de l'application ? Si mon modèle change, je dois revoir tout mon code ? Merci les nouveaux langages...


    Citation Envoyé par DonQuiche Voir le message
    Mais il t'a quand même fallu écrire tes quinze lignes, si un junior l'a fait pour toi il y a de bonnes chances qu'il y ait un bogue, et d'ailleurs tu éprouves le besoin de la tester.
    C'est trop fort, vivement que le nouveau langage sur lequel tu as dit bosser et qui n'est pas encore public sorte. Je l'essayerai bien volontiers : il n'y a plus besoin de tester !!! J'en connais qui ont des soucis à se faire (les testeurs, tous les outils de gestions des tests...)
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  15. #115
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    La prochaine fois que tu demanderas un service à quelqu'un, mets-y les formes ("s'il te plaît") et évite de l'insulter au passage.

    Tu te complais à te conduire comme un rustre grossier et à te vautrer dans ton ignorance ? Grand bien t'en fasse !
    S'il te plaît, tu peux nous faire un beau tutoriel sur l'art de la programmation ? Ou nous apprendre par un article ce qu'est un bon langage ? Ou réaliser un programme que tu mettrais en commun ?

    N.B. : Cuistre n'est pas une insulte venue d'un rustre grossier, ou il faut porter plainte contre Molière. Je ne t'accuse pas formellement d'étaler des connaissances plus ou moins maîtrisées pour le plaisir de la polémique, mais je garde ce doute tant que je n'aurai pas vu tes contributions à la communauté. Comme Paul Toth l'a remarqué, tu as toujours un "mais" de réserve quand ce n'est pas un haussement d'épaule devant "l'ignorance" des autres. Cela dit, je reconnais que grâce à toi certains ont fourni des arguments très pertinents et ont montré qu'ils n'avaient rien de gourous du/des Pascal. Alors, merci à tous !
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  16. #116
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par gbegreg Voir le message
    Paul t'a montré que c'était faisable simplement avec certes quelques lignes de plus. Donc, finalement, l'instruction await n'est pas une nouveauté fonctionnelle du pseudo langage moderne puisque c'était déjà réalisable avant. Certes, ça raccourcit la syntaxe. Le code proposé par Paul est tout aussi lisible.
    Tout est réalisable en assembleur avec quelques lignes de plus.

    Pour la partie "intégrer les requêtes SQL au langage", c'est vrai que c'est pratique. Par contre, deux points :
    • cette fantastique syntaxe "moderne" me fait beaucoup penser à du Pro*C ou du Pro*Cobol du coup... (note : j'ai bien compris que ça ne servait pas que pour intégrer des requêtes SQL)
    • les préconisations des nouveaux langages vont nous remettre du code SQL dans le code de l'application ? Si mon modèle change, je dois revoir tout mon code ? Merci les nouveaux langages...
    a) Ça fait penser au Cobol ? Et alors ? Il y a aussi eu de bonnes idées dans Cobol, comme partout. Intégrer des systèmes de requêtes au langage est une meilleure approche que des concaténations de chaîne (ou cela évite de devoir créer des wrappers autour de requêtes paramétrées). En revanche il faut dans l'idéal une syntaxe extensible (mais pas mutable) pour supporter des SGBD très différents (dont des no-sql).

    b) Ça ne remplace évidemment pas les procédures stockées et vues. Mais dans certains cas il est plus intéressant de manipuler directement la DB depuis le code. Toutes les DB n'ont pas vocation à durer trente ans ans et servir plusieurs applications.


    Je l'essayerai bien volontiers : il n'y a plus besoin de tester !!!
    Tu ironises mais si tu as un fragment de code concis, trivial et déclaratif parce que 95% du code est généré par le compilateur alors, non, il n'est probablement pas nécessaire de le tester à moins d'avoir un niveau d'exigence très élevé pour des sections ou domaines où la fiabilité est critique.

    Personne ne teste tout. La bonne question est de savoir quoi tester pour quel budget et objectifs (ou plus généralement quelles pratiques QA mettre en oeuvre - les tests ne sont qu'une partie de la réponse). Moins il y a de code, plus ce code est descriptif, moins il y a de risques de bogues, moins il y a de besoin de tester.

    Petit rappel : le nombre de bogues par ligne est réputé indépendant du langage (il ne dépendrait que des méthodologies). En revanche le nombre de lignes de code nécessaires peut grandement varier d'un langage à l'autre.

  17. #117
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    ...
    Alcatîz, elle est bonne ta nouvelle mais elle file un peu mal au crâne

    Cela dit, je ne comprend pas trop l'utilité de ce code... (en vérité, les 3/4 des choses énumérées ici me passent complètement au dessus, je suis sans doute un junior) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    async Task<string> GetAnswerAsync(int id)
       let result1 = await HttpHelper.DownloadString("http://someWeb.com/" + id)
       let result2 = await File.ReadAsync("localCache/" + id + ".txt")
       return await Task.Any(result1, result2)
    Quelles sont les chances pour qu'il soit plus rapide de récupérer une chaîne sur Internet qu'une autre en local
    Et une fois la chaîne locale récupérée, que se passe-t-il, le téléchargement continue ? Pour rien ?

    Asynchrone et continuation : pour le moins anachronique ! Un pool de tâches sur un seul thread secondaire ? Ça n'a pas l'air ici, sinon pourquoi ce return await.

    GPU : Ben... je ne m'étonnerai plus de regarder une vidéo à dix images/seconde sachant que ses ressources sont détournées à d'autres fins. Et sur serveur ça donne quoi ?

  18. #118
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Cela dit, je ne comprend pas trop l'utilité de ce code... (en vérité, les 3/4 des choses énumérées ici me passent complètement au dessus, je suis sans doute un junior) :
    Quelles sont les chances pour qu'il soit plus rapide de récupérer une chaîne sur Internet qu'une autre en local
    Et une fois la chaîne locale récupérée, que se passe-t-il, le téléchargement continue ? Pour rien ?
    J'avoue que le code n'a pas grand sens, je souhaitais présenter un exemple bidon en aussi peu de lignes que possible, ce n'était sans doute pas une grande idée. Et j'avais initialement écrit quelque chose de différent mais en voulant le raccourcir et la fatigue aidant j'ai fini par sortir un exemple qui ne respecte plus l'intention initiale qui prenait en compte le fait que le fichier n'est pas forcément en cache. Mes excuses pour ça. La version corrigée nécessiterait deux lignes de plus.

    Sinon, oui, autant laisser la requête http se compléter, à quoi bon complexifier le code pour l'annuler ?

    Asynchrone et continuation : pour le moins anachronique ! Un pool de tâches sur un seul thread secondaire ? Ça n'a pas l'air ici, sinon pourquoi ce return await.
    a) Les tâches peuvent être exécutées n'importe où : c'est la méthode qui crée la tâche qui choisit cela.

    b) En général ce sera sur un pool de threads (ThreadPool) mais ça peut être sur n'importe quoi. Les opérations I/O par exemple n'exécutent pas de code utilisateur asynchrone et couvrent en fait des IO completion ports du système.

    c) Par exemple tu peux utiliser le mécanisme pour mettre en oeuvre un modèle d'acteurs : chacune est isolé sur son thread propre et n'expose que des méthodes asynchrones. Par exemple dans ton IDE tu pourrais avoir un acteur "éditeur" contrôlant l'UI et un acteur "compilateur" contrôlant la compilation et distribuant en interne le travail vers tous les processeurs. Lorsque le texte change l'éditeur le signale au compilateur qui lance un parse et une analyse asynchrones, puis une fois le résultat obtenu l'UI met à jour la coloration syntaxique.

    GPU : Ben... je ne m'étonnerai plus de regarder une vidéo à dix images/seconde sachant que ses ressources sont détournées à d'autres fins. Et sur serveur ça donne quoi ?
    Aucune raison puisque le décodage et l'affichage vidéo sollicitent peu les unités de shaders et que ce sont ces unités qui sont mises à profit pour le calcul sur GPU. Donc si ta vidéo rame, c'est peut-être plutôt parce que quelqu'un monopolise le CPU, qui est lui aussi une ressource finie.

  19. #119
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Par exemple tu peux utiliser le mécanisme pour mettre en oeuvre un modèle d'acteurs : chacune est isolé sur son thread propre et n'expose que des méthodes asynchrones. Par exemple dans ton IDE tu pourrais avoir un acteur "éditeur" contrôlant l'UI et un acteur "compilateur" contrôlant la compilation et distribuant en interne le travail vers tous les processeurs. Lorsque le texte change l'éditeur le signale au compilateur qui lance un parse et une analyse asynchrones, puis une fois le résultat obtenu l'UI met à jour la coloration syntaxique.
    bon j'ajoute un commentaire tout de même ^^

    je ne dis pas que await n'a pas d'intérêt, ni que de concevoir son application avec des modèles acteurs soit une mauvaise chose...mais ce n'est pas la philosophie d'une développement Delphi. Vouloir le faire avec Delphi est possible, mais c'est partir dans une direction opposée à la conception du produit et donc réinventer la roue.

    Sous Delphi, la démarche naturelle est de poser un composant HTTPClient sur la fiche, tu peux choisir un composant synchrone ou asynchrone selon ton besoin et son contexte d'utilisation (main thread ou pas). S'il est synchrone tu l'utiliseras de façon procédural, s'il est asynchrone c'est qu'il expose des événements de complétion.

    Le cas de HTTP est particulier car il existe plusieurs implémentations, synchrone, asynchrone par thread, et asynchrone basé sur WSASelect, les événements peuvent donc être déclenchés selon le composant dans le thread principal ou non.

    Bref, l'approche traditionnelle de Delphi est l'assemblage de briques logicielles sous forme de composants exposants des propriétés et des événements. Ce qui a fait le succès de Delphi c'est d'ailleurs le très grand nombre de composants disponibles Torry, TMS, JEDI, ou encore GExpert pour améliorer l'IDE, et bien d'autres font parti d'un écosystème très riche autour du produit.

    En tant que freelance je fais des prestations de réalisation de composants qui répondent à des besoins spécifiques du client dans un projet plus vaste. Et là le client il ne veux pas un "await" ou n'importe quel autre sucre syntaxique, il veux une brique facile à installer, qu'il peux mettre en oeuvre en trois clics de souris. Et c'est exactement ce que propose le système de composants de Delphi.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  20. #120
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Sous Delphi, la démarche naturelle est de poser un composant HTTPClient sur la fiche, tu peux choisir un composant synchrone ou asynchrone selon ton besoin et son contexte d'utilisation (main thread ou pas). S'il est synchrone tu l'utiliseras de façon procédural, s'il est asynchrone c'est qu'il expose des événements de complétion.
    Plutôt qu'une unique ligne de code avec un await tu vas donc ajouter un composant via un éditeur wysiwyg, qui va ensuite ajoute une méthode différente à ton code, dans laquelle tu vas écrire la suite de la séquence à un endroit distinct du début de la séquence où tu avais fait appel à une mystérieuse variable webServiceRequestComponent déclarée dans la partie auto-générée du formulaire. Et si ta séquence implique d'interroger trois méthodes d'un service web, il va te falloir trois composants avec un code scindé en quatre parties.

    Et enfin bien sûr tout ça ne fonctionne que pour http. Quid de la lecture d'un gros fichier éventuellement sur un disque réseau mappé, quid d'une méthode asynchrone vers un agent, etc ?

    Alors tu as beau me dire que vous passez par une belle UI et autre, le fait que tu doives basculer sur une UI, farfouiller dans les menus, tout ça pour générer un squelette de code, plutôt que de taper un simple fichu mot-clé me rend sceptique.

    J'ai connu ce genre de composants : WinForms en C# avait (a sans doute toujours) les mêmes pour les timers. Personne que je connaisse ne les regrette. D'ailleurs dans le nouveau framework UI de Microsoft (WPF) cette habitude d'ajouter des composants non-UI a disparu.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2015, 21h56
  2. Les 6 signes montrant que votre carrière IT est en péril
    Par Katleen Erna dans le forum Actualités
    Réponses: 14
    Dernier message: 18/02/2010, 09h23
  3. Réponses: 5
    Dernier message: 07/06/2006, 22h05
  4. Comment peut-on dire : une bdd est petite, moyenne ou grosse
    Par Pierrinot dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 20/10/2004, 08h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo