Werden Programmiersprachen mehr wie natürliche Sprachen?

27

Können wir Programmiersprachen im Kontext der Linguistik studieren? Entwickeln sich Programmiersprachen auf natürliche Weise ähnlich wie natürliche Sprachen?

Obwohl vollständige Rationalität und mathematische Konsistenz für Programmiersprachen von entscheidender Bedeutung sind, müssen sie (insbesondere moderne Sprachen) für den Menschen lesbar und komfortabel sein.

Entwickeln sich Programmiersprachen, um sprachlicher und damit natürlicher zu werden? Beispielsweise haben Maschinencode, Lochkarten und Assemblersprachen besser lesbaren Sprachen wie Ruby und Python usw. Platz gemacht.

Wenn ich sage, dass Computersprachen natürlicher werden, heißt das nicht, dass sie mehr "Wörter auf Englisch" enthalten, sondern dass sie in Bezug auf die Komplexität der Grammatik und die Fähigkeit, Bedeutungen auszudrücken, eher einer natürlichen Sprache zu ähneln scheinen (zum Beispiel in der Lage sein, eine Abfrage aus einer Datenbank auf rationale und vom Menschen verständliche Weise eloquent zu beschreiben).

Was denkst du alle? Werden Programmiersprachen mehr wie natürliche Sprachen und damit anwendbar auf die Gesetze der Linguistik?

Oder vielleicht leben Sprachen in einem Spektrum, in dem auf der einen Seite die extrem rationalen Sprachen und auf der anderen die kreativeren vorhanden sind. Vielleicht sind die Programmiersprachen und die natürlichen Sprachen identisch und beide liegen nur in diesem Sprachspektrum (ihr einziger Unterschied, vielleicht ist es das "Ding", dem sie ihre Bedeutung geben wollen).

Gibt es einen Zusammenhang zwischen der Trennung von menschlichen Sprachen und Computersprachen (Babel Tower-Effekt)? Werden sie aus den gleichen Gründen vielfältiger (dh um unterschiedliche Probleme in sich ständig weiterentwickelnden Computersystemen / Kultursystemen usw. zu lösen)?

Jamie Fearon
quelle
3
kurze antwort: ja, ja das sind sie.
17
Kurze Antwort: Nein, nein, das sind sie nicht.
Diese Frage wird auf Meta diskutiert .
Robert Harvey
3
Computersprachen vertragen sich in der Regel gut mit Knappheit und Präzision, ähnlich wie die mathematische Notation, die in den letzten paar tausend Jahren keine besondere Neigung gezeigt hat, sich in Richtung natürlicher Sprache zu entwickeln (die mir bewusst ist). Ich bezweifle auch, dass Ihr Kind, wenn Sie in den ersten Lebensjahren ausschließlich mit ihm in Haskell kommunizieren würden, natürliche Sprachkenntnisse entwickeln würde. Ich denke also, dass es einen ziemlich scharfen Kontrast zwischen natürlichen und Computersprachen gibt. Vielleicht hat eine breitere Verbreitung von Sprachkonstruktionstechniken die "Natürlichkeit" im Laufe der Zeit ein wenig verbessert, nehme ich an.
@ryanOptini: Sehen C #, JavaScript, Python oder SQL wie natürliche Sprachen aus? Während sie alle Schlüsselwörter aus der englischen Sprache verwenden, konvergiert keines von ihnen in ein natürliches Sprachformat. COBOL war vielleicht am nächsten, aber ich glaube nicht, dass viele Menschen COBOL für ihre Greenfield-Projekte verwenden.
Jim G.

Antworten:

32

Nicht wirklich, nein. Programmiersprachen sind mehr wie natürliche Sprachen geworden, nur im Sinne von "Wörtern, die wir auf Englisch haben" ( sic ).

Ein wesentliches Merkmal von Programmiersprachen ist, dass sie nicht mehrdeutig sind. Wenn Sie ein Programm schreiben und ausführen, hat es eine genau definierte Bedeutung, dh sein Verhalten. Wenn Sie ein Programm schreiben möchten, das wie beabsichtigt funktioniert (ein schwieriges Ziel), ist es wichtig, dass das Verhalten des Programms so vorhersehbar wie möglich ist. Programmiersprachen haben in der großen Kluft zu natürlichen Sprachen keinen großen Unterschied gemacht.

