C++11 - przedłużanie agonii czy zbawienie dla C++?

9

Wstęp:
Jak w temacie - co myślicie o nowym standardzie C++ (nie widziałem tu takiego tematu, oraz wyszukiwarka nie znalazła)?
Wiem, to dział C++ więc sporo osób czytających to to albo fanboye C++ (dla nich C++ był, jest i będzie doskonały), oraz osoby nie znające żadnych innych języków (nie mające porównania z innymi językami... Aczkolwiek to nie oznacza że nie mogą sie tu wypowiedzieć :>).
Trochę już czasu minęło od jego powstania, więc jakieś opinie można powoli formować. Wiem że 'standard' sam w sobie nic nie zmienia, ktoś go musi jeszcze zaimplementować. Ale...

Tak w podsumowaniu - nowy standard koncentruje się na:

I. łataniu dziwnostek (czyli c++ wychodzi do ludzi):

  • pozwolenie na tworzenie unii z obiektami zawierającymi własny konstruktor
  • aliasy dla częściowo specjalizowanych szablonów (nieraz mi tego brakowało...)
  • extern templates
  • modyfikacja definicji POD-ów (teraz więcej klas może się tak nazywać).
  • zmiana WTF-owego znaczenia >> przy szablonach
  • sizeof na polach w klasie

II. kopiowaniu sprawdzonych rozwiązań z innych języków (ale to w końcu nic złego):

  • silnie typowane enumy
  • override i final (tutaj trochę nie wyszło, bo ktoś najwyraźniej nie zrozumiał do końca idei jaka przyświecała słówku override np. w C#, ale zawsze coś)
  • odwoływanie się do innych konstruktorów tej samej klasy. (dało się? dało się.)
  • range-based for (for (int &x : my_array)) (takie foreach na sterydach)
  • long long int (jeśli to można nazwać kopiowaniem z innego języka)
  • lambdy!! Jak dla mnie - chyba najważniejsza zmiana. Lubię programowanie funkcyjne i C++ mi to właśnie umożliwił. Spory +. (ciekawe co się stanie jeśli napiszę kod funkcyjny w C++ i go komuś pokażę...)

III. dodawaniu nowych ficzerów (miłe):

  • referencje do r-wartości (więcej radości dla początkujących)
  • nowa składnia służąca do inicjalizacji obiektu (ciekawe ile WTF-ów wywoła, bo podejrzewam że kilka co najmniej...)
  • constexpr jako wyrażenie znane podczas kompilacji (i teraz nie wiem kiedy używać const a kiedy constexpr)
  • type interference (słówko kluczowe auto) i decltype (oraz ofc nowa składnia dla deklarowania funkcji).

IV. Rozszerzanie biblioteki standardowej

  • obsługa wielowątkowości (czyli C++ wychodzi z prehistorii... jeszcze tylko obsługa sieci i jesteśmy w domu)
  • yay, mamy 4 rodzaje smart pointerów! (z czego jeden przestarzały)
  • 4 różne hashtable
  • regexy w standardzie
  • 200 klas do losowania liczb (nie no, podobają mi się, ale nie mam pojęcia czym różni się gamma_distribution od extreme_value_distribution oraz lognormal_distribution od chi_squared_distribution)
  • wsparcie dla metaprogramowania

V. Dodawaniu nowych WTF-ów (Bjarne nie byłby sobą):

  • literały tworzone przez użytkownika:
string operator "" _alamakota(const char *literal_string);
 // (...)
string some_variable = 1234_alamakota;

VI. Dla tych których z nami nie ma: (a szkoda...)

  • nie ma z nami konceptów (które od początku były ogłaszane jako gwóźdź programu, a na końcu je wycofali...)
  • nie ma z nami modułów (a szkoda, ale co tam...)

Podsumowanie:
Uff, trochę pisania (+ szukania najciekawszych dodatków) to zajęło. No więc tak, to ja podsumowałem co dostajemy. Moim zdaniem - spory krok w przód jeśli chodzi o możliwość w tym pisania kodu ogólnego przeznaczenia. A Wy co uważacie o nowych możliwościach?

0

Co to jest koncept?

0

Pięknie to wszystko ująłeś, ale wydaje mi się, że Ty jesteś za tym wszystkim zmianom.
W każdym razie ja jestem. Jak wiadomo ludzie wolą ewolucję a nie rewolucję. Lepiej mieć dużo narzędzi i z nich nie korzystać niż żeby jakiegoś brakowało ;-)

