Question

Je veux dire, existe-t-il un langage codé avec un codage de style humain? Par exemple:

Create an object called MyVar and initialize it to 10;
Take MyVar and call MyMethod() with parameters. . .

Je sais que ce n'est pas très utile, mais il peut être intéressant de créer une telle grammaire.

Était-ce utile?

La solution

COBOL ressemble beaucoup à cela.

SET MYVAR TO 10.
EXECUTE MYMETHOD with 10, MYVAR.

Un autre extrait de Wikipedia:

ADD YEARS TO AGE.
MULTIPLY PRICE BY QUANTITY GIVING COST.
SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.

Assez curieusement cependant, bien que sa conception soit lisible en anglais, la plupart des programmeurs ont complètement sapé cela avec des conventions de nommage bizarres:

SET VAR_00_MYVAR_PIC99 TO 10.
EXECUTE PROC_10_MYMETHOD with 10, VAR_00_MYVAR_PIC99.

Autres conseils

Pourquoi pas LOLCODE ?

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

La simplicité même!

Informer 7

Inform 7 est peut-être le langage qui, à mon avis, est le mieux conçu en langage humain. C'est assez spécifique à l'application pour écrire des jeux d'aventure.

Il est basé sur une sémantique basée sur des règles, dans laquelle vous écrivez de nombreuses règles décrivant la relation entre les objets et leur emplacement. Par exemple, la section ci-dessous est un programme Inform 7:

"Hello Deductible" by "I.F. Author"

The story headline is "An Interactive Example".

The Living Room is a room. "A comfortably furnished living room."
The Kitchen is north of the Living Room.
The Front Door is south of the Living Room.
The Front Door is a door. The Front Door is closed and locked.

The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman.

A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase."  Understand "case" as the briefcase.

The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork.

Instead of listening to the insurance salesman: 
    say "The salesman bores you with a discussion of life  insurance policies.  From his briefcase he pulls some paperwork which he hands to you.";
    move the insurance paperwork to the player.

Exemple cité de Wikipedia

AppleScript est assez proche de cela, bien que cela dépende évidemment de la plate-forme.

Voici un script pour ouvrir iTunes et lire une liste de lecture

tell application "iTunes"
    activate
    play playlist "Party Shuffle"
end tell

Source: Exemples AppleScript

  

Projets favorisant la programmation en   " langage naturel " sont intrinsèquement   voué à l'échec.

- Edsger W.Dijkstra, Comment pouvons-nous dire des vérités qui pourrait faire mal?

C’était "la prochaine grande chose". vers le début des années 80 et j’ai passé la plupart de mes premières années à travailler comme codeur dans "NATURAL", ce qui était censé être le meilleur de la nouvelle génération de langages 4GL (langages de quatrième génération) conçus pour faciliter l’accès aux données ( dans ce cas, dans une base de données ADABAS) lisible par l'homme.

Bien sûr, cela n’a absolument rien fait. Tout ce que nous avons fini par utiliser était un code verbose mal structuré. Ces deux produits existent toujours, mais vous n'en avez jamais entendu parler, ce qui prouve à quel point c'était une impasse.

En fait, à cette époque, il semblait exister un désir général d'aller au-delà de la "programmation" dans une sorte de paradis inspiré par l'IA inspiré de 2001. Oracle tenait beaucoup à la génération de code et je me souviens avec un certain intérêt qu'un produit appelé "le dernier" était présenté aux gestionnaires comme un produit qui générerait automatiquement le programme de votre choix et licencierait tout votre personnel de programmation. Ne semble pas avoir répondu aux attentes ;-)

Il convient de rappeler que SQL a été commercialisé à l'origine dans certains milieux comme un moyen de permettre à la direction d'interroger directement leurs données. On m'a même envoyé suivre un cours pour apprendre le SQL de base (dans une grande organisation de transport nationale qui fonctionnait sur des rails - la variété en acier) où des types de gestion subalternes étaient inclus, car ils prévoyaient de mettre à leur disposition des outils de requête de base. Quelle catastrophe ce fut.

Peut-être que ce sera différent dans 50 ans, mais au stade actuel du jeu, le codage exige une certaine clarté de pensée et de mise en œuvre, ce qui se traduit par une syntaxe dédiée conçue à ces fins, et non par une approximation d'un langage naturel. peu clair et ambigu. L’approximation la plus proche est peut-être la physique, où l’essence du sujet réside dans les mathématiques utilisées (pensez à un langage de programmation pour la physique) et non dans un langage verbeux.