Umgekehrt wurde daran gearbeitet, die Lücke von der anderen Seite zu schließen: die Analyse natürlicher Sprachen mit den gleichen Werkzeugen wie die Programmiersprachen. Dieses Feld wird als Verarbeitung natürlicher Sprache bezeichnet . Diese Ansätze wurden zugunsten des maschinellen Lernens weitgehend verworfen . Ich werde im Wikipedia-Artikel eine Passage zitieren, die hier direkt relevant ist:

Bis in die 1980er-Jahre basierten die meisten NLP-Systeme auf komplexen handgeschriebenen Regeln. Ab den späten 1980er Jahren gab es jedoch eine Revolution in NLP mit der Einführung von Algorithmen für maschinelles Lernen zur Sprachverarbeitung. Dies lag sowohl an der stetigen Zunahme der Rechenleistung aufgrund des Mooreschen Gesetzes als auch an der allmählichen Abnahme der Dominanz der Chomskyan-Theorien der Linguistik (z. B. der Transformationsgrammatik), deren theoretische Grundlagen die Art der Korpuslinguistik entmutigten, die dem Ansatz des maschinellen Lernens zugrunde liegt Sprachverarbeitung.

Eine Möglichkeit, wie sich die Programmierung weiterentwickelt, besteht darin, dass der Quellcode beim Entwerfen immer größerer Systeme nicht immer ein guter Weg ist, sie zu verstehen. Beispielsweise ist eine Intel-CPU eines der komplexesten Objekte, die jemals von Man entworfen wurden, und ihr „Quellcode“ ist weit davon entfernt nicht nur eine Sammlung von Textdateien. Aber das vollständige Design entwickelt sich auch nicht zu etwas, das einer menschlichen Sprache ähnelt. Ich weiß nicht, welche kognitiven Werkzeuge oder Metaphern hier angebracht sind, und ich glaube, niemand weiß es noch. frage noch einmal in ein paar Jahrhunderten.

¹ Oder vielmehr die Menge möglicher Verhaltensweisen, die mit den Umständen, unter denen sie auftreten, kommentiert werden. Dies fügt der Modellierung jedoch nur einen Schritt der Indirektion hinzu, sodass dies hier nicht wirklich relevant ist.

Gilles 'SO - hör auf böse zu sein'
quelle
Es ist erwähnenswert, dass Versuche, "natürliche" Sprachen zu erstellen, die eher Programmiersprachen ähneln, nicht allzu erfolgreich waren. Sehen Sie Lojban als das am weitesten entwickelte Beispiel.
Dougal
Der Vergleich zwischen CPU-Architektur und Programmierung ist etwas unaufrichtig. Das Hardware-Design war schon immer weitgehend nicht textbasiert, da es völlig andere Probleme gibt, um z. B. 2D-Platzierungs- und Routing-Probleme zu lösen. (Wenn etwas Hardware-Design in Richtung textbasiertes Design mit HDLs geht)
jk.
2

Computersprachen vertragen sich in der Regel gut mit Knappheit und Präzision, ähnlich wie die mathematische Notation, die in den letzten paar tausend Jahren keine besondere Neigung gezeigt hat, sich in Richtung natürlicher Sprache zu entwickeln (die mir bewusst ist).

Ich bezweifle auch, dass Ihr Kind, wenn Sie in den ersten Lebensjahren ausschließlich mit ihm in Haskell kommunizieren würden, natürliche Sprachkenntnisse entwickeln würde. Ich denke also, dass es einen ziemlich scharfen Kontrast zwischen natürlichen und Computersprachen gibt.

Vielleicht hat eine breitere Verbreitung von Sprachkonstruktionstechniken die "Natürlichkeit" im Laufe der Zeit ein wenig verbessert, da Programmierer "mit den Füßen stimmen", indem sie Sprachen verwenden, die ihnen einfacher erscheinen, und die Zahl der Menschen, die in der Lage sind, Sprachen zu erstellen, ist umso größer geworden Praktiker und bessere Werkzeuge, aber dies ist ein kleiner Effekt an den Rändern und stellt keine grundlegende Umwandlung von Programmiersprachen in menschliche dar.

bA
quelle
2

Eine interessante Fallstudie in diesem Bereich ist Perl vs Ruby (und Python ). Perl ist eine Skriptsprache, die Anfang der 90er Jahre entwickelt wurde und im Vergleich zu früheren Unix-basierten Skriptsprachen (z. B. Bash) viele Funktionen bietet. Der Autor Larry Wall gibt bekannt, dass sein linguistischer Hintergrund einige der Sprachmerkmale inspiriert hat.

