Die Grundlagen der meisten prozeduralen Sprachen sind fast gleich.
Sie bieten an:
- Skalare Datentypen: normalerweise Boolesche Werte, Ganzzahlen, Gleitkommazahlen und Zeichen
- Zusammengesetzte Datentypen: Arrays (Zeichenfolgen sind Sonderfälle) und Strukturen
- Grundlegende Codekonstrukte: Arithmetik über Skalare, Array- / Strukturzugriff, Zuweisungen
- Einfache Kontrollstrukturen: if-then, if-then-else, while für Schleifen
- Pakete von Codebausteinen: Funktionen, Prozeduren mit Parametern
- Bereiche: Bereiche, in denen Bezeichner eine bestimmte Bedeutung haben
Wenn Sie das verstehen, haben Sie ein gutes Verständnis von 90% der Sprachen auf dem Planeten. Was diese Sprachen etwas schwieriger zu verstehen macht, ist die unglaubliche Vielfalt an ungeraden Syntaxformen, mit denen die Leute dieselben grundlegenden Dinge sagen. Einige verwenden eine knappe Notation mit ungerader Interpunktion (APL ist ein Extrem). Einige verwenden viele Schlüsselwörter (COBOL ist ein hervorragender Vertreter). Das macht nicht viel aus. Was wichtig ist, ist, dass die Sprache von sich aus vollständig genug ist, um komplexe Aufgaben zu erledigen, ohne dass Sie sich die Haare ausreißen müssen. (Versuchen Sie, ernsthaften String-Hacking im Windows-DOS-Shell-Skript zu programmieren: Es ist Turing-fähig, aber in allem sehr schlecht).
Weitere interessante Verfahrenssprachen bieten
- Verschachtelte oder lexikalische Bereiche, Namespaces
- Zeiger, mit denen eine Entität auf eine andere Entität verweisen kann, mit dynamischer Speicherzuweisung
- Paketierung von verwandtem Code: Pakete, Objekte mit Methoden, Eigenschaften
- Anspruchsvollere Steuerung: Rekursion, Fortsetzungen, Schließungen
- Spezialisierte Operatoren: String- und Array-Operationen, mathematische Funktionen
Obwohl es sich technisch gesehen nicht um eine Eigenschaft der Sprache handelt, sondern um eine Eigenschaft des Ökosystems, in dem solche Sprachen leben, handelt es sich um Bibliotheken, die im Rahmen des Entwicklungswerkzeugs leicht zugänglich sind oder mit der Sprache versehen werden. Eine breite Palette von Bibliotheksfunktionen vereinfacht / beschleunigt das Schreiben von Anwendungen, weil man nicht neu erfinden muss, was die Bibliotheken tun. Java und C # gelten allgemein als gute Sprachen. Was sie jedoch wirklich nützlich macht, sind die großen Bibliotheken, die im Lieferumfang enthalten sind, und die leicht erhältlichen Erweiterungsbibliotheken.
Die Sprachen, die schwerer zu verstehen sind, sind die nicht prozeduralen:
- Rein funktionale Sprachen, ohne Zuweisungen oder Nebenwirkungen
- Logiksprachen wie Prolog, in denen symbolische Berechnung und Vereinheitlichung stattfinden
- Pattern Matching-Sprachen, in denen Sie Formen angeben, die auf das Problem abgestimmt sind, und häufig Aktionen, die durch eine Übereinstimmung ausgelöst werden
- Einschränkungssprachen, mit denen Sie Beziehungen angeben und Gleichungen automatisch lösen können
- Hardware-Beschreibungssprachen, in denen alles parallel abläuft
- Domänenspezifische Sprachen wie SQL, farbige Petri-Netze usw.
Es gibt zwei Hauptdarstellungsstile für Sprachen:
- Textbasiert, in dem Bezeichner Entitäten und Informationsflüsse implizit in Formeln codieren, die die Bezeichner zur Benennung der Entitäten verwenden (Java, APL, ...)
- Grafik, in der Entitäten als Knoten und Beziehungen zwischen Entitäten als explizite Bögen zwischen diesen Knoten gezeichnet werden (UML, Simulink, LabView)
Die grafischen Sprachen ermöglichen oftmals Textsprachen als Annotationen in Knoten und auf Bögen. Ungewöhnliche Grafiksprachen erlauben rekursiv Grafiken (mit Text :) in Knoten und auf Bögen. In sehr ungewöhnlichen Grafiksprachen können Anmerkungsdiagramme auf mit Anmerkungen versehene Diagramme verweisen.
Die meisten dieser Sprachen basieren auf einer sehr geringen Anzahl von Rechenmodellen:
- Der Lambda-Kalkül (Basis für Lisp und alle funktionalen Sprachen)
- Post-Systeme (oder Techniken zum Umschreiben von Strings / Bäumen / Graphen)
- Turingmaschinen (Zustandsänderung und Auswahl neuer Speicherzellen)
Angesichts des Fokus der meisten Industriezweige auf prozedurale Sprachen und komplexe Kontrollstrukturen sind Sie gut bedient, wenn Sie eine der interessanteren Sprachen in dieser Kategorie gut lernen, insbesondere, wenn sie eine Art von Objektorientierung enthält.
Ich kann das Lernschema sehr empfehlen, insbesondere aus einem wirklich wunderbaren Buch:
Struktur und Interpretation von Computerprogrammen . Dies beschreibt alle diese Grundkonzepte. Wenn Sie dieses Zeug kennen, werden andere Sprachen mit Ausnahme der doofen Syntax ziemlich einfach erscheinen.