Warum werden mehrere beliebte Programmiersprachen von C beeinflusst? [geschlossen]


23

Die Top 10 Programmiersprachen scheinen laut TIOBE-Index stark von C beeinflusst zu sein:

1. Java

Die Sprache leitet einen Großteil ihrer Syntax von C und C ++ ab, verfügt jedoch über ein einfacheres Objektmodell und weniger Low-Level-Funktionen. - wikipedia.org

2. C

C ist eine der am häufigsten verwendeten Programmiersprachen aller Zeiten und es gibt nur sehr wenige Computerarchitekturen, für die es keinen C-Compiler gibt. - wikipedia.org

3. C #

Während der Entwicklung von .NET Framework wurden die Klassenbibliotheken ursprünglich mit einem Compilersystem für verwalteten Code namens Simple Managed C (SMC) geschrieben. Im Januar 1999 gründete Anders Hejlsberg ein Team zum Aufbau einer neuen Sprache, die Cool hieß und für "C-like Object Oriented Language" stand. - wikipedia.org

4. C ++

Es wurde von Bjarne Stroustrup ab 1979 bei Bell Labs als Erweiterung der C-Sprache entwickelt. - wikipedia.org

5. Ziel-C

Objective-C ist eine reflektierende, objektorientierte Programmiersprache, die der C-Programmiersprache Smalltalk-ähnliches Messaging hinzufügt. - wikipedia.org

6. PHP

Er schrieb diese Skripte als CGI-Binärdateien (Common Gateway Interface) für die Programmiersprache C um und erweiterte sie um die Möglichkeit, mit Webformularen zu arbeiten und mit Datenbanken zu kommunizieren. Diese Implementierung nannte er "Personal Home Page / Forms Interpreter" oder PHP / FI. - wikipedia.org

8. Python

Python wurde Ende der 1980er-Jahre entwickelt und im Dezember 1989 von Guido van Rossum bei CWI in den Niederlanden als Nachfolger der ABC-Programmiersprache (von SETL inspiriert) eingeführt, die Ausnahmebehandlungen und Schnittstellen zum Betriebssystem Amoeba ermöglicht. - wikipedia.org

ABC (Programmiersprache) Die Entwickler behaupten, dass ABC-Programme in der Regel etwa ein Viertel der Größe der entsprechenden Pascal- oder C-Programme haben und besser lesbar sind. - wikipedia.org

9. Perl

Perl leiht Funktionen aus anderen Programmiersprachen wie C, Shell Scripting (sh), AWK und sed aus. - wikipedia.org

10. JavaScript

JavaScript verwendet eine Syntax, die von der von C. - wikipedia.org beeinflusst wird

Es scheint, dass die meisten von ihnen ihre Syntax von C entlehnen und / oder zumindest in ihren Anfängen auf verschiedene andere Arten stark beeinflusst werden. Warum?


15
Die Syntax von c like ist nicht die gleiche wie die von c.
Oded

15
Darüber hinaus ist TIOBE ein Junk-Index.
DeadMG

3
Kann ich eher fragen, warum auf C basierende Programmiersprachen populärer sind?
Manoj R

3
@YannisRizos Großartige Rettung der Frage! Das ist jetzt wirklich eine gute Frage.
maple_shaft

16
Weil C ein Nachkomme von ALGOL ist und ALGOL imperative Labguages ​​im Block-Scoping ist, was Abraham für Christen, Juden und Muslime ist.
Ingo

Antworten:


40

Mit dem Aufstieg von UNIX in den 1970er Jahren, seine Standard - Systeme Programmiersprache C wurden schnell die lingua franca der Programmierung Welt. Für eine ganze Weile war C praktisch für jeden Programmierer obligatorisch. Insofern ist es aus zwei Gründen nicht verwunderlich, dass C fast jede Programmiersprache beeinflusst hat, die auf die eine oder andere Weise danach kam:

  • Beim Entwerfen einer neuen Sprache ist es sinnvoll, die Syntax nach Möglichkeit auf eine gängige vorhandene Sprache zu stützen, von der angenommen werden kann, dass sie allgemein bekannt ist.
  • Eine neue Sprache ist mit größerer Wahrscheinlichkeit erfolgreich, wenn die Lernkurve flach ist, und eine Syntax, die einer bereits bekannten Sprache ähnelt, ist im Allgemeinen leichter zu lernen (es sei denn, sie verhält sich trotz der offensichtlichen Ähnlichkeiten radikal anders). Sprachen, die sich die Syntax von C leihen, werden im Allgemeinen schneller erkannt als solche, die dies nicht tun.