ajouté

J'oubliais qu'en dehors de COBOL, il y avait aussi PL / 1, parfois crédité de permettre à la NASA de placer un homme sur la lune. Elle était aussi verbeuse que COBOL et essayait encore plus d'être "lisible par le gestionnaire". C’est pourquoi personne n’en a vraiment entendu parler non plus: -)

Chef ! Tout le monde peut lire des recettes, n'est-ce pas? Découvrez bonjour le monde !

Ingredients.
72 g haricot beans
101 eggs
108 g lard
111 cups oil
32 zucchinis
119 ml water
114 g red salmon
100 g dijon mustard
33 potatoes

Method.
Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. 
Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. 
Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. 
Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. 
Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. 
Pour contents of the mixing bowl into the baking dish.

Désolé si ce n’est pas une réponse sérieuse, mais c’est génial. : -)

Toutes les langues sont "lisibles par l'homme". :) Sinon, comment quelqu'un pourrait-il le créer? Cela étant dit, les langues prenant en charge les DSL peuvent être incroyablement intuitives, telles que Boo .

Avoir un langage de programmation lu comme un langage normal (verbeux) revient à demander aux gens de converser tout le temps en jargon juridique. Tout le verbiage supplémentaire vient nous gêner.

Un langage de programmation idéal devrait avoir une syntaxe aussi transparente que possible et laisser ressortir les concepts à la base du programme. Évidemment, il y a un compromis entre avoir une courbe d'apprentissage rapide et une syntaxe minimale mais obscure (pensez Perl, voire K).

En créant un ensemble de règles, il est possible d'effectuer une programmation logique dans les Prolog , comme ce. Vous pouvez créer une grammaire (ou en télécharger une) pour un domaine particulier, créer une base de connaissances, puis l'interroger. Après avoir défini votre grammaire, vous pouvez faire quelque chose comme:

bob is a parent of tim.
mary is a parent of bob.

?- X is a grandparent of tim.
X = mary

?- jim is a parent of bob.
false

Je vois que le langage de programmation de Shakespeare n'a pas encore été mentionné.

Ces programmes sont codés pour ressembler à des jeux shakespear, les personnages individuels du jeu étant des variables pouvant contenir des nombres et les différentes phrases du jeu manipulent les personnages et leur numéro. Par exemple, "Dites ce que vous pensez" ordonne à un caractère de sortir sa valeur.

Applescript :

tell application "Finder"
 set the percent_free to ¬
 (((the free space of the startup disk) / (the capacity of the startup disk)) * 100) div 1
end tell
if the percent_free is less than 10 then
 tell application (path to frontmost application as text)
 display dialog "The startup disk has only " & the percent_free & ¬
 " percent of its capacity available." & return & return & ¬
 "Should this script continue?" with icon 1
 end tell
end if

Je peux lire C. Cela signifie que c'est lisible par un humain (parce que je suis un humain). C'est juste trop concis pour la personne moyenne. Le concept général des langages de programmation est de maximiser les informations sur le fonctionnement de l'ordinateur sur une ligne donnée.

C'est pourquoi Ruby est si populaire. il maximise la fonctionnalité dans un texte minimal. L'anglais (ou toute autre langue naturelle) est une langue assez imprécise et peu informative.

En résumé, il s’agit: (i) de le faire avant et (ii) d’une idée plus faible connue.

C’est en fait un sujet brûlant.

Pour commencer - Qu'est-ce qui est lisible par l'homme?

Un lecteur chinois ne peut pas lire le russe et vice versa. Si vous limitez votre domaine par exemple aux pharmaciens chinois qui écrivent une perscription, vous pouvez concevoir un langage autour de cela. Et ce serait lisible par l'homme .

Par exemple, les langues tomberaient sous le coup des Langues spécifiques à un domaine .

SQL

SELECT name, address FROM customers WHERE region = 'Europe'

Oui. C'est ce qu'on appelle COBOL , et les gens le détestent généralement.

Inform 7 est le système le plus performant que j'ai jamais vu. Il présente deux avantages par rapport aux systèmes plus rudimentaires énumérés dans d’autres réponses: c’est un domaine particulièrement approprié au langage naturel (fiction interactive), et il permet une analyse plus sophistiquée du code d’entrée basée sur une connaissance plus linguistique et linguistique, et pas seulement conventionnelle. grammaire en langage de programmation qui utilise des mots anglais au lieu d'accolades, etc.

