Was ist der Unterschied zwischen einer Skriptsprache und einer normalen Programmiersprache?

20

Was ist der Unterschied zwischen Programmiersprache und Skriptsprache? Betrachten Sie beispielsweise C gegen Perl.

Ist der einzige Unterschied, dass Skriptsprachen nur den Interpreter und kein Kompilieren und Verknüpfen erfordern?

SS Hegde
quelle
4
Ich fürchte, das ist hier nicht aktuell. Was Sie wissen möchten, ist lediglich eine Frage der Sprachimplementierung. Es scheint auch oberflächliche / Meinungsantworten anzuziehen (nicht Ihre Schuld an sich), was immer eine rote Fahne ist.
Raphael
Hardware ist ein "Interpreter" für kompilierte Sprachen. Der einzige Unterschied ist also, wie viele Dolmetscher Sie durchlaufen. Wenn die Maschine Turing-äquivalent ist und Sie eine Sprache verwenden, die Turing-äquivalent ist, können Sie einen kompilierten Interpreter Ain der Sprache schreiben, dann einen Interpreter Bin der Sprache, die der Interpreter Aausführen kann, und einen Interpreter Cin der Sprache, die der Interpreter Bausführen kann usw. Im Wesentlichen handelt es sich um eine Indirektionssache, die weniger mit theoretischen Berechnungsgrundlagen als vielmehr mit praktischen technischen Belangen zu tun hat.
Patrick87
Gehälter (vor DevOps)
Phil Lello

Antworten:

21

Ich denke, der Unterschied hat viel mehr mit der beabsichtigten Verwendung der Sprache zu tun.

Zum Beispiel wird Python interpretiert und erfordert kein Kompilieren und Verknüpfen wie Prolog. Ich würde beide als Programmiersprachen klassifizieren.

Programmiersprachen sind zum Schreiben von Software gedacht. Sie sind für die Verwaltung großer Projekte konzipiert. Sie können wahrscheinlich Programme aufrufen, Dateien lesen usw., sind aber möglicherweise nicht so gut darin wie eine Skriptsprache.

Skriptsprachen sind nicht für die umfangreiche Softwareentwicklung gedacht. Ihre Syntax, Funktionen, Bibliothek usw. konzentrieren sich eher darauf, kleine Aufgaben schnell zu erledigen. Dies bedeutet, dass sie manchmal "hackiger" sind als Programmiersprachen und möglicherweise nicht alle die gleichen netten Funktionen haben. Sie wurden entwickelt, um häufig ausgeführte Aufgaben, wie das Durchlaufen einer Reihe von Dateien oder das Ausführen von Sysadmin-Aufgaben, zu automatisieren.

Beispielsweise kann Bash nicht gut rechnen, was wahrscheinlich das Schreiben von umfangreicher Software zu einem Albtraum machen würde.

Als eine Art Benchmark: Ich würde niemals einen Musik-Player in Perl schreiben, obwohl ich das wahrscheinlich könnte. Ebenso würde ich nie versuchen, C ++ zu verwenden, um alle Dateien in einem bestimmten Ordner umzubenennen.

Diese Linie wird immer unschärfer. JavaScript, per Definition eine "Scripting" -Sprache, wird zunehmend verwendet, um "Web-Apps" zu entwickeln, die eher im Bereich von Software liegen. Ebenso passt Python anfangs zu vielen Merkmalen einer Skriptsprache, es wird jedoch immer mehr Software entwickelt, die Python als primäre Plattform verwendet.

jmite
quelle
1
+1 für das reale Beispiel: Ich kann mir nicht vorstellen, gezwungen zu sein, C ++ zu verwenden, um Batch-Rename-Aufgaben auszuführen!
Casey Kuball
3
Sie geben keine konzeptionellen Unterschiede an, nur die Meinung der Bevölkerung zu den jeweiligen Anwendungsfällen.
Raphael
3
Würden Sie auch das weltweit größte soziale Netzwerk in Skriptsprache (FB in PHP) "nicht schreiben", einen der ersten Blogging-Dienste, der für den gesamten Trend wirbt (LJ in Perl), ein Versionskontrollsystem, mit dem problemlos Tausende von Entwicklern zusammenarbeiten können (Mercurial)? in Python)? Tut mir leid, aber dieses "Scripting ist für kleine Aufgaben" ist nur ein beliebter Modemüll.
Oleg V. Volkov
1
@Raphael Ich denke, die konzeptuellen Unterschiede sind bestenfalls unscharf. Der Hauptunterschied liegt in der populären Verwendung, IMO. Die meisten dieser Sprachen werden vollständig sein und einem ähnlichen Berechnungsmodell folgen. Ich bin noch nie auf eine formale Unterscheidung oder Definition gestoßen, kann aber meine Antwort jederzeit bearbeiten, wenn Sie eine haben.
Jmite
3
@Raphael Das ist ein Teil des Punktes: Es gibt keine konzeptionellen Unterschiede. Was Sie bei der Kompilierung im Vergleich zur Laufzeit tun können, hängt in erster Linie von der Interpretation im Vergleich zur Kompilierung ab. Dies ist eine Eigenschaft der Implementierung und nicht der Sprache (obwohl der Sprachentwurf ein bestimmtes Implementierungsmodell schwierig machen kann).
Gilles 'SO- hör auf böse zu sein'
6

