web-dev-qa-db-fra.com

À quelle distance nous avons-nous acheté pour automatiser l'écriture de code?

Et je ne veux pas dire des extraits de code autocomplete ou automatiques comme inséré par des éditeurs modernes, ou du code polymorphique. Mais quel est la pointe de la technologie dans les programmes qui peuvent passer à travers des entrées et des types et des informations des sorties souhaitées et de produire une pièce de code valide dans une langue de choix. Je suis au courant de la programmation génétique, de la programmation d'expression génique, mais je ne connais aucun autre effort. Aussi Googling ne fait pas grand chose.

Quelqu'un est-il au courant des avancées sur ce front?

EDIT: Quand je dis "sortir un code de code valide", je veux dire un IA ou quelque chose de similaire sur la logique et le flux de contrôle et la mettre en œuvre dans une langue impérative. Langue impérative seulement, car c'est la partie difficile. Néanmoins, si vous connaissez des nouvelles langues développées pour soutenir ce type d'idée, veuillez mentionner que notre ensemble de langues actuel ne convient pas au type d'AI précoce que nous puissions la première chance.

8
kumar

langages spécifiques au domaine sont à peu près aussi proches que nous aurons jamais.

Vous devrez toujours donner à l'ordinateur certaines règles pour travailler. Mais plus ces règles sont définies d'une manière spécifique à leur domaine, moins il faudra une contribution.

Les langages spécifiques à un domaine ciblant le développement Web nécessitent moins de codage que les langues plus génériques. Langues spécifiques au domaine qui ciblent des tests nécessitent moins de codage que les langues qui ne le font pas. Les langages spécifiques au domaine que la génétique ciblée nécessitent moins de codage que les langues qui ne le font pas. Etc.

Maintenant, voici la grande question: quand un domaine devient-il assez grand pour justifier d'écrire une langue spécifique au domaine pour cela? Le développement Web et les tests sont des choses que au moins la moitié du monde de développement travaille. Il était inévitable que les cadres élimineraient, réduisant ainsi la quantité de code de la chaudronique pour ces éléments (qui est essentiellement une langue spécifique à un domaine).

Mais que diriez-vous de votre domaine d'activité de votre entreprise? Cela vaut-il la peine de se concentrer sur les choses qui sont généralement mentionnées dans votre entreprise et de la rendre afin de pouvoir faire référence à ces choses facilement en code? Je ne pense pas que nous avons vraiment trouvé cet équilibre encore, bien que conception axée sur le domaine soit à propos de répondre à cette question.

17
pdr

Dans les années 80 et 90, il y avait beaucoup de buzz sur Telle appelée Langues de 4ème génération . De l'article Wikipedia:

Tous les 4GL sont conçus pour réduire les efforts de programmation, le temps nécessaire pour développer des logiciels et le coût du développement de logiciels. Ils ne réussissent pas toujours dans cette tâche, entraînant parfois un code inélégant et immeuble. Cependant, étant donné le bon problème, l'utilisation d'un 4GL approprié peut être spectaculairement réussie

...

Un certain nombre de types de 4gls différents existent:

  • PROGRAMMATION DU TABLE (code), fonctionnant généralement avec un cadre d'exécution et des bibliothèques. Au lieu d'utiliser le code, le développeur définit sa logique en sélectionnant une opération dans une liste prédéfinie de commandes de manipulation de la mémoire ou de la table de données. En d'autres termes, au lieu de coder, le développeur utilise une programmation d'algorithme pilotée sur table (voir également les tableaux de contrôle pouvant être utilisés à cette fin). Un bon exemple de ce type de langue de 4gl est PowerBuilder. Ces types d'outils peuvent être utilisés pour le développement d'applications commerciales consistant généralement à un paquet permettant à la fois à la manipulation et à la déclaration des données commerciales, ils sont donc livrés avec des écrans d'interface graphique et signalent des éditeurs. Ils offrent généralement une intégration avec des DLL de niveau inférieur généré à partir d'une 3GL typique pour le moment où les besoins se posent pour plus d'opérations spécifiques matérielles/OS.
  • Les langages de programmation de générateur de rapports prennent une description du format de données et du rapport pour générer et de générer directement le rapport requis directement ou générer un programme pour générer le rapport. Voir aussi rpg
  • De même, les générateurs de formulaires gèrent les interactions en ligne avec les utilisateurs du système d'application ou génèrent des programmes à le faire.
  • Plus ambitieux 4GLS (parfois appelés environnements de génération) tentent de générer automatiquement des systèmes entiers à partir des résultats des outils de cas, des spécifications des écrans et des rapports, et éventuellement également la spécification d'une logique de traitement supplémentaire.
  • Gestion des données 4GLS tels que SAS, SPSS et STATA fournissent des commandes de codage sophistiquées pour la manipulation de données, le remodelage des fichiers, la sélection de cas et la documentation des données dans la préparation de données pour l'analyse statistique et les rapports.

Il est intéressant de contraster 4GL avec langages de programmation de cinquième génération :

Un langage de programmation de cinquième génération (Abréviated 5GL) est un langage de programmation basé sur la résolution des problèmes utilisant des contraintes données au programme, plutôt que d'utiliser un algorithme écrit par un programmeur. La plupart des langages de programmation basés sur les contraintes et la logique et certaines langues déclaratives sont des langues de cinquième génération.

