Welche Programmiersprache für windowsnahe Tools?

ascer schrieb:
Auf welchen wichtigen Plattformen läuft denn Java bitte nicht?

Was bedeutet für dich denn "laufen"?
Da gibt es durchaus Änderungen, die du machen musst. Darüber hinaus verhalten sich auch gewisse Funktionalitäten des Frameworks anders.

ascer schrieb:
Bei Effizienz/Geschwindigkeit war ich wohl zu zweideutig, sorry. Bezüglich C++ meinte ich natürlich die Software hinterher, nicht die Entwicklungszeit, die ist da natürlich ungleich höher.

Dann siehst du eigentlich ein, dass sich der Aufwand für die meisten Anwendungen, und speziell für den OP, nicht lohnt?

ascer schrieb:
Und Python benötigt "undefinierten Aufbau des Codes"? Ist dir klar wie viel professionelle Software in Python geschrieben ist?

A-aber C# benutzt niemand?

ascer schrieb:
Abgesehen davon bedeutet Ducktyping nicht, dass du nicht genauso alles streng OOP und streng getyped schreiben kannst.

Das habe ich nicht gesagt. Allerdings bedeutet diese "Freiheit" ein Mangel an Struktur, für die du selbst sorgen musst.
Das wird dann bei Nachforschungen problematisch, wenn du fremden Code lesen musst.

ascer schrieb:
Sämtliche patterns und (Mehrfach-)Vererbung gibt es ebenso. Ich wüsste also nicht, warum man Python jetzt ablehnen sollte. Python kann alles und das ziemlich durchdacht. Hat mittlerweile die meisten Libraries...Python hat ja nicht umsonst Java/C++ als Programmiersprache an Universitäten abgelöst.

Ich wüsste nicht, wieso man C# ablehnen sollte. Schließlich ist es strukturierter als Python, hat ein riesen Framework, eine sehr entwickelte Entwicklungsumgebung mit VS, und ist sogar schneller als Python, das ja angeblich ein qualifizierter C++ Ersatz ist, deiner Meinung nach.

Es scheint mir eher so, als möchtest du grundlos C# bashen.
Von der Syntax her sind Java und C# zum Verwechseln ähnlich. Java ist allerdings so strengst objektorientiert, dass du bei Event-Systemen oder komplexeren Designs extra für Java zu einem anderen Design-Pattern wechseln musst. Das ist "(imho)" völlig Banane.

Und das ist sogar völlig am Thema vorbei.
Für den OP ist (für dich leider) C# die einzig richtige Antwort. Weder Python, noch Java sind windowsnah. Und bei C++ ist der Einstieg- und Entwicklungsaufwand zu hoch. Solange man keine systemkritischen Anwendungen schreibt, sind C/C++ völlig überflüssig und rechtfertigen den Zusatzaufwand und die Zusatzfehlerquellen nicht.
 
Wenn man explizit auf Windows entwickeln möchte - klar - dann ist C# ist die Antwort. Schon alleine wegen .NET und der langen Historie.

Bezüglich Java: was bedeutet denn für dich "Anpassungen" machen? Irgendwelche Standardprogramme, wo man jetzt nicht ewig viel dependencies hat, laufen als .jar-file ja definitiv ohne Anpassung überall. Größere Sachen muss halt sinnvoll packen, eventuell noch einen Installer für schreiben, usw.
Ich hab da aber dennoch bis jetzt nie großartig Zeit mit verbrannt.

Wo habe ich im übrigen Python als qualifizierten C++-Ersatz betitelt? In vielen Fällen ist es das zwar, aber natürlich lange nicht in allen.

C# schneller als Python ist eine unqualifizierte Aussage. Das eine interpretierte Sprache eine Liste nativ langsamer durchläuft beispielsweise, sollte wohl klar sein. Dennoch ist Pythons Geschwindigkeit auch hier *enorm* für eine interpretierte Sprache, sodass es in den aller meisten Fällen für Individualsoftware einfach genau gar keinen Unterschied macht.

Wenn aber Geschwindigkeit benötigt wird, geht das in Python in manchen Fällen trotzdem (und das recht unkompliziert). Mit multiprocessing und Sachen wie SciPy, NumPy, ... kann man alles, was man an komplizierteren Berechnungen z.B anstellen müsste, mit nativen C-Arrays vollführen. Man kontrolliert im Prinzip mit einer Python-API nur noch hochoptimierten C-Code.
Außer es direkt in C selbst zu machen, kommt da nichts mehr an Geschwindigkeit hinterher.

Für diverse Bereiche gibt es das gleiche übrigens z.B. für CUDA. Ob nun Bildverarbeitung, Rendering oder Lineare Algebra. Für die meisten Sachen (Tendenz steigend) hat man dann Python Module, in denen du über eine bequeme API hochoptimierten CUDA-Code anstößt. Als Ergebnis bekommt man wieder ein C-Array, einfach verwaltet über NumPy.

Eine Matrix-Multiplikation in C++ mit Eigen mit optimiertem Code ist da beispielsweise auf der CPU mehr als 10x so langsam, wie der gleiche Spaß in Python, der dann auf die GPU geschoben wird. Übrigens, Python-typisch, mit 10x weniger Codezeilen.

Da ist das einzige, was dann noch schneller wäre, dass ganze selbst in CUDA-C zu implementieren.

