2015-11-05T19:00:18.301Z mt joined 2015-11-05T19:00:23.561Z mt: hallo 2015-11-05T19:00:50.484Z bernd: Hallo! 2015-11-05T19:01:29.760Z bernd: Das Problem mit dem Androiden hat sich geklärt: Der fällt einfach in den Tiefschlaf 2015-11-05T19:01:47.366Z bernd: Da muss man dann einen Timer über Java nutzen, der wieder aufweckt. 2015-11-05T19:01:55.479Z mt: Du musst eben mehr tippen ;) 2015-11-05T19:02:02.057Z bernd: Haha. 2015-11-05T19:02:22.871Z bernd: Dann tippe ich jetzt mal vom Händy 2015-11-05T19:02:26.759Z mt: So echte Männergespräche sind nichts für Sensibelchen... 2015-11-05T19:04:07.102Z bernd: Witzigerweise wacht das Handy schön auf, wenn es angesprochen wird. 2015-11-05T19:04:17.908Z bernd: Nur halt die eigenen Keepalive-Pings, die verschläft es dann. 2015-11-05T19:04:42.837Z mt: Schäfchen zählen ist ja auch langweilig... Lernen schon die Kinder 2015-11-05T19:09:25.277Z bernd: Naja, das Problem ist geklärt, jetzt fehlen noch so ein paar Sachen wie Notification, "Palim Palim" und LED-Geblinke, damit man es am Handy sinnvoll nutzen kann. 2015-11-05T19:14:08.703Z mt: Ich versuche grad Antons Mail zu verstehen. Mir scheint, er hat was ganz anderes vor, als ich das bislang dachte. 2015-11-05T19:15:34.814Z mt: Jedenfalls reden wir wunderbar aneinander vorbei 2015-11-05T19:19:27.166Z bernd: Irgendwie hat er sich in der Idee verbissen, das in FIND einzubauen. 2015-11-05T19:20:44.528Z bernd: Jedenfalls habe ich im Gforth den REC:WORD ja so implementiert, dass er tatsächlich das nt als Ergebnis zurück gibt, und dass die Interpreter/Compiler-Aktionen tatsächlich mit NAME>INTERPRET und NAME>COMPILE gemacht werden. 2015-11-05T19:20:54.947Z bernd: Wobei das allerdings halt sehr Gforth-spezifisch ist. 2015-11-05T19:21:58.675Z bernd: Interessant auch, dass er sich bei COMPILE, sehr darüber aufgeregt hat, dass man dann ein paar wenige Wörter wie S" und TO anders behandelt, aber hier keine Bedenken hat, sowas zentrales wie FIND und die Search-Order inkompatibel zu verändern. 2015-11-05T19:22:52.394Z mt: Ich habe da eher das "alte" FIND vor Augen, und habe dessen Ergebnisse übernommen. Klar sind die suboptimal, aber die kennt jeder. 2015-11-05T19:23:23.977Z mt: Wer was neues haben will, kann die Nametokens nehmen. Die sind um einiges praktischer. 2015-11-05T19:24:25.353Z mt: Und ob die Dictionarysuche nun ein paar Millisekunden mehr oder weniger dauert, ist mir reichlich egal. 2015-11-05T19:25:01.769Z mt: Auf PCs sind das eh alles RAM Operationen, spätestens beim zweiten Durchlauf. 2015-11-05T19:25:26.104Z bernd: Ja klar, ich finde auch die Zahl mit einer Milliarde Worter suchen pro Minute ganz nett ;-). 2015-11-05T19:25:42.540Z bernd: Wenn man da mit etwas geschickten Optimierungen auf 2 Milliarden kommt... wer merkt das? 2015-11-05T19:25:51.032Z mt: LOL 2015-11-05T19:26:18.897Z bernd: Das war damals auf dem 68k mit bigForth noch relevanter. 2015-11-05T19:26:37.263Z bernd: Da hat man echt jede Verbesserung wirklich gespürt. 2015-11-05T19:26:43.848Z mt: Auf den Atmegas und MSPs dieser Welt ist das auch noch relevant. 2015-11-05T19:26:55.392Z bernd: Sourcen waren alle im RAM (auf der RAM-Disk), und nicht über eine lahme serielle Schnittstelle. 2015-11-05T19:27:12.209Z bernd: Und da kann man dann schon ein Megabyte Sourcecode compilieren. In Sekunden. 2015-11-05T19:27:28.022Z bernd: Das schaffen heutige C-Compiler auf einem Core i7. 2015-11-05T19:27:33.928Z mt: Kilobytes, bitte. Mit Mega hab ich nichts am Hut ;) 2015-11-05T19:27:58.125Z bernd: Ich hatte auf dem Atari schon etwa ein Megabyte Forth-Quelltext. 2015-11-05T19:28:01.738Z bernd: Mit GEM und Co. 2015-11-05T19:28:11.031Z mt: Ich optimiere noch in Bytes. Findet sich auch nach Jahren mitunter noch so manches, das ich übersehen habe. 2015-11-05T19:29:09.271Z mt: Hat was meditaives... 2015-11-05T19:29:55.015Z mt: Aber eines könnten wir doch klären. 2015-11-05T19:30:40.198Z mt: soll FORTH-RECOGNIZER in den Text oder nicht. Du hast das ja von Anfang an so gehabt, ich hab den Sinn nicht verstanden und deswegen weggelassen. Jetzt kommts wieder 2015-11-05T19:30:57.686Z mt: Als Nested Recognizer.. 2015-11-05T19:32:14.554Z bernd: Die ganzen Anforderungen nach "bitte schnell zwischen zwei verschiedenen Stacks hin und herschalten" legen das jedenfalls nahe. 2015-11-05T19:33:52.885Z mt: Dann macht es auch Sinn, den get/set-stack als get/set-recognizer zu titulieren und die Stack-ID zusätzlich mitzugeben. Irgendwie sehe dann keinen Sinn mehr in den bisherigen get/ste-recognizers. 2015-11-05T19:34:29.796Z mt: Dann noch forth-recognizer als Startpunkt fürs System, und dann wars das. 2015-11-05T19:35:20.507Z bernd: Das wäre auch nicht schlecht, und man könnte noch eine forth-order haben, wobei dann : set-order forth-order set-stack ; ist. 2015-11-05T19:35:45.844Z bernd: Damit das mit dem SET-STACK und GET-STACK ein guter Faktor ist. 2015-11-05T19:36:13.452Z bernd: Braucht man noch ein Defining-Word, STACK: das einen Stack anlegt. 2015-11-05T19:36:29.466Z bernd: Sollte vielleicht die maximale Tiefe als Parameter bekommen. 2015-11-05T19:36:46.787Z mt: Braucht man das wirklich? Wäre eher was für REC EXT, 2015-11-05T19:36:49.418Z bernd: Wenn da dynamischer Speicher dahinter steckt, kann man den Parameter ja ignorieren. 2015-11-05T19:36:58.560Z bernd: Ich würde das eher trennen. 2015-11-05T19:37:20.279Z bernd: Das mit SET-STACK und Co. ist ein Vorschlag, wie man das als Faktor implementiert. 2015-11-05T19:39:05.233Z mt: Mir ist nur set/get-*stack* zu allgemein. Auch will ich vermeiden, dass man auf die Stack-Elemente einzeln mit @/! zugreifen kann. Beim amforth wird das nicht so sein. 2015-11-05T19:39:37.377Z mt: Ich hab solche Konfigurationsstack im EEPROM, da kommen @/! nicht hin 2015-11-05T19:39:41.658Z bernd: Ne, das ist definitiv nicht für Daten- und Returnstack gedacht. 2015-11-05T19:40:16.029Z bernd: Und da SET-STACK und GET-STACK jeweils den kompletten Inhalt auf den Datenstack kippen und von dort holen, können sie das abspeichern, wie sie wollen. 2015-11-05T19:40:26.208Z mt: Deswegen aus set-stack aus dem aktuellen RFD set-recognizer machen und das bisherige set-recognizer einfach löschen 2015-11-05T19:42:07.472Z mt: set-recognizer hat damit einen Parameter mehr als bisher und der Interpreter wird gezwungen, forth-recognizer als Startpunkt zu nehmen. do-recognizer bekommt genauso die stack-id verpasst. 2015-11-05T19:42:56.180Z bernd: Hm, wenn das die ID bekommt, sollte man einen generischeren Namen verwenden. 2015-11-05T19:42:58.463Z mt: Wer einen anderen recognizer stack nehmen will, ruft do-recognizer mit der anderen stack-id auf 2015-11-05T19:43:28.607Z mt: : interpret ... forth-recognizer do-recognizer ... ; 2015-11-05T19:43:42.782Z mt: : my-superduper ... my-stack do-recognizer .. ; 2015-11-05T19:43:43.502Z bernd: Ja, so ungefähr. 2015-11-05T19:43:58.081Z bernd: Aber bei der Diskussion ging es auch darum, schnell mal den Interpreter umzupatchen. 2015-11-05T19:44:10.377Z bernd: forth-recognizer wäre da ein Value, also kannst du etwa sagen 2015-11-05T19:44:28.778Z bernd: forth-recognizer my-stack to forth-recognizer 2015-11-05T19:44:33.806Z bernd: 2015-11-05T19:44:42.981Z bernd: to forth-recognizer \ alter Standard wieder hergestellt 2015-11-05T19:45:32.205Z mt: Und dann kommt analog zu base-execute noch recognizer-execute? 2015-11-05T19:46:13.033Z bernd: So für das Laden von Dateinen kann man das wohl dann evtl. nutzen. 2015-11-05T19:46:17.806Z bernd: Dateien 2015-11-05T19:47:08.444Z mt: Ist VALUE wirklich die beste Idee? Man könnte auch auf USER kommen, Ich würde da aher BASE nachahmen wollen 2015-11-05T19:47:51.788Z mt: So rein aus pädagogischen Überlegungen heraus 2015-11-05T19:48:40.734Z bernd: Ach, die Systeme, die tatsächlich mehreren Threads gleichzeitig das Programmieren erlauben, haben User-Values. 2015-11-05T19:49:46.443Z mt: Für gewöhnlich ist der interpreter aber schon ziemlich leselastig bei seiner Arbeit. 2015-11-05T19:52:13.472Z bernd: Was meinst du? PARSE-NAME geht sehr, sehr fix. 2015-11-05T19:54:30.696Z mt: ne, ich meinte was anderes. 2015-11-05T19:55:46.343Z mt: Wenn der recognizer stack im interpreter schnell umgeschaltet werden soll, muss man den Einstiegspunkt variabel machen. forth-recognizer als value auszuführen ist eine Möglichkeit. Nur kenne ich keine anderen Values, zumindest nicht im Standard. Dort sind nur Variablen. 2015-11-05T19:56:24.966Z mt: Außerdem ist es potentiell möglich, dass der default-wert vom forth-recognizer verloren geht. DAnn braucht man sowas wie FORTH 2015-11-05T19:56:26.347Z bernd: Ja, wahrscheinlich historische Design-Entscheidungen. 2015-11-05T19:56:38.010Z bernd: Oder DEFAULT-RECOGNIZER 2015-11-05T19:56:41.443Z bernd: So wie ONLY FORTH 2015-11-05T19:56:45.190Z mt: Genau 2015-11-05T19:57:14.972Z bernd: -1 SET-ORDER macht auch sowas ähnliches, nur halt "minimale Search Order" 2015-11-05T19:57:23.989Z mt: Daher kann man forth-recognizer auch als Konstante ausführen und dem interpreter eine eigene Variable zugesestehen, die jeder Implementierer selbst nennen darf 2015-11-05T19:57:39.909Z mt: der Interpreter soll ja ohnehin nicht standardisiert werden 2015-11-05T19:57:46.966Z bernd: Nene, dann ist es wieder nicht Standards. 2015-11-05T19:57:55.053Z bernd: Wir wollen einen Satz Standard-Hooks haben. 2015-11-05T19:58:05.224Z bernd: Die Nicht-Standard-Hooks kann jeder so 'reinbasteln, wie er lustig ist. 2015-11-05T19:58:24.437Z mt: Der Recognizer RFC würde dann wirklich nur die BAusteine liefern und keine Vorgaben machen, wie man die im Interpreter benutzt 2015-11-05T19:58:30.702Z bernd: Nur sollten wir nicht jetzt gleich eine Lücke drin lassen, die man dann wieder nur als Nicht-Standard-Hook nutzen kann. 2015-11-05T19:59:03.124Z mt: Sowas kann man dann im Appendix machen, den eh jeder nach Gusto ignoriert 2015-11-05T19:59:06.317Z bernd: Das ist genau das, was Stephen Pelc haben will, weil er dann weiterhin keinen brauchbaren Standard hat, aber seine Systeme mit "sind Standard" stempeln kann. 2015-11-05T19:59:19.318Z bernd: Das ist aber nicht das Ziel von Anton und mir. 2015-11-05T19:59:31.188Z mt: Er ist nunmal Multiplikator ... 2015-11-05T19:59:55.954Z bernd: Sehe ich nicht so. Seine Kunden nutzen nicht Standard-Sachen, sondern VFX-Extras. 2015-11-05T20:00:27.801Z bernd: Und das wird dann jedesmal, wenn man vorschlägt, das jetzt endlich zu vereinheitlichen, als Gegenargument aufgeführt. 2015-11-05T20:01:20.272Z bernd: Jeder kann mit dem Baukasten Recognizer seine eignene Interpreter zusammenbauen, eben *ohne* dass er dazu Herrschaft über das System benötigt. 2015-11-05T20:01:26.464Z bernd: Das ist ja das Tolle daran. 2015-11-05T20:01:38.337Z bernd: Dem Herrscher über das System fällt da natürlich ein Zacken aus der Krone, oder zwei. 2015-11-05T20:01:48.002Z mt: Schönes Gegenbeispiel sind die Exceptions. Die sind auch nur Bausteine und keienr sagt, wie sie im System verankert werden sollen. 2015-11-05T20:02:26.242Z mt: Beim amforth gibts einen top-level exception catcher, der alles auffängt, was durchkommt. Im Standard steht nichts davon drin 2015-11-05T20:02:37.062Z bernd: Das ist aber De-Facto-Standard. 2015-11-05T20:03:01.553Z mt: Klar, ist auch vollkommen plausibel und nachvollziehbar, das so zu machen. 2015-11-05T20:03:17.185Z mt: Steht aber nicht im Wordset. 2015-11-05T20:04:16.528Z mt: Genauso die recognizer. VIelleicht bildet sich auch eine Art best practice heraus, die dann jeder nachmacht. 2015-11-05T20:04:38.324Z bernd: Nein, steht im Wordset. 2015-11-05T20:04:58.372Z bernd: Implizit, ab hier: 2015-11-05T20:04:59.457Z bernd: If the top of the stack is non zero and there is no exception frame on the exception stack, 2015-11-05T20:04:59.457Z bernd: the behavior is as follows: 2015-11-05T20:05:18.590Z bernd: Das regelt, was passiert, wenn der Nutzer kein CATCH gemacht hat. 2015-11-05T20:05:33.709Z bernd: Und das entspricht eben dem zentralen CATCH irgendwo im QUIT oder so. 2015-11-05T20:06:41.594Z bernd: Das ist in THROW drin. 2015-11-05T20:06:48.910Z mt: Habs gefunden. 2015-11-05T20:07:31.342Z mt: Das ist dann also eine Frage der Formulierungen, die Funktionialität durch die Hintertür festzulegen. 2015-11-05T20:08:06.013Z bernd: Ja. 2015-11-05T20:08:29.803Z bernd: Manchmal bekommt man die Leute nur so dazu, zu kooperieren. 2015-11-05T20:08:55.094Z bernd: "Wir wollen unser QUIT mit einer Gazillion Hooks nicht ändern" - "Dann implementiert THROW so, wie es hier steht" 2015-11-05T20:09:26.077Z mt: Na fein. Dann ändere ich mal den Text soweit ab, dass die Basisworte passen. Zum Glück trifft es noch keinen wirklichen Code. 2015-11-05T20:09:48.327Z bernd: Nein, das ist überall erst mal experimenteller Code. 2015-11-05T20:10:18.108Z mt: Dann puste ich den 3. RFD nach clf und die Mailingliste (da habe ich Anton sogar verstanden ;) 2015-11-05T20:10:30.034Z bernd: Selbst die Änderung an der Postfix-Aktion war für Gforth eine Aktion von 20 Zeilen ändern, und läuft. 2015-11-05T20:10:32.604Z mt: Und dann schaun wir mal 2015-11-05T20:12:07.995Z mt: Ich würde das durchaus auch als finale Version ansehen, was die Worte und ihre Stackeffekte angeht. Beim "Überbau" mag man noch diskutieren. 2015-11-05T20:12:40.378Z mt: Man kann aber anfangen, echte eigene Recognizer zu schreiben und zu nutzen 2015-11-05T20:12:45.121Z bernd: Ja. 2015-11-05T20:13:11.144Z bernd: Das ist jetzt schon so weit gediehen, dass das Interface stabil ist. 2015-11-05T20:13:21.066Z mt: Jupp 2015-11-05T20:13:40.457Z bernd: Bleibt noch der Teil, wie man den Recognizer-Stack managed, und in den Interpreter einbaut, der ist noch nicht fix. 2015-11-05T20:13:58.281Z mt: Das meine ich mit "Überbau" 2015-11-05T20:14:05.261Z bernd: Ok 2015-11-05T20:24:41.382Z bernd: Mir ist aufgefallen, dass das ' bisher selber zuständig war für das COMPILE-ONLY-ERROR Gemecker, und durch den Umbau kommt das automatisch aus dem Recognizer so 'raus. 2015-11-05T20:25:25.026Z bernd: Weil ' jetzt eben den Recognizer-Stack abarbeitet, und der natürlich für Compile-Only-Wörter ein Compile-only-Error-Token zurückliefert, für den Interpreter. 2015-11-05T20:26:26.401Z mt: Ich bin da weniger restriktiv. ' if ist vollkommen ok. Wer sowas macht, darf sich auch ins eigene Knie schießen 2015-11-05T20:26:48.535Z bernd: Du wirst wahrscheinlich auch ein IF im Interpreter nicht anmeckern. 2015-11-05T20:26:58.711Z bernd: if 2015-11-05T20:26:58.711Z bernd: :5: error: Interpreting a compile-only word 2015-11-05T20:27:13.888Z mt: Nö, das macht, was ein IF halt macht. Ein bissel Code compileren und eine Zahl zurücklassen. 2015-11-05T20:27:28.586Z bernd: Genau, in Gforth wird halt gemeckert. 2015-11-05T20:27:29.312Z mt: Ist zwar sinnbefreit, aber dafür einfach 2015-11-05T20:27:53.837Z bernd: Das Meckern ist dann für die Anfänger gut, die das eingeben, und sich wundern, warum da nicht das passiert, was sie erwarten. 2015-11-05T20:28:13.215Z mt: Ich hab ja schon ein paar Versionen gebraucht, auch nur auf stack-underflows zu prüfen... 2015-11-05T20:28:52.904Z bernd: In einem kleinen Controller kann man das so machen. 2015-11-05T20:29:12.959Z mt: Dass gforth mehr meckert, ist auch ein Grund, amforth relativ dicht dran zu halten. Manche Dinge kann man durchaus auf dem PC austesten und erst danach auf den Controller pusten 2015-11-05T20:29:40.167Z bernd: Das ist auch eine gute Überlegung. 2015-11-05T20:29:41.022Z mt: Damit habe ich durchaus schon gute Erfahrungen gemacht. 2015-11-05T20:30:01.502Z mt: Klar sind hardwarenahe Dinge damit nicht machbar, aber die kann man meisst simulieren. 2015-11-05T20:30:57.599Z bernd: Ewald Rieger hat für den ersten Triceps sogar ein OpenGL-Modell programmiert. 2015-11-05T20:31:07.230Z mt: Sind eh häufig genug @ und ! auf Sonderadressen 2015-11-05T20:31:21.649Z bernd: Ja. 2015-11-05T20:31:38.846Z mt: Cool 2015-11-05T20:32:07.992Z bernd: Der war ja auch noch PC-gesteuert. 2015-11-05T20:32:31.865Z bernd: Da konnte man dann entweder via Schrittmotor die Seile aufwickeln, oder in der Simulation das OpenGL-Modell bewegen. 2015-11-05T20:32:44.978Z bernd: Mit den gleichen Befehlen natürlich. 2015-11-05T20:32:52.686Z mt: Klar 2015-11-05T20:33:36.877Z bernd: Vielleicht sollte ich das auch mal wieder ans Laufen bringen ;-) 2015-11-05T20:33:46.752Z bernd: So mit der aktuellen Konstruktion vom Triceps. 2015-11-05T20:33:59.101Z mt: Unbedingt. NIcht jeder hat so ein Ding daheim. Aber zusehen werden bestimmt einige wollen. 2015-11-05T20:34:16.020Z bernd: Genau. 2015-11-05T20:34:34.381Z mt: Ich bin dann mal weg. Das war ja mal ein richtig produktiver Abend :) 2015-11-05T20:34:39.485Z mt: Bis neulich dann 2015-11-05T20:34:42.449Z bernd: Ja, leider nur wir zwei ;-) 2015-11-05T20:34:45.627Z bernd: Ciao! 2015-11-05T20:34:49.026Z bernd macht das Licht aus 2015-11-05T20:34:50.220Z mt: Muss nicht von Nachteil sein 2015-11-05T20:34:55.021Z mt left 2015-11-05T20:34:57.928Z bernd left