Închis . Această întrebare este
bazată pe opinie . În prezent, nu acceptă răspunsuri.
Comentarii
Răspuns
Întrebarea ar trebui să fie " Care limbă este cea mai potrivită pentru dezvoltarea modernă, tipică a aplicațiilor? ".
Editați : Am abordat câteva dintre comentariile de mai jos. O mică observație: luați în considerare faptul că, atunci când aveți o mulțime de lucruri în mod nativ, ca expresii, este „o diferență mare decât să le implementați sau să le descărcați și să le utilizați de fiecare dată. Aproape totul poate fi implementat în oricare dintre aceste limbi. limbile vă oferă în mod nativ.
Deci, de pe partea de sus a capului meu (unele argumente se aplică ambelor limbi) …
C # este mai bun decât C ++ prin faptul că:
- Are colecție de gunoi nativă .
- Vă permite să tratați semnăturile „metodelor de clasă” ca funcții libere (adică ignorarea
this
argument pointer) și, prin urmare, creăm relații mai dinamice și mai flexibile între clase. editați dacă nu știți ce înseamnă acest lucru, atunci încercați să atribuiți o metodă de membru returnând nul și acceptând gol către un void (*ptr)()
variabilă. Delegații C # poartă cu ei indicatorul this
, dar utilizatorul nu trebuie să aibă grijă întotdeauna de asta. Pot doar să atribuie o metodă void()
a oricărei clase oricărui alt delegat void()
.
- Are un standard imens bibliotecă cu atât de multe lucruri utile, care sunt bine implementate și ușor de utilizat.
- Permite atât blocuri de cod gestionate, cât și blocuri de cod native.
- Asamblarea versiunilor remediază ușor problemele DLL.
- Puteți seta clasele, metodele și câmpurile pentru a fi asamblate-interne (ceea ce înseamnă că sunt accesibile de oriunde din DLL în care au fost declarate, dar nu și de la alte asamblări).
C # este mai bun decât Java în acest sens:
- În loc de mult zgomot (EJB, implementări de clasă statică privată etc.) obțineți construcții native elegante și prietenoase, cum ar fi Proprietăți și Evenimente .
- Aveți generice reale (nu gluma proastă pe care Java o numește generice) și puteți efectua o reflecție asupra acestora.
- Acceptă expresii native de gestionare a resurselor (
using
declarație). Java 7 va susține, de asemenea, acest lucru, dar C # îl are de mult mai mult timp.
- Nu are verificate excepțiile 🙂 (discutabil dacă este bine sau rău)
- Este profund integrat cu Windows, dacă asta doriți.
- Are Lambdas și LINQ, prin urmare acceptă o cantitate mică de programare funcțională.
- Permite atât covarianța generică, cât și contravarianța în mod explicit.
- Are variabile dinamice, dacă doriți.
- Suport mai bun pentru enumerare, cu declarația
yield
.
- Vă permite să definiți noi tipuri de valori (sau fără referință).
Edit – Adresarea comentariilor
- Nu am spus că C ++ nu acceptă RAII nativ. Am spus că Java nu o are (trebuie să încercați în mod explicit / în cele din urmă). C ++ are indicatori auto care sunt minunați pentru RAII și (dacă știți ce faceți) poate înlocui și colectarea gunoiului.
- Nu am spus nimic despre emularea funcțiilor gratuite. Dar, de exemplu, dacă trebuie să accesați un câmp printr-un pointer
this
și legați metoda care o face de un pointer de funcție generic (adică nu face parte din aceeași clasă), atunci pur și simplu nu există un mod nativ de a o face. În C #, primești gratuit. Nici măcar nu trebuie să știți cum funcționează.
- Prin " tratarea metodelor membre ca funcții libere " Am vrut să spun că nu puteți, de exemplu, să legați nativ o metodă de membru la o semnătură de funcție gratuită, deoarece metoda de membru " în secret " are nevoie de indicatorul
this
.
- Declarația
using
, evident împreună cu împachetările IDisposable, este un exemplu excelent de RAII. Consultați acest link . Luați în considerare faptul că nu aveți nevoie de RAII în C # la fel de mult ca în C ++, deoarece aveți GC. Pentru momentele specifice de care aveți nevoie, puteți utiliza în mod explicit using
Declarație. Un alt mic memento: eliberarea memoriei este o procedură costisitoare. GC au avantajul lor de performanță în multe cazuri (mai ales când aveți multă memorie). Memoria nu va fi scursă și nu veți cheltui mult mai mult, alocarea este și mai rapidă, deoarece nu alocați memorie de fiecare dată, doar din când în când. Apelarea new
este pur și simplu creșterea unei ultime- obiect-pointer.
- " C # este mai rău prin faptul că are colectarea gunoiului ". Acest lucru este într-adevăr subiectiv, dar așa cum am afirmat în partea de sus, pentru cele mai moderne, tipice dezvoltări de aplicații, colectarea gunoiului este un mare avantaj.
În C ++, alegerile dvs. sunt fie să vă gestionați manual memoria utilizând new
a nd delete
, ceea ce empiric duce întotdeauna la erori aici și colo, sau (cu C ++ 11) puteți utiliza indicatori auto nativ, dar rețineți că adaugă loturi și mult zgomot la cod. Deci, GC are încă un avantaj acolo.
- " Genericele sunt mult mai slabe decât șabloanele " – Doar nu ” Știu de unde ați obținut asta. Șabloanele ar putea avea avantajele lor, dar, din experiența mea, constrângerile, verificarea de tip a parametrilor generici, contravarianța și covarianța sunt instrumente mult mai puternice și elegante. Punctul forte al șabloanelor este că vă permit să vă jucați cu limba bit, care ar putea fi grozav, dar provoacă și multe dureri de cap atunci când doriți să depanați ceva. Deci, în general, șabloanele au caracteristicile lor frumoase, dar consider că genericele sunt mai practice și mai curate.
Comentarii
Răspuns
Mediul
.NET Framework și clienții Windows
Windows este sistemul de operare dominant pe computerele client. Cele mai bune cadre GUI pentru aplicațiile Windows sunt Winforms și WPF împreună cu .NET Framework . Cel mai bun limbaj de programare pentru a lucra cu .NET Framework și API-urile sale este C # . Java nu este o alternativă pentru aceasta.Iar C ++ este un limbaj mai vechi, fără gestionarea automată a memoriei. C # este similar cu C ++, dar are gestionarea automată a memoriei și nu trebuie să lucrați cu pointeri, ceea ce vă face mai productiv. C ++ poate fi în continuare cea mai bună opțiune pentru unele cazuri, dar nu și pentru aplicațiile de baze de date intensive în formular, care sunt frecvente în business.
IIS și Windows Server
Dacă sunteți obișnuit să lucrați în mediul Windows și cu C #, veți avea nevoie de cea mai mică investiție pentru a învăța IIS pentru programarea serverului și Windows Server pentru administrare de bază.
Active Directory și Windows Server
Dacă dezvoltați software care urmează să fie implementat în rețelele companiei, este probabil ca acestea să utilizeze un mediu Windows centrat folosind un Windows Server cu Active Directory. Într-un astfel de mediu este mai ușor să integreze și să implementeze o soluție realizată în C # și .NET Framework .
Personal, eu sunt un dezvoltator Java, nu un dezvoltator C #, dar lucrez cu web. Aș trece la C # dacă aș dezvolta aplicații de rețea pentru rețeaua Windows. Dar prefer Java pentru serverele web bazate pe Linux. Aș alege C ++ pentru sistemele încorporate dacă nu „am câștigat” multe dependențe.
Da, C # este un limbaj mai bun cu funcții mai moderne decât C ++ și Java, dar acesta nu este nu cel mai important lucru pentru alegerea C # .
Rezumat
Mediul pentru software-ul dvs. este cel mai important pentru alegerea C # . Dacă lucrați într-un mediu cu clienți Windows, servere Windows, Active Directory, IIS și poate SQL Server apoi C # este cel mai bun limbaj cu .NET Framework .
Dacă lucrați într-un mediu Unix cu de ex. servicii web, Java ar fi alegerea mea. Și dacă lucrați cu sisteme încorporate sau trebuie să vă integrați cu dispozitive hardware C ++ ar fi o alegere bună.
Comentarii
Răspuns
C # și Java
C # este un limbaj foarte bun dacă:
- Vrei să faci o dezvoltare orientată pe obiecte cu scop general. Este „un limbaj OOP clasic, tastat static.
- Vizați doar platformele Microsoft (merită să ne amintim că Microsoft a clonat în mod eficient Java pentru a crea C # pentru că doreau un limbaj asemănător Java care să blocheze oamenii în Windows. Ar fi putut folosi Java, dar asta ar fi permis oamenilor să ruleze cu ușurință aplicații pe alte platforme ….)
C #, deoarece un limbaj este mai frumos decât Java în diferite moduri (mai bine sintaxă pentru proprietăți, tipuri de valori, generice reificate etc.). Prefer C # ca limbaj decât Java, dar în marea schemă a lucrurilor sunt limbaje destul de similare și potrivite pentru aplicații similare.
Pe de altă parte, Java are și câteva avantaje mari:
- Un ecosistem open source imens – bibliotecile pentru Java pe care le puteți obține gratuit sunt de departe cel mai bun din orice limbă. Este greu de exagerat importanța acestui lucru – din punctul de a face lucrurile, Java este foarte eficient.
- Instrumente – instrumentele Java sunt în opinia mea mai bune decât ceea ce puteți obține în lumea .Net . de exemplu. Maven (odată ce l-ai stăpânit!) Este deosebit de impresionant.
- Mentenabilitate – Java a fost în jur de ceva timp și a avut succes în marile companii tocmai pentru că este relativ stabil și s-au depus eforturi mari pentru compatibilitatea înapoi. Sintaxa simplă și ușor detaliată ajută și Java aici – este mai ușor să citești și să întreții codul dacă codul este foarte clar și explicit.
- Limbi noi – JVM are câteva limbi uimitoare noi (Scala, Clojure , Groovy etc.) care sunt viitorul platformei Java. Aici se întâmplă o mare parte din inovația lingvistică și se întâmplă mult mai repede decât în Java sau C #.
Așadar, Java vs. C # este un apel destul de apropiat și se rezumă cu adevărat la dorința de a fi în tabăra Microsoft sau în tabăra Open Source / cross-platform.
Personal, prefer Java pentru că:
- În opinia mea, ecosistemul bibliotecii este mult mai important decât faptul că C # are o sintaxă mai frumoasă decât Java
- Pe termen lung, doresc ca întregul meu cod să fie încrucișat -platform și capabil să ruleze pe clustere mari de mașini Linux ieftine pe cloud.
- Clojure este IMHO cel mai promițător limbaj din lume în acest moment și, dacă rămân cu platforma JVM, voi putea a tran plasează-mi codul și abilitățile cu ușurință în Clojure de-a lungul timpului.
C / C ++
C / C ++ este practic o altă fiară. Nu l-aș recomanda pentru dezvoltarea de aplicații cu scop general în zilele noastre din următoarele motive:
- Gestionarea memoriei – pentru majoritatea programării cu scop general în zilele noastre, nu vrei să fii gestionarea propriei memorii. Colectarea deșeurilor în C # sau Java este mult mai bună pentru productivitatea și sănătatea ta decât oricare dintre tehnicile explicite de gestionare a memoriei pe care va trebui să le folosești în C / C ++
- Complexitatea – în special C ++ este un limbaj extrem de complex. Este nevoie de mult timp pentru a stăpâni, iar codul în sine poate fi, de asemenea, extrem de complex. (Șabloanele C ++, de exemplu, sunt deosebit de păroase …)
- Productivitate – de cele mai multe ori și toate celelalte fiind egal, îți va lua mai mult timp pentru a finaliza lucrurile în C / C ++.
Cu toate acestea, este, fără îndoială, o alegere excelentă într-un anumit număr limitat de domenii speciale, în special:
- Sisteme de operare – probabil că doriți să utilizați C / C ++ dacă scrieți un sistem de operare.
- Dezvoltarea jocurilor – aproape toate t cele mai bune motoare de jocuri comerciale sunt C / C ++. Este în continuare cea mai bună alegere dacă dezvoltați un titlu AAA solicitant (C # și Java sunt perfecte pentru jocuri mai puțin solicitante / casual)
- Calcul de înaltă performanță – C / C ++ optimizat este probabil cel mai bun mod de a creați cod de performanță foarte ridicat. Pentru majoritatea aplicațiilor care realizează acest nivel de optimizare nu merită efortul, dar în anumite domenii poate fi extrem de valoros (tranzacționare de înaltă frecvență, de exemplu)
- Acces hardware – Aveți nevoie direct acces la hardware (de exemplu, pentru un sistem încorporat)
Deci, practic, C / C ++ este o alegere excelentă dacă și numai dacă sunteți concentrat pe unul dintre domeniile în care este deosebit de potrivit .
Comentarii
Răspuns
I heard that syntactically they are almost the same.
Sintactic? Cine dă o maimuță zburătoare despre sintaxă? Sintaxa este bună doar pentru un singur lucru: permite migrarea mai rapidă din limbi similare din punct de vedere sintactic. Asta este.
C # este mult mai bun decât Java. Luați în considerare suportul lor de programare generic și funcțional – C # este cu mult înaintea Java. Ca să nu mai vorbim de supraîncărcările operatorului și alte lucruri bune – C # este mult mai bine prezentat. Nu există nicio modalitate în care Java ar putea fi considerat mai bun decât C #.
C ++ și C # sunt mai mult un concurs. C ++ are un model de compilare arhaic incredibil de enervant și o grămadă de boli din C, dar șabloanele sale sunt mult mai puternice decât genericele, iar abordările de gestionare a resurselor sunt mult mai flexibile și mai puternice în general, deoarece using
este un eșec complet și se execută mai repede.
Comentarii
Răspuns
Ei bine, C#
are câteva funcții încorporate frumoase, cum ar fi LINQ
și delegați. Obține cele mai bune rezultate din ambele lumi – Java
și C++
. Căutați aici pentru o comparație completă.
Dar îmi place lumea Java
mai bine – mult mai multe cadre open source și rulează pe fiecare platformă. Și nu-mi spuneți despre Mono
– nu este o opțiune fiabilă.
Comentarii
Răspuns
Conform unor surse (a se vedea de exemplu http://www.indeed.com/jobtrends ) C # este încă mai puțin popular decât Java și la fel de popular ca C ++.
C # oferă caracteristici care îi lipsesc Java, de exemplu suport direct pentru anumite limbaje de programare, cum ar fi proprietățile, stilul de programare funcțional și așa mai departe. C # are un nivel mai ridicat de abstractizare decât C ++, ceea ce reprezintă un avantaj atunci când timpul de dezvoltare este mai important decât viteza programului.
Personal, prefer în continuare lumea Java / C ++. După cum a spus Petar Minchev, Java are mai multe cadre și aplicații open source, rulează peste tot, este mai puțin legat de un anumit furnizor și de un sistem de operare. C ++ are avantaje similare, chiar dacă codul are adesea nevoie de adaptări care merg de la o platformă la alta. Din moment ce prefer să mă dezvolt pe Linux și, din câte știu, nu pot avea C # pe deplin dezvoltat pe Linux, nu am avut niciodată un interes real pentru C # deoarece nevoile mele de programare sunt acoperite de C, C ++, Java, Scala.
Pe de altă parte, pentru mulți dezvoltatori legarea de un anumit furnizor nu este o problemă: Microsoft are o poziție dominantă pe piața sistemului de operare și C # oferă multe oportunități de muncă. Prin urmare, mulți dezvoltatori IMO adoptă C # deoarece, pe lângă faptul că este un limbaj bogat în caracteristici, este și o investiție bună.
Comentarii
Răspuns
Ce zici de " Ce cadru de dezvoltare software, care include un limbaj de programare " mai bine?
Ați uitat să includeți alte lucruri, cum ar fi mediul " " cu care veți lucra.
-
Veți lucra numai pentru sistemul de operare Windows, dar nu trebuie să fie de nivel scăzut și să aibă multă memorie și alte resurse?
Alegeți .NET ca framework peste Windows și folosiți C #.
-
Veți lucra numai pentru Windows, dar nu trebuie să fie de nivel scăzut, DAR, nu aveți o mulțime de resurse?
Alegeți Delphi Framework (și limbajul de programare Object Pascal Delphi sau limbajul de programare Lazarus Object Pascal)
-
Este necesară aplicația dvs. a sprijini seve platforme rale, ca un joc, pe diferite telefoane mobile?
Alegeți Java Framework și limbajul de programare Java.
-
Este Linux cu KDE ca grafic interfață?
Alegeți cadrul QT, cu C ++
-
Este Linux cu Gnome ca interfață grafică?
Alegeți cadrul GObject / GLib , cu C ++
-
Vei lucra cu o mulțime de operații de nivel scăzut, cum ar fi dezvoltarea de drivere?
C simplu sau C ++ este folosit pentru mai multe operații Sisteme, cu biblioteci standard, ca cadru.
Doar cei 2 cenți ai mei.
Comentarii
Răspuns
Dacă faceți o căutare, este posibil să vă dați peste discuții despre limbajele de programare de top. Iată unul dintre rezultatele căutării – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – Java pare să fie în continuare cel mai popular limbaj.
Java a încercat să înlăture unele dintre neajunsurile C ++ (și simplificând viața programatorilor pentru aplicații non-timp real și non-critice). C #, care a venit târziu la petrecere, a evitat unele dintre neajunsurile limbajului Java. C # a înregistrat o mulțime de progrese (deoarece Microsoft controlează mult), în timp ce avansurile în Java au fost blocate pentru o perioadă considerabilă de timp din cauza conflictului dintre părțile interesate ale acestuia.
Răspuns
Câteva lucruri care nu au fost deja menționate:
C # este mai bun decât C ++ deoarece:
Elimină cu fișiere antet, ceea ce se traduce printr-o simplitate mare.
C # este mai bun decât Java deoarece:
Acceptă atât tipul de referință (clasă), cât și tipul valorii (struct) definite de utilizator tipuri care, dacă știți ce faceți, pot aduce beneficii semnificative de performanță.
Sprijină delegații, care sunt ca interfețe cu o singură metodă, simplificând astfel foarte mult codificarea constructelor care apar frecvent, care implică obiecte cu o singură metodă.
Comentarii
- Puteți explica în ce mod, dacă aveți atât tipuri de referință, cât și tipuri de valori, puteți obține beneficii de performanță în C #?
- De exemplu, dacă doriți să aveți o serie de înregistrări , în Java nu aveți altă opțiune decât să vă descrieți înregistrarea folosind o clasă, astfel încât matricea dvs. va fi o matrice de referințe la o multitudine de obiecte alocate separat. În C # puteți descrie înregistrarea dvs. utilizând o structură, astfel încât matricea dvs. va fi doar o singură zonă continuă de memorie care conține structurile dvs. unul după altul, la fel ca în C.
- Ca un alt exemplu, dacă doriți pentru a defini un tip nou mic, (un tip care s-ar încadra într-un cuvânt mașină), nu trebuie să definiți o nouă clasă pentru acesta; îl puteți face pur și simplu o structură, deci va respecta semantica valorică. Transmiterea unor astfel de structuri nu va fi mai costisitoare decât trecerea referințelor la obiecte, dar veți avea avantajul de a nu aloca, construi și colecta gunoiul niciun obiect.
- Înțeleg. Deci, clasele sunt instanțiate pe heap și sunt accesate prin referințe, în timp ce structurile sunt instanțiate pe stivă (?)
- Aproape corect. Singura inexactitate din această afirmație este că o structură va fi găsită pe heap dacă este încorporată într-un alt obiect sau dacă se află într-o matrice de structuri. Și va fi găsit, de asemenea, în heap, dacă se încadrează vreodată, exact în același mod în care tipurile de valori sunt încadrate în Java.
Răspuns
Ar trebui să alegeți cea mai bună limbă pentru mediul dvs. așteptat și expertiza dvs.
Alegeți C # dacă lucrați într-un mediu exclusiv Microsoft. În timp ce C # este standardizat în conformitate cu ISO / IEC 23270: 2003, versiunea Microsoft rămâne singura implementare completă. Mai multe părți cheie ale limbajului nu sunt acoperite de standard și sunt, prin urmare, supuse brevetelor Microsoft. Nimeni altcineva nu va implementa o versiune complet compatibilă a limbii pentru alte sisteme, așa că, de fapt, sunteți furnizor blocat la Microsoft Windows și .Net atâta timp cât utilizați limba. Dacă sunteți în căutarea abilităților pe care să le utilizați pe piața mobilă, cel mai bine este să căutați într-un alt limbaj.
Java funcționează, dar are o mulțime de cheltuieli generale, în parte datorită unor caracteristici precum colectarea gunoiului. Java nu este, de asemenea, standardizat de ISO / IEC, deci nu aveți nicio garanție dacă schimbați platformele și versiunile Java, doar cele mai bune intenții ale Sun / Oracle. Dacă intenționați în cele din urmă să lucrați cu Android, acesta este cu siguranță calea de urmat Programarea Android este practic Java, cu câteva modificări.
C ++ este standardizat și aproape toate compilatoarele respectă standardul internațional, deci aveți un comportament garantat DAR limbajul nu vă protejează de voi înșivă. Trebuie să efectuați singur curățarea și verificarea deversării. Nu este greu. Programatorii C / C ++ fac acest lucru de mulți ani. Apple folosește obiectivul C pentru orice, așa că, dacă doriți să vizați Apple, vă recomand să încercați acest lucru.
Dacă vă vedeți lăsând Windows la un moment dat, aș sugera să învățați atât C / C ++, cât și Java – ambele fiind comercializabile în acest moment.
Răspuns
În legătură cu C ++ vs C # (deoarece nu sunt suficient de competent în Java), ceea ce îmi lipsește aici este capacitatea de a accesa lucruri de nivel scăzut pe Windows. De exemplu, nu puteți dezvolta un driver de afișare nativ în C # (încă), dar puteți face cu C ++. Acest lucru nu îmbunătățește C ++. Văd C ++ versus C # ca Asamblare versus C.
C # este în vizualizați mult mai eficient dacă vă uitați la timpul necesar pentru a implementa efectiv o caracteristică. Pedeapsa de performanță a runtime-ului .Net este neglijabilă pentru 99% din aplicațiile dezvoltate. Poate fi semnificativă dacă rulați o buclă strânsă, da din toate punctele de vedere, dar de cele mai multe ori o aplicație este inactivă, așteaptă orice tip de intrare, semnal sau întrerupere (IO pe disc, clic pe buton, rețea, finalizare animație).
Biblioteca CLR cu toate funcțiile au altceva mare beneficiu. Când pregăteam C # pentru dezvoltatori juniori, majoritatea dintre ei au spus că le place convenția de numire logică a claselor, membrilor și spațiilor de nume. Găsirea unei caracteristici a metodei a fost logică în SDK, lucru la care Visual Basic 5 a fost grav defectuos. Acest lucru i-a ajutat enorm să adopte biblioteca. După ce ați învățat sintaxa unei limbi, a învăța o nouă bibliotecă este semnificativă pentru a înțelege bine orice SDK. Vă scutește de reinventarea roții.