{"id":8,"date":"2008-10-26T11:35:35","date_gmt":"2008-10-26T10:35:35","guid":{"rendered":"http:\/\/www.leading-edge-dev.de\/?p=8"},"modified":"2008-10-26T11:42:34","modified_gmt":"2008-10-26T10:42:34","slug":"die-zukunft-von-c","status":"publish","type":"post","link":"https:\/\/www.minddriven.de\/index.php\/technology\/dot-net\/c-sharp\/die-zukunft-von-c","title":{"rendered":"Die Zukunft von C#"},"content":{"rendered":"<div class=\"ms-wikicontent\">\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Da ich stets in aktuellen Entwicklungen von C# interessiert bin, habe ich ein wenig im Internet recherchiert und fasse nachfolgend einige interessante Hinweise mit den entsprechenden Links zusammen, wo die Reise hin geht. In Zukunft m\u00f6chte ich diesen Text mit aktuellen Entwicklungen weiter ausbauen, die derzeitige Version ist lediglich als Ausgangspunkt gedacht.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\"><span style=\"font-size: medium;\">Integration von C-Omega Sprachelementen<\/span><\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\"><a href=\"http:\/\/research.microsoft.com\/Comega\/\">C-Omega<\/a>\u00a0ist eine\u00a0experimentelle Sprache von Microsoft Research und offiziell\u00a0gibt es keine Pl\u00e4ne f\u00fcr deren Verwendung. Trotzdem\u00a0fand bereits die \u00dcbernahme einiger Sprachelemente in C# statt, wie es auch in einem\u00a0<a href=\"http:\/\/www.infoworld.com\/article\/05\/06\/10\/HNhejlsberg_1.html\">Interview mit Anders Hejlsberg<\/a>\u00a0zur Sprache kommt. Bei C-Omega handelt es sich um eine Spracherweiterung von C#. Sie fokussiert dabei vor allem auf Probleme, welche bei der Erstellung netzwerkartiger, lose gebundener Applikationen entstehen. Diese betreffen die nebenl\u00e4ufige\/parallele Programmierung auf der einen Seite und die Integration von relationalen Daten und XML\u00a0auf der anderen Seite.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Beim Thema Nebenl\u00e4ufigkeit werden einige Konzepte eingef\u00fchrt, die zun\u00e4chst unter dem Namen &#8222;Polyphonic C#&#8220; implementiert wurden und auf die bessere Unterst\u00fctzung paralleler Abarbeitung (zum Beispiel durch neue Sprachelemente und die bessere Unterst\u00fctzung von Asynchronit\u00e4t) abzielen. Mit einer besseren Einbindung relationaler Daten sollen weiterhin die bisher nahezu getrennten Welten der Programmiersprachen und der Datenbanken miteinander vereint werden, indem ein leichterer Datenzugriff aus der Programmiersprache heraus stattfindet und dabei f\u00fcr Typsicherheit gesorgt wird. C-Omega setzt diese Idee um mit LINQ wurde dieses Konzept in .NET \u00fcbernommen. Auch der getypte Zugriff auf XML-Daten bzw. die einfache und typsichere Traversierung eines XML-Baums ist in C-Omega m\u00f6glich, allerdings fand noch keine direkte \u00dcbernahme in C#\/.NET statt (abgesehen von der LINQ-Unterst\u00fctzung f\u00fcr XML-Daten). Hier darf man gespannt sein, ob und wann dies nachgeholt wird.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\"><span style=\"font-size: medium;\">Nebenl\u00e4ufige\/Parallele Programmierung<\/span><\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">In der besseren Unterst\u00fctzung nebenl\u00e4ufiger Programmierung bzw. der Erstellung paralleler Programme liegt eine gro\u00dfe Herausforderung f\u00fcr die weitere Programmiersprachenentwicklung, bei der C# durch seine derzeit noch vorherrschende hohe Dynamik eine Vorreiterrolle spielen kann. Dem Thema Parallelit\u00e4t kommt dabei eine wachsende Bedeutung zu, da sich die Architektur heutiger Rechner und Netzwerke durch die Verbreitung von Multicore-Ans\u00e4tzen und der lose gekoppelter Netzwerke (Cloud Computing) stetig wandelt. Jedoch wird Parallelit\u00e4t auch von aktuellen Programmiersprachen wie C# oder Java nur \u00fcber Thread-und-Lock-Ans\u00e4tze unterst\u00fctzt, welche in den 1970er Jahren entwickelt wurden und die Programmierung nebenl\u00e4ufiger Applikationen schwer und unhandlich machen.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Microsoft hat mit dem <a href=\"http:\/\/msdn.microsoft.com\/en-us\/concurrency\/default.aspx\">Parallel Computing Developer Center<\/a> einen Bereich geschaffen, der sich dem Thema Parallelit\u00e4t\/Nebenl\u00e4ufigkeit widmet und dem einige Hinweise auf Entwicklungen f\u00fcr C#\/.NET entnommen werden k\u00f6nnen. So sind mit den <a href=\"http:\/\/blogs.msdn.com\/pfxteam\/\">Parallel Extensions<\/a> eine ganze Reihe von Spracherweiterungen f\u00fcr C#\/.NET verf\u00fcgbar, welche erste M\u00f6glichkeiten f\u00fcr die einfache Erstellung paralleler Programme beinhalten. Neben thread-sicheren Collections bietet z.B. die Klasse System.Threading.Parallel statische Methoden &#8222;For&#8220;, &#8222;ForEach&#8220; etc. an, mit denen eine einfache Parallelisierung von Programmkonstrukten erreicht werden kann. Interessant ist ebenfalls die Einbindung eines parallelen LINQ (PLINQ).<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Zuk\u00fcnftig d\u00fcrfte es nicht bei einer Spracherweiterung bleiben. Die Parallel Extensions werden meiner Meinung nach bald in neue Releases von C# bzw. das .NET-Framework selbst Einzug halten und so die parallele Programmierung vereinfachen. Doch das d\u00fcrfte erst die Spitze des Eisberges sein. Mittelfristig ist ein kompletter Paradigmenwechsel zur parallelen Programmierung hin n\u00f6tig, was allein \u00fcber Spracherweiterungen schwer erreichbar erscheint.\u00a0Auf jeden Fall sind neue Sprachkonzepte erforderlich, welche die \u00dcbersichtlichkeit bei der Erstellung gro\u00dfer paralleler Applikationen wahren und wiederkehrende Muster in eigene Konstrukte kapseln. Eine Art Katalog an &#8222;Parallel Design Patterns&#8220; w\u00e4re hierbei sicherlich hilfreich.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Was Microsoft zu dem Thema zu sagen hat, wird auf der PDC 2008 \u00f6ffentlich werden. Mit einem separaten Pre-Conference-Day und 4 Konferenz-Sessions auf der PDC wird der Parallelisierung gen\u00fcgend Raum geboten.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\"><span style=\"font-size: medium;\">C# 4<\/span><\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">In einem <a href=\"http:\/\/channel9.msdn.com\/posts\/Charles\/C-40-Meet-the-Design-Team\/\">Interview<\/a> mit den C#-Designern auf Channel 9 werden erste Details geliefert, in welche Richtung sich C# 4 entwickeln k\u00f6nnte. Unter anderem wird \u00fcber die Notwendigkeit von C# gesprochen, mit &#8222;dynamischen&#8220; Sprachen wie IronPython oder IronRuby zu interagieren und diese besser einzubinden. In diesem Zusammenhang k\u00f6nnte es auch zu einem Ausbau der M\u00f6glichkeiten f\u00fcr das Meta-Programming kommen. In dem Interview wird ebenfalls eine Vereinfachung konkurrierender Aufrufe angek\u00fcndigt.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Insgesamt stellt sich die Frage, wie weit die Sprachdefinition selbst mit neuen Features aufgebl\u00e4ht werden sollte, ohne sie zu un\u00fcbersichtlich zu machen und Entwickler (vor allem Neueinsteiger) abzuschrecken.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\"><span style=\"font-size: medium;\">Diese anderen Sharp&#8217;s&#8230;<\/span><\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Ein Blick auf Microsoft Research lohnt immer, da Forschungs-Projekte zun\u00e4chst zwar losgel\u00f6st sind von konkreten Applikationen, jedoch Microsoft auch einen Nutzen bringen sollen und damit fr\u00fcher oder sp\u00e4ter Auswirkungen auf bestehende Elemente wie C# und .NET haben.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\"><a href=\"http:\/\/research.microsoft.com\/SpecSharp\/\">Spec#<\/a> stellt beispielsweise eine Spracherweiterung f\u00fcr C# dar, welche die Erstellung von Qualit\u00e4tssoftware vereinfachen soll. Das grundlegende Prinzip ist dabei <a href=\"http:\/\/channel9.msdn.com\/shows\/Going+Deep\/Expert-to-Expert-Contract-Oriented-Programming-and-Spec\/\">programming by contract<\/a>. Der Programmierer gibt vor, wie sich beispielsweise eine Methode zu verhalten hat (Vor- und Nachbedingungen), was in der Spec#-Syntax geschieht. Zur Compilezeit wird gepr\u00fcft, ob die Methode diesen &#8222;Vertrag&#8220; einh\u00e4lt. Programming by contract ist auch f\u00fcr die Parallelisierung von Programmen interessant, da hier\u00fcber ausgesagt werden kann, wie sich eine Funktion verh\u00e4lt, z.B. ob sie interne Zust\u00e4nde einer Klasse \u00e4ndert oder andere Seiteneffekte hat. Der Compiler kann dann anhand dieser Aussagen und ihrer Pr\u00fcfung entscheiden, wie eine Parallelisierung anzustreben ist.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">Dass sich gewisse Dinge in einer funktionalen Programmiersprache einfacher und schneller implementieren lassen, ist hinl\u00e4nglich bekannt. Quicksort l\u00e4sst sich z.B. in Haskell elegant in\u00a0<a href=\"http:\/\/de.wikipedia.org\/wiki\/Haskell_(Programmiersprache)#QuickSort\">3 Zeilen Code<\/a> abhandeln. <a href=\"http:\/\/research.microsoft.com\/fsharp\/fsharp.aspx\">F#<\/a>\u00a0stellt eine Implementierung des funktionalen Programmierparadigmas dar, auch wenn es nicht &#8222;rein&#8220; funktional ist. Gewisse Konstrukte wie die Lambda-Ausdr\u00fccke wurden bereits in C# integriert, andere Anleihen d\u00fcrften folgen. Auch anderen Paradigmen wie der deklarativen Programmierung sollten man ein Augenmerk schenken, hier wurde mit WPF\/XAML ja auch schon ein erster Beitrag geleistet. Funktionale Programmierung ist f\u00fcr das Sprach-Design-Team bei Microsoft besonders interessant, da funktionale Programme per se frei sind von Seiteneffekten. Sie lassen sich daher von Haus aus gut parallelisieren. Es wird zwar kein kompletter Paradigmenwechsel angestrebt (daf\u00fcr sind funktionale Programme zu ineffektiv), aber es werden &#8222;Inseln&#8220; in der funktionalen Programmierung gesucht, mit welchen sich die aktuellen Probleme\u00a0imperativer Programmiersprachen\u00a0wie C# elegant handhaben lassen.<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\u00a0<\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\"><span style=\"font-size: medium;\">Weitere Links<\/span><\/div>\n<div class=\"ExternalClassBA3EC7CD18684C35A685CD6F7B1FFF8A\">\n<ul>\n<li><a href=\"http:\/\/codebetter.com\/blogs\/matthew.podwysocki\/archive\/2008\/05\/22\/what-is-the-future-of-c-anyways.aspx\"><span style=\"font-size: small; font-family: Calibri;\">http:\/\/codebetter.com\/blogs\/matthew.podwysocki\/archive\/2008\/05\/22\/what-is-the-future-of-c-anyways.aspx<\/span><\/a><\/li>\n<li><span style=\"font-size: 11pt; line-height: 115%; font-family: 'Calibri','sans-serif';\"><a href=\"http:\/\/www.dotnetjunkies.com\/WebLog\/johnwood\/archive\/2005\/01\/20\/46840.aspx\">http:\/\/www.dotnetjunkies.com\/WebLog\/johnwood\/archive\/2005\/01\/20\/46840.aspx<\/a><\/span><\/li>\n<li><span style=\"font-size: 11pt; line-height: 115%; font-family: 'Calibri','sans-serif';\"><a href=\"http:\/\/evain.net\/blog\/articles\/2008\/07\/29\/net-4-c-4-and-the-dlr\">http:\/\/evain.net\/blog\/articles\/2008\/07\/29\/net-4-c-4-and-the-dlr<\/a><\/span><\/li>\n<li><span style=\"font-size: 11pt; line-height: 115%; font-family: 'Calibri','sans-serif';\"><a href=\"http:\/\/www.computerworld.com.au\/index.php\/id;1149786074\">http:\/\/www.computerworld.com.au\/index.php\/id;1149786074<\/a><\/span><\/li>\n<li><span style=\"font-size: 11pt; line-height: 115%; font-family: 'Calibri','sans-serif';\"><a href=\"http:\/\/channel9.msdn.com\/posts\/Charles\/Anders-Hejlsberg-and-Guy-Steele-Concurrency-and-Language-Design\/\">http:\/\/channel9.msdn.com\/posts\/Charles\/Anders-Hejlsberg-and-Guy-Steele-Concurrency-and-Language-Design\/<\/a><\/span><\/li>\n<\/ul>\n<\/div>\n<p>\u00a0<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Da ich stets in aktuellen Entwicklungen von C# interessiert bin, habe ich ein wenig im Internet recherchiert und fasse nachfolgend einige interessante Hinweise mit den entsprechenden Links zusammen, wo die Reise hin geht. In Zukunft m\u00f6chte ich diesen Text mit aktuellen Entwicklungen weiter ausbauen, die derzeitige Version ist lediglich als Ausgangspunkt gedacht. \u00a0 Integration von &hellip; <a href=\"https:\/\/www.minddriven.de\/index.php\/technology\/dot-net\/c-sharp\/die-zukunft-von-c\" class=\"more-link\"><span class=\"screen-reader-text\">Die Zukunft von C#<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[309,26,310,22,30,28,29,24,23,25,27],"class_list":["post-8","post","type-post","status-publish","format-standard","hentry","category-c-sharp","tag-dot-net","tag-c-omega","tag-c-sharp","tag-c-sharp-40","tag-deklarative-programmierung","tag-f--sharp","tag-funktionale-programmierung","tag-parallel-extensions","tag-parallele-programmierung","tag-polyphonic-c-sharp","tag-spec"],"_links":{"self":[{"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/posts\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/comments?post=8"}],"version-history":[{"count":3,"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/posts\/8\/revisions"}],"predecessor-version":[{"id":14,"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/posts\/8\/revisions\/14"}],"wp:attachment":[{"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/media?parent=8"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/categories?post=8"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.minddriven.de\/index.php\/wp-json\/wp\/v2\/tags?post=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}