Perl hat jedoch eine umständliche Syntax und viele Sonderfälle, die die Sprache in all ihren subtilen Eigenheiten etwas wie Englisch erscheinen lassen und verschiedene Kritikebenen anregen . Spätere Skriptsprachen wie Ruby und Python, die von Informatikern entwickelt wurden, weisen eine wesentlich einheitlichere Syntax auf. Das Hauptproblem besteht darin, dass die natürliche Sprache sehr vieldeutig ist (dies wird auf dem Gebiet der Linguistik untersucht), so dass die natürliche Sprache in zukünftigen Mensch-Computer-Schnittstellen wie Siri einen zentralen Platz einnimmt, aber diese Schnittstellen von Natur aus mit Mehrdeutigkeitsproblemen behaftet sein werden.

so, hier ist ein Fall , in dem die Entwicklung der Computersprachen ging weg von einer natürlichen Sprache Idee. Darüber hinaus besteht die allgemeine Geschichte der Computerprogrammiersprachen darin, dass sie entwickelt und geändert wurden, um Mehrdeutigkeiten zu beseitigen (die der natürlichen Sprache in hohem Maße eigen sind). Dies wurde in der Geschichte der Compiler (etwa in den 1970er Jahren) nicht frühzeitig verstanden, und z. B. hatten frühe Versionen der Fortran- Sprache Aussagen mit mehrdeutigen Bedeutungen, die von der Compiler-Implementierung abhingen. Ein Teil der CS-Sprachtheorie, die sich auf das Parsen bezieht, wurde teilweise als Reaktion auf die Entdeckung von Mehrdeutigkeiten beim Parsen von Sprachen entwickelt.

vzn
quelle
Sie haben Ihre Daten falsch eingegeben: Perl wurde 1987 veröffentlicht, Bash 1989. Es ist auch problematisch, Ihren Beitrag zu lesen, da die Groß- und Kleinschreibung fehlerhaft ist.
Tchrist
1

Die Maschinensprache ist sehr präzise, ​​während ein vom Menschen geschriebener Text in der Regel auf viele verschiedene Arten interpretiert werden kann (zum Beispiel poetischer Text).

Immer weiterentwickelt wird die Musterübereinstimmung. Wenn Sie beispielsweise einen hässlichen Code schreiben, kann Ihnen ein Compiler dabei helfen, mehrere mögliche Lösungen vorzuschlagen, und anschließend eine Warnung oder einen Fehler ausgeben, der Ihnen dabei hilft, sich selbst zu verbessern. (zum Beispiel basierend auf gängigen Codemustern)

Es gibt spezielle Untersuchungen zu Interaktions- / Entwurfsmustern, sogar T9 und SWYPE sind Mustererkenner, die Ihnen sehr helfen (Programme, die Ihre Stimme aufzeichnen und in Text umwandeln, sind auch Mustererkenner).

Natürlich ist ein Programm etwas, das auf präzisen Mechanismen beruht, so dass Sie präzise Sprachen (nicht natürlich) benötigen. Während eine einfache Websuche bei Google sehr natürlich ist, müssen Sie nur wenige Wörter eingeben und Sie erhalten, was Sie wollen.

Jede Aufgabe und jedes Ziel hat eine eigene Sprache, das ist keine einfache "Sprachentwicklung", es gibt viel mehr Sprachen. Präzise Aufgaben erfordern präzise Sprachen und entspannte Aufgaben erfordern entspannte Sprachen

Sie können den gleichen Teil des C-Codes schreiben und ihn dann mit mehreren verschiedenen Compilern kompilieren. Das Ergebnis des Codes ist (sofern kein Compiler fehlerhaft ist) das gleiche, auch wenn eine andere Assembly generiert wird, während für eine Websuche dasselbe Ergebnis angegeben wird Schlüsselwörter für verschiedene Suchmaschinen führen zu unterschiedlichen Ergebnissen.

Spielentwickler
quelle
1

