Aus welchen Gründen sollte ich C # anstelle von Java und C ++ wählen? [geschlossen]

geschlossen . Diese Frage ist meinungsbasiert . Derzeit werden keine Antworten akzeptiert.

Kommentare

  • Wie geschrieben war die Frage ein Lehrbuchbeispiel für nicht konstruktiv " Welche Sprache ist besser? " Fragen, die hier nicht zum Thema gehören. Ich ' habe versucht, es mit einer Bearbeitung konstruktiver zu gestalten, da es tatsächlich gute, gut durchdachte Antworten gab. Beachten Sie dennoch die FAQ und dieses Blogposts , wenn Sie Fragen dieser Art stellen .
  • Lassen Sie mich einige kantigere Elemente hinzufügen. .NET hat ein genau definiertes DOM ( z. B. CodeDOM ) für seine Sprache, und folglich ist das dynamische Generieren von Dingen zur Laufzeit viel einfacher und effizienter. Dies kann auch als infrastrukturelle Fähigkeit hilfreich sein. Außerdem stimmt das Typsystem mit allen nativen W3-Typen 1: 1 überein. Im Kern wurden W3 und andere Interops von Anfang an in die Sprache eingebrannt. Für andere Sprachen wurden diese Bedenken nur aufgegriffen und stellen sie vor viele Herausforderungen. Wenn Sie ' mit vielen Sprachen und / oder Protokollen zusammenarbeiten, ist .NET ebenfalls sehr stark.
  • Hey, JoeGeeky, fügen Sie Ihren Kommentar als hinzu eine Antwort auf die Frage.
  • Die eigentliche Frage lautet: Aus welchen Gründen sollte ich Nemerle, F * und F # anstelle von C # wählen? (dh alle drei Sprachen stammen von MS und alle drei sind besser)
  • Ich glaube wirklich nicht, dass ' irgendeine Aussage des Genres " Sprache / Plattform X im Vergleich zu Sprache / Plattform Y ist IMMER besser " ist gültig und ich denke auch, dass es für jedes X und Y mit Sicherheit leicht ungültig werden kann Kontexte. Was ' ist der Punkt dieser Frage?

Antwort

Die Frage sollte lauten: " Welche Sprache eignet sich besser für die moderne, typische Anwendungsentwicklung? ".

Bearbeiten : Ich habe einige der folgenden Kommentare angesprochen. Eine kleine Bemerkung: Bedenken Sie, dass wenn Sie viele Dinge nativ als Redewendungen haben, dies ein großer Unterschied ist, als sie jedes Mal selbst zu implementieren oder herunterzuladen und zu verwenden. Fast alles kann in jeder dieser Sprachen implementiert werden. Die Frage ist – was Die Sprachen bieten Ihnen von Haus aus.

Also auf den ersten Blick (einige Argumente gelten für beide Sprachen) …

C # ist in dieser Hinsicht besser als C ++:

  • Es verfügt über eine native Garbage-Collection.
  • Hiermit können Sie Signaturen von Klassenmethoden als freie Funktionen behandeln (dh die statisch typisierte this Zeigerargument) und damit dynamischere und flexiblere Beziehungen zwischen Klassen erstellen. edit Wenn Sie nicht wissen, was dies bedeutet, weisen Sie einer void (*ptr)() Variable. C # -Delegierte tragen den this Zeiger mit sich, aber der Benutzer muss sich nicht immer darum kümmern. Sie können einfach jedem anderen void() -Delegierten eine void() -Methode einer beliebigen Klasse zuweisen.
  • Sie hat einen riesigen Standard Bibliothek mit so vielen nützlichen Dingen, die gut implementiert und einfach zu verwenden sind.
  • Sie ermöglicht sowohl verwaltete als auch native Codeblöcke.
  • Die Versionsversionierung von Assemblys behebt problemlos Probleme mit der DLL-Hölle.
  • Sie können Klassen, Methoden und Felder so einstellen, dass sie Assembly-intern sind (dh, sie sind von überall in der DLL zugänglich, in der sie deklariert sind, jedoch nicht von anderen Assemblys).

C # ist insofern besser als Java:

  • Anstelle von viel Rauschen (EJB, Implementierungen privater statischer Klassen usw.) erhalten Sie elegante und benutzerfreundliche native Konstrukte wie Eigenschaften und Ereignisse .
  • Sie haben echte Generika (nicht den schlechten Casting-Witz, den Java als Generika bezeichnet), und Sie können darüber nachdenken.
  • Es unterstützt native Ressourcenverwaltungs-Idiome (das using Anweisung). Java 7 wird dies ebenfalls unterstützen, aber C # hat es schon viel länger.
  • Es wurden keine Ausnahmen überprüft 🙂 (fraglich, ob dies gut oder schlecht ist)
  • Es ist tief in Windows integriert, wenn Sie dies wünschen.
  • Es verfügt über Lambdas und LINQ und unterstützt daher eine kleine Menge funktionaler Programmierung.
  • Es ermöglicht sowohl generische Kovarianz als auch Kontravarianz explizit.
  • Es hat dynamische Variablen, wenn Sie sie wollen.
  • Bessere Unterstützung für die Aufzählung mit der Anweisung yield.
  • Hier können Sie neue Werttypen (oder Nichtreferenztypen) definieren.