Geschwindigkeitsvergleiche sind insofern sehr subjektiv. C++ nehme ich z.B. nur noch, wenn man insgesamt viele Daten verwaltet, sodass es unter Python mit zahlreichen APIs einfach zu deutlich mehr Speicherverbrauch kommen würde...oder ansonsten zu viel hin- und hergeschiebe von Zeug viel Zeit verbraten würde...oder wenn sehr viel "Kleinzeug" parallel bearbeitet wird, wodurch der Overhead mit Python dazwischen und den multiprocessing-Prozessen "unwirtschaftlich" wird.
 
Zuletzt bearbeitet:
ascer schrieb:
Bezüglich Java: was bedeutet denn für dich "Anpassungen" machen? Irgendwelche Standardprogramme, wo man jetzt nicht ewig viel dependencies hat, laufen als .jar-file ja definitiv ohne Anpassung überall. Größere Sachen muss halt sinnvoll packen, eventuell noch einen Installer für schreiben, usw.
Ich hab da aber dennoch bis jetzt nie großartig Zeit mit verbrannt.

http://sunsite.uakom.sk/sunworldonline/swol-11-1998/swol-11-javaapps.html

ascer schrieb:
Wo habe ich im übrigen Python als qualifizierten C++-Ersatz betitelt? In vielen Fällen ist es das zwar, aber natürlich lange nicht in allen.

Dein Uni-Argument.

ascer schrieb:
C# schneller als Python ist eine unqualifizierte Aussage.[Begründung]

Im Widerspruch zu deinen eigenen vorherigen Aussagen und der Verwendung diverser Komparativer wie z.B. "schneller", "effizienter", "schöner" in vorherigen Posts.
Du drehst dich da ein bisschen im Kreis wie ein Hund und beißt dir den eigenen Schwanz ab. ^^

Im Groben verstehe ich was du sagen willst, allerdings ist das nicht korrekt, dennoch reicht das als Begründung für eine persönliche Präferenz. Nur ist das am Thema weit vorbei und du relativierst oder sprichst gegen deine selbst angeführten Argumente.
 
Also die Java-Pitfalls...naja...wer große Projekte mit -nowarn kompiliert oder vorher nicht die Kompatibilität von APIs checkt, oder ohne auf Formatierung zu achten wild I/O-Sachen einbaut...das ist jetzt gefühlt nichts, was einen halbwegs erfahrenen Entwickler großartig bei der Entwicklung behindert.

Zu der Python-Performance: ich sehe da jetzt ehrlich gesagt keinen Widerspruch. Nutzt man ausschließlich native Python modules, dann ist natürlich eine interpretierte Sprache langsamer, ja. Python ist innerhalb der interpretierten Sprachen aber dennoch enorm schnell & effizient, sodass die Geschwindigkeit für beliebige Individualsoftware vollkommen ausreichend ist.
Kein Anwender wird einen Unterschied feststellen, wenn jetzt eine Mail-Software, eine Notiz-Software oder irgendwas anderes beliebiges, individuelles, das Unternehmen XYZ im Intranet nutzt, in Python geschrieben ist.

Anwendungsszenarien, die sehr Ressourcenlastig sind, sind häufig beispielsweise Bildverarbeitung, mathematische Operationen, Datenverarbeitungszeug, usw. In allen drei Fällen gibt es Python-APIs, die die Berechnungen in nativen, hochoptimierten, parallelen C-Code auslagern.
Gerade für mathematische Berechnungen gibt es darüber hinaus eben noch APIs, die die Berechnungen auf eine GPU schieben können, die das dann mit CUDA (und seinen hochoptimierten libraries) cruncht und als C-Arrays zurückgibt. Schneller geht dann kaum noch.

Was eben in Python natürlich nicht gut geht, sind beispielsweise Serverapplikationen, die viele requests bearbeiten müssen. Multiprocessing hat halt bedingt durch die Interpretergeschichte einiges an Overhead, müssen also viele, kleine requests parallel abgearbeitet werden, rennt man mit Python in einen großen Overhead. APIs helfen da auch nicht weiter, da das hin- und hergeschiebe zwischen Python und C ebenso Zeit frisst.

Selbiges gilt für Grafikapplikationen, wo sehr viel ständig hin- und hergeschoben werden müsste.

Dennoch bleibt ja aber eben ein sehr großer Teil an Software, wo sich Python nicht negativ bemerkbar macht oder dank APIs sogar schneller ist als alles andere (abgesehen eben von nativem C-Code oder nativem CUDA-C).
 
Solange man keine WPF Anwendungen schreibt läuft C# auch super auf allen anderen Systemen via Mono. Ausgereift ist Mono auch. Nicht umsonst gibt es Android + iOS Apps die auch damit laufen und auch Unity arbeitet mit Mono. Das sollte man also durchaus beachten. Solange man keine GUIs schreiben will (denn mal ehrlich: windows forms mit Mono ist hässlich), ist C# mit Mono Crossplattform wie es nur sein kann. Ansonsten ist C# von Sprachfeatures & Framework wesentlich besser durchdacht als Java. Da wurden einige Fehler die Java anfangs gemacht hat direkt besser umgesetzt. Cross Plattform für .net core & web ist auch momentan in der release candidate Phase. C# abschreiben würde ich also bei weitem nicht.
 
Zuletzt bearbeitet:
Zurück
Oben