Vor einigen Jahren haben mein älterer Sohn und ich ein einfaches englisches Programmier- und Entwicklungssystem entwickelt, um die folgenden Fragen zu beantworten:

  1. Können Low-Level-Programme (wie Compiler) bequem und effizient in High-Level-Sprachen (wie Englisch) geschrieben werden?

  2. Können natürliche Sprachen relativ "schlampig" analysiert werden und dennoch eine ausreichend stabile Umgebung für produktives Programmieren bieten?

  3. Ist es einfacher zu programmieren, wenn Sie Ihre Gedanken in natürlicher Sprache nicht in eine alternative Syntax übersetzen müssen?

Wir können nun jede dieser drei Fragen aus direkter Erfahrung mit einem klaren "Ja" beantworten.

Unser Parser arbeitet, wie wir denken, so etwas wie das menschliche Gehirn. Erwägen. Ein Vater sagt zu seinem kleinen Sohn:

"Willst du an dieser Flasche lutschen, Kleiner?"

Und das Kind hört,

"bla, bla, SAUG, bla, bla, FLASCHE, bla, bla."

Aber er reagiert richtig, weil er ein "Bild" einer Flasche auf der rechten Seite seines Kopfes hat, das mit dem Wort "Flasche" auf der linken Seite verbunden ist, und eine bereits vorhandene "Fähigkeit" in der Nähe seines Nackens, die mit dem Wort "Flasche" verbunden ist Begriff "saugen". Mit anderen Worten, das Kind vergleicht, was es kann, mit den Bildern (Typen) und Fertigkeiten (Routinen), die es gesammelt hat, und ignoriert einfach den Rest. Unser Compiler macht genau das Gleiche: Neue Bilder (Typen) und Fähigkeiten (Routinen) werden - nicht von uns, sondern vom Programmierer - definiert, während er neuen Anwendungscode schreibt.

Eine typische Typdefinition sieht folgendermaßen aus:

Ein Polygon ist eine Sache mit einigen Eckpunkten.

Intern ist der Name "Polygon" jetzt mit einem Typ einer dynamisch zugewiesenen Struktur verknüpft, die eine doppelt verknüpfte Liste von Scheitelpunkten enthält. "Vertex" wird an anderer Stelle (vor oder nach dieser Definition) auf ähnliche Weise definiert. der Plural wird automatisch verstanden.

Eine typische Routine sieht so aus:

So hängen Sie eine x-Koordinate und eine y-Koordinate an ein Polygon an: Erstellen Sie einen Scheitelpunkt mit dem x und dem y. Fügen Sie den Eckpunkt an die Eckpunkte des Polygons an.

Beachten Sie, dass für Parameter und Variablen keine formalen Namen (Eigennamen) erforderlich sind. Wir glauben, dass dies eine wichtige Erkenntnis ist. Mein realer Stuhl und Tisch werden (im normalen Gespräch) niemals "c" oder "myTable" genannt - ich bezeichne sie einfach als "den Stuhl" und "den Tisch". Ebenso hier: "der Scheitel" und "das Polygon" sind die natürlichen Namen für solche Dinge.

Beachten Sie auch, dass Leerzeichen in Routine- und Variablennamen (wie "x coord") zulässig sind. Das ist das 21. Jahrhundert, ja? Und dass "Spitznamen" auch erlaubt sind (wie "x" für "x-Koordinate"). Und diese Possessiven ("Polygon-Eckpunkte") werden auf ganz natürliche Weise verwendet, um "Felder" in "Datensätzen" zu referenzieren.

Beachten Sie auch, dass das Wort "angegeben" "verwendet" oder "mit" oder ein anderes Äquivalent sein könnte, da sich unser schlampiges Parsen auf die Bilder (Typen) und Fähigkeiten (Routinen) konzentriert, die zum Verstehen erforderlich sind, und dies ebenso ignoriert wie möglich den rest.

Auf der untersten Ebene sehen die Dinge so aus:

So fügen Sie einer anderen Nummer eine Nummer hinzu: Intel 8B850800008B008B9D0C0000000103.

Beachten Sie, dass wir in diesem Fall sowohl die höchste als auch die niedrigste Sprache - Englisch und Maschinencode (wenn auch hexadezimal) - in einer einzigen Routine haben. Die Erkenntnis hier ist, dass ein Programm (wie ein typisches Mathematikbuch) in erster Linie in einer natürlichen Sprache geschrieben werden sollte, mit geeigneten Ausschnitten in bequemeren Syntaxen als (und nur als) erforderlich.