Bearbeiten – Kommentare adressieren

  • Ich habe nicht gesagt, dass C ++ natives RAII nicht unterstützt. Ich sagte, Java hat es nicht (Sie müssen explizit versuchen / endlich). C ++ hat Auto-Zeiger, die für RAII großartig sind, und (wenn Sie wissen, was Sie tun) kann auch die Garbage Collection ersetzen.
  • Ich habe nichts über emulieren freie Funktionen gesagt. Aber zum Beispiel, wenn Sie mit einem this Zeiger auf ein Feld zugreifen müssen, und Binden Sie die Methode, die dies tut, an einen generischen Funktionszeiger (dh nicht in derselben Klasse), dann gibt es einfach keine native Möglichkeit, dies zu tun. In C # erhalten Sie das kostenlos. Sie müssen nicht einmal wissen, wie es funktioniert.
  • Indem " Mitgliedsmethoden als freie Funktionen behandelt " Ich meinte, dass Sie beispielsweise eine Mitgliedsmethode nicht nativ an eine freie Funktionssignatur binden können, weil die Mitgliedsmethode " heimlich " benötigt den Zeiger this.
  • Die Anweisung using ist offensichtlich zusammen mit IDisposable-Wrappern ein gutes Beispiel dafür RAII. Siehe diesen Link . Beachten Sie, dass Sie in C # nicht so viel RAII benötigen wie in C ++, da Sie über den GC verfügen. Für die spezifischen Zeiten, in denen Sie ihn benötigen, können Sie explizit die using verwenden Aussage. Eine weitere kleine Erinnerung: Das Freigeben von Speicher ist ein teures Verfahren. GC hat in vielen Fällen seinen Leistungsvorteil (insbesondere wenn Sie viel Speicher haben). Speicher wird nicht durchgesickert und Sie werden nicht viel ausgeben Zeit für die Freigabe. Darüber hinaus ist die Zuweisung auch schneller, da Sie nicht jedes Mal nur gelegentlich Speicher zuweisen. Wenn Sie new aufrufen, wird lediglich ein letzter Schritt erhöht. Objektzeiger.
  • " C # ist insofern schlechter, als es eine Speicherbereinigung " hat. Dies ist in der Tat subjektiv, Wie ich oben bereits erwähnt habe, ist die Speicherbereinigung für die modernste, typischste Anwendungsentwicklung ein verdammt großer Vorteil.
    In C ++ können Sie Ihren Speicher entweder manuell mit new a nd delete, was empirisch immer hier und da zu Fehlern führt, oder (mit C ++ 11) Sie können Auto-Zeiger nativ verwenden, aber denken Sie daran, dass sie Lose hinzufügen und viel Rauschen zum Code. GC hat dort also immer noch einen Vorteil.
  • " Generika sind viel schwächer als Vorlagen " – ich ziehe einfach an “ Ich weiß nicht, woher Sie das haben. Vorlagen haben vielleicht ihre Vorteile, aber meiner Erfahrung nach sind generische Parametertypprüfung, Kontravarianz und Kovarianz viel stärkere und elegantere Werkzeuge. Die Stärke von Vorlagen besteht darin, dass Sie mit der Sprache a spielen können Bit, was vielleicht cool ist, aber auch viele Kopfschmerzen verursacht, wenn Sie etwas debuggen möchten. Alles in allem haben Vorlagen ihre netten Funktionen, aber ich finde Generika praktischer und sauberer.

Kommentare

  • Und wenn Sie immer noch einen Garbage Collector für C ++ möchten, können Sie einen herunterladen .
  • Lassen Sie uns diese Diskussion im Chat fortsetzen
  • Eine weitere wichtige Funktion in C # im Vergleich zu Java aus Leistungsgründen ist die " -Struktur ", ein Objekttyp, der auf dem Stapel (oder in speziellen Fällen in CPU-Registern) gespeichert oder in andere Heap-Objekte eingebettet werden kann. Sie werden häufig für kleine Objekte mit 1 bis 4 Feldern verwendet, z. B. X- und Y-Koordinatenpaare.
  • @LokiAstari Solange Sie daran denken, die Registrierung von Ereignishandlern aufzuheben und das Dispose-Muster für Klassen zu verwenden, die native Wrapper enthalten, ist ' in Ordnung. Das ' ist viel weniger zu wissen und zu merken als die Speicherverwaltung in C ++.
  • -1, da mir die Abschnitte " C ++ ist insofern besser als C # … " und " Java ist besser als C # … ". Ich denke nicht, dass C # in allen Bereichen überlegen ist, daher fehlen einer Antwort ohne diese beiden Abschnitte wahrscheinlich einige wichtige Informationen.

