Factor Programming Language

Google Tech Talk mit Factor Entwickler Slava Pestov.

Auf den ersten Blick sieht der Code ziemlich verwirrend aus, da die Sprache Stack-basiert ist (ähnlich der reverse polish Notation unseres geliebten HP48 Taschenrechners) aber es ist ziemlich erstaunlich, was man damit alles anstellen kann.

Ein kleines Beispiel aus der Dokumentation:

: negative? ( n -- ? ) 0 < ; # Funktionsdefinition
{ -12 10 16 0 -1 -3 -9 } [ negative? ] filter . # Anwenden auf ein Array
{ -12 -1 -3 -9 } # Output

Factor ist sowohl objektorientiert als auch funktional, ziemlich am Anfang des oben erwähnten Techtalks wird das ganze erklärt (also wenigstens mal die ersten Minuten reinschauen!).

Auch sonst hat die Sprache einiges Interessantes zu bieten: beispielsweise sind lokale Variablen nicht Bestandteil der Sprache, sondern stammen aus einer Library. Ausserdem scheint Factor alle möglichen Zeichen für Methoden zu akzeptieren, in der Präsentation kommen vor: :, [, { und sogar ", wobei dies alles nur Methoden sind, die Factor's Parser erweitern. Ziemlich beeindruckend, finde ich. Ausserdem ist der Grossteil von Factor in Factor selbst implementiert, was nur konsequent ist (vergleichbar mit Rubinius in der Ruby-Welt).

Ausserdem sieht die dazugehörige Umgebung sehr mächtig aus: Profiler, Debugger, Inspector, integrierte Hilfe etc. sind vorhanden (Slava ist auch der Entwickler von jEdit).

Wieder eine Sprache mehr, die ich gerne mal genauer anschauen möchte.

No comment »

Will Cablecom Mich Loswerden?

Eigentlich wollte ich doch nur ein wenig profitieren, und einen Neukunden anwerben, leider führt der “Kunden werben Kunden”-Link direkt auf eine Seite mit Kündigungsinformationen:

Mutig wie ich bin habe ich dann trotzdem mal auf weiter gedrückt und bin wider erwarten auf der “Kunden werben Kunden”-Seite gelandet.

(Ach ja, im Text ist geht es ums digital-phone, welches ich gar nicht abonniert habe. Auch sehr speziell.)

6 comments »

Automatische Übersetzungen Erkennen

Ein Indiz, dass eine E-Mail durch einen automatischen Übersetzer gegangen ist, ist sicherlich einmal, wenn alle Umlaute fehlen. Ganz klar ist es aber, wenn die (geschäftliche) E-Mail so endet:

Prost,
Nancy

Danke, gleichfalls! Soll ich nun auf Deutsch antworten? :-)

2 comments »

Leute Gibts

Vor wenigen Minuten hats bei mir geklingelt, und obschon ich niemanden erwarte, bin ich mal runtergegangen. Der folgende Dialog lief ungefähr so ab:

Er (jugendlicher, gepflegtes Aussehen): Hey, hats hier im Haus Zimmer frei?
Ich: Nein.
Er: Es hat aber so viele unbeschriftete Klingeln.
Ich: Jaja, aber Wohnungen sind keine frei. (Es hat tatsächlich 4 Wohnungen und rund ein dutzend Klingeln, keine Ahnung wohin die verdrahtet sind)
Er: Hey, und wie gross ist deine Wohnung?
Ich: 2 Zimmer.
Er: Und was kostet die?
Ich: Hmm.. jaa.. so 1500.
Er: Boah, was! Im Aargau bekomme ich dafür eine 5-Zimmer Wohnung!

Und dann ist er wieder abgezottelt… :-) Voll schräg. Aber ich wünsche ihm viel Glück bei seiner Wohnungssuche.

No comment »

Gelesen (und gesehen): Oliver Twist

Zwischendurch mal einen Klassiker zu lesen schadet nie, und dass das Buch so gut ist, hätte ich ehrlich gesagt nicht gedacht. Der Anfang ist etwas zäh, da ich einige Wörter nachschauen musste (z.B. pauper, parish, beadle), aber danach gehts eigentlich. Allerdings stolpert man hin und wieder über sehr merkwürdige Wörter: beispielsweise wird nicht creature, sondern creetur geschrieben. Und viele Wörter die mit to beginnen, sind mit einem Bindestrich versehen: to-night, to-morrow. Daran gewöhnt man sich aber, schliesslich ist das Buch auch schon 170 Jahre alt.

Wie gesagt, ich war sehr positiv überrascht und musste oft lauthals loslachen, hier ein Beispiel:

‘You ought to be dead; positively dead with the fright,’ said the fat gentleman. ‘Why didn’t you send? Bless me, my man should have come in a minute; and so would I; and my assistant would have been delighted; or anybody, I’m sure, under such circumstances. Dear, dear! So unexpected! In the silence of the night, too!’
The doctor seemed expecially troubled by the fact of the robbery having been unexpected, and attempted in the night–time; as if it were the established custom of gentlemen in the housebreaking way to transact business at noon, and to make an appointment, by post, a day or two previous.

Genial, nicht? (Wem ist die Schreibweise von especially aufgefallen?)

