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
languages
Syntax 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.