Autor Wątek: C++ i kod natywny kontra C# i kod managed  (Przeczytany 43919 razy)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Luty 07, 2006, 13:45:41
Rozpoczynam dyskusję nad wyższością C++ nad C# albo odwrotnie, kodu natywnego nad zarządzanym i odwrotnie, technologii .NET nad innymi bibliotekami i odwrotnie. Zgodnie z regulaminem forum taki temat powinien istnieć i tylko tutaj można dyskutować na ten kontrowersyjny temat. Żadnych ataków personalnych, żadnych nerwów i bluzgów, same rzeczowe argumenty, które czytającym dostarczą wiedzy i pomogą wyrobić sobie własną opinię.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline IronFlower

  • Użytkownik

# Luty 08, 2006, 16:23:46
Ciężko odpowiedzieć na takie pytania... prawda jest jedna, skoro Microsoft stworzył C# to zrobi wszystko aby zaczęto go używać (nie patrząc na to czy jest dobry czy nie). Z tego co mi wiadomo natywnym językiem dla przyszłych "okien" ma być właśnie C#. Warto więc znać tę technologię nie zapominając o tych starszych mimo wszystko przydatnych. językach czyli C, C++...

Co do nauki tych języków, i który lepiej zacząć się uczyć, to wydaje mi się, że dobrym rozwiązaniem jest rozpoczącie od C++. Może wynika to z drogi jaką sam przeszedłem, ale widzę, że łatwiej (niewyobrażalnie) przejść z C++ na C# niż na odwrót. Choć jak wiadomo w programowaniu liczą się pomysły a nie język :) i tak jak w mowie ludzkiej 2 + 2 ma taki sam sens w każdym języku :) inne są tylko słowa kluczowe ;)

Pozdrawiam

Offline counterClockWise

  • Użytkownik

# Luty 10, 2006, 17:11:39
Ja nie potrafiłbym się zmusić już, żeby pisać coś w C++.

Plusy:
-------
C# jest językiem, w ktorym pisze się naprawde szybko, na dużą skalę można zaoszczędzić nawet kilka dni pisania.
Na pewno jest mniej błędogenny - np. wyższe rygory sprawdzania poprawności składni (vide if(x=1)),
wyeliminowanie błędogennego polimorfizmu, wyeliminowanie strasznie błędogennych wskaźników,
zrezygnowanie z headerów, banalne użycie tablic wielowymiarówych, serializacji klas  itd
+ Garbage Collector, który jest naprawde dobry.

Jest nowocześniejszy i bardziej przyjazny - logiczne asemblies, wszystko jest obiektem - można walnać sobie kropkę i patrzeć czego możemy użyć.

Poza tym programy napisane w C# i .NET zwykle zajmują mniej pamięci na dysku.

Minusy
--------
Managed code jest wolniejszy (to jest główny minus), jednak zazwyczaj nie jest to wyraźnie zauważalne. Przy odpowiedniej technice pisania efektywność jest zbliżona (optymalne rozwiażania, zwalnianie reczne zasobów).

Jeżeli chodzi o C# i .NET (nie sam C#) - niestety łatwo jest podejrzeć czymś kod (trzeba używać zaciemniaczy).

Klient musi mieć zainstalowany .NET Framework :)
« Ostatnia zmiana: Luty 10, 2006, 17:14:32 wysłana przez counterClockWise »

Offline KriS

  • Użytkownik
    • KriS

# Luty 10, 2006, 17:53:31
Plusy:
-------
C# jest językiem, w ktorym pisze się naprawde szybko, na dużą skalę można zaoszczędzić nawet kilka dni pisania.

Hmm? IMHO szybciej, wygodniej i bezpieczniej sie pisze w c++ (szablony, odpowiednie biblioteki itd). Nie wiem w jaki sposob kolejny jezyk MOP (money oriented programming), bedacy kolejnym wykastrowanym c++ moze byc wygodniejszy.

Na pewno jest mniej błędogenny - np. wyższe rygory sprawdzania poprawności składni (vide if(x=1)),

Visual C++ wywali odpowiedniego warninga.

