Miért válasszam a C # -ot a Java és a C ++ helyett? [zárt]

Zárt . Ez a kérdés véleményalapú . Jelenleg nem fogadja el a válaszokat.

Megjegyzések

  • Írás közben a kérdés tankönyves példa volt arra, hogy nem konstruktív " melyik nyelv a jobb? " itt témán kívüli kérdések. ' Megpróbáltam konstruktívabbá tenni egy szerkesztéssel, mivel valójában jó, átgondolt válaszokat kapott. Ennek ellenére kérjük, tartsa szem előtt az GYIK és ezt a blogbejegyzést , amikor ilyen jellegű kérdéseket tesz fel. .
  • Hadd adjak néhány élesebb elemet. A .NET nyelvének jól definiált DOM-ja van ( pl. CodeDOM ), következésképpen a dolgok dinamikus generálása futás közben sokkal egyszerűbb és hatékonyabb. Ez infrastrukturális képességként is hasznos lehet. Ezenkívül a típusrendszernek 1: 1 arányú egyezése van az összes natív W3 típussal. Lényegében a W3 és más interopok a kezdetektől fogva a nyelvbe sütöttek. Más nyelvek esetében ezek az aggodalmak csak elhárultak, és számos kihívást jelentenek számukra. Továbbá, ha ' sok nyelvvel és / vagy protokollal fogsz együttműködni, akkor a .NET is nagyon erős
  • Hé, JoeGeeky, add meg a megjegyzésedet válasz a kérdésre.
  • Az igazi kérdések a következők: Miért válasszam a Nemerle-t, az F * -ot és az F # -ot a C # helyett? (azaz mind a három nyelv MS-ből származik, és mindhárom jobb)
  • Nem igazán gondolom, hogy a műfaj bármely állítása " X nyelv / platform az Y nyelvhez / platformhoz képest MINDIG jobb " érvényes, és azt is gondolom, hogy bármely X és Y esetében könnyen érvényteleníthető bizonyos összefüggések. Mi a ' értelme ennek a kérdésnek?

Válasz

A kérdés legyen " Melyik nyelv felel meg jobban a modern, tipikus alkalmazásfejlesztéshez? ".

Szerkesztés : Néhány alábbi megjegyzéssel foglalkoztam. Egy apró megjegyzés: vegye figyelembe, hogy amikor sok dolog van natív módon, mint idiómák, akkor ez nagy különbség, mint minden alkalommal saját maga végrehajtása, letöltése és felhasználása. Szinte minden megvalósítható ezen nyelvek bármelyikén. A kérdés az – a nyelvek natív módon biztosítják.

Tehát a fejem tetején (néhány érv mindkét nyelvre vonatkozik) …

A C # jobb, mint a C ++:

  • natív szemétgyűjtéssel rendelkezik.
  • Lehetővé teszi, hogy az class-method “aláírásokat szabad funkcióként kezelje (azaz figyelmen kívül hagyja a statikusan beírt this pointer argumentum), és ennélfogva dinamikusabb és rugalmasabb kapcsolatokat hoz létre az osztályok között. szerkesztés ha nem tudod, hogy ez mit jelent, akkor próbálj meg hozzárendelni egy tag metódust, amely egy vo id = “c33813c48a”>

