Dies ist eine Liste bedeutender Programmiersprachen , gruppiert nach ihren wichtigsten Sprachattributen. Da eine Sprache mehrere Attribute besitzen kann, kann sie in mehreren Gruppen enthalten sein.

agentenorientierte Programmiersprachen

Die agentenorientierte Programmierung ermöglicht es dem Entwickler, Softwareagenten zu erstellen, zu erweitern und zu verwenden . Dabei handelt es sich um Abstraktionen von Objekten, die mit anderen Agenten kommunizieren können.

Array-Sprachen

Array-Programmiersprachen (auch Vektor- oder mehrdimensionale Programmiersprachen genannt) verallgemeinern Operationen auf Skalaren , sodass sie transparent auf Vektoren , Matrizen und höherdimensionale Arrays angewendet werden können .

Aspektorientierte Programmiersprachen

Die aspektorientierte Programmierung ermöglicht es Entwicklern, neue Funktionen, sogenannte Advice , zum Code hinzuzufügen, ohne diesen Code zu verändern. Stattdessen wird ein Pointcut verwendet , um die Advice in Codeblöcke zu implementieren.

Assemblersprachen

Assemblersprachen entsprechen direkt einer Maschinensprache (siehe unten ), sodass Maschinencode-Befehle in einer für Menschen verständlichen Form erscheinen, auch wenn keine Eins-zu-eins-Zuordnung zwischen einer einzelnen Anweisung und einem einzelnen Befehl besteht. Assemblersprachen ermöglichen Programmierern die Verwendung symbolischer Adressen, die der Assembler in absolute oder verschiebbare Adressen umwandelt. Die meisten Assembler unterstützen außerdem Makros und symbolische Konstanten .

Autorensprachen

Eine Autorensprache ist eine Programmiersprache, die für die Verwendung durch Nicht-Computerfachleute konzipiert wurde, um auf einfache Weise Tutorials, Websites und andere interaktive Computerprogramme zu erstellen.

Kommandozeilenschnittstellensprachen

Kommandozeilenschnittstellen (CLI-Sprachen) werden auch als Batch-Sprachen oder Jobsteuerungssprachen bezeichnet. Beispiele:

Kompilierte Sprachen

Dies sind Sprachen, die typischerweise von Compilern verarbeitet werden , obwohl theoretisch jede Sprache kompiliert oder interpretiert werden kann.

Konkatenative Programmiersprachen

Eine konkatenative Programmiersprache ist eine punktfreie Computerprogrammiersprache , in der alle Ausdrücke Funktionen bezeichnen und die Aneinanderreihung von Ausdrücken die Funktionskomposition darstellt .

Gleichzeitige Sprachen

Message-Passing -Sprachen bieten Sprachkonstrukte für die Parallelverarbeitung . Das vorherrschende Paradigma für Parallelverarbeitung in gängigen Sprachen wie Java ist die Shared-Memory- Parallelverarbeitung. Parallelverarbeitungssprachen, die Message Passing nutzen, wurden im Allgemeinen von Prozesskalkülen wie dem kommunikativen sequenziellen Prozessmodell (CSP) oder dem π-Kalkül inspiriert .

Constraint-Programmiersprachen

Eine Constraint- Programmiersprache ist eine deklarative Programmiersprache, in der Beziehungen zwischen Variablen als Constraints ausgedrückt werden . Die Ausführung erfolgt durch den Versuch, Werte für die Variablen zu finden, die alle deklarierten Constraints erfüllen.

Vertragssprachen

Design by Contract (oder Vertragsprogrammierung) ist Programmierung unter Verwendung definierter Vorbedingungen , Nachbedingungen und Invarianten .

Sprachen mit geschweiften Klammern

Eine geschweifte Klammersprache definiert einen Block als die Anweisungen zwischen geschweiften Klammern . Diese Syntax stammt ursprünglich aus BCPL (1966) und wurde durch C bekannt . Viele geschweifte Klammersprachen basieren auf C oder sind stark von C beeinflusst . Beispiele: {}

Dataflow-Sprachen

Datenfluss-Programmiersprachen nutzen eine (meist visuelle) Darstellung des Datenflusses, um das Programm zu spezifizieren. Sie werden häufig verwendet, um auf einzelne Ereignisse zu reagieren oder Datenströme zu verarbeiten. Zu den Datenfluss-Sprachen gehören:

Datenorientierte Sprachen

Datenorientierte Sprachen bieten leistungsstarke Möglichkeiten zum Suchen und Bearbeiten von Beziehungen, die als Entity-Relationship-Tabellen beschrieben wurden und eine Menge von Dingen anderen Mengen zuordnen. Zu den datenorientierten Sprachen gehören:

Entscheidungstabellensprachen

Entscheidungstabellen können als Hilfsmittel zur Verdeutlichung der Logik vor dem Schreiben eines Programms in jeder beliebigen Sprache verwendet werden. In den 1960er Jahren wurden jedoch eine Reihe von Sprachen entwickelt, bei denen die Hauptlogik direkt in Form einer Entscheidungstabelle ausgedrückt wird, darunter:

