{"id":63,"date":"2005-02-11T10:50:14","date_gmt":"2005-02-11T08:50:14","guid":{"rendered":"http:\/\/blogs.bl0rg.net\/netzstaub\/?p=63"},"modified":"2005-02-11T10:50:14","modified_gmt":"2005-02-11T08:50:14","slug":"forth","status":"publish","type":"post","link":"https:\/\/blogs.bl0rg.net\/netzstaub\/2005\/02\/11\/forth\/","title":{"rendered":"Forth"},"content":{"rendered":"<p>\nEine meiner Hackerregeln bis jetzt war, so oft wie moeglich was<br \/>\numzustellen, damit es einem bloss nicht zu ungemuetlich wird. Zum<br \/>\nBeispiel das Betriebssystem, oder die Programmiersprache. Der<br \/>\nHintergedanke dabei: keine Aenderungen, und schon klopft der<br \/>\nMainstream an der Tuer, und bald hat man sich auf irgendwas<br \/>\nfestgesetzt, und ist nicht besser als die Java-Drones oder die<br \/>\nLinux-Juenger da draussen. Die letzte grosse Aenderung ist bei mir<br \/>\njetzt echt einiges her (der Umstieg auf LISP als<br \/>\nHauptprogrammiersprache vor ein bisschen mehr als einem Jahr), und<br \/>\nsoeben hoerte ich die Langeweile an der Tuer klopfen, um mich<br \/>\nabzuholen. Es musste (oder muss) also unbedingt was her. Zum Glueck<br \/>\nstiess ich ueber irgend ein Blog auf die <a href=\"http:\/\/thinking-forth.sourceforge.net\/\">PDF Version von Thinking<br \/>\nForth<\/a> von Leo Brodie.\n<\/p>\n<p>\nForth war schon frueher mal kurz auf meinem Radar aufgetaucht<br \/>\n(schliesslich konnte man damit recht bequem die Suns im<br \/>\nInformatik-Poolraum 0wn3n), aber so wirklich was geworden war es<br \/>\nnicht. Das Konzept der Sprache ist so einfach und kristallklar:<br \/>\nProgramme haben zwei Stacks zur Verfuegung, einer fuer Daten, einer<br \/>\nfuer Returnadressen. Reihenfolge von Befehlen, die diesen Stack<br \/>\nmanipulieren, kann man unter einem Namen in einer Struktur namens<br \/>\nDictionary ablegen. Und das wars so ungefaehr (wer es wirklich genau<br \/>\nwissen will, kann ein Blick in den <a href=\"http:\/\/www.taygeta.com\/forth\/dpans.htm\">Forth dpANS<\/a> Standard<br \/>\nwerfen). Klingt so ein bisschen nach Assembler fuer eine Stack<br \/>\nMachine, aber eigentlich ist es viel mehr, der Forth-Compiler ist<br \/>\nnaemlich auch in Forth geschrieben, und ist interaktiv. Ohne einer<br \/>\nsolchen Schnittstelle zum Compiler ist nach LISP die Welt ein<br \/>\nbisschen grau und oede. Das heisst also, das man den Compiler<br \/>\nweitgehend fuer seine eigenen Zwecke benutzen kann. Man kann Woerter<br \/>\n(sprich, Funktionen) definieren, die zur Compile-Zeit aufgerufen<br \/>\nwerden. Oder man kann Woerter definieren, die andere Woerter<br \/>\ndefinieren und sie um bestimmten Code ergaenzen (Macros).\n<\/p>\n<p>\nDas Faszinierende an dem Ganzen jedoch ist immer die geringe<br \/>\nKomplexitaet von dem Code. Der Compiler laesst sich in ein paar Zeilen<br \/>\nniederhacken, so wie eigentlich ziemlich alles in Forth. Das fuehrt<br \/>\nauch dazu, dass jeder Forth-Programmierer mindestens einen eigenen<br \/>\nForth-Compiler geschrieben hat. Ich habe zum Hacken unter Unix <a href=\"http:\/\/www.jwdt.com\/~paysan\/gforth.html\">gforth<\/a> benutzt, das<br \/>\nauch ueber ein nettes Interface zu Emacs verfuegt, als Forth ist es<br \/>\njedoch leicht bloatig. Es gibt ganz ganz viele Forths, die sich als<br \/>\nkomplette Programmierumgebung verstehen, mit Editor, Debugger,<br \/>\nund&#8230; Betriebssystem. Besonders erwaehnenswert sind hier die<br \/>\nForth-Varianten von <a href=\"http:\/\/www.colorforth.com\/\">Chuck<br \/>\nMoore<\/a>, der Erfinder von Forth. Sein <a href=\"http:\/\/www.colorforth.com\/cf.html\">Colorforth<\/a> ist ein<br \/>\nBetriebssystem-Forth (es gibt aber auch <a href=\"http:\/\/personalwebs.oakland.edu\/~maslicke\/colorforth\/\">Linux-Ports<br \/>\n(X11 und OpenGL)<\/a> und <a href=\"http:\/\/homepages.paradise.net.nz\/rscollins\/c4\/\">Windows<\/a>&#8211;<a href=\"http:\/\/www.geocities.com\/eleks_76\/\">Ports<\/a>), mit eigenem<br \/>\nTastaturlayout (alles schoen minimal, nur 27 Tasten). Ein<br \/>\ninteressantes Feature ist das Syntax weitgehend durch Farben ersetzt<br \/>\nwurde: da wird weniger Platz auf dem Bildschirm verbraten. Ein gute<br \/>\nLink-Sammlung zu Colorforth findet man auf dem Quartus <a href=\"http:\/\/quartus.net\/cgi-bin\/twiki\/view\/Main\/ColorForth\">Forth-Wiki<\/a>. Wenn<br \/>\nman das Colorforth startet, ist man erst total verloren, nur so<br \/>\nlangsam kommt man da zurecht. Doch was Chuck Moore damit macht, ist<br \/>\nehrlich faszinierend. Er hat ein CAD-Programm zum Entwerfen von<br \/>\nVLSI-Schaltungen auf einem solchen System programmiert, und wie man an<br \/>\nden Filmen im <a href=\"http:\/\/www.ultratechnology.com\/rmvideo.htm\">Streaming Video<br \/>\nTheater<\/a> sehen kann, scheint das extrem schnell und maechtig zu<br \/>\nsein (Chuck Moore meint, es waeren nur 500 Zeilen Code (!!)).\n<\/p>\n<p>\nDas ganz spannende an Forth ist, dass man eine Stack-Architektur sehr<br \/>\neinfach in Hardware giessen kann (mittlerweile auch in VHDL<br \/>\nProgrammieren): auf der <a href=\"http:\/\/www.ultratechnology.com\/chips.htm\">Chip-Seite<\/a> von <a href=\"http:\/\/www.ultratechnology.com\/\">Ultratechnology<\/a> gibt es<br \/>\neine ausfuehrliche Liste von Stack-Rechnern und Forth-Chips. Dort ist<br \/>\nauch das grossartige Buch <a href=\"http:\/\/www.ece.cmu.edu\/~koopman\/stack_computers\/index.html\">Stack<br \/>\nComputers<\/a> von Philip Koopman verlinkt, in dem die Architektur von<br \/>\nsolchen Stack-Rechnern erlaeutert wird.\n<\/p>\n<p>Jetzt aber wieder zurueck zu <a href=\"http:\/\/thinking-forth.sourceforge.net\/\"> Thinking<br \/>\nForth<\/a>. Thinking Forth ist kein Forth Buch in dem eigentlichen<br \/>\nSinne, sondern ein Buch ueber die &#8220;Philosophie&#8221; von Forth, und handelt<br \/>\neher von Software-Technik: wie werden Probleme analysiert und in Code<br \/>\numgesetzt, wie kann ich meine Software strukturieren, dass ich sie<br \/>\neinfach schreiben kann, und auch einfach anpassen kann, usw&#8230; Nur<br \/>\nsind die Ansaetze in Forth schon anders als in herkoemmlichen<br \/>\nSprachen. Da es kaum Syntax gibt sind die Grenzen zwischen Funktionen,<br \/>\nDatenstrukturen, Kontrollstrukturen ziemlich verwischt, und es braucht<br \/>\nerst einiges, bis man sich da zurecht findet. Zum Glueck ist das Forth<br \/>\nEinfuehrungsbuch von Leo Brodie in HTML umgesetzt worden: <a href=\"http:\/\/home.iae.nl\/users\/mhx\/sf.html\">Starting Forth<\/a> (sehr<br \/>\n  empfehlenswert). Es steht dem PUSHen und POPen jetzt nicht mehr im<br \/>\n  Wege :}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine meiner Hackerregeln bis jetzt war, so oft wie moeglich was umzustellen, damit es einem bloss nicht zu ungemuetlich wird. Zum Beispiel das Betriebssystem, oder die Programmiersprache. Der Hintergedanke dabei: keine Aenderungen, und schon klopft der Mainstream an der Tuer, &hellip; <a href=\"https:\/\/blogs.bl0rg.net\/netzstaub\/2005\/02\/11\/forth\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-63","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts\/63","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/comments?post=63"}],"version-history":[{"count":0,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/posts\/63\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/media?parent=63"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/categories?post=63"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.bl0rg.net\/netzstaub\/wp-json\/wp\/v2\/tags?post=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}