Sie können unser Entwicklungssystem hier herunterladen: www.osmosian.com/cal-3040.zip. Es ist ein kleines Windows-Programm mit einer Größe von weniger als einem Megabyte. Wenn Sie mit der PDF-Datei im Verzeichnis "documentation" beginnen, kompilieren Sie vor dem Aufrufen von zehn Seiten den gesamten Shebang neu (in weniger als drei Sekunden auf einer Maschine von Walmart).

Fragen und Kommentare richten Sie bitte an [email protected]

Gerry Rzeppa
quelle
Kennen Sie attempto.ifi.uzh.ch/site/description controlled english? Sie scheinen zwischen diesem und Inform7 zu sitzen en.wikipedia.org/wiki/Inform#Example_game_2
Pete Kirkham
Ich mag die Idee, aber es scheint, dass noch einige Syntax-Hoops zu überspringen sind. Ich glaube zum Beispiel nicht, dass ich oder jemand, der geometrische Elemente modelliert, das Hinzufügen der X- und Y-Koordinaten separat in Betracht ziehen würde. "Anhängen einer x-Koordinate und einer y-Koordinate ..." klingt für mich wirklich seltsam. Wie "Erstellen Sie einen Scheitelpunkt mit dem x und dem y". Fast verzeihlich, da es eigentlich meistens wie Englisch liest , aber immer noch zu streng scheint. Vielleicht bin ich es einfach zu gewohnt, nicht wie ein Mensch oder so etwas zu denken, keine Ahnung.
cHao
1

Die Trennung menschlicher Sprachen kommt von der (darwinistischen?) Evolution in isolierten Gemeinschaften. Die Trennung der Programmiersprachen ergibt sich aus Variationen der technischen Bedürfnisse, der technischen Ideologie, aus Änderungen des technischen und theoretischen Verständnisses und aus Änderungen unserer technischen Umsetzungsfähigkeit. Es ist ein etwas bewussterer Prozess, denke ich.

Könnten Computersprachen mehr wie natürliche Sprachen sein? Wahrscheinlich etwas, bis zu einem gewissen Punkt. Ich vermute, ein großer Teil der Komplexität der natürlichen Sprache resultiert aus einer Vielzahl von Phänomenen der gleichzeitigen Evolution, die keinen Grund haben, zu einem bestimmten Zeitpunkt ein konsistentes Ergebnis zu erzielen, obwohl es wahrscheinlich ist, dass alte Inkonsistenzen nach und nach beseitigt werden, während neue auftreten . Ich bin kein Experte für diachrone Linguistik. Aber wollen wir diese Komplexität in Programmiersprachen?

Das Problem der Mehrdeutigkeit ist ein wichtiges, aber nicht das, was die meisten Leute sagen. Eine Sprache ist ein Kommunikationsmittel und muss im Kontext dieser Kommunikation analysiert werden (Mensch-Mensch, Mensch-Maschine, beides, zwischen Orten oder zwischen Zeiten, um es etwas vereinfacht auszudrücken). Es kommt nicht darauf an, ob Sie in der Sprache nur eindeutige Aussagen treffen können, sondern ob Sie immer sicherstellen können, dass die Kommunikation im beabsichtigten Kontext eindeutig ist. Es gibt eine bekannte und weit verbreitete Programmiersprache, mit der mehrdeutige Programme geschrieben werden können (aber ich habe mir die neuesten Versionen schon eine Weile nicht mehr angesehen). In diesem Fall ist der Compiler intelligent genug, um die Mehrdeutigkeit zu erkennen und um Klärung zu bitten, die in das Programm aufgenommen werden kann, um die Mehrdeutigkeit zu beseitigen. Beachten Sie, dass die Erkennung von Mehrdeutigkeiten nicht bedeutet, dass nur eine der möglichen Optionen eine Bedeutung hat, sondern dass alle dies tun. Die Frage ist, ob eine der kommunizierenden Einheiten die Mehrdeutigkeit erkennen kann, damit der Absender sie klären kann. Menschen sind schlecht darin, aber Computer können ziemlich gut sein.

Formalismen und Programmiersprachen könnten eine umfassendere und flexiblere Syntax haben. Ich glaube, der Hauptgrund, warum sie dies nicht tun, ist der einfache Konservatismus. Die verwendeten syntaktischen Werkzeuge sind immer noch sehr häufig Werkzeuge, die vor dreißig Jahren oder später entwickelt wurden, um den Einschränkungen der damaligen Computer gerecht zu werden. Die Effizienz des Parsens ist beim Kompilieren kein so wichtiges Thema mehr, und es gibt nachvollziehbar leistungsfähigere Techniken.