Deklarative Sprachen

Deklarative Sprachen drücken die Logik einer Berechnung aus, ohne deren Kontrollfluss detailliert zu beschreiben. Deklarative Programmierung steht im Gegensatz zur imperativen Programmierung , bei der der Kontrollfluss durch sequentielle Befehle (Imperative) festgelegt wird. (Rein) funktionale und logikbasierte Programmiersprachen sind ebenfalls deklarativ und bilden die wichtigsten Unterkategorien der deklarativen Sprachen. Dieser Abschnitt enthält weitere Beispiele, die nicht in diese Unterkategorien fallen.

Einbettbare Sprachen

Im Quellcode

Quellcode-Einbettungssprachen betten kleine Teile ausführbaren Codes in einen frei formulierten Text ein, häufig in eine Webseite.

Clientseitig eingebettete Sprachen sind durch die Fähigkeiten des Browsers oder des jeweiligen Clients begrenzt. Sie zielen darauf ab, Webseiten Dynamik zu verleihen, ohne dass eine erneute Kontaktaufnahme mit dem Server erforderlich ist.

Serverseitig eingebettete Sprachen sind deutlich flexibler, da sich nahezu jede Sprache in einen Server integrieren lässt. Ziel der Einbettung von serverseitigem Code in eine Webseite ist die dynamische Generierung von zusätzlichem Markup; der Code selbst verschwindet beim Ausliefern der Seite und wird durch dessen Ausgabe ersetzt.

Serverseitig

Die obigen Beispiele sind speziell für diesen Zweck gedacht. Zahlreiche weitere Sprachen, wie beispielsweise Erlang , Scala , Perl und Ruby, können angepasst werden (zum Beispiel durch die Umwandlung in Apache -Module).

Clientseite

Im Objektcode

Eine Vielzahl dynamischer Sprachen oder Skriptsprachen lässt sich in kompilierten ausführbaren Code einbetten. Dazu muss der Objektcode für den Interpreter der Sprache in die ausführbare Datei eingebunden werden. Quellcodefragmente der eingebetteten Sprache können dann als Zeichenketten an eine Auswertungsfunktion übergeben werden. Anwendungssteuerungssprachen lassen sich auf diese Weise implementieren, wenn der Quellcode vom Benutzer eingegeben wird. Sprachen mit kleinen Interpretern sind hierbei von Vorteil.

Programmiersprachen für Bildungszwecke

Programmiersprachen, die primär zum Zweck des Lehrens und Lernens von Programmierkenntnissen entwickelt wurden.

Esoterische Sprachen

Eine esoterische Programmiersprache ist eine Programmiersprache, die als Test der Grenzen des Designs von Computerprogrammiersprachen, als Machbarkeitsnachweis oder als Scherz konzipiert wurde.

Erweiterungssprachen

Erweiterungsprogrammiersprachen sind Sprachen, die in ein anderes Programm eingebettet sind und dazu dienen, dessen Funktionen in Erweiterungsskripten zu nutzen.

Sprachen der vierten Generation

Programmiersprachen der vierten Generation sind höhere Programmiersprachen, die um Datenbanksysteme herum aufgebaut sind . Sie werden im Allgemeinen in kommerziellen Umgebungen eingesetzt.

Funktionale Sprachen

Funktionale Programmiersprachen definieren Programme und Unterprogramme als mathematische Funktionen und behandeln sie als Funktionen erster Klasse. Viele sogenannte funktionale Sprachen sind „unrein“, da sie imperative Merkmale aufweisen. Viele funktionale Sprachen sind an mathematische Berechnungswerkzeuge gebunden. Zu den funktionalen Sprachen gehören:

Rein

Unrein

Hardwarebeschreibungssprachen

In der Elektronik ist eine Hardwarebeschreibungssprache (HDL) eine spezielle Computersprache, die zur Beschreibung der Struktur, des Designs und der Funktionsweise elektronischer Schaltungen, insbesondere digitaler Logikschaltungen, dient. Die beiden am weitesten verbreiteten und am besten unterstützten HDL-Varianten in der Industrie sind Verilog und VHDL . Zu den Hardwarebeschreibungssprachen gehören:

HDLs für den Entwurf analoger Schaltungen

  • Verilog-AMS (Verilog für analoge und gemischte Signale)
  • VHDL-AMS (VHDL mit Analog/Mixed-Signal-Erweiterung)

HDLs für den Entwurf digitaler Schaltungen

Imperativsprachen

Imperative Programmiersprachen können multiparadigmatisch sein und auch in anderen Klassifikationen auftreten. Hier ist eine Liste von Programmiersprachen, die dem imperativen Paradigma folgen :

Sprachen des interaktiven Modus

