Webanwendungen mit Mono

M

miketech

Routinier
Hi zusammen,

mit Java kann ich ja sehr bequem Webanwendungen schreiben, z.B. Serverdienste, oder auch Webservices, inkl. dynamische Webseiten usw.

Wie mache ich sowas mit Mono?

Also Server werde ich damit ja ohne Probleme schreiben können, da ich mit Mono sicher auch ohne weiteres einen Socket öffnen kann.

Aber wie schauts mit dynamischen Webseiten und Webservices aus? Unter .NET gibt es soweit ich weiß dafür ASP.NET. Da ASP.NET aber nicht zum Standard gehört und sicher voller Patente von MS ist möchte ich das nicht nutzen. Gibts da auch was eigenes für Mono?


Und noch eben eine Frage zu C#:

Wenn ich eine Anwendung mit mehreren Threads habe, wie geh ich mit gemeinsam genutzten Variablen um? Mit Java kann ich eine Variable als synchronized deklarieren und dann kümmert sich Java darum, dass keine zwei Threads gleichzeitig auf eine Variable zugreifen. Wie ist das unter C#?

Gruß

Mike
 
miketech schrieb:
Aber wie schauts mit dynamischen Webseiten und Webservices aus? Unter .NET gibt es soweit ich weiß dafür ASP.NET. Da ASP.NET aber nicht zum Standard gehört und sicher voller Patente von MS ist möchte ich das nicht nutzen. Gibts da auch was eigenes für Mono?

ich wüßte nicht, dass es was anders für Mono gibt. Es gibt ja auch keinen Grund nicht etwas zu implementieren wie man es von .Net kennt, höchstens man wollte zwanghaft inkompatibilitäten herein bekommen.

Wenn ich eine Anwendung mit mehreren Threads habe, wie geh ich mit gemeinsam genutzten Variablen um? Mit Java kann ich eine Variable als synchronized deklarieren und dann kümmert sich Java darum, dass keine zwei Threads gleichzeitig auf eine Variable zugreifen. Wie ist das unter C#?

Bei C# macht lock() das gleiche.

Allgemein ist das keine schlechte Quelle[0] wenn du wissen willst wie eine bestimmte Funktion von Java unter C# heißt oder wo die Unterschiede sind.

[0] http://www.25hoursaday.com/CsharpVsJava.html
 
Hi,

naja das Problem ist, dass ASP.NET ja nun nicht zum Standard von .NET gehört, oder? Zumindest höre ich immer wieder, dass alles, was über Standard C# hinausgeht stark von Patenten betroffen sein kann. D.h. implementiere ich jetzt etwas in C#/Mono mit ASP.NET statt Java kanns sein, dass mir Microsoft irgendwann den Hahn zudreht, wenn ich nicht Windows auf dem Server habe und das Original .NET verwende, da Mono dies nicht mehr implementieren darf.

Danke für den Link, werde ich mir mal in Ruhe durchlesen.

Aber noch eine Frage: Auf PL wurde zuletzt diskutiert, wie das mit dem Heap und Stack läuft, bei Structs und Classes. Kann mir das hier vielleicht nochmal jemand erklären? Wo genau sitzt Heap und wo sitzt der Stack im Speicher?

Gruß

Mike
 
Hi nochmal,

ich hab mir gerade mal den Link angeschaut. Schöne Übersicht! Allerdings wird hier anscheinend noch nicht auf Java 5 Rücksicht genommen. Mit Java 5 müsste sich die ganze Situtation ja etwas verändert haben, da so einige Features in den Sprachkern aufgenommen wurden.

Gruß

Mike
 
miketech schrieb:
naja das Problem ist, dass ASP.NET ja nun nicht zum Standard von .NET gehört, oder?

ja.

Zumindest höre ich immer wieder, dass alles, was über Standard C# hinausgeht stark von Patenten betroffen sein kann.

das trifft wahrscheinlich auch auf Teile des Standards zu und auch auf alle anderen Programmiersprachen/Frameworks und Programme die über ein "Hello-World" hinaus gehen.

D.h. implementiere ich jetzt etwas in C#/Mono mit ASP.NET statt Java kanns sein, dass mir Microsoft irgendwann den Hahn zudreht,

Den Hahn können viele zu drehen, nicht nur MS und auch nicht nur wenn du Mono verwendest.
Ich denke man muß das prinzipielle Verhalten von Patente klären um das zu klären.
Patente sind völlig unabhängig von Programmiersprache, Framework und Implementierung.