Interessanterweise stammt die am weitesten verbreitete Grundlage für die Syntax von Programmiersprachen aus der Natursprachenforschung: die kontextfreie Grammatik. Ein Großteil der technischen Forschung verlagerte sich in den sechziger Jahren in die theoretische / technische Informatik, die Anfang der achtziger Jahre von Menschen mit natürlicher Sprache wiederentdeckt wurde (ich vereinfache). Seitdem wurden große Fortschritte bei der Syntax in natürlichen Sprachen erzielt, während die Informatik weitgehend mit alten syntaktischen Werkzeugen zu tun zu haben scheint. Das Pendel in natürlicher Sprache bewegt sich jetzt wieder in Richtung statistischer Techniken, aber algebraische Ansätze für die Syntax werden nicht vergessen. Gute Ansätze ergeben sich höchstwahrscheinlich aus einer Kombination von algebraischen und statistischen Techniken.

Mein Gefühl ist, dass der kritische Bereich die Semantik und der Übergang zwischen Syntax und Semantik ist. Es ist immer noch sehr schwierig, dies für die natürliche Sprache zu formalisieren, während wir im Fall von Programmiersprachen und formalen Systemen über viele präzise Techniken verfügen. Da das Spiel weit davon entfernt ist, für natürliche Sprachen gespielt zu werden, ist es schwer zu sagen, welchen Einfluss es in Zukunft auf die Programmiersprachen haben könnte.

Ein weiterer Punkt ist, dass viele Programmiersprachendesigner versuchen, etwas zu beweisen oder eine technische Ideologie durchzusetzen. Dadurch erhalten sie in ihrem Design äußerst genaue Vorgaben, um zu verhindern, dass Benutzer von ihren beabsichtigten Paradigmen abweichen. Dies ist leider äußerst kontraproduktiv für die Kreativität. Die kreativste Sprache, die jemals entworfen wurde, war eine der ersten: Lisp (1958). Die Freiheit und Flexibilität, die es erlaubte, war die Quelle beträchtlicher Kreativität. Der Preis war, dass es Selbstdisziplin und Verständnis erforderte. Aber Lisp war wirklich eine Metasprache, eine Sprache für die Schaffung von Sprachen.

Um eine andere Perspektive einzunehmen: Programme sind Beweise für ihre Spezifikation, die als mathematische Aussage angesehen werden (nun, ich vereinfache noch einmal). Einige Leute (ich erinnere mich nicht an Referenzen, sorry) haben mit Theoremprüfern gespielt, um Beweise zu produzieren, die aussehen, als wären sie von einem Mathematiker in natürlicher Sprache geschrieben worden. Ich denke, die Idee, Programme zu haben, die so aussehen, als wären sie in natürlicher Sprache geschrieben, ist vielleicht nicht völlig absurd.

Sie werden jedoch vielleicht bemerken, dass der mathematische Diskurs, selbst wenn er informell von einem Mathematiker verfasst wurde, ganz anders aussieht als ein gewöhnlicher Vortrag oder ein Geschichtsbuch. Dies liegt an einem signifikanten Unterschied im betroffenen Diskursuniversum, den semantischen Domänen, über die gesprochen wird. Während Sie sich also Programmiersprachen vorstellen können, die eher natürlichen Sprachen ähneln, gibt es eine natürliche Einschränkung, die der Bereich des Diskurses und seine eigenen wünschenswerten Eigenschaften sind. Höchstwahrscheinlich wird es im Wesentlichen oberflächlich bleiben, dh meistens syntaktisch. Der Mathematiker kann über formale Systeme und über Politik sprechen. Hoffentlich sehen die beiden Diskurse nicht ähnlich aus. Computer können (noch?) Nicht von Politik sprechen oder verstehen. Der Tag, an dem sie es tun, wird nicht mehr programmiert.

