%% LyX 2.0.1 created this file. For more info, see http://www.lyx.org/. %% Do not edit unless you really know what you are doing. \documentclass[american,ngerman]{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{graphicx} \makeatletter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands. \usepackage{multicol} \makeatother \usepackage{babel} \begin{document} \title{EuroForth 2011 in Wien} \author{Bernd Paysan} \maketitle \begin{abstract} Die 27. EuroForth--Konferenz fand dieses Jahr vom 23. bis 25. September bei schönem Wetter in Wien statt --- turnusgemäß, möchte man sagen, da sich Anton als zuverlässiger Veranstalter des dritten Orts (,,weder Deutschland noch England``) gefunden hat. Wie auch in den Jahren zuvor waren vor der Tagung zwei Tage Forth200x--Standardisierung angesetzt, wie immer, wenn es an diesem dritten Ort stattfindet, ist die Runde etwas kleiner. \end{abstract} \begin{multicols}{2} \section{Forth 200x: Der Snapshot} Der Standardisierugsprozess ist so weit fortgeschritten, dass wir einen Snapshot produzieren, der dann --- gemäß den ANSI--Prozeduren --- einem öffentlichen Review zugeführt wird. Als Snapshot wird das Ergebnis des Treffens beschlossen. Damit war auch klar, womit wir uns hauptsächlich beschäftigen würden, mit \foreignlanguage{american}{,,crossing the eyes and dotting the teeth,``} wie die verballhornte Version lautet. Da gibt es immer Details, die nicht sauber beschrieben sind, und entsprechend umformuliert werden müssen. Zunächst wurden also die bereits vorgenommenen Änderungen begutachtet, und für gut befunden. Danach die schon im Raum stehenden, also durch einen CfV beschlossenen Vorschläge, also die \foreignlanguage{american}{enhanced locals,} BUFFER: und SUBSTITUTE. Diese Vorschläge wurden ebenfalls akzeptiert. \begin{figure} \includegraphics[width=1\columnwidth]{2011-04/2011-09-21_16-29-26} \caption{Der Tagungsraum} \end{figure} Von den noch in Diskussion befindlichen (RfD) wurden die Änderungen am IS--Vorschlag akzeptiert, ebenso wie die Erläuterungen für \foreignlanguage{american}{Parsing Words} in Blöcken von Multitasking--Systemen und die Einschränkung, dass der bei SOURCE--ID zurückgelieferte Dateideskriptor nicht anderweitig benutzt werden kann. Die Diskussion über FOUND ist noch nicht so weit ausgegoren, dass man daraus einen Standard machen kann. Danach ging es um noch durchzuführende Änderungen, um aus dem Dokument einen richtigen \foreignlanguage{american}{Snapshot} zu machen. Dabei werden einige Anhänge gestrichen, bzw. wandern auf die \foreignlanguage{american}{Web--Site} des forth200x--\foreignlanguage{american}{Committees}. Der Standardisierungsprozess ist aber dadurch natürlich nicht abgeschlossen, sondern geht weiter. Es gibt noch offene Baustellen, insbesondere die Internationalisierung (die jetzt, mit xchars und \foreignlanguage{american}{substitute} im Standard, alle notwendigen Komponenten zur Verfügung hat), aber auch die Diskussion zum Cross--Compiler, zu \foreignlanguage{american}{IEEE Floating Point}, zum Laden von Dateien relativ zur gerade geladenen Datei (was Stephen Pelc inzwischen auch unterstützt), und das\foreignlanguage{american}{ Memory Access Wordset}. \section{Konferenz} \subsection{Stephen Pelc: Standardize OOP Now} Stephen Pelc ist noch nicht ganz aus dem Standardisierungs--Modus 'raus, und er macht gleich ein richtig dickes Fass auf. Sein Vortrag befasst sich mit der Situation von OOP in Forth, und warum die derzeitige Situation nicht gut sei: praktisch jedes Programm, das tatsächlich OOP verwendet, bringt sein eigenes, zu allen anderen Forth--OOP--Packeten inkompatibles OOP mit. Stephen fordert die Entwickler bestehender OOP--Erweiterungen auf, einzusehen, dass ihre bisherigen Vorschläge alle unzulänglich sein müssen, weil sich deshalb ja keines durchgesetzt hat, und also zurück auf Los zu gehen, und nochmal neu anzufangen --- und dabei die Egos zurückzustellen. Er schlägt vor, auf FMS (Forth meets Smalltalk) von Doug Hoffman aufzubauen, gibt aber auch zu, dass er selbst kein OOP--Experte ist. Das Thema bedarf näherer Betrachtung; ich habe deshalb einen ganzen Artikel für die VD geschrieben. \subsection{Bernd Paysan: net2o: Application Layer} Ich habe mir noch mehr Gedanken über die Neuerfindung des Internets gemacht, und trage meine Ideen vor. Wofür es ist --- um Informationen zu tauschen. Wie man die Informationen organisiert. Was die Elemente einer Webseite sind. Dass der Browser eine Laufzeitumgebung für Anwendungen im Netz ist. Dass man nicht nur Code faktorisieren kann und muss, sondern auch Daten. Wie man die ACID% \footnote{\selectlanguage{american}% Atomicity, Consistency, Isolation, Durability\selectlanguage{ngerman} % }--Bedingungen in einem verteilten Datenspeicher erreicht. Welche Rolle Hashes als Index auf die Daten spielen. Wie man Anwendungen aus dem Netz sicher ausführt (und dass Sicherheit immer relativ ist). Dass man nicht pollen, sondern pushen soll. Und Sourcecode verwenden, keine Binaries. Auf welche Library--Funktionen man aufsetzt. Und was die dümmsten Fehler am aktuellen Internet sind. \subsection{Leon Wagner: Forth on the Cortex--M1 FPGA Development Kit} Leon Wagner hat tatsächlich Hardware dabei, ein Altera--Development--Board, und führt vor, wie man in Quartus einen Cortex--M1 mit Peripherie zusammenklickt, auf dem dann SwiftX läuft. Dabei muss man tatsächlich nicht in die Tiefen des Verilogs eintauchen, wobei man das bei ARM auch nicht kann --- das ist alles verschlüsselt. SwiftX darauf zu portieren ist etwa genauso schwierig oder einfach wie auf eine andere CPU, schließlich hat der Cortex--M1 einfach einen abgespeckten Thumb2--Befehlssatz. \subsection{Anton Ertl: Ways to Reduce the Stack Depth} Anton macht sich Gedanken, wie man mit zu vielen Variablen auf dem Stack umgeht. Mehr als 2 oder 3, und es wird ungemütlich. Eine Reihe von Vorgehensweisen sind bekannt (das sind auch ,,Design Pattern``, aber nicht für OOP, sondern für Forth), und die erläutert er an Beispielen. Man kann die Daten im Speicher gruppieren, mehrere Stacks verwenden, Locals benutzen, globale Variablen oder Kontext--Variablen, implizite Parameter, Pipes und Staged Execution. \subsection{Andrew Haley: Forth concurrency: what are we going to do about ,,volatile?{}``} Wie schon letztes Jahr ist Andrew Haleys Thema Forth im Kontext von Multiprozessor--Systemen. Es geht dieses Mal um Schreib- und Lesebarrieren im Speicher, die in C--artigen Sprachen durch den Typbezeichner ,,volatile`` abgebildet werden --- oder auch nicht, denn so klar sind sich die Implementierer von C--artigen Sprachen nicht, was denn jetzt wirklich mit volatile gemeint ist (insbesondere C selbst hat eine praktisch nutzlose Definition von volatile). Andrew ist über das Problem gestolpert, als VFX--Forth aus \texttt{counter @ dup 2+} einfach\texttt{ counter @ 2+ counter @ swap} gemacht hat, und Stephen auf den Bugreport mit ,,das ist das volatile--Problem`` geantwortet hat. Damit hat das Problem seinen Namen weg. Bei den C/C++--Leuten weicht die bisherige Ignoranz langsamer Erleuchtung, und wenn Forth eine Zukunft auf Multiprozessorsystemen haben will, dann auch nur, wenn man sich dazu Gedanken macht. \begin{figure} \includegraphics[width=0.5\columnwidth]{2011-04/2011-09-22_19-03-41}\includegraphics[width=0.5\columnwidth]{2011-04/2011-09-23_13-03-23} \includegraphics[width=0.5\columnwidth]{2011-04/2011-09-23_13-03-37}\includegraphics[width=0.5\columnwidth]{2011-04/2011-09-23_18-03-27} \caption{Impressionen} \end{figure} \subsection{Willi Stricker: A processor as hardware version of the Forth virtual machine} Willi Stricker stellt seinen Forth--Prozessor im FPGA vor; wir kennen den Prozessor ja schon von der Forth--Tagung. Sein Konzept ist sehr nahe an der virtuellen Forth--Maschine für threaded code, weshalb bei ihm Primitives und Unterprogrammaufrufe auch einfach nur Adressen im Speicher sind, und für die Primitives reserviert er die ersten 64 Bytes --- das sind dann Pseudo--Adressen, denn an denen steht nicht etwa der Code für den Befehl, sondern das FPGA weiß, was zu tun ist, und führt die Primitives gleich direkt aus. Willi hat das auf einem Actel--FPGA implementiert. \subsection{Nick Nelson: Crash Never} Als Kontra gegen Stephen Pelcs ,,crash early, crash often``--Philosophie schlägt Nick Nelson eine ,,crash never``--Philosophie vor, zumindest für ausgelieferte Programme. Kunden sollen auf Crashs allergisch reagieren, und auch Nick selbst hat auf der EuroForth in Exeter von ein paar Crashes erzählt, die für die Zuhörer sicher lustiger waren als für die Beteiligten. Also listet Nick die Techniken auf, die er so benutzt, um seine Programme robust zu machen, auch wenn sie nicht perfekt sind, und hier und da natürlich trotzdem crashen --- oder crashen würden, wenn man sie nicht von außen stützen täte. So fängt er Stackfehler ab, indem die Hauptschleife eines Tasks den Stack immer wieder normalisiert. Wenn es trotzdem zum Crash kommt, wird eine möglichst detaillierte Meldung produziert. Schleifen mit zu großer Anzahl Schritten werden zurückgewiesen oder verkürzt. Watchdogs (,,prodder``) stoppen Programme, die nicht mehr reagieren. Divisionen durch 0 sollen Unendlich zurückgeben (mit korrektem Vorzeichen, falls man nach einem Vorzeichen gefragt hat), und die Anzahl Threads minimiert man --- wenn mehrere Prozesse alle 100~ms etwas tun wollen, dann ruft man sie hintereinander aus dem gleichen Thread auf. Und für die Kommunikation verzichtet man auf eigene Locks, sondern verwendet möglichst simple Methoden. \subsection{Gerald Wodni: SWIG \& The Forth Net: Hands-On} Gerald Wodni hat immer noch das ,,the`` im \texttt{theforth.net}; weil die andere Domain leider belegt ist, funktioniert der \texttt{drop}--Operator nicht. Aber das System hat Fortschritte gemacht, und für Anton gibt es auch einen Stil ohne bunte Farben, und man kann sich ohne OpenID--Account direkt einloggen. Es wartet nun darauf, mit Libraries gefüttert zu werden. Forth--Systeme können diese Libraries direkt über's Internet ziehen, man muss sie nicht umständlich installieren oder so, sie sind einfach da. Das Forth--Net schickt auf die HTTP--Anfrage Forth--Code zurück, der den ganzen Rest erledigt. Die Wörter dafür heißen dann einfach \texttt{frequire} und \texttt{finclude}, und verwenden \texttt{fget}, das auf das Forth--Netz zugreift. Libraries muss man auch nicht selber schreiben, man kann die vorhandenen Libraries (üblicherweise in C geschrieben) verwenden. Damit man da keinen großen Aufwand treiben muss, das in Forth einzubinden, gibt's ein SWIG--Modul, das aus den C--Headern über einen zweistufigen Prozess Forth--Bindings generiert. \bigskip{} Am Sonntag finden die Impromptu--Talks und Workshops statt. Dieses Mal mit sehr vielen Themen. \subsection{Carsten Strotmann} Carsten berichtet über seine Aktivitäten, Forth einer breiteren Öffentlichkeit nahezubringen. Ich denke, die interessanteste Information dabei ist, dass die früheren Vorbehalte gegen Forth inzwischen in den Hintergrund drängen; es scheint, dass die Welt jetzt offener für Konzepte abseits des Mainstreams ist. \subsection{Stephen Pelc: Why compilation is a mess} Stephen Pelc hat das Konzept des ,,intelligenten \texttt{compile,}s`` inzwischen auch implementiert, und stellt sein Konzept eines ,,universellen Tokens`` vor, das als Ersatz für das bisherige Durcheinander aus \texttt{immediate}, state--smart--Wörtern und langen \texttt{case}--Statements im weniger intelligenten \texttt{compile,} herhalten muss. Dieses Token ist bei Stephen das ganz normale xt, bei Dual--xt--Systemen wie Gforth klappt das so nicht. Aber Gforth ist auch noch einen Schritt weiter hinten bei der Implementierung des intelligenten \texttt{compile,}s (der Cross--Compiler kann's, aber das System selbst nicht). \subsection{Anton Ertl: Replacing FIND} Die Überlegungen, FIND durch ein zeitgemäßeres Wort zu ersetzen, gehen auch in die Richtung, im Compilations--Prozess aufzuräumen. Gforth mit seinem nt (name token) hat da etwas andere Operatoren als Stephens universelles token, was sich auch auf einen möglichen Ersatz von \texttt{find} auswirkt. Die Diskussion hier, so scheint mir, ist definitiv noch nicht so weit ausgereift, dass man von einem Ergebnis sprechen kann. \begin{figure} \includegraphics[width=0.45\columnwidth]{2011-04/2011-09-23_18-29-28}\hfill{}\includegraphics[width=0.45\columnwidth]{2011-04/2011-09-24_16-12-11} \caption{Ertlgasse und Antonshöhe} \end{figure} \subsection{Klaus Schleisiek: 11 OOP primitives} Am Ende holt uns das OOP--Thema vom Anfang wieder ein, und wie zu erwarten, sind die Egos natürlich nicht in den Hintergrund zu drängen. Klaus Schleisiek hält Manfred Mahlows OOP für den Stein der Weisen, und verspricht, nach kurzer Vorstellung, was das so ungefähr ist, eine Portierung auf Gforth (0.6.2) zu machen, damit man sich das ansehen kann. \subsection{Andrew Haley: What OOP needs: by example of the Proxy design pattern} Im Versuch, das Unverständnis, worum es bei OOP überhaupt geht, zu reduzieren, versucht Andrew Haley das Proxy design pattern zu erklären. Mir scheint aber, dass die Konzentration aller Beteiligten so weit nachgelassen hat, dass die Erklärung nicht wirklich verstanden wurde. Zudem sind Design--Pattern keine leichte Kost, und die Gang of Four, die das erste dicke Buch zu OOP--Design--pattern herausgegeben hat, sagt selbst ,,wir haben es auch nicht verstanden, als wir das Buch zum ersten Mal geschrieben haben.`` Ich habe das Buch gelesen, als es neu war (und es dazu in der Uni--Bibliothek ausgeliehen), da sind inzwischen 15 Jahre vergangen, und die Ausgabe, die ich jetzt bei Amazon bekommen habe, ist nur für Indien bestimmt ;-). Man sollte sich auch nicht ganz so sklavisch an Pattern aus der Java--Ecke halten, Forth ist eine wesentlich dynamischere Sprache, und kann bestimmt mehr, wenn man es richtig macht. \bigskip{} Neben dem formellen Teil der Konferenz ist der informelle mit Exkursion und Abendessen natürlich auch sehr wichtig. Die Gespräche gehen immer bis tief in die Nacht, wodurch sich der Start am nächsten Tag etwas verzögert. Zumal es durch das Standard--Treffen jetzt vier Nächte hintereinander sind, die alle etwas kurz geraten. Anton scheint in Wien sehr populär zu sein, es gibt nicht nur eine Ertlgasse im 1. Distrikt, sondern auch eine Antonshöhe, und an beiden sind wir vorbeigekommen. Das Internet im Erzherzog Rainer ist inzwischen auch kostenlos, und das Essen war überall gut. \begin{figure} \includegraphics[width=1\columnwidth]{2011-04/2011-09-24_16-59-32} \caption{Im Weingarten} \end{figure} \end{multicols} \end{document}