változó. A C # küldöttek a this mutatót magukkal viszik, de a felhasználónak nem mindig kell ezzel törődnie. Csak bármely osztály void() metódust rendelhetnek bármely más void() delegálthoz.

  • Hatalmas színvonalú könyvtár olyan sok hasznos dologgal, amely jól megvalósítható és könnyen használható.
  • Ez lehetővé teszi a kezelt és a natív kód blokkokat is.
  • Az összeállításos verziók könnyen orvosolják a DLL pokol problémáit.
  • Beállíthatja az osztályokat, a módszereket és a mezőket összeszerelés-belsővé (ami azt jelenti, hogy bárhonnan elérhetők a deklarált DLL-fájlból, de más összeállításokból nem).
  • A C # annyiban jobb, mint a Java:

    • A sok zaj (EJB, privát statikus osztály megvalósítások stb.) helyett elegáns és barátságos natív konstrukciókat kap, például Tulajdonságok és Események .
    • Valódi generikáid vannak (nem az a rossz casting poén, amelyet a Java generikusnak nevez), és reflektálhatsz rájuk.
    • Támogatja a natív erőforrás-menedzsment idiómákat (a using utasítás). A Java 7 is támogatni fogja ezt, de a C # már régóta rendelkezik vele.
    • Nem ellenőrizte a kivételeket 🙂 (vitatható, hogy ez jó vagy rossz)
    • Mélyen integrálódik a Windows rendszerbe, ha ezt szeretné.
    • Lambdas és LINQ rendszerrel rendelkezik, ezért kis mennyiségű funkcionális programozást támogat.
    • Lehetővé teszi a mind az általános kovariancia, mind az ellentmondás kifejezetten.
    • Dinamikus változókkal rendelkezik, ha szeretné.
    • Jobb felsorolási támogatás a yield utasítással.
    • Ez lehetővé teszi új érték (vagy nem hivatkozási) típusok meghatározását.

    Szerkesztés – Megjegyzések címzése

    • Nem mondtam, hogy a C ++ nem támogatja a natív RAII-t. Azt mondtam, hogy a Java-nak nincs (kifejezetten meg kell próbálnia / végül). A C ++ -nak vannak olyan automatikus mutatói, amelyek nagyszerűek a RAII számára, és (ha tudod, mit csinálsz) a szemétgyűjtést is helyettesítheti.
    • Nem mondtam semmit a szabad funkciók emulálásáról. De például ha egy mezőhöz this mutatóval kell hozzáférni, és kösse meg a metódust egy általános függvénymutatóval (azaz nem ugyanabba az osztályba), akkor egyszerűen nincs natív módja annak. A C # -ban ingyen kapja meg a. Még azt sem kell tudnia, hogyan működik.
    • A " módszerrel a tag metódusait szabad funkcióként kezelheti " Arra gondoltam, hogy “például nem lehet natív módon megkötni a tag metódust egy szabad függvény aláírásával, mert a tag metódus " titokban " szüksége van a this mutatóra.
    • A using utasítás, nyilvánvalóan a Kihasználhatatlan csomagolókkal együtt, remek példa erre RAII. Lásd ezt a linket . Fontolja meg, hogy CII-ben nincs annyira szüksége RAII-ra, mint C ++ -ra, mert rendelkezik a GC-vel. Azokra az esetekre, amikor szüksége van rá, kifejezetten használhatja a using Egy másik kis emlékeztető: a memória felszabadítása drága eljárás. A GC-nek sok esetben előnye van a teljesítmény terén (különösen, ha sok memóriája van). A memória nem fog kiszivárogni, és nem fog sok pénzt költeni idő a lekiosztásra. Mi több, az allokáció is gyorsabb, mivel nem mindig oszt ki memóriát, csak egyszer-egyszer. A new hívása egyszerűen növeli az utolsó object-pointer.
    • " A C # annyiban rosszabb, hogy szemétszállítással rendelkezik ". Ez valóban szubjektív, de amint azt a tetején kijelentettem, a legmodernebb, tipikus alkalmazásfejlesztéshez a szemétgyűjtés pokolian nagy előnyt jelent.
      A C ++ rendszerben a memóriájának manuális kezelése a new a nd delete, amely empirikusan itt-ott mindig hibákhoz vezet, vagy (a C ++ 11-vel) natív módon használhatja az automatikus mutatókat, de ne feledje, hogy sok és sok zaj t a kódhoz. Tehát a GC-nek még mindig van éle.
    • " A generikusok sokkal gyengébbek, mint a sablonok " – Csak nem ” Nem tudom, honnan szerezted. A sablonoknak megvannak a maguk előnyei, de tapasztalataim szerint a korlátok, az általános paraméterek típusellenőrzése, az ellentmondás és a kovariancia sokkal erősebb és elegánsabb eszközök. A sablonokban az az erősség, hogy lehetővé teszik a játékkal a bit, ami nagyszerű lehet, de sok fejfájást is okoz, ha valamilyen hibakeresést szeretne végrehajtani. Összességében tehát a sablonoknak megvannak a jó tulajdonságaik, de a generikus gyógyszereket praktikusabbnak és tisztábbnak tartom.

    Megjegyzések

    • És ha mégis szemétgyűjtőt szeretne a C ++ -hoz, letöltheti .
    • folytassuk a következő beszélgetést a beszélgetésben : a " struct ", egy olyan típusú objektum, amely tárolható a veremben (vagy speciális esetekben a CPU regiszterekben), vagy beágyazható más halomobjektumokba. Gyakran használják 1-4 mezővel rendelkező kis objektumokhoz, például X, Y koordinátapárokhoz.
    • @LokiAstari Mind magyarázza? Mindaddig, amíg emlékszik az eseménykezelők regisztrációjának törlésére és a Hulladék minta használatára natív csomagolókat tartalmazó osztályoknál, ' rendben lesz. Ezt ' sokkal kevesebbet kell tudni és emlékezni, mint a C ++ memóriakezelésére.
    • -1, mivel hiányoznak a " A C ++ jobb, mint a C #, mivel … " és " A Java jobb, mint a C # … ". Nem hiszem, hogy a C # minden területen jobb, ezért a két szakasz nélküli válasz valószínűleg nem tartalmaz fontos információkat.

    Válasz

    Környezet

    .NET-keretrendszer és a Windows-ügyfelek

    A Windows az operációs rendszer domináns része az ügyfélszámítógépeken. A Windows-alkalmazások legjobb GUI-keretrendszere a Winforms és a WPF, valamint a .NET-keretrendszer . A legjobb programozási nyelv, amely a .NET-keretrendszer és az API-jaival működik, C # . A Java nem alternatívája ennek.A C ++ pedig egy régebbi nyelv, automatikus memóriakezelés nélkül. A C # hasonló a C ++ -hoz, de rendelkezik automatikus memóriakezeléssel, és nem kell mutatókat használni, amelyek produktívabbá teszik Önt. A C ++ továbbra is a legjobb megoldás lehet bizonyos esetekben, de nem a formanyomtatványú adatbázis-alkalmazások esetében, amelyek gyakran előfordulnak a üzlet.

    IIS és Windows Server

    Ha Windows környezetben és C # használatával szokott dolgozni, akkor a legkevesebb befektetésre lesz szüksége az IIS kiszolgálói programozásához és a Windows Server a alapvető adminisztráció.

    Active Directory és Windows Server

    Ha olyan szoftvert fejleszt, amelyet a vállalati hálózatokban kíván telepíteni, akkor valószínűleg egy Windows központú környezetet használnak egy Windows Server Active Directoryval. Ilyen környezetben könnyebb integrálni és telepíteni a C # és a .NET-keretrendszer .

    Személy szerint Java fejlesztő vagyok, nem C # fejlesztő, de a webpel dolgozom. Ha a Windows hálózatra fejlesztenék hálózati alkalmazásokat, akkor váltanék a C # -ra. De a Java-t jobban szeretem a Linux alapú webszervereknél. A beágyazott rendszerekhez a C ++ -t választanám, ha nem sok függőségem lenne.

    Igen, C # jobb nyelv, modernebb funkciókkal, mint a C ++ és a Java, de ez nem a legfontosabb a C # .

    Összegzés

    A szoftver környezete a legfontosabb a kiválasztáshoz C # . Ha olyan környezetben dolgozik, ahol Windows kliensek, Windows kiszolgálók, Active Directory, IIS és esetleg SQL Server majd C # a legjobb nyelv a .NET-keretrendszerrel .

    Ha Unix környezetben dolgozik pl. webes szolgáltatások, a Java lenne a választásom. És ha beágyazott rendszerekkel dolgozik, vagy hardvereszközökkel kell integrálnia, C ++ jó választás lenne.

    Megjegyzések

    • Abszolút – ezért használom a C # -ot, valójában nem más okot
    • A .NET-et minden más platformon biztosan használhatja a Mono-on keresztül, MonoTouch és MonoDroid, de a referenciaértékeim szerint a Mono lényegesen lassabb, mint a .NET for Windows, és a Microsoft ' saját Compact Framework rendszere rendkívül lassú a Windows CE-n: codeproject.com/KB/cross-platform/BenchmarkCppVsDotNet.aspx … természetesen a WPF csak Windows rendszeren érhető el (de én nem ' amúgy is tetszik.)
    • Mely függőségekre gondolsz, amelyek " A beágyazott rendszereknél a C ++ -ot választanám, ha nem lennék ' t nem nyert ' t sok függőséget. " A Java könyvtárakra gondolsz?
    • @Puckl igen, de leginkább a jvm / jre.
    • " Ha Unix környezetben dolgozik pl. webszolgáltatások " van még néhány olyan nyelv &, amelyet figyelembe lehet venni: ruby, Python, node.js stb.

    Válasz

    C # és Java

    A C # nagyon jó nyelv, ha:

    • általános célú objektum-orientált fejlesztést szeretne végrehajtani. Ez egy klasszikus, statikusan beírt OOP nyelv.
    • Csak a Microsoft platformjait célozza meg (érdemes megjegyezni, hogy a Microsoft hatékonyan klónozta a Java-t a C # létrehozásához, mert olyan Java-szerű nyelvet akartak, amely bezárja az embereket Windows. Használhatták volna a Java-t, de ez lehetővé tette volna az emberek számára, hogy könnyen futtassanak alkalmazásokat más platformokon ….)

    A C # nyelv különféle szempontból szebb, mint a Java a szintaxis a tulajdonságok, értéktípusok, újraminősített generikumok stb. Jobban szeretem a C # mint nyelvet , mint a Java-t, de a dolgok nagy sémájában meglehetősen hasonló nyelvűek és alkalmasak hasonló alkalmazásokhoz.

    Másrészt a Java-nak van néhány nagy előnye is:

    • Óriási nyílt forráskódú ökoszisztéma – a Java számára ingyenesen elérhető könyvtárakat messze minden nyelv legjobbja. Nehéz túlbecsülni ennek fontosságát – a dolgok elvégzésének szempontjából a Java nagyon hatékony.
    • Eszközök – véleményem szerint a Java eszközök jobbak, mint amit a .Net világ megszerezhet. . például. Maven (ha már elsajátította!) Különösen lenyűgöző.
    • Karbantarthatóság – A Java már egy ideje létezik, és a nagyvállalatoknál éppen azért volt sikeres, mert viszonylag stabil és sok erőfeszítést tett a visszafelé kompatibilitás érdekében. Az egyszerű és kissé bonyolult szintaxis itt is segíti a Java-t – könnyebb elolvasni és karbantartani a kódot, ha a kód nagyon világos és egyértelmű.
    • Új nyelvek – A JVM elképesztő új nyelvekkel rendelkezik (Scala, Clojure , Groovy stb.), Amelyek a Java platform jövője. Itt történik a nyelvi innováció nagy része, és ez sokkal gyorsabban megy végbe, mint akár a Java, akár a C # nyelven.

    Tehát a Java vs. C # meglehetősen szoros hívás, és valóban arról szól, hogy a Microsoft táborában vagy az Open Source / cross-platform táborban akarsz lenni.

    Személy szerint a Java-t részesítem előnyben, mert:

    • A könyvtári ökoszisztéma véleményem szerint sokkal fontosabb, hogy az a tény, hogy a C # szintaxisa szebb, mint a Java
    • Hosszú távon azt akarom, hogy az összes kódom megfelelő legyen -platform és képes futtatni az olcsó linuxos gépek nagy fürtjein a felhőn.
    • A Clojure az IMHO a világ legígéretesebb nyelve jelenleg, és ha kitartok a JVM platform mellett, akkor képes leszek hogy tran a kódomat és a készségeket idővel könnyen beillesztheti a Clojure-ba.

    C / C ++

    A C / C ++ alapvetően teljesen más állat. Manapság nem ajánlanám általános célú alkalmazások fejlesztésére a következő okokból:

    • Memóriakezelés – manapság a legtöbb általános célú programozáshoz nem akarsz saját memória kezelése. A C # vagy Java nyelven történő szemétszállítás sokkal jobb az Ön termelékenysége és józan esze szempontjából, mint bármelyik explicit memóriakezelési technika, amelyet a C / C ++ -ban kell használnia.
    • Komplexitás – Különösen a C ++ egy rendkívül bonyolult nyelv. Hosszú időbe telik, míg a kód elsajátítódik, és maga a kód is ördögien összetett lehet. (Például a C ++ sablonok különösen szőrösek ….)
    • Termelékenység – legtöbbször és minden más egyenlőség esetén hosszabb ideig tart, amíg a dolgokat C / C ++ nyelven hajtja végre.

    Mindazonáltal kétségtelenül nagyszerű választás bizonyos korlátozott számú speciális tartományban, különösen:

    • Operációs rendszerek – valószínűleg a C / C ++ programot szeretné használni, ha operációs rendszert ír.
    • Játékfejlesztés – szinte az összes t a legjobb kereskedelmi játékmotorok a C / C ++. Még mindig a legjobb választás, ha igényes AAA címet fejlesztesz (a C # és a Java tökéletesen megfelel a kevésbé igényes / alkalmi játékokhoz)
    • Nagy teljesítményű számítástechnika – az optimalizált C / C ++ valószínűleg a legjobb módszer hozzon létre nagyon nagy teljesítményű kódot. Az ilyen szintű optimalizálást végző legtöbb alkalmazás számára nem éri meg a fáradságot, de bizonyos területeken ez rendkívül értékes lehet (például nagyfrekvenciás kereskedelem).
    • Hardver-hozzáférés – közvetlen hozzáférés a hardverhez (pl. beágyazott rendszerhez)

    Tehát alapvetően a C / C ++ akkor és csak akkor nagyszerű választás, ha Ön az egyik olyan domainre koncentrál, ahol ez különösen jól alkalmazható .

    Megjegyzések

    • Ön a maven-t említi a java jobb eszközeinek példaként. Nem ' nem különösebben családias, de a dokumentációt megnézve Maven sokkal hasonlóbbnak tűnik, mint a natív .Net build eszköz, az MSBuild. Mitől jobb Maven, mint az MSBuild?
    • +! (csak azért, mert csak egy szavazatom van): Ön nagyon jól elmagyarázta, miért jobb a Java ökoszisztéma, és miért nem szabad csak a C # és a Java szintaxisát összehasonlítani. A Java több és jobb könyvtárral és eszközzel rendelkezik. Magában a Java nyelvben nem sok minden történik, de a JVM számára új, nagyon érdekes nyelvek jelennek meg, amelyek (IMO) sokkal érdekesebbek, mint a C #. Nem ismerem a Clojure-t, de a Scalát nagyon érdekesnek találom: az elejétől fogva OOP + FP-nek lett tervezve.
    • miért gondolja mindenki, hogy a C ++ kód tele van manuális memóriakezeléssel. Nem tudod, a RAII azt jelenti, hogy szinte soha nem kell manuálisan kiosztanod / felszabadítanod a memóriát (amikor megteszed, akkor az a nyelv, mint a C #, használhatatlan lenne számodra).
    • @gbjbaanb – valószínűleg azért, mert A RAII nem megfelelő az általános célú memóriakezeléshez. Rugalmasságban semmiképpen sem egyenértékű a teljes GC rendszerrel, mint ahogy azt a Java vagy a C # alatt látja. Amint túllép a RAII határain, visszatér a kézi memóriakezelés területére.
    • @mikera Csak szeretném felhívni a figyelmet arra, hogy a .NET platformon is elég sok a nyelv fejlesztése. Például. Az F # egy ügyes funkcionális nyelv, amely simán integrálja a .NET többi részét, és a Python nemrégiben Iron Python néven került a .NET-be (és kapott egy szép IDE-t is ! ).

    Válasz

    I heard that syntactically they are almost the same. 

    Szintaktikusan? Ki ad egy repülő majmokat a szintaxisról? A szintaxis csak egy dologra jó: gyorsabb migrációt tesz lehetővé a szintaktikailag hasonló nyelvekről. Ez az.

    A C # jóval jobb, mint a Java. Fontolja meg általános és funkcionális programozási támogatásukat – a C # jóval megelőzi a Java-t. Nem is beszélve a kezelő túlterheléséről és egyéb jó dolgokról – a C # sokkal jobban szerepel. Semmilyen módon nem lehet a Java-t jobbnak tekinteni, mint a C #.

    A C ++ és a C # inkább verseny. A C ++ hihetetlenül idegesítő archaikus összeállítási modellel rendelkezik, és egy csomó örökölt betegség C-től, de a sablonjai jóval erőteljesebbek, mint a generikusok, és az erőforrás-kezelési megközelítések sokkal rugalmasabbak és általában erőteljesebbek, mivel a using teljes kudarc , és gyorsabban fut.

    Megjegyzések

    • Úgy gondolom, hogy össze kell hasonlítani mind a nyelvi jellemzőket, mind pedig a nyelv elérhetőségét a különböző platformokon. a Microsofthoz van zárva, a Java-val nem az: ' nagy előnye, legalábbis a UNIX / Linux fejlesztők számára. Az OOP + FP remek funkciók, de miért aggódhat a C # miatt, ha használhatja a JVM-en futó Scalát, amely képes kezelni a régi Java-kódokat? Soha nem tanulnék meg egy platformspecifikus nyelvet, hacsak nem kényszerítenek rá.
    • @Giorgio: A Mono projekt létezik . Másodszor, a Microsoft valóban gondoskodik a platformjukról – rendszeresen nagy frissítéseket adnak neki. A Java-nak alig volt semmi újja. Ezenkívül a kérdés a C # vs Java-ról szól, nem pedig a CLR vs JVM-ről.
    • @DeadMG: Ha jól tudom, nem tudok egyetlen Windows rendszeren fejlesztett C # programot sem elkészíteni, és Mono-val felépíteni. Nem CLR vs JVM? A kérdés arról szól, hogy miért használják az emberek a C # -t vagy a Java-t. Ahhoz, hogy az emberek egy nyelvet használhassanak, futási időre és operációs rendszerre van szükségük. Nem arról beszélek, hogy a C # több funkcióval rendelkezik, mint a Java, de a Java sokkal hordozhatóbb: ez a tényező befolyásolhatja a nyelv elfogadását. Valójában a Java-t még mindig sokkal gyakrabban használják, mint a C # -ot, még akkor is, ha bizonyos fejlett funkciók hiányoznak belőle.
    • @Giorgio, bármelyik C # programot felveheti és Mono-val felépítheti. Nem használhat bizonyos könyvtárakat (amelyek egyébként sem tartoznak a C # nyelvhez). És a java nem " sokkal hordozhatóbb ". Az iOS-hez C # -val kódolhat, de például Java-ban nem.
    • @Giogio, a Mono legalább olyan hordozható, mint a JVM.

    Válasz

    Nos, C# van néhány szép beépített funkció, például LINQ és küldöttek. Mindkét világból kihozza a legjobbat – Java és C++. A teljes összehasonlításért itt nézhet.

    De a Java világot sokkal jobban szeretem több nyílt forráskódú keretrendszer, és minden platformon fut. És ne meséljen a Mono -ről – ez nem megbízható lehetőség.

    Megjegyzések

    • +1: " De nekem jobban tetszik a Java világ – sokkal több nyílt forráskódú keretrendszer és minden platformon fut. " Legyen ' remélem, hogy az Oracle ezen nem változtat!
    • Elmagyarázza, mi ' nem " megbízható " monóban?
    • @Petar Minchev, Ez nem más, mint a saját hibája. Kövesse a hordozhatóságra vonatkozó irányelveket, és nem szabad használjon nem hordozható könyvtárakat – és így minden komplex alkalmazás megbízhatóan futna a Mono-val. Az olyan dolgok, mint a WPF, soha nem kerülnek átadásra.
    • @Petar Minchev, sok nem hordozható Java könyvtárak odakinn. Mindig óvatosnak kell lennie a hordozhatósággal kapcsolatban, függetlenül attól, hogy melyik nyelvet ' használja. És a kérdés egyébként is a nyelvekre vonatkozik, nem pedig a Harmadik fél könyvtárai.
    • @Petar Minchev, a GTK # hordozható. Használja inkább.

    Válasz

    Egyes források szerint (lásd pl. http://www.indeed.com/jobtrends ) A C # még mindig kevésbé népszerű, mint a Java, és ugyanolyan népszerű, mint a C ++.

    A C # olyan szolgáltatásokat nyújt, amelyekből a Java hiányzik, például közvetlen támogatás bizonyos programozási idiómákhoz, mint például tulajdonságok, funkcionális programozási stílus stb. A C # absztrakciója magasabb, mint a C ++, ami akkor előny, ha a fejlesztési idő fontosabb, mint a program sebessége.

    Személy szerint én továbbra is a Java / C ++ világot részesítem előnyben. Mint Petar Minchev elmondta, a Java több nyílt forráskódú kerettel és alkalmazással rendelkezik, mindenhol fut, kevésbé kötődik egy adott gyártóhoz és operációs rendszerhez. A C ++ hasonló előnyökkel rendelkezik, annak ellenére, hogy a kódnak gyakran szüksége van adaptációkra egyik platformról a másikra. Mivel inkább Linuxon fejlődök, és tudomásom szerint nem tudtam teljes mértékben kiépíteni a C # -ot Linuxon, soha nem volt igazi érdeklődésem a C # iránt, mert a programozási igényeimet C, C ++, Java, Scala fedezi.

    Másrészt sok fejlesztő számára nem jelent problémát, ha egy adott szállítóhoz kötődik: a Microsoft domináns pozícióval rendelkezik az operációs rendszerek piacán, a C # pedig sok munkalehetőséget kínál. Ezért az IMO számos fejlesztője átveszi a C # kódot, mivel a funkciókban gazdag nyelv mellett ez is jó befektetés.

    Megjegyzések

    • " Nem tudtam teljes mértékben kiépíteni a C # számot Linux alatt " – Tudnál részletezni erről? Arra gondolsz, hogy a teljes .Net keretrendszer nem ' nem érhető el, mert még ' nincsen problémám a C # nyelvvel ( vagy F #)) Linux alatt?
    • @wawa: Tudomásom szerint a .Net keretrendszer megfelel a JDK-nak, és a .Net keretrendszer csak Windows esetén érhető el, míg a JDK több operációs rendszer esetén is elérhető ' s. Ha ez nem helyes, szerkeszthetem a válaszomat (és megváltoztathatom a véleményemet is).
    • Úgy gondolom, hogy a JDK-val az alaposztályi könyvtárat szorosabban hasonlítanám. A BCL szabványosított és nem szabványosított alkatrészekkel rendelkezik. A mono projekt megvalósítja a szabványosított és a nem szabványosított darabok nagy részét is.
    • @wawa: Köszönöm az információkat. Azt fontolgatom, hogy megpróbálom C # -t kipróbálni Mono használatával. Mégis nagyon erős az az érzésem, hogy a C # sokkal erősebben kötődik a Microsofthoz, mint a Java az Oracle-hez (vagy a Sunhoz a múltban).

    Válasz

    Mi van a " melyik szoftverfejlesztési keretrendszerrel, amely tartalmazza a programozási nyelvet " jobb?

    Elfelejtett más tartalmat is felvenni, például a " környezetet ", amellyel dolgozni fog.

    1. Csak Windows operációs rendszer esetén fog dolgozni, de nem kell alacsony szintűnek lennie, sok memóriával és egyéb erőforrásokkal kell rendelkeznie?

      Válasszon .NET mint keretrendszer a Windows rendszeren, és használja a C # parancsot.

    2. Csak Windows rendszeren fog dolgozni, de nem kell alacsony szintűnek lennie, DE, nem kell sok erőforrásod van?

      Válaszd a Delphi keretrendszert (és az Object Pascal Delphi programozási nyelvet vagy a Lazarus Object Pascal programozási nyelvet)

    3. Szükséges az alkalmazásod. hogy támogassa seve-t ral platformok, mint például egy játék, különböző mobilokban?

      Válassza ki a Java keretrendszert és a Java programozási nyelvet.

    4. Linux, grafikusan a KDE interfész?

      Válassza a QT keretrendszert a C ++ használatával.

    5. Linux grafikus felületként Gnome-t használ?

      Válassza a GObject / GLib keretrendszert , a C ++ használatával

    6. Sok alacsony szintű művelettel fogsz dolgozni, például illesztőprogramok fejlesztésével?

      A Plain C vagy a C ++ több operációs rendszerhez használt Rendszerek, szabványos könyvtárakkal, mint keretrendszer.

    Csak a 2 centemet.

    Megjegyzések

    • Én ' nem vagyok biztos abban, hogy 3. Az okostelefonok ma nagyon népszerűek és az AFAIK, mindegyikük valamilyen formában támogatja a C # -ot, de csak az Android támogatja a Java-t.
    • Isn ' t Delphi meghalt? 🙂
    • @ šljaker Nem, de, nem ' nem nagyon népszerű tézisnapok.
    • @svick: Ez hazugság. Az Androidon kívül a Java is létezik valamilyen formában az iOS-en, a Symbian-on, a WinMo-n, a Blackberry-n, a Maemóban és a WebOS-on (azaz minden, ami számít vagy még mindig számít; ne ' ne indítson el engem még kisebb platformok). Az Android, a Blackberry és a Symbian hivatalosan támogatja a Java fejlesztési lehetőséget; A Sun korábban is támogatta a Java-t az iOS rendszeren, miközben az Apple nem kedveli. A Java az elsődleges fejlesztési nyelv az Android és a Blackberry telefonokban. ' nem mondhatom el ugyanezt a C # -val, AFAICT azt ' csak hivatalosan a WinMo támogatja.

    Válasz

    Ha keresést végez, akkor valószínűleg megbotlik a legnépszerűbb programozási nyelveken folytatott vita során. Itt található az egyik keresési találat – http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html – a Java továbbra is a legnépszerűbb nyelv.

    A Java megpróbálta eltávolítani a C ++ néhány hiányosságát (és egyszerűbbé tette a programozók életét a nem valós idejű és nem kritikus alkalmazások esetében). Mivel C # későn érkezett a buliba, elkerülte a Java nyelv néhány hiányosságát. A C # sokat fejlődött (mivel a Microsoft sok ellenőrzést gyakorol felette), míg a Java fejlesztéseit jelentős időre blokkolták az érintettek közötti konfliktusok miatt.

    Válasz

    Néhány dolog, amit még nem említettünk:

    A C # jobb, mint a C ++, mert:

    Megszünteti fejlécfájlokkal, ami nagyon egyszerű.

    A C # jobb, mint a Java, mert:

    Mind a referencia-típust (osztály), mind az érték-típust (struktúra) támogatja a felhasználó típusok, amelyek, ha tudják, mit csinálnak, jelentős teljesítményelőnyökkel járhatnak.

    Támogatja a delegáltakat, amelyek olyanok, mint az egymódos interfészek, így jelentősen leegyszerűsíti a gyakran előforduló, egy módszeres objektumokat magában foglaló konstrukciók kódolását.

    Megjegyzések

    • Meg tudná magyarázni, hogy mind a referencia, mind az érték típusú típusok hogyan hozhatnak teljesítményelőnyöket a C # -ban?
    • Például, ha egy sor rekordot szeretne , a Java-ban nincs más lehetősége, mint leírni a rekordot egy osztály használatával, így a tömb referenciák tömbje lesz külön elosztott objektumok sokaságára. A C # -ben leírhatja a rekordot egy struktúra segítségével, így a tömbje csak egy folyamatos memóriaterület lesz, amelyek egymás után tartalmazzák a struktúráit, ugyanúgy, mint a C-ben.
    • Másik példaként, ha szeretné egy kis új típus definiálásához (egy típus, amely egy gépi szóba belefér), nem kell új osztályt definiálnia; egyszerűen struktúrává teheti, így engedelmeskedik az érték szemantikának. Az ilyen struktúrák átengedése nem lesz drágább, mint az objektumokra való hivatkozások áthelyezése, de annak az előnye lesz, hogy semmilyen tárgyat nem oszt ki, állít össze és nem gyűjt szemetet.
    • Értem. Tehát az osztályokat példányosítják a kupacon, és referenciákon keresztül érik el, míg a struktúrákat a veremben (?)
    • Szinte helyes. Az egyetlen pontatlanság ebben az állításban az, hogy egy struktúra megtalálható a kupacon, ha be van ágyazva egy másik objektumba, vagy ha egy sor tömbben van. És a kupacon is megtalálható, ha valaha dobozos lesz, pontosan ugyanúgy, mint az értéktípusok a Java-ban.

    Válasz

    Az elvárt környezetnek és szakértelemnek leginkább megfelelő nyelvet kell választania.

    Válassza a C # lehetőséget, ha csak Microsoft környezetben dolgozik. Míg a C # szabvány az ISO / IEC 23270: 2003 szabvány szerint van szabványosítva, a Microsoft változata marad az egyetlen teljes megvalósítás. A nyelv számos kulcsfontosságú részére nem vonatkozik a szabvány, és ezért a Microsoft szabadalmainak alá tartoznak. Senki más nem fogja megvalósítani a nyelv teljesen kompatibilis változatát más rendszerekhez, így tulajdonképpen Ön a gyártótól zárolt a Microsoft Windows és a .Net szolgáltatásig, amíg a nyelvet használja. Ha a mobil piacon használható készségeket keres, akkor a legjobb, ha egy másik nyelvet keres.

    A Java működik, de jó néhány általános költséggel rendelkezik, részben olyan funkciók miatt, mint a szemétgyűjtés. A Java-t az ISO / IEC sem szabványosítja, így Önnek nincs garanciája, ha a Java platformját és verzióit váltja, csak a Sun / Oracle legjobb szándéka. Ha végül együttműködni tervez az Androiddal, akkor mindenképpen ez a helyes út. . Az Android programozása alapvetően Java, néhány változtatással.

    A C ++ szabványosított, és szinte az összes fordító a nemzetközi szabványt követi, tehát garantált a viselkedése, DE a nyelv nem véd meg magától. Önnek egyedül kell elvégeznie a tisztítást és a túlcsordulást. Ez nem nehéz. A C / C ++ programozók már évek óta csinálják ezeket. Az Apple mindenre használja a C célkitűzést, ezért ha az Apple-t szeretné megcélozni, akkor azt javaslom, hogy inkább ezt próbálja ki.

    Ha úgy látja, hogy valamikor maga mögött hagyja a Windows rendszert, azt javaslom, hogy tanulja meg a C / C ++ és a Java programokat is – mindkettő jelenleg piacképes.

    Válasz

    A C ++ és a C # vonatkozásában (mivel nem vagyok elég jártas a Java-ban), itt hiányzik az a képesség, hogy hozzáférjen az alacsony szintű dolgokhoz a Windows rendszeren. Például nem lehet natív megjelenítő illesztőprogramot fejleszteni a C # nyelven (még), de a C ++ billentyűkombinációval. Ez nem javítja a C ++ értéket. Úgy látom, hogy a C ++ és a C # összeszerelés az Assembly és a C szemben.

    A C # az én sokkal hatékonyabban tekintheti meg, ha megnézi, mennyi időbe telik egy szolgáltatás tényleges megvalósítása. A .Net futásidejének teljesítménybüntetése elhanyagolható a kifejlesztett alkalmazások 99% -ánál. Jelentős lehet, ha szűk kört futtat, igen mindenképpen, de a legtöbbször egy alkalmazás tétlen, és bármilyen bemenetre, jelre vagy megszakításra vár (lemez IO, gombra kattintás, hálózat, animáció befejezése).

    A CLR könyvtár az összes funkciók anothe r nagy haszon. Amikor C # -et oktattam junior fejlesztőknek, a legtöbben azt mondták, hogy tetszik nekik az osztályok, tagok és névterek logikus elnevezési szokása. A módszer jellemzőinek megtalálása logikus volt az SDK-ban, amiben a Visual Basic 5 komoly hibát okozott. Ez óriási segítséget nyújtott számukra a könyvtár elfogadásában. A nyelv szintaxisának elsajátítása után az új könyvtár megtanulása jelentős szerepet játszik abban, hogy jól megismerje bármely SDK-t. Megtakarít a kerék újrafeltalálásától.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

    Deep Theme Powered by WordPress