it-swarm.dev

Wie viele Arten von Programmiersprachen gibt es?

Grundsätzlich möchte ich viele Programmiersprachen lernen, um ein großartiger Programmierer zu werden. Ich kenne nur eine Handvoll bis in die Tiefe und Ich hatte gehofft, jemand könnte herausfinden, wie viele Klassen oder Arten von Programmiersprachen gibt es. Zum Beispiel, wie Sie sie zusammenfassen würden, wenn Sie sie in Gruppen lernen müssten.

Ich komme aus einem Java Hintergrund) und bin mit statischer Typisierung vertraut, aber ich weiß, dass es neben der dynamischen Typisierung eine solche Vielfalt an verfügbaren Sprachen geben muss, dass ich gerne eine kategoriale Aufschlüsselung sehen würde wenn möglich.

30
sova

Dies hängt davon ab, wie Sie Sprachen klassifizieren möchten. Grundsätzlich können Sprachen in zwei Typen unterteilt werden: Imperativ Sprachen, in denen Sie den Computer anweisen , wie eine Aufgabe zu erledigen ist, und deklarativ Sprachen, in denen Sie dem Computer mitteilen, was zu tun ist. Deklarative Sprachen können weiter unterteilt werden in funktionale Sprachen, in denen ein Programm durch Zusammensetzen von Funktionen erstellt wird, und logische Programmiersprachen, in denen ein Programm durch eine Menge von erstellt wird logische Verbindungen. Imperative Sprachen lesen sich eher wie eine Liste von Schritten zur Lösung eines Problems, ähnlich wie ein Rezept. Imperative Sprachen sind C, C++ und Java. funktionale Sprachen umfassen Haskell; Zu den logischen Programmiersprachen gehört Prolog.

Imperative Sprachen werden manchmal in zwei Untergruppen unterteilt: prozedural Sprachen wie C und objektorientierte Sprachen. Objektorientierte Sprachen sind jedoch etwas orthogonal zu den Gruppierungen, da es objektorientierte funktionale Sprachen gibt (OCaml und Scala sind Beispiele).

Sie können Sprachen auch gruppieren, indem Sie Folgendes eingeben: statisch und dynamisch. Statisch typisierte Sprachen sind solche, in denen die Eingabe vor dem Ausführen des Programms (normalerweise während einer Kompilierungsphase) überprüft (und normalerweise erzwungen) wird. Dynamisch typisierte Sprachen verschieben die Typprüfung auf die Laufzeit. C, C++ und Java sind statisch typisierte Sprachen; Python, Ruby, JavaScript und Objective-C sind dynamisch typisierte Sprachen. Es gibt auch ntypisierte Sprachen, Dazu gehört die Programmiersprache Forth.

Sie können Sprachen auch nach ihrer Typisierungsdisziplin gruppieren: schwach Typisierung, die implizite Typkonvertierungen unterstützt, und stark) Typisierung, die implizite Typkonvertierungen verbietet. Die Linien zwischen den beiden sind etwas verschwommen: Nach einigen Definitionen ist C eine schwach typisierte Sprache, während andere sie als stark typisiert betrachten. Schreibdisziplin ist sowieso kein nützlicher Weg, um Sprachen zu gruppieren.

73
mipadi
  • Versammlung
  • prozedural
    • Basic
    • C.
  • objektorientiert
    • C #
    • Java
  • deklarativ
    • Prolog
    • SQL
  • funktional
    • LISPELN
    • Haskell

Dies sind die wichtigsten, aber es gibt viele andere Paradigmen, und es gibt viele Überschneidungen zwischen ihnen.

12
user1842

Informationen zu Arten von Programmiersprachen (Paradigmen) finden Sie hier:
http://en.wikipedia.org/wiki/Programming_paradigm

Weitere Merkmale von Programmiersprachen (z. B. Typsysteme) finden Sie hier: http://en.wikipedia.org/wiki/Programming_language

11
Robert Harvey

Klicken Sie auf das Bild, um das PDF anzuzeigen.Programming paradigms poster

