Was bedeutet „Daten sind nur dumm Code und Code ist nur smart Daten“ zu verstehen? [geschlossen]

StackOverflow https://stackoverflow.com/questions/871833

  •  22-08-2019
  •  | 
  •  

Frage

Ich habe gerade eine Idee in die Struktur und Interpretation von Computerprogrammen :

  

Die Daten sind nur dumm Code und Code ist nur intelligente Daten

Ich kann nicht verstehen, was es bedeutet. Kann jemand mir helfen, es besser zu verstehen?

War es hilfreich?

Lösung

Dies ist eine der grundlegenden Lehren aus SICP und einer der mächtigsten Ideen der Informatik. Es funktioniert wie folgt:

Was wir als „Code“ hat nicht wirklich die Kraft, alles selbst zu tun. Code definiert ein Programm nur im Kontext der Interpretation - außerhalb dieses Kontextes, es ist nur ein Strom von Zeichen ist. (.. Wirklich ein Strom von Bits, die wirklich ein Strom von elektrischen Impulsen sind aber lass es einfach halten) Der Sinn Code wird durch das System definiert, in dem Sie es ausführen - und diesem System nur wie Daten behandelt Ihren Code, der ihm sagt, was Sie tun wollte. C-Quellcode wird durch einen C-Compiler als Daten beschreibt eine Objektdatei Sie es erstellen möchten interpretiert. Eine Objektdatei wird durch den Lader als Daten beschreiben einige Maschinenbefehle Sie zur Ausführung anstehen wollen behandelt. Maschinenbefehle durch die CPU als Daten, die die Folge von Zustandsübergängen interpretiert werden, sollten sie unterzogen werden.

interpretierte Sprachen enthalten oft Mechanismen für die Daten als Code zu behandeln, was bedeutet, dass Sie Code in eine Funktion in irgendeiner Form passieren können und es dann ausführen - oder auch Code zur Laufzeit erzeugen:

#!/usr/bin/perl
# Note that the above line explicitly defines the interpretive context for the
# rest of this file.  Without the context of a Perl interpreter, this script
# doesn't do anything.
sub foo {
    my ($expression) = @_;
    # $expression is just a string that happens to be valid Perl

    print "$expression = " . eval("$expression") . "\n";
}

foo("1 + 1 + 2 + 3 + 5 + 8");              # sum of first six Fibonacci numbers
foo(join(' + ', map { $_ * $_ } (1..10))); # sum of first ten squares

Einige Sprachen wie Schema haben ein Konzept der „First-Class-Funktionen“, was bedeutet, dass Sie eine Funktion als Daten behandeln und es um passieren, ohne es zu der Bewertung, bis Sie wirklich wollen.

Das Ergebnis ist, dass die Trennung zwischen „Code“ und „Daten“ ziemlich willkürlich ist, nur eine Funktion der Perspektive. Der Abstraktionsgrad niedriger, der „intelligentere“ hat der Code sein: es hat mehr Informationen darüber enthalten, wie sie ausgeführt werden sollen. Auf der anderen Seite, desto mehr Informationen der Dolmetscher liefern, desto mehr stumm können der Code sein, bis es wie Daten ohne Smarts überhaupt zu suchen beginnt.

Einer der mächtigsten Möglichkeiten, Code zu schreiben, ist als eine einfache Beschreibung dessen, was Sie brauchen: Daten, die in den Code eingeschaltet wird, das beschreibt, wie Sie bekommen, was Sie von der interpretativen Kontext benötigen. Wir nennen diese "deklarative Programmierung" .

Für ein konkretes Beispiel betrachten HTML. HTML keine Turing-vollständige Programmiersprache beschreiben. Es ist lediglich Daten strukturiert. Seine Struktur enthält einige Smarts, dass sie das Verhalten ihrer interpretativen Kontext steuern lassen - aber nicht viel Köpfchen. Auf der anderen Seite, es enthält mehr Köpfchen als die Absätze des Textes, der auf einer durchschnittlichen Web-Seite angezeigt werden. Das sind ziemlich dumm Daten

Andere Tipps

Im Rahmen der Sicherheit: Durch Pufferüberlauf, was Sie als Daten gedacht und somit harmlos (wie ein Bild) als Code ausgeführt werden und Ihre Maschine p0wn

.

Im Rahmen der Software-Entwicklung: Viele Entwickler haben große Angst vor „Hardcoding“ Dinge und sehr scharf auf Parameter zu extrahieren, die in Konfigurationsdateien könnten sich ändern müssen. Dies wird häufig basiert auf der Idee, dass Konfigurationsdateien sind nur „Daten“ und somit leicht geändert werden können (perhapy von Kunden), ohne die Fragen zu aufwerfen (Erstellung, Bereitstellung, Prüfung), dass alles im Code ändern würde.

Was diese Entwickler nicht weiß, ist, dass diese „Daten“, da das Verhalten des Programms beeinflussen, ist es wirklich Code ist; es könnte das Programm und der einzige Grund, brechen nicht vollständige Prüfung benötigen, um nach einer solchen Änderung ist, dass, wenn es richtig gemacht, haben die konfigurierbaren Werte eine sehr spezifische, gut dokumentierte Wirkung und alle ungültigen Wert oder eine gebrochene Dateistruktur wird durch gefangen werden das Programm.

Doch alle zu, was oft passiert, ist, dass die Konfigurationsdatei Struktur eine Programmiersprache in seinem eigenen Recht wird, komplett mit Steuerfluss und alles - eine, die schlecht dokumentiert ist, hat eine schrullige Syntax und Parser und die nur die erfahrensten Entwickler im Team die Anwendung vollständig, ohne zu brechen berühren kann.

Also, in einer Sprache wie Scheme, auch Code wird als First-Class-Daten behandelt. Sie können viele Funktionen und Lambda-Ausdrücke behandeln, wie Sie anderen Code behandeln, sagen sie in anderen Funktionen und Lambda-Ausdrücke übergeben. Ich empfehle, mit dem Text weiterhin als das alles ganz klar wird.

Das ist etwas, das Sie kommen soll vom Schreiben in einem Compiler zu verstehen.

Ein gemeinsamer Schritt in Compiler ist das Programm in einen abstrakten Syntaxbaum zu verwandeln. Darstellung wird oft wie Bäume sein wie [+, 2, 3], wobei + die Wurzel, und 2, 3 sind die Kinder.

Lisp Sprachen einfach behandelt dies als seine Daten. So gibt es keine Trennung zwischen Daten und Code, die beide Listen sind, die wie AST Bäume sehen.

-Code ist auf jeden Fall Daten, die Daten sind jedoch auf jeden Fall nicht immer Code. Nehmen wir ein einfaches Beispiel - Kundennamen. Es ist nichts mit dem Code zu tun, es ist ein funktional (wesentlich), im Gegensatz zu einem technischen (versehentlichen) Aspekte einer Anwendung.

Sie könnten wahrscheinlich sagen, dass jeder technischer / versehentlicher Datencode ist und dass Funktions / wesentliche Daten nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top