Antwort

Die Umgebung

.NET Framework- und Windows-Clients

Windows ist das dominierende Betriebssystem auf Clientcomputern. Die besten GUI-Frameworks für Windows-Anwendungen sind Winforms und WPF zusammen mit .NET Framework . Die beste Programmiersprache für die Arbeit mit .NET Framework und den APIs ist C # . Java ist hierfür keine Alternative.Und C ++ ist eine ältere Sprache ohne automatische Speicherverwaltung. C # ähnelt C ++, verfügt jedoch über eine automatische Speicherverwaltung, und Sie müssen nicht mit Zeigern arbeiten, wodurch Sie produktiver werden. C ++ kann in einigen Fällen immer noch die beste Option sein, jedoch nicht für formularintensive Datenbankanwendungen, die in häufig vorkommen Geschäft.

IIS und Windows Server

Wenn Sie es gewohnt sind, in der Windows-Umgebung und mit C # zu arbeiten, benötigen Sie die geringste Investition, um IIS für die Serverprogrammierung und Windows Server für zu erlernen Grundlegende Verwaltung.

Active Directory und Windows Server

Wenn Sie Software entwickeln, die in Unternehmensnetzwerken bereitgestellt werden soll, verwenden sie wahrscheinlich eine Windows-zentrierte Umgebung mit a Windows Server mit Active Directory. In einer solchen Umgebung ist es einfach, eine in C # und .NET Framework .

Ich persönlich bin ein Java-Entwickler, kein C # -Entwickler, aber ich arbeite mit dem Web. Ich würde zu C # wechseln, wenn ich Netzwerkanwendungen für Windows-Netzwerke entwickeln würde. Aber ich bevorzuge Java für Linux-basierte Webserver. Ich würde C ++ für eingebettete Systeme wählen, wenn ich nicht viele Abhängigkeiten habe.

Ja, C # ist eine bessere Sprache mit moderneren Funktionen als C ++ und Java, aber das ist nicht das Wichtigste für die Auswahl von C # .

Zusammenfassung

Die Umgebung für Ihre Software ist für die Auswahl am wichtigsten C # . Wenn Sie in einer Umgebung mit Windows-Clients, Windows-Servern, Active Directory, IIS und möglicherweise SQL Server dann C # ist die weitaus beste Sprache mit dem .NET Framework .

Wenn Sie in einer Unix-Umgebung mit z Webdienste, Java wäre meine Wahl. Und wenn Sie mit eingebetteten Systemen arbeiten oder in Hardwaregeräte integrieren müssen C ++ ist eine gute Wahl.

Kommentare

  • Absolut – aus diesem Grund verwende ich C # nicht wirklich aus einem anderen Grund.
  • Sie können .NET sicherlich auf anderen Plattformen über Mono verwenden. MonoTouch und MonoDroid, aber meine Benchmarks ergaben, dass Mono erheblich langsamer als .NET für Windows ist, und Microsoft ' eigenes Compact Framework ist unter Windows CE extrem langsam: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … natürlich ist WPF nur unter Windows verfügbar (aber ich ' mag es sowieso nicht.)
  • Welche Abhängigkeiten meinen Sie mit " Ich würde C ++ für eingebettete Systeme wählen, wenn ich nicht ' ' t viele Abhängigkeiten. " Meinen Sie die Java-Bibliotheken?
  • @Puckl ja, aber meistens jvm / jre.
  • " Wenn Sie in einer Unix-Umgebung mit z. Webdienste " Es gibt einige andere Sprachen & Frameworks, die berücksichtigt werden könnten: Ruby, Python, node.js usw.

Antwort

C # und Java