Bekannt als REPL – interaktive Programmiersprachen fungieren als eine Art Shell: Ausdrücke oder Anweisungen können einzeln eingegeben werden, und das Ergebnis ihrer Auswertung wird sofort angezeigt.

Gedolmetschte Sprachen

Interpretierte Sprachen sind Programmiersprachen, deren Programme mithilfe eines Interpreters direkt aus dem Quellcode ausgeführt werden können. Theoretisch kann jede Sprache kompiliert oder interpretiert werden, daher bezieht sich der Begriff „ interpretierte Sprache“ im Allgemeinen auf Sprachen, die üblicherweise interpretiert und nicht kompiliert werden.

Iterative Sprachen

Iterative Sprachen basieren auf Generatoren oder bieten diese an .

Sprachen nach Speicherverwaltungstyp

Müll gesammelte Sprachen

Die automatische Speicherbereinigung (Garbage Collection, GC) ist eine Form der automatischen Speicherverwaltung. Der Garbage Collector versucht, Speicher freizugeben, der vom Programm belegt, aber nicht mehr verwendet wird.

Sprachen mit manueller Speicherverwaltung

Sprachen mit optionaler manueller Speicherverwaltung

Einige Programmiersprachen ohne die inhärente Fähigkeit zur manuellen Speicherverwaltung, wie Cython , [ 31 ] Swift , [ c ] und Scala [ 32 ] (nur Scala Native), können Funktionen wie mallocund freeaus C über eine Foreign Function Interface importieren oder aufrufen .

Sprachen mit deterministischer Speicherverwaltung

Sprachen mit automatischer Referenzzählung (ARC)

Listenbasierte Sprachen – LISPs

Listenbasierte Sprachen sind eine Art datenstrukturierter Sprachen , die auf der Listendatenstruktur basieren .

Kleine Sprachen

Kleine Sprachen [ 35 ] dienen einem spezialisierten Problembereich.

  • awk – wird zur Bearbeitung von Textdateien verwendet.
  • sed – analysiert und transformiert Text
  • SQL – verfügt nur über wenige Schlüsselwörter und nicht über alle Konstrukte, die für eine vollständige Programmiersprache erforderlich sind [ d ] – viele Datenbankmanagementsysteme erweitern SQL um zusätzliche Konstrukte als gespeicherte Prozedursprache
  • XPL – eine Sprache, die für die Compilerentwicklung entwickelt wurde, aber nicht darauf beschränkt ist.

Logikbasierte Sprachen

Logikbasierte Sprachen spezifizieren eine Reihe von Attributen, die eine Lösung haben muss, anstatt eine Reihe von Schritten zur Erlangung einer Lösung.

Zu den bemerkenswerten Sprachen, die diesem Programmierparadigma folgen , gehören:

Maschinensprachen

Maschinensprachen sind direkt von der CPU eines Computers ausführbar. Sie werden typischerweise als Bitmuster formuliert, üblicherweise oktal oder hexadezimal dargestellt . Jedes Bitmuster veranlasst die Schaltkreise der CPU, eine der grundlegenden Hardwareoperationen auszuführen. Die Aktivierung bestimmter elektrischer Eingänge (z. B. CPU-Gehäusepins bei Mikroprozessoren) und logische Einstellungen für CPU-Zustände steuern die Berechnungen des Prozessors. Jede Maschinensprache ist spezifisch für eine Prozessorfamilie; Maschinensprachencode für eine Prozessorfamilie kann nicht direkt auf Prozessoren einer anderen Familie ausgeführt werden, es sei denn, die betreffenden Prozessoren verfügen über zusätzliche Hardware zur Unterstützung (beispielsweise enthielten DEC VAX-Prozessoren einen PDP-11-Kompatibilitätsmodus). Sie werden (im Wesentlichen) immer vom CPU-Entwickler und nicht von Dritten definiert. [ e ] Die symbolische Version, die Assemblersprache des Prozessors , wird in den meisten Fällen ebenfalls vom Entwickler definiert. Einige häufig verwendete Maschinencode -Befehlssätze sind:

Makrosprachen

Textsubstitutions-Makrosprachen

Makrosprachen transformieren eine Quellcodedatei in eine andere. Ein „Makro“ ist im Wesentlichen ein kurzer Textabschnitt, der zu einem längeren Text erweitert wird (nicht zu verwechseln mit hygienischen Makros ), gegebenenfalls unter Einbeziehung von Parametern. Sie werden häufig zur Vorverarbeitung von Quellcode verwendet. Präprozessoren können auch Funktionen wie das Einbinden von Dateien bereitstellen .