Es gab aber auch andere Sprachen, von denen einige noch vor C existierten - es gibt die LISP-Familie (CL, Clojure und Scheme sind die beliebtesten modernen Dialekte), die ML-Familie (mit mehreren modernen Dialekten), von denen es eine ganze Armee gibt Es gibt BASIC-Dialekte (VB.NET und VBA sind moderne Implementierungen), Pascal und seine Verwandten (Delphi ist die bekannteste) und viele 'seltsame' Sprachen, die Einflüsse aus vielen anderen Sprachen aufnahmen und einige Dinge selbst erfanden. Beispiele hierfür sind Go, Python, Lua, Haskell (und sein Vorgänger Miranda), Prolog und Erlang. Obwohl keine dieser Sprachen (außer Python) in Ihren Top 10 aufgeführt ist, verfügen viele von ihnen über eine stabile Benutzerbasis und eine aktive Community. sie gehen bestimmt nicht weg.

Es sollte auch beachtet werden, dass der C-Einfluss in diesen Sprachen sehr unterschiedlich ist und von den fast 100% C-kompatiblen Sprachen C ++ und Objective-C bis hin zu Python reicht (das bewusst viele der Syntaxfunktionen von C aufgibt). Und das ist nur die Syntax: In Bezug auf die Semantik haben die meisten Sprachen auf dieser Liste nicht viel mit C zu tun. Die überwiegende Mehrheit verfügt über eine in die Sprache integrierte Speicherverwaltung und folglich über Kopiersemantik, Übergabe von Argumenten usw. , sind sehr verschieden. JavaScript hat zum Beispiel starke semantische Einflüsse von Scheme, während seine Syntax Java ähnelt (das wiederum seine Bits-and-Pieces-Syntax auf C basiert, aber nicht seine Semantik). Andere Unterschiede (mit Ausnahme von C ++ und Objective-C, die zum größten Teil abwärtskompatibel mit C sind) sind Fehlerbehandlung, Bereichsregeln,#include) und die Tatsache, dass viele dieser Sprachen "virtualisiert" sind, dh, dass sie auf einem Interpreter, JIT-Compiler oder einer virtuellen Maschine ausgeführt werden.

Python hat übrigens einen gewissen C-Einfluss, basiert aber sicherlich nicht auf C. Sowohl die Syntax als auch die Semantik unterscheiden sich radikal von C, und dies ist beabsichtigt. Python leiht nur Features von C aus, bei denen andere Alternativen gleichermaßen "gut" sind (gemäß "Zen of Python" - geben Sie import thiseinen Python-Interpreter ein).

