Domanda

Voglio dire, esiste un linguaggio in codice con codifica in stile umano? Ad esempio:

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

So che non è così utile, ma può essere interessante creare una tale grammatica.

È stato utile?

Soluzione

COBOL è molto simile.

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

Un altro esempio da Wikipedia:

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

Stranamente, sebbene, nonostante il suo design sia leggibile come inglese, la maggior parte dei programmatori lo ha completamente compromesso con strane convenzioni di denominazione:

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

Altri suggerimenti

Che ne dici di LOLCODE ?

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

Semplicità stessa!

Inform 7

Inform 7 è forse la lingua che ritengo sia stata progettata in modo più appropriato in un linguaggio umano. È abbastanza specifico per l'applicazione per scrivere giochi di avventura.

Si basa sulla semantica basata su regole, in cui scrivi molte regole che descrivono la relazione tra gli oggetti e la loro posizione. Ad esempio, la sezione seguente è un programma 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.

Esempio citato da Wikipedia

AppleScript è abbastanza vicino a questo, sebbene ciò dipenda ovviamente dalla piattaforma.

Ecco uno script per l'apertura di iTunes e la riproduzione di una playlist

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

Fonte: Esempi AppleScript

  

Progetti che promuovono la programmazione in   " linguaggio naturale " sono intrinsecamente   destinato a fallire.

- Edsger W.Dijkstra, Come possiamo dire verità che potrebbe far male?

Questa era " la prossima grande cosa " intorno ai primi anni '80 e ho trascorso gran parte dei miei primi due anni come programmatore lavorando in "NATURAL", che era presumibilmente il migliore del nuovo raccolto di 4GL (lingue di quarta generazione) che sono state progettate per consentire l'accesso ai dati ( in questo caso a un database ADABAS) leggibile dall'uomo.

Ovviamente non ha fatto assolutamente nulla del tipo. Tutto ciò che abbiamo finito è stato un codice verbalmente mal strutturato. Entrambi questi prodotti sono ancora in circolazione, ma non ne hai mai sentito parlare, il che dimostra che è stato un vicolo cieco.

In realtà in quel periodo sembrava esserci un desiderio generale di andare oltre la "programmazione" in una sorta di paradiso dell'IA ispirato al 2001. Oracle era davvero appassionato di generazione di codice e ricordo con un certo interesse un prodotto chiamato "l'ultimo" che veniva commercializzato ai manager come un prodotto che avrebbe generato automaticamente qualsiasi programma desiderato e reso ridondante tutto il personale di programmazione. Sembra non essere stato all'altezza delle aspettative ;-)

Vale la pena ricordare che SQL è stato originariamente commercializzato in alcuni settori come un modo per consentire al management di interrogare direttamente i propri dati. Mi è stato persino inviato un corso per imparare l'SQL di base (in una grande organizzazione di trasporto nazionale che correva su binari - la varietà d'acciaio) in cui erano inclusi i tipi di gestione junior perché avevano in programma di mettere nelle loro mani strumenti di query di base. Che disastro è stato.

Forse potrebbe essere diverso tra 50 anni, ma allo stato attuale del gioco la codifica richiede una certa chiarezza di pensiero e implementazione che è meglio mediata attraverso una sintassi dedicata progettata per questi fini, non alcuna approssimazione a un linguaggio naturale che sia poco chiaro e ambiguo. L'approssimazione più vicina è probabilmente la fisica in cui l'essenza della materia è nella matematica utilizzata (si pensi ad un linguaggio di programmazione per la fisica), non un linguaggio dettagliato.

AGGIUNTO

Stavo dimenticando, a parte COBOL, c'era anche PL / 1, a volte accreditato di aver permesso alla NASA di mettere un uomo sulla luna, era così prolisso come COBOL e ha cercato ancora di più di essere "leggibile dal manager". Questo è il motivo per cui nessuno ne ha davvero sentito parlare neanche adesso :-)

Chef ! Chiunque può leggere le ricette, giusto? Ecco ciao mondo !

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.

Scusa se non è una risposta seria, ma è fantastico. : -)

Tutte le lingue sono "leggibili dall'uomo". :) In quale altro modo qualcuno sarebbe in grado di crearlo? Detto questo, le lingue che supportano le DSL possono essere incredibilmente intuitive come Boo .

Avere un linguaggio di programmazione letto come un linguaggio (verboso) normale, sarebbe come richiedere alle persone di conversare continuamente in legalese. Tutta la verbosità extra si mette di mezzo.

Un linguaggio di programmazione ideale dovrebbe avere una sintassi il più trasparente possibile e far risaltare i concetti alla base del programma. Ovviamente c'è un compromesso tra avere una curva di apprendimento rapida e avere una sintassi minima ma oscura (pensate a Perl o persino a K).

Creando un insieme di regole, è possibile eseguire la programmazione logica in Prolog come Questo. È possibile creare una grammatica (o scaricarne una) per un determinato dominio, creare una knowledge base e quindi interrogarla. Dopo aver definito la tua grammatica potresti fare qualcosa del tipo:

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

Vedo che il linguaggio di programmazione Shakespeare deve ancora essere menzionato.

