Einzelnen Beitrag anzeigen

Dax
(Gast)

n/a Beiträge
 
#7

Re: Formelinterpreter, Programmierbarer Tabellenrwchner

  Alt 28. Apr 2009, 23:31
Zitat von Dipl Phys Ernst Winter:
Ich fühle mich durchaus noch normal, habe aber Mathematik steets nur mit Symbolen betrieben!
Ich habe niemals behauptet, dass du nicht normal wärst Aber für jemanden, der keine genauen Kenntnisse deiner Programme hat, sind lange, sinnvolle Bezeichner sehr hilfreich.


Zitat von Dipl Phys Ernst Winter:
Schlagen in welcher hinsicht? Ganz gewiss nicht in der Geschwingigkeit! Auf die kommts aber an!
Los, teste es, wenn du dir so sicher bist Wenn es auf anderen Mitgliederrechnern reproduzierbar ist (ich habe kein Windows mehr, es zu testen), werde ich deine Behauptung akzeptieren. Ansonsten wirst du meine akzeptieren müssen.

Zitat von Dipl Phys Ernst Winter:
40 Jahre Beschäftigung mit Interpretern [...] haben mich gelehrt, dass Laufzeitperformance nur durch Einschränkung der syntaktischen Möglichkeiten zu erreichen ist. Daher habe ich absolut keine Angst, dass irgend ein Parser den Formeleditor hinsichtlich der Geschwindigkeit schlägt.
40 Jahre Erfahrung und noch so viel zu lernen. Respekt Syntaktische Möglichkeiten sind eine Sache, wie man sie nutzt, eine andere. Gut gebaute Interpreter/Compiler parsen die Eingabe nicht bei jedem Durchlauf, sondern einmal am Anfang und erstellen dann auf der Basis Bytecode, der sich als Eingabe für einen tiefer liegenden Interpreter verwenden lässt. Dabei ist _jede_ Variable und _jede_ Funktion nichts weiter als ein Pointer, egal, wie sie vorher hieß, und die Aufrufkosten sind alle exakt gleich (wenn man die Funktionen als leer ansieht), die Zugriffskosten auf den Speicher sowieso. Man kann das Spiel natürlich noch weiter treiben und auf die Bytecode interpretierende Schicht verzichten, stattdessen bastelt man sich einfach direkt Maschinencode und gibt dem Programm, das danach fragt, einen Funktionszeiger. Im konkreten Fall ist natürlich nicht mit Gewissheit auszuschließen, dass dein Parser einen einzelnen Variablenzugriff schneller ausführt als HAM/Assembler, weil in HAM aus verschiedenen Gründen jede Variable eine eigene Klasseninstanz hat und der Zugriff damit eine Pointerindirektion bedingt; allerdings sollte der Nachteil dadurch aufgewogen werden, dass die Indirektion in dein Array letztendlich das selbe kostet - und bei dir ist es eben "nur" Interpretercode, der die Indirektionen ausführt, keine als ganzes ohne Interpreter ausführbare Funktion

Zitat von Dipl Phys Ernst Winter:
Jeder Parser der sinnvolle Bezeichner für Variable verwendet, muß deren Adressen aus Listen suchen, während Variablen, die nur mit einem fest vergebenen Buchstaben bezeichnet werden, direkt adressierbar sind.
Das ist natürlich wahr. Aber wie bereits gesagt sind Parsen und Ausführen getrennte Schritte, und beim parsen geht eine Menge Information verloren, beziehungsweise, die vorhandene Eingabeinformationsmenge wird auf das nötige reduziert. Wenn im (indirekt) ausführbaren Code noch Symbolinformationen stecken, ist das entweder ein Debugfeature und damit ohnehin nicht auf Geschwindigkeit getrimmt oder ein Designfehler.
  Mit Zitat antworten Zitat