Die älteste Programmiersprache. Entwicklung der Programmiersprachen

💖 Gefällt es dir? Teilen Sie den Link mit Ihren Freunden

Der Personal Computer war bis Mitte der sechziger Jahre eine übermäßig teure Maschine, die ausschließlich für bestimmte Aufgaben verwendet wurde und jeweils nur eine Aufgabe ausführte.

Die damaligen Programmiersprachen sowie die Computergeräte, auf denen sie verwendet wurden, wurden nur zur Ausführung bestimmter Aufgaben entwickelt, beispielsweise für das wissenschaftliche Rechnen, und nicht. Aufgrund der Tatsache, dass Maschinen, wie oben erwähnt, ein sehr teures Vergnügen waren und jeweils nur eine Aufgabe ausgeführt wurde, galt die Zeit als teuer – daher stand die Geschwindigkeit der Programmausführung im Vordergrund.

In den sechziger Jahren begannen die Kosten jedoch zu sinken, und es kam die Zeit, in der sich auch kleine Unternehmen dieses Vergnügen leisten konnten. Zudem erhöhte sich die Geschwindigkeit und die Maschinen standen lange Zeit still, ohne irgendwelche Aufgaben auszuführen. Und um dies zu verhindern, wurden Time-Sharing-Systeme eingeführt.

Die Prozessorzeit wurde in diesen Systemen, wie man es ausdrückt, „in Scheiben geschnitten“, und Benutzer konnten abwechselnd kurze Abschnitte derselben Zeit erhalten. Das Computergerät begann viel schneller zu arbeiten, was dem Benutzer am Terminal das Gefühl gab, seine Aktivitäten allein mit dem System auszuführen. Das Gerät war wiederum weniger im Leerlauf, da es nicht eine, sondern mehrere Aufgaben gleichzeitig erledigte. Time-Sharing reduzierte die Kosten für Hardware-Zeit erheblich, und das alles aufgrund der Tatsache, dass ein Gerät nicht von einem Benutzer oder sogar von zwei, sondern von Hunderten gemeinsam genutzt werden konnte.

Als die Macht billiger und zugänglicher wurde, begannen diejenigen, die Programmiersprachen entwickelten, immer mehr darüber nachzudenken, wie man Software bequemer schreiben kann, und nicht über die Geschwindigkeit ihrer Ausführung. „Kleine“ Operationen, das heißt atomare Operationen, die direkt von Gerätegeräten ausgeführt werden, wurden zu „voluminöseren“ Operationen auf hoher Ebene und Einzelstrukturen zusammengefasst, mit denen es für Benutzer viel bequemer und einfacher war, ihre Aktivitäten auszuführen .

Was sind Programmiersprachen?

Auf diese Frage werden wir nun eine klare Antwort geben. Eine Programmiersprache ist ein formales Zeichensystem, das Algorithmen in einer für den Ausführenden bequemeren Form beschreiben soll, zum Beispiel persönlicher Computer. Eine Programmiersprache umfasst ein Paket semantischer, syntaktischer und lexikalischer Regeln, die zur Erstellung eines Computerprogramms verwendet werden. Mithilfe einer solchen Sprache kann der Programmierer genau bestimmen, auf welche Ereignisse der PC reagiert, wie Informationen gespeichert und übertragen werden und welche Aktionen unter diesen verschiedenen Umständen durchgeführt werden müssen.

Bei der Entwicklung der ersten programmierbaren Geräte wurden fast dreitausend Programmiersprachen erfunden. Ihre Zahl steigt jedes Jahr und es kommen neue hinzu. Es gibt einige Sprachen, die nur eine kleine Anzahl von Entwicklern verwenden kann, die sie entwickelt haben, während andere einer großen Anzahl von Benutzern bekannt werden. Fachprogrammierer nutzen bei ihrer Arbeit mehr als zehn verschiedene Programmiersprachen.

Warum werden Programmiersprachen benötigt?

Der Prozess der PC-Bedienung ist die Ausführung eines Programms. Um es genauer auszudrücken in einfacher Sprache, also ein Paket von Befehlen, die in einer bestimmten Reihenfolge folgen. Die Art der Maschinenanweisung, die aus Nullen und Einsen besteht, gibt an, welche Aktionen der Zentralprozessor ausführen soll. Daraus folgt: Um dem PC die Reihenfolge der auszuführenden Aktionen festzulegen, wird eine Folge binärer Typcodes der entsprechenden Befehle vorgegeben. In Maschinencodes besteht Software aus vielen Befehlen. Das Schreiben einer solchen Software ist zeitaufwändig, schwierig und mühsam. Der Programmierer muss die Kombination von Einsen und Nullen des binären Codes jedes Programms kennen, außerdem muss er sich die binären Codes der Datenadressen merken, die während seiner Ausführung verwendet werden. Es ist viel einfacher, Software in einer Sprache zu schreiben, die der menschlichen natürlichen Sprache näher kommt, und dieses Programm von einem PC in maschinenähnliche Codes übersetzen zu lassen. Genau so entstanden Programmiersprachen, die speziell zum Schreiben von Software gedacht sind.

Heutzutage gibt es eine große Anzahl unterschiedlicher Programmiersprachen. Jeder von ihnen kann zur Lösung vieler Probleme verwendet werden. Spezialisten auf ihrem Gebiet wissen genau, welche Programmiersprache zur Lösung etwaiger Probleme verwendet werden muss, da jede der Sprachen über eigene Fähigkeiten verfügt, die auf bestimmte Arten von Aufgaben abzielen, und auch über eine eigene Art der Beschreibung von Objekten und Konzepten verfügt werden zur Lösung einer Vielzahl von Problemen eingesetzt.

Programmiersprachen werden in 2 Gruppen eingeteilt

Es gibt Sprachen mit einem niedrigen Niveau und Sprachen mit einem hohen Niveau.

Zur ersten Gruppe gehören Assemblersprachen, in denen Befehlsnotationen in Form von Symbolen verwendet werden, die sich schnell und klar merken lassen. Anstelle einer Folge binärer Befehle werden symbolische Notationen geschrieben, und anstelle der Adressen der binären Daten, die bei der Ausführung eines Befehls verwendet werden, werden die von den Programmierern gewählten Namen und die Namen dieser Daten in Form von Symbolen geschrieben sind vergeben. Diese Programmiersprache hat einen anderen Namen – Autocode oder mnemonischer Code.

Am häufigsten werden jedoch höhere Programmiersprachen für Programme von denjenigen verwendet, die sie erstellen. Eine solche Sprache verfügt im Prinzip, genau wie die menschliche Sprache, über ein eigenes Alphabet, nämlich eine große Anzahl von Symbolen, die in Sprachen verwendet werden. Diese Symbole sind notwendig, um die Schlüsselwörter der Sprache zu bilden. Jedes Schlüsselwort hat seine eigene Funktion, genau wie in der Sprache, die wir gewohnt sind, Wörter, die aus Buchstaben des Alphabets bestehen. Schlüsselwörter werden mithilfe der syntaktischen Regeln der Sprache zu Sätzen miteinander verbunden. Jeder dieser Sätze ist für die Abfolge der Aktionen verantwortlich, die der PC ausführt.

Eine Programmiersprache, die ein hohes Niveau hat, ist das Bindeglied zwischen dem PC und dem Benutzer und lädt ihn ein, mit dem PC auf die für ihn bequemste Weise zu kommunizieren. Sehr oft hilft diese Sprache dabei, die richtige Methode zur Lösung von Problemen auszuwählen.

Bevor er mit dem Schreiben von Software in einer Programmiersprache mit hohem Niveau beginnt, erstellt ein Spezialist einen Algorithmus zur Lösung von Problemen, nämlich einen schrittweisen Aktionsplan, der zur Lösung dieses Problems befolgt werden muss. Daher werden Programmiersprachen, die die vorläufige Kompilierung eines Algorithmus erfordern, als Sprachen vom algorithmischen Typ bezeichnet.

Nun, hier kommen wir sozusagen zur Hauptsache. Jetzt verraten wir Ihnen, welche Programmiersprachen es gibt.

Welche verschiedenen Programmiersprachen gibt es?

Fortran

Bereits Mitte der fünfziger Jahre begannen Wissenschaftler, Programmiersprachen zu entwickeln. Und die allererste Sprache dieser Art hieß Fortran und wurde 1957 entwickelt. Es wird verwendet, um einen Algorithmus zur Lösung wissenschaftlicher und technischer Probleme mithilfe eines digitalen Computers zu beschreiben. Darüber hinaus, wie die ersten Recheneinheiten, die Sprache dieser Art zur Durchführung naturwissenschaftlicher und mathematischer Berechnungen verwendet. Diese Sprache hat in verbesserter Form bis heute überlebt und ist unter den modernen Sprachen mit hohem Niveau diejenige, die am häufigsten für die Durchführung wissenschaftlicher Forschung verwendet wird. Die heute am häufigsten verwendeten Optionen: Fortran-I2, Fortran-I4, EASIC Fortran und ihre Verallgemeinerungen.