Perl, affirment certaines personnes.

print "hello!" and open my $File, '<', $path or die "Couldn't open the file after saying hello!";

Effectuez une recherche google pour "programmation en langage naturel". et vous trouverez beaucoup d’informations (y compris pourquoi c’est une mauvaise idée).

La clarté de l’expression est importante.

Mais la clarté de la pensée est bien plus importante.

HyperTalk et son descendant AppleScript ont été conçus pour être similaires à la langue anglaise.

VB est aussi proche que je puisse en penser à un:

Si MyLife.Sucks Then MyLife.End Else MyLife.Continue

Bien sûr, Erlang.

-module(listsort).
-export([by_length/1]).

 by_length(Lists) ->
    F = fun(A,B) when is_list(A), is_list(B) ->
            length(A) < length(B)
        end,
    qsort(Lists, F).

 qsort([], _)-> [];
 qsort([Pivot|Rest], Smaller) ->
     qsort([ X || X <- Rest, Smaller(X,Pivot)], Smaller)
     ++ [Pivot] ++
     qsort([ Y ||Y <- Rest, not(Smaller(Y, Pivot))], Smaller).

Je suis un humain, c'est un langage de programmation, et je peux le lire. Je ne sais pas ce que cela signifie, mais je vois beaucoup de mots anglais, je pense.

(La langue dans la joue.)

Les DSL peuvent être très naturels. Voir cet exemple créé avec MGrammar :

test "Searching google for watin"
    goto "http://www.google.se"
    type "watin" into "q"
    click "btnG"
    assert that text "WatiN Home" exists
    assert that element "res" exists
end

COBOL était destiné à être lu par les responsables et contenait des "mots parasites". pour le rendre plus lisible.

Ce qui est amusant, c’est qu’il se lit un peu comme un DSL verbeux.

Être plus lisible par les humains que la plupart des lecteurs était l’un des premiers arguments de vente d’Ada. Je trouve cela un argument idiot de nos jours, car toute tâche suffisamment complexe dans toute langue va demander à un praticien compétent de comprendre. Cependant, il bat le bejeezus des langages C-syntax. Ses styles de codage dominants peuvent également améliorer cet effet. Par exemple, comparer des boucles dans une instruction if: Ada:

if Time_To_Loop then
   for i in Some_Array loop
      Some_Array(i) := i;
   end loop;
end if;

C:

if (timeToLoop != 0) {
   for (int i=0;i<SOME_ARRAY_LENGTH;i++) {
      someArray[i] = i;
   }
}

Le code C aurait encore pire si j'utilisais la notation hongroise telle que Microsoft, mais j'essaie d'être gentil. : -)

Question intéressante. Votre question peut être lue comme suit: " Existe-t-il un langage de programmation facilement lisible par les humains ?", OU PAR UN AUTRE comme " Existe-t-il un langage humain utilisable pour la programmation ? ". Toutes les réponses ici se sont concentrées sur le premier, alors laissez-moi essayer de répondre à ce dernier.

Avez-vous entendu parler du sanscrit? C’est une ancienne langue indienne sur laquelle sont basées les langues indiennes modernes telles que l’indi.

wiki / sanscrit

Cela fait des années que j'entends dire qu'il est suffisamment précis et complet pour être utilisé tel quel en tant que langage de haut niveau sur un ordinateur. Bien sûr, vous avez besoin d’un compilateur pour convertir les instructions sanscrites en langage machine. Je connais le script & amp; oui, c’est précis (entièrement phonétique, vous n’avez donc jamais à demander "comment épelez-vous cela"), mais je ne connais pas assez bien le programmeur.

Ceci est complètement anecdotique, je ne garantis donc pas l'exactitude. Je voulais juste partager ce que je sais à ce sujet. : -)

Je suis d'accord avec le consensus général ici. "Humain lisible" Les langages de programmation généraux sont généralement une mauvaise idée, mais les langages spécifiques à un domaine lisibles par un humain en valent vraiment la peine.

REBOL dispose d’un excellent système pour créer des DSL.

Diplômé

Il ne contient qu'une déclaration: "vous: écrivez-moi un programme permettant d'effectuer x"

Il est valable pour toutes les valeurs de X et présente l'avantage de ne pas avoir à définir x et qu'il peut être modifié après l'écriture du programme.

Il existe un dialecte commercial appelé intern: les coûts de développement sont inférieurs, mais leur fonctionnement n’est pas garanti

Cobol était un peu comme ça.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top