Sie sollten sich Programmierparadigmen für Dummies: Was jeder Programmierer wissen sollte von Peter Van Roy ansehen. Dies gibt Ihnen einen Überblick darüber, wie es draußen läuft.

Wenn Sie weiter gehen möchten, können Sie Konzepte, Techniken und Modelle der Computerprogrammierung lesen. Auf diese Weise lernen Sie keine ganze Reihe von Sprachen, aber Sie lernen Paradigmen, die hinter verschiedenen Arten von Sprachen stehen. So wird es für Sie einfacher, eine neue Sprache zu lernen.

9
mmdemirbas
  • Vorgehensweise: Assembly, Java, C #, F #, LISP, Fortran.

  • Set basiert: SQL.

  • Musterbasiert: Perl, Regex, Snobol.

  • Baumbasiert: XSLT.

  • Array-basiert: APL.

6
Tangurena

Es gibt verschiedene Möglichkeiten, dies zu beantworten, aber in Begriffen können sie wie folgt eingeteilt werden:

Maschinensprache: Maschinensprache ist eine einfache Programmiersprache. Es ist für Computer leicht verständlich, für Menschen jedoch schwer zu lesen. Aus diesem Grund verwenden die Benutzer Programmiersprachen auf höherer Ebene. In Hochsprachen geschriebene Programme werden ebenfalls entweder kompiliert und/oder in Maschinensprache interpretiert, damit Computer sie ausführen können.

Assemblersprache: Assemblersprache ist eine Darstellung der Maschinensprache. Mit anderen Worten, jede Assembler-Anweisung wird in eine Maschinensprachenanweisung übersetzt. Obwohl Anweisungen in Assemblersprache lesbar sind, sind die Anweisungen immer noch auf niedriger Ebene. Ein Nachteil der Assemblersprache ist, dass sie nicht portierbar ist, da jede Plattform mit einer bestimmten Assemblersprache geliefert wird.

Hochsprache: Hochsprache ist das, was die meisten Programmierer heutzutage verwenden. Sprachen wie C, C++ und Java sind alle Hochsprachen. Vorteile von Hochsprachen sind, dass sie sehr gut lesbar und portabel sind. Ein Nachteil von Hochsprachen ist, dass sie es sind weniger leistungsfähig als Assemblersprachen, da eine einzelne Anweisung in einer höheren Sprache in viele maschinensprachliche Anweisungen übersetzt wird.

Hochsprachen können ferner klassifiziert werden als:

  1. Funktionssprachen: In der Funktionssprache ist ein Programm in Funktionsdefinitionen unterteilt. Funktionale Sprachen sind eine Art deklarative Sprache. Sie basieren meist auf dem typisierten Lambda-Kalkül mit Konstanten. Einige der bekanntesten Funktionssprachen sind Scala, F #, Clojure und LISP.

  2. Prozedurale Sprachen: In prozeduralen Sprachen wird ein Programm in einer Folge von Schritten geschrieben, die befolgt werden sollten, um ein Ergebnis zu erzielen. COBOL, FORTRAN und C sind einige prozedurale Sprachen.

  3. Objektorientierte Programmiersprachen: In OOP Sprachen) wird ein Programm in Objekte unterteilt, die Daten sowie Methoden enthalten, die Java, C # und C++ sind OOP Sprachen).

  4. Logikprogrammiersprachen: Logiksprachen werden verwendet, um Programme zu erstellen, mit denen der Computer logisch argumentieren kann. zB: Logiksprache

Weitere Informationen finden Sie unter:

4
Badar

Ich neige dazu, in Merkmalen zu denken:

Syntax :

C-basiert oder was-hast-du. Java hat eine C-basierte Syntax. Ich empfehle dringend, etwas wie Python oder Ruby) auszuprobieren, um den Kopf rauszuholen Ich bin der Meinung, dass keine Syntax umfangreicher sein muss als C-basiert und keine Probleme mit Bausteinen um den Leerraum haben muss.

Kompiliert vs. interpretiert mit Build-Prozess vs. interpretiert/Konsole :