wyeliminowanie błędogennego polimorfizmu, wyeliminowanie strasznie błędogennych wskaźników,

Bledogenne to jest wszystko, jezeli sie nie umie tego uzywac :).

zrezygnowanie z headerów,

Czyli np zrezygnowania z mozliwosci szybkiego zapoznania sie z interfejsem klasy.

banalne użycie tablic wielowymiarówych, serializacji klas  itd
+ Garbage Collector, który jest naprawde dobry.

Odpowiednie biblioteki / odpowiedni kod tez to potrafia.

Jest nowocześniejszy i bardziej przyjazny - logiczne asemblies, wszystko jest obiektem - można walnać sobie kropkę i patrzeć czego możemy użyć.

Hmm, ktore to sa zalety? Nowoczesnoc? Tylko OOP?
« Ostatnia zmiana: Luty 10, 2006, 17:58:14 wysłana przez KriS »

Offline counterClockWise

  • Użytkownik

# Luty 10, 2006, 18:43:50
Hmm? IMHO szybciej, wygodniej i bezpieczniej sie pisze w c++ (szablony, odpowiednie biblioteki itd). Nie wiem w jaki sposob kolejny jezyk MOP (money oriented programming), bedacy kolejnym wykastrowanym c++ moze byc wygodniejszy.

A mnie i większości osób u mnie na roku szybciej się pisze w C#.
O jakie biblioteki Ci chodzi? Mam nadzieje, że o te które są w standardzie języka. Bo każdy może zgromadzić sobie rzeszę bibliotek napisanych w życiu i w niczym nowym nie będzie pisał szybciej, skoro poświęcił się jednej technologii.

Visual C++ wywali odpowiedniego warninga.

Zgadza sie. Jednak niektórych powiedzmy nie stać na Visuala. Albo kodują pod linuxem i używają tylko open-sourcowego oprogramowania.
Visual jest dosyć drogi. Ja mam tylko licencję niekomercyjną.

Bledogenne to jest wszystko, jezeli sie nie umie tego uzywac :).

Ja nie miałem nigdy z tym problemów, ale patrząc nie tylko na własny nos, lecz bardziej globalnie to jest jednak zaleta dla wielu osób.

Uważasz, że C# jest bez sensu?
Że nie był wprowadzony bez potrzeby?
Jest ponad 20 lat młodszy od wysłużonego C++.
Pytam otwarcie, nie mam zamiaru bronić jakiegoś zdania, pytam poznawczo  :)
« Ostatnia zmiana: Luty 10, 2006, 18:45:51 wysłana przez counterClockWise »

bies

  • Gość
# Luty 10, 2006, 19:11:20
Hmm? IMHO szybciej, wygodniej i bezpieczniej sie pisze w c++ (szablony, odpowiednie biblioteki itd). Nie wiem w jaki sposob kolejny jezyk MOP (money oriented programming), bedacy kolejnym wykastrowanym c++ moze byc wygodniejszy.

A mnie i większości osób u mnie na roku szybciej się pisze w C#.
O jakie biblioteki Ci chodzi? Mam nadzieje, że o te które są w standardzie języka. Bo każdy może zgromadzić sobie rzeszę bibliotek napisanych w życiu i w niczym nowym nie będzie pisał szybciej, skoro poświęcił się jednej technologii.

Na miejscu powiem że korzystam z C# i jest to język pod wieloma względami dobry... Ale, odkąd zacząłem poznawać
boost'a(http://www.boost.org/) to na nowo poznałem czar C++ i tera juz go na pewno nie opuszczę polecam wszystkim

pozdro
spax.

// edit (Spax i Ty Brutusie ...)
,,zaczołem'' => ,,zacząłem''
,,napewno'' => ,,na pewno''

« Ostatnia zmiana: Luty 10, 2006, 19:53:40 wysłana przez bies »

bies

  • Gość