Uważam, że stworzenie nowych literałów w ten sposób to jest najlepsza opcja rozszerzenia w C++ to co w Javie i C# nazywa się toString, a jest możliwość przeładowania tego dla różnych obiektów.
Dajmy na to:

string operator "" _toString( int count );
int operator "" _toInt( string stream );
string str = 1234_toString;
int nCount = "1234"_toInt;

Przykład prawdę mówiąc jak u Ciebie, ale to jest to, co trzeba było radzić sobie za pomocą stringstreama, teraz mamy nad tym znacznie wygodniejszą kontrolę ;]

0

Przede wszystkim sufiksy działają w połączeniu z constexpr, dzięki czemu możliwe jest np. liczenie hashy, czy szyfrowanie na etapie kompilacji, o ile tylko programista poradzi sobie z odpowiednią implementacją algorytmów.

1

Wyczuwam fanbojizm języka D :P Czy oprócz D powstały jakieś inne języki do tworzenia np systemów czasu rzeczywistego, z całkowicie ręcznym zarządzaniem zasobów? Jest wielce prawdopodobne, że względna popularność C++ wobec ogółu języków mocno spadnie, natomiast czy zostanie wyparty? Na razie nie widzę żeby jakiś zawodnik sukcesywnie odbierał rynek C++ w zastosowaniach takich jak wcześniej napisałem.

1
Wibowit napisał(a):

Na razie nie widzę żeby jakiś zawodnik sukcesywnie odbierał rynek C++ w zastosowaniach takich jak wcześniej napisałem.

Czego oczekujesz po zabawce (chociaż bardzo fajnej zabawce), za którą stoi tylko jedna mała firma? Nadal język podlega ciągłym zmianom, nadal nie ma stabilnych implementacji niezależnych itd. Korzystanie z mało znanego języka o kiepskim supporcie to naprawdę nie jest najlepszy wybór przy programowaniu systemowym.

3

W firmie w której pracuję, nikt nigdy nie słyszał o żadnym tam C++ 11. Jak w Visualu 2010 nie ma tego to i tak nie istnieje, a jakby nawet było to by nikt się tym nie zainteresował co to jest bo i tak pisze się w C#. Zresztą, najlepszy masshter (ten co md5 odkodowywwał w .net) i wyrocznia kierownictwa nie wie nawet że ten "dotnetowy C++" to c++/cli i kiedyś ze mną się kłócił że exek wygenerowany w tym C++ jest ZAWSZE dokładnie taki sam jak ten napisany w C# (w sensie ten sam co do bajta).

Próby tłumaczenia że gdy połączymy kod zarządzany z niezarządzanym, co można zrobić w C++/CLI to wyjdzie nam z tego całkiem inny twór spełzły na niczym bo człowiek nie wie co to kod zarządzany albo nie zarządzany, zostałem zakrzyczany i dałem sobie spokój z tematem. Zresztą on nie wie nawet co to C++/CLI (tzn, nie wie że to tak się nazywa), pisze sobie radośnie w C# i jest wychwalany jaki to masshter z niego i dostaje pensję 2x większą niż ja. Pokazuje to dobitnie, na ile C++ jest dziś popularny, wykorzystywany i potrzebny jeśli chodzi o mainstream czyli tworzenie aplikacji biznesowych.

Wracając do tematu: nikt nigdy nie będzie już używał C++ do pisania aplikacji biznesowych w firmach, nawet jeśli to będzie i c++ 15 albo 20. Bo i po co ktoś miałby to robić, skoro w C# albo javie pisze się wszystko łatwiej, szybciej a framework (czy też "biblioteka standardowa", narzędzia i klasy dostępne domyślnie) jest tak rozbudowany jak w C++ nigdy to miejsca mieć nie będzie. Co z tego, że wprowadzają nowe "ficzery", skoro nigdy nie będzie to tak elastyczne, łatwe w użyciu jak jest w C#, czy javie. Jest masa rzeczy obecnych w tych 2 językach, których nigdy się nie da wprowadzić w C++ w ten sposób, żeby działały tak samo dobrze jak np w C#, z powodu chociażby takiego że za C# stoi cały .net framework (o javie się nie wypowiadam bo nie znam ale zapewne wygląda to podobnie).