ALGOL

Wir setzen unser Thema Programmiersprachen fort. Wie Sie bereits verstehen, sprechen wir nun über eine Programmiersprache wie Algol, die zwischen 1958 und 1960 erschien. In den Jahren 1964-1968 wurde sie verbessert und es erschien ALGOL-68. Eine Sprache dieser Art wurde von einem Komitee entwickelt, dem Wissenschaftler aus Amerika und Europa angehörten, und sie wurde als Hochsprache eingestuft. Mit dieser Art von Sprache könnten algebraische Formeln leicht in Programmbefehle übersetzt werden. Algol war nicht nur in europäischen Ländern, sondern auch in Russland beliebt. Diese Art von Sprache hatte nach einiger Zeit einen spürbaren Einfluss auf alle erstellten Programmiersprachen, insbesondere betraf dies die Pascal-Sprache. Dieser Typ Sprachen wurden im Prinzip, genau wie die Fortran-Sprache, zur Lösung wissenschaftlicher und technischer Probleme geschaffen. Darüber hinaus diente die Sprache als Mittel zur Vermittlung der Grundlagen der Programmierung, also der Kunst, Software zu erstellen.

COBOL

Die Programmiersprache Cobol wurde zwischen 1959 und 1960 entwickelt und gehört zur dritten Generation. Es ist in erster Linie für die Entwicklung von Anwendungen für Unternehmen und zur Lösung wirtschaftlicher Probleme, für die Verarbeitung von Bankdaten, für Versicherungen und andere Institutionen gedacht. Die „Erfinderin“ von Kobol ist Grace Hopper. Normalerweise wird COBOL wegen seiner Umständlichkeit und Ausführlichkeit kritisiert, da eines der Ziele der Schöpfer dieser Sprache darin bestand, dieser so nahe wie möglich zu kommen Englische Sprache. Gleichzeitig verfügte die Programmiersprache für ihre Zeit über hervorragende Werkzeuge für die Arbeit mit Datenstrukturen und Dateien, was ihr im Übrigen eine lange Lebensdauer in Geschäftsanwendungen sicherte. Zumindest in den USA – auf jeden Fall.

Lispeln

Als nächstes kommt die Programmiersprache Lisp. Die Programmiersprache Lisp wurde fast zeitgleich mit der Programmiersprache Cobol entwickelt. Diese Sprache basiert auf der Programmdarstellung systemlinearer Symbollisten, die die Hauptdatenstruktur der Sprache darstellen. Es ist nach Fortran die zweitälteste Programmiersprache. Es wird häufig zur Verarbeitung von Informationen in Form von Symbolen und zur Erstellung von Software verwendet, die die Funktionsweise des menschlichen Gehirns simuliert.

Ein in Lisp erstelltes Programm besteht aus Folgen von Ausdrücken, also Formularen. Das Ergebnis des Programms ist die Berechnung dieser Ausdrücke, geschrieben in Form einer Liste – eine der Hauptstrukturen dieser Art von Sprache. Der Hauptpunkt eines Lisp-Programms ist „Leben“ im symbolischen Raum.

BASIC

Die Programmiersprache BASIC wurde Mitte der sechziger Jahre von Programmierern am Dartmouth College in den USA entwickelt. Die Sprache basierte teilweise auf Fortran 2 und teilweise auf ALGOL-60, es wurden auch Ergänzungen vorgenommen, die das Arbeiten im Time-Sharing-Modus komfortabler machten, und nach einigen Jahren wurde sie auch für die Textverarbeitung und Matrixarithmetik geeignet. Diese Art von Programmiersprache wurde ursprünglich auf dem GE-265-Großrechner implementiert, der eine große Anzahl von Terminals unterstützt. Zum Zeitpunkt ihres Erscheinens handelte es sich entgegen der landläufigen Meinung um eine kompilierte Sprache.

Diese Art von Programmiersprache ist so konzipiert, dass Schüler Programme über Time-Sharing-Terminals schreiben können. Es wurde nicht nur entwickelt, um das Problem zu lösen, das mit problematischen, älteren Sprachen verbunden ist, sondern es sollte auch von „normalen“ Benutzern verwendet werden, die nicht an der Geschwindigkeit des Programms, sondern an der Benutzerfreundlichkeit interessiert sind einen PC zur Lösung ihrer Aufgaben. Aufgrund der Einfachheit dieser Art von Sprache beginnen die meisten Programmieranfänger ihre Programmierreise damit.

Fort

Die Programmiersprache Forth erschien Ende der sechziger und Anfang der siebziger Jahre. Diese Art von Sprache wurde für Steuerungsaufgaben verschiedener Arten von Systemen verwendet, nachdem ihr Schöpfer Charles Moore darin Software geschrieben hatte, die zur Steuerung von Radioteleskopen am Arizona Observatory gedacht war.

Viele Eigenschaften wie Flexibilität, Interaktivität und einfache „Erfindung“ haben Forth zu einer effektiven und attraktiven Sprache in der angewandten Forschung und bei der Erstellung von Werkzeugen gemacht. Die offensichtlichen Anwendungsgebiete für diese Art von Programmiersprache sind eingebettete Steuerungssysteme. Darüber hinaus hat es auch bei der Programmierung von PCs mit verschiedenen Betriebssystemen Anwendung gefunden.

Pascal

Wenn man das Thema fortsetzt, kann man nicht umhin, diese Art von Programmiersprache als Pascal zu erwähnen. Pascal wurde 1972 entwickelt und nach Blaise Pascal benannt, der einst ein großer Mathematiker und Erfinder der ersten Recheneinheit der Welt war. Der Schweizer Wissenschaftler und Informatiker Nikolaus Wirth gilt zu Recht als Schöpfer der Sprache. Die Innovation diente der Vermittlung von Programmiermethoden. Pascal ist eine Allzweck-Programmiersprache.

Von all seinen Merkmalen können die wichtigsten genannt werden - dies ist die strengste Typisierung und das Vorhandensein von Programmierwerkzeugen für Strukturtypen. Pascal wurde eine der ersten Sprachen dieser Art. Mit der Programmiersprache Pascal lernen Sie, wie Sie ein Programm richtig schreiben und Methoden zur Lösung von Problemen richtig entwickeln. Außerdem lernen Sie, wie Sie die richtigen Optionen für die Darstellung und Organisation der in einem Problem verwendeten Daten auswählen. Die Pascal-Sprache wird seit 1983 in weiterführenden Informatikkursen eingeführt. pädagogische Schulen USA.

Um das Thema Programmiersprachen fortzusetzen, beschlossen wir, über eine andere Art von Sprache zu sprechen – die Ada-Sprache. Die Programmiersprache Ada wurde Ende der siebziger Jahre aus Pascal entwickelt und nach Ada Lovelace, einer begabten Mathematikerin, benannt. Es war diese talentierte Frau, die 1843 der ganzen Welt die Fähigkeiten der Analytical Unit von Charles Babbage erklärte. Diese Art von Sprache wurde im Auftrag des US-Verteidigungsministeriums entwickelt und diente ursprünglich zur Lösung von Problemen bei der Steuerung von Raumflügen.

Die Programmiersprache Ada ist eine modulare, strukturierte und objektorientierte Programmiersprache, die Funktionen zur Programmierung paralleler Prozesse auf hohem Niveau enthält. Die Syntax dieser Art von Programmiersprache ist von Pascal und Algol übernommen, sie wurde erweitert und in einem logischen und strengen Stil ausgeführt. Ada ist eine stark typisierte Programmiersprache, die die Arbeit mit Objekten ohne Typ vollständig überflüssig macht und außerdem automatische Konvertierungen auf ein absolutes Minimum reduziert.

Die Programmiersprache C ist mit Abstand die beliebteste und unter Programmierern am häufigsten verwendete. Diese Art von Programmiersprache hat ihren Ursprung in zwei Sprachen, nämlich BCPL und B. Martin Richards schuf BCPL 1967 als eine Sprache, die zum Schreiben von Systemsoftware und Compilern gedacht war. Was das ist, verraten wir Ihnen weiter unten. Ken Thompson im Jahr 1970, um mehr zu schaffen frühere Versionen UNIX-Betriebssystem, das auf dem DEC PDP-7-PC verwendet wird. Sowohl in der ersten als auch in der zweiten Sprache wurden Variablen nicht in Typen unterteilt – jeder Datenwert hatte ein Wort im Speicher.