# Luty 10, 2006, 19:51:28
Wygoda jest rzeczą subiektywną (np. dla mnie C++ jest wygodny a C# ograniczony), ale fakt faktem, Że kodu jak w [1] w C# (wersja 2, wersja 3 ma mieć lambdy) się nie napisze. A Boost jest de facto standardem, części nawet będą standardem de nomine. [2]

[1] http://miniurl.pl/6392
[2] http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2005/n1836.pdf

Offline zarius

  • Użytkownik

# Luty 11, 2006, 01:20:48
Dziwie sie w ogole ze taki temat powstal, wydawalo mi sie ze lepiej po prostu zabronic takiego czegos. To bedzie mniej wiecej cos takiego jak walka 3:1 (wiadomo ze wsrod programistow gier i tego typu wciaz C++ jest gora) Kodowalem w C# zaledwie 1,5 miesiaca ale juz moge stwierdzic ze jest to cos pozytywnego, jakis ruch w dobra strone i mozecie psioczyc ze to nie wydajne albo ze ograniczone (ekhm, ograniczony to moze byc tylko czlowiek i jego wyobraznia, wszystko mozna osiagnac roznymi srodkami - to jest wlasnie programowanie :P) ale prawda jest taka ze jezyk ten jest jeszcze swiezy a w tak krotkim czasie zdobyc takie poparcie to nie lada wyczyn.

C# bedzie mial zapewne jeszcze nie jedna generacje jesli rozwija sie w takim tempie, co do wygody nie zgodze sie ze C++ jest w uzyciu wygodniejszy od C#. Brak headerow to jest tylko i wylacznie wielki + a argument ze nie mozna look'nac do klasy jest troche nie tak - kazda dobrze napisana klasa, assemblie's czy jak to sie dokladnie pisze, jest sam w sobie dokumentacja i wystarczajacym zrodlem. Nie trzeba nawet odpalac helpa. Ci ktorzy kodowali w C# wiedza mniej wiecej o co chodzi. ///<summary></summary> i inne bloki ktore wlaczaja namiastke dokumentacji w sama klase sprawia, ze uzywanie C# staje sie tylko i wylacznie przyjemne. Co do kropki to jest szatanskie rozwiazanie  ;D no i ten nigdy nie zawodzacy inteliSense dla C# to cos pieknego.

No i po co mam szukac dodatkowych bilibotek jesli .NET FrameWork ma wlasciwie wszystko co jest potrzebne do podstawowej pracy! (jesli chodzi o progrmaowanie okienkowe)

No i tutaj chcialbym zaznaczyc ze wszyscy ciagle patrza na C# jako potencjalne narzedzie do tworzenia silnikow, gier i w wiekszosci wypadkow reakcja to "bleee", a tak nie jest. To co ja zrobilem przez te 1,5 miesiaca w C# nie byl bym w stanie zrobic za pomoca WinAPI i C++ przez chyba pol roku nauki i ciaglego kodowania w WinAPI. Dzieki C# wkoncu moja nauka programowania przyniosla jakies juz cos robiace tools'y ktore wykorzystywalem chociazby w zabawie poznawania protokolu pewnej gierki online.

Co do gier, ja koncentruje sie na C++ i DirectX, IMHO to OpenGL staje sie takim malym monopolisto na rynku gier, coraz wiecej kreci sie w okol OGL a ze nie znosze konsoli i nie lubie takich nawrotow dziwnych to obstaje przy produkcie M$. Na razie nie przechodze na C# bo nie widze potrzeby, ale nie ukrywam, ze jesli wszystko bedzie szlo takim tempem jak teraz to przejscie bedzie nie uniknione  ;)

Jeszcze jedno zdanie co do tego ostatnio jakze popularnego sformulowania, ze M$ stworzyl cos i na sile to pcha do przodu. Prawda jest taka, ze C# dostal co prawda kopa na rozped od MS ale teraz C# sam smialo jedzie do przodu a wsparcie od microsoftu i duze zainteresowanie to tylko + dla tego jezyka.

pozdrawiam

(o C++ malo pisalem bo chyba wiadomo jak z tym jezykiem jest, ja bym je traktowal (oba) jako swietnie narzedzia do odpowiednich celow) Oba sie swietnie spisuja, a ograniczenia to dopiero beda jak Lepper przejmie wladze ^^

Offline DarkJarek

  • Użytkownik
    • DarkJarek HomePage

# Luty 11, 2006, 09:29:16
C# jest bardzo fajnym wynalazkiem, podstawową jego zaletą jest szybkość i wygoda pisania. Muszę przyznać, że mi bardzo fajnie się w nim pisze. Ale z drugiej strony brakuje mi kilku rzeczy z c++. Jak narazie jestem skierowany bardziej w stronę c++ i niezamieżam go opuścić. Ale to nie znaczy że w C# niebęde pisał, wręcz przeciwnie. Dla przykładu kodziłem dość niedawno edytor plansz na irrlichcie w C# i bardzo szybko i przyjemnie mi to szło (nie biorąc pod uwagę, że irrlicht jest jeszcze niedopracowny pod .Net'a).

Offline mvirtus

  • Użytkownik

# Luty 13, 2006, 22:36:22
Apropos wydajności:
http://www.shudo.net/jit/perf/
Porównanie C#, Java i C.

Offline Vic

  • Użytkownik

# Luty 14, 2006, 00:14:04

Visual C++ wywali odpowiedniego warninga.

Zgadza sie. Jednak niektórych powiedzmy nie stać na Visuala. Albo kodują pod linuxem i używają tylko open-sourcowego oprogramowania.
Widzisz jakieś przeszkody w wyświetlaniu stosownych warningów na Linuksie? :)