Im Rückblick auf die Geschichte waren Hochsprachen von Anfang an (FORTRAN) ein Versuch, sich einer natürlicheren Form zu nähern, um Rechenaufgaben auszudrücken, aber diese Aufgaben wurden als mathematisch oder logisch verstanden (Fortran 1957, Algol 1958, Lisp 1958) ) oder wirtschaftsorientierter (Cobol 1959). Innerhalb von 10 Jahren machten sich die Leute Sorgen um Sprachen, die näher und besser an das jeweilige Problem angepasst sind, und es gab umfangreiche Forschungen im Bereich der so genannten extensible languagesSyntax und Semantik. Ein wichtiger Weg, um Probleme natürlicher auszudrücken, war die Entstehung von object orientation(manchmal unter anderen Namen). Obwohl es immer schwierig ist, die Elternschaft zuzuweisen, ist es wahrscheinlich aus der Arbeit an künstlicher Intelligenz, hauptsächlich in Lisp, und aus der Sprache hervorgegangenSimula 67(Familie Algol), die selbst dazu gedacht war, Probleme der realen Welt auszudrücken, die auf einem Computer simuliert werden sollen. Es scheint alles historisch konsistent.

babou
quelle
0

Obwohl sie sich darin ähneln, dass die gestellten Fragen ähnlich sind, unterscheiden sie sich in Bezug auf die Komplexität. Der Hauptunterschied besteht darin, dass die natürliche Sprache von Natur aus mehrdeutig ist (auch auf der Ebene der Wörter). Es ist sogar nicht klar, was mit einem Wort gemeint ist? In der Welt der Programmiersprachen stehen jedoch eine Vielzahl definierender Geräte zur Verfügung. Betrachten Sie Grammatiken zum Parsen natürlicher Sprache und solche zum Parsen von Programmiersprachen, der Unterschied in der Größe ist atemberaubend. Die Sache ist, dass Grammatiken für Programmiersprachen formale Systeme sind; Sie sind daher für mathematische Analysen zugänglich. Der Umgang mit Mehrdeutigkeiten wirft viele Probleme auf, für die eine Lösung im Gegenstück zur Programmiersprache trivial oder einfach wäre.

Vielleicht wird die Kluft zwischen natürlichen Sprachen und Programmiersprachen kleiner, wenn die Kluft zwischen Informatikern und "natürlichen" Menschen kleiner wird.

Saadtaame
quelle
0

In den letzten Jahren hat das Interesse an (E) DSLs und fließenden Schnittstellen in einer Vielzahl von Sprachen stetig zugenommen: Haskell, die verschiedenen Skriptsprachen, C #, Java und sogar C ++ (denken Sie an die Überlastung von operator<<für die Ausgabe).

In gewissem Maße kann Code auf diese Weise natürlicher gelesen werden. Ich werde das mit einem EDSL-Beispiel in Groovy illustrieren. Mit dem groovy.time- Paket können Sie schreiben

use ( TimeCategory ) {
    // application on numbers:
    println 1.minute.from.now
    println 10.days.ago

    // application on dates
    def someDate = new Date()
    println someDate - 3.months 
}

Wenn Sie dies über die Klasse java.util.Calendar tun würden, müssten Sie für das erste Beispiel Folgendes schreiben:

void demo() {
    Calendar date = new GregorianCalendar();
    date.add(Calendar.MINUTE, 1);
    System.out.println(date);
}
yatima2975
quelle
0

Computersprachen (auch die rudimentären Maschinensprachen vergangener Tage) sind menschliche Sprachen, da sie in erster Linie für die Kommunikation mit Mitmenschen bestimmt sind, von Menschen definiert werden und nur sekundär zur Übermittlung von Anweisungen an eine Maschine verwendet werden. Sie entwickeln sich also ähnlich wie "natürliche" Sprachen (suchen Sie einfach nach "Idiomen" für Ihre Lieblingssprache und überprüfen Sie, wie sich zB C von K & R C zu aktuellem ISO-C 2011 entwickelt hat. Sie existieren jedoch in einer anderen Umgebung muss eine genaue Bedeutung vermitteln (Computer sind immer noch zu dumm, um zu verstehen und zu korrigieren, was von ihnen verlangt wird), und es gibt eine Prämie für die einfache Verarbeitung (daher sind die Grammatik und das Vokabular von sogar C ++, PL / 1 oder APL viel einfacher als zB Englisch, was als natürliche Sprache eher einfach ist).

Ähnliches gilt für den Formalismus der Mathematik oder der Wissenschaften im Allgemeinen oder für Entwürfe (von Natur aus 2D, nicht 1D wie die anderen).

vonbrand
quelle