Work in Progress
Unter die "unterschiedlichen Datenquellen" (Abbildung 2), die sich über LINQ ansprechen lassen, fallen natürlich auch Datenbanken. Unter Mono/C# gilt dies aber erst mit Einschränkungen. Arbeiten zur Erweiterung der Backends auf Datenbanken - darunter zuerst für MySQL - laufen bei Mono erst. Der aktuelle Status lässt sich unter anderem unter [3] erfragen.
Abbildung 2: In der Microsoft-Welt gibt es viele Third-Party-Provider für LINQ-Anbindungen. Mono holt erst langsam auf. Einige Datenbank-Backends gibt es jedoch bereits.
Implizit und von Anwendern von LINQ-Expressions in der Regel unbemerkt, benutzt Listing 3 übrigens eine weitere jüngst hinzugekommen Neuerung von C#, die Lambda-Ausdrücke. Dabei handelt es sich um anonyme Funktionen, die der Entwickler erst an der Aufrufstelle definiert.
| Listing 3: LINQ |
|---|
01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04
05 class Hauptprogramm {
06 public static void Main(string[] args) {
07 List<double> zufallsZahlen = new List<double>();
08 Random rg = new Random();
09 for(int i=0; i<50; i++) zufallsZahlen.Add
(6.0*rg.NextDouble());
10
11 var highNumbers =
12 from z in zufallsZahlen
13 where z>5.5
14 select z;
15
16 foreach(var x in highNumbers) Console.WriteLine(x);
17 }
18 }
|
Hilfe von außen
Obgleich Mono über eine reichhaltige Ausstattung an Bibliotheken verfügt, gibt es Situationen, in denen bestimmte Funktionen fehlen oder die Performance einer reinen C#-Umsetzung nicht ausreicht. Hier hilft der Aufruf externer Bibliotheken, oft aus dem C-Umfeld, mit P/Invoke. Listing 4 zeigt das prinzipielle Vorgehen in Anlehnung an [4].
|
Listing 4: Libc |
|---|
01 using System;
02 using System.Runtime.InteropServices;
03
04 class Hauptprogramm {
05 public static void Main(string[] args) {
06 int id = getpid();
07 Console.WriteLine("Die ID des Prozesses ist {0}", id);
08 }
09
10 [DllImport ("libc.so.6")]
11 private static extern int getpid ();
12 }
|
Der Beispielcode liest die ID seines eigenen Prozesses mit Hilfe der Libc-Funktion »getpid()« aus. Wie zu sehen ist, reicht es aus, die Bibliothek samt der daraus zu ladenden Funktion anzugeben. Die Laufzeitumgebung erledigt dann den Rest, sie findet und lädt die Bibliothek automatisch. Allerdings entsteht beim Aufruf externer Bibliotheken selten portabler Code - schon die unterschiedlichen Namen von Bibliotheken unter Windows und Linux erschweren dies. C++-Code lässt sich ebenfalls nutzen, der Programmierer sollte ihn jedoch als »extern C« deklarieren.
Auch in der Übergabe von Parametern versteckt sich mancher Fallstrick. Zudem unterliegt externer Code natürlich nicht den Kontroll- und Aufräummechanismen, die C# im Vergleich zu C und C++ zu einer sicheren Sprache machen. Wer externen Code einbindet, sollte also genügend Zeit für Entwicklungs- und Testphasen einplanen. Wegen der besseren Performance von C- und C++-Code kann sich dies aber im Einzelfall durchaus auszahlen.
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 3 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