Die Programmiersprache SI wurde erstmals 1972 auf dem DEC PDP-11 PC implementiert. Aber es gelang ihm, als UNIX-Betriebssystem an Popularität und Ruhm zu gewinnen. Alle wichtigen Betriebssysteme sind heute in C oder C++ geschrieben. Die Programmiersprache C ist nach mehreren Jahrzehnten auf einer Vielzahl von PCs verfügbar. Übrigens ist es erwähnenswert, dass es völlig unabhängig von der Hardware ist.

Die Sprache C wurde Ende der siebziger Jahre zu einer traditionellen Programmiersprache. Diese Art von Sprache ist mit umfangreichen Tools ausgestattet, die es ermöglichen, flexible Software zu schreiben, die in allen Arten moderner PCs verwendet wird.

Prolog

Nun, wir sind am Ende angelangt. Wir beenden unser Thema Programmiersprachen mit einer Geschichte über die neueste Sprache in diesem Bereich – und sie heißt Prolog. Diese Art von Sprache gilt als die Programmiersprache der Zukunft und wurde Anfang der siebziger Jahre entwickelt. An der Entwicklung waren Spezialisten der Universität Marseille beteiligt. Sie benannten es nach den Worten „Programmierung in der Sprache der LOGIK“. Die Programmiersprache wurde auf der Grundlage der Gesetze der mathematischen Logik erstellt. Diese Art von Sprache ist im Gegensatz zu den oben beschriebenen Programmiersprachen nicht algorithmisch und gehört zu den sogenannten beschreibenden Sprachen, also Sprachen der beschreibenden Art.

Lassen Sie uns nun darüber sprechen, was ein Compiler und ein Interpreter sind.

Compiler und Interpreter

Es reicht nicht aus, eine Sprache zu entwickeln, die zum Schreiben eines Programms geeignet wäre. Jede Sprache muss einen Übersetzer haben, das ist ein spezielles Programm – einen Übersetzer.

Ein Übersetzer ist also ein Programm, das Software, die in einer Programmiersprache geschrieben wurde, in Software in einer anderen Programmiersprache übersetzen soll. Dieser Übersetzungsprozess wird Übersetzung genannt. Ein Beispiel für einen Übersetzer ist ein Complitor, der ebenfalls ein Programm ist. Ziel ist es, Software, die in einer beliebigen Sprache geschrieben ist, in Software im Maschinencode zu übersetzen. Dieser Vorgang wird Kompilierung genannt.

Es gibt eine andere Methode, die die Prozesse der Übersetzung und der Programmausführung kombinieren kann, und sie heißt Interpretation. Der Kern des Prozesses ist wie folgt: Zuerst wird er in Maschinencodes übersetzt, dann wird die erste Zeile der Software ausgeführt. Wenn die erste Zeile fertig ist, beginnt die Übersetzung der zweiten Zeile und so weiter.

Daraus können wir schließen, dass es sich bei einer Interpretation um ein Programm handelt, das für zeilenweise Übersetzungen gedacht ist, und um das Originalprogramm.

Nun, das scheint alles für heute zu sein, jetzt wissen Sie, was sie sind Programmiersprachen, und was sie sind.

Das ist allgemein bekannt Informationstechnologie sind einer der am schnellsten wachsenden Bereiche modernes Leben. Fast täglich tauchen neue Technologien, Projekte, Namen und Abkürzungen auf. Und im Streben nach Fortschritt und im Bemühen, mit ihm Schritt zu halten, ist es manchmal sinnvoll, einen Moment innezuhalten, auf die Zehenspitzen zu treten und sich umzusehen. Werfen Sie einen Blick auf den Horizont, erinnern Sie sich an die Geschichte und denken Sie an die Zukunft ... Um sich mit frischer Energie wieder in die Arbeit zu stürzen, beherrschen Sie neue Technologien, steigern Sie Ihre eigene Effizienz und Ihr Wohlbefinden. Bis du wieder auf Zehenspitzen stehen willst...

Den Anlass zum Schreiben dieses Artikels gab mir eine Diskussion, die in einem der dotSITE-Foren entbrannte, nachdem dort eine Meldung erschien, die C#, eine der Hauptkomponenten der neuen .NET-Plattform von Microsoft, scharf kritisierte. Die Nachricht enthielt bereits recht banale Kritik an Microsoft im Allgemeinen und im Besonderen (ich sage hier nicht, dass es nichts gibt, wofür man Microsoft kritisieren könnte, sondern nur, dass diese Kritik bereits für Aufregung gesorgt hat), sowie einige Aussagen speziell dazu C#. Während der anschließenden Diskussion wurden einige interessante Kommentare geäußert, einige Fragen blieben jedoch unbeantwortet. All dies hat mich dazu veranlasst, einen Artikel zu schreiben, in dem versucht wird, diejenigen, die Meinungen über die Exklusivität einer bestimmten Programmiersprache vertreten, auf irgendeine Weise „zu versöhnen“. Ich werde versuchen, einen historischen Überblick über die Entwicklung verschiedener Sprachen zu geben und anhand von Beispielen einige allgemeine Trends zu erläutern. Vielleicht kann ich jemanden davon überzeugen, dass es sinnlos ist, solche Diskussionen zu führen. Ich erhebe keinen Anspruch auf Objektivität (obwohl ich dies versuchen werde) oder auf Vollständigkeit der Darstellung. Dies ist nur ein Versuch, „auf Zehenspitzen zu stehen und sich umzusehen“ ...

1. Die ersten universellen Sprachen

Also, fangen wir an. Wenden wir uns den Ursprüngen der Entwicklung zu Computertechnologie. Erinnern wir uns an die allerersten Computer und Programme für sie. Dies war die Ära der Programmierung direkt in Maschinencodes, und die Hauptspeichermedien waren Lochkarten und Lochbänder. Programmierer mussten die Architektur der Maschine genau kennen. Die Programme waren recht einfach, was zum einen an den sehr begrenzten Fähigkeiten dieser Maschinen und zum anderen an der großen Komplexität der Entwicklung und vor allem des Debuggens von Programmen direkt in Maschinensprache lag. Gleichzeitig verlieh diese Entwicklungsmethode dem Programmierer eine unglaubliche Macht über das System. Es wurde möglich, solch geniale Algorithmen und Methoden zur Programmorganisation zu verwenden, von denen moderne Entwickler nie geträumt hätten. Beispielsweise könnte eine Funktion wie selbstmodifizierender Code verwendet werden (und wurde auch verwendet!). Die Kenntnis der binären Darstellung von Befehlen ermöglichte es manchmal, einige Daten nicht separat zu speichern, sondern als Befehle in den Code einzubetten. Und das ist noch lange nicht der Fall volle Liste Techniken, die Beherrschung mindestens einer davon bringt Sie sofort auf die Ebene eines erstklassigen „Guru“.

2. Monteur

