Ein anderes Maß für die Leistung als die Vollständigkeit

18

Ursprünglich habe ich versucht, dies bei StackOverflow zu erfragen, aber es war zu subjektiv :-(. Ich interessiere mich für Methoden zur Definition der Leistungsfähigkeit von Programmiersprachen. Die Vollständigkeit ist eine, aber sie ist fast allgemein zufrieden Leistungsmaß, das zwischen den tatsächlich verwendeten Programmiersprachen unterscheidet: Kann zum Beispiel jemand eine nicht subjektive Methode vorschlagen, die zwischen Assembly und Java unterscheiden würde?

Vollständigkeit zu beurteilen bedeutet, dass eine Sprache in Bezug auf das, was sie ausgeben kann, maximal leistungsfähig ist (was so ziemlich bedeutet, dass sie in der realen Welt alles kann, was nicht auf Zeit basiert). Wenn wir also ein stärkeres Maß an Macht definieren wollen, müssen wir einen anderen Ansatz wählen. In der ursprünglichen Frage wurde eine Kürze vorgeschlagen, die jedoch nicht einfach zu definieren ist. Hat jemand noch andere Vorschläge?

Casebash
quelle

Antworten:

24

Der Begriff, den Sie suchen, heißt Ausdruckskraft und Matthias Felleisen hat eine mathematisch strenge Definition:

" Über die Ausdruckskraft von Programmiersprachen "

www.ccs.neu.edu/scheme/pubs/scp91-felleisen.ps.gz (Postscript-Version)

Die Idee dahinter ist, dass Sie, wenn Sie zwei gleichwertige Programme in zwei verschiedenen Sprachen haben, z. B. Programm A in Sprache X und Programm B in Sprache Y, eine lokale Änderung an A vornehmen, die eine globale Änderung an B erfordert , dann ist X ausdrucksvoller als Y.

Ein Beispiel, das Felleisen zur Verfügung stellt, ist die Zuweisung: In den Scheme-Programmiersprachen können Sie den Zuweisungsoperator entfernen und haben dennoch eine vollständige Turing-Sprache. In einer solchen eingeschränkten Sprache würde das Hinzufügen einer Funktion, die lokalisiert werden würde, wenn die Zuweisung zulässig wäre, jedoch eine globale Änderung des Programms ohne Zuweisung erfordern.

Meine Diskussion hat einige Details vereinfacht, und Sie sollten das Papier selbst lesen, um den vollständigen Bericht zu erhalten.

Um Ihre andere Frage zu beantworten: Sie können sagen, dass Java ausdrucksvoller ist als Assembly, weil Sie Ihrem Java-Programm eine neue Klasse hinzufügen und dann die Vorteile des Polymorphismus nutzen können, indem andere Teile Ihres Programms seine Methoden ohne globale Änderung aufrufen. Die Ausnahmebehandlung ist ein weiteres Beispiel, bei dem Java aussagekräftiger ist als Assembler: Sie müssen lediglich eine einzelne throwAnweisung schreiben , um die Steuerung des Stacks zu übertragen. Auf einer grundlegenderen Ebene können Sie caseam Anfang von auch eine neue Anweisung hinzufügen switch, ohne sich um die Neuberechnung von Sprungoffsets von Hand kümmern zu müssen.

Macneil
quelle
Vielen Dank! Genau das habe ich gesucht!
Casebash
6

Wenn ich Ihre Frage richtig verstehe, suchen Sie dennoch nach etwas, das relativ messbar ist und nicht nur ein subjektives Urteilsvermögen. In diesem Fall würde ich persönlich den Zeitaufwand für die Lösung eines bestimmten Problems begrüßen (gemittelt über alle Probleme und alle Programmierer). Bei dieser Maßnahme müssen Sie möglicherweise nicht nur die Sprache selbst, sondern auch das damit verwendete Framework / API berücksichtigen. Die prägnante Syntax ist ein sehr kleiner Faktor: Viel wichtiger ist, dass die am häufigsten benötigten Funktionen leicht zugänglich sind.

Wenn Sie etwas subjektiveres suchen, würde ich sagen, wie viel Spaß es macht . Programmierer sind in der Regel Leute, die wollen, dass Probleme gelöst werden. Eine Programmiersprache, die den Programmierern Spaß macht, wird daher unweigerlich diejenige sein, die die meisten Probleme löst. Diese Maßnahme berücksichtigt, dass unterschiedliche Personen unterschiedliche Vorlieben in Bezug auf den Umgang mit Dingen haben, sodass die „beste“ Programmiersprache diejenige ist, die die meisten Programmierer anspricht. Möglicherweise müssen Sie jedoch nicht nur die Programmiersprache und die API berücksichtigen, sondern auch die Umgebung (IDE), mit der der Programmierer natürlich tatsächlich interagiert.

Timwi
quelle
Ich würde sagen, dass das Messen der Zeit auch subjektiv ist. Welcher Programmierer hat sich die Zeit genommen? Wenn Sie die Zeiten beider Sprachen mit demselben Programmierer testen, welche Sprache konnte er dann besser? Es gibt statistische Möglichkeiten, damit umzugehen, aber eine Person könnte es nicht alleine schaffen.
John Fisher
1
@ John: Nur weil etwas nur statistisch analysiert werden kann, heißt das nicht, dass es subjektiv ist.
David Thornley
@ David: Das war nicht wirklich mein Punkt. Der Punkt war, dass der Fragesteller ohne eine vorbestehende Studie nicht in der Lage wäre, die "Kraft" der Sprachen, die ihm am Herzen liegen, zu vergleichen - subjektiv, wenn sie nicht über eine große Gruppe statistisch analysiert werden.
John Fisher
1

Ich würde definieren, wie mächtig eine Sprache ist, indem Sie festlegen, wie produktiv Sie damit sein können. Viele Leute neigen dazu, schnell über Produktivität beim Schreiben von Code zu sprechen, aber da der größte Teil des Lebenszyklus eines Programms aus Wartung und nicht aus Entwicklung besteht, ist es besser, wie einfach Sie den Code lesen und debuggen können, insbesondere wenn er von jemandem geschrieben wurde sonst. Die mächtigsten Sprachen sind diejenigen, die am einfachsten zu lesen und zu pflegen sind.

Mason Wheeler
quelle
2
Die Schwierigkeit dabei ist, dass es für den, der es kennt, einfacher ist, eine Sprache zu kennen. Diese Maßnahme wird also subjektiv.
John Fisher
1

Sie müssen Ihre Terminologie besser definieren.

Bei der Vollständigkeit von Turing geht es nicht um "Macht" in dem Sinne, wie Sie es wahrscheinlich meinen. Es geht vielmehr um Berechenbarkeit; dh ob eine bestimmte Sprache ein Programm ausdrücken kann, das mit einer Turing-Maschine implementiert werden kann. Es stellt sich heraus, dass nahezu jede Programmiersprache Turing vollständig ist.

Was Sie wahrscheinlich suchen, ist ein Maß für die so genannte Programmiersprache "Ausdruckskraft". Ich bin mir nicht sicher, ob es eine solche Maßnahme gibt oder ob sie sinnvoll ist. Grundsätzlich sind verschiedene Programmiersprachen besser in der Lage, Lösungen für verschiedene Arten von Problemen auszudrücken.

BEARBEITEN

Nur um es auszudrücken, Programmiersprachen haben keine Eigenschaft, die als "Macht" bekannt ist. Es gibt ein Konzept, das allgemein als "Ausdruckskraft" oder "Ausdruckskraft" einer Programmiersprache bekannt ist. Bei Expressivität geht es zum Teil darum, wie einfach es ist, prägnante Programme zu schreiben, um bestimmte Probleme anzugehen. Es gibt aber auch ein beträchtliches Maß dafür, wie einfach es ist, die Programme zu lesen und zu schreiben. Es ist eine Art "Schönheit". Ich werde es wissen, wenn ich es sehe, aber bitte mich nicht, es zu definieren.

Ein einfacher Vergleich der Zeichenanzahl gibt Ihnen kein ausreichendes Maß an Ausdruckskraft. Andernfalls könnten Sie eine Sprache ausdrucksvoller machen, indem Sie den Quellcode komprimieren ... und das ist Unsinn. Tatsächlich kenne ich kein objektives Maß für Ausdruckskraft, und ich vermute stark, dass keines existiert. Wodurch das Merkmal effektiv unbrauchbar und ziemlich uninteressant wird.

Stephen C
quelle
1
Ich weiß, dass es bei Turing-Vollständigkeit um Berechenbarkeit geht. Wir wissen, dass es auf der Skala der Berechenbarkeit weniger Maßnahmen gibt, wie z. B. Zustandsautomaten. Wir können die Berechnungsfähigkeit jedoch nicht verwenden, um ein darüber liegendes Leistungsniveau zu definieren, da die Turing-Vollständigkeit in Bezug auf die Berechnungsfähigkeit maximal leistungsfähig ist
Casebash,
@Casebash - Sie haben immer noch nicht gesagt, was "Macht" ist.
Stephen C
2
Das ist, weil ich nicht weiß, und das ist der springende Punkt dieser Frage!
Casebash
Wozu antworten Sie dann? Es hätte ein Kommentar sein sollen.
reinierpost 30.01.12
@reinerpost - Der Punkt meiner Antwort ist, im Detail zu erklären, dass die Frage bedeutungslos ist und warum. Grundsätzlich stellt sich die Frage: "Es gibt etwas, das als Ausdruckskraft bezeichnet wird. Ich weiß nicht, was es ist, aber können Sie mir sagen, wie ich es messen soll." Und der Kern meiner Antwort ist, dass 'Ausdruckskraft' ein schlecht definierter Begriff / eine Eigenschaft ist und definitiv kein messbarer / quantifizierbarer. (Und es ist eindeutig eine Antwort und kein Kommentar. Vielleicht haben Sie einfach nicht verstanden, was ich sagen will?)
Stephen C