bies

  • Gość
# Luty 14, 2006, 00:27:22
Jeśli dobrze pamiętam to całkiem dobra wersja VC++ jest za darmo do wykorzystania komercyjnego, GCC wypisuje odpowiednie ostrzeżenie (nawet, o dziwo, pod Linuksem ;D) a o nagłówkach warto poczytać w [1].

[1] http://miniurl.pl/6532

Offline counterClockWise

  • Użytkownik

# Luty 15, 2006, 23:19:59
Nie widzę przeszkód wyświetlania warningów pod Linuxem :) Odniosłem się tylko do tego konkretnego Visuala, którego pod Linuxem nie uświadczymy.

Z tego co pamiętam, pisząc definicje metod klasy zadeklarowanej w komplementarnym headerze Visual nie podpowiadał mi po nacisnieciu jednej literki nazw pól klasy. Pisanie w C# często sprowadza się do naciśnięcia jednego-dwóch klawiszy i enter, kropka, strzałka enter, znów jeden klawisz i pare enterów, pare kliknięć :P

A żeby w ogóle zobaczyć pola klasy to trzeba odnaleźć plik .h albo żmudnie napisać calą nazwę klasy z operatorem :: i zobaczyć co tam mamy.
Dla mnie osobiście wygodniej jest przewinąć się rolką myszki w górę klasy i podejrzeć co ona ma.

A szybki pogląd na klasę może dać nam informacja z metadanych.

Przyznam szczerze, że ostatnio przepisywałem jeden z moich projektów z Managed DirectX w c# to Natywnego C++ i DirectX.
Troche męczące to jest, że trzeba pamiętać wszystkie nazwy flag, funkcji itd, albo jak się nie pamięta non-stop mieć pod ręką dokumentacje - zamiast przekazać po prostu " XXFlags.JakasFlaga". Sięganie do dokumentacji jest ograniczone do minimum.


Efekt wydajnościowy:

W Managed DirectX i C# - 62 fps
(+dosłownie 8 linijek unsafe code bo potrzebowałem pointera w jednym miejscu)

W Native C++  - 65fps

Poza tym projekt zarządzany potrzebował mniej pamięci, tylko czasem można "poczuć" odpalenie Garbage Collectora :)
Można jednak pisać tak, żeby Garbage Collector nigdy nie interweniował sam.
No i bądź co bądz. C# czy VB .NET  jest świetny do pisania GUI czy jakiś aplikacji biurowych.
I VB .NET pierwszy wprowadził fantastyczną estetykę kodu i szybkość pisania, bo już w VS 2003.
C# ma te wszystkie bajery ułatwiające łatwość pisania dopiero od Visual Studio 2005, wcześniej miał ich dużo mniej.