Der erste bedeutende Schritt scheint der Übergang zur Assemblersprache zu sein (erlauben wir uns einen kleinen lyrischen Exkurs: Der englische Name Assemblersprache oder Assembler wird mit genau demselben Begriff ins Russische übersetzt, der oben verwendet wurde. Gleichzeitig Der Anfänger hat den Eindruck, dass die Sprache per Named Assembler nach einer bestimmten Person benannt ist. Eine ziemlich lustige Situation, nicht wahr?). Ein scheinbar nicht sehr auffälliger Schritt – der Übergang zur symbolischen Kodierung von Maschinenanweisungen – war tatsächlich von großer Bedeutung. Der Programmierer musste sich nicht mehr mit den raffinierten Methoden zur Kodierung von Befehlen auf Hardwareebene befassen. Darüber hinaus wurden oft im Wesentlichen identische Befehle abhängig von ihren Parametern auf völlig unterschiedliche Weise kodiert (ein bekanntes Beispiel aus der Welt moderner Computer ist die Kodierung der mov-Anweisung in Intel-Prozessoren: Es gibt mehrere völlig unterschiedlich codierte Varianten des Befehls; Die Wahl der einen oder anderen Option hängt von den Operanden ab, obwohl das Wesen der Operation unverändert bleibt: den Inhalt (oder Wert) des zweiten Operanden in den ersten einfügen. Es wurde auch möglich, Makros und Labels zu verwenden, was auch das Erstellen, Ändern und Debuggen von Programmen vereinfachte. Es gab sogar einen Anschein von Portabilität – es war möglich, eine ganze Familie von Maschinen mit einem ähnlichen Befehlssystem und einer Art gemeinsamem Assembler für sie zu entwickeln, ohne dass die Binärkompatibilität sichergestellt werden musste.

Gleichzeitig hatte der Übergang zu einer neuen Sprache (zumindest auf den ersten Blick) auch einige negative Seiten. Es wurde fast unmöglich, alle möglichen cleveren Techniken wie die oben genannten anzuwenden. Darüber hinaus erschienen hier erstmals in der Geschichte der Programmierentwicklung zwei Darstellungen des Programms: in Quelltexten und in kompilierter Form. Während Assembler zunächst nur Mnemoniken in Maschinencodes übersetzten, ließen sich diese leicht in andere und wieder zurück übersetzen. Doch als dann Funktionen wie Beschriftungen und Makros verfügbar wurden, wurde die Disassemblierung immer schwieriger. Mit dem Ende der Assembler-Ära ging die Möglichkeit der automatischen Übersetzung in beide Richtungen völlig verloren. In diesem Zusammenhang wurde eine Vielzahl spezieller Disassembler-Programme entwickelt, die inverse Transformationen durchführen, in den meisten Fällen jedoch kaum Code und Daten trennen können. Darüber hinaus gehen alle logischen Informationen (Variablennamen, Labels usw.) für immer verloren. Im Falle des Problems der Dekompilierung von Hochsprachen sind Beispiele für eine zufriedenstellende Lösung des Problems völlig selten.

3. FORTRAN

Im Jahr 1954 wurde die Programmiersprache Fortran in den Tiefen der IBM Corporation von einer Entwicklergruppe unter der Leitung von John Backus entwickelt.

Die Bedeutung dieses Ereignisses kann kaum überschätzt werden. Es ist die erste höhere Programmiersprache. Zum ersten Mal konnte sich ein Programmierer wirklich von den Besonderheiten der Maschinenarchitektur abstrahieren. Der Schlüsselgedanke, der auszeichnet neue Sprache Aus Assembler entstand das Konzept der Unterprogramme. Wir möchten Sie daran erinnern moderne Computer Unterstützungsroutinen auf Hardware-Ebene, die die entsprechenden Anweisungen und Datenstrukturen (Stack) direkt auf Assembler-Ebene bereitstellen, aber 1954 war das völlig anders. Daher war das Kompilieren von Fortran keineswegs ein trivialer Prozess. Darüber hinaus war die syntaktische Struktur der Sprache für die maschinelle Verarbeitung recht komplex, was vor allem daran lag, dass Leerzeichen überhaupt nicht als syntaktische Einheiten verwendet wurden. Dies führte zu vielen Möglichkeiten für versteckte Fehler, wie zum Beispiel:

In Fortran beschreibt das folgende Konstrukt: for-Schleife um 10 zu markieren, wenn der Index von 1 auf 100 geändert wird: DO 10 I=1.100 Wenn Sie hier das Komma durch einen Punkt ersetzen, erhalten Sie den Zuweisungsoperator: DO10I = 1.100 Man sagt, dass ein solcher Fehler dazu geführt hat, dass die Rakete beim Start explodierte !

Die Fortran-Sprache wurde (und wird auch heute noch) für das wissenschaftliche Rechnen verwendet. Der Nachteil besteht darin, dass viele bekannte Sprachkonstrukte und -attribute fehlen; der Compiler überprüft ein syntaktisch korrektes Programm praktisch nicht auf semantische Korrektheit (Typübereinstimmung usw.). Moderne Methoden zur Strukturierung von Code und Daten werden nicht unterstützt. Den Entwicklern selbst war dies bewusst. Laut Backus selbst standen sie vor der Aufgabe, einen Compiler und nicht eine Sprache zu entwickeln. Das Verständnis der unabhängigen Bedeutung von Programmiersprachen kam später.

Die Einführung von Fortran stieß auf noch heftigere Kritik als die Einführung von Assembler. Programmierer befürchteten eine Verringerung der Programmeffizienz durch die Verwendung einer Zwischenverbindung in Form eines Compilers. Und diese Befürchtungen waren berechtigt: Tatsächlich wird ein guter Programmierer höchstwahrscheinlich bei der manuellen Lösung eines kleinen Problems Code schreiben, der schneller funktioniert als der Code, der als Ergebnis der Kompilierung erhalten wird. Nach einiger Zeit kam man zu der Einsicht, dass die Umsetzung großer Projekte ohne den Einsatz von Hochsprachen nicht möglich ist. Die Leistungsfähigkeit der Computer wuchs und der bis dahin als bedrohlich empfundene Leistungsabfall konnte verkraftet werden. Die Vorteile von Hochsprachen wurden so offensichtlich, dass sie Entwickler dazu veranlassten, immer fortschrittlichere neue Sprachen zu entwickeln.

4.Cobol

1960 wurde die Programmiersprache Cobol entwickelt. Es sollte eine Sprache für die Erstellung kommerzieller Anwendungen sein, und das wurde auch so. Tausende kommerzielle Anwendungssysteme sind in Cobol geschrieben. Eine Besonderheit der Sprache ist die Fähigkeit effiziente Arbeit mit großen Datenmengen, was typisch für kommerzielle Anwendungen ist. Die Popularität von Cobol ist so groß, dass trotz aller Mängel (Cobol ähnelt in Struktur und Design weitgehend Fortran) neue Dialekte und Implementierungen auftauchen. So erschien kürzlich eine mit Microsoft .NET kompatible Implementierung von Cobol, was wahrscheinlich die Einführung einiger Funktionen einer objektorientierten Sprache in die Sprache erforderte.

Im Jahr 1964 entwickelte derselbe IBM-Konzern die Sprache PL/1, die Cobol und Fortran in den meisten Anwendungen ersetzen sollte. Die Sprache verfügte über einen außergewöhnlichen Reichtum an syntaktischen Strukturen. Es führte erstmals Ausnahmebehandlung und Parallelitätsunterstützung ein. Es ist zu beachten, dass die syntaktische Struktur der Sprache äußerst komplex war. Leerzeichen wurden bereits als syntaktische Trennzeichen verwendet, aber Stichworte waren nicht reserviert. Insbesondere, nächste Zeile- Dies ist ein völlig normaler Operator in PL/1: IF ELSE=THEN THEN THEN; Sonst sonst

Aufgrund dieser Funktionen war die Entwicklung eines Compilers für PL/1 äußerst schwierig. Die Sprache wurde außerhalb der IBM-Welt nie populär.

6. GRUNDLAGEN

Im Jahr 1963 wurde am Dartmouth College die Programmiersprache BASIC (Beginners’ All-Purpose Symbolic Instruction Code) entwickelt. Die Sprache wurde in erster Linie als Lehrmittel und als erste zu erlernende Programmiersprache konzipiert. Es sollte einfach zu interpretieren und zu kompilieren sein. Man muss sagen, dass BASIC wirklich die Sprache geworden ist, in der man programmieren lernt (zumindest war dies vor ein paar Jahren der Fall; jetzt wird diese Rolle von Pascal übernommen). Es wurden mehrere leistungsstarke Implementierungen von BASIC erstellt, die die neuesten Programmierkonzepte unterstützen (Microsoft Visual Basic ist das beste Beispiel).

7. Algol

1960 entwickelte ein Team um Peter Naur die Programmiersprache Algol. Aus dieser Sprache entstand eine ganze Familie Algol-ähnlicher Sprachen (der wichtigste Vertreter ist Pascal). Im Jahr 1968 erschien es eine neue Version Sprache. Sie fand es nicht so breit praktische Anwendung, wie die erste Version, war aber in Theoretikerkreisen sehr beliebt. Die Sprache war sehr interessant, da sie zu dieser Zeit viele einzigartige Merkmale aufwies.

8. Weitere Entwicklung Programmiersprachen

An dieser Stelle möchte ich lieber innehalten und einige Bemerkungen machen. Die Entstehung jeder der oben genannten Sprachen (mit der möglichen Ausnahme von Algol) war auf bestimmte praktische Anforderungen zurückzuführen. Diese Sprachen dienten als Grundlage für spätere Entwicklungen. Sie repräsentieren alle das gleiche Programmierparadigma. Die folgenden Sprachen gingen in ihrer Entwicklung deutlich weiter, hin zu tieferer Abstraktion.

Ich werde Informationen über spätere Sprachen in Form von Beschreibungen von Sprachfamilien präsentieren. Dadurch können wir die Beziehungen zwischen einzelnen Sprachen besser nachvollziehen.

9. Pascal-ähnliche Sprachen

Die Sprache wurde 1970 von Niklaus Wirth entwickelt Pascal-Programmierung. Die Sprache ist insofern bemerkenswert, als sie die erste weit verbreitete Sprache für strukturierte Programmierung ist (die erste war streng genommen Algol, wurde aber nicht so weit verbreitet). Zum ersten Mal spielt der unbedingte Sprungoperator keine grundlegende Rolle mehr bei der Steuerung der Ausführungsreihenfolge von Anweisungen. Diese Sprache führte auch eine strenge Typprüfung ein, die es ermöglichte, viele Fehler bereits in der Kompilierungsphase zu identifizieren.

Ein negatives Merkmal der Sprache war das Fehlen von Werkzeugen zur Aufteilung eines Programms in Module. Wirth erkannte dies und entwickelte die Modula-2-Sprache (1978), in der die Idee eines Moduls zu einem der Schlüsselkonzepte der Sprache wurde. 1988 erschien Modula-3, das objektorientierte Funktionen hinzufügte. Die logische Fortsetzung von Pascal und Modula sind die Sprachen Oberon und Oberon-2. Sie zeichnen sich durch eine Tendenz zur Objekt- und Komponentenorientierung aus.

10. C-ähnliche Sprachen

1972 entwickelten Kernighan und Ritchie die Programmiersprache C. Sie wurde als Sprache für die Entwicklung des UNIX-Betriebssystems entwickelt. C wird oft als „portabler Assembler“ bezeichnet, was bedeutet, dass Sie mit Daten fast so effizient wie eine Assemblersprache arbeiten können und gleichzeitig strukturierte Kontrollkonstrukte und Abstraktionen auf hoher Ebene (Strukturen und Arrays) bereitstellen. Dies ist der Grund für seine bis heute enorme Popularität. Und genau das ist seine Achillesferse. Der C-Compiler verfügt über sehr wenig Typkontrolle, sodass es sehr einfach ist, ein Programm zu schreiben, das völlig korrekt aussieht, aber logisch fehlerhaft ist.

Im Jahr 1986 erstellte Bjarne Stroustrup die erste Version der C++-Sprache, indem er der C-Sprache objektorientierte Funktionen aus Simula (siehe unten) hinzufügte und einige Fehler und Fehlentscheidungen der Sprache korrigierte. C++ wird bis heute immer weiter verbessert; 1998 wurde eine neue (dritte) Version des Standards veröffentlicht, die einige recht bedeutende Änderungen enthielt. Die Sprache ist zur Grundlage für die Entwicklung moderner großer und komplexer Projekte geworden. Er hat allerdings auch schwache Seiten, die sich aus Effizienzanforderungen ergeben.

1995 wurde die Sun Microsystems Corporation von Ken Arnold und James Gosling gegründet. Java-Sprache. Es erbte die Syntax von C und C++ und blieb von einigen der unangenehmen Funktionen des Letzteren verschont. Eine Besonderheit der Sprache ist die Kompilierung einer bestimmten abstrakten Maschine in Code, für den dann ein Emulator (Java Virtual Machine) geschrieben wird echte Systeme. Darüber hinaus verfügt Java nicht über Zeiger oder Mehrfachvererbung, was die Zuverlässigkeit der Programmierung erheblich erhöht.

In den Jahren 1999–2000 entwickelte Microsoft die Sprache C#. Es ist Java ziemlich ähnlich (und war als Alternative zu letzterem gedacht), weist aber auch Besonderheiten auf. Konzentriert sich hauptsächlich auf die Entwicklung von mehrkomponentigen Internetanwendungen.

11. Ada und Ada 95 Sprachen

1983 wurde unter der Schirmherrschaft des US-Verteidigungsministeriums die Ada-Sprache geschaffen. Das Besondere an der Sprache ist, dass bereits in der Kompilierungsphase viele Fehler erkannt werden können. Darüber hinaus werden viele Aspekte der Programmierung unterstützt, die oft dem Betriebssystem überlassen werden (Parallelität, Ausnahmebehandlung). 1995 wurde der Sprachstandard Ada 95 übernommen, der sich weiterentwickelt vorherige Version, Objektorientierung hinzugefügt und einige Ungenauigkeiten korrigiert. Beide Sprachen werden außerhalb von Militär- und anderen Großprojekten (Luftfahrt, Schienenverkehr) kaum verwendet. Der Hauptgrund ist die Schwierigkeit, die Sprache zu beherrschen und ihre ziemlich umständliche Syntax (viel umständlicher als Pascal).

12. Datenverarbeitungssprachen

Alle oben genannten Sprachen sind Allzwecksprachen in dem Sinne, dass sie nicht auf die Verwendung bestimmter Datenstrukturen oder für die Verwendung in bestimmten Bereichen ausgerichtet oder optimiert sind. Es wurde eine große Anzahl von Sprachen entwickelt, die auf ziemlich spezifische Anwendungen abzielen. Drunter ist Kurze Review solche Sprachen.

Im Jahr 1957 wurde versucht, eine Sprache zur Beschreibung der mathematischen Datenverarbeitung zu entwickeln. Die Sprache wurde APL (Application Programming Language) genannt. Seine Besonderheit war die Verwendung mathematischer Symbole (was die Verwendung auf Textterminals erschwerte; das Erscheinungsbild grafische Oberflächen hat dieses Problem beseitigt) und eine sehr leistungsfähige Syntax, die es ermöglichte, viele nicht triviale Operationen direkt an komplexen Objekten auszuführen, ohne sie in Komponenten zerlegen zu müssen. Eine weitverbreitete Verwendung wurde, wie bereits erwähnt, durch die Verwendung nicht standardmäßiger Symbole als Elemente der Syntax verhindert.

14. Snobol und Icon

1962 erschien die Snobol-Sprache (und 1974 ihr Nachfolger Icon), die für die String-Verarbeitung konzipiert war. Die Syntax von Icon erinnert gleichzeitig an C und Pascal. Der Unterschied liegt im Vorhandensein leistungsstarker integrierter Funktionen für die Arbeit mit Zeichenfolgen und der speziellen Semantik, die diesen Funktionen zugeordnet ist. Das moderne Analogon von Icon und Snobol ist Perl, eine String- und Textverarbeitungssprache, die einige objektorientierte Funktionen hinzufügt. Sie gilt als eine sehr praktische Sprache, es mangelt ihr jedoch an Eleganz.

15.SETL

1969 wurde die SETL-Sprache geschaffen – eine Sprache zur Beschreibung von Operationen auf Mengen. Die Hauptdatenstruktur in der Sprache ist eine Menge, und die Operationen ähneln mathematischen Operationen für Mengen. Nützlich beim Schreiben von Programmen, die mit komplexen abstrakten Objekten arbeiten.

16. Lisp und ähnliche Sprachen

1958 erschien die Sprache Lisp – eine Sprache zur Verarbeitung von Listen. Es ist in Systemen der künstlichen Intelligenz weit verbreitet. Hat mehrere Nachkommen: Planner (1967), Scheme (1975), Common Lisp (1984). Viele seiner Eigenschaften wurden vererbt moderne Sprachen funktionale Programmierung.

17. Skriptsprachen

IN In letzter Zeit Durch die Entwicklung der Internettechnologien, den weiten Einsatz von Hochleistungsrechnern und eine Reihe weiterer Faktoren haben sich sogenannte Skriptsprachen verbreitet. Diese Sprachen waren zunächst auf den Einsatz als interne Kontrollsprachen in komplexen Systemen aller Art ausgerichtet. Viele von ihnen haben jedoch ihren ursprünglichen Anwendungsbereich überschritten und werden heute in ganz anderen Bereichen eingesetzt. Die charakteristischen Merkmale dieser Sprachen sind erstens ihre Interpretierbarkeit (eine Kompilierung ist entweder unmöglich oder unerwünscht), zweitens die Einfachheit der Syntax und drittens die einfache Erweiterbarkeit. Somit sind sie ideal für den häufigen Gebrauch geeignet veränderbare Programme, Sehr kleine Programme oder in Fällen, in denen die Ausführung von Sprachoperatoren Zeit in Anspruch nimmt, die mit der Zeit ihrer Analyse nicht zu vergleichen ist. Es wurde eine ziemlich große Anzahl solcher Sprachen erstellt; wir werden nur die wichtigsten und am häufigsten verwendeten auflisten.

18. JavaScript

Die Sprache wurde von Netscape Communications als Sprache zur Beschreibung des komplexen Verhaltens von Webseiten entwickelt. Ursprünglich hieß es LiveScript, der Grund für die Namensänderung waren Marketingüberlegungen. Wird vom Browser interpretiert, wenn die Webseite gerendert wird. Die Syntax ähnelt Java und (entfernt) C/C++. Es verfügt über die Fähigkeit, die integrierte Objektfunktionalität des Browsers zu nutzen, ist jedoch keine wirklich objektorientierte Sprache.

19. VBScript

Die Sprache wurde von der Microsoft Corporation größtenteils als Alternative zu JavaScript entwickelt. Hat einen ähnlichen Umfang. Syntaktisch ähnlich zur Visual Basic-Sprache (und ist eine verkürzte Version der letzteren). Genau wie JacaScript wird es beim Anzeigen von Webseiten vom Browser ausgeführt und weist den gleichen Grad an Objektorientierung auf.

20. Perl

Die Sprache wurde geschaffen, um zu helfen Systemadministrator Unix-Betriebssystem zur Verarbeitung verschiedener Textarten und Hervorhebungen notwendige Informationen. Es hat sich zu einem leistungsstarken Werkzeug für die Arbeit mit Texten entwickelt. Es ist eine interpretierte Sprache und wird in fast allen Sprachen implementiert bestehende Plattformen. Es wird in der Textverarbeitung sowie zur dynamischen Generierung von Webseiten auf Webservern eingesetzt.

21.Python

Eine interpretierte objektorientierte Programmiersprache. Es ähnelt in Struktur und Umfang Perl, ist jedoch weniger verbreitet und strenger und logischer. Für die meisten vorhandenen Plattformen gibt es Implementierungen.

22. Objektorientierte Sprachen

Der objektorientierte Ansatz, der den strukturellen Ansatz ersetzte, erschien nicht zuerst in C++, wie manche glauben. Es gibt eine ganze Reihe rein objektorientierter Sprachen, ohne Informationen darüber wäre unsere Rezension unvollständig.

23. Simula

Die erste objektorientierte Sprache war Simula (1967). Diese Sprache war für die Modellierung verschiedener Objekte und Prozesse gedacht und enthielt objektorientierte Funktionen, die genau die Eigenschaften von Modellobjekten beschreiben sollten.

24. Smalltalk

Die objektorientierte Programmierung wurde durch die 1972 entwickelte Sprache Smalltalk populär. Die Sprache war für die Gestaltung komplexer grafischer Oberflächen gedacht und war die erste wirklich objektorientierte Sprache. Dabei sind Klassen und Objekte die einzigen Programmierkonstrukte. Der große Nachteil von Smalltalk ist der große Speicherbedarf schlechte Leistung empfangene Programme. Dies ist auf die nicht sehr erfolgreiche Implementierung objektorientierter Funktionen zurückzuführen. Die Beliebtheit der Sprachen C++ und Ada 95 ist gerade auf die Tatsache zurückzuführen, dass die Objektorientierung ohne nennenswerte Leistungseinbußen implementiert wird.

25. Eiffel

Es gibt eine Sprache mit einer sehr guten Implementierung der Objektorientierung, die kein Überbau einer anderen Sprache ist. Dies ist die Sprache von Eiffel (1986). Da es sich um eine rein objektorientierte Programmiersprache handelt, verbessert sie außerdem die Programmzuverlässigkeit durch die Verwendung von „Steueranweisungen“.

26. Parallele Programmiersprachen

Mehrheitlich Computerarchitekturen und Programmiersprachen konzentrieren sich auf die sequentielle Ausführung von Programmanweisungen. Derzeit gibt es jedoch Software- und Hardwaresysteme, die es ermöglichen, die parallele Ausführung verschiedener Teile desselben Rechenprozesses zu organisieren. Um solche Systeme zu programmieren, ist besondere Unterstützung durch Programmierwerkzeuge, insbesondere Programmiersprachen, erforderlich. Einige Allzwecksprachen enthalten Elemente der Parallelitätsunterstützung, aber die Programmierung wirklich paralleler Systeme erfordert manchmal spezielle Techniken.

27. Occam-Sprache

Die Occam-Sprache wurde 1982 erstellt und ist für die Programmierung von Transputern – verteilten Multiprozessor-Datenverarbeitungssystemen – gedacht. Es beschreibt das Zusammenspiel paralleler Prozesse in Form von Kanälen – Möglichkeiten der Informationsübertragung von einem Prozess zum anderen. Beachten wir ein Merkmal der Syntax der Shccam-Sprache: Darin sind die sequentiellen und parallelen Ausführungsreihenfolgen der Operatoren gleich und müssen explizit mit den Schlüsselwörtern PAR und SEQ angegeben werden.

28. Linda Parallel-Computing-Modell

1985 wurde das Linda-Parallel-Computing-Modell vorgeschlagen. Seine Hauptaufgabe besteht darin, die Interaktion zwischen parallel laufenden Prozessen zu organisieren. Dies wird durch die Verwendung eines globalen Tupelraums erreicht. Ein Prozess kann dort ein Tupel von Daten platzieren (also eine Sammlung mehrerer, möglicherweise heterogener Daten), und ein anderer Prozess kann darauf warten, dass ein bestimmtes Tupel im Tupelbereich erscheint, und nach seinem Erscheinen das Tupel lesen und möglicherweise anschließend löschen. Beachten Sie, dass ein Prozess beispielsweise ein Tupel in einem Bereich platzieren und beenden kann und ein anderer Prozess dieses Tupel einige Zeit später verwenden kann. Dadurch wird die Möglichkeit einer asynchronen Interaktion gewährleistet. Selbstverständlich lässt sich mit einem solchen Modell auch eine synchrone Interaktion simulieren. Linda ist ein Parallel-Computing-Modell und kann zu jeder Programmiersprache hinzugefügt werden. Es gibt recht effiziente Implementierungen von Linda, die das Problem einer globalen Tupelregion mit potenziell unbegrenztem Speicher umgehen.

29. Nicht-imperative Sprachen

Alle zuvor besprochenen Sprachen haben eines gemeinsam: Sie sind Imperativ. Dies bedeutet, dass Programme auf ihnen letztlich repräsentieren Schritt-für-Schritt-Beschreibung dieses oder jenes Problem lösen. Sie können versuchen, nur die Problemstellung zu beschreiben und den Compiler mit der Lösung des Problems beauftragen. Es gibt zwei Hauptansätze, die diese Idee entwickeln: funktionale und logische Programmierung.

30. Funktionale Sprachen

Die Grundidee der funktionalen Programmierung ist die Darstellung eines Programms als mathematische Funktionen (d. h. Funktionen, deren Bedeutung nur durch ihre Argumente und nicht durch den Ausführungskontext bestimmt wird). Der Zuweisungsoperator wird in solchen Sprachen nicht verwendet (oder zumindest wird von seiner Verwendung abgeraten). Zwingende Möglichkeiten sind in der Regel vorhanden, ihre Nutzung unterliegt jedoch erheblichen Einschränkungen. Es gibt Sprachen mit fauler und energischer Semantik. Der Unterschied besteht grob gesagt darin, dass in Sprachen mit energetischer Semantik die Berechnung an der gleichen Stelle erfolgt, an der sie deklariert wird, während im Fall der Lazy-Semantik die Berechnung nur dann durchgeführt wird, wenn sie tatsächlich benötigt wird. Die ersteren Sprachen verfügen über eine effizientere Implementierung, während die letzteren über eine bessere Semantik verfügen.

Unter den Sprachen mit energetischer Semantik erwähnen wir ML und seine beiden modernen Dialekte – Standard ML (SML) und CaML. Letzteres hat einen objektorientierten Nachkommen – Objective CaML (O'CaML).

Unter den Sprachen mit Lazy-Semantik sind Haskell und sein einfacherer Dialekt Clean die beiden häufigsten.

Weitere Informationen zu funktionalen Sprachen finden Sie HIER:

31. Logische Programmiersprachen

Programme in logischen Programmiersprachen werden als mathematische Logikformeln ausgedrückt, und der Compiler versucht, daraus Konsequenzen abzuleiten.

Der Vorfahre der meisten logischen Programmiersprachen ist Prolog (1971). Es hat eine Reihe von Nachkommen – Parlog (1983, Schwerpunkt auf parallelem Rechnen), Delta Prolog usw. Die Logikprogrammierung ist wie die funktionale Programmierung ein separater Bereich der Programmierung, und für detailliertere Informationen verweisen wir den Leser auf Fachliteratur .

32. Anstelle einer Schlussfolgerung

Lassen Sie mich einige allgemeine Trends in der Entwicklung von Programmiersprachen hervorheben. Der aufmerksame Leser hat wahrscheinlich schon vor langer Zeit erraten, was ich sagen werde. Sprachen entwickeln sich zu immer größerer Abstraktion. Und damit geht ein Effizienzabfall einher. Frage: Lohnt sich Abstraktion? Antwort: Es lohnt sich. Es lohnt sich, denn mit der Erhöhung des Abstraktionsgrades steigt auch die Programmierzuverlässigkeit. Eine geringe Effizienz kann durch die Schaffung von mehr bekämpft werden schnelle Computer. Wenn der Speicherbedarf zu hoch ist, können Sie die Speichergröße erhöhen. Das kostet natürlich Zeit und Geld, ist aber lösbar. Doch es gibt nur einen Weg, mit Fehlern in Programmen umzugehen: Sie müssen korrigiert werden. Oder noch besser: Tun Sie es nicht. Besser noch, machen Sie es so schwierig wie möglich, sie zu begehen. Und genau darauf zielt die gesamte Forschung im Bereich der Programmiersprachen ab. Und man muss sich mit Effizienzverlusten abfinden.

Der Zweck dieser Rezension bestand darin, dem Leser einen Eindruck von der Vielfalt der vorhandenen Programmiersprachen zu vermitteln. Unter Programmierern herrscht häufig die Meinung über die „universelle Anwendbarkeit“ einer bestimmten Sprache (C, C++, Pascal usw.). Diese Meinung entsteht aus mehreren Gründen: Informationsmangel, Gewohnheit, Trägheit des Denkens. Ich habe versucht, den ersten Faktor leicht zu kompensieren. Im Übrigen kann ich nur sagen, dass ein echter Profi ständig danach streben muss, seine beruflichen Qualifikationen zu verbessern. Und dafür müssen Sie keine Angst vor Experimenten haben. Was also, wenn alle um Sie herum in C/C++/VB/Pascal/Perl/Java/… schreiben (ggf. unterstreichen)? Warum nicht etwas Neues ausprobieren? Was ist, wenn sich herausstellt, dass dies effektiver ist? Bevor Sie mit der Verwendung einer neuen Sprache beginnen, müssen Sie natürlich alle ihre Funktionen sorgfältig studieren, einschließlich der Verfügbarkeit einer effektiven Implementierung, der Fähigkeit zur Interaktion mit vorhandenen Modulen usw., und erst dann eine Entscheidung treffen. Natürlich besteht immer die Gefahr, den falschen Weg zu gehen, aber... Nur wer nichts tut, macht keine Fehler.

Und weiter. Ich habe Diskussionen wie „Sprache A ist besser als Sprache B“ gehört und manchmal daran teilgenommen. Ich hoffe, dass viele nach der Lektüre dieser Rezension von der Sinnlosigkeit solcher Streitigkeiten überzeugt sein werden. Es können maximal die Vorteile einer Sprache gegenüber einer anderen bei der Lösung eines bestimmten Problems unter bestimmten Bedingungen diskutiert werden. Hier gibt es manchmal tatsächlich etwas zu streiten. Und die Lösung liegt manchmal gar nicht auf der Hand. Allerdings ist es offensichtliche Dummheit, „im Allgemeinen“ zu argumentieren.

Dieser Artikel war als Antwort an diejenigen gedacht, die rufen: „Sprache X MUSS STERBEN“. Ich hoffe, dass die Antwort völlig ausreichend und überzeugend ausgefallen ist. Ich hoffe auch, dass der Artikel neben der Polemik auch einen pädagogischen Wert hat.

Material aus Wikipedia

Programmiersprache- ein formales Zeichensystem zur Aufzeichnung von Computerprogrammen. Eine Programmiersprache definiert eine Reihe lexikalischer, syntaktischer und semantischer Regeln, die definieren Aussehen Programme und Aktionen, die der Darsteller (normalerweise ein Computer) unter seiner Kontrolle ausführt.

Zur gleichen Zeit, in den 1940er Jahren, erschienen elektrische Digitalrechner und es wurde eine Sprache entwickelt, die als erste höhere Programmiersprache für Computer gelten kann – „Plankalkül“, erstellt vom deutschen Ingenieur K. Zuse zwischen 1945 und 1945.

Ab Mitte der 1950er Jahre tauchten Sprachen der dritten Generation wie Fortran, Lisp und Cobol auf. Programmiersprachen dieser Art sind abstrakter (sie werden auch „Hochsprachen“ genannt) und universeller und weisen keine strikte Abhängigkeit von einer bestimmten Hardwareplattform und den darauf verwendeten Maschinenanweisungen auf. Ein Programm in einer Hochsprache kann (zumindest theoretisch; in der Praxis gibt es in der Regel mehrere spezifische Versionen oder Dialekte der Sprachimplementierung) auf jedem Computer ausgeführt werden, der über einen Übersetzer für diese Sprache verfügt (ein Werkzeug, das die Sprache übersetzt). (Programm in Maschinensprache umwandeln und anschließend vom Prozessor ausführen lassen).

Aktualisierte Versionen der aufgeführten Sprachen werden noch in der Entwicklung verwendet. Software, und jeder von ihnen hatte einen gewissen Einfluss auf die spätere Entwicklung von Programmiersprachen. Gleichzeitig erschien Ende der 1950er Jahre Algol, das auch als Grundlage für eine Reihe weiterer Entwicklungen auf diesem Gebiet diente. Es ist zu beachten, dass Format und Verwendung früher Programmiersprachen stark von Schnittstellenbeschränkungen beeinflusst wurden.

Verbesserung

Visuelle (grafische) Programmiersprachen werden zu einem wichtigen Arbeitsgebiet, in dem der Prozess des „Schreibens“ eines Programms als Text durch den Prozess des „Zeichnens“ (Konstruieren eines Programms in Form eines Diagramms) ersetzt wird. auf einem Computerbildschirm. Visuelle Sprachen sorgen für Klarheit und eine bessere menschliche Wahrnehmung der Programmlogik.

Standardisierung von Programmiersprachen

Für viele weit verbreitete Programmiersprachen wurden internationale Standards erstellt. Spezielle Organisationen aktualisieren und veröffentlichen regelmäßig Spezifikationen und formale Definitionen der entsprechenden Sprache. Im Rahmen solcher Gremien wird die Entwicklung und Modernisierung von Programmiersprachen fortgesetzt und Fragen der Erweiterung oder Unterstützung bestehender und neuer Sprachkonstrukte geklärt.

Datentypen

Moderne digitale Computer sind binär und speichern Daten im Binärcode (obwohl auch Implementierungen in anderen Zahlensystemen möglich sind). Diese Daten spiegeln in der Regel reale Informationen (Namen, Bankkonten, Maße usw.) wider, die übergeordnete Konzepte darstellen.

Das spezielle System, nach dem Daten in einem Programm organisiert sind, ist Typensystem Programmiersprache; Die Entwicklung und Untersuchung von Typensystemen wird als Typentheorie bezeichnet. Sprachen können in Sprachen mit Sprachen unterteilt werden statisches Tippen Und dynamisches Tippen, und auch typlose Sprachen(Zum Beispiel, Weiter).

Statisch typisierte Sprachen können mit weiter in Sprachen unterteilt werden Pflichtdeklaration, wobei jede Variablen- und Funktionsdeklaration eine erforderliche Typdeklaration und Sprachen mit hat abgeleitete Typen. Manchmal werden dynamisch typisierte Sprachen aufgerufen latent getippt.

Datenstrukturen

Typsysteme in Hochsprachen ermöglichen die Definition komplexer, zusammengesetzter Typen, sogenannter Datenstrukturen. Typischerweise werden Strukturdatentypen als kartesisches Produkt aus Basistypen (atomaren Typen) und zuvor definierten zusammengesetzten Typen gebildet.

Grundlegende Datenstrukturen (Listen, Warteschlangen, Hash-Tabellen, Binärbäume und Paare) werden in Hochsprachen häufig durch spezielle syntaktische Konstrukte dargestellt. Solche Daten werden automatisch strukturiert.

Semantik von Programmiersprachen

Es gibt verschiedene Ansätze zur Definition der Semantik von Programmiersprachen.

Die am weitesten verbreiteten Varianten sind die folgenden drei: operativ, abgeleitet (axiomatisch) und denotational (mathematisch).

  • Bei der Beschreibung der Semantik innerhalb betriebsbereit Bei diesem Ansatz wird die Ausführung von Programmiersprachenkonstrukten normalerweise mithilfe eines imaginären (abstrakten) Computers interpretiert.
  • Die axiomatische Semantik beschreibt die Konsequenzen der Ausführung von Sprachkonstrukten mithilfe der Sprache der Logik und der Angabe von Vor- und Nachbedingungen.
  • Dental Die Semantik operiert mit für die Mathematik typischen Konzepten – Mengen, Korrespondenzen sowie Urteilen, Aussagen etc.

Programmierparadigma

Eine Programmiersprache wird in Übereinstimmung mit dem einen oder anderen grundlegenden Computermodell und Programmierparadigma erstellt.

Obwohl sich die meisten Sprachen auf das imperative Rechenmodell konzentrieren, das durch die Computerarchitektur von Neumann definiert wird, gibt es auch andere Ansätze. Wir können Sprachen mit einem Stack-Computing-Modell (Forth, Factor, PostScript usw.) sowie funktionalen Sprachen (Lisp, Haskell, REFAL, basierend auf dem vom sowjetischen Mathematiker A. A. Markov Jr. usw. eingeführten Computermodell) erwähnen. ) und Logikprogrammierung (Prolog).

Derzeit werden auch deklarative und visuelle Programmiersprachen sowie Methoden und Werkzeuge zur Entwicklung problemspezifischer Sprachen aktiv entwickelt (siehe Sprachorientierte Programmierung).

Möglichkeiten zur Implementierung von Sprachen

Programmiersprachen können kompiliert, interpretiert und eingebettet implementiert werden.

Ein Programm in einer kompilierten Sprache wird mithilfe eines Compilers (ein spezielles Programm) in Maschinencode (einen Befehlssatz) für einen bestimmten Prozessortyp umgewandelt (kompiliert) und dann in ein ausführbares Modul zusammengestellt, das zur Ausführung gestartet werden kann separates Programm. Mit anderen Worten übersetzt der Compiler den Programmquellcode aus einer höheren Programmiersprache in Binärcodes von Prozessoranweisungen.

Wenn ein Programm in einer interpretierten Sprache geschrieben ist, führt (interpretiert) der Interpreter den Quelltext direkt aus, ohne ihn auszuführen vorläufige Übersetzung. In diesem Fall bleibt das Programm in der Originalsprache und kann nicht ohne Dolmetscher gestartet werden. Der Computerprozessor kann in dieser Hinsicht als Interpreter für Maschinencode bezeichnet werden.

Die Einteilung in kompilierte und interpretierte Sprachen ist bedingt. Sie können also für jede traditionell kompilierte Sprache wie Pascal einen Interpreter schreiben. Darüber hinaus führen die meisten modernen „reinen“ Interpreter Sprachkonstrukte nicht direkt aus, sondern kompilieren sie in eine Zwischendarstellung auf hoher Ebene (z. B. mit Variablendereferenzierung und Makroerweiterung).

Ein Compiler kann für jede interpretierte Sprache erstellt werden – beispielsweise kann die Sprache Lisp, die nativ interpretiert wird, ohne Einschränkungen kompiliert werden. Während der Programmausführung generierter Code kann auch während der Ausführung dynamisch kompiliert werden.

Im Allgemeinen laufen kompilierte Programme schneller und benötigen keine zusätzliche Programme, da sie bereits übersetzt wurden Maschinensprache. Gleichzeitig muss der Programmtext jedes Mal neu kompiliert werden, wenn er sich ändert, was den Entwicklungsprozess verlangsamt. Darüber hinaus kann das kompilierte Programm nur auf demselben Computertyp und in der Regel unter demselben Betriebssystem ausgeführt werden, für das der Compiler entwickelt wurde. Um eine ausführbare Datei für einen anderen Maschinentyp zu erstellen, ist eine neue Kompilierung erforderlich.

Interpretierte Sprachen haben einige Besonderheiten Zusatzfunktionen(siehe oben), außerdem können Programme darauf sofort nach der Änderung gestartet werden, was die Entwicklung erleichtert. Oft kann ein Programm in einer interpretierten Sprache ausgeführt werden verschiedene Typen Maschinen und Betriebssysteme ohne zusätzlichen Aufwand.

Allerdings laufen interpretierte Programme deutlich langsamer als kompilierte und können ohne Interpreterprogramm nicht ausgeführt werden.

Dieser Ansatz ermöglicht es Ihnen gewissermaßen, die Vorteile von Interpretern und Compilern zu nutzen. Es sollte erwähnt werden, dass es Sprachen gibt, die sowohl einen Interpreter als auch einen Compiler (Forth) haben.

Programmiersprachen auf niedrigem Niveau

Die ersten Computer mussten mit binären Maschinencodes programmiert werden. Allerdings ist die Programmierung auf diese Weise eine recht zeitaufwändige und schwierige Aufgabe. Um diese Aufgabe zu vereinfachen, tauchten Programmiersprachen auf niedriges Niveau, die es ermöglichte, Maschinenbefehle in einer für den Menschen verständlichen Form anzugeben. Um sie umzuwandeln Binärcode wurden erschaffen spezielle Programme- Übersetzer.

Ein Beispiel für eine Low-Level-Sprache ist die Assemblersprache. Low-Level-Sprachen konzentrieren sich auf einen bestimmten Prozessortyp und berücksichtigen dessen Funktionen. Um ein Assemblerprogramm auf eine andere Hardwareplattform zu portieren, muss es also fast vollständig neu geschrieben werden. Es gibt gewisse Unterschiede in der Syntax von Programmen für verschiedene Compiler. Zentralprozessoren für Computer von AMD und Intel sind zwar praktisch kompatibel und unterscheiden sich nur in einigen spezifischen Befehlen. Aber spezielle Prozessoren für andere Geräte, zum Beispiel Grafikkarten und Telefone, weisen erhebliche Unterschiede auf.

Low-Level-Sprachen werden normalerweise verwendet, um klein zu schreiben Systemprogramme, Gerätetreiber, Schnittstellenmodule mit nicht standardmäßiger Ausstattung, Programmierung spezialisierter Mikroprozessoren, wenn die wichtigsten Anforderungen Kompaktheit, Geschwindigkeit und die Möglichkeit des direkten Zugriffs auf Hardwareressourcen sind.

Programmiersprachen auf hohem Niveau

Die Merkmale spezifischer Computerarchitekturen werden nicht berücksichtigt, sodass die erstellten Anwendungen problemlos von Computer zu Computer übertragen werden können. In den meisten Fällen reicht es aus, das Programm einfach für eine bestimmte Computerarchitektur neu zu kompilieren und Betriebssystem. Die Entwicklung von Programmen in solchen Sprachen ist viel einfacher und es werden weniger Fehler gemacht. Die Programmentwicklungszeit wird deutlich verkürzt, was besonders bei der Arbeit an großen Softwareprojekten wichtig ist.

Unter Entwicklern herrscht mittlerweile die Meinung vor, dass Programmiersprachen, die direkten Zugriff auf Speicher und Register haben oder über Assembler-Einfügungen verfügen, als Programmiersprachen mit niedrigem Abstraktionsgrad gelten sollten. Daher gelten die meisten Sprachen, die vor dem Jahr 2000 als Hochsprachen galten, nicht mehr als solche.

Der Nachteil einiger Hochsprachen besteht darin, dass Programme im Vergleich zu Programmen in Niedrigsprachen groß sind. Andererseits kann bei algorithmisch und strukturell komplexen Programmen bei Verwendung der Superkompilierung der Vorteil auf der Seite der Hochsprachen liegen. Der Text von Programmen in einer Hochsprache ist kleiner, in Bytes ausgedrückt ist der ursprünglich in Assembler geschriebene Code jedoch kompakter. Daher werden hauptsächlich Hochsprachen verwendet, um Software für Computer und Geräte zu entwickeln großes Volumen Erinnerung. Und verschiedene Subtypen von Assembler werden zum Programmieren anderer Geräte verwendet, bei denen die Größe des Programms von entscheidender Bedeutung ist.

Verwendete Symbole

Moderne Programmiersprachen sind auf die Verwendung von ASCII ausgelegt, also auf Zugänglichkeit für alle Grafik ASCII-Zeichen sind eine notwendige und ausreichende Voraussetzung für das Schreiben jeglicher Sprachkonstrukte. Manager ASCII-Zeichen werden in begrenztem Umfang verwendet: Es sind nur Wagenrücklauf CR, Zeilenvorschub LF und horizontaler Tabulator HT (manchmal auch vertikaler Tabulator VT und Seitenvorschub FF) zulässig.

Frühe Sprachen, die im Zeitalter der 6-Bit-Zeichen aufkamen, verwendeten einen begrenzteren Satz. Das Fortran-Alphabet hat beispielsweise 49 Zeichen (einschließlich Leerzeichen): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ " :

Eine bemerkenswerte Ausnahme ist die APL-Sprache, die viele Sonderzeichen verwendet.

Die Verwendung von Nicht-ASCII-Zeichen (z. B. KOI8-R-Zeichen oder Unicode-Zeichen) hängt von der Implementierung ab: Manchmal sind sie nur in Kommentaren und Zeichen-/String-Konstanten und manchmal in Bezeichnern zulässig. In der UdSSR gab es Sprachen, in denen alle Schlüsselwörter in russischen Buchstaben geschrieben waren, aber solche Sprachen erfreuten sich nicht großer Beliebtheit (mit Ausnahme der integrierten Programmiersprache 1C:Enterprise).

Die Erweiterung des verwendeten Symbolsatzes wird durch die Tatsache eingeschränkt, dass viele Softwareentwicklungsprojekte international sind. Es wäre sehr schwierig, mit Code zu arbeiten, bei dem die Namen einiger Variablen in russischen Buchstaben, andere in arabischen und wieder andere in chinesischen Schriftzeichen geschrieben sind. Gleichzeitig unterstützen Programmiersprachen der neuen Generation (Delphi 2006, Java) Unicode, um mit Textdaten arbeiten zu können.

Kategorien von Programmiersprachen

Mathematisch basierte Programmiersprachen

Dies sind Sprachen, deren Semantik ist Direkte eine Verkörperung eines bestimmten mathematischen Modells, leicht angepasst (ohne die Integrität zu verletzen), um eine praktischere Sprache für die Entwicklung realer Programme zu sein. Nur wenige Sprachen fallen in diese Kategorie, die meisten Sprachen sind mit Schwerpunkt auf der Möglichkeit einer effizienten Übersetzung auf eine Turing-Maschine konzipiert und verfügen nur über eine bestimmte Teilmenge in seiner Zusammensetzung das eine oder andere mathematische Modell verkörpern - von



Freunden erzählen