C++ pozostanie zapewne póki co do specjalistycznych zastosowań, gier i oprogramowania naprawdę profesjonalnego - czyli czegoś rzędu Phothoshop, Corel Draw czy Auto CAD. Natomiast każda jedna średniej wielkości firma tworząca oprogramowanie na zamówienie i tak będzie używać C# bo trzeba naklepać coś szybko, sprawnie i ładnie ma się świecić - wtedy klient zadowolony. Na C++ miejsca tu nie ma. Jedyny argument jaki by tu był za C++ to prawdopodobnie wydajność, a na to nikt nie zwraca dziś żadnej uwagi - klientowi zawsze można powiedzieć że to musi tak wolno działać - klient kupi lepszy sprzęt i będzie działać szybko, a świeci się ładnie i robi to co ma robić.
Dodatkowo, coraz więcej aplikacji powstaje jako webowe - C#, java się do tego nadają, C++ nie.

1

W firmie w której pracuję, nikt nigdy nie słyszał o żadnym tam C++ 11. Jak w Visualu 2010 nie ma tego to i tak nie istnieje, a jakby nawet było to by nikt się tym nie zainteresował co to jest bo i tak pisze się w C#. Zresztą, najlepszy masshter (ten co md5 odkodowywwał w .net) i wyrocznia kierownictwa nie wie nawet że ten "dotnetowy C++" to c++/cli i kiedyś ze mną się kłócił że exek wygenerowany w tym C++ jest ZAWSZE dokładnie taki sam jak ten napisany w C# (w sensie ten sam co do bajta).

Współczuję, ale nie łudźmy się, sporo pracujących programistów to klepacze którym nie zależy na uczeniu się nowych rzeczy dopóki im za to nie płacą.

Wracając do tematu: nikt nigdy nie będzie już używał C++ do pisania aplikacji biznesowych w firmach, nawet jeśli to będzie i c++ 15 albo 20. Bo i po co ktoś miałby to robić, skoro w C# albo javie pisze się wszystko łatwiej, szybciej a framework (czy też "biblioteka standardowa", narzędzia i klasy dostępne domyślnie) jest tak rozbudowany jak w C++ nigdy to miejsca mieć nie będzie. Co z tego, że wprowadzają nowe "ficzery", skoro nigdy nie będzie to tak elastyczne, łatwe w użyciu jak jest w C#, czy javie. Jest masa rzeczy obecnych w tych 2 językach, których nigdy się nie da wprowadzić w C++ w ten sposób, żeby działały tak samo dobrze jak np w C#, z powodu chociażby takiego że za C# stoi cały .net framework (o javie się nie wypowiadam bo nie znam ale zapewne wygląda to podobnie).

C++ pozostanie zapewne póki co do specjalistycznych zastosowań, gier i oprogramowania naprawdę profesjonalnego - czyli czegoś rzędu Phothoshop, Corel Draw czy Auto CAD. Natomiast każda jedna średniej wielkości firma tworząca oprogramowanie na zamówienie i tak będzie używać C# bo trzeba naklepać coś szybko, sprawnie i ładnie ma się świecić - wtedy klient zadowolony. Na C++ miejsca tu nie ma. Jedyny argument jaki by tu był za C++ to prawdopodobnie wydajność, a na to nikt nie zwraca dziś żadnej uwagi - klientowi zawsze można powiedzieć że to musi tak wolno działać - klient kupi lepszy sprzęt i będzie działać szybko, a świeci się ładnie i robi to co ma robić.