Offline Real_Noname

  • Użytkownik

# Marzec 02, 2006, 15:49:14
Z tego co pamiętam, pisząc definicje metod klasy zadeklarowanej w komplementarnym headerze Visual nie podpowiadał mi po nacisnieciu jednej literki nazw pól klasy. Pisanie w C# często sprowadza się do naciśnięcia jednego-dwóch klawiszy i enter, kropka, strzałka enter, znów jeden klawisz i pare enterów, pare kliknięć :P

A żeby w ogóle zobaczyć pola klasy to trzeba odnaleźć plik .h albo żmudnie napisać calą nazwę klasy z operatorem :: i zobaczyć co tam mamy.
Dla mnie osobiście wygodniej jest przewinąć się rolką myszki w górę klasy i podejrzeć co ona ma.

A szybki pogląd na klasę może dać nam informacja z metadanych.

Przyznam szczerze, że ostatnio przepisywałem jeden z moich projektów z Managed DirectX w c# to Natywnego C++ i DirectX.
Troche męczące to jest, że trzeba pamiętać wszystkie nazwy flag, funkcji itd, albo jak się nie pamięta non-stop mieć pod ręką dokumentacje - zamiast przekazać po prostu " XXFlags.JakasFlaga". Sięganie do dokumentacji jest ograniczone do minimum.
Kurde, albo ja mam inną wersje VS (a mam 2k5 B2 - nie chce mi się robić reinstall do EE :/), albo ja czegoś nie rozumiem. Może nie jestem ekspertem od języków, czy IDE, a w C# pisałem chyba 2 razy w życiu, ale z twojego opisu wynika, że ja pisze identycznie w C++.

Puste pole -> Ctrl+Spacja -> 3 litery i bach -> wpisuje :: -> 3 litery i bach -> nawias {} -> Ctr + Spacja -> 2 litery i bach -> strzałka -> 4 litery i bach -> Ctr+Spacja -> 3 litery nazwy flagi i bach -> i na końcu ;

Czy w VS dla C# jest dorobiony jakiś mega system, że wpisuje się jedną litere i robi za nas wszystko? Jak dotąd jedyną rzeczą co InteliSense nie robi w C++ a robi w C# jest wstawianie ciała do pętli for.

Może mi to ktoś wytłumaczyć?

Offline Tewux

  • Użytkownik

# Kwiecień 14, 2006, 14:29:09
Wielu ludzi nie podoba się C#, uważają go za kolejny wymysł MS, jak Visual Basic.
Mówią, że wolą pisać w czystym C lub C++.
Dla mnie to jest dziwne. Spójrzmy na to z innej strony.

Pierwsze komputery nie miały kompilatorów, czy innych udogodnień, pisało się w kodzie binarnym.
Jednak jak koputery się rozwinęły, wymyślono Asma, zeby uprościć pracę programistą, zmniejszyć ilość błędów, zwiększyć przejrzystość programu.
Później to oczywiście też było za mało, wymyślono kolejne języki programowania: BCPL, C, C++,
które ułatwiały prace nad większymi projektami.
C# jest po prostu kolejnym etapem rozwoju technik programowania.

Więc jak ci krytycy, co głoszą ascetyczny sposób programowania, niech napiszą większy projekt w Asmie albo w kodzie binarnym :P
---

Jeśli chodzi o DirectX.NET, podobno jest kilka procent mniej wydajny od natywnego DirectX.
Ale tu rodzi się pytanie, czy w natywnych DX będziemy potrafili napisać na tyle wydajną aplikację, aby mieć te kilka marnych procent przewagi nad DX.NET?

---
Podsumowując, jestem oczywiscie na TAK, jesli chodzi o C# i MDX.
Mimo to nie znaczy, że nie powinno się znać C/C++.
Czym więcej umiemy, tym lepiej.

---
A tak w ogóle, witam wszystich, jestem nowy w warsztacie. :)
W C# bawie się od pół roku (wcześniej było kilka lat z Delphi), poznaje również C.
Z MDX dopiero zaczynam zabawe, wczesniej trochę grzebałem w OGL.