Die Funktionen die ASP.Net zur verfügung stellt sind von der Funktions- bzw. Wirkungsweise nichts anderes als das was auch die entsprechenden Java Pakete zur Verfügung stellen.
Wenn ein Patent also die prinzipielle Funktionsweise so gut abdeckt, dass es wirklich kein Weg herum gibt, dann hätte nicht nur Mono ein Problem, sondern genauso Java, oder jede andere lib für jede beliebige Sprache die diese Funktion zur verfügung stellt.
Diese Frage ob und wie ein Patent greift hat absolut nicht mit der verwendeten Sprache/Framework zu tun und absolut nichts mit dem Namen der Funktion.
Wenn man bei Mono also Webservices unter einem anderen Namen entwickeln würde, hätte das auf die Patentsituation absolut keinen Einfluss. Das einzige was sich verändern würde wäre, dass es inkompatibilitäten zwischen .Net und Mono erzeugen würde. Die Patente (von MS und anderen) würde man aber entweder genauso verletzen oder genauso nicht verletzen.
Es macht kein Sinn etwas einen eigenen Namen zu geben und zu glauben damit hätte man weniger mögliche Patentprobleme.

Aber noch eine Frage: Auf PL wurde zuletzt diskutiert, wie das mit dem Heap und Stack läuft, bei Structs und Classes. Kann mir das hier vielleicht nochmal jemand erklären? Wo genau sitzt Heap und wo sitzt der Stack im Speicher?

Naja, sie sitzen alle im gleiche Speicher, du hast ja nur "einen" Speicher. Die Frage ist die Organisation. Der Heap (zu deutsch Halde) ist quasi ein großer Haufen wo jeder seine Sachen hinschmeißt und sich (auf dem Stack) merkt wo sie liegen. Diese Halde hat natürlich seine Probleme, wenn jemand neues etwas ablegen will muß er erstmal nach einem Platz suchen wo das neue Datum hin passt, man kann sich vorstellen das der Speicher mit der Zeit ziemlich stark fragmentiert und vielleicht viele kleine Lücken übrig bleiben und ein neues Datum keine groß genuge Lücke mehr findet. Dann gibt es zwei Möglichkeiten entweder du hast einen heapt überlauf und das Programm stürzt ab oder der Heap kann sich reorganisieren um die kleinen Lücken so zu ordnen, dass ein Segment entsteht das groß genung für das Datum ist.
Wie du dur vorstellen kannst braucht das aber natürlich alles seine Zeit, wodurch der Heap im allgemeinen deutlich langsammer ist.

Der Stack ist wie der Stack den du auch als Datenstruktur programmieren kannst ein ganz einfacher Keller (LIFO). Die Daten werden nacheinander wie sei kommen auf den Stack gelegt und so wie man die Blöcke verlässt auch wieder abgetragen. Die Daten die auf dem Stack landen müssen also Wertetypen sein die eine feste Lebensdauer in dem Block haben in dem sie erzeugt wurden. Dass das viel weniger Arbeit macht und der Specher optimal genutzt wird denke ich kann man erkennen.
 
Zuletzt bearbeitet:
Hi,

erstmal danke für die genaue Erläuterung von Heap und Stack. Wo landen denn Variablen, wie:

int i;

? Ist das auf dem Stack? Weil das Problem ist ja:

int i;
int j;

Nun würde j doch über i liegen, d.h. an i komm ich nicht dran. Oder kann ich auch durch den Stack durchnavigieren?

Selbiges Problem, wenn ich nur Adressen auf dem Stack speichere. Irgendwie muss ich ja dran kommen.

Mit den Patenten hast Du natürlich Recht. Vielleicht liegts auch nur an dem Beigeschmack, den ASP.NET bei mir erzeugt :)

Gruß

Mike
 
miketech schrieb:
Hi,

erstmal danke für die genaue Erläuterung von Heap und Stack. Wo landen denn Variablen, wie:

int i;

? Ist das auf dem Stack? Weil das Problem ist ja:

int i;
int j;

Nun würde j doch über i liegen, d.h. an i komm ich nicht dran. Oder kann ich auch durch den Stack durchnavigieren?

An die Daten die auf dem Speicher sind kommst du natürlich immer ran, es ist nur eine Frage wie der Speicher belegt und freigegeben wird.

Ein Beispiel:
Code:
begin
  int i
  int j
  begin
    int x
      begin
        int y
      end
    int z
  end
end
der Stack pulsiert jetzt im Laufe des Programms so:
i;j
i;j;x
i;j;x;y
i;j;x;z
i;j

Solange die Daten auf dem Stack sind kommst du natürlich immer an alle auch ran.
 
Ah ok, d.h. ich muss mich nicht um ein mühseliges Freigeben des Speichers kümmern, da es eh von oben nach unten wieder freigegeben wird. Korrekt?

Dafür ist der Stack wesentlich kleiner, als Heap, wenn ich das richtig sehe.

Gruß

Mike
 

Ähnliche Themen

Java 5 - Performance und Vergleich zu C++

Zurück
Oben