Was die Zukunft der Programmierung betrifft; Vorhersagen variieren. Der Einfluss von C lässt nicht nach, aber die jüngsten Entwicklungen in der Hardware (Multi-Core-Maschinen werden alltäglich, leistungsfähige GPUs, die CPU wird nicht mehr der typische Leistungsengpass, schnelle, zuverlässige Netzwerkverbindungen usw.) erfordern radikal andere Programmieransätze im Allgemeinen. Jeder, der jemals eine verteilte Multithread-Anwendung in einer imperativen Sprache geschrieben hat, kann feststellen, dass dies unglaublich schwierig ist, während Sprachen wie Haskell über Funktionen verfügen, die die meisten typischen Probleme beseitigen und einen abstrakteren und strukturierteren Ansatz für die verteilte, gleichzeitige und parallele Verarbeitung bieten (Reinheit ist in diesem Zusammenhang ein wichtiges Konzept). Neuere Programmiersprachen (z. B. C # oder D) enthalten bereits viele Funktionen zur Unterstützung eines solchen Idioms. Auf jeden Fall,


Nette Antwort, aber "CPU hört auf, der typische Leistungsengpass zu sein"? Nach meiner Erfahrung treten zahlreiche Leistungsprobleme auf - CPU, IO, wie Sie es nennen. Andernfalls werden keine Profiler benötigt, obwohl diese nicht sehr effektiv sind.
Mike Dunlavey

6
@MikeDunlavey: Normalerweise werden die Engpässe durch E / A, Netzwerkbetrieb, CPU-Cache-Leistung, Busdurchsatz und (ineffiziente) Interprozesskommunikation verursacht. Damals war die CPU fast zwangsläufig der Engpass. das stimmt einfach nicht mehr.
tdammers

1

Dies ist mit der Frage vergleichbar, warum Englisch die dominierende Sprache in den USA ist. Warum nicht Spanisch oder Französisch? Sie kontrollierten mehr das US-Territorium als die englischen Kolonien. Warum nicht Niederländisch? Die erste US-Hauptstadt befand sich in einer ehemaligen niederländischen Kolonie. Ich bin mir nicht sicher, ob es möglicherweise eine "Antwort" darauf geben kann.

Die "Computer Languages ​​History" -Zeitleiste ( http://www.levenez.com/lang/ ) bietet jedoch alle möglichen Antworten.


6
Denn Großbritannien war von 1600 bis 1880 in etwa das wichtigste Industrie- und Finanzkraftwerk der Welt, gefolgt von den Vereinigten Staaten von 1880 bis heute (<- umstritten). Es wurde zur Sprache des internationalen Geschäftsverkehrs und wird von weit über 2 Milliarden Menschen weltweit fließend gesprochen. Das und niemand möchte Spanisch oder Niederländisch sprechen :)
maple_shaft

6
@maple_shaft - "niemand möchte Spanisch sprechen" ?! ... wissen Sie überhaupt, in wie vielen Ländern gesprochen wird? en.wikipedia.org/wiki/Spanish_language
Rook

12
@ S.Lott: Sie meinen den Teil, in dem das britische Empire das größte Imperium war, das es je gab, und der 25% der gesamten Weltfläche einnahm? Diese Art von "nicht mächtig"?
DeadMG

3
@DeadMG: Ich spreche nicht über die Welt. Ich spreche von den USA im 18. Jahrhundert, als die Franzosen die Briten in einem kleinen Gebiet entlang der Küste einsperren ließen. Ich spreche von den Briten, die nur in diesem Theater militärische Verpflichtungen verlieren. Die Franzosen kontrollierten eindeutig den größten Teil dessen, was zu den USA wurde. Noch. Die USA sprachen Englisch. Nicht französisch. Die gleiche Analyse gilt für C. Es ist eine komplexe Geschichte mit vielen Einflussfaktoren. Es gibt keine triviale Antwort.
S.Lott

4
@S.Lott Die Franzosen haben nicht jede einzelne Begegnung gewonnen. Wenn man sich nur Nordamerika ansieht, haben sie die Mehrheit gewonnen. Aber der Verlust von 4 der 5 großen Schlachten in NA in den Jahren 1559/60 führte zu einer vernichtenden Niederlage im Theater. Die Eroberungen von Forts Ticonderoga und Niagara, The Plains of Abraham und die Schlacht von Restigouche waren allesamt britische Siege. Letzteres machte den französischen Sieg bei Sainte-Foy irrelevant, indem es das Angebot / die Verstärkung unterbrach.
Dan Neely

0

Wenn Sie eine neue Programmiersprache erstellen, wird das Lernen für Ihre neuen Benutzer durch eine Syntax erleichtert, die mit den gängigen vorhandenen Sprachen vergleichbar ist. Vor allem, wenn viele Konzepte zwischen Sprachen ähnlich sind.

Ich denke auch, dass die Syntax im C-Stil relativ einfach zu lesen ist. Im Vergleich zu Pascal sind die Symbole "{" und "}" für Codeblöcke besser lesbar als "begin" und "end", die optisch den Bezeichnern sehr ähnlich sind. Python ist noch besser lesbar, aber das Einfügen von Leerzeichen in die Syntax führt zu neuen Problemen bei der Bearbeitung. Ein weiteres Beispiel: Lisp und JavaScript haben ein paar Ideen gemeinsam, aber wenn dasselbe in C-Syntax geschrieben ist, ist es weniger undurchsichtig.

Ich bin sicher, dass viele Leute mit dem zweiten Absatz nicht einverstanden sind, weil jeder seine eigene Lieblingssprache hat, aber ich denke, dass die Beliebtheit der C-Syntax teilweise ein historischer Zufall ist, aber teilweise zeigt es auch, dass Autoren von C ein paar gute gemacht haben Entscheidungen.


-1

Programmiersprachen entwickeln sich im Laufe der Zeit wie natürliche Sprachen, wobei einige ältere Sprachen diese Entwicklung stärker beeinflussen als andere, während andere in Vergessenheit geraten und ihr Einfluss auf Oberflächenebene, dh in der Syntax, schwerer nachzuvollziehen ist.

Der Einfluss von C kommt aus vielen Quellen - es ist auf niedrigem Niveau, weit verbreitet und wurde sowohl in Unix- als auch in Microsoft-Kreisen unterstützt. Es ist auch das Überleben des stärksten Problems - es ist leicht zu erkennen, dass eine knappe C-ähnliche Syntax attraktiver war als die wortreiche, von Algol abgeleitete Syntax von Pascal und anderen Konkurrenten von C in den 1970er und 1980er Jahren. Daher wurde es von den Sprachen, die danach kamen, weithin angenommen.

Angesichts der zunehmenden Bedeutung von Multithread-Programmen und funktionalen Sprachen würde ich sagen, dass ihr Einfluss in Zukunft zunehmen wird. Ein typisches Beispiel: Python, das diese Liste sogar in den Fragenbeitrag aufgenommen hat.

Eine schöne Zeitleiste der Sprachgeschichte zum Nachdenken


Du hast es falsch verstanden. Sowohl PASCAL als auch C sind ALGOL-Nachkommen.
Ingo

Stimmt, aber Algol selbst ist Fortrans Nachkomme und hat einige der Konstrukte ausgewählt, auf die ich mich dort bezog (Programm, Ende, Subroutine im Vergleich zu cs Klammern). Was ich jedoch im Sinn hatte, war eine Algol-ähnliche Syntax. Bearbeitet
Scrwtp

Die knappe C-artige Syntax war dafür attraktiver als die von Algol abgeleitete Syntax von Pascal und anderen Konkurrenten von C in den 70er und 80er Jahren +1. beginnen Programmierer Menschen sind auch am Ende beginnen diejenigen , die glaubten , dass es Interpunktionszeichen zur Karte bequem ist , um Worte beginnen Ende wie ihre Schlacht zu geschweiften Klammern verloren die Geschichte enden
gnat

Ich sehe keine Beweise dafür, dass die C-Syntax weniger undurchsichtig ist, außer in dem Sinne, dass die meisten Entwickler C oder eine Art von C-bezogener Sprache kennen und sie daher vertrauter erscheint. AFAICT, C überzeugte Pascal durch seine Struktur und die Tatsache, dass Implementierungen keine eigenen Verknüpfungen und keine eigene Syntax benötigen.
David Thornley

@ David-Soweit ich mich erinnere, war einer der Gründe, warum C sich gegen andere Sprachen durchgesetzt hat, die relativ einfache Zugriffsmöglichkeit auf Speicher in C (dh Zeiger). Ich weiß, dass sie jetzt verrückt sind, aber damals, als 1 KB RAM viel Speicher war, war das ein sehr mächtiges Merkmal der Sprache. Ich weiß, dass andere Sprachen Zeiger wie Funktionen bereitgestellt, aber keine so einfach wie C.
Dunk

-3

Die meisten der von Ihnen aufgelisteten Sprachen haben praktisch nichts mit C zu tun, abgesehen von irrelevanten syntaktischen Ähnlichkeiten. Die einzigen beiden tatsächlichen C-Derivate sind Objective-C und C ++.


Wenn wir die Syntax nicht berücksichtigen, sind die einzigen Unterschiede zwischen allen Sprachen die Verfügbarkeit allgemeiner Sprachkonstrukte (Schleifen, Bedingungen, Variablen, Abstraktionen davon wie Klassen und Abschlüsse usw.) und dass sie alle dem Verhalten der Maschine entsprechen Code. Alle Low-Level-Sprachen sind einander ähnlich und alle High-Level-Sprachen sind sich zu diesem Zeitpunkt extrem ähnlich.
maple_shaft

2
Sie sollten sich eine Sprache nicht so vorstellen, wie sie funktioniert, sondern wie sie das Anwendungsverhalten kommuniziert. Ihr Quellcode ist Ihre niedrigste Dokumentationsstufe und einer schreibt Quellcode für Personen und NICHT für Maschinen . Wenn wir Code ausschließlich für Maschinen schreiben würden, würden wir alle in Assembler codieren.
maple_shaft

1
@maple_shaft: Ganz richtig! In einem Interview wurde ich gebeten, den Unterschied zwischen Maschinensprache (Assembler) und Programmiersprache zu erklären. Meine Antwort war: "Maschinensprache ist für Maschinen, Programmiersprache ist für Programmierer."
Treb

1
@maple_shaft: Die Syntax ist für die Kommunikation mit Menschen irrelevant . Wenn ich ein englisches Wort durch eine andere Schreibweise ersetzen würde, wäre Englisch immer noch dieselbe Sprache. Die syntaktische Form ist irrelevant, kommunikativ ist die Sprachsemantik.
DeadMG

3
@DeadMG: Aber die Frage ist , über Syntax. Sie können die syntaktischen Ähnlichkeiten als irrelevant betrachten, aber die Person, die die Frage stellt, möchte wissen, warum diese irrelevanten Ähnlichkeiten existieren .
Nicol Bolas
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.