Questi programmi sono codificati per assomigliare a giochi di shakespear, i personaggi individuali nel gioco sono variabili che possono contenere numeri e le varie frasi nel gioco manipolano i caratteri e il numero che contengono. Ad esempio, " Speak your mind " ordina a un personaggio di produrre il suo valore.

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

Riesco a leggere C. Ciò significa che è leggibile dall'uomo (perché sono un essere umano). È troppo conciso per la persona media. Il concetto generale dei linguaggi di programmazione è di massimizzare le informazioni su come il computer dovrebbe funzionare in una determinata linea.

Ecco perché Ruby è così popolare; massimizza la funzionalità nel testo minimo. L'inglese (o qualsiasi altra lingua naturale) è una lingua piuttosto imprecisa, con poche informazioni / carattere.

In breve, è: (i) fatto prima e (ii) un'idea più debole conosciuta.

Questo è in realtà un argomento caldo.

Per cominciare - Cosa è Human readable?

Un lettore cinese non può leggere il russo e viceversa. Se restringi il tuo dominio, ad esempio, ai farmacisti cinesi scrivendo una perscrizione, potresti progettare una lingua attorno a quello. E sarebbe leggibile dall'uomo .

Come la lingua cadrebbe sotto l'ombrello di Lingue specifiche del dominio .

SQL

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

Sì. Si chiama COBOL e la gente generalmente lo detesta.

Inform 7 è il sistema di maggior successo che abbia mai visto. Ha due vantaggi rispetto ai sistemi più grezzi elencati in altre risposte qui: è per un dominio particolarmente appropriato per il linguaggio naturale (narrativa interattiva), e fa un'analisi più elaborata del codice di input basato su più tradizioni linguistiche computazionali, non solo un convenzionale grammatica del linguaggio di programmazione che utilizza parole inglesi anziché parentesi graffe, ecc.

Perl, sostengono alcune persone.

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

Esegui una ricerca su Google per " programmazione in linguaggio naturale " e troverai molte informazioni (incluso il motivo per cui questa è una cattiva idea).

La chiarezza di espressione è importante.

Ma la chiarezza del pensiero è molto, molto più importante.

HyperTalk e il suo discendente AppleScript sono stati progettati per essere simili alla lingua inglese.

VB è il più vicino possibile a uno solo:

Se MyLife.Sucks, allora MyLife.End Else MyLife.Continua

Certo, 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).

Sono un essere umano, è un linguaggio di programmazione e posso leggerlo. Non so cosa significhi nulla di tutto ciò, ma vedo molte parole inglesi lì dentro, penso.

(Lingua saldamente nella guancia.)

I DSL possono essere molto naturali. Vedi questo esempio creato con 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 è stato concepito per essere letto dai gestori e ha " noise words " per renderlo più leggibile.

La cosa divertente è che si legge un po 'come un DSL dettagliato.

Essere più leggibili dall'uomo di molti era uno dei primi punti di forza di Ada. Lo trovo un argomento sciocco in questi giorni, poiché qualsiasi compito sufficientemente complesso in qualsiasi richiederà un professionista competente per capire. Tuttavia, batte il bejeezus sui linguaggi della sintassi C. I suoi stili di codifica dominanti possono migliorare anche questo effetto. Ad esempio, confrontando i loop in un'istruzione 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;
   }
}

Il codice C sembrerebbe ancora peggio se avessi usato la notazione ungherese come Microsoft, ma sto cercando di essere gentile. : -)

Domanda interessante. La tua domanda può essere letta come " Esiste un linguaggio di programmazione facilmente leggibile dagli umani ? & Quot ;, O ELSE come " Esiste un linguaggio umano che può essere utilizzato per la programmazione ? " ;. Tutte le risposte qui si sono concentrate sul primo, quindi lasciami provare a rispondere al secondo.

Hai sentito parlare del sanscrito? È un'antica lingua indiana su cui si basano le moderne lingue indiane come l'hindi.

wiki / Sanskrit

Ho sentito per anni che è abbastanza preciso e completo da poter essere utilizzato come lingua di alto livello su un computer. Naturalmente, è necessario un compilatore per convertire le istruzioni in sanscrito in linguaggio macchina. Conosco la sceneggiatura e amp; sì, è preciso (interamente fonetico, quindi non devi mai chiedere "come si scrive"), ma non conosco abbastanza bene la grammatica.

Questo è completamente aneddotico, quindi non garantisco l'accuratezza di questo. Volevo solo condividere ciò che so a riguardo. : -)

Sono d'accordo con il consenso generale qui. " leggibile dall'uomo " I linguaggi di programmazione per uso generale sono per lo più una cattiva idea, ma i linguaggi specifici di dominio leggibili dall'uomo sono molto utili.

REBOL ha un ottimo sistema per creare DSL.

GradStudent

Ha solo una frase: " tu - scrivimi un programma per fare x "
È valido per tutti i valori di X e ha il vantaggio che x non deve essere definito e può essere modificato dopo la scrittura del programma.

È disponibile un dialetto commerciale chiamato intern: il costo di sviluppo è inferiore ma non è garantito che funzioni

Cobol era un po 'così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top