Bei einem Vergleich VB vs. C# entsteht schnell der Eindruck, dass C# die in allen Belangen überlegene Programmiersprache ist. Das ist natürlich Quatsch. Erst mit C# 4.0 wurden z.B. optionale Parameter, benannte Argumente und eine Art "späte Bindung" über das dynamic-Schlüsselwort eingeführt. Spracheigenschaften, die es bei VB schon immer gab (man kann natürlich geteilter Meinung über die Wichtigkeit dieser Neuerungen sein;). Ein Punkt, wo VB schon immer flexibler war ist der Select Case-Befehl, da auf Case auch eine Bereichsabfrage folgen kann: Select Case DateTime.Now.Hour Case 5 To 10 Console.WriteLine("Guten Morgen.") Case 11 To 17 Console.WriteLine("Guten Tag.") Case 18 To 23 Console.WriteLine("Guten Abend.") Case Else Console.WriteLine("Gute Nacht.") End Select Die Bereichsabfrage ist auch mit DateTime-Werten möglich: Select Case GebDatum Case "21.3.1999" To "20.04.1999" Console.WriteLine("Widder") Case "21.04.1999" To "21.05.1999" Console.WriteLine("Stier") Case "22.05.1999" To "21.06.1999" Console.WriteLine("Zwilling") usw. So etwas geht in C# leider nicht;) Auch wenn die Zeit der "Sprachkriege" längst vorbei ist, beide Lager können inzwischen sehr gut damit leben, dass ihre Sprache die etwas Bessere ist, macht es doch immer Spaß die kleinen Unterschiede zu betonen.
(möglicherweise das neue Visual Basic?) Seit dem 23. August gibt es ein neues Entwicklungswerkzeug von Microsoft zum Download (ein perfektes Timing, da ich einen Tag später aus meinem Urlaub zurückkam). Es heißt Visual Studio LightSwitch, läuft in VS 2010 und setzt auf .NET 4 und Silverlight 4. auf. Aktuell liegt es als Beta 1 (nicht als CTP) vor, später soll es Teil von Visual Studio Professional bzw. "reasonable priced" als eigenständiges Produkt verkauft werden. Das erklärte Ziel von LightSwitch ist es, Menschen das Erstellen typischer Geschäftsanwendungen zu ermöglichen, die über nur geringe oder gar keine Programmierkenntnisse verfügen (oder keine Lust zum Programmieren haben). Mir fallen zwar spontan ein halbes Dutzend Produkte ein, die dies seit Mitte der 80er Jahre ebenfalls versprochen haben (vielleicht erinnert sich noch jemand an Clarion), doch hinter LightSwitch steckt (natürlich) etwas mehr (z.B. die Möglichkeit, die Anwendung in der Cloud zu hosten, was mit Sicherheit den einen oder anderen Chef in spontane Verzückung versetzen wird). Die Idee hinter LightSwitch ist simpel und alles andere als neu (Stichwort: Ruby on Rails). Ein Anwender definiert sich die für Informationen, die seine Anwendung verarbeitet soll, Entitäten (Tabellen) mit Hilfe eines einfachen Designers. Als nächstes werden zwischen den Entitäten Beziehungen definiert, ohne die es in der Regel nicht geht. Anschließend müssen nur noch Screens (auf Silverlight basierende Formulare) angelegt werden, in denen z.B. ein neue Datensatz angelegt, editiert oder betrachtet werden kann. Alles das lässt sich, theoretisch, in wenigen Minuten zusammenklicken. Dabei wird die (SQL Server-) Datenbank im Hintergrund generiert, so dass es sich um eine typische datenbankbasierende Anwendung handelt. LightSwitch stammt vom Visual Studio BizApps Team bei Microsoft, die u.a. auch für das WinForms-Data Binding bei VS 2005 verantwortlich waren (Daniel Walzenbach, der seit ein paar Jahren dort arbeitet, hatte mir bereits vor knapp 2 Jahren gewisse, sehr vage Andeutungen gemacht, ohne allerdings konkreter zu werden - ich hatte daher schon gar nicht mehr damit gerechnet, dass es noch erscheint - auf alle Fälle hat das Tool deutlich länger gebraucht als ursprünglich geplant war). LightSwitch ist dennoch kein "Klicki-Bunti"-Tool, bei dem nach einer halben Stunde bereut es überhaupt gestartet zu haben. Es darf programmiert werden (in VB oder C#), auch wenn es nicht zwingend erforderlich ist, es gibt z.B. Authentifizierungsmechanismen und es lassen sich Silverlight-Custom Controls einbinden. Wer sich mit LightSwitch ausführlicher beschäftigen möchte, sollte unbedingt den "Vision Clinic Application Walkthrough" durcharbeiten, der Teil der Doku ist. LightSwitch ist kein "Business Visual Basic", auch wenn man es als solches eventuell erfolgreich positionieren könnte, oder eine Mischung aus Access und InfoPath. Dass macht z.B. der Umstand deutlich, dass es über 2.4 GByte (!) auf der Festplatte erfordert (eben eine komplette VS 2010-Installation). Mein erster Kontakt mit LightSwitch hinterließ einen durchwachsenen Eindruck. Aus irgendeinem Grund funktioniert es nur mit einer SQL Server 2008 Express-Instanz, die "SQLEXPRESS" heißen muss - ich habe bislang keine Möglichkeit gefunden, die Verbindungszeichenfolge dauerhaft zu ändern, um mit einer anderen Datenbank arbeiten zu können. Mit anderen Worten, auf meinem Notebook mit VS 2010-Installation und verschiedener SQL Server- und Oracle-Installationen läuft es nicht. Punkt aus. Frei nach Loriot "kann so etwas passieren, es darf aber nicht passieren" (Stichwort: Nudel-Sketch). Als ich LightSwitch dann, bereits ein wenig angesäuert, in einer frisch installierten Windows 7-VMWare installiert hatte (die Festplatte muss mit mind. 16 GByte von Anfang an groß genug dimensioniert werden), lief es dann problemlos. Wer LightSwitch problemlos kennen lernen möchte, sollte diese Option in Betracht ziehen.
(CSN - auf Tour und fast vor der Haustür) Die WM 2010 ist vorbei, die Vuvuzelas sind verstummt, die Touristen aus der ganzen Welt und die Spieler (736 an der Zahl ohne Betreuer und Funktionäre, welche die Zahl der "Offiziellen" vermutlich um den Faktor 20-30 vergrößern dürfte) sind längst wieder zu Hause. Einige Mannschaften ließen sich nach ihrer Rückkehr feiern, eine verließ den Flughafen durch die Hintertür in Bussen mit abgedunkelten Scheiben was ein wenig schade war (dabei hatten sie so schlecht doch gar nicht gespielt). Insgesamt war die WM 2010 ein erfreulich positives Ereignis, für fast alle Beteiligten. Die ganz großen Spiele, die man später im WM-Buch noch einmal nachlesen muss, oder die man sich als DVD kauft, um die Spannung noch einmal zu erleben, waren sicher nicht dabei. Es gab (so glaube ich mich zu erinnern) kaum ein Spiel, das kurz vor Schluss noch einmal gedreht wurde, lediglich einen dramatisch verschossenen Elfmeter im Spiel Uruquay gegen Ghana. Unsere Mannschaft hat einen erstaunlich modernen und temporeichen Fussball gespielt und vor allem Werbung für den deutschen Fussball gemacht. Die Ära der Rumpel- und Betonfussballer ist erst einmal vorbei. Auch wenn andere Teams sich ebenfalls weiterentwickeln werden, lässt das zur EM 2012 einiges erwarten (ein Halbfinale gegen Spanien ist damit Pflicht). Das Wichtigste war, dass es ein friedliches Fest war und praktisch alles von dem was im Vorfeld an negativen Szenarien heraufbeschworen wurde, nicht eintraf. Die WM ist vorbei, Zeit, dass ich mich um mein Visual Basic 2010-Kompendium kümmere. Es wird erscheinen, wenngleich es bis dahin noch eine Menge Arbeit ist, da ein reines "Anpassen" an die mit VB 10" eingeführten Spracherweiterungen mir zu wenig wäre. Im Datenbankteil wird das Entity Framework einen zentralen Platz einnehmen. Für den XML-Teil wird es eine "WM-Datenbank" mit den Namen aller Teams und Spieler geben. Und vielleicht lässt sich Christian noch einmal dazu überreden, das WM-Tippspiel auf ASP.NET 4.0 MVC anzupassen. Das wäre ein weiteres Highlight.
Seit gestern bin ich nicht mehr auf Facebook vertreten, was ich ein wenig schade finde, da ich einige ganz witzige Einträge hatte (das ist aber schon wieder ein paar Jahre her). Ich bin kein Facebook-User und werde vermutlich auch nie einer sein (jetzt sowieso erst einmal nicht). Die Sammelwut sozialer Netzwerke ist mir inzwischen ein wenig "unheimlich" geworden. Und einem Unternehmen, das wie Facebook offenbar so hemmungslos an der kommerziellen Auswertung dieser Daten interessiert ist, darf man seine privaten Daten einfach nicht anvertrauen (dann lieber der Suchmaschine, dem Kreditkartenunternehmen, dem bekannten Online-Versandhaus, das mit dem Versand von Büchern begann, und bei dem man inzwischen auch veganen Brotaufstrich bestellen kann, der Telekom, der Bahn AG usw. - Vorsicht, leichte Ironie;) Facebook ist technisch eine faszinierende Angelegenheit, optisch ansprechend gemacht, ein echtes Phänomen des 21. Jahrhunderts und für viele Menschen vermutlich schon ein 1:1-Abbild ihres sozialen Lebens. Aber ich bin der Meinung, dass man mit seinen privaten Daten genauso sparsam umgehen sollte wie die meisten Menschen mit ihrem Geld. Es stört mich, wie einfach das Abbild des eigenen "sozialen" Lebens für jeden sofort einsehbar ist. Vor kurzem haben Cordula Lochmann und Martin Szugat ihr Buch über soziale Netzwerke aktualisiert (ich war überrascht, wie viele Bücher es zu diesem Thema bei Amazon bereits gibt). Ich habe das Buch noch nicht gelesen, mich würde aber interessieren, inwieweit das Thema Schutz der Privatsphäre eine Rolle spielt (in der ersten Auflage, die vor ein paar Jahren erschien und eines der ersten Bücher zu dem Thema war, kam das Kapitel noch ein wenig zu kurz).
(VB2010 Express wird mit Sicherheit ein Treffer;) Die neue Version von Visual Basic 2010 Express, die es aktuell nur auf Englisch gibt (Ende April soll die deutschsprachige Version zur Verfügung stehen), macht einen hervorragenden Eindruck: >Durch die Umstellung auf WPF wirkt die Schrift in der IDE deutlich konturenschärfer, was die Lesbarkeit erhöht >Insgesamt wird die IDE aufgeräumter und einladender >Der WPF-Editor wurde ein verbessert und bietet endlich Unterstützung für Datenbindung über das Property-Fenster, Intellisense für XAML-Attribute und die Möglichkeit, Brushes (also Farben und Muster) endlich komfortabel in einem Farbauswahlfenster einstellen zu können. >Der Code-Editor von VS 2010 wurde generell verbessert - ein paar der Neuerungen gibt es auch in den Express Editionen, wie z.B. der Umstand, dass wenn ein Bezeichner (Variable) selektiert wird, alle Stellen, an denen der Bezeichner im Quelltext vorkommt, ebenfalls hervorgehoben werden (sehr praktisch) oder die "Suchfunktion" bei Intellisense, die z.B. bei Eingabe von "Dim r As Reader" dazu führt, dass in der Auswahlliste alle Klassen angeboten werden, in denen "Reader" enthalten ist (bei VS 2008 waren es nur Klassen, die mit Reader begannen, was oft nichts brachte, da man sich bekanntlich nie merken kann, ob eine Klasse XmlReader oder XmlTextReader heißt - zu mindestens geht es mir immer so;)). Toll sind die "Multiline-Lambdas", durch die man z.B. schreiben kann: Dim P = Sub (Start, Ende) For n = Start To Ende Console.Writeline(n) Next End Sub P(1,10) Nicht, dass die Welt darauf gewartet hätte, eine Zählschleife so schreiben zu können, aber das kleine und harmlose Beispielchen zeigt trotzdem sehr schön, wie elegant sich Lambdas (anonyme Funktionen/Prozeduren) bei VB 10 schreiben lassen, die sich mit einem angehängten "AsParallel" theoretisch auch parallel ausführen lassen. Das kann leicht übersehen werden: Die Spracherweiterungen von VB 10 stehen auch dann zur Verfügung, wenn das "Ziel" z.B. .NET 2.0 ausgewählt wird (per Voreinstellung wird das neue .NET 4 Client Profile als Ziel ausgewählt). Das bedeutet, dass man sie auch für Anwendungen verwenden kann, die noch unter .NET 2.0 laufen. Covarianz und Contravarianz Covarianz und Contravarianz sind zwei Begriffe, mit denen ich mich nach wie vor etwas schwer tue (Oliver Sturm kann das sicher wunderbar auf seine unnachahmliche Weise erklären und Eric Lippert, der bei Microsoft für die Implementierung in C# 4.0 zuständig war, erklärt die Begriffe in einem Blog auch sehr klar und strukturiert). Also, hier ein weiterer Versuch. Die Begriffe Covarianz und Contravarianz beziehen sich auf den Umstand, wann für einen Typ T1 ein Typ T2 eingesetzt werden kann, der zu T1 in einer "ist abgeleitet von" oder "ist ein Basistyp von T1"-Beziehung steht. Wenn ich Eric Lippert richtig verstanden habe, dann ist nicht der Typ covariant/contravariant, sondern die Beziehung der Typen T1 und T2 untereinander ist es. Aus Gründen der sprachlichen Vereinfachung heißt es aber, dass ein Typ T in einer generischen Schnittstelle oder einem generischen Delegaten covariant/contravariant ist. Covarianz liegt vor, wenn für einen Typ T1 in einer generischen Schnittstelle oder bei einem generischen Delegaten ein von T1 abgeleiteter Typ eingesetzt werden kann (also ein speziellerer Typ). Kontravarianz, wenn für T1 ein Typ eingesetzt werden kann, von dem sich T1 ableitet (also ein "allgemeinerer" Typ als T1). Beide haben etwas mit dem Thema Typsicherheit zu tun und sollen verhindern, dass zur Laufzeit InvalidCastExceptions auftreten, weil die Typen nicht zueinander passen. Hier ein sehr einfaches Beispiel: Dim Worte As IEnumerable(Of Object) = New List(Of String) From {"Sonntag", "Montag", "Dienstag"} Unter .NET 3.5 führt die Zuweisung zu einer InvalidCastException, auch wenn sie "logisch" erscheint. Warum soll man einer Variablen vom Typ Object nicht einen String zuweisen können? Der folgende Befehl funktioniert doch auch: Dim o As Object = "123" Der Hintergrund ist, dass diese implizite Typenkonvertierung bei generischen Schnittstellen bislang nicht erlaubt war, da sie zu einer Typunsicherheit führen könnte. Wenn aber, wie es bei IEnumerable(Of T) der Fall ist, ohnehin nur Werte gelesen, aber keine hinzugefügt werden können, kann auch nichts schiefgehen, so dass die Regeln bei .NET 4.0 etwas gelockert wurden. Covarianz und Contravarianz sind Eigenschaften der .NET-Klassenbibliothek und dort konkret bei generischen Schnittstellen und generischen Delegaten. Mit .NET 4.0 wurden Schnittstellen wie IEnumerable(Of T) so erweitert, dass für T auch ein von T abgeleiteter Typ (Covarianz) eingesetzt werden kann. Die dafür eingeführten Schlüsselwörter In und Out, mit denen die Parameter der Schnittstelle bzw. des Delegaten, die covariant (out) und kontravariant (in) sein sollen, sind neu bei VB 10 (und C# 4.0). Hier am besten ein kleines Beispiel. Gegeben seien zwei Klassen Person und Autor, wobei sich Autor von Person ableitet, damit eine "Grö0er-Kleiner"-Beziehung besteht. Weiterhin gibt es eine Variable vom Typ IEnumerable(Of Person), der eine generische List(Of Autor)-Collection zugewiesen werden soll. Unter .NET 3.5 (und damit VB 2008) gibt es bei der Ausführung eine InvalidCastException, da die Autor-Collection nicht einer Variablen vom Typ IEnumerable(Of Person) zugewiesen werden kann. Unter VB 10 und .NET 4.0 ist die Zuweisung dagegen erlaubt, da der T-Parameter von IEnumerable(Of T) mit dem neuen Schlüsselwort Out erweitert wurde und damit covariant ist. Hier ist das komplette Beispiel, das nebenbei auch von den neuen Collection-Initialisierern und automatischen Properties Gebrauch macht. ' ---------------------------------------------------------------------------- ' Ein Beispiel für Covarianz bei Visual Basic 10 und .NET 4.0 ' ---------------------------------------------------------------------------- Module Module1 ' Generische Schnittstelle mit einem allgemeinen Typ Dim AutorenTeam As IEnumerable(Of Person) Sub Main() Console.Title = "Covarianz-Beispiel" Console.ForegroundColor = ConsoleColor.Green ' Zuweisung einer generischen Collection eines spezielleren Typs AutorenTeam = GetAutoren() Console.WriteLine("{0} Autoren im Team.", CType(AutorenTeam, List(Of Autor)).Count) Console.ReadLine() End Sub Function GetAutoren() As IEnumerable(Of Autor) Return New List(Of Autor) From { New Autor() With {.Name = "Albert", .GebDatum = "1.5.1955"}, New Autor() With {.Name = "Bert", .GebDatum = "2.6.1972"}} End Function End Module Class Person Property Name As String Property GebDatum As DateTime End Class Class Autor : Inherits Person End Class Vorläufiges Fazit: Die mit .NET 4.0 für eine Reihe von Schnittstellen eingeführte Covarianz und Contravarianz sind eine praktische Angelegenheit, da sie zu etwas mehr Flexibilität beim Umgang mit generischen Schnittstellen (und generischen Delegaten) führen. Die meisten Visual Basic-Programmierer werden vermutlich gar nicht ahnen, dass bei einer Zuweisung Covarianz bzw. Contravarianz im Spiel ist. Die neuen Schlüsselwörter In und Out spielen für die Praxis kaum eine Rolle und sind in erster Linie für Entwickler von Klassenbibliotheken interessant, die auf diese Weise den Einsatz ihrer Schnittstellen und Delegaten etwas flexibler gestalten können. Ich hoffe, die Erklärungen war halbwegs verständlich (die MSDN-Doku erklärt die Themen auch recht ausführlich, wenngleich ich mich mit maschinell erstellten Übersetzungen wie "Kovarianz erlaubt einer Methode, einen stärker abgeleiteten Rückgabetyp zu verwenden, als vom generischen Typparameter der Schnittstelle definiert wurde" - was heißt hier "stärker abgeleitet?" - "etwas" schwer tue. Ich hoffe vor allem, dass die Erläuterungen sachlich korrekt sind. Ansonsten würde ich mich über einen Hinweis freuen.
(wo bleibt VB?) Seit Mitte März gibt es bei Microsoft mit Visual Studio 2010 Express for Windows Phone die erste Vorabversion des neuen Entwicklungswerkzeugs für die neue Mobilplattform von Microsoft mit dem Namen Windows Phone 7 Series. Oder ein wenig weniger strategisch und diplomatisch formuliert. Microsoft startet einen neuen Anlauf den Markt für das mobile Internet (mit Handys, SmartPhones und dergleichen) und hat sich dabei "ein wenig" von Apple, dem iPhone und dem enormen Erfolg des App Stores "inspireren" lassen (das war jetzt doch wieder ein wenig zu diplomatisch). Entwickelt werden Apps für Windows Phone 7 Series-Geräte (die ersten Mobiltelefone soll es noch im Herbst geben) mit einer speziellen Variante von Visual Studio 2010 Express, die nur Projektvorlagen für Windows Phone und XNA Game Studio 4.0 anbietet. Diese Edition wird, der Name deutet es an, kostenlos sein. Die Phone-Apps basieren auf Silverlight 4, getestet werden die Apps mit Hilfe eines kleinen Emulators. Im Vergleich zum iPhone ist die App-Entwicklung deutlich einfacher. Ein "Hello, World"-App besteht wirklich nur aus einer Zeile Code und nicht aus etwa 80 wie bei einer iPhone-App (wobei Einfachheit nicht immer von Vorteil ist weil dann eine Menge schlecht designter Apps entstehen). So weit, so gut. Weniger gut ist der Umstand, dass es in der ersten Preview von Visual Studio 2010 Express for Windows Phone nur Vorlagen für C# gibt. Visual Basic bleibt, genau wie bei XNA Game Studio von Anfang an, außen vor. Sollte es dabei bleiben, bleibt VB-Entwicklern nichts anderes übrig als C# zu lernen,wenn sie Apps für das neue Windows-Phone entwickeln möchten. Ich kann im Moment nicht beurteilen, ob dies lediglich an begrenzten Ressourcen liegt (in der Doku müssten alle Beispiele auch in VB vorliegen), oder ob dies strategische Gründe hat. Bereits auf der PDC08 wurde bekanntgegeben, dass beide Sprachen in Zukunft gemeinsam "weiterentwickelt" werden und Spracheigenschaften, die in C# eingeführt werden auch in VB kommen werden, was man auch so verstehen kann, dass C# weiter entwickelt wird und man von Fall zu Fall entscheidet, welches der neuen Sprachelemente nach VB übernommen wird. Auf der PDC08 wurde aber auch versprochen, dass jedes künftige Framework sowohl mit C# als auch VB genutzt werden kann. Grundsätzlich ist die Programmierung von Phone 7-Apps auch mit VB möglich und natürlich bedeutet der Umstand, dass die erste Vorabversion von Visual studio 2010 Express for Windows Phone keine Vorlagen für VB enthält noch nicht das Ende von VB. Strategisch ergibt es auch keinen Sinn, eine so große Gruppe von Entwicklern von dem neuen Markt auszuschließen. Microsoft muss daran interessiert sein, möglichst viele Entwickler auf die neue Plattform zu holen. Tatsache ist aber auch, dass VB im aktuellen Phone 7-SDK keine Rolle spielt und wer sofort mit der Entwicklung beginnen möchte (und wer möchte das nicht?), dies mit C# zu tun muss. Einen netten Vortrag von Lucian Wischik, der bei Microsoft für die Weiterentwicklung von Visual Basic zuständig ist, von der PDC09, in dem er zeigt wie sich eine einfache Silverlight 4-App (die theoretisch 1:1 auf einem Phone 7-Gerät laufen sollte) mit VB 2010 entwickeln lässt, gibt es hier.
(Pi ist überall) Über Google erfährt man bekanntlich so manches, was man vorher nicht wusste. Zum Beispiel, dass der 14.3 der Pi-Tag ist (eigentlich auch logisch). Kann und sollte man für eine harmlose Zahl einen Gedenktag einrichten? Ich denke schon, da es kaum etwas gibt (was mir spontan einfallen würde), das in allen Kulturen gleichermaßen geschätzt wird, das von keiner Ideologie umklammert ist, und um das noch keine Kriege geführt wurden. Pi ist vor allem ein besonderer Tag für die sog. Nerds. Wie man als typischer Nerd (oder Geek, wobei ich den Unterschied zwischen den beiden soziologisch-kulturellen Minderheiten nicht in 1-2 Sätzen beschreiben könnte - ich vermute, Geeks pflegen häufiger soziale Kontakte) den "Pie-Day" am besten begehen kann erfährt man hier: http://www.wikihow.com/Celebrate-Pi-Day Da es in diesem Blog hin und wieder auch um Visual Basic gehen soll, im folgenden eine kleine Console-App, die die Kreiszahl über eine einfache Reihenentwicklung annähert(zur Abwechslung einmal ohne LINQ&Lambdas): ' Berechnet Pi über eine einfache Annäherung Module Module1
Private RecurseLimit As Byte = 60 Private PiOffiziell As String = "3.1415926535897932384626433832795028841971693993751"
Sub Main() Console.Title = "Anhäherung an Pi" Console.ForegroundColor = ConsoleColor.Green Dim PiZahl As Double = 2 * CalculatePI(1) Console.WriteLine("Die Annährung: {0:N20}", PiZahl) Console.WriteLine("Math.PI: {0:N20}", Math.PI) Console.WriteLine("Das Original: {0:N50}", PiOffiziell) Console.ReadLine() End Sub
Private Function CalculatePI(ByVal i As Integer) As Double If i > RecurseLimit Then Return i Else Return 1 + (i / (1 + (2 * i))) * CalculatePI(i + 1) End If End Function
End Module Im Rahmen der Double-Genauigkeit ist das Ergebnis nicht schlecht und entspricht ziemlich genau dem, was auch Math.Pi liefert. Natürlich ist es kein Vergleich zur offiziellen Zahl, die inzwischen auf etwa 2 Trillionen Ziffern genau berechnet wurde (bekanntlich ist Pi eine unendliche Zahl), oder zu jener Kurzvarianten, die man (als echter Geek bzw. Nerd) eigentlich auswendig aufsagen können sollte (der Weltrekord liegt laut Wikipedia bei 100.000 Stellen, aufgestellt von Akira Haraguchi, der für das Aufzählen einen Tag benötigte): 3.1415926535897932384626433832795028841971693993751 Wer viel Zeit hat und gerne einmal eine "State of the Art"-Variante kennenlernen möchte, sollte sich den folgenden Text zu Gemüte führen, der zeigt, wie sich Pi mit Hilfe der Grafikkarten-CPU (GPU) und F# berechnen lässt: http://tomasp.net/articles/accelerator-intro.aspx
|