Makrosprachen können auf speziell gekennzeichnete Codebereiche beschränkt sein ( #im Fall des C-Präprozessors mit einem Präfix versehen). Alternativ ist dies nicht möglich, doch auch dann ist es oft unerwünscht, beispielsweise ein in einem Stringliteral eingebettetes Makro zu expandieren . Daher benötigen sie weiterhin grundlegende Syntaxkenntnisse. Aus diesem Grund sind sie häufig in mehr als einer Sprache anwendbar. Im Gegensatz dazu bieten quellcodebasierte Sprachen wie PHP einen vollen Funktionsumfang.

  • C-Präprozessor
  • m4 (ursprünglich von AT&T, im Paket mit Unix)
  • ML/I (Allzweck-Makroprozessor)
  • TTM (entwickelt am California Institute of Technology)

Anwendungsmakrosprachen

Skriptsprachen wie Tcl und ECMAScript ( ActionScript , ECMAScript für XML , JavaScript , JScript ) wurden in Anwendungen integriert. Diese werden manchmal als „Makrosprachen“ bezeichnet, allerdings in einem etwas anderen Sinne als Textersetzungsmakros wie m4 .

Metaprogrammiersprachen

Metaprogrammierung bezeichnet das Schreiben von Programmen, die andere Programme – einschließlich sich selbst – als ihre Daten verwenden oder Teile der sonst zur Laufzeit ausgeführten Arbeit bereits zur Kompilierzeit erledigen . In vielen Fällen ermöglicht dies Programmierern, in der gleichen Zeit mehr zu erreichen, als wenn sie den gesamten Code manuell schreiben würden.

Modulare Sprachen

Modulare Programmierung ist ein Programmierparadigma, bei dem Funktionen und Symbole in unabhängige Module organisiert werden.

Multiparadigmatische Sprachen

Multiparadigmatische Sprachen unterstützen mehrere Programmierparadigmen . Sie ermöglichen es einem Programm, verschiedene Programmierstile zu verwenden . Ziel ist es, Programmierern die Wahl des jeweils besten Werkzeugs für eine Aufgabe zu ermöglichen, wohl wissend, dass kein einzelnes Paradigma alle Probleme auf die einfachste oder effizienteste Weise löst.

  • 1C: Unternehmensprogrammiersprache (generisch, imperativer, objektorientierter, prototypenbasierter, funktionaler Programmierstil)
  • Ada ( nebenläufig , verteilt , generisch ( Template-Metaprogrammierung ), imperativ , objektorientiert ( klassenbasiert ))
  • ALF ( funktional , logisch )
  • Alma-0 (Beschränkung, Imperativ, Logik)
  • APL (funktional, imperativer, objektorientierter (klassenbasierter) Ansatz)
  • BETA (funktional, imperativer, objektorientierter (klassenbasierter))
  • C++ (generisch, imperativer, objektorientierter (klassenbasierter), funktionaler, Metaprogrammierung)
  • C# (generisch, imperativ, objektorientiert (klassenbasiert), funktional, deklarativ)
  • Ceylon (generisch, imperativ, objektorientiert (klassenbasiert), funktional, deklarativ)
  • ChucK (imperativ, objektorientiert, zeitbasiert, nebenläufig, on-the-fly)
  • Cobra (generisch, imperativ, objektorientiert (klassenbasiert), funktional, vertraglich)
  • Common Lisp (funktional, imperativer, objektorientierter (klassenbasierter) Ansatz, aspektorientierter Ansatz (Benutzer können weitere Paradigmen hinzufügen, z. B. Logik))
  • Curl (funktional, imperativer, objektorientierter (klassenbasierter) Programmierstil, Metaprogrammierung)
  • Curry (parallel, funktional, Logik)
  • D (generisch, imperativer, funktionaler, objektorientierter (klassenbasierter), Metaprogrammierung)
  • Dart (generisch, imperativ, funktional, objektorientiert (klassenbasiert))
  • Delphi Object Pascal (generisch, imperativ, objektorientiert (klassenbasiert), Metaprogrammierung)
  • Dylan (funktional, objektorientiert (klassenbasiert))
  • ECMAScript (funktional, imperativer, objektorientierter (prototypenbasierter))
  • Eiffel (imperativ, objektorientiert (klassenbasiert), generisch, funktional (Agenten), nebenläufig (SCOOP))
  • F# (funktional, generisch, objektorientiert (klassenbasiert), sprachorientiert)
  • Fantom (funktional, objektorientiert (klassenbasiert))
  • Los (Imperativ, prozedural),
  • Groovy (funktional, objektorientiert (klassenbasiert), imperativ, prozedural)
  • Hafen
  • Hop
  • J (funktional, imperativer, objektorientierter (klassenbasierter))
  • Java (generisch, imperativ, objektorientiert (klassenbasiert), funktional)
  • Julia (imperativ, Mehrfachdispatch ("objektorientiert"), funktional, Metaprogrammierung)
  • LabVIEW ( visuell , Datenfluss , parallel, modular, funktional, objektorientiert, Skripting)
  • Lua (funktional, imperativ, objektorientiert ( prototypenbasiert ))
  • Merkur (funktional, logisch, objektorientiert)
  • Metaobjektprotokolle (objektorientiert (klassenbasiert, prototypenbasiert))
  • Nemerle (funktional, objektorientiert (klassenbasiert), imperativ, Metaprogrammierung)
  • Objective-C (imperativ, objektorientiert (klassenbasiert), reflexiv)
  • OCaml (funktional, imperativer, objektorientierter (klassenbasierter), modularer)
  • Oz (funktional (Auswertung: sofort , verzögert ), Logik, Constraint , imperative, objektorientiert (klassenbasiert), nebenläufig, verteilt) und Mozart Programming System plattformübergreifend Oz
  • Object Pascal (imperativ, objektorientiert (klassenbasiert))
  • Perl (imperativ, funktional (kann nicht rein funktional sein), objektorientiert, klassenorientiert, aspektorientiert (durch Module))
  • PHP (imperativ, objektorientiert, funktional (kann nicht rein funktional sein))
  • Pike (interpretierte, universelle, höhere, plattformübergreifende, dynamische Programmiersprache)
  • Prograph (Datenfluss, objektorientiert (klassenbasiert), visuell)
  • Python (funktional, kompiliert, interpretiert, objektorientiert (klassenbasiert), imperativ, Metaprogrammierung, Erweiterung, unrein, interaktiver Modus, iterativ, reflektierend, Skripting)
  • R (Array, interpretiert, unrein, interaktiver Modus, listenbasiert, objektorientiert, prototypenbasiert, skriptbasiert)
  • Racket (funktional, imperativ, objektorientiert (klassenbasiert) und vom Benutzer erweiterbar)
  • Raku (parallel, konkatenativ, funktional, generisch, imperativ, reflexionsorientiert, objektorientiert, Pipelines, reaktiv und über Bibliotheken Einschränkungen, verteilt)
  • Rebol (funktional, imperative, objektorientiert (prototypenbasiert), Metaprogrammierung (dialektiert))
  • Rot (funktional, imperative, objektorientiert (prototypenbasiert), Metaprogrammierung (dialektiert))
  • ROOP (imperativ, logisch, objektorientiert (klassenbasiert), regelbasiert)
  • Ruby (imperativ, funktional, objektorientiert (klassenbasiert), Metaprogrammierung)
  • Rust (nebenläufig, funktional, imperativ, objektorientiert, generisch, Metaprogrammierung, kompiliert)
  • Scala (funktional, objektorientiert)
  • Seed7 (imperativ, objektorientiert, generisch)
  • SISAL (parallel, Datenfluss, funktional)
  • Tabellenkalkulationen (funktional, visuell)
  • Swift (protokollorientiert, objektorientiert, funktional, imperativ, blockstrukturiert)
  • Tcl (funktional, imperativer, objektorientierter (klassenbasierter) Ansatz)
    • Tee (funktional, imperativer, objektorientierter (klassenbasierter))
  • V (Vlang) (funktional, imperativer, prozeduraler, strukturierter, paralleler)
  • Windows PowerShell (funktional, imperativer, Pipeline-, objektorientierter (klassenbasierter))
  • Wolfram Mathematica ( Wolfram-Sprache )

Numerische Analyse

Mehrere universelle Programmiersprachen, wie C und Python , werden auch für technisches Rechnen verwendet; diese Liste konzentriert sich jedoch auf Sprachen, die fast ausschließlich für technisches Rechnen eingesetzt werden.

Nicht-englischsprachige Sprachen

Objektorientierte klassenbasierte Sprachen

Klassenbasierte objektorientierte Programmiersprachen unterstützen Objekte, die durch ihre Klasse definiert werden. Klassendefinitionen enthalten Memberdaten. Die Nachrichtenübermittlung ist ein Schlüsselkonzept, wenn nicht sogar das Hauptkonzept, in objektorientierten Sprachen.

Polymorphe Funktionen, die durch die Klasse einiger ihrer Argumente parametrisiert sind, werden üblicherweise als Methoden bezeichnet . In Sprachen mit einfacher Dispatch-Methode enthalten Klassen typischerweise auch Methodendefinitionen. In Sprachen mit mehrfacher Dispatch-Methode werden Methoden durch generische Funktionen definiert . Es gibt Ausnahmen, bei denen Methoden mit einfacher Dispatch- Methode generische Funktionen sind (z. B. das Objektsystem von Bigloo ).

Einzelversand

Objektorientierte, prototypenbasierte Sprachen

Prototypenbasierte Sprachen sind objektorientierte Sprachen, bei denen die Unterscheidung zwischen Klassen und Instanzen aufgehoben wurde:

Abseitsregeln

Off-Side-Regelsprachen kennzeichnen Codeblöcke durch ihre Einrückung .

Prozedurale Sprachen

Prozedurale Programmiersprachen basieren auf dem Konzept der Einheit und des Gültigkeitsbereichs (des Datenbereichs) einer ausführbaren Codeanweisung. Ein prozedurales Programm besteht aus einer oder mehreren Einheiten oder Modulen, die entweder vom Benutzer codiert oder in einer Codebibliothek bereitgestellt werden. Jedes Modul besteht aus einer oder mehreren Prozeduren, die je nach Sprache auch als Funktion, Routine, Unterprogramm oder Methode bezeichnet werden. Beispiele für prozedurale Sprachen sind:

Abfragesprachen

Reflektierende Sprachen

Reflektierende Programmiersprachen ermöglichen es Programmen, ihre Struktur auf hoher Ebene zur Laufzeit oder Kompilierzeit zu untersuchen und gegebenenfalls zu modifizieren. Dies ist am häufigsten bei Hochsprachen für virtuelle Maschinen wie Smalltalk der Fall und weniger verbreitet bei Low-Level-Programmiersprachen wie C. Sprachen und Plattformen, die Reflexion unterstützen:

Regelbasierte Sprachen

Regelbasierte Sprachen instanziieren Regeln, sobald diese durch Bedingungen in einem Datensatz aktiviert werden. Aus allen möglichen Aktivierungen wird eine bestimmte Menge ausgewählt und die zu diesen Regeln gehörenden Anweisungen werden ausgeführt. Zu den regelbasierten Sprachen gehören:

Skriptsprachen

Stackbasierte Sprachen

Stackbasierte Sprachen sind eine Art datenstrukturierter Sprachen , die auf der Stack -Datenstruktur basieren .

Synchrone Sprachen

Synchrone Programmiersprachen sind für die Programmierung reaktiver Systeme optimiert, also Systeme, die häufig unterbrochen werden und schnell reagieren müssen. Viele dieser Systeme werden auch als Echtzeitsysteme bezeichnet und finden häufig Anwendung in eingebetteten Systemen .

Beispiele:

Schattierungssprachen

Eine Shading-Sprache ist eine Grafikprogrammiersprache, die speziell für die Programmierung von Shader-Effekten entwickelt wurde. Solche Sprachen bestehen üblicherweise aus speziellen Datentypen wie „Farbe“ und „Normalen“. Dies ist auf die Vielfalt der Zielmärkte für 3D-Computergrafik zurückzuführen.

Echtzeit-Rendering

Sie bieten sowohl eine höhere Hardwareabstraktion als auch ein flexibleres Programmiermodell als frühere Paradigmen, die Transformations- und Schattierungsgleichungen fest codierten. Dies ermöglicht dem Programmierer eine bessere Kontrolle über den Rendering-Prozess und liefert reichhaltigere Inhalte bei geringerem Overhead.

Offline-Rendering

Die in Offline-Rendering verwendeten Shading-Sprachen erzielen maximale Bildqualität. Die Verarbeitung solcher Shader ist zeitaufwändig. Aufgrund ihrer Fähigkeit, fotorealistische Ergebnisse zu erzeugen, kann der Rechenaufwand hoch sein.

Syntaxbehandlungssprachen

Diese Sprachen helfen bei der Generierung lexikalischer Analysatoren und Parser für kontextfreie Grammatiken .

Systemsprachen

Eine Systemprogrammiersprache dient der Ausführung von Aufgaben auf niedriger Ebene, wie z. B. Speicherverwaltung oder Aufgabenverwaltung; üblicherweise bezeichnet man damit eine Sprache, die für die Systemprogrammierung verwendet wird ; solche Sprachen sind für die Entwicklung von Systemsoftware konzipiert, die im Vergleich zu Anwendungssoftware in der Regel andere Entwicklungsansätze erfordert.

Systemsoftware ist Computersoftware, die zur Steuerung und zum Betrieb von Computerhardware dient und eine Plattform für die Ausführung von Anwendungssoftware bereitstellt. Zur Systemsoftware gehören Softwarekategorien wie Betriebssysteme, Dienstprogramme, Gerätetreiber, Compiler und Linker. Beispiele für Systemsprachen sind:

SpracheUrheberErstmals erschienenBeeinflusst vonWird verwendet für
ESPOLBurroughs Corporation1961ALGOL 60MCP
PL/IIBM , SHARE1964ALGOL 60, FORTRAN, etwas COBOLMultics
PL360Niklaus Wirth1968ALGOL 60ALGOL W
CDennis Ritchie1969BCPLDie meisten Betriebssystemkerne , einschließlich Windows NT und der meisten Unix-ähnlichen Systeme
PL/SIBM196xPL/IOS/360
WONNECarnegie Mellon Universität1970ALGOL-PL/I [ 47 ]VMS (Teile)
PL/8IBM197xPL/IAIX
PL/MP und PL/MIIBM197xPL/ICPF , OS/400
PL-6Honeywell, Inc.197xPL/ICP-6
SYMPLCDC197xJOVIALNOS- Subsysteme, die meisten Compiler, FSE-Editor
C++Bjarne Stroustrup1979C , SimulaSiehe C++-Anwendungen [ 48 ]
AdaJean Ichbiah , S. Tucker Taft1983ALGOL 68 , Pascal , C++ , Java , EiffelEingebettete Systeme, Betriebssystemkerne, Compiler, Spiele, Simulationen, CubeSat , Flugsicherung und Avionik
DDigital Mars2001C++Mehrere Domänen [ 49 ]
NimAndreas Rumpf2008Ada , Modula-3 , Lisp , C++ , Object Pascal , Python , OberonBetriebssystemkerne, Compiler, Spiele
RostMozilla-Forschung [ 50 ]2010C++ , Haskell , Erlang , RubyServo-Layout-Engine , RedoxOS
SchnellApple Inc.2014C , Objective-C , RustmacOS- und iOS- App-Entwicklung [ h ]
ZigAndrew Kelley 2016 C , C++ , LLVM IR , Go , Rust , JavaScriptAls Ersatz für C
V (Vlang)Alexander Medwednikow 2019 C , Go , Oberon-2 , Rust , Swift , KotlinVinix OS, Betriebssystemkerne, Compiler, Spiele

Transformationssprachen

Transformationssprachen dienen dazu, Quellcode, der in einer bestimmten formalen Sprache spezifiziert ist, in einen definierten Zielcode zu transformieren (zu übersetzen). Sie werden am häufigsten in Zwischenkomponenten komplexerer Systeme eingesetzt, um interne Ergebnisse für die Eingabe in nachfolgende Verarbeitungsroutinen aufzubereiten.

Visuelle Sprachen

Visuelle Programmiersprachen ermöglichen es Benutzern, Programme zwei- (oder mehr-)dimensional anstatt eindimensional als Textzeichenfolgen mithilfe grafischer Layouts verschiedener Art zu spezifizieren. Einige Datenfluss-Programmiersprachen sind ebenfalls visuelle Sprachen.

Mitth Sprachen

Der Informatiker Niklaus Wirth entwarf und implementierte mehrere einflussreiche Programmiersprachen.

XML-basierte Sprachen

Dies sind Sprachen, die auf XML basieren oder mit XML arbeiten .

Siehe auch

Anmerkungen

  1. ^ Einige Ada-Implementierungen beinhalten einen Garbage Collector, [ 17 ] obwohl die Sprachspezifikation dessen Einbeziehung nicht vorschreibt.
  2. ^ Anfänglich mussten Entwickler den Speicher manuell mithilfe dersave`and`restore. PostScript Level 2 führte eine automatische Speicherbereinigung ein, deren Verwendung jedoch optional ist. [ 28 ]
  3. Auf Apple -Plattformen werden diese Funktionen aus der C-Standardbibliothek importiert (die ausFoundation,AppKitoder, undauf WindowsUIKitimportierenGlibcucrt
  4. Die Objekte von SQL sind Sammlungen von Datenbankeinträgen , sogenannte Tabellen. Eine vollständige Programmiersprache kann Algorithmen unabhängig von der Laufzeit spezifizieren. Ein Algorithmus kann somit verwendbare Ergebnisse erzeugen. SQL hingegen kann lediglich Datensätze auswählen, die auf die aktuelle Sammlung – die im System vorhandenen Daten – beschränkt sind, anstatt eine Aussage über die Korrektheit des Ergebnisses zu treffen.
  5. Eine bemerkenswerte Ausnahme bildete die sowjetisch/russische CPU der Serie 1801 , die ursprünglich ihren eigenen inländischen Architekturstil verwendete, später aberim Rahmen einer politischen Entscheidung auf PDP-11- Kompatibilität umgestellt wurde.
  6. ^ a b Untermodelle werden nicht aufgeführt, nur Basismodelle.
  7. ^ Das Konzept des Objekts mit der traditionellen Single-Dispatch-OO-Semantik ist in Julia nicht vorhanden; stattdessen gibt es die allgemeinere Multiple-Dispatch-Methode für verschiedene Typen zur Laufzeit.
  8. ^ Swift verwendet automatische Referenzzählung .

Referenzen

  1. ^ „Operatoren“ . Abgerufen am 13.05.2024 .
  2. ^ "wrap" .
  3. ^ ""Aspekte in Raku"" .
  4. ^ Dokumentation » Die Python-Standardbibliothek » Gleichzeitige Ausführung
  5. ^ „Kanäle und andere Mechanismen“ .
  6. ^ "Problemlöser" .
  7. ^ Bright, Walter (2014-11-01). „D Programming Language, Contract Programming“ . Digital Mars . Abgerufen am 10.11.2014 .
  8. ^ Hodges, Nick. „Mit Klassenverträgen in Delphi Prism saubereren und qualitativ hochwertigeren Code schreiben“ . Embarcadero Technologies. Archiviert vom Original am 26. April 2021. Abgerufen am 20. Januar 2016 .
  9. ^ Findler, Felleisen Verträge für Funktionen höherer Ordnung
  10. ^ „Scala Standard Library Docs - Assertions“ . EPFL . Abgerufen am 24.05.2019 .
  11. ^ Starke Typisierung als ein weiteres "Vertragssicherungsinstrument" in Scala, siehe Diskussion unter scala-lang.org/ .
  12. ^ ein b „Einrückungsbasierte Syntax · rsdn/nemerle Wiki“ . GitHub . Abgerufen am 18.03.2022 .
  13. ^ "Solidity: Solidity 0.8.11 Dokumentation" .
  14. ^ "Iterator" .
  15. ^ a b "std::pointer_safety - cppreference.com" . en.cppreference.com . Abgerufen am 9. Dezember 2024 .
  16. ^ JF Bastien; Alisdair Meredith (2021-04-16). "Entfernung der Unterstützung für die automatische Speicherbereinigung" .
  17. ^ „Konservative Müllabfuhr für GNAT“ . Florian Weimers Homepage . Abgerufen am 12.03.2025 .
  18. ^ „Speicherverwaltung · BlitzMax“ . Abgerufen am 14.07.2023 .
  19. ^ „Tipps · BlitzMax“ . Abgerufen am 14.07.2023 .
  20. ^ "BRL.Blitz · BlitzMax" . Abgerufen am 14.07.2023 .
  21. ^ JF Bastien; Alisdair Meredith (2021-04-16). "Entfernung der Unterstützung für die automatische Speicherbereinigung" .
  22. ^ „Verwendung von Zeigern in einem ILE-COBOL-Programm – IBM-Dokumentation“ . IBM . Juni 2012. Abgerufen am 14.07.2023 .
  23. ^ „HEAP – IBM-Dokumentation“ . IBM . Abgerufen am 14.07.2023 .
  24. ^ „SOM-basierte OO-COBOL-Sprachelemente, die geändert werden – IBM-Dokumentation“ . IBM . Abgerufen am 14.07.2023 .
  25. ^ „Garbage Collection“ . D-Programmiersprache . Abgerufen am 18.03.2022 .
  26. ^ „Nims Speicherverwaltung“ . Abgerufen am 18.03.2022 .
  27. ^ „Über Speicherverwaltung“ . Apple Developer . Abgerufen am 12.03.2025 .
  28. ^ Adobe (Februar 1999). PostScript Language Reference, dritte Auflage (PDF) . Addison-Wesley Publishing Company. S.  56–65 .
  29. ^ „V-Dokumentation“ . Abgerufen am 12.03.2025 .
  30. ^ „Projekte/Vala/Referenzverwaltung – GNOME Wiki!“ . Archiviert vom Original am 21.01.2024 . Abgerufen am 21.03.2022 .
  31. ^ „Speicherzuweisung – Cython 3.0.0.dev0-Dokumentation“ . Abgerufen am 14.07.2023 .
  32. ^ „Interoperabilität von nativem Code – Scala Native 0.4.14 Dokumentation“ . Abgerufen am 05.07.2023 .
  33. ^ „Understanding Ownership - The Rust Programming Language“ . doc.rust-lang.org .
  34. ^ „Smart Pointers – Die Programmiersprache Rust“ . doc.rust-lang.org .
  35. ^ Jon Bentley (AT&T), August 1986, CACM 29 (8), „Kleine Sprachen“, S. 711–721, aus seiner Kolumne „Programmierperlen“.
  36. ^ „Metaprogrammierung: Was, warum und wie“ . 14.12.2011.
  37. ^ „Prozedurale Makros zur Generierung von Code aus Attributen“ . doc.rust-lang.org .
  38. ^ ECMAScript® 2015 Sprachspezifikation, 15.2 Module
  39. ^ "Klasse Module - Dokumentation für Ruby 3.5" .
  40. ^ "Klassen und Rollen" .
  41. ^ "Meta-Objekt-Protokoll (MOP)" .
  42. ^ Das Rust-Team (25. Mai 2026). „Module any“ . docs.rust-lang.org . Das Rust-Team.
  43. ^ Das Rust-Team (25. Mai 2026). „Modulfeld“ . docs.rust-lang.org . Das Rust-Team.
  44. ^ "JBang" . jbang.dev . Abgerufen am 11. September 2025 .
  45. ^ Scabia, Marco. „Was ist AGAL?“ . Adobe Developer Connection . Adobe . Abgerufen am 8. Mai 2018 .
  46. ^ "Grammatiken" .
  47. ^ Wulf, WA; Russell, DB; Haberman, AN (Dezember 1971). „BLISS: Eine Sprache für die Systemprogrammierung“. Communications of the ACM . 14 (12): 780–790 . CiteSeerX 10.1.1.691.9765 . doi : 10.1145/362919.362936 . S2CID 9564255 .  
  48. ^ "C++-Anwendungen" .
  49. ^ „Organisationen, die die Programmiersprache D verwenden“ . D-Programmiersprache .
  50. ^ „Mozilla Research“ . 1. Januar 2014.