Cóż tego się boję (z drugiej strony, w sumie moim głównym językiem jest C#, więc to nie mój problem). W sumie z tą wydajnością też bym nie przesadzał, w 75% da się w pythonie napisać szybszy kod niż normalnie pisany kod w C++. Hint - GPU computing. Moc procesora jest mała w porównaniu z GPU. I dodatkowo szybkość procesorów zwiększa się dużo, dużo wolniej niż szybkość GPU... Tak więc, najczęściej wystarczy najwolniejsze miejsce programu (zakładając że się da i że korzystanie z karty graficznej jest dozwolone - przetwarzanie obrazu na przykład to idealny materiał na zrównoleglenie) przepisać na superszybkie GPU i nie trzeba pisać w C++... Mało obecnie popularna technika, ale IMO ma przed sobą przyszłość.

I jeszcze jeden problem C++ - nie wiem czemu, ale jakoś mało popularne są frameworki służące do tworzenia całych aplikacji (nie chodzi o biblioteki do konkretnych zastosowań) - w C#/Java to codzienność, w C++ jakoś nieczęsto widziane.

1

I jeszcze jeden problem C++ - nie wiem czemu, ale jakoś mało popularne są frameworki służące do tworzenia całych aplikacji (nie chodzi o biblioteki do konkretnych zastosowań)

Mówisz o qt, wxwidgets itd? To proste, nie są popularne dlatego, że ta luka jest całkowicie wypełniona przez C# i .NET oraz javę. Qt albo wxwidgets, czy inne frameworki mogą być sobie bardzo dobre (i często są bardzo dobre), ale zadajmy sobie pytanie - w czym, szybciej zespołowo można napisać powiedzmy system do zarządzania magazynem obsługujący także wydruk faktur, skanowanie kodów z czytnika, komunikację przez webserwisy np. z Allegro - w Qt i c++ czy w w C#, gdzie firma dodatkowo ma licencję na biblioteki DevExpress albo Telerik? Oczywiście, C++ z jakimkolwiek frameworkiem od razu tu przegrywa z kretesem zarówno pod względem czasu napisania (a czas to pieniądz), jak i końcowego wyglądu przy minimalnym nakładzie pracy - popatrzmy chociażby co oferuje wpf w tej kwestii (style wyglądu), a jak są komercyjne kontrolki typu devexpress to jest jeszcze lepiej.

Tak więc, C++ pozostaje tam gdzie niewskazane jest użycie C# czy javy - a nie są to zastosowania gdzie pisze się całe aplikacje i gdzie takie frameworki są potrzebne. C++ w tych zastosowaniach skończył się na C++ Builderze 6 i MFC, a było to przed tym zanim C# stał sie popularny. Teraz realia się już zmieniły.

2

C++ nigdy nie był w agonii i agonii prędko nie zaliczy - to że rynek się zmienia i pieniądz determinuje wybór technologii nie oznacza to, że C++ zniknie z powierzchni ziemi. Z praktycznego punktu widzenia standard C++11 jest martwy ze względu na fakt, iż sam Microsoft daje jego wsparcie kosztem programowania na systemy typu Windows 7 (eliminując systemy Windows XP) co z punktu widzenia biznesowego jest samobójstwem, więc zamiast wielkiej rewolucji na razie jest wielki pasztet. Standard C++11 nie dostarczył narzędzi/bibliotek, które zrewolucjonizowałyby szybkość wytwarzania kodu biznesowego. Jedyne co w praktyce otrzymaliśmy to zlepek narzędzi mających praktyczne zastosowanie dla 'koneserów' języka C++. Ci z kolei nie mogą swobodnie pisać kodu np. pod takim Visual C++ zgodnie ze standardem C++11 ze względu na aspekty wcześniej wymienione więc... póki nie będzie profesjonalnego kompilatora wspierającego standard C++11 nie narzucającego większych ograniczeń na systemy operacyjne niż to co do tej pory obowiązywało to możemy zapomnieć o wszelkich dyskusjach związanych z nowym standardem (do niczego bowiem one nie prowadzą). Wiem, że istnieją kompilatory innych firm oraz kompilatory tworzone przez środowisko opensource, jednak środowisko biznesowe wymaga w większości wypadków stosowania narzędzi posiadających gwarancję jakości, a nie zgodność z najnowszymi standardami.

Reasumując: C++11 tak, ale za 3-5 lat, jednak za te ~5 lat może być już za późno na to aby jakakolwiek aplikacja desktopowa była tworzona właśnie w C++, a nie w takim C# czy też Javie.

0

@dejavu Wsparcie dla standardu C++11 jest na dzisiaj o wiele lepsze, niż w analogicznym okresie czasu przy wprowadzeniu C++98. Piszesz, że C++ przegrywa w pisaniu aplikacji biznesowych z C# i Javą. C++ przegrywa też z Ruby, PHP, Pythonem, Javą, C# w pisaniu stron internetowych, przegrywa z asemblerem i C w programowaniu mikrokontrolerów, przegrywa z Pythonem, Matlabem i Lispem w programowaniu sztucznej inteligencji, przegrywa z Javascriptem w programowaniu aplikacji webowych po stronie klienta oraz przegrywa z odkurzaczem w sprzątaniu pokoju. Swoją drogą używanie C++ do pisania aplikacji biznesowych (niewymagających obliczeniowo, 95%) świadczy o braku umiejętności wyboru odpowiedniego narzędzia.

0

@kopernik http://en.wikipedia.org/wiki/Microsoft_XNA#Partial_List_of_Games_that_use_XNA co myślice ? Gdzie można używać C++ ? Minecraft napisali w Java i odniósł sukces.

0

A pewnie i większość gier Indie na Xboxa jest pisana w XNA. Łatwiej niż w C++ a przy niezbyt rozbudowanej grafice nie widać spadków FPSów.

1

Z praktycznego punktu widzenia standard C++11 jest martwy ze względu na fakt, iż sam Microsoft daje jego wsparcie kosztem programowania na systemy typu Windows 7 (eliminując systemy Windows XP)

Visual 2010, który z C++11 już coś tam ma, pod XP chodzi, a w Visualu 2012 jednak będzie można pisać dla XP.

0
Azarien napisał(a):

Z praktycznego punktu widzenia standard C++11 jest martwy ze względu na fakt, iż sam Microsoft daje jego wsparcie kosztem programowania na systemy typu Windows 7 (eliminując systemy Windows XP)

Visual 2010, który z C++11 już coś tam ma, pod XP chodzi, a w Visualu 2012 jednak będzie można pisać dla XP.

VS 11 Beta juz calkiem niezle wspiera nowy standard. 2012 tak szybko nie wypuszcza skoro 11 nadal jest beta. Nie zmienia to faktu, ze i tak na razie osob wykorzystujacych "dodatki" nowego standardu chociaz w polowie jest malo, bo duza czesc z tego to dosyc zaawansowane rzeczy. Ja sam nie jestem az na takim etapie, zeby mi sie to zbytnio przydalo.

1

@KacperC, rzeczywiście, wszystkie wspomniane gry to tytuły światowej klasy ;] Minecraft odniósł sukces, gdyż ta gra nie wymaga optymalizacji kodu. Gra która posiada na każdy obiekt 12 trójkątów, nie jest w stanie zamulić. Gry typu Gothic, który jest już starą grą miał na jeden model człowieka 1500 trójkątów, a w wiedźminie postaci mają już na bank powyżej 2500. Uwierzcie mi, Java ze swoim garbage collectorem i innymi ułatwiającymi mechanizmami nie jest w stanie osiągnąć ekstra rezultatów w naprawdę dużych projektach. Podobnie jak C#.