Ich bin sehr wenig mit Bedenken hinsichtlich der Kompilierungszeit und der Laufzeitumgebung vertraut, aber ich verstehe, dass es dort eine ganze Reihe von Bedenken gibt, an die ich selten denke.

Ebenso gibt es viele interpretierte Sprachen, die noch einen kompilierbaren Prozess zum Ausführen in einer virtuellen Maschine haben, wie Java tut dies. Sie müssen noch neu erstellen, um Änderungen an den Dingen zu sehen.

Und dann gibt es noch JavaScript und Python, die Sie im laufenden Betrieb Befehl für Befehl in einer Konsole in einer Live-Umgebung ausführen können. Alle drei können zu sehr unterschiedlichen Methoden zum Schreiben von Code führen.

Dynamische vs. strenge Eingabe :

Ich neige dazu, die beiden als Design-Kompromisse zu betrachten. Wenn Sie sich auf einem viel niedrigeren Niveau befinden und die Leistung von entscheidender Bedeutung ist, ist statisches Tippen sehr sinnvoll. Ich habe nie verstanden, dass einer "sicherer" ist als der andere, aber ich bin auf eine sehr plastische/dynamische Sprache gekommen, in der man einfach lernt, wie das Schreibsystem funktioniert und was man im Grunde erwartet. Typ-Shenanigans sind für mich in JS selten ein Problem. In gewisser Weise kann die Flexibilität die Dinge robuster machen, obwohl es für einen Entwickler mit höherem Level zugegebenermaßen ein bisschen arkaner ist, wenn Sie einige der Schlaglöcher in der Sprache nicht kennen.

Block-Level Scope vs. Function Scope vs.? :

Block-Level ist am häufigsten (alles zwischen {} in den meisten c-basierten Syntaxsprachen). Der JavaScript-Bereich basiert auf Funktionen (die auch verwendet werden, um Objekte so effektiv zu erstellen). Es gibt auch große Unterschiede in der Art des Zugriffs, den Sie vom inneren zum äußeren Bereich haben. Ich bin mit anderen Scoping-Schemata nicht vertraut, aber ich bin mir sicher, dass sie existieren.

Klassisch OOP vs. Prototypal OOP vs Fast-OOP (Strukturen in C?) Vs Nicht-OOP :

Selbst in klassenbasierten OOP gibt es viel Raum für Variationen. Ob Sie mehrere Vererbungen durchführen können (ew, weit darüber hinaus, ew), Schnittstellen definieren usw.

In JavaScript haben wir eine Art verkümmerten hybriden Prototyp OOP, bei dem Objekte wesentlich einfacher und in hohem Maße veränderlich sind, aber wir haben immer noch die Möglichkeit, die Schnittstelle von internen Belangen zu trennen, was IMO der wichtige Aspekt ist der Einkapselung.

Die Sache mit OOP ist, dass es wirklich eine Menge Dinge gibt, die man abziehen kann, die im Wesentlichen OOP-orientiert sind, ohne technisch OOP zu sein. Es gibt natürlich Puristen, aber am Ende des Tages, Bei Entwurfsmustern geht es darum, bestimmte Abstraktionen zu erzielen, die in bestimmten Situationen gut funktionieren. Gehen Sie nicht zu schnell davon aus, dass Ideen aus einer OOP-basierten Sprache keinen Nutzen für etwas haben, das eher prozedural ausgerichtet ist. Und ich spreche nicht über JavaScript keineswegs eingeschränkt durch seine doofe Version eines Prototyp-basierten OOP Paradigmas).

Erstklassige Funktionen :

Diese nicht in einer Sprache zu haben, fällt mir schwer aufzugeben. Sie können Funktionen so weitergeben, als wären sie Daten zur Verwendung in anderen Kontexten. Dies macht insbesondere Ereignisbehandlungsschemata sehr einfach zu implementieren, aber es macht es auch sehr einfach, die Sprache so anzupassen, dass sie so funktioniert, wie Sie es möchten. Es ist mehr als alles andere, was ich vermute, das, was JavaScript zum Erfolg gemacht hat, obwohl es in zwei Wochen entwickelt wurde und Java-ungefähre Syntax als Marketing-Schema darauf angewendet wurde.