C # ist eine sehr gute Sprache, wenn:

  • Sie eine objektorientierte Allzweckentwicklung durchführen möchten. Es ist eine klassische, statisch typisierte OOP-Sprache.
  • Sie zielen nur auf Microsoft-Plattformen ab (es ist erwähnenswert, dass Microsoft Java effektiv geklont hat, um C # zu erstellen, weil sie eine Java-ähnliche Sprache wollten, in die sich Menschen einschließen Windows. Sie hätten Java verwenden können, aber das hätte es den Menschen ermöglicht, Anwendungen auf anderen Plattformen einfach auszuführen …)

C # als Sprache ist in verschiedener Hinsicht besser als Java (besser) Syntax für Eigenschaften, Werttypen, reifizierte Generika usw.). Ich bevorzuge C # als Sprache gegenüber Java, aber im Großen und Ganzen sind sie ziemlich ähnliche Sprachen und für ähnliche Anwendungen geeignet.

Andererseits hat Java auch einige große Vorteile:

  • Riesiges Open-Source-Ökosystem – die Bibliotheken für Java, die Sie kostenlos erhalten können, stammen von by weit das Beste aller Sprachen. Es ist schwer zu übertreiben, wie wichtig dies ist – Java ist vom Standpunkt der Erledigung der Dinge sehr effektiv.
  • Tools – Die Java-Tools sind meiner Ansicht nach besser als das, was Sie in der .Net-Welt bekommen können . z.B. Maven (sobald Sie es gemeistert haben!) Ist besonders beeindruckend.
  • Wartbarkeit – Java gibt es schon seit einiger Zeit und es war in großen Unternehmen erfolgreich, gerade weil es relativ stabil ist und viel Aufwand in die Abwärtskompatibilität gesteckt wurde. Die einfache und leicht ausführliche Syntax hilft auch hier Java – es ist einfacher, Code zu lesen und zu pflegen, wenn der Code sehr klar und explizit ist.
  • Neue Sprachen – Die JVM verfügt über einige erstaunliche neue Sprachen (Scala, Clojure) , Groovy usw.), die die Zukunft der Java-Plattform darstellen. Hier findet ein Großteil der Sprachinnovation statt, und dies geschieht viel schneller als in Java oder C #.

Java vs. C # ist also ein ziemlich enger Anruf und es kommt wirklich darauf an, ob Sie im Microsoft-Camp oder im Open Source / plattformübergreifenden Camp sein möchten.

Ich persönlich bevorzuge Java, weil:

  • Das Ökosystem der Bibliothek ist meiner Ansicht nach viel wichtiger als die Tatsache, dass C # eine bessere Syntax als Java hat.
  • Auf lange Sicht möchte ich, dass mein gesamter Code ordnungsgemäß gekreuzt wird -plattform und in der Lage, auf großen Clustern billiger Linux-Maschinen in der Cloud zu laufen.
  • Clojure ist meiner Meinung nach derzeit die vielversprechendste Sprache der Welt, und wenn ich mich an die JVM-Plattform halte, werde ich in der Lage sein zu tran Setzen Sie meinen Code und meine Fähigkeiten im Laufe der Zeit problemlos in Clojure um.

C / C ++

C / C ++ ist im Grunde ein ganz anderes Tier. Ich würde es heutzutage aus folgenden Gründen nicht für die allgemeine Anwendungsentwicklung empfehlen:

  • Speicherverwaltung – für die meisten allgemeinen Programmierzwecke möchten Sie dies heutzutage nicht mehr Verwalten Ihres eigenen Speichers Die Speicherbereinigung in C # oder Java ist für Ihre Produktivität und Gesundheit wesentlich besser als alle expliziten Speicherverwaltungstechniken, die Sie in C / C ++ verwenden müssen.
  • Komplexität – insbesondere C ++ ist eine extrem komplexe Sprache. Das Meistern dauert lange und der Code selbst kann auch teuflisch komplex sein. (C ++ – Vorlagen sind zum Beispiel besonders haarig ….)
  • Produktivität – meistens und alles andere Wenn Sie gleich sind, dauert es länger, bis Sie die Dinge in C / C ++ erledigt haben.