Ułatwiając coś programistom, musimy odebrać coś sprzętowi. Niczego nie ma za darmo, kiedy wzrasta energia kinetyczna maleje potencjalna i tak jest wszędzie i ze wszystkim.

0
MJay napisał(a):

Minecraft odniósł sukces, gdyż ta gra nie wymaga optymalizacji kodu.

Oczywiście, że wymaga i to sporych. Skąd pomysł, że nie?

MJay napisał(a):

Gra która posiada na każdy obiekt 12 trójkątów, nie jest w stanie zamulić.

Gra, która posiada na każdy obiekt jeden pixel, jest w stanie zamulić.

0

Nie ma tam w Minecrafcie jakichś statystyk nt ilości wielokątów w scenie? Jeden klocek to może i 12 trójkątów, ale tych klocków za każdym razem renderowanych może być tysiące albo i dziesiątki tysięcy.

0

C++ nie zdechnie, ale na pewno każdy widzi że jest to mocno niszowy język.
Zresztą czasy języków uniwersalnych chyba się już skończyły - jakoś tak z początkiem ery Internetu.

Żeby nie bić piany bez potrzeby lista ficzerów z C++0x (stara nazwa C++11) w VS 2010:
http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=480

http://blogs.msdn.com/b/vcblog/archive/2008/10/28/lambdas-auto-and-static-assert-c-0x-features-in-vc10-part-1.aspx
http://blogs.msdn.com/b/vcblog/archive/2009/02/03/rvalue-references-c-0x-features-in-vc10-part-2.aspx
http://blogs.msdn.com/b/vcblog/archive/2009/04/22/decltype-c-0x-features-in-vc10-part-3.aspx

