*** Protokolldatei gestartet *** Datum: Mi. Dez 5 19:54:57 2012 [Mittwoch, 5. Dezember 2012] [19:54:57] Betreten Sie haben den Kanal #forth-ev betreten (-bernd@p5DCD63F0.dip0.t-ipconnect.de). [Mittwoch, 5. Dezember 2012] [19:55:04] Modus Kanalmodi: [Mittwoch, 5. Dezember 2012] [19:55:12] Hallo Matthias! [Mittwoch, 5. Dezember 2012] [19:55:15] Noch nicht viel los... [Mittwoch, 5. Dezember 2012] [19:59:27] Ah, kommt doch noch einer vorbei. [Mittwoch, 5. Dezember 2012] [19:59:30] Hallo Bernd [Mittwoch, 5. Dezember 2012] [20:02:22] Mal sehen, ob noch wer kommt. [Mittwoch, 5. Dezember 2012] [20:03:22] Ansonsten würd ich doch glatt fragen, was >vtable eigentlich macht. Ich bin grad dabei die Recognizer vom amforth umzuschreiben und bin dabei über diesen Befehl gestolpert. [Mittwoch, 5. Dezember 2012] [20:03:53] ich hätt naiverweise einfach ein create r:fail gefolgt von ein paar compile, für die XT erwartet [Mittwoch, 5. Dezember 2012] [20:04:30] Aber schau Du nur erst mal Deine Katastrophenshow ;) [Mittwoch, 5. Dezember 2012] [20:06:22] Ist gerade Muppet-Show, mit Miss Piggy Merkel ;-) [Mittwoch, 5. Dezember 2012] [20:06:40] >vtable baut aus ein paar xts eine passende vtable. [Mittwoch, 5. Dezember 2012] [20:16:01] sry, musste mal kurz weg. [Mittwoch, 5. Dezember 2012] [20:17:10] Die beiden :nonames gefolgt von einem :r:num ; versteh ichnur in Teilen, aber das gesamtkunstwerk erschließt sich mir leider nicht. [Mittwoch, 5. Dezember 2012] [20:17:59] Für einen Morsezeichen Recognizer in gforth hats trotzdem gereicht ;) [Mittwoch, 5. Dezember 2012] [20:18:10] Also: Im aktuellen Gforth hat jedes xt eben eine Vtable, die für COMPILE, zuständig ist, und für ein Hilfs-Wort, mit dem man Postpone implementiert. [Mittwoch, 5. Dezember 2012] [20:18:34] Der Interpretations-Teil ist das Wort selbst, also bei r:num halt einfach nichts tun. [Mittwoch, 5. Dezember 2012] [20:19:02] Das ist alles noch ein wenig umständlich geschrieben, weil der Cross-Compiler noch kein compile> kann. [Mittwoch, 5. Dezember 2012] [20:19:11] Damit kann man dann den Compilations-Teil direkt implementieren. [Mittwoch, 5. Dezember 2012] [20:20:05] : r:fnumber ; [Mittwoch, 5. Dezember 2012] [20:20:05] compile> drop postpone Fliteral ; [Mittwoch, 5. Dezember 2012] [20:20:05] lit> postpone Fliteral ; [Mittwoch, 5. Dezember 2012] [20:20:10] Das ist das Beispiel aus float.fs [Mittwoch, 5. Dezember 2012] [20:20:15] So sollte es eigentlich aussehen. [Mittwoch, 5. Dezember 2012] [20:21:02] schau ich mir mal an. Merci [Mittwoch, 5. Dezember 2012] [20:22:34] Ist dann nicht ein int> anstelle von : r:fnumber ; logischer? (ok, syntaktischer Zucker) [Mittwoch, 5. Dezember 2012] [20:22:58] Nein, execution und interpretation semantics sind ja gemäß Standard identisch ;-) [Mittwoch, 5. Dezember 2012] [20:24:08] na dann andersrum: : r:num ; legt den Eintrag im Dictionary an. Danach kommen dann die Einzelaktionen, zur not auch leer. Ergo : r:num; >int ; >compile .... ; >lit ... ; [Mittwoch, 5. Dezember 2012] [20:25:09] Ok, dann müsste >int aber wirklich nur syntaktisches Zuckerl sein. [Mittwoch, 5. Dezember 2012] [20:25:45] Für Compile-Only-Wörter könnte man dann noch ein >noint haben (das dann einfach den compile-only throw ausführt). [Mittwoch, 5. Dezember 2012] [20:25:48] Im Moment versuch ich das ja noch zu verstehen.... [Mittwoch, 5. Dezember 2012] [20:26:13] Wieso? Ein >int not-allowed ; sollte das doch auch schaffen? [Mittwoch, 5. Dezember 2012] [20:26:32] Oder so.. [Mittwoch, 5. Dezember 2012] [20:26:46] ich wollte nur den >noint nicht ;) [Mittwoch, 5. Dezember 2012] [20:27:55] aber ich komm damit erst mal weiter... [Mittwoch, 5. Dezember 2012] [20:35:35] Ich hab' mir auch schon überlegt, ob man den Syntax nicht so machen könnte, dass zumindest das >compile auch mit state-smart funktioniert. [Mittwoch, 5. Dezember 2012] [20:36:05] Also das >int halt dann ein state @ 0= IF compiliert, und das >compile dann das zugehörige ELSE oder so. [Mittwoch, 5. Dezember 2012] [20:37:24] hmm [Mittwoch, 5. Dezember 2012] [20:38:04] Sollte state smart nicht aussterben? [Mittwoch, 5. Dezember 2012] [20:38:13] Ja. [Mittwoch, 5. Dezember 2012] [20:38:45] Aber es stirbt sich leichter, wenn die neue Syntax auch funktioniert, ohne dass man das System total umstricken muss. [Mittwoch, 5. Dezember 2012] [20:41:42] State Smart setzt Immediate voraus. Damit das klappt, müssen die Header-Flags irgendwie transportiert werden. Darüber habe ich mir noch keine Gedanken gemacht. [Mittwoch, 5. Dezember 2012] [20:43:36] Naja, >int könnte das ja setzen. [Mittwoch, 5. Dezember 2012] [20:45:39] Oder der Recognizer liefert ein anderes Objekt zurück. Eines dass immediate Merkmale transportiert [Mittwoch, 5. Dezember 2012] [20:46:34] Beim Monotoken-Konzept hier tut er das ja. [Mittwoch, 5. Dezember 2012] [20:46:37] Er ist es IMHO, der das erkennen kann und muss [Mittwoch, 5. Dezember 2012] [20:47:14] Der Recognizer liefert dir etwas zurück, womit du dann verschiedene Dinge machen kannst. [Mittwoch, 5. Dezember 2012] [20:47:31] Die Entscheidung, ob compilieren oder interpretieren, macht der Recognizer nicht selbst. [Mittwoch, 5. Dezember 2012] [20:47:49] Das nicht. Das ist wollen wir ja nicht [Mittwoch, 5. Dezember 2012] [20:48:15] Das macht der Interpreter. Und dazu muss er die Eigenheiten des erkannten Objekts kennen [Mittwoch, 5. Dezember 2012] [20:51:49] Genau die dafür notwendigen Informationen muss der Recognizer hinterlegen. [Mittwoch, 5. Dezember 2012] [20:52:07] 020 * Please wait while we process your connection. [Mittwoch, 5. Dezember 2012] [20:52:50] 484 BerndPaysan Your connection is restricted! [Mittwoch, 5. Dezember 2012] [20:52:53] Betreten Sie haben den Kanal #forth-ev betreten (-bernd@p5DCD63F0.dip0.t-ipconnect.de). [Mittwoch, 5. Dezember 2012] [20:52:58] Modus Kanalmodi: [Mittwoch, 5. Dezember 2012] [20:54:50] Der jetzige Amforth-Recognizer für XT wertet das Immediate flag gleich selbst aus. Wenn sowas der Interpreter zukünftig macht, muss er das IMHO irgendwie erfahren. [Mittwoch, 5. Dezember 2012] [20:55:20] Die compile> Aktion ist da eine andere [Mittwoch, 5. Dezember 2012] [20:55:39] Wo das aber der gforth word-recognizer tut, weiss ich nicht :( [Mittwoch, 5. Dezember 2012] [20:55:44] Das macht das name>comp [Mittwoch, 5. Dezember 2012] [20:56:06] : compiler-r ( addr u -- ... xt ) [Mittwoch, 5. Dezember 2012] [20:56:06] forth-recognizer do-recognizer name>comp ; [Mittwoch, 5. Dezember 2012] [20:57:00] Das kann sich dank dem einen Token die Flags angucken. [Mittwoch, 5. Dezember 2012] [20:57:12] Die compile>-Aktion ist da ja eigentlich nur für non-immediate gedacht. [Mittwoch, 5. Dezember 2012] [20:57:51] und name>comp ruft als erstes (name>comp) auf. Da soll sich noch mal einer über die Unzahl von Dateien beim Amforth aufregen... [Mittwoch, 5. Dezember 2012] [20:58:16] Das ist Anton-Stil. [Mittwoch, 5. Dezember 2012] [20:58:17] grep ist das wichtigste Tool beim Durchforsten der gforth-Quellen ;) [Mittwoch, 5. Dezember 2012] [20:58:29] Im Emacs einfach Alt-. [Mittwoch, 5. Dezember 2012] [20:58:32] gerne auch mit -i als Standardflag [Mittwoch, 5. Dezember 2012] [21:00:05] Emacs ist mir zu ... (suchdirwasasus). Ich hab den früher mal benutzt, aber so richtig gefallen hat der mir nicht. [Mittwoch, 5. Dezember 2012] [21:00:44] Ein Wort Eine Datei. Da findet man wenigstens die Quellen einigermaßen zügig ;) [Mittwoch, 5. Dezember 2012] [21:01:05] Aber man kann's nicht vernünftig editieren. [Mittwoch, 5. Dezember 2012] [21:01:48] Das Tagging funktioniert sowohl mit dem emacs als auch dem vi. [Mittwoch, 5. Dezember 2012] [21:01:58] Wir können also beide Editoren ;-) [Mittwoch, 5. Dezember 2012] [21:02:09] 8-) [Mittwoch, 5. Dezember 2012] [21:02:10] So wie "Country und Western" [Mittwoch, 5. Dezember 2012] [21:02:49] I still got the blues.... [Mittwoch, 5. Dezember 2012] [21:03:34] Die UltraEdit-Fans dürfen dann mit Flaschen werfen ;-) [Mittwoch, 5. Dezember 2012] [21:04:06] Aber eins klappt: das Build-From-Scratch lief zwar mit zillionen Warnungen, aber hat am Ende ein gforth gebastelt. [Mittwoch, 5. Dezember 2012] [21:04:37] Ja, wir müssen noch einige maybe-unused Attribute in prim verteilen. [Mittwoch, 5. Dezember 2012] [21:04:52] Und damit habe ich für Erich mal einen morse-Recognizer gebaut. In gforth ;) [Mittwoch, 5. Dezember 2012] [21:04:59] So Sachen wie drop ( x -- ) führen halt dazu, dass x möglicherweise nicht benutzt wird... hat er ja recht. [Mittwoch, 5. Dezember 2012] [21:05:20] Ist aber Absicht. [Mittwoch, 5. Dezember 2012] [21:05:58] Hat mich auch nicht weiter gestört. Solange es nur Warnungen sind [Mittwoch, 5. Dezember 2012] [21:07:33] Heute bleiben wir wohl allein. Die anderen Teilnehmer hat der Nikolaus in seinen Sack gesteckt ;-) [Mittwoch, 5. Dezember 2012] [21:08:01] Sieht so aus. Aber ich kann mich nicht beklagen. Mir hats genützt [Mittwoch, 5. Dezember 2012] [21:11:33] Was gibt der Morse-Recognizer zurück? Den zugehörigen ASCII-Code? [Mittwoch, 5. Dezember 2012] [21:11:56] Oder einfach nur eine Zahlenrepräsentation des Morse-Codes. [Mittwoch, 5. Dezember 2012] [21:12:03] Erst mal nur 1 und 2 auf dem Stack, je nach Zeichen [Mittwoch, 5. Dezember 2012] [21:12:20] Ich hab keine Ahnung, wie das mal sinnvoll genutzt werden kann [Mittwoch, 5. Dezember 2012] [21:12:56] Aha. [Mittwoch, 5. Dezember 2012] [21:13:10] Erich hat noch nicht per EMail gezuckt ;) [Mittwoch, 5. Dezember 2012] [21:14:41] : morse-recognizer ( addr len -- morsenumbers #morsenumbers r:morse | r:fail ) [Mittwoch, 5. Dezember 2012] [21:14:41] 2>r 0 2r> \ voodoo [Mittwoch, 5. Dezember 2012] [21:14:41] bounds ?do [Mittwoch, 5. Dezember 2012] [21:14:41] i c@ ( -- old-stuff n c ) [Mittwoch, 5. Dezember 2012] [21:14:41] dup [char] . = [Mittwoch, 5. Dezember 2012] [21:14:42] if drop 1+ 1 swap [Mittwoch, 5. Dezember 2012] [21:14:44] else [Mittwoch, 5. Dezember 2012] [21:14:46] [char] - = if [Mittwoch, 5. Dezember 2012] [21:14:48] 1+ 2 swap [Mittwoch, 5. Dezember 2012] [21:14:50] else [Mittwoch, 5. Dezember 2012] [21:14:52] unloop ['] r:fail exit [Mittwoch, 5. Dezember 2012] [21:14:54] then [Mittwoch, 5. Dezember 2012] [21:14:56] then [Mittwoch, 5. Dezember 2012] [21:14:58] loop [Mittwoch, 5. Dezember 2012] [21:15:00] ['] r:morse [Mittwoch, 5. Dezember 2012] [21:15:02] ; [Mittwoch, 5. Dezember 2012] [21:16:23] Der Rest ist syntaktisches NOOP [Mittwoch, 5. Dezember 2012] [21:16:59] Aha. [Mittwoch, 5. Dezember 2012] [21:17:31] Ich würde das wohl eher als Bitstring zusammenbauen, eine einzelne Zahl ist einfacher handzuhaben. [Mittwoch, 5. Dezember 2012] [21:18:03] Prinzip: Fange mit 1 an, und '.' macht 2*, '-' 2* 1+. [Mittwoch, 5. Dezember 2012] [21:18:26] Es ging Erich wohl auch darum, einen Recognizer für ein nachvollziehbares Problem zu haben. [Mittwoch, 5. Dezember 2012] [21:18:34] Ok. [Mittwoch, 5. Dezember 2012] [21:19:01] Und Bitmanipulationen sind eine Aufgabe, die getrennte Aufmerksamkeit verdient. [Mittwoch, 5. Dezember 2012] [21:20:36] Der lernwillige Laie solls verstehen. Nicht der Guru ;) [Mittwoch, 5. Dezember 2012] [21:21:40] Der lernwillige Laie soll aber den Stack nicht als Array missbrauchen ;-). [Mittwoch, 5. Dezember 2012] [21:22:03] Das machen Anfänger gerne. Manchmal mache ich das auch, um zu zeigen, wie man richtig undurchschaubare Stack-Manipulationen machen kann ;-) [Mittwoch, 5. Dezember 2012] [21:22:44] Hab ich auch mal gedacht. [Mittwoch, 5. Dezember 2012] [21:23:52] Aber sobald er erkennt, das eine variable Stacktiefe eher suboptimal ist, ist das Lernziel auch erreicht [Mittwoch, 5. Dezember 2012] [21:23:59] Hehe. [Mittwoch, 5. Dezember 2012] [21:27:20] Mein erstes Forth-Programm war "Finde eine zehnstellige Zahl, deren erste n stellen jeweils durch n teilbar sind" [Mittwoch, 5. Dezember 2012] [21:27:38] Das habe ich auch so mit Stack als Array gelöst... [Mittwoch, 5. Dezember 2012] [21:28:32] Solange es PICK als Standardwort gibt, wird man das auch nicht raus-operieren können. Ist ja auch bequem [Mittwoch, 5. Dezember 2012] [21:28:43] Genau. [Mittwoch, 5. Dezember 2012] [21:29:37] Das damals war noch ein bisschen komplizierter, weil 10-stellig ja nicht in 16 Bit passten ;-) [Mittwoch, 5. Dezember 2012] [21:30:19] Und in 32 auch nicht [Mittwoch, 5. Dezember 2012] [21:30:27] Und Fließkomma gab's nicht... [Mittwoch, 5. Dezember 2012] [21:31:01] Forthprogramme hab ich eigentlich keine geschrieben (vor amforth). Da hat mir eher fasziniert, dass IF so völlig getrennt von THEN sein konnte [Mittwoch, 5. Dezember 2012] [21:31:25] Ok, die beiden sollten zusammen vorkommen. Aber einen syntaktischen Zwang gabs keinen [Mittwoch, 5. Dezember 2012] [21:31:53] Gab halt Mist auf dem Stack, aber sonst? Kein Problem [Mittwoch, 5. Dezember 2012] [21:32:42] Bei Forth hab ich besser verstanden, wie eine CPU arbeitet als mit Assembler. [Mittwoch, 5. Dezember 2012] [21:32:56] Ja, es ist ausreichend vereinfacht, dass man das versteht. [Mittwoch, 5. Dezember 2012] [21:33:16] Ich hab' die Pointer von C auch erst verstanden, nachdem ich mit Forth angefangen habe [Mittwoch, 5. Dezember 2012] [21:38:36] Lustige Beobachtung der glibc: Wenn man nach dem Programmstart was größeres mit malloc() holt, wird das mit mmap() gemacht. [Mittwoch, 5. Dezember 2012] [21:38:46] Freigeben dann mit munmap(). [Mittwoch, 5. Dezember 2012] [21:39:08] Wenn man danach wieder malloc() macht, wird brk() verwendet... [Mittwoch, 5. Dezember 2012] [21:40:29] Ich hatte bislang noch keine Sorgen mit der glibc, allen Unkenrufen zum Trotz [Mittwoch, 5. Dezember 2012] [21:41:25] Die anderen libcs sind noch schlimmer ;-) [Mittwoch, 5. Dezember 2012] [21:42:41] Ich mach' jetzt Schluss, muss noch am net2o-Artikel für die VD weiterschreiben. [Mittwoch, 5. Dezember 2012] [21:42:47] * BerndPaysan macht das Licht aus [Mittwoch, 5. Dezember 2012] [21:42:52] Ich bin auch weg [Mittwoch, 5. Dezember 2012] [21:42:54] Ciao [Mittwoch, 5. Dezember 2012] [21:42:59] Ciao! [Mittwoch, 5. Dezember 2012] [21:43:02] Beenden MatthiasT hat den Server verlassen ("Leaving.").