Obwohl ich absolut kein Plan von C# und .Net habe und auch sonst Microsoft ... hasse, konnte ich doch der Werbung zu dem F#-Tutorial von Andreas nicht widerstehen. Da es für mich auf keinen Fall in Frage kommt Windows zu installieren habe ich die freie, .Net kompatible Laufzeitumgebung Mono installiert. Da dies nicht so einfach ging hier ein kurzes HowTo. Anmerkung: Ich weiß nicht ob alle diese Schritte genau so notwendig sind, da ich wie schon erwähnt mich auf dem Gebiet nicht auskenne, aber so läuft alles.
Zuerst einmal die Laufzeitumgebung inklusive Libraries und C#-Compiler installieren. Da ich (noch) Kubuntu nutze hier erläutere ich hier mal nur den Ubuntu-Weg. In allen anderen Distributionen sollte es allerdings ähnlich ablaufen. Anmerkung: Installiert braucht Mono gut 100MB, also mal kurz installieren und testen lohnt fast nicht.
sudo apt-get install mono-devel
Da dies soweit ich das beurteilen kann allerdings nur den C# 1.0 Compiler installiert installieren wir noch den 2.0 Compiler inklusive Libraries nach. Außerdem werden noch für C# zwei zusätzliche Libraries benötigt:
sudo apt-get install mono-gmcs libmono-winforms1.0-cil libmono-system-runtime2.0-cil
Jetzt sollte Mono so weit laufen. Testen kann man dies indem man ein Beispiel von der Student Homepage herunter lädt (Wenn das mal kein Werbebonus gibt) und mit gmcs Program.cs
kompiliert. Ausführen lässt sich das Ergebnis einfach mittels mono Program.exe
. Das einzige was noch zu klären bleibt: Warum zum Henker machen Windowsanhänger bei Konsolenprogrammen immer ein Console.ReadLine();
am Ende? ;-)
Soweit zu Mono. Jetzt kommt der F# Teil. Erst einmal F# downloaden. Am besten wählt man hier Download F# 1.9.3.14 als Zip aus. Das Paket entpacken und als Administrator installieren. (Gefällt mir ja überhaupt nicht ein Microsoft Produkt als Administrator auf meinem Rechner auszuführen.) Hierzu einfach das mitgelieferte Bashscript ausführen:
sudo bash install-mono.sh
Dieses Script installiert F# und kompiliert das ganze in das bin
-Verzeichnis. Hat alles so weit geklappt ist man nun (mehr oder weniger) stolzer Besitzer von F# und kann sich gleich an der ersten Aufgabe von Andreas versuchen.
Als Beispiel gleich mal meine Lösung:
#light open System let rec (!) (a : int) = if (a = 1) then a else let a2 = a - 1 a * !a2 printfn "Zahl eingeben:" let a = read_line () let endresult = !Convert.ToInt32(a) printfn "Die fakultaet von %s ist %i" a endresult
Das wird nun mit folgendem Befehl erst kompiliert und anschließend ausgeführt:
downloads/FSharp-1.9.3.14/bin/fsc.exe fakultaet.fs mono fakultaet.exe
Wenn man dem Binary Ausführungsrechte gibt kann man es auch einfach mittels ./fakultaet.exe
ausführen.
Das einzige was jetzt noch schön wäre, ist ein vim Syntax-Style für F#...
Bleibt abzuwarten wann Tutorial Teil 3 folgt. Ich bin gespannt!
2 Kommentare:
gugu,
warum ReadLine() am ende:
wenn man den quellcode aus visual studio heraus compiliert und startet, erscheint automatisch eine dosbox/shell/cli (wie ihr das auch immer nennen mögt), in deren context das programm ausgeführt wird. nach beendigung des programms verliert diese dosbox ihre notwendigkeit und wird mit beenden des programms daher automatisch wieder geschlossen. hat man nur die ausgabe von ein paar zeilen text in seinem programm veranlasst, geht das alles so schnell von statten, dass der benutzer nichts erkennen kann. daher ein ReadLine() am schluß, um die beendigung des programms (und damit die schließung der dosbox) zu verhindern. erst wenn das ReadLine() abgearbeitet wurde ist das programm fertig. üblichwerweise macht man dies mit einem return. auf deutsch, programm starten, dosbox erscheint und bleibt stehen, user drückt return, dosbox verschwindet.
gruß
Ja, warum man das macht ist mir klar. Nur der Sinn dahinter nicht. Wie kann man nur von einem Programmierer erwarten, dass er bei jedem CLI-Programm ein readline einfügt nur weil die die IDE es nicht hin bekommt ein brauchbares Terminal zu verwenden. Das ist pures Unvermögen von Microsoft was die Programmierer ausbaden müssen. Das stört die Meisten nur nicht weil sie sich damit abgefunden haben oder denken das muss so schlecht sein. Und das ist echt traurig.
(ps: Ich habe deinen Kommentar auf den neuen Blog übertragen. Wenn dann bitte dort antworten: http://feitel.indeedgeek.de/2008/2/mono_funktional/)
Kommentar veröffentlichen