Na razie co wydaje mi się na pewno warte użycia to:

Szkoda że nie przeszły moduły. Ale jest to tak obcy światu C++ temat że pewnie już nigdy nie przejdzie.
Dla mnie używanie #include to jakaś straszna zaszłość.

Co do większego wsparcia to wystarczy poczekać na VS 2012 - C++ będzie dostępne także w wersji Express:
http://blogs.msdn.com/b/visualstudio/archive/2012/06/08/visual-studio-express-2012-for-windows-desktop.aspx

Dokładniejsza lista wsparcia standardu w VS:
http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

0

W komentarzu by mi się nie zmieściło.

Prosze Cie. W Minecraft'cie ilosc wierzcholkow nawet calego swiata nie przekroczy ilosci trojkatow jednej wiekszej sfery sprawdzania kolizji w dajmy na to najnowszym assasin's creedzie.

Proszę Cię nr1: do kolizji nie używa się tak szczegółowych modeli, ani nie składają się one z trójkątów.

Proszę Cię nr2:
a) Assassins Creed na moim PC nie osiągnął nawet 3 fps, Minecraft może 60+. Z d**y porównanie.
b) Na laptopie mam intelową kartę graficzną, na której Minecraft osiąga ~12 fps - zmieniłem rozmiar textur na 8x8 (4 razy mniejsze) i podskoczyła wydajność drukrotnie.

Proszę Cię nr3:
Srsly próbujesz przyrównać pracę jednego hobbysty, robiącego grę samotnie w czasie wolnym, do pracy grupy zatrudnionych specjalistów/profesjonalistów?

0
vpiotr napisał(a):

C++ nie zdechnie, ale na pewno każdy widzi że jest to mocno niszowy język.
Zresztą czasy języków uniwersalnych chyba się już skończyły - jakoś tak z początkiem ery Internetu.

Mam pytanie, gdzie teraz głównie używa sie C++?
I czy Java i C# to nie są języki uniwersalne?:)

0

W najnowszym gcc na dzień dziesiejszy: http://gcc.gnu.org/gcc-4.7/cxx0x_status.html - prawie wszystko oprócz wielowątkowości.

0

Nie zrozumiałeś tego co napisałem. Do kolizji używa się sfer i prostopadłościanów, powiedziałem, że ilość trójkątów całego świata w minecraft'cie nie jest większa od ilości trójkątów które znajdują się w jednej większej sferze kolizji.

Oczywiście, że jest z d**y porównanie bo źle je rozumiesz. Jak już wspomniałem chodzi o ilość trójkątów renderowanych. Dlatego Minecraft może osiągnąć taką ilość fpsów, bo na każdy obiekt jest ich mało. A to co powiedziałeś o wydajności, że wzrosła dwukrotnie, to właśnie dlatego, że kod pisany w Javie nie jest na tyle dobrze optymalizowany ( nie zrzucam winy na programistę, tylko na narzędzie ).

Otóż porównuję narzędzia, nie programistów. Każdy z tych specjalistów, to hobbyści, poza tym, porównujemy działanie silnika do działania silnika, a nie grafikę do grafiki, bo rzadko się zdarza żeby programista był zarazem grafikiem.

Ciężko się tu rozmawia..

0

A to co powiedziałeś o wydajności, że wzrosła dwukrotnie, to właśnie dlatego, że kod pisany w Javie nie jest na tyle dobrze optymalizowany ( nie zrzucam winy na programistę, tylko na narzędzie ).

Wydajność podskoczyła 2x po zmniejszeniu rozmiaru tekstur. A więc, ekspercie od siedmiu boleści, wąskim gardłem była szybkość wypełniania tekselami w procesorze graficznym, bo po stronie kodu Javowego było tyle samo roboty.

Srsly próbujesz przyrównać pracę jednego hobbysty, robiącego grę samotnie w czasie wolnym, do pracy grupy zatrudnionych specjalistów/profesjonalistów?

