Laden...

Welche .NET Sprache? (VB.NET, C#, Python, Boo, Vala)

Erstellt von burli vor 14 Jahren Letzter Beitrag vor 14 Jahren 4.103 Views
B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren
Welche .NET Sprache? (VB.NET, C#, Python, Boo, Vala)

Ich spiele gerade mit .NET respektive Mono rum und überlege, welche Sprache am besten zu mir passt.

C# ist sicher die ideale Sprache für .NET, ist mir aber etwas zu kompliziert.

Ich bin eigentlich Python Fan. IronPython ist durch die dynamische Typisierung aber nicht so ganz geeignet für CLI und ist deshalb wohl weniger permformant als CPython.

Deshalb frage ich mich, ob Boo für mich die geeignete Sprache ist. Wo liegen die Vor- und Nachteile von Boo gegenüber anderen .NET Sprachen? Wie performant ist sie im Vergleich zu IronPython und C#? Gibt es einen Benchmark für die einzelnen .NET Sprachen?

Gelöschter Account
vor 14 Jahren

Gibt es einen Benchmark für die einzelnen .NET Sprachen?

nein, weil es nur einen kaum bis garnicht messbaren unterschied macht....

am ende kommt immer IL raus und die ist fast immer gleich.
sieht man z.b. auch recht gut im reflector, wo man sich IL in den verschiedensten sprachen darstellen lassen kann.

es gibt im übrigen einen python.net compiler... also kannst du einfach bei deiner präferierten sprache bleiben 😉

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Hm, also gerade IronPython soll nicht so berühmt sein. Es soll teilweise sogar langsamer als CPython sein. Problem ist die dynamische Typisierung. Zumindest zeigen alle IronPython/CPython Vergleiche, dass IronPython in einigen Bereichen schneller, in anderen sogar langsamer als CPython ist.

Deswegen wäre ja Boo so interessant. Python-ähnliche Syntax, aber statisch typisiert. Das sollte besser auf die .NET Plattform passen.

Gelöschter Account
vor 14 Jahren

ich habe ncihts von ironpython geschrieben.....

siehe auch: http://pythonnet.sourceforge.net/

vergleiche mit cpython brauchst du im übrigen garnicht anstellen.... das ist das selbe wie c++ mit c# zu vergleichen.....

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Note that this package does not implement Python as a first-class CLR language - it does not produce managed code (IL) from Python code. Rather, it is an integration of the C Python engine with the .NET runtime.

Ich denke nicht, dass das viel besser ist als CPython.

Gelöschter Account
vor 14 Jahren

was suchst du? ab wann ist für dich eine sprache besser wie eine andere?

1.457 Beiträge seit 2004
vor 14 Jahren

Hallo burli,

Alle .NET Sprache erzeugen am Schluss einen IL Code und deswegen gibt es hier keine Benchmarks oder dergleichen. Dein Vergleich von CPython gegenüber von .NET darfst du eigentlich nur machen wenn du weißt was für eine Awendung du schreiben willst. Für jeden Bedarf gibt es unterschiedliche Werkzeuge. Wie schon JAck30lena geschrieben hat:

das ist das selbe wie c++ mit c# zu vergleichen.....

Von daher solltest du dir im klaren sein was dein Ziel ist. Wenn du schnell und einfach eine auf .NET basierende Sprache erlernen möchtest, gibt es sehr viele Implementierungen neben den von Microsoft schon zur Verfügung gestellten. Da stellst sich eher die Frage ob diese Implementierungen auch gut durchgeführt sind.

Was ist dein Ziel?

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Alle .NET Sprache erzeugen am Schluss einen IL Code und deswegen gibt es hier keine Benchmarks oder dergleichen.

Sobald bei .NET dynamische Typisierung in's Spiel kommt geht das auf die Performance, IL Code hin oder her. Vielleicht kann man mal ein Programm in Boo schreiben, das einmal mit Static Types und einmal mit dynamischen Types einige Tests macht. Dann könnte man die Unterschiede vielleicht sehen

Was ist dein Ziel?

Ich suche eine Sprache, die sowohl für Desktop Anwendungen als auch für das Web geeignet ist. (bevorzugt ASP.NET MVC). C# ist mir eine Nummer zu kompliziert, Python ist mir insgesamt zu langsam. Ich bin aber eigentlich Python Fan. Also suche ich etwas, dass die Vorteile aus beiden Lagern so gut wie möglich verbindet. Hier scheint Boo für mich geeignet zu sein.

Gelöschter Account
vor 14 Jahren

zwischen ironpython und boo wird es keine performanceunterschiede geben....

wenn du das mit der dynamischen typisierung schon mal ansprichst... dann warte ein wenig bis c#4 und .net 4.0 . das ist eines der features der kommenden version.

1.457 Beiträge seit 2004
vor 14 Jahren

Sorry, aber ich selber arbeite auch seit Jahren mit Python und wenn du dort bleiben möchtest, gibt es verscheidene Möglichkeiten GUIs mit einzubinden. Das Python ein Allrounder ist, brauche ich hoffentlich nicht zu sagen.

Desweiteren ist das Erlernen von C# keine komplizierte Geschichte. Du wirst merken das du eher das .NET Framework kennenlernen musst bevor du sagen kannst ich kann C#. Du musst das .NET Framework kennen und da spielt es keine Rolle ob du C#, Boo oder sonst irgendeine .NET basierende Sprache erlernst.

Bis jetzt hast du kein Beispiel (compilierbarer Code) erbracht in welchen Fällen es Performanceprobleme geben kann.

Wie gesagt solltest du dir überlegen ob es Sinn macht dynamische Typisierung zu verwenden, wenn du .NET benutzt!!!

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

zwischen ironpython und boo wird es keine performanceunterschiede geben....

wenn du das mit der dynamischen typisierung schon mal ansprichst... dann warte ein wenig bis c#4 und .net 4.0 . das ist eines der features der kommenden version.

Ich lege nicht unbedingt Wert auf dynamische Typisierung. Deshalb ziehe ich Boo ja IronPython vor. Außerdem arbeite ich mit Mono. Bis die Features dort aufschlagen wird es eh etwas dauern.

Sorry, aber ich selber arbeite auch seit Jahren mit Python und wenn du dort bleiben möchtest, gibt es verscheidene Möglichkeiten GUIs mit einzubinden. Das Python ein Allrounder ist, brauche ich hoffentlich nicht zu sagen.

Ich kenne Python und die GUI Frameworks. Für Desktop Anwendungen fehlt mir aber die Performance

Du wirst merken das du eher das .NET Framework kennenlernen musst bevor du sagen kannst ich kann C#.

Das ist bei Python oder Java auch nicht anders.

Bis jetzt hast du kein Beispiel (compilierbarer Code) erbracht in welchen Fällen es Performanceprobleme geben kann.

Mal schauen. Ich werde mich mal in Boo einarbeiten und ein einfaches Programm schreiben, das ein bissel was macht und werde mal eine Version statisch typisiert und eine Version mit duck typing erstellen und vergleichen.

Hier sind einige Benchmarks, die IronPython 2.6.1 mit Python 2.6.1 vergleicht. Besonders schlecht schneidet IronPython bei PyBench bei den Tests TryRaiseExcept: und WithRaiseExcept:

1.457 Beiträge seit 2004
vor 14 Jahren


>
sind einige Benchmarks, die IronPython 2.6.1 mit Python 2.6.1 vergleicht. Besonders schlecht schneidet IronPython bei PyBench bei den Tests TryRaiseExcept: und WithRaiseExcept:

Wie schon erwähnt vergleichst du hier zwei unterschiedliche Implementierungen. Das eine ist Pyton und das andere ist nur die Sprache !!! die in .NET angebunden wurde. Es sind zwei verschiedene Dinge, die unten drunter laufen.

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Das ist mir schon klar. Letztendlich geht es mir um den Vergleich C# -> Boo -> IronPython -> Python und wo Boo und IronPython jeweils stehen. Mit dem Vergleich wollte ich lediglich zeigen, dass IronPython sich performancemäßig im Bereich von CPython bewegt.

Und ich gehe davon aus, dass Boo sich eher an C# orientiert. Und somit dürfte klar sein, dass nicht alle .Net Sprachen ähnliche Ergebnisse liefern.

Bis auf den Vergleich zwischen CPython und IronPython habe ich jedoch bisher keine Nachweise für diese Aussage.

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Ich habe ein kleines Beispiel gefunden. Eine Version für Python, eine für Boo

# Boo
def test():
    items = 2000000

    a = array(object, range(items))
    collect = []
    start = date.Now
    for i in range(items):
        collect.Add(a[i])
    print("${(date.Now-start).TotalMilliseconds} elapsed.")
test()
test()
test()
#Python
from time import time

def test():
    items = 2000000

    array = tuple(range(items))

    collect = []

    start = time()
    for i in xrange(items):
        collect.append(array[i])        
    elapsed = time() - start

    print elapsed*1000, " elapsed."

test()
test()
test()

Ich habe die Python Version einmal mit CPython und einmal mit IronPython ausgeführt, die Boo Version ganz normal compiliert

burli@bunti:~/Dropbox/Mono/boo$ python arrayperformance.py 395.513057709 elapsed. 405.61413765 elapsed. 404.172182083 elapsed. burli@bunti:~/Dropbox/Mono/boo$ ipy arrayperformance.py 1160.13336182 elapsed. 1096.33636475 elapsed. 1018.66149902 elapsed. burli@bunti:~/Dropbox/Mono/boo$ ./arrayperformance.exe 143,695 elapsed. 145,905 elapsed. 175,978 elapsed.

Zumindest in diesem Vergleich schneidet IronPython extrem schlecht ab.

S
401 Beiträge seit 2008
vor 14 Jahren

Wie wärs mit Scala?

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Wie wärs mit
>
?

Ich kenne Scala nur vom Namen. Das Hello World und die anderen Beispiele sehen auch nicht unbedingt verkehrt aus. Die Stärken von Python oder den .Net Sprachen ist die umfangreiche Klassenbibliothekt. Ich weiß nicht, wie es da bei Scala bestellt ist und möchte eigentlich auch keine Zeit investieren

906 Beiträge seit 2005
vor 14 Jahren

Delphi Prism (Oxygene), wenn du Pascal kennst und dir die Sprache gefällt.

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren


>
(Oxygene), wenn du Pascal kennst und dir die Sprache gefällt.

Ich hab Delphi vor Jahren mal programmiert. Da ich aber unter Linux unterwegs bin und damit auf Mono und Monodevelop bleibt mir eigentlich nur die Wahl zwischen VB.NET, C#, Boo, Vala und IronPython.

Da ich, wie bereits erwähnt, gerne in Python programmiere, IronPython aber eine bestenfalls ähnliche Performance bietet, wäre Boo wie gesagt eine passable Alternative. Bisher konnte ich auch noch nix negatives finden, außer vielleicht der etwas dünnen Dokumentation und der kleinen Community.

S
72 Beiträge seit 2009
vor 14 Jahren

Hallo burli,

ich kann diesen "aufhänger" an der Performance nicht ganz nachvollziehen.
Wo genau liegt das Problem in den ms unterschied?

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

ich kann diesen "aufhänger" an der Performance nicht ganz nachvollziehen.
Wo genau liegt das Problem in den ms unterschied?

Es geht ja nicht um Millisekunden. Das oben gezeigte Beispiel in Boo ist ungefähr 7-8 mal schneller als das vergleichbare IronPython Programm und knapp 3x schneller als die CPython Version. Je nachdem, was das Programm sonst noch machen soll sind die Abstände kleiner oder sogar noch größer.

Das ist halt schon ein enormer Unterschied. Es hängt natürlich vom Programm ab, ob sich das bemerkbar macht oder nicht. Aber wenn man die Performance standardmäßig zur Verfügung hat muss man nachher keine Klimmzüge mit eingebettetem C oder ähnlichem machen. Und in Anbetracht des Booms von Mobilgeräten mit verhältnismäßig geringer Rechenleistung ist das auch nicht zu verachten.

Ich suche eben nach einem Kompromiss zwischen gut lesbarem und wartbarem Code, kurzer Entwicklungszeit und guter Programmperformance. Und hier scheint Boo einen guten Kompromiss zu bilden. Einfache und klare Syntax (Im Vergleich zu C#) und trotzdem schnell (Im Vergleich zu Python).

906 Beiträge seit 2005
vor 14 Jahren


>>
(Oxygene), wenn du Pascal kennst und dir die Sprache gefällt.

Ich hab Delphi vor Jahren mal programmiert. Da ich aber unter Linux unterwegs bin und damit auf Mono und Monodevelop bleibt mir eigentlich nur die Wahl zwischen VB.NET, C#, Boo, Vala und IronPython.

nö, es werden auch Mono-Projekte unterstützt. Du kannst es also auch unter Linux nutzen.

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

Ich hab es gesehen, dass es auch mit Mono läuft. Aber erstens gibt es wohl keinen Monodevelop Support, zweitens ist es nicht in den Debian Repos, drittens funktioniert der "Download free Trail" nicht und viertens gefällt mir dieser komische "Buy" Button nicht

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo burli,

Ich suche eben nach einem Kompromiss zwischen gut lesbarem und wartbarem Code, kurzer Entwicklungszeit und guter Programmperformance. Und hier scheint Boo einen guten Kompromiss zu bilden. Einfache und klare Syntax (Im Vergleich zu C#) und trotzdem schnell (Im Vergleich zu Python).

damit hast du doch deine Frage selbst beantwortet. Und nicht nur das. Ich denke, du bist ohnehin der einzige, der dir die Frage beantworten kann, denn du hast so spezielle und gleichzeitig so individuelle Kriterien, dass dir kaum jemand anders helfen kann. Ich persönlich hätte weder Bedenken bei der Performance noch finde ich die Syntax von C# kompliziert. Und außerdem wurde ja schon gesagt, dass nicht die Sprache das aufwändig zu lernende ist, sondern die Bibliotheken. Wenn du dich für eine .NET-Sprache entscheidest, läuft es immer auf das .NET-Framework hinaus. Oder andersherum, wenn du das .NET-Framework nicht benutzen willst, dann bist du in meinen Augen sinnvollerweise gar nicht auf der Suche nach einer .NET-Sprache, sondern auf der Suche nach einer nativen Sprache.

herbivore

B
burli Themenstarter:in
62 Beiträge seit 2006
vor 14 Jahren

damit hast du doch deine Frage selbst beantwortet. Und nicht nur das. Ich denke, du bist ohnehin der einzige, der dir die Frage beantworten kann, denn du hast so spezielle und gleichzeitig so individuelle Kriterien, dass dir kaum jemand anders helfen kann. Ich persönlich hätte weder Bedenken bei der Performance noch finde ich die Syntax von C# kompliziert.

Kompliziert ist relativ. Ich weiß auch, dass es eigentlich überflüssig ist, in einem C# .Net Forum nach Boo und Mono zu fragen. Aber vielleicht hätte ich ja Glück gehabt und hätte einen ähnlichen "Exoten" gefunden 😉

Und außerdem wurde ja schon gesagt, dass nicht die Sprache das aufwändig zu lernende ist, sondern die Bibliotheken. Wenn du dich für eine .NET-Sprache entscheidest, läuft es immer auf das .NET-Framework hinaus. Oder andersherum, wenn du das .NET-Framework nicht benutzen willst, dann bist du in meinen Augen sinnvollerweise gar nicht auf der Suche nach einer .NET-Sprache, sondern auf der Suche nach einer nativen Sprache.

Wer sagt denn, dass ich das .Net Framework nicht nutzen will? Mir ist schon klar, dass es darauf hinaus läuft und dass das Framework die eigentliche Aufgabe beim Erlernen von .Net ist. Aber man muss es sich ja nicht durch eine überladene Sprachsyntax noch schwerer machen

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo burli,

Aber man muss es sich ja nicht durch eine überladene Sprachsyntax noch schwerer machen

wenn man eine überladene Sprachsyntax vermeiden möchte, sollte man zu C# greifen. C# hat eine einfache, klare, übersichtliche Syntax. Keine Ahnung, warum du das anders siehst. Falls du mit überladen meinst, dass sowas wie Linq und Co in die Sprache integriert wurde: Man muss Linq ja nicht benutzen, wenn man nicht will.

herbivore

906 Beiträge seit 2005
vor 14 Jahren

Ich hab es gesehen, dass es auch mit Mono läuft. Aber erstens gibt es wohl keinen Monodevelop Support

noch nicht. Kommt aber 😉

S
401 Beiträge seit 2008
vor 14 Jahren

damit hast du doch deine Frage selbst beantwortet. Und nicht nur das. Ich denke, du bist ohnehin der einzige, der dir die Frage beantworten kann, denn du hast so spezielle und gleichzeitig so individuelle Kriterien, dass dir kaum jemand anders helfen kann. Ich persönlich hätte weder Bedenken bei der Performance noch finde ich die Syntax von C# kompliziert.
Kompliziert ist relativ. Ich weiß auch, dass es eigentlich überflüssig ist, in einem C# .Net Forum nach Boo und Mono zu fragen. Aber vielleicht hätte ich ja Glück gehabt und hätte einen ähnlichen "Exoten" gefunden 😉

Wie gesagt: Scala 😃

Scala wird in erster Linie für die Java-Runtime entwickelt. Da sich Java und .Net doch sehr ähnlich sind, wird Scala auch auf .Net Angeboten. Es stehen dir hier alle Bibliotheken von Java oder .Net zur verfügung und vieles mehr.
z.B. tail-rekursive Methoden, traits, 100% Objekt-Orientiert, funktionale Elemente --> geniale Möglichkeiten