Alors que les langages de programmation de quatrième génération sont conçus pour créer des programmes spécifiques, les langues de cinquième génération sont conçues pour rendre l'ordinateur résoudre un problème donné sans le programmeur. De cette façon, le programmeur n'a pas besoin de s'inquiéter de quels problèmes doivent être résolus et quelles conditions doivent être remplies, sans se soucier de la mise en œuvre d'une routine ou d'un algorithme pour les résoudre. Les langues de cinquième génération sont principalement utilisées dans la recherche sur l'intelligence artificielle. Prolog, OPS5 et Mercure sont des exemples de langues de cinquième génération.

En fin de compte, même si vous ne "programmerez" l'ordinateur, une personne doit toujours expliquer vos besoins à l'ordinateur.

6
Mark Booth

Une des approches les plus discutées de la génération de code automatisée est "MDA" A.K.A Modèle axé sur l'architecture. La plupart du temps (mais pas nécessairement), on dépose UML via l'éditeur visuel de l'interface graphique à partir desquels les classes concernées sont générées.

Bien que, je pense que l'expression du code entièrement fonctionnel pourrait être encore loin, il y a de très bons systèmes qui génèrent des squelettes complètes.

Découvrez: http://www.actifsource.com/actifsource/index.html

Aussi: http://www.win.tue.nl/~mchaudro/cbse2007/programGenerators.pdf

http://proglang.informatik.uni-freiburg.de/Teaching/mda/2006ss/09-code-gen.pdf

3
Dipan Mehta

Nous sommes déjà là! Tout ce dont nous avons besoin est une langue avec aujourd'hui appelée personnage homo-emblématique et des décennies antérieures "code est des données". Définissez votre propre environnement par la programmation ascendante de la conception de haut en bas. Vous pouvez par exemple construire vos propres DSLS à l'intérieur du LISP. Avec l'approche de empilement , vous pourriez mettre autant de DSLS (couches) les unes sur les autres comme si vous auriez besoin de votre problème spécifique. Cette approche vous apporte d'une représentation très basse de S-Expressions jusqu'à l'abstraction de données la plus complexe que vous puissiez penser. Alors, quelle est la rédaction automatique du code, sinon d'empilement d'une langue sur une autre?

1
metaman

À quelle distance nous avons-nous acheté pour automatiser l'écriture de code?

nON où près de quoi que ce soit qui mérite de parler.

Je mets aussi fortement que nous n'allons jamais y arriver non plus.

0
Darknight

État de la technique dans l'automatisation de la rédaction de code? Il n'y a pas d'état de la technique. Mais il y a un état d'échec perpétuel. Il n'y a pas de tentatives réussies jusqu'à présent. Très probablement, il n'y aura jamais de mise en œuvre réussie de cet autre que quelques exemples de portée très limitée.

Cela peut être une bonne chose puisqu'il nous éloignerait d'un emploi.

BTW à des personnes qui lisent ... ne confondez pas la création d'algorithme avec des générateurs de crud triviaux comme Ruby sur rails. Génération de crud est l'exécution d'un algorithme prédéfini, et non la création d'un algorithme à résoudre un problème.

0
Lord Tydus

Avec votre question, je crois que vous demandez à quel point le développement futur sera en mesure de minimiser la quantité de travail qu'un développeur de logiciels devra faire. Même si vous avez un IA qui peut écrire tout votre programme, vous devez toujours le dire quoi faire, comme pour un constructeur automatique de voiture, vous devez toujours lui donner un plan de plan, et que le plan de plan nécessite du travail.

Et si vous avez un IA, vous devez toujours l'enseigner et il devra apprendre à travers plusieurs projets. Par conséquent, je ne pense pas qu'un AI convient à ce type de travail, mais plutôt une approche plus déterministe, à l'aide de générateurs de code. Ces générateurs de code peuvent devenir très complexes, mais ne doivent pas nécessairement utiliser l'apprentissage de la machine.

Cela dit, il existe déjà des recherches dans les domaines appelés conception de logiciels orientés sur des fonctionnalités et une conception logicielle orientée orientée versée. Celles-ci traitent des applications logicielles d'assemblage en sélectionnant certaines fonctionnalités qu'elle aurait dû, puis le code est généré pour cela. L'objectif est d'avoir des implémentations pour plusieurs fonctionnalités qui apparaissent à plusieurs reprises dans un domaine particulier et les assemblent comme des blocs de construction, comme adapté à votre application particulière. Pour le développement Web, par exemple, les fonctionnalités incluraient des transactions, des statistiques, une évolutivité, une exploitation forestière et tout ce que vous pouvez penser comme des caractéristiques récurrentes de différentes applications Web.

Les caractéristiques et les aspects sont différents des composants, car ils sont généralement des préoccupations transversales. Prendre par exemple la journalisation. Vous ne pouvez pas simplement prendre une bibliothèque et l'inclure dans votre application et dire que vous avez la journalisation maintenant. Vous devez diffuser vos appels de journalisation sur votre code, et c'est là que les générateurs de code sont pratiques. J'ai récemment entendu parler de tout ce genre de choses à partir de ceci deux partieinterview sur radio d'ingénierie logicielle .

Il semble que ce type de recherche soit assez à la mode en Europe et en Allemagne, même dans l'industrie, comme je peux dire de l'expérience personnelle. La génération de code peut être utile pour générer le code d'infrastructure nécessaire, de sorte que le développeur puisse se concentrer exclusivement sur la mise en œuvre du comportement spécifique de son application et ne se dérangeant pas avec les mêmes problèmes de côté de chaque projet.

Il reste à voir combien ce code spécifique à une application peut être réduit. Cela ne peut certainement pas être éliminé complètement, seulement réduit à une sorte de plan de plan, comme je l'ai mentionné au début.

0
Andrei Vajna II