Hmm, hobbysty w czasie wolnym? :p Teraz to on już pracuje chyba full-time nad swoim dziełem. Co nie zmienia faktu, że porównywanie Minecrafta z budżetem pewnie z milion dolców czy max parę milionów do czołowych FPSów, które albo mają miliardowe zyski, albo korzystają z gotowych silników typu Unreal Engine wykorzystywanych przez dziesiątki gier naraz jest zupełnie nie na miejscu.

Dla porównania podam wam gierkę napisaną w C++ opartą o voxele czyli coś podobnego jak w Minecrafcie, z tą różnicą że w Minecrafcie "voxelem" jest jeden klocek. Ta gra to Ace of Spades: http://ace-spades.com/ i wykorzystuje ona silnik voxlap Kena Silvermana, tego samego, który machnął silnik do Duke Nukem 3D. Oceńcie grafikę w Minecrafcie i Ace of Spades i na tej podstawie powiedzcie, który język się bardziej nadaje do tworzenia gier.

Jeszcze jedna sprawa: Minecraft czy Ace of Spades różnią się od typowych gier pewną dość ważną kwestią: w typowych grach świat jest statyczny, nie da się go zburzyć, a już na pewno zbudować. Co prawda w Battlefieldzie niby walą się domy, ale to i tak pikuś w porównaniu z tym co można zrobić w Minecrafcie. Z tego powodu w Minecrafcie nie da się przeliczyć widoczności wstępnie i zrobić map widoczności czy podziału na portale, co znacznie zwiększyłoby wydajność.

0
anonim1 napisał(a):
vpiotr napisał(a):

C++ nie zdechnie, ale na pewno każdy widzi że jest to mocno niszowy język.
Zresztą czasy języków uniwersalnych chyba się już skończyły - jakoś tak z początkiem ery Internetu.

Mam pytanie, gdzie teraz głównie używa sie C++?
I czy Java i C# to nie są języki uniwersalne?:)

A są?

0

To teraz trzeba by zdefiniować co to język uniwersalny:-P a co do mojego pierwszego pytania, to gdzie się teraz używa c++?

0
anonim1 napisał(a):

To teraz trzeba by zdefiniować co to język uniwersalny:-P a co do mojego pierwszego pytania, to gdzie się teraz używa c++?

Język uniwersalny?
Język w którym możesz napisać dowolną aplikację.
Kiedyś nie było telefonów czy TV które nastolatek może sobie oprogramować, nie było JavaScript, wszystko robiło się na desktopie i jeden język wystarczał. Teraz doszły webdev, smartphone, GPGPU, języki skryptowe.
Java czy C# obecnie zabierają chyba większość rynku, ale nie są uniwersalne, nadal potrzebują JavaScriptu na kliencie, powstają języki oparte na JVM / .NET, GPU nie programuje się w Javie tylko w specjalnym języku, w bankowości i finansach nadal są używane COBOL, RPG i C++...

Gdzie jest używane C++
Tam gdzie Qt i wxWidgets, poza tym gry, Smart TV, platforma embedded i przetwarzanie transakcji giełdowych.

http://qt.nokia.com/qt-in-use
http://qt.nokia.com/qt-in-use/ambassadors/showcase/
http://www.wxwidgets.org/about/screensh.htm

0

Dziękuję za odpowiedź, ale mam jeszcze jedno, dosyć naiwne pytanie, ale nie jestem jeszcze zbyt dobrze obeznany w temacie. Czy w Polsce jest możliwość znalezienia ciekawej pracy jako programista C++, QT?

0
anonim1 napisał(a):

Dziękuję za odpowiedź, ale mam jeszcze jedno, dosyć naiwne pytanie, ale nie jestem jeszcze zbyt dobrze obeznany w temacie. Czy w Polsce jest możliwość znalezienia ciekawej pracy jako programista C++, QT?

Poza Samsungiem niewiele jest ofert.

0

Myślę więc że ten krótki offtop pokazuje, że jednak niestety c++ jest w odwrocie i nawet jakieś zmiany mogą zbytnio tej sytuacji nie zmienić. No chyba że za granicą sytuacja wygląda nieco inaczej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1