Nach dem Lesen habe ich mir auch noch die relativ neue Verfilmung von Roman Polanski angesehen, und war ziemlich entäuscht. Natürlich muss man meistens halt was weglassen bei einer zweistündigen Verfilmung eines Buches, aber bei Oliver Twist wird meiner Meinung nach zu viel von seinem Schicksal verschwiegen. Naja, ich will nichts verraten. Lieber ein wenig mehr Zeit investieren und das Buch lesen, statt den Film zu schauen. Aber das ist wohl eine generelle Empfehlung.

No comment »

Halteproblem erklärt für Programmierer

Nachdem wir heute in der theoretischen Informatik wieder mal einen Beweis des Halteproblems gehört haben, wage ich auch mal einen Versuch, das ganze möglichst einfach für jedermann zu erklären, der Programmieren kann, aber ansonsten kein Wissen der theoretischen Informatik hat.

Annahme: Wir haben eine Funktion terminate?(f) welche true zurückgibt, wenn die als Parameter übergebene Funktion f terminiert, also irgendwann mal anhält, und ansonsten false. (Ende der Annahme.)

Nun schreiben wir eine andere Funktion, welche folgendes tut:

def f
  while terminate? f
    # Endlosschlaufe
  end
end


Das wars eigentlich schon. Was erwarten wir nun, wenn wir f aufrufen? Falls die Funktion anhält, würde das ja heissen, dass terminate?(f) false zurückgegeben hat, dass die Funktion also nicht terminiert, obwohl sie das soeben getan hat. Das gleiche haben wir, wenn wir annehmen, dass f nicht anhält: einen Widerspruch! Die Annahme ist also falsch. ∎

Ganz einfach und völlig logisch, oder? Was das ganze für Auswirkungen hat lässt sich sehr ausführlich diskutieren. Aber alle Mathematiker und Informatiker die ihren Job mögen sollten froh sein :-)

(Und ich konnte endlich mal das coole ∎ Symbol benutzen.)

2 comments »

Kleine Welt

Wie kleine unsere Welt manchmal doch ist: da stöbere ich durch ein Diskrete-Mathematik-Skript und stosse auf den Solovay-Strassen Primzahl-Test und denke mir, ich kenne doch einen Herrn Strassen, das ist doch nicht etwa unser Dozent für theoretische Informatik? Nein, ist es nicht, es ist sein Vater. :-)

No comment »

Gelesen: Diverses!

Da sich einige Leute schon sorgen machen um mich, da ich schon lange nichts mehr gelesen hätte, hier ein kleines Update:

  • Worlds: Controlling the Scope of Side Effects, ein Paper unter anderem von Alan Kay (ja der ist immer noch aktiv) über sogenannte Worlds, so was ähnliches wie eine Transaktion, aber für Programmzustand. Ziemlich interessant, kompakt und einfach geschrieben.
  • Verifiable Functional Purity in Java, ein Technik um zu beweisen, ob eine Methode in Java functionally pure ist, das heisst, die Methode darf nichts am Objekt selbst, nichts an den Parametern, gar nichts sonst irgendwo im System und muss für eine (gleiche) Menge Parameter immer dasseble Resultat liefern, darf also auch nicht von der Systemzeit oder so abhängig sein. Sobald man dies beweisen kann, lassen sich interessante Dinge damit anstellen, um beispielsweise zu zeigen, dass etwas reproduzierbar ist oder wenn es sich um Code aus unsicheren Quellen handelt.

Wer sich für solche Dinge interessiert sollte unbedingt den Feed von Lambda the Ultimate abonnieren. Alles was dort kommt ist (für mich zumindest) entweder interessant, oder aber viel zu hoch. :-)

No comment »

Heute Abend: Giacobbo und Müller

Heute Abend startet die Herbststaffel von Giacobbo / Müller, um 21:50, wie immer auf SF1. Nicht verpassen!

No comment »

Schöne Graphen zeichnen

Mit Latex kann man nicht nur sehr schöne Dokumente erstellen, auch die zugehörigen Illustrationen sehen genial aus. Kürzlich habe ich das Vaucanson-G-Paket entdeckt, welches auf PSTricks aufsetzt, aber die Dinge noch ein weniger einfacher macht. Ein NFA mit 3 Zuständen beispielsweise, entsteht mit nur diesen Zeilen Code:

\begin{VCPicture}{(0,0)(1,1)}
\FinalState[q_{1}]{(2,1)}{q1}
\State[q_{2}]{(0,-1)}{q2}
\State[q_{3}]{(4,-1)}{q3}
\Initial{q1}
\ArcR{q1}{q2}{b}
\ArcR{q2}{q3}{a,b}
\ArcL{q1}{q3}{\varepsilon}
\ArcL{q3}{q1}{a}
\LoopW{q2}{a}
\end{VCPicture}

Und sieht folgendermassen aus:

Natürlich muss man sich bei der Platzierung bereits im Vorfeld ein paar Gedanken machen, automatisch gelayoutet wird nämlich nicht. Allerdings lassen sich dazu Hilfslinien und ein Raster einblenden, was das ganze wiederum ziemlich vereinfacht.

Auch aufwändigere Dinge gehen ziemlich gut, so beispielsweise dieser Program Dependence Graph, den ich für meine Seminararbeit gezeichnet habe:

5 comments »