Frage

Hier ist ein Auszug aus dem Wikipedia-Eintrag zur Programmiersprache K:

Die geringe Größe des Interpreters und die kompakte Syntax der Sprache ermöglichen es K Anwendungen, vollständig in den Level-1-Cache des Prozessors zu passen.

Was macht K-Programme so klein?Wenn man benutzt ' betreiber in K, map in kompilierter funktionaler Sprache wie Haskell oder gleichwertig for schleife in einer kompilierten imperativen Sprache wie C, ich kann mir auch nicht vorstellen, dass Compiler generieren radikal unterschiedlicher Assembler-Code oder das, was in den Interna des Interpreters passiert, unterscheidet sich sehr von for Schleife.Gibt es etwas Besonderes in K, das seine Laufzeit und Programme so klein macht?

Es gibt eine ähnliche Frage auf SO, aber die Antworten dort klären im Grunde nichts.

War es hilfreich?

Lösung

Es gibt Möglichkeiten, einen sehr kompakten Code zu generieren.Zum Beispiel ein http://en.wikipedia.org/wiki/Threaded_code von Her und gleich.Es ist wahrscheinlich, dass K in irgendeiner Form davon kompiliert ist.

Andere Tipps

Ich bin nicht der Autor der obigen Wikipedia-Aussage, sondern nur jemand, der K ausgiebig benutzt.

Was den Code betrifft, entrollt K keine Schleifen oder nimmt andere Änderungen an der Programmstruktur vor, die seine Größe über das hinaus erhöhen würden, was Sie erwarten.Der ausführbare Interpreter selbst ist winzig.Und die Programme sind in der Regel klein (wenn auch nicht unbedingt so).Es ist nicht die Ausführung bestimmter Anweisungen für das Mapping usw.das macht es wahrscheinlicher, dass der Code selbst alles im Cache ausführt.

K-Programme sind in der Regel klein, weil sie ein kleiner, enger Bytecode im Speicher sind und ihre Syntax tendenziell sehr kleine Codemengen für eine bestimmte Operation liefert.

Vergleichen Sie dieses Java-Programm:

int r=0;
for(int i=0; i<100; i++) {
  r+=i;
}

Gegen dieses K-Programm, um das gleiche Ergebnis zu erzielen:

+/!100

Die Menge des ausgeführten Codes ist ähnlich, aber der vom Programm benötigte Speicherplatz (viel weniger Tippen!) ist weit weniger.K ist ideal für Menschen mit wiederholten Stressverletzungen.

Was die Daten betrifft, tendiert die Ermutigung, an mehreren Datenelementen mit einzelnen Anweisungen zu arbeiten, dazu, den Zugriff sequentiell zu gestalten, auf eine Art und Weise, die für den Cache freundlich ist, und nicht für den wahlfreien Zugriff.All dies macht es lediglich wahrscheinlicher, dass das Programm Cache-freundlich ist.

Aber das sind alles nur Tendenzen und Best Practices innerhalb der Sprache in Kombination mit der ausführbaren Datei K selbst.Wenn Sie große Mengen an zusätzlichem Code, Sonderfällen mit vielen Funktionen verknüpfen und Ihre Indizes randomisieren, bevor Sie auf Ihre Daten zugreifen, ist Ihr Programm für den Cache genauso unfreundlich, wie Sie es erwarten würden.

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