Es ist jedoch zweifellos eine gute Wahl in einer bestimmten begrenzten Anzahl spezieller Domänen, insbesondere:

  • Betriebssysteme – Sie möchten wahrscheinlich C / C ++ verwenden, wenn Sie ein Betriebssystem schreiben.
  • Spieleentwicklung – fast alle t Die besten kommerziellen Spiel-Engines sind C / C ++. Es ist immer noch die beste Wahl, wenn Sie einen anspruchsvollen AAA-Titel entwickeln (C # und Java eignen sich perfekt für weniger anspruchsvolle / Gelegenheitsspiele).
  • Hochleistungsrechnen – optimiertes C / C ++ ist wahrscheinlich der beste Weg dazu Erstellen Sie Code mit sehr hoher Leistung. Für die meisten Anwendungen ist diese Optimierungsstufe nicht die Mühe wert, aber in bestimmten Bereichen kann sie äußerst wertvoll sein (z. B. Hochfrequenzhandel).
  • Hardwarezugriff – Sie benötigen direkten Zugriff Zugriff auf die Hardware (z. B. für ein eingebettetes System)

Grundsätzlich ist C / C ++ genau dann eine gute Wahl, wenn Sie sich auf eine der Domänen konzentrieren, in denen es besonders gut geeignet ist

Kommentare

  • Sie erwähnen Maven als Beispiel für bessere Tools für Java. Ich ' bin nicht besonders vertraut damit, aber in der Dokumentation sieht Maven eher ähnlich aus wie das native .Net-Build-Tool MSBuild. Was macht Maven besser als MSBuild?
  • +! (nur weil ich nur eine Stimme habe): Sie haben sehr gut erklärt, warum das Java-Ökosystem besser ist und warum man nicht nur die Syntax von C # mit Java vergleichen sollte. Java hat mehr und bessere Bibliotheken und Tools. In der Java-Sprache selbst passiert nicht viel, aber für die JVM erscheinen neue, sehr interessante Sprachen, die (IMO) viel interessanter sind als C #. Ich kenne Clojure nicht, aber ich finde Scala sehr interessant: Von Anfang an als OOP + FP konzipiert.
  • Warum denken alle, dass C ++ – Code voller manueller Speicherverwaltung ist? RAII bedeutet, dass Sie fast nie manuell Speicher zuweisen / freigeben müssen (die Zeiten, in denen eine Sprache wie C # für Sie nutzlos wäre).
  • @gbjbaanb – wahrscheinlich weil RAII ist für die allgemeine Speicherverwaltung nicht geeignet. Die Flexibilität entspricht in keiner Weise einem vollständigen GC-System wie in Java oder C #. Sobald Sie die Grenzen von RAII überschreiten, befinden Sie sich wieder auf dem Gebiet der manuellen Speicherverwaltung.
  • @mikera Ich möchte nur darauf hinweisen, dass sich auch auf der .NET-Plattform einiges an Sprachentwicklung befindet. Z.B. F # ist eine nette funktionale Sprache, die den Rest von .NET reibungslos integriert, und Python wurde kürzlich als Iron Python nach .NET portiert (und hat auch eine nette IDE ! ).

Antwort

I heard that syntactically they are almost the same. 

Syntaktisch? Wer gibt einem fliegenden Affen etwas über Syntax? Die Syntax ist nur für eines gut: Sie ermöglicht eine schnellere Migration aus syntaktisch ähnlichen Sprachen. Das ist es.

C # ist weitaus besser als Java. Betrachten Sie ihre generische und funktionale Programmierunterstützung – C # ist Java weit voraus. Ganz zu schweigen von Überlastungen der Bediener und anderen guten Dingen – C # ist weitaus besser geeignet. Es gibt keine Möglichkeit, Java als besser als C # zu betrachten.

C ++ und C # sind eher ein Wettbewerb. C ++ hat ein unglaublich nerviges archaisches Zusammenstellungsmodell und eine Reihe von älteren Krankheiten von C, aber seine Vorlagen sind weitaus leistungsfähiger als Generika, und seine Ressourcenverwaltungsansätze sind im Allgemeinen viel flexibler und leistungsfähiger, da using ein vollständiger Fehler ist und es wird schneller ausgeführt.

Kommentare

  • Ich denke, man sollte beide Sprachfunktionen und die Verfügbarkeit einer Sprache auf verschiedenen Plattformen vergleichen. Mit C # eins ist mit Microsoft verbunden, mit Java nicht: ' ist ein großer Vorteil, zumindest für UNIX / Linux-Entwickler. OOP + FP sind coole Funktionen, aber warum sollten Sie sich um C # kümmern, wenn Sie Kann Scala verwenden, das auf der JVM ausgeführt wird und mit altem Java-Code verbunden werden kann? Ich würde niemals eine plattformspezifische Sprache lernen, wenn ich nicht dazu gezwungen wäre.
  • @Giorgio: Das Mono-Projekt existiert . Zweitens kümmert sich Microsoft tatsächlich um ihre Plattform – sie gibt ihr regelmäßig große Upgrades. Java hat kaum etwas Neues gehabt. Außerdem geht es um C # gegen Java, nicht um CLR gegen JVM.
  • @DeadMG: Soweit ich weiß, kann ich kein unter Windows entwickeltes C # -Programm mit Mono erstellen. Nicht CLR gegen JVM? Die Frage ist, warum Menschen C # oder Java verwenden. Damit Benutzer eine Sprache verwenden können, benötigen sie eine Laufzeit und ein Betriebssystem. Ich diskutiere nicht über die Tatsache, dass C # mehr Funktionen als Java hat, aber Java ist viel portabler: Dies ist ein Faktor, der die Übernahme einer Sprache beeinflussen kann. Tatsächlich wird Java immer noch viel häufiger als C # verwendet, auch wenn bestimmte erweiterte Funktionen fehlen.
  • @Giorgio Sie können jedes C # -Programm verwenden und es mit Mono erstellen. Sie können bestimmte Bibliotheken nicht verwenden (die ohnehin nicht Teil der C # -Sprache sind). Und Java ist nicht " viel portabler ". Sie können für iOS in C # codieren, jedoch nicht in Java.
  • @Giogio, Mono ist mindestens so portabel wie JVM.

Antwort

Nun, C# verfügt über einige nette integrierte Funktionen wie LINQ und Delegierte. Es holt das Beste aus beiden Welten heraus – Java und C++. Schauen Sie sich hier für einen vollständigen Vergleich an.

Aber ich mag die Java Welt besser – viel mehr Open Source Frameworks und es läuft auf jeder Plattform. Und erzähl mir nichts über Mono – es ist keine zuverlässige Option.

Kommentare

  • +1: " Aber ich mag die Java-Welt besser – viel mehr Open Source-Frameworks und sie läuft auf jeder Plattform. " Lassen Sie ' s Hoffnung, dass Oracle dies nicht ändert!
  • Erklären Sie, was ' nicht zuverlässig " in Mono?
  • @Petar Minchev, Es ist nichts als Ihre eigene Schuld. Sie müssen die Portabilitätsrichtlinien befolgen und sollten dies nicht tun Verwenden Sie nicht portable Bibliotheken – und auf diese Weise würde jede komplexe Anwendung mit Mono zuverlässig ausgeführt. Dinge wie WPF werden niemals portiert.
  • @Petar Minchev, es gibt viele nicht portable Java-Bibliotheken da draußen. Sie müssen immer vorsichtig mit der Portabilität sein, egal welche Sprache Sie ' verwenden. Und trotzdem geht es um die Sprachen, nicht um th Die Bibliotheken von Drittanbietern.
  • @Petar Minchev, GTK # ist portabel. Verwenden Sie es stattdessen.

Antwort

Laut einigen Quellen (siehe z. B. http://www.indeed.com/jobtrends ) C # ist immer noch weniger beliebt als Java und genauso beliebt wie C ++.

C # bietet Funktionen, die Java fehlen. z.B direkte Unterstützung für bestimmte Programmiersprachen wie Eigenschaften, funktionalen Programmierstil usw. C # hat einen höheren Abstraktionsgrad als C ++, was ein Vorteil ist, wenn die Entwicklungszeit wichtiger ist als die Programmgeschwindigkeit.

Ich persönlich bevorzuge immer noch die Java / C ++ – Welten. Wie Petar Minchev sagte, verfügt Java über mehr Open-Source-Frameworks und -Anwendungen, läuft überall und ist weniger an einen bestimmten Anbieter und ein bestimmtes Betriebssystem gebunden. C ++ bietet ähnliche Vorteile, obwohl Code häufig Anpassungen von einer Plattform zur anderen benötigt. Da ich lieber unter Linux entwickle und meines Wissens C # unter Linux nicht vollständig entwickeln kann, habe ich mich nie wirklich für C # interessiert, da meine Programmieranforderungen von C, C ++, Java, Scala abgedeckt werden.

Andererseits ist es für viele Entwickler kein Problem, an einen bestimmten Anbieter gebunden zu sein: Microsoft hat eine beherrschende Stellung auf dem Betriebssystemmarkt und C # bietet viele Beschäftigungsmöglichkeiten. Daher verwenden IMO viele Entwickler C #, da es nicht nur eine funktionsreiche Sprache ist, sondern auch eine gute Investition darstellt.

Kommentare

  • " Ich kann C # unter Linux nicht vollständig entwickeln " – Könnten Sie das näher erläutern? Meinen Sie damit, dass das vollständige .Net-Framework nicht ' verfügbar ist, weil ' keine Probleme mit der C # -Sprache selbst auftreten ( oder F #) unter Linux?
  • @wawa: Meines Wissens entspricht das .Net-Framework dem JDK, und das .Net-Framework ist nur für Windows verfügbar, während das JDK für mehrere Betriebssysteme ' s. Wenn dies nicht korrekt ist, kann ich meine Antwort bearbeiten (und auch meine Meinung ändern).
  • Ich denke, eine engere Analogie wäre die Basisklassenbibliothek zum JDK. Die BCL hat standardisierte und nicht standardisierte Teile. Das Mono-Projekt implementiert sowohl die standardisierten als auch viele der nicht standardisierten Teile.
  • @wawa: Vielen Dank für die Informationen. Ich denke darüber nach, C # mit Mono auszuprobieren. Dennoch habe ich immer noch das starke Gefühl, dass C # viel stärker an Microsoft gebunden ist als Java an Oracle (oder in der Vergangenheit an Sun).

Antwort

Was ist mit " Welches Software Development Framework, das eine Programmiersprache " enthält besser?

Sie haben vergessen, andere Dinge einzuschließen, wie die " -Umgebung ", mit der Sie arbeiten werden.

  1. Arbeiten Sie nur unter Windows, müssen Sie jedoch nicht auf niedrigem Niveau sein und über viel Speicher und andere Ressourcen verfügen?

    Wählen Sie .NET als Framework über Windows und verwenden Sie C #.

  2. Arbeiten Sie nur für Windows, müssen aber nicht niedrig sein, ABER nicht Haben Sie viele Ressourcen?

    Wählen Sie das Delphi Framework (und die Programmiersprache Object Pascal Delphi oder Lazarus Object Pascal).

  3. Ist Ihre App erforderlich? sieben zu unterstützen Plattformen wie ein Spiel auf verschiedenen Handys?

    Wählen Sie das Java Framework und die Java-Programmiersprache.

  4. Ist es Linux mit KDE als Grafik Schnittstelle?

    Wählen Sie ein QT-Framework mit C ++

  5. Ist es Linux mit Gnome als grafische Schnittstelle?

    Wählen Sie das GObject / GLib-Framework , mit C ++

  6. Werden Sie mit vielen Operationen auf niedriger Ebene arbeiten, z. B. mit der Entwicklung von Treibern?

    Normales C oder C ++ wird für mehrere Operationen verwendet Systeme mit Standardbibliotheken als Framework.

Nur meine 2 Cent.

Kommentare

  • Ich ' bin mir bei 3 nicht sicher. Smartphones sind heute sehr beliebt und AFAIK, alle unterstützen C # in irgendeiner Form, aber nur Android unterstützt Java.
  • Ist nicht ' t Delphi tot? 🙂
  • @ šljaker Nein, aber ' ist in diesen Tagen nicht sehr beliebt.
  • @svick: Das ist eine Lüge. Abgesehen von Android gibt es Java auch in irgendeiner Form unter iOS, Symbian, WinMo, Blackberry, Maemo und WebOS (dh alles, was wichtig ist oder noch wichtig ist; ' bringt mich nicht dazu noch kleinere Plattformen). Android, Blackberry und Symbian unterstützen offiziell Java als Entwicklungsoption. Sun unterstützte Java unter iOS, auch wenn Apple dies nicht mag. Java ist die primäre Entwicklungssprache in Android- und Blackberry-Handys. Ich kann ' nicht dasselbe mit C # sagen, AFAICT es ' wird nur offiziell von WinMo unterstützt.

Antwort

Wenn Sie eine Suche durchführen, werden Sie wahrscheinlich auf Diskussionen über die wichtigsten Programmiersprachen stoßen. Hier ist eines der Suchergebnisse – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java scheint immer noch die beliebteste Sprache zu sein.

Java hat versucht, einige der Mängel von C ++ zu beseitigen (und den Programmierern das Leben für nicht in Echtzeit und nicht kritische Anwendungen zu vereinfachen). Da C # der Verspätete der Partei ist, hat er einige der Mängel der Java-Sprache vermieden. C # hat große Fortschritte gemacht (da Microsoft viel Kontrolle darüber hat), während Fortschritte in Java aufgrund von Konflikten zwischen seinen Stakeholdern für einen beträchtlichen Zeitraum blockiert wurden.

Antwort

Einige Dinge, die noch nicht erwähnt wurden:

C # ist besser als C ++, weil:

es beseitigt mit Header-Dateien, was sich in großer Einfachheit niederschlägt.

C # ist besser als Java, weil:

sowohl Referenztyp (Klasse) als auch Werttyp (Struktur) benutzerdefiniert unterstützt werden Typen, die, wenn Sie wissen, was Sie tun, erhebliche Leistungsvorteile bringen können.

Es unterstützt Delegaten, die wie Schnittstellen mit einer Methode aussehen, wodurch die Codierung häufig vorkommender Konstrukte mit Objekten mit einer Methode erheblich vereinfacht wird.

Kommentare

  • Können Sie erklären, auf welche Weise sowohl Referenztyp- als auch Werttyp-Typen Leistungsvorteile in C # bringen können?
  • Wenn Sie beispielsweise ein Array von Datensätzen haben möchten In Java haben Sie keine andere Wahl, als Ihren Datensatz mit einer Klasse zu beschreiben. Ihr Array besteht also aus einem Array von Verweisen auf eine Vielzahl von separat zugewiesenen Objekten. In C # können Sie Ihren Datensatz mithilfe einer Struktur beschreiben, sodass Ihr Array nur ein einziger kontinuierlicher Speicherbereich ist, der Ihre Strukturen nacheinander enthält, genau wie in C.
  • Als weiteres Beispiel, wenn Sie möchten Um einen kleinen neuen Typ zu definieren (einen Typ, der in ein Maschinenwort passt), müssen Sie keine neue Klasse dafür definieren. Sie können es einfach zu einer Struktur machen, damit es der Wertesemantik folgt. Das Weitergeben solcher Strukturen ist nicht teurer als das Weitergeben von Verweisen auf Objekte, aber Sie haben den Vorteil, dass Sie keine Objekte zuweisen, konstruieren und Müll sammeln.
  • Ich verstehe. Klassen werden also auf dem Heap instanziiert und über Referenzen abgerufen, während Strukturen auf dem Stapel instanziiert werden (?)
  • Fast korrekt. Die einzige Ungenauigkeit in dieser Anweisung besteht darin, dass eine Struktur auf dem Heap gefunden wird, wenn sie in ein anderes Objekt eingebettet ist oder wenn sie sich in einem Array von Strukturen befindet. Und es wird auch auf dem Heap gefunden, wenn es jemals geboxt wird, genauso wie Werttypen in Java geboxt werden.

Antwort

Sie sollten die beste Sprache für Ihre erwartete Umgebung und Ihr Fachwissen auswählen.

Wählen Sie C #, wenn Sie nur in einer Microsoft-Umgebung arbeiten. Während C # gemäß ISO / IEC 23270: 2003 standardisiert ist, bleibt die Microsoft-Version die einzige vollständige Implementierung. Einige wichtige Teile der Sprache fallen nicht unter den Standard und unterliegen daher den Patenten von Microsoft. Niemand sonst wird eine vollständig kompatible Version der Sprache für andere Systeme implementieren. Sie sind also tatsächlich an Microsoft Windows und .Net gebunden, solange Sie die Sprache verwenden. Wenn Sie nach Fähigkeiten suchen, die Sie auf dem mobilen Markt einsetzen können, sollten Sie sich am besten eine andere Sprache ansehen.

Java funktioniert, hat jedoch einen hohen Overhead, was teilweise auf Funktionen wie die Speicherbereinigung zurückzuführen ist. Java ist auch nicht durch ISO / IEC standardisiert, sodass Sie keine Garantie haben, wenn Sie Plattformen und Versionen von Java wechseln, sondern nur die besten Absichten von Sun / Oracle. Wenn Sie schließlich planen, mit Android zu arbeiten, ist dies definitiv der richtige Weg Die Programmierung von Android ist im Grunde genommen Java mit ein paar Änderungen.

C ++ ist standardisiert und fast alle Compiler folgen dem internationalen Standard, sodass Sie ein garantiertes Verhalten haben, ABER die Sprache schützt Sie nicht vor sich selbst. Sie müssen die Bereinigung und Überlaufprüfung selbst durchführen. Das ist nicht schwer. C / C ++ – Programmierer tun dies seit vielen Jahren. Apple verwendet Objective C für alles. Wenn Sie also auf Apple abzielen möchten, empfehlen wir Ihnen, dies stattdessen zu versuchen.

Wenn Sie sehen, dass Sie Windows irgendwann hinter sich lassen, würde ich empfehlen, sowohl C / C ++ als auch Java zu lernen – beide sind derzeit marktfähig.

Antwort

In Bezug auf C ++ vs C # (da ich Java nicht gut genug beherrsche) fehlt mir hier die Möglichkeit, unter Windows auf Low-Level-Inhalte zuzugreifen. Zum Beispiel können Sie (noch) keinen nativen Anzeigetreiber in C # entwickeln, aber Sie können dies mit C ++. Dies macht C ++ nicht besser. Ich sehe C ++ gegen C # als Assembly gegen C.

C # ist in meinem Die Ansicht ist viel effizienter, wenn Sie sich die Zeit ansehen, die für die tatsächliche Implementierung einer Funktion erforderlich ist. Der Leistungsverlust der .Net-Laufzeit ist für 99% der entwickelten Anwendungen vernachlässigbar. Dies kann von Bedeutung sein, wenn Sie eine enge Schleife ausführen, ja Auf jeden Fall, aber die meiste Zeit ist eine Anwendung inaktiv und wartet auf jede Art von Eingabe, Signal oder Interrupt (Festplatten-E / A, Tastenklick, Netzwerk, Abschluss der Animation).

Die CLR-Bibliothek mit all seinen Funktionen hat eine andere r großer Vorteil. Als ich C # für Junior-Entwickler trainierte, sagten die meisten, dass sie die logische Namenskonvention von Klassen, Mitgliedern und Namespaces mochten. Das Auffinden eines Methodenmerkmals war im gesamten SDK logisch, was bei Visual Basic 5 ernsthaft fehlerhaft war. Dies hat ihnen bei der Übernahme der Bibliothek enorm geholfen. Nach dem Erlernen der Syntax einer Sprache ist das Erlernen einer neuen Bibliothek wichtig, um ein gutes Verständnis für ein SDK zu erlangen. Dies erspart Ihnen die Neuerfindung des Rads.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.