Schließungen :

Ich bin mir nicht sicher, wo die Debatte für Java ist, aber ich weiß, dass viele Java -Entwickler vor ein oder zwei Jahren nach dieser Funktion verlangten. In einer Sprache ohne Abschluss, als a Die Funktion wird geschlossen. Alles, was in der Lage ist, auf Inhalte innerhalb dieser Funktion zu verweisen, kann nicht darauf zugreifen, da Müll gesammelt wurde. Bei einem Abschluss ist der Ausführungskontext so gebunden, dass Sie auf Inhalte innerhalb dieser geschlossenen Funktion verweisen können Funktion aus einem anderen Bereich wie in einem zurückgegebenen Objekt oder einer zurückgegebenen Funktion erhalten Sie diese Variablen im Grunde so, wie sie waren, als die Funktion geschlossen wurde. Es ist wie ein Blockieren Ihres Fußes in der Tür der Speicherbereinigung, obwohl ich vermute, dass sie eher wie Kopien dieser Variablen implementiert sind, in die sie umgewandelt wurden lokale Variablen der verweisenden Entität.

starr/streng/sicher vs. dir das Seil geben, das du willst :

JS devs und Java devs neigen dazu, sich überhaupt nicht zu verstehen, und ich denke, das hat viel damit zu tun, dass die beiden Sprachen auf nahezu entgegengesetzte Seiten dieses speziellen Designspektrums fallen. Ich möchte nicht, dass Sie mich vor mir selbst oder vor den anderen Entwicklern in meinem Team schützen. Ich möchte viel mehr in viel weniger Code tun und alles je nach Situation auf sehr unterschiedliche (aber für eine bestimmte Domäne konsistente) Weise Es gibt absolut Kompromisse zwischen beiden und viele Sprachen tendieren dazu, eher in die Mitte zu fallen.

3
Erik Reppen

Ich denke, eine Abkürzung zu all diesen ist es, genug LISP zu lernen, um einige halb nützliche Dinge zu tun. Die meisten dieser Paradigmen begannen mit der Verwendung von LISP, daher ist es eine einfache Möglichkeit, Dinge auszuprobieren.

Es gibt eine Reihe von "Arten" von Sprachen, aber es können immer neue erscheinen. Grundsätzlich besteht der Zweck einer Sprache darin, die Kodierung von Ideen, Konzepten oder Anforderungen so direkt wie möglich zu ermöglichen. Zu diesem Zweck kann es Situationen geben, in denen bestehende Paradigmen fehlen und möglicherweise ein neues erforderlich ist.

Eine Möglichkeit ist die Oberflächenstruktur. Wie direkt können Sie Ideen präzise codieren, sodass die entsprechende Änderung des Codes auch einfach ist, wenn Sie Ihre Meinung über das, was Sie möchten, ändern, ohne dass die Möglichkeit besteht, Fehler einzuführen.

Eine andere Sichtweise ist die Kontrollstruktur. Wenn die Sprache ausgeführt wird (wenn ja), in welcher Reihenfolge geschehen die Dinge, um das zu erreichen, was Sie wollen? Beispiele sind: einfache direkte Ausführung, Rekursion, Backtrack, Parallelität. Einer, den ich (bescheidener Husten) entdeckte, war differenzielle Ausführung .

Ein weiterer nützlicher Gesichtspunkt ist, dass jedes Mal, wenn eine Datenstruktur entworfen wird, eine Sprache geboren wird. Daten werden von den Anwendungsprogrammen "ausgeführt", die sie durchkämmen und Dinge tun, genauso wie ein Programm nur eine Reihe von Daten (wie Bytecodes) ist, die von einem Interpreter verwendet werden, um Dinge zu tun.

2
Mike Dunlavey

Ich muss hinzufügen, dass es Programmiersprachen für bestimmte Anwendungen gibt. Diejenige, die mir in den Sinn kommt, ist APT (Automatic Programmed Tool)), eine Sprache, die bei der Herstellung von Werkzeugmaschinen verwendet wird.

1
Dave