Der klassische Artikel über Skriptsprachen ist John K. Ousterhouts Scripting: Higher-Level-Programming für das 21. Jahrhundert , veröffentlicht in Computer 31 (3), 1998. Er unterschied zwischen Skriptsprachen einerseits und Systemprogrammiersprachen andererseits das andere.

Ousterhout charakterisierte Systemprogrammiersprachen als entwickelt, um Maschinensprachen für die Programmierung zu ersetzen. Sie verbergen mühsame Details wie die Registerzuweisung und Aufrufen von Unterprogrammen, stellen einfache Konstrukte zum Schreiben von Schleifen und anderen gängigen Kontrollfluss-Idiomen bereit und erzwingen eine Schreibdisziplin. Sie werden normalerweise von einem (vorzeitigen) Compiler implementiert. Diese Sprachen sind dazu gedacht, Software von Grund auf zu schreiben. Beispiele sind C, C ++ und Java.

Im Gegensatz dazu gehen Skriptsprachen laut Ousterhout davon aus, dass es bereits nützliche Programme gibt, die normalerweise in Systemprogrammiersprachen geschrieben sind. Skriptsprachen wie Perl, Python, Tcl, Visual Basic und die Unix-Shells bieten Tools zum Kombinieren dieser vorhandenen Programme zu neuen Programmen. Ousterhout charakterisierte Skriptsprachen als "typenlos" (einschließlich dessen, was viele als dynamisches Schreiben bezeichnen) und betonte die rasche Entwicklung. Sie werden in der Regel von Dolmetschern ausgeführt.

Nun muss man darauf achten, nicht anzunehmen, dass das konzeptionelle Modell eines einzelnen Autors maßgebend ist. Obwohl wir Informatiker gerne so tun, als wären wir Mathematiker, die allen Begriffen genaue Definitionen geben, ist in der Praxis die meiste Computerterminologie sozial mit unscharfen und heterogenen Bedeutungen aufgebaut. In Bezug auf die meisten Begriffe herrscht auf sehr hohem Niveau ein grober Konsens, die Einzelheiten hängen jedoch häufig davon ab, wer schreibt. Nehmen Sie also seinen Artikel, meine Antwort und alle anderen Antworten hier mit einem großen Haufen Salz.

Ich persönlich würde die Existenz einer "normalen" Programmiersprache bestreiten, wie Sie es in Ihrer Frage formulieren. Ich denke jedoch, dass das Konzept, das Sie vermitteln möchten, in etwa den Systemprogrammiersprachen von Ousterhout entspricht.

ibid
quelle
2

Alle Skriptsprachen sind auch Programmiersprachen. Das Gegenteil ist nicht wahr. Sprachen, die "nur den Dolmetscher benötigen", sind interpretierte Sprachen (im Gegensatz zu einer kompilierten Sprache - beachten Sie, dass einige Sprachen, wie Java, in beide Kategorien fallen).

Eine Sprache, die als Skriptsprache eingestuft wird, bedeutet, dass sie als "Klebesprache" nützlich ist. Skripte sind in der Regel keine Programme mit vollem Funktionsumfang, sondern füllen die Lücken zwischen anderen Softwareteilen.

Skripte werden normalerweise verwendet, um mehrere Programme miteinander zu verbinden, um grundlegende Aufgaben sehr schnell und einfach auszuführen, oder sogar in einer eingebetteten Umgebung, in der Leistungs- und Sicherheitsbedenken auf eine niedrigere Sprache abstrahiert wurden. Der Schwerpunkt der Skriptsprachen liegt in der Regel auf der Verkürzung der Entwicklungszeit, weshalb die meisten Sprachen interpretiert werden und ein sehr hohes Niveau aufweisen.

Casey Kuball
quelle
Sie geben keine konzeptionellen Unterschiede an, nur die Meinung der Bevölkerung zu den jeweiligen Anwendungsfällen.
Raphael
1

Die eingestellte Skriptsprache ist eine Teilmenge der eingestellten Programmiersprachen. Der Unterschied zwischen C und Perl ist der Unterschied zwischen Systemprogrammiersprache und Anwendungssprache sowie zwischen interpretierter Sprache und kompilierter Sprache.

Systemprogrammiersprachen sind auf niedriger Ebene und auf Speicherverwaltung, vorhersehbare E / A usw. ausgerichtet. Anwendungssprachen sind auf die schnelle Lösung von Problemen auf höherer Ebene ausgerichtet, z. B. "Einstellungen aus Datei lesen, Socket öffnen und Anforderungen entsprechend den Einstellungen verarbeiten".

Daher sind Anwendungssprachen in der Regel viel übergeordneter als Systemsprachen, bieten also eine große Menge an integrierten Abstraktions- und Hilfsfunktionen und fügen häufig eine Art automatisches Speichermanagement hinzu.

Programme in kompilierten Sprachen werden vor der Programmausführung vollständig in Code umgewandelt. Skriptsprachen werden während der Ausführung dynamisch übersetzt und enthalten häufig Funktionen zur dynamischen Codegenerierung und zum Einschließen von Dateien mit Quellcode.

Somit sind alle Skriptsprachen Anwendungssprachen, das Gegenteil ist jedoch nicht der Fall. Systemsprachen sind immer kompilierte Sprachen, da Skriptsprachen normalerweise Funktionen enthalten, deren Implementierung in Bezug auf die Sprache selbst nicht pragmatisch ist. Beachten Sie jedoch, dass es beim Scripting (interpretiert) / kompilierten Unterschied mehr um die Implementierung geht: Für einige Sprachen gibt es möglicherweise beide Arten von Implementierungen, wie für haskell.

permeakra
quelle
Ich denke, es ist ein Trugschluss, diese interpretierte / kompilierte Dichotomie zu zeichnen. Ich glaube auch nicht, dass es sich um eine Teilmengenbeziehung handelt, obwohl die Mengen mit Sicherheit eine nicht leere Schnittmenge haben. Ebenso können hohe und niedrige Pegel die Unterscheidung nicht genau beschreiben. Prolog ist sehr gut, aber keine Skriptsprache wie Bash oder Java.
Jmite
1

Andere haben Attribute behandelt, die in der Regel mit Skriptsprachen und mit Nicht-Skriptsprachen verknüpft sind. Das ist hilfreich, um ein Gefühl dafür zu bekommen, was Menschen meinen, wenn sie den Begriff "Skriptsprache" verwenden, aber ich finde, es ist wichtiger zu verstehen, dass es einfach keine genau definierte Grenze gibt: Zwei sachkundige Personen könnten sich darüber streiten, ob eine bestimmte Sprache X eine ist Skriptsprache. Der Begriff "Skriptsprache" ist dennoch nützlich, da weitgehende Übereinstimmung über Sprachen besteht, die sich weit innerhalb oder weit außerhalb der Grenze befinden.

Vergleichen Sie "Familienauto" mit "Sportwagen" oder "Magazin" mit "Zeitung". Ich gehe davon aus, dass es schwierig wäre, eine 100% zuverlässige Regel zu finden, um jedes Familienauto von jedem verallgemeinerbaren Sportwagen zu unterscheiden (was bedeutet, dass nicht grundsätzlich alle vorhandenen Autos in jeder Kategorie aufgelistet werden) und zumindest potenziell objektiv ( was bedeutet, dass es für alle akzeptabel wäre). Diese Begriffe sind jedoch in der Praxis nach wie vor nützlich, da sich viele Autos in einigen Fällen nur schwer entscheiden lassen, aber eindeutig in die eine und nicht in die andere Kategorie fallen.

j_random_hacker
quelle
0

Ein Unterschied, den ich noch nicht gesehen habe, ist, dass bei bestimmungsgemäßer Verwendung die Ausführungszeit der meisten Skripte von "makroskopischen" Operationen dominiert wird und die Leistung von mikroskopischen Operationen keinen signifikanten Einfluss auf die Gesamtausführungszeit hat. Wenn ein Raytracing-Animationsprogramm beispielsweise eine Skriptsprache mit der Anweisung "Bild rendern" enthält, verbringt ein Skript zum Erzeugen von 240 Frames der Animation möglicherweise vier Stunden in der Anweisung "Bild rendern" und dauert insgesamt vier Sekunden alles andere. Selbst wenn man alles außerhalb der Rendering-Engine um einen Faktor von einer Million beschleunigen würde, hätte dies weniger Auswirkungen auf die Gesamtleistung als eine Beschleunigung der Rendering-